diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000000000000000000000000000000000000..c6a8b8ce401e703b3bf04ea1b53031f9c36be533
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,4 @@
+# Enable style checks on source files
+*.h   hooks.style=uncrustify
+*.cpp hooks.style=uncrustify
+*.hpp hooks.style=uncrustify
diff --git a/scripts/init.sh b/scripts/init.sh
new file mode 100755
index 0000000000000000000000000000000000000000..08398dbc16b26ec20c6c1fd4b5b26bae05e04cde
--- /dev/null
+++ b/scripts/init.sh
@@ -0,0 +1,45 @@
+# Get script directory
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+DIR=$SCRIPT_DIR/..
+source $SCRIPT_DIR/base/download_file_with_cmake.sh
+
+### Init git hooks ###
+
+# Check for uncrustify
+UNCRUSTIFY_LOCATION=`which uncrustify`
+if [ -z "$UNCRUSTIFY_LOCATION" ]; then
+	if [ "$OSTYPE" == 'msys' ]; then
+		mkdir -vp ~/bin
+		export PATH=$PATH:~/bin
+		download_file http://sourceforge.net/projects/uncrustify/files/uncrustify/uncrustify-0.59/uncrustify-0.59-win32.zip/download ./uncrustify-0.59-win32.zip
+		7za x uncrustify-0.59-win32.zip
+		mv uncrustify-0.59-win32/uncrustify.exe ~/bin
+		rm -r uncrustify-0.59-win32*
+		if [ ! -f ~/bin/uncrustify.exe ]; then
+			echo "Error downloading uncrustify! Git hooks not set."
+		else
+			UNCRUSTIFY_LOCATION=~/bin/uncrustify.exe
+		fi
+	else
+		echo "Please install uncrustify (http://uncrustify.sourceforge.net) to setup git hooks."
+		exit 1
+	fi
+fi
+
+cd $DIR
+# Enable git hooks
+# Does not work on Windows at the moment
+if [ ! "$OSTYPE" == 'msys' ]; then
+	cd .git/hooks
+	git init
+	cd ../..
+	git fetch origin
+	cd .git/hooks
+	git pull .. remotes/origin/hooks
+	cd $DIR
+
+	# Set git configs for running uncrustify
+	git config --add --bool hooks.uncrustify true
+	git config hooks.uncrustify.path $UNCRUSTIFY_LOCATION
+	git config hooks.uncrustify.conf $SCRIPT_DIR/style/uncrustify.cfg
+fi
diff --git a/scripts/style/uncrustify.cfg b/scripts/style/uncrustify.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..394274a2d794d3f9b782ddd5c66e364f29eaee32
--- /dev/null
+++ b/scripts/style/uncrustify.cfg
@@ -0,0 +1,123 @@
+indent_align_string=false
+indent_braces=false
+indent_braces_no_func=false
+indent_brace_parent=false
+indent_namespace=false
+indent_extern=false
+indent_class=true
+indent_class_colon=true
+indent_else_if=false
+indent_func_call_param=false
+indent_func_def_param=false
+indent_func_proto_param=false
+indent_func_class_param=false
+indent_func_ctor_var_param=false
+indent_template_param=false
+indent_func_param_double=false
+indent_relative_single_line_comments=false
+indent_col1_comment=false
+indent_access_spec_body=false
+indent_paren_nl=false
+indent_comma_paren=false
+indent_bool_paren=false
+indent_square_nl=false
+indent_preserve_sql=false
+indent_align_assign=true
+sp_balance_nested_parens=false
+align_keep_tabs=false
+align_with_tabs=false
+align_on_tabstop=false
+align_number_left=false
+align_func_params=false
+align_same_func_call_params=false
+align_var_def_colon=false
+align_var_def_attribute=false
+align_var_def_inline=false
+align_right_cmt_mix=false
+align_on_operator=false
+align_mix_var_proto=false
+align_single_line_func=false
+align_single_line_brace=false
+align_nl_cont=false
+align_left_shift=true
+nl_collapse_empty_body=false
+nl_assign_leave_one_liners=false
+nl_class_leave_one_liners=true
+nl_enum_leave_one_liners=true
+nl_getset_leave_one_liners=true
+nl_func_leave_one_liners=true
+nl_if_leave_one_liners=false
+nl_multi_line_cond=false
+nl_multi_line_define=false
+nl_before_case=false
+nl_after_case=false
+nl_after_return=false
+nl_after_semicolon=true
+nl_after_brace_open=false
+nl_after_brace_open_cmt=false
+nl_after_vbrace_open=false
+nl_after_brace_close=false
+nl_define_macro=false
+nl_squeeze_ifdef=false
+nl_ds_struct_enum_cmt=false
+nl_ds_struct_enum_close_brace=false
+nl_create_if_one_liner=false
+nl_create_for_one_liner=false
+nl_create_while_one_liner=false
+ls_for_split_full=false
+ls_func_split_full=true
+nl_after_multiline_comment=false
+eat_blanks_after_open_brace=true
+eat_blanks_before_close_brace=true
+mod_pawn_semicolon=false
+mod_full_paren_if_bool=false
+mod_remove_extra_semicolon=true
+mod_sort_import=false
+mod_sort_using=false
+mod_sort_include=true
+mod_move_case_break=false
+mod_remove_empty_return=true
+cmt_indent_multi=true
+cmt_c_group=false
+cmt_c_nl_start=false
+cmt_c_nl_end=false
+cmt_cpp_group=false
+cmt_cpp_nl_start=false
+cmt_cpp_nl_end=false
+cmt_cpp_to_c=false
+cmt_star_cont=false
+cmt_multi_check_last=true
+cmt_insert_before_preproc=false
+pp_indent_at_level=false
+pp_region_indent_code=false
+pp_if_indent_code=false
+pp_define_at_level=false
+input_tab_size=4
+code_width=100
+nl_max=2
+mod_add_long_ifdef_else_comment=10
+indent_with_tabs=1
+sp_arith=add
+sp_assign=add
+sp_enum_assign=add
+sp_bool=add
+sp_compare=add
+sp_before_ptr_star=remove
+sp_after_ptr_star=add
+nl_end_of_file=add
+nl_struct_brace=add
+nl_if_brace=add
+nl_brace_else=add
+nl_elseif_brace=add
+nl_else_brace=add
+nl_for_brace=add
+nl_while_brace=add
+nl_switch_brace=add
+nl_namespace_brace=add
+nl_class_brace=add
+nl_fdef_brace=add
+mod_full_brace_for=remove
+mod_full_brace_if=remove
+mod_full_brace_while=remove
+mod_paren_on_return=remove
+pp_indent=remove
\ No newline at end of file