diff --git a/.project b/.project
new file mode 100644
index 0000000..962b9c1
--- /dev/null
+++ b/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.statet-eutils</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/.settings/org.eclipse.core.runtime.prefs b/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 0000000..5a0ad22
--- /dev/null
+++ b/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/autonature/_build/org.eclipse.statet.eutils.autonature-feature/.project b/autonature/_build/org.eclipse.statet.eutils.autonature-feature/.project
new file mode 100644
index 0000000..122bb5b
--- /dev/null
+++ b/autonature/_build/org.eclipse.statet.eutils.autonature-feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.statet.eutils.autonature-feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/autonature/_build/org.eclipse.statet.eutils.autonature-feature/build.properties b/autonature/_build/org.eclipse.statet.eutils.autonature-feature/build.properties
new file mode 100644
index 0000000..4fc35c8
--- /dev/null
+++ b/autonature/_build/org.eclipse.statet.eutils.autonature-feature/build.properties
@@ -0,0 +1,2 @@
+bin.includes= feature.xml,\
+              feature.properties
diff --git a/autonature/_build/org.eclipse.statet.eutils.autonature-feature/feature.properties b/autonature/_build/org.eclipse.statet.eutils.autonature-feature/feature.properties
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/autonature/_build/org.eclipse.statet.eutils.autonature-feature/feature.properties
diff --git a/autonature/_build/org.eclipse.statet.eutils.autonature-feature/feature.xml b/autonature/_build/org.eclipse.statet.eutils.autonature-feature/feature.xml
new file mode 100644
index 0000000..ec925fe
--- /dev/null
+++ b/autonature/_build/org.eclipse.statet.eutils.autonature-feature/feature.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.statet.eutils.autonature"
+      version="0.2.0.qualifier"
+      label="Auto Project Configuration"
+      provider-name="Eclipse.org"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1">
+
+   <description url="https://www.eclipse.org/statet">
+      Utility to configure projects (natures) automatically dependent on content types of files.
+   </description>
+
+   <copyright>
+      Copyright (c) 2014, 2017 Stephan Wahlbrink and others. All rights reserved.
+   </copyright>
+
+   <license url="%license_url">
+      %license_text
+   </license>
+
+   <plugin
+         id="org.eclipse.statet.eutils.autonature"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/autonature/_build/repo/category.xml b/autonature/_build/repo/category.xml
new file mode 100644
index 0000000..cd5fc27
--- /dev/null
+++ b/autonature/_build/repo/category.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<site>
+	<category-def name="org.eclipse.statet.utils" label="StatET - Utilities"/>
+	
+	<feature id="org.eclipse.statet.eutils.autonature" version="0.0.0">
+		<category name="org.eclipse.statet.utils"/>
+	</feature>
+	
+</site>
diff --git a/autonature/org.eclipse.statet.eutils.autonature/.classpath b/autonature/org.eclipse.statet.eutils.autonature/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/autonature/org.eclipse.statet.eutils.autonature/.gitignore b/autonature/org.eclipse.statet.eutils.autonature/.gitignore
new file mode 100644
index 0000000..7447f89
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/.gitignore
@@ -0,0 +1 @@
+/bin
\ No newline at end of file
diff --git a/autonature/org.eclipse.statet.eutils.autonature/.project b/autonature/org.eclipse.statet.eutils.autonature/.project
new file mode 100644
index 0000000..a961502
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.statet.eutils.autonature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/autonature/org.eclipse.statet.eutils.autonature/.settings/org.eclipse.core.resources.prefs b/autonature/org.eclipse.statet.eutils.autonature/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/autonature/org.eclipse.statet.eutils.autonature/.settings/org.eclipse.core.runtime.prefs b/autonature/org.eclipse.statet.eutils.autonature/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 0000000..5a0ad22
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/autonature/org.eclipse.statet.eutils.autonature/.settings/org.eclipse.jdt.core.prefs b/autonature/org.eclipse.statet.eutils.autonature/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..ccb1eaa
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,325 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=85
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
+org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=2
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=1
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=2
+org.eclipse.jdt.core.formatter.blank_lines_before_package=1
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=100
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=false
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=100
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=false
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/autonature/org.eclipse.statet.eutils.autonature/.settings/org.eclipse.jdt.ui.prefs b/autonature/org.eclipse.statet.eutils.autonature/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..abdf3e0
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,131 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=true
+cleanup.always_use_this_for_non_static_field_access=true
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=false
+cleanup.format_source_code=false
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=true
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=true
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=false
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=false
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=false
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup.use_type_arguments=false
+cleanup_profile=_StatET
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_StatET
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=e
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=\#;java;javax;com.ibm.icu;org.osgi;org.eclipse;;org.eclipse.statet;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=true
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * ${tags}\n */</template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\#\n \# Copyright (c) ${year} ${user} and others.\n # \n # This program and the accompanying materials are made available under the\n # terms of the Eclipse Public License 2.0 which is available at\n # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0\n # which is available at https://www.apache.org/licenses/LICENSE-2.0.\n # \n # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0\n # \n \# Contributors\:\n \#     ${user} - initial API and implementation\n \#\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=*/</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * \n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n */</template><template autoinsert\="false" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=true
+sp_cleanup.always_use_this_for_non_static_field_access=true
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=true
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=false
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=true
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=true
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=false
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=true
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=false
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=false
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+sp_cleanup.use_type_arguments=false
diff --git a/autonature/org.eclipse.statet.eutils.autonature/META-INF/MANIFEST.MF b/autonature/org.eclipse.statet.eutils.autonature/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..fff6a85
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.statet.eutils.autonature;singleton:=true
+Bundle-Version: 0.2.0.qualifier
+Bundle-Vendor: Eclipse.org
+Bundle-Name: StatET EUtils - Auto-Nature
+Bundle-ActivationPolicy: lazy;exclude:="org.eclipse.statet.eutils.autonature.internal.nostart"
+Bundle-Activator: org.eclipse.statet.internal.eutils.autonature.Activator
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.core.runtime;bundle-version="3.10.0",
+ org.eclipse.ui,
+ org.eclipse.core.resources
+Import-Package: com.ibm.icu.text,
+ org.eclipse.statet.ecommons.ui.dialogs,
+ org.eclipse.statet.ecommons.ui.util,
+ org.eclipse.statet.ecommons.ui.viewers,
+ org.eclipse.statet.ecommons.ui.workbench,
+ org.eclipse.statet.jcommons.collections
+Export-Package: org.eclipse.statet.eutils.autonature.core
diff --git a/autonature/org.eclipse.statet.eutils.autonature/about.html b/autonature/org.eclipse.statet.eutils.autonature/about.html
new file mode 100644
index 0000000..7206cec
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/about.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+		"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>December 1, 2017</p>
+<h3>License</h3>
+
+<p>
+	The Eclipse Foundation makes available all content in this plug-in
+	(&quot;Content&quot;). Unless otherwise indicated below, the Content
+	is provided to you under the terms and conditions of the Eclipse
+	Public License Version 2.0 (&quot;EPL&quot;). A copy of the EPL is
+	available at <a href="https://www.eclipse.org/legal/epl-2.0">https://www.eclipse.org/legal/epl-2.0</a>.
+	For purposes of the EPL, &quot;Program&quot; will mean the Content.
+</p>
+
+<p>
+	If you did not receive this Content directly from the Eclipse
+	Foundation, the Content is being redistributed by another party
+	(&quot;Redistributor&quot;) and different terms and conditions may
+	apply to your use of any object code in the Content. Check the
+	Redistributor's license that was provided with the Content. If no such
+	license exists, contact the Redistributor. Unless otherwise indicated
+	below, the terms and conditions of the EPL still apply to any source
+	code in the Content and such source code may be obtained at <a
+	href="https://www.eclipse.org/">https://www.eclipse.org</a>.
+</p>
+
+</body>
+</html>
diff --git a/autonature/org.eclipse.statet.eutils.autonature/build.properties b/autonature/org.eclipse.statet.eutils.autonature/build.properties
new file mode 100644
index 0000000..0dd195d
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/build.properties
@@ -0,0 +1,10 @@
+source..= src/
+output..= bin/
+javacDefaultEncoding..= UTF-8
+
+bin.includes= META-INF/,\
+              plugin.xml,\
+              plugin.properties,\
+              .,\
+              about.html
+src.includes= .settings/org.eclipse.core.resources.prefs
diff --git a/autonature/org.eclipse.statet.eutils.autonature/plugin.properties b/autonature/org.eclipse.statet.eutils.autonature/plugin.properties
new file mode 100644
index 0000000..ab51679
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/plugin.properties
@@ -0,0 +1,17 @@
+ #=============================================================================#
+ # Copyright (c) 2007, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================#
+
+preferencePages_name= Auto Project Configuration
+
+commands_DetectAndConfigureProject_name= Detect and Configure Project...
diff --git a/autonature/org.eclipse.statet.eutils.autonature/plugin.xml b/autonature/org.eclipse.statet.eutils.autonature/plugin.xml
new file mode 100644
index 0000000..978c2b2
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/plugin.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+ #=============================================================================#
+ # Copyright (c) 2007, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================#
+-->
+
+<plugin>
+   
+   <extension-point id="org.eclipse.statet.autonature.AutoConfigurations" 
+         name="Auto Project Configurations"
+         schema="schema/AutoConfigurations.exsd"/>
+   
+   <extension
+         point="org.eclipse.ui.startup">
+      <startup
+            class="org.eclipse.statet.internal.eutils.autonature.nostart.AutoNatureStartup">
+      </startup>
+   </extension>
+   
+   <extension
+         point="org.eclipse.ui.keywords">
+      <keyword
+            id="org.eclipse.statet.autonature.keywords.project"
+            label="project nature">
+      </keyword>
+   </extension>
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+            id="org.eclipse.statet.autonature.preferencePages.Config"
+            category="org.eclipse.ui.preferencePages.Workspace"
+            class="org.eclipse.statet.internal.eutils.autonature.AutoNaturePreferencePage"
+            name="%preferencePages_name">
+         <keywordReference
+               id="org.eclipse.statet.autonature.keywords.project">
+         </keywordReference>
+      </page>
+   </extension>
+   
+   <extension
+         point="org.eclipse.ui.commands">
+      <command
+            id="org.eclipse.statet.autonature.commands.DetectAndConfigureProject"
+            categoryId="org.eclipse.ui.category.project"
+            name="%commands_DetectAndConfigureProject_name">
+      </command>
+   </extension>
+   <extension
+         point="org.eclipse.ui.handlers">
+      <handler
+            commandId="org.eclipse.statet.autonature.commands.DetectAndConfigureProject"
+            class="org.eclipse.statet.internal.eutils.autonature.wizards.ConfigureProjectHandler">
+         <activeWhen>
+            <with
+                  variable="activeMenuSelection">
+               <or>
+                  <and>
+                     <count
+                           value="1"/>
+                     <iterate>
+                        <adapt
+                              type="org.eclipse.core.resources.IProject"/>
+                     </iterate>
+                  </and>
+                  <and>
+                     <count
+                           value="!"/>
+                     <with
+                           variable="activeSelection">
+                        <count
+                              value="1"/>
+                        <iterate>
+                           <adapt
+                                 type="org.eclipse.core.resources.IProject"/>
+                        </iterate>
+                     </with>
+                  </and>
+               </or>
+            </with>
+         </activeWhen>
+      </handler>
+   </extension>
+   
+   <extension
+         point="org.eclipse.ui.menus">
+      <menuContribution
+            locationURI="popup:org.eclipse.ui.projectConfigure">
+         <command
+               commandId="org.eclipse.statet.autonature.commands.DetectAndConfigureProject"
+               style="push">
+         </command>
+      </menuContribution>
+   </extension>
+   
+</plugin>
diff --git a/autonature/org.eclipse.statet.eutils.autonature/schema/AutoConfigurations.exsd b/autonature/org.eclipse.statet.eutils.autonature/schema/AutoConfigurations.exsd
new file mode 100644
index 0000000..94d6b36
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/schema/AutoConfigurations.exsd
@@ -0,0 +1,154 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<schema targetNamespace="org.eclipse.statet.autonature" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema id="AutoConfigurations"
+               plugin="org.eclipse.statet.eutils.autonature"
+               name="Auto Project Configurations"/>
+      </appinfo>
+      <documentation>
+         This extension-point allows to define project configurations automatically performed
+         on the specified events.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <choice minOccurs="1" maxOccurs="unbounded">
+            <element ref="onFileContent"/>
+         </choice>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="onFileContent">
+      <annotation>
+         <documentation>
+            Performed if a file with the specified content type is changed.
+         </documentation>
+      </annotation>
+      <complexType>
+         <choice>
+            <element ref="ensureProjectNature" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="runProjectConfigurator" minOccurs="0" maxOccurs="unbounded"/>
+         </choice>
+         <attribute name="contentTypeId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of the content type to handle.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="identifier" basedOn="org.eclipse.core.contenttype.contentTypes/content-type/@id"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="enable" type="boolean">
+            <annotation>
+               <documentation>
+                  If the it should be enabled by default.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="ensureProjectNature">
+      <annotation>
+         <documentation>
+            Installs the specified project nature, if it is missing.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="natureId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="identifier" basedOn="org.eclipse.core.resources.natures/@id"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="runProjectConfigurator">
+      <annotation>
+         <documentation>
+            Asks the specified project configurator whether/to configure the project.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="label" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.statet.eutils.autonature.IProjectConfigurator"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="natureId" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="identifier" basedOn="org.eclipse.core.resources.natures/@id"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         0.1
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright (c) 2014, 2017 Stephan Wahlbrink and others.
+
+This program and the accompanying materials are made available under the
+terms of the Eclipse Public License 2.0 which is available at
+https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+which is available at https://www.apache.org/licenses/LICENSE-2.0.
+
+SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+
+Contributors:
+    Stephan Wahlbrink &lt;sw@wahlbrink.eu&gt; - initial API and implementation
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/eutils/autonature/core/ProjectConfigurator.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/eutils/autonature/core/ProjectConfigurator.java
new file mode 100644
index 0000000..f843966
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/eutils/autonature/core/ProjectConfigurator.java
@@ -0,0 +1,33 @@
+/*=============================================================================#
+ # Copyright (c) 2016, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.eutils.autonature.core;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+
+public interface ProjectConfigurator {
+	
+	
+	byte NOT_CONFIGURABLE= 0;
+	byte ALREADY_CONFIGURED= 1;
+	byte CONFIGURABLE= 2;
+	
+	
+	byte check(IProject project, IProgressMonitor monitor);
+	
+	void configure(IProject project, IProgressMonitor monitor);
+	
+}
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/Activator.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/Activator.java
new file mode 100644
index 0000000..d60f617
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/Activator.java
@@ -0,0 +1,124 @@
+/*=============================================================================#
+ # Copyright (c) 2014, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autonature;
+
+import org.osgi.framework.BundleContext;
+
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.ILog;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin implements IPreferenceChangeListener {
+	
+	
+	public static final String BUNDLE_ID= "org.eclipse.statet.eutils.autonature"; //$NON-NLS-1$
+	
+	public static final String ENABLED_PREF_KEY= "enabled"; //$NON-NLS-1$
+	
+	
+	private static Activator instance;
+	
+	/**
+	 * Returns the shared plug-in instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getInstance() {
+		return instance;
+	}
+	
+	public static void log(final IStatus status) {
+		final Activator plugin= getInstance();
+		if (plugin != null) {
+			final ILog log= plugin.getLog();
+			if (log != null) {
+				log.log(status);
+			}
+		}
+	}
+	
+	
+	private ConfigManager configManager;
+	private ResourceListener listener;
+	
+	
+	public Activator() {
+	}
+	
+	
+	@Override
+	public void start(final BundleContext context) throws Exception {
+		super.start(context);
+		instance= this;
+		
+		this.configManager= new ConfigManager();
+		
+		InstanceScope.INSTANCE.getNode(BUNDLE_ID).addPreferenceChangeListener(this);
+	}
+	
+	@Override
+	public void stop(final BundleContext context) throws Exception {
+		instance= null;
+		super.stop(context);
+	}
+	
+	
+	public void runStartup() {
+		updateMonitor(true);
+	}
+	
+	@Override
+	public void preferenceChange(final PreferenceChangeEvent event) {
+		if (event.getKey().equals(ENABLED_PREF_KEY)) {
+			updateMonitor(false);
+		}
+	}
+	
+	public ConfigManager getConfigManager() {
+		return this.configManager;
+	}
+	
+	private void updateMonitor(final boolean startup) {
+		final IWorkspace workspace= ResourcesPlugin.getWorkspace();
+		final boolean enabled= Platform.getPreferencesService().getBoolean(BUNDLE_ID, ENABLED_PREF_KEY, true, null);
+		synchronized (this) {
+			if (enabled) {
+				if (this.listener == null) {
+					this.listener= new ResourceListener(this.configManager);
+				}
+				workspace.addResourceChangeListener(this.listener, IResourceChangeEvent.POST_CHANGE);
+				// TODO use save participant
+				// if (startup) {
+				// }
+			}
+			else {
+				if (this.listener != null) {
+					workspace.removeResourceChangeListener(this.listener);
+				}
+			}
+		}
+	}
+}
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/AutoConfig.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/AutoConfig.java
new file mode 100644
index 0000000..44b0b6e
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/AutoConfig.java
@@ -0,0 +1,93 @@
+/*=============================================================================#
+ # Copyright (c) 2014, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autonature;
+
+import java.util.Collections;
+import java.util.List;
+
+
+public abstract class AutoConfig {
+	
+	
+	static class Dummy extends AutoConfig {
+		
+		public Dummy(final String id) {
+			super(id, Collections.<Task>emptyList());
+		}
+		
+		@Override
+		public String getLabel() {
+			return null;
+		}
+		
+	}
+	
+	
+	private final String id;
+	
+	private final String enabledPrefKey;
+	
+	private final List<Task> tasks;
+	
+	
+	public AutoConfig(final String id, final List<Task> tasks) {
+		this.id= id;
+		this.enabledPrefKey= id + ".enabled";
+		this.tasks= tasks;
+	}
+	
+	
+	public String getId() {
+		return this.id;
+	}
+	
+	public String getEnabledPrefKey() {
+		return this.enabledPrefKey;
+	}
+	
+	public boolean isAvailable() {
+		if (getLabel() == null) {
+			return false;
+		}
+		for (final Task task : this.tasks) {
+			if (!task.isAvailable()) {
+				return false;
+			}
+		}
+		return true;
+	}
+	
+	public boolean isSupported(final byte mode) {
+		for (final Task task : this.tasks) {
+			if (!task.isSupported(mode)) {
+				return false;
+			}
+		}
+		return true;
+	}
+	
+	public abstract String getLabel();
+	
+	public List<Task> getTasks() {
+		return this.tasks;
+	}
+	
+	
+	@Override
+	public String toString() {
+		return this.id;
+	}
+	
+}
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/AutoNaturePreferencePage.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/AutoNaturePreferencePage.java
new file mode 100644
index 0000000..e93d4e5
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/AutoNaturePreferencePage.java
@@ -0,0 +1,164 @@
+/*=============================================================================#
+ # Copyright (c) 2014, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autonature;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.osgi.service.prefs.BackingStoreException;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IPreferencesService;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.statushandlers.StatusManager;
+
+import org.eclipse.statet.ecommons.ui.util.LayoutUtil;
+import org.eclipse.statet.ecommons.ui.viewers.ViewerUtils.CheckboxTableComposite;
+
+
+public class AutoNaturePreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+	
+	
+	private Button enableButton;
+	
+	private CheckboxTableViewer entryViewer;
+	
+	private List<AutoConfig> configs;
+	
+	
+	public AutoNaturePreferencePage() {
+	}
+	
+	
+	@Override
+	public void init(final IWorkbench workbench) {
+	}
+	
+	@Override
+	protected Control createContents(final Composite parent) {
+		final Composite composite= new Composite(parent, SWT.NONE);
+		composite.setLayout(LayoutUtil.createCompositeGrid(1));
+		
+		{	this.enableButton= new Button(composite, SWT.CHECK);
+			this.enableButton.setText("Enable automatic project &configuration.");
+			this.enableButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+		}
+		
+		LayoutUtil.addSmallFiller(composite, false);
+		
+		{	final Label label= new Label(composite, SWT.NONE);
+			label.setText("Enable project configuration for:");
+			label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+			
+			final CheckboxTableComposite tableComposite= UIUtils.createContentTypeTable(composite, 1);
+			this.entryViewer= tableComposite.viewer;
+		}
+		
+		Dialog.applyDialogFont(composite);
+		
+		loadConfigs();
+		loadPrefs();
+		
+		return composite;
+	}
+	
+	private void loadConfigs() {
+		final ConfigManager configManager= Activator.getInstance().getConfigManager();
+		this.configs= configManager.getConfigs(ConfigManager.AUTO_MODE);
+		UIUtils.sortConfigs(this.configs);
+		this.entryViewer.setInput(this.configs);
+	}
+	
+	private void loadPrefs() {
+		final IPreferencesService preferences= Platform.getPreferencesService();
+		
+		this.enableButton.setSelection(preferences.getBoolean(
+				Activator.BUNDLE_ID, Activator.ENABLED_PREF_KEY, true, null ));
+		
+		final List<AutoConfig> checked= new ArrayList<>();
+		for (final AutoConfig config : this.configs) {
+			if (preferences.getBoolean(
+					ConfigManager.PREF_QUALIFIER, config.getEnabledPrefKey(), false, null )) {
+				checked.add(config);
+			}
+		}
+		this.entryViewer.setCheckedElements(checked.toArray());
+	}
+	
+	private void savePrefs(final boolean flush) {
+		final IEclipsePreferences node= InstanceScope.INSTANCE.getNode(Activator.BUNDLE_ID);
+		
+		node.putBoolean(Activator.ENABLED_PREF_KEY, this.enableButton.getSelection());
+		
+		final IEclipsePreferences configsNode= InstanceScope.INSTANCE.getNode(ConfigManager.PREF_QUALIFIER);
+		final List<Object> enabled= Arrays.asList(this.entryViewer.getCheckedElements());
+		for (final AutoConfig config : this.configs) {
+			configsNode.putBoolean(config.getEnabledPrefKey(), enabled.contains(config));
+		}
+		
+		if (flush) {
+			try {
+				node.flush();
+			}
+			catch (final BackingStoreException e) {
+				StatusManager.getManager().handle(new Status(IStatus.ERROR, Activator.BUNDLE_ID, -1, 
+						"An error occured when saving the autorun launch configuration.", e));
+			}
+		}
+	}
+	
+	
+	@Override
+	protected void performDefaults() {
+		this.enableButton.setSelection(true);
+		
+		final IEclipsePreferences configsNode= DefaultScope.INSTANCE.getNode(ConfigManager.PREF_QUALIFIER);
+		final List<AutoConfig> checked= new ArrayList<>();
+		for (final AutoConfig config : this.configs) {
+			if (configsNode.getBoolean(config.getEnabledPrefKey(), false)) {
+				checked.add(config);
+			}
+		}
+		this.entryViewer.setCheckedElements(checked.toArray());
+	}
+	
+	@Override
+	protected void performApply() {
+		savePrefs(true);
+	}
+	
+	@Override
+	public boolean performOk() {
+		savePrefs(false);
+		return true;
+	}
+	
+}
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/ConfigManager.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/ConfigManager.java
new file mode 100644
index 0000000..d9eb780
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/ConfigManager.java
@@ -0,0 +1,320 @@
+/*=============================================================================#
+ # Copyright (c) 2014, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autonature;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+import org.eclipse.core.resources.IProjectNatureDescriptor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
+import org.eclipse.core.runtime.preferences.IPreferencesService;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+
+
+public class ConfigManager implements IPreferenceChangeListener {
+	
+	
+	private static final String EXTENSION_POINT_ID= "org.eclipse.statet.autonature.AutoConfigurations"; //$NON-NLS-1$
+	
+	static final String ON_FILE_CONTENT_CONTRIB= "onFileContent"; //$NON-NLS-1$
+	
+	private static final String LABEL_ATTR_NAME= "label"; //$NON-NLS-1$
+	static final String CLASS_ATTR_NAME= "class"; //$NON-NLS-1$
+	
+	private static final String CONTENT_TYPE_ID_ATTR_NAME= "contentTypeId"; //$NON-NLS-1$
+	private static final String ENABLE_ATTR_NAME= "enable"; //$NON-NLS-1$
+	
+	private static final String ENSURE_PROJECT_NATURE_ELEMENT_NAME= "ensureProjectNature"; //$NON-NLS-1$
+	private static final String RUN_PROJECT_CONFIGURATOR_ELEMENT_NAME= "runProjectConfigurator"; //$NON-NLS-1$
+	private static final String NATURE_ID_ATTR_NAME= "natureId"; //$NON-NLS-1$
+	
+	static final String PREF_QUALIFIER= Activator.BUNDLE_ID + "/configurations"; //$NON-NLS-1$
+	
+	public static final byte AUTO_MODE= 1;
+	public static final byte MANUAL_MODE= 2;
+	
+	
+	private static final AutoConfig DISABLED= new AutoConfig.Dummy("disabled");
+	
+	
+	private class UpdateJob extends Job {
+		
+		public UpdateJob() {
+			super("Update Auto Project Configuration");
+			setUser(false);
+			setSystem(true);
+			setPriority(Job.SHORT);
+		}
+		
+		@Override
+		protected IStatus run(final IProgressMonitor monitor) {
+			ConfigManager.this.lock.writeLock().lock();
+			try {
+				updateActiveTasks();
+			}
+			finally {
+				ConfigManager.this.lock.writeLock().unlock();
+			}
+			return Status.OK_STATUS;
+		}
+		
+	}
+	
+	
+	private final Map<String, AutoConfig> contentConfigs= new HashMap<>();
+	
+	private final Map<String, AutoConfig> activeContentTasks= new HashMap<>();
+	
+	private final HashMap<String, NatureTask> natureTasks= new HashMap<>();
+	
+	private final ReentrantReadWriteLock lock= new ReentrantReadWriteLock();
+	
+	private Job updateJob;
+	
+	
+	public ConfigManager() {
+		loadContributions();
+		updateActiveTasks();
+		
+		InstanceScope.INSTANCE.getNode(PREF_QUALIFIER).addPreferenceChangeListener(this);
+	}
+	
+	
+	private void loadContributions() {
+		final IConfigurationElement[] contributions= Platform.getExtensionRegistry().getConfigurationElementsFor(EXTENSION_POINT_ID);
+		final IEclipsePreferences defaultsNode= DefaultScope.INSTANCE.getNode(PREF_QUALIFIER);
+		for (final IConfigurationElement contribution : contributions) {
+			final String name= contribution.getName();
+			if (name.equals(ON_FILE_CONTENT_CONTRIB)) {
+				String contentTypeId= contribution.getAttribute(CONTENT_TYPE_ID_ATTR_NAME);
+				if (contentTypeId == null || contentTypeId.isEmpty()) {
+					continue;
+				}
+				contentTypeId= contentTypeId.intern();
+				final List<Task> tasks= loadTasks(contribution.getChildren());
+				if (tasks.isEmpty()) {
+					continue;
+				}
+				final ContentTypeConfig config= new ContentTypeConfig(contentTypeId, tasks);
+				defaultsNode.putBoolean(config.getEnabledPrefKey(), Boolean.parseBoolean(
+						contribution.getAttribute(ENABLE_ATTR_NAME) ));
+				this.contentConfigs.put(contentTypeId, config);
+			}
+		}
+		
+		for (final NatureTask task : this.natureTasks.values()) {
+			task.finish();
+		}
+	}
+	
+	private List<Task> loadTasks(final IConfigurationElement[] tasksElements) {
+		final List<Task> tasks= new ArrayList<>(tasksElements.length);
+		for (int i= 0; i < tasksElements.length; i++) {
+			final IConfigurationElement taskElement= tasksElements[i];
+			switch (taskElement.getName()) {
+			case ENSURE_PROJECT_NATURE_ELEMENT_NAME: {
+					final String natureId= taskElement.getAttribute(NATURE_ID_ATTR_NAME);
+					if (natureId == null || natureId.isEmpty()) {
+						continue;
+					}
+					tasks.add(getNatureTask(natureId));
+					continue;
+				}
+			case RUN_PROJECT_CONFIGURATOR_ELEMENT_NAME: {
+					final String label= taskElement.getAttribute(LABEL_ATTR_NAME);
+					if (label == null || label.isEmpty()) {
+						continue;
+					}
+					final String className= taskElement.getAttribute(CLASS_ATTR_NAME);
+					if (className == null || className.isEmpty()) {
+						continue;
+					}
+					tasks.add(getConfiguratorTask(label, taskElement));
+					continue;
+				}
+			default:
+				continue;
+			}
+		}
+		checkTasks(tasks);
+		return tasks;
+	}
+	
+	private void checkTasks(final List<Task> tasks) {
+		if (tasks.size() <= 1) {
+			return;
+		}
+		NatureTask prev= null;
+		for (final Task task : tasks) {
+			if (task instanceof NatureTask) {
+				final NatureTask current= (NatureTask) task;
+				if (prev != null) {
+					current.addPrev(prev);
+				}
+				prev= current;
+			}
+		}
+	}
+	
+	private NatureTask getNatureTask(String natureId) {
+		NatureTask task= this.natureTasks.get(natureId);
+		if (task == null) {
+			natureId= natureId.intern();
+			final IProjectNatureDescriptor nature= ResourcesPlugin.getWorkspace().getNatureDescriptor(natureId);
+			task= (nature != null) ? new NatureTask(natureId, nature.getLabel(),
+							Arrays.asList(nature.getRequiredNatureIds()) ) :
+					new NatureTask(natureId, null, Collections.<String>emptyList());
+			this.natureTasks.put(natureId, task);
+			for (final String requiredId : task.getRequiredNatureIds()) {
+				task.addPrev(getNatureTask(requiredId));
+			}
+		}
+		return task;
+	}
+	
+	private ConfiguratorTask getConfiguratorTask(final String label, final IConfigurationElement taskElement) {
+		return new ConfiguratorTask(label, taskElement.getAttribute(NATURE_ID_ATTR_NAME),
+				taskElement );
+	}
+	
+	@Override
+	public synchronized void preferenceChange(final PreferenceChangeEvent event) {
+		if (this.updateJob == null) {
+			this.updateJob= new UpdateJob();
+		}
+		this.updateJob.schedule(100);
+	}
+	
+	private void updateActiveTasks() {
+		final IPreferencesService preferences= Platform.getPreferencesService();
+		for (final Map.Entry<String, AutoConfig> entry : this.contentConfigs.entrySet()) {
+			final AutoConfig config= entry.getValue();
+			this.activeContentTasks.put(entry.getKey(),
+					(preferences.getBoolean(PREF_QUALIFIER, config.getEnabledPrefKey(), false, null)) ?
+							config : DISABLED );
+		}
+	}
+	
+	
+	public List<AutoConfig> getConfigs(final byte mode) {
+		ArrayList<AutoConfig> list;
+		this.lock.readLock().lock();
+		try {
+			list= new ArrayList<>(this.contentConfigs.values());
+		}
+		finally {
+			this.lock.readLock().unlock();
+		}
+		for (final Iterator<AutoConfig> iter= list.iterator(); iter.hasNext();) {
+			final AutoConfig config= iter.next();
+			if (!(config.isAvailable() && config.isSupported(mode))) {
+				iter.remove();
+			}
+		}
+		return list;
+	}
+	
+	public boolean hasActiveConfigs() {
+		this.lock.readLock().lock();
+		try {
+			return !this.activeContentTasks.isEmpty();
+		}
+		finally {
+			this.lock.readLock().unlock();
+		}
+	}
+	
+	public AutoConfig getConfig(IContentType contentType, final byte mode) {
+		this.lock.readLock().lock();
+		try {
+			while (contentType != null) {
+				final AutoConfig config= this.activeContentTasks.get(contentType.getId());
+				if (config != null && config.isSupported(mode)) {
+					return (config != DISABLED) ? config : null;
+				}
+				contentType= contentType.getBaseType();
+			}
+			return null;
+		}
+		finally {
+			this.lock.readLock().unlock();
+		}
+	}
+	
+	
+	public List<String> arrangeNatures(final List<String> natureIds, final int newIdx) {
+		this.lock.readLock().lock();
+		try {
+			Collections.sort(natureIds.subList(newIdx, natureIds.size()));
+			
+			// Insert required
+			ITER_I: for (int i= 0; i < natureIds.size(); i++) {
+				CHECK_I: while(true) {
+					final NatureTask task= this.natureTasks.get(natureIds.get(i));
+					if (task != null) {
+						for (final String requiredId : task.getRequiredNatureIds()) {
+							if (!natureIds.contains(requiredId)) {
+								natureIds.add(i, requiredId);
+								continue CHECK_I;
+							}
+						}
+					}
+					continue ITER_I;
+				}
+			}
+			
+			final int n= natureIds.size();
+			ITER_I: for (int i= 0; i < n; i++) {
+				CHECK_I: for (int counter= n - i; counter > 0; counter--) {
+					final String natureId= natureIds.get(i);
+					final NatureTask task= this.natureTasks.get(natureId);
+					if (task != null) {
+						for (int j= n - 1; j > i; j--) {
+							if (task.isSubsequentTo(natureIds.get(j))) {
+								// move i -> j
+								natureIds.remove(i);
+								natureIds.add(j, natureId);
+								continue CHECK_I; // check new i
+							}
+						}
+					}
+					continue ITER_I; // OK, check i + 1
+				}
+			}
+			return natureIds;
+		}
+		finally {
+			this.lock.readLock().unlock();
+		}
+	}
+	
+}
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/ConfiguratorTask.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/ConfiguratorTask.java
new file mode 100644
index 0000000..65b2d78
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/ConfiguratorTask.java
@@ -0,0 +1,103 @@
+/*=============================================================================#
+ # Copyright (c) 2016, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autonature;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.SubMonitor;
+
+import org.eclipse.statet.eutils.autonature.core.ProjectConfigurator;
+
+
+public class ConfiguratorTask extends Task {
+	
+	
+	private final String label;
+	
+	private final String natureId;
+	
+	private IConfigurationElement configElement;
+	
+	private ProjectConfigurator configurator;
+	
+	
+	public ConfiguratorTask(final String label, final String natureId,
+			final IConfigurationElement configElement) {
+		this.label= label;
+		this.natureId= natureId;
+		this.configElement= configElement;
+	}
+	
+	
+	private synchronized ProjectConfigurator getProjectConfigurator() throws CoreException {
+		if (this.configElement != null) {
+			try {
+				this.configurator= (ProjectConfigurator) this.configElement
+						.createExecutableExtension(ConfigManager.CLASS_ATTR_NAME);
+			}
+			finally {
+				this.configElement= null;
+			}
+		}
+		return this.configurator;
+	}
+	
+	@Override
+	public String getLabel() {
+		return this.label;
+	}
+	
+	@Override
+	public boolean isAvailable() {
+		return (this.label != null);
+	}
+	
+	@Override
+	public boolean isSupported(final byte mode) {
+		return (mode == ConfigManager.MANUAL_MODE);
+	}
+	
+	@Override
+	public byte check(final IProject project, final int flags, final SubMonitor m) throws CoreException {
+		if (this.natureId != null) {
+			try {
+				if (project.hasNature(this.natureId)) {
+					return ProjectConfigurator.ALREADY_CONFIGURED;
+				}
+			}
+			catch (final CoreException e) {}
+		}
+		if ((flags & CONTENT_MATCH) == 0) {
+			return ProjectConfigurator.NOT_CONFIGURABLE;
+		}
+		final ProjectConfigurator configurator= getProjectConfigurator();
+		if (configurator == null) {
+			return 0;
+		}
+		return configurator.check(project, m);
+	}
+	
+	public void configure(final IProject project, final SubMonitor m) {
+		this.configurator.configure(project, m);
+	}
+	
+	
+	@Override
+	public String toString() {
+		return "ConfiguratorTask '" + this.label + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+}
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/ContentFinder.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/ContentFinder.java
new file mode 100644
index 0000000..c9c41a0
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/ContentFinder.java
@@ -0,0 +1,117 @@
+/*=============================================================================#
+ # Copyright (c) 2016, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autonature;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.content.IContentDescription;
+import org.eclipse.core.runtime.content.IContentType;
+
+
+public class ContentFinder implements IResourceVisitor {
+	
+	
+	private final IContainer root;
+	private final Set<IPath> ignoredPaths;
+	
+	private final ConfigManager configManager;
+	private final byte mode;
+	
+	private final List<AutoConfig> configs= new ArrayList<>(); 
+	
+	private final IProgressMonitor monitor;
+	
+	
+	public ContentFinder(final IContainer root, final Set<IPath> ignoredPaths,
+			final ConfigManager configManager, final byte mode,
+			final IProgressMonitor monitor) {
+		this.root= root;
+		this.ignoredPaths= ignoredPaths;
+		this.configManager= configManager;
+		this.mode= mode;
+		this.monitor= monitor;
+	}
+	
+	@Override
+	public boolean visit(final IResource resource) throws CoreException {
+		if (this.monitor.isCanceled()) {
+			throw new OperationCanceledException();
+		}
+		
+		if (resource != this.root && this.ignoredPaths != null) {
+			for (final IPath ignoredDirectory : this.ignoredPaths) {
+				if (ignoredDirectory.equals(resource.getLocation())) {
+					return false;
+				}
+			}
+		}
+		
+		switch (resource.getType()) {
+		case IResource.PROJECT:
+		case IResource.FOLDER:
+			return true;
+		case IResource.FILE:
+			checkFile((IFile) resource);
+			return false;
+		default:
+			return false;
+		}
+		
+	}
+	
+	private void checkFile(final IFile file) {
+		try {
+			final IContentDescription description= file.getContentDescription();
+			if (description == null) {
+				return;
+			}
+			final IContentType contentType= description.getContentType();
+			if (contentType == null) {
+				return;
+			}
+			final AutoConfig config= this.configManager.getConfig(contentType, this.mode);
+			if (config != null) {
+				addTasks(config);
+			}
+		}
+		catch (final CoreException e) {
+		}
+	}
+	
+	protected void addTasks(final AutoConfig config) {
+		if (!this.configs.contains(config)) {
+			this.configs.add(config);
+		}
+	}
+	
+	public boolean hasTasks() {
+		return (!this.configs.isEmpty());
+	}
+	
+	public List<AutoConfig> getConfigs() {
+		return this.configs;
+	}
+	
+}
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/ContentTypeConfig.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/ContentTypeConfig.java
new file mode 100644
index 0000000..b4a97cb
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/ContentTypeConfig.java
@@ -0,0 +1,53 @@
+/*=============================================================================#
+ # Copyright (c) 2014, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autonature;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.content.IContentType;
+
+
+public class ContentTypeConfig extends AutoConfig {
+	
+	
+	private final String contentTypeId;
+	
+	private String label;
+	
+	
+	public ContentTypeConfig(final String contentTypeId, final List<Task> tasks) {
+		super(ConfigManager.ON_FILE_CONTENT_CONTRIB + ':' + contentTypeId, tasks);
+		this.contentTypeId= contentTypeId;
+	}
+	
+	
+	public String getContentTypeId() {
+		return this.contentTypeId;
+	}
+	
+	
+	@Override
+	public String getLabel() {
+		if (this.label == null) {
+			final IContentType contentType= Platform.getContentTypeManager().getContentType(this.contentTypeId);
+			if (contentType != null) {
+				this.label= contentType.getName();
+			}
+		}
+		return this.label;
+	}
+	
+}
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/NatureTask.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/NatureTask.java
new file mode 100644
index 0000000..1e43c63
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/NatureTask.java
@@ -0,0 +1,118 @@
+/*=============================================================================#
+ # Copyright (c) 2014, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autonature;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.SubMonitor;
+
+import org.eclipse.statet.eutils.autonature.core.ProjectConfigurator;
+
+
+public class NatureTask extends Task {
+	
+	
+	private static NatureTask get(final List<NatureTask> tasks, final String natureId) {
+		final int size= tasks.size();
+		for (int i= 0; i < size; i++) {
+			final NatureTask task= tasks.get(i);
+			if (task.getNatureId() == natureId) {
+				return task;
+			}
+		}
+		return null;
+	}
+	
+	
+	private final String natureId;
+	
+	private final String label;
+	
+	private final List<String> required;
+	
+	private final List<NatureTask> prev= new ArrayList<>(4);
+	private final List<NatureTask> prevFlat= new ArrayList<>(8);
+	
+	
+	public NatureTask(final String natureId, final String label, final List<String> required) {
+		this.natureId= natureId;
+		this.label= label;
+		this.required= required;
+	}
+	
+	
+	public String getNatureId() {
+		return this.natureId;
+	}
+	
+	@Override
+	public String getLabel() {
+		return this.label;
+	}
+	
+	@Override
+	public boolean isAvailable() {
+		return (this.label != null);
+	}
+	
+	
+	public List<String> getRequiredNatureIds() {
+		return this.required;
+	}
+	
+	void addPrev(final NatureTask task) {
+		if (!this.prev.contains(task)) {
+			this.prev.add(task);
+		}
+	}
+	
+	void finish() {
+		this.prevFlat.clear();
+		for (int i= 0; i < this.prev.size(); i++) {
+			this.prevFlat.add(this.prev.get(i));
+		}
+		for (int i= 0; i < this.prevFlat.size(); i++) {
+			final List<NatureTask> tasks= this.prevFlat.get(i).prev;
+			for (int j= 0; j < tasks.size(); j++) {
+				final NatureTask task= tasks.get(j);
+				if (task != this && !this.prevFlat.contains(task)) {
+					this.prevFlat.add(task);
+				}
+			}
+		}
+	}
+	
+	boolean isSubsequentTo(final String natureId) {
+		final NatureTask task= get(this.prevFlat, natureId);
+		return (task != null && get(task.prevFlat, this.natureId) == null);
+	}
+	
+	@Override
+	public byte check(final IProject project, final int flags, final SubMonitor m) throws CoreException {
+		return (project.hasNature(this.natureId)) ?
+				ProjectConfigurator.ALREADY_CONFIGURED :
+				ProjectConfigurator.CONFIGURABLE;
+	}
+	
+	
+	@Override
+	public String toString() {
+		return "NatureTask '" + this.natureId + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+}
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/ResourceListener.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/ResourceListener.java
new file mode 100644
index 0000000..3b9cdf0
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/ResourceListener.java
@@ -0,0 +1,155 @@
+/*=============================================================================#
+ # Copyright (c) 2014, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autonature;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.core.runtime.content.IContentDescription;
+import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.osgi.util.NLS;
+
+
+public class ResourceListener implements IResourceChangeListener, IResourceDeltaVisitor {
+	
+	
+	private final ConfigManager configManager;
+	
+	private final Map<IProject, List<AutoConfig>> projectConfigs;
+	
+	private final AtomicInteger counter= new AtomicInteger();
+	
+	private final TaskProcessor taskProcessor= new TaskProcessor();
+	
+	
+	public ResourceListener(final ConfigManager configManager) {
+		this.configManager= configManager;
+		this.projectConfigs= new HashMap<>();
+	}
+	
+	
+	@Override
+	public void resourceChanged(final IResourceChangeEvent event) {
+		if (event.getType() == IResourceChangeEvent.POST_CHANGE
+				&& this.configManager.hasActiveConfigs() ) {
+			this.counter.incrementAndGet();
+			try {
+				event.getDelta().accept(this);
+			}
+			catch (final CoreException e) {
+				Activator.log(new Status(IStatus.ERROR, Activator.BUNDLE_ID, 0,
+						"An error occurred when checking for auto configuration tasks for changed resources.",
+						e ));
+			}
+			finally {
+				if (this.counter.decrementAndGet() == 0) {
+					scheduleTasks();
+				}
+			}
+		}
+	}
+	
+	@Override
+	public boolean visit(final IResourceDelta delta) throws CoreException {
+		IResource resource;
+		switch (delta.getKind()) {
+		case IResourceDelta.ADDED:
+		case IResourceDelta.CHANGED:
+			resource= delta.getResource();
+			if (resource.getType() == IResource.FILE) {
+				checkFile((IFile) resource);
+			}
+			return true;
+		default:
+			return false;
+		}
+	}
+	
+	private void checkFile(final IFile file) {
+		try {
+			final IContentDescription description= file.getContentDescription();
+			if (description == null) {
+				return;
+			}
+			final IContentType contentType= description.getContentType();
+			if (contentType == null) {
+				return;
+			}
+			final AutoConfig config= this.configManager.getConfig(contentType, ConfigManager.AUTO_MODE);
+			if (config != null) {
+				addTasks(file.getProject(), config);
+			}
+		}
+		catch (final CoreException e) {
+		}
+	}
+	
+	private synchronized void addTasks(final IProject project, final AutoConfig config) {
+		List<AutoConfig> configs= this.projectConfigs.get(project);
+		if (configs == null) {
+			configs= new ArrayList<>(8);
+			this.projectConfigs.put(project, configs);
+		}
+		if (!configs.contains(config)) {
+			configs.add(config);
+		}
+	}
+	
+	private synchronized void scheduleTasks() {
+		if (this.projectConfigs.isEmpty()) {
+			return;
+		}
+		final List<Task> tasks= new ArrayList<>();
+		for (final Entry<IProject, List<AutoConfig>> entry : this.projectConfigs.entrySet()) {
+			final IProject project= entry.getKey();
+			try {
+				TaskProcessor.aggregateTasks(project, entry.getValue(), Task.CONTENT_MATCH,
+						tasks, null, null,
+						SubMonitor.convert(null) );
+				
+				if (!tasks.isEmpty()) {
+					this.taskProcessor.add(project, tasks);
+				}
+			}
+			catch (final CoreException e) {
+				Activator.log(new Status(IStatus.ERROR, Activator.BUNDLE_ID, 0,
+						NLS.bind("An error occurred when aggregating auto configuration tasks for project ''{0}''", project),
+						e ));
+			}
+			finally {
+				tasks.clear();
+			}
+		}
+		this.projectConfigs.clear();
+		
+		this.taskProcessor.schedule();
+	}
+	
+}
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/Task.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/Task.java
new file mode 100644
index 0000000..65fbb6a
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/Task.java
@@ -0,0 +1,58 @@
+/*=============================================================================#
+ # Copyright (c) 2014, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autonature;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.SubMonitor;
+
+
+public abstract class Task {
+	
+	
+	public static final int CONTENT_MATCH= 1;
+	
+	
+	/**
+	 * Returns the label of the task (appears in UI).
+	 * 
+	 * @return the label
+	 */
+	public abstract String getLabel();
+	
+	/**
+	 * Returns if all requirements (like dependencies, project natures, ...) are available.
+	 * 
+	 * @return if available
+	 */
+	public abstract boolean isAvailable();
+	
+	public boolean isSupported(final byte mode) {
+		return true;
+	}
+	
+	/**
+	 * Validates if task is required for the specified project.
+	 * 
+	 * @param project
+	 * @param flags TODO
+	 * @param m progress monitor
+	 * @return
+	 * @throws CoreException 
+	 */
+	public abstract byte check(IProject project,
+			int flags, SubMonitor m) throws CoreException;
+	
+}
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/TaskProcessor.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/TaskProcessor.java
new file mode 100644
index 0000000..0ae5d05
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/TaskProcessor.java
@@ -0,0 +1,234 @@
+/*=============================================================================#
+ # Copyright (c) 2014, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autonature;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.osgi.util.NLS;
+
+import org.eclipse.statet.eutils.autonature.core.ProjectConfigurator;
+
+
+public class TaskProcessor {
+	
+	
+	private class ConfigJob extends WorkspaceJob {
+		
+		
+		public ConfigJob() {
+			super("Auto Project Configuration");
+			setUser(false);
+			setRule(ResourcesPlugin.getWorkspace().getRoot());
+		}
+		
+		
+		@Override
+		public IStatus runInWorkspace(final IProgressMonitor monitor) throws CoreException {
+			return TaskProcessor.this.process(monitor);
+		}
+		
+	}
+	
+	
+	public static void aggregateTasks(final IProject project, final List<AutoConfig> configs,
+			final int flags,
+			List<Task> configurableTasks, List<Task> alreadyConfigTasks, List<Task> notConfigTasks,
+			final SubMonitor m) throws CoreException {
+		final int l= configs.size();
+		
+		if (configurableTasks == null) {
+			configurableTasks= new ArrayList<>(l);
+		}
+		if (alreadyConfigTasks == null) {
+			alreadyConfigTasks= new ArrayList<>(l);
+		}
+		if (notConfigTasks == null) {
+			notConfigTasks= new ArrayList<>();
+		}
+		
+		for (int i= 0; i < l; i++) {
+			m.setWorkRemaining(l - i);
+			
+			final AutoConfig config= configs.get(i);
+			if (config.isAvailable()) {
+				for (final Task task : config.getTasks()) {
+					if (!(configurableTasks.contains(task) 
+							|| alreadyConfigTasks.contains(task)
+							|| notConfigTasks.contains(task) )) {
+						switch (task.check(project, flags, m.newChild(1))) {
+						case ProjectConfigurator.CONFIGURABLE:
+							configurableTasks.add(task);
+							break;
+						case ProjectConfigurator.ALREADY_CONFIGURED:
+							alreadyConfigTasks.add(task);
+							break;
+						default:
+							notConfigTasks.add(task);
+							break;
+						}
+					}
+				}
+			}
+		}
+	}
+	
+	public static IStatus process(final IProject project, final Collection<Task> tasks,
+			final SubMonitor m) {
+		try {
+			int taskCount= 0;
+			for (final Task task : tasks) {
+				if (task instanceof ConfiguratorTask) {
+					taskCount++;
+				}
+			}
+			
+			m.beginTask(NLS.bind("Configuring project ''{0}''", project.getName()), 3 + taskCount);
+			final IProjectDescription description= project.getDescription();
+			boolean descriptionChanged= false;
+			
+			final String[] existingNatureIds= description.getNatureIds();
+			final List<String> natureIds= new ArrayList<>(existingNatureIds.length + tasks.size());
+			for (int i= 0; i < existingNatureIds.length; i++) {
+				natureIds.add(existingNatureIds[i]= existingNatureIds[i].intern());
+			}
+			for (final Task task : tasks) {
+				if (task instanceof NatureTask) {
+					final String natureId= ((NatureTask) task).getNatureId();
+					if (!contains(existingNatureIds, natureId)) {
+						natureIds.add(natureId);
+					}
+				}
+			}
+			m.worked(1);
+			
+			if (natureIds.size() > existingNatureIds.length) {
+				final ConfigManager configManager= Activator.getInstance().getConfigManager();
+				configManager.arrangeNatures(natureIds, existingNatureIds.length);
+				description.setNatureIds(natureIds.toArray(new String[natureIds.size()]));
+				descriptionChanged= true;
+			}
+			
+			if (descriptionChanged) {
+				project.setDescription(description, m.newChild(1));
+			}
+			
+			m.setWorkRemaining(taskCount);
+			for (final Task task : tasks) {
+				if (task instanceof ConfiguratorTask) {
+					((ConfiguratorTask) task).configure(project, m.newChild(1));
+				}
+			}
+			
+			return Status.OK_STATUS;
+		}
+		catch (final CoreException e) {
+			return new Status(IStatus.ERROR, Activator.BUNDLE_ID,
+					NLS.bind("An error occurred when configuring project ''{0}''.", project.getName()),
+					e );
+		}
+	}
+	
+	
+	private Map<IProject, List<Task>> projectTasks;
+	
+	private ConfigJob job;
+	
+	
+	public TaskProcessor() {
+		this.projectTasks= new HashMap<>();
+	}
+	
+	
+	public synchronized void add(final IProject project, final List<Task> tasks) {
+		final List<Task> allTasks= this.projectTasks.get(project);
+		if (allTasks == null) {
+			this.projectTasks.put(project, new ArrayList<>(tasks));
+			return;
+		}
+		for (final Task task : tasks) {
+			if (!allTasks.contains(task)) {
+				allTasks.add(task);
+			}
+		}
+	}
+	
+	public synchronized void schedule() {
+		if (this.projectTasks.isEmpty()) {
+			return;
+		}
+		if (this.job == null) {
+			this.job= new ConfigJob();
+		}
+		this.job.schedule();
+	}
+	
+	
+	private IStatus process(final IProgressMonitor monitor) {
+		final Map<IProject, List<Task>> tasks;
+		synchronized (this) {
+			tasks= this.projectTasks;
+			if (tasks.isEmpty()) {
+				return Status.OK_STATUS;
+			}
+			this.projectTasks= new HashMap<>();
+		}
+		
+		final SubMonitor m= SubMonitor.convert(monitor, tasks.size());
+		List<IStatus> status= null;
+		for (final Map.Entry<IProject, List<Task>> entry : tasks.entrySet()) {
+			final IStatus projectStatus= process(entry.getKey(), entry.getValue(),
+					m.newChild(1, SubMonitor.SUPPRESS_NONE) );
+			if (!projectStatus.isOK()) {
+				if (status == null) {
+					status= new ArrayList<>(tasks.size());
+				}
+				status.add(projectStatus);
+			}
+		}
+		
+		if (status != null) {
+			return new MultiStatus(Activator.BUNDLE_ID, 0, status.toArray(new IStatus[status.size()]),
+					(status.size() == 1) ?
+							"The auto project configuration failed for 1 project." :
+							NLS.bind("The auto project configuration failed for {0} projects.", status.size()),
+					null );
+		}
+		return Status.OK_STATUS;
+	}
+	
+	private static boolean contains(final String[] array, final String s) {
+		for (int i= 0; i < array.length; i++) {
+			if (array[i] == s) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+}
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/UIUtils.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/UIUtils.java
new file mode 100644
index 0000000..99a2d2b
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/UIUtils.java
@@ -0,0 +1,117 @@
+/*=============================================================================#
+ # Copyright (c) 2016, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autonature;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import com.ibm.icu.text.Collator;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CellLabelProvider;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.viewers.ViewerCell;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+
+import org.eclipse.statet.ecommons.ui.viewers.ViewerUtils.CheckboxTableComposite;
+
+public class UIUtils {
+	
+	
+	private static class AutoConfigComparator implements Comparator<AutoConfig> {
+		
+		private final Collator collator= Collator.getInstance();
+		
+		@Override
+		public int compare(final AutoConfig o1, final AutoConfig o2) {
+			return this.collator.compare(o1.getLabel(), o2.getLabel());
+		}
+		
+	}
+	
+	private static class TaskComparator implements Comparator<Task> {
+		
+		private final Collator collator= Collator.getInstance();
+		
+		@Override
+		public int compare(final Task o1, final Task o2) {
+			return this.collator.compare(o1.getLabel(), o2.getLabel());
+		}
+		
+	}
+	
+	
+	public static void sortConfigs(final List<AutoConfig> configs) {
+		Collections.sort(configs, new AutoConfigComparator());
+	}
+	
+	public static void sortTasks(final List<Task> configs) {
+		Collections.sort(configs, new TaskComparator());
+	}
+	
+	public static CheckboxTableComposite createContentTypeTable(final Composite parent, final int hSpan) {
+		final CheckboxTableComposite tableComposite= new CheckboxTableComposite(parent,
+				SWT.CHECK | SWT.BORDER | SWT.FULL_SELECTION );
+		
+		final GridData gd= new GridData(SWT.FILL, SWT.FILL, true, true, hSpan, 1);
+		Dialog.applyDialogFont(tableComposite);
+		gd.heightHint= tableComposite.table.getHeaderHeight() + tableComposite.table.getItemHeight() * 10;
+		tableComposite.setLayoutData(gd);
+		
+		tableComposite.viewer.setContentProvider(new ArrayContentProvider());
+		
+		tableComposite.viewer.getTable().setHeaderVisible(true);
+		{	final TableViewerColumn column= tableComposite.addColumn("Content Type",
+					SWT.LEFT, new ColumnWeightData(5, true) );
+			column.setLabelProvider(new CellLabelProvider() {
+				@Override
+				public void update(final ViewerCell cell) {
+					final AutoConfig config= (AutoConfig) cell.getElement();
+					cell.setText(config.getLabel());
+				}
+			});
+		}
+		{	final TableViewerColumn column= tableComposite.addColumn("Project Configuration",
+					SWT.LEFT, new ColumnWeightData(5, true) );
+			column.setLabelProvider(new CellLabelProvider() {
+				@Override
+				public void update(final ViewerCell cell) {
+					final AutoConfig config= (AutoConfig) cell.getElement();
+					final List<Task> tasks= config.getTasks();
+					if (tasks.size() == 1) {
+						cell.setText(tasks.get(0).getLabel());
+					}
+					else {
+						final StringBuilder sb= new StringBuilder();
+						sb.append(tasks.get(0).getLabel());
+						for (int i= 1; i < tasks.size(); i++) {
+							sb.append(" + ");
+							sb.append(tasks.get(i).getLabel());
+						}
+						cell.setText(sb.toString());
+					}
+				}
+			});
+		}
+		
+		return tableComposite;
+	}
+	
+}
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/nostart/AutoNatureStartup.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/nostart/AutoNatureStartup.java
new file mode 100644
index 0000000..b763406
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/nostart/AutoNatureStartup.java
@@ -0,0 +1,39 @@
+/*=============================================================================#
+ # Copyright (c) 2014, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autonature.nostart;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.IPreferencesService;
+import org.eclipse.ui.IStartup;
+
+import org.eclipse.statet.internal.eutils.autonature.Activator;
+
+
+public class AutoNatureStartup implements IStartup {
+	
+	
+	public AutoNatureStartup() {
+	}
+	
+	
+	@Override
+	public void earlyStartup() {
+		final IPreferencesService preferences= Platform.getPreferencesService();
+		if (preferences.getBoolean(Activator.BUNDLE_ID, Activator.ENABLED_PREF_KEY, true, null)) {
+			Activator.getInstance().runStartup();
+		}
+	}
+	
+}
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/wizards/ConfigureProjectHandler.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/wizards/ConfigureProjectHandler.java
new file mode 100644
index 0000000..5621f04
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/wizards/ConfigureProjectHandler.java
@@ -0,0 +1,69 @@
+/*=============================================================================#
+ # Copyright (c) 2016, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autonature.wizards;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.ui.IWorkbenchPart;
+
+import org.eclipse.statet.ecommons.ui.util.UIAccess;
+import org.eclipse.statet.ecommons.ui.workbench.WorkbenchUIUtils;
+
+
+public class ConfigureProjectHandler extends AbstractHandler {
+	
+	
+	public ConfigureProjectHandler() {
+	}
+	
+	
+	private IProject getProject(final Object element) {
+		if (element instanceof IProject) {
+			return (IProject) element;
+		}
+		if (element instanceof IAdaptable) {
+			return ((IAdaptable) element).getAdapter(IProject.class);
+		}
+		return null;
+	}
+	
+	@Override
+	public Object execute(final ExecutionEvent event) throws ExecutionException {
+		final ISelection selection= WorkbenchUIUtils.getCurrentSelection(event.getApplicationContext());
+		if (selection instanceof IStructuredSelection) {
+			final IStructuredSelection structuredSelection= (IStructuredSelection) selection;
+			if (structuredSelection.size() == 1) {
+				final IProject project= getProject(structuredSelection.getFirstElement());
+				if (project != null) {
+					final IWorkbenchPart activePart= WorkbenchUIUtils.getActivePart(event.getApplicationContext());
+					
+					final ConfigureProjectWizard wizard= new ConfigureProjectWizard(project);
+					final WizardDialog dialog= new WizardDialog(
+							(activePart != null) ? activePart.getSite().getShell() : UIAccess.getActiveWorkbenchShell(true),
+							wizard );
+					dialog.open();
+				}
+			}
+		}
+		return null;
+	}
+	
+}
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/wizards/ConfigureProjectWizard.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/wizards/ConfigureProjectWizard.java
new file mode 100644
index 0000000..7b86fe2
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/wizards/ConfigureProjectWizard.java
@@ -0,0 +1,215 @@
+/*=============================================================================#
+ # Copyright (c) 2016, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autonature.wizards;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.core.runtime.jobs.IJobManager;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.statushandlers.StatusManager;
+
+import org.eclipse.statet.ecommons.ui.dialogs.DialogUtils;
+import org.eclipse.statet.internal.eutils.autonature.Activator;
+import org.eclipse.statet.internal.eutils.autonature.AutoConfig;
+import org.eclipse.statet.internal.eutils.autonature.ConfigManager;
+import org.eclipse.statet.internal.eutils.autonature.ContentFinder;
+import org.eclipse.statet.internal.eutils.autonature.Task;
+import org.eclipse.statet.internal.eutils.autonature.TaskProcessor;
+
+
+public class ConfigureProjectWizard extends Wizard {
+	
+	
+	private final IProject project;
+	
+	private final ConfigManager configManager;
+	
+	private ConfigureProjectWizardPage configPage;
+	
+	private List<Task> allTasks;
+	
+	
+	public ConfigureProjectWizard(final IProject project) {
+		this.project= project;
+		this.configManager= Activator.getInstance().getConfigManager();
+		
+		setDialogSettings(DialogUtils.getDialogSettings(Activator.getInstance(), "ConfigureProjectWizard")); //$NON-NLS-1$
+		setWindowTitle("Detect and Add Project Natures");
+		setNeedsProgressMonitor(true);
+	}
+	
+	
+	@Override
+	public void addPages() {
+		this.configPage= new ConfigureProjectWizardPage(this.project);
+		addPage(this.configPage);
+	}
+	
+	
+	void runInit() {
+		if (this.allTasks != null) {
+			return;
+		}
+		try {
+			final List<Task> allTasks= new ArrayList<>();
+			final List<Task> notConfigTasks= new ArrayList<>();
+			final List<Task> alreadyConfigTasks= new ArrayList<>();
+			final List<Task> selectedTasks= new ArrayList<>();
+			
+			getContainer().run(true, true, new IRunnableWithProgress() {
+				@Override
+				public void run(final IProgressMonitor monitor) throws InvocationTargetException {
+					final SubMonitor m= SubMonitor.convert(monitor, 3 + 2);
+					
+					try {
+						if (monitor.isCanceled()) {
+							throw new OperationCanceledException();
+						}
+						
+						final ContentFinder contentFinder= new ContentFinder(
+								ConfigureProjectWizard.this.project, null,
+								ConfigureProjectWizard.this.configManager, ConfigManager.MANUAL_MODE,
+								m.newChild(3) );
+						ConfigureProjectWizard.this.project.accept(contentFinder);
+						
+						if (monitor.isCanceled()) {
+							throw new OperationCanceledException();
+						}
+						
+						final List<AutoConfig> recommendConfigs= contentFinder.getConfigs();
+						final List<AutoConfig> otherConfigs= new ArrayList<>();
+						for (final AutoConfig config : ConfigureProjectWizard.this.configManager.getConfigs(ConfigManager.MANUAL_MODE)) {
+							if (!recommendConfigs.contains(config)) {
+								otherConfigs.add(config);
+							}
+						}
+						
+						TaskProcessor.aggregateTasks(ConfigureProjectWizard.this.project,
+								recommendConfigs, Task.CONTENT_MATCH,
+								selectedTasks, alreadyConfigTasks, notConfigTasks,
+								m.newChild(1) );
+						
+						allTasks.addAll(selectedTasks);
+						TaskProcessor.aggregateTasks(ConfigureProjectWizard.this.project,
+								otherConfigs, 0,
+								allTasks, alreadyConfigTasks, notConfigTasks,
+								m.newChild(1) );
+						allTasks.addAll(alreadyConfigTasks);
+						notConfigTasks.addAll(alreadyConfigTasks);
+					}
+					catch (final CoreException e) {
+						if (e.getStatus().getSeverity() == IStatus.CANCEL) {
+							throw new InvocationTargetException(new OperationCanceledException());
+						}
+						throw new InvocationTargetException(e);
+					}
+				}
+			});
+			
+			this.allTasks= allTasks;
+			
+			this.configPage.setInput(allTasks, alreadyConfigTasks, selectedTasks);
+		}
+		catch (final InterruptedException e) {
+			return;
+		}
+		catch (final InvocationTargetException e) {
+			final Throwable cause= e.getCause();
+			if (cause instanceof InterruptedException) {
+				return;
+			}
+			
+			StatusManager.getManager().handle(new Status(IStatus.ERROR, Activator.BUNDLE_ID, 0,
+					"An error occurred when detecting the project configuration proposal.", e ),
+					StatusManager.SHOW | StatusManager.LOG );
+			return;
+		}
+	}
+	
+	void reset() {
+		this.allTasks= null;
+		this.configPage.resetInput();
+		
+		runInit();
+	}
+	
+	
+	@Override
+	public boolean canFinish() {
+		return (this.configPage != null && this.configPage.isPageComplete());
+	}
+	
+	@Override
+	public boolean performFinish() {
+		final Collection<Task> configTasks= this.configPage.getConfigTasks();
+		try {
+			getContainer().run(true, true, new IRunnableWithProgress() {
+				@Override
+				public void run(final IProgressMonitor monitor) throws InvocationTargetException {
+					final SubMonitor m= SubMonitor.convert(monitor, "Configure projects...", 1);
+					
+					final IJobManager jobManager= Job.getJobManager();
+					final ISchedulingRule rule= ConfigureProjectWizard.this.project.getWorkspace().getRoot();
+					try {
+						jobManager.beginRule(rule, m);
+						
+						final IStatus projectStatus= TaskProcessor.process(ConfigureProjectWizard.this.project, configTasks,
+								m.newChild(1) );
+						if (!projectStatus.isOK()) {
+							throw new InvocationTargetException(new CoreException(projectStatus));
+						}
+					}
+					catch (final OperationCanceledException e) {
+						throw new InvocationTargetException(e);
+					}
+					finally {
+						jobManager.endRule(rule);
+					}
+				}
+			});
+		}
+		catch (final InterruptedException e) {
+			reset();
+			return false;
+		}
+		catch (final InvocationTargetException e) {
+			final Throwable cause= e.getCause();
+			if (cause instanceof InterruptedException || cause instanceof OperationCanceledException) {
+				reset();
+				return false;
+			}
+			
+			StatusManager.getManager().handle(new Status(IStatus.ERROR, Activator.BUNDLE_ID, 0,
+					"The project configuration failed for 1 project.", cause ),
+					StatusManager.SHOW | StatusManager.LOG );
+			return false;
+		}
+		return true;
+	}
+	
+}
diff --git a/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/wizards/ConfigureProjectWizardPage.java b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/wizards/ConfigureProjectWizardPage.java
new file mode 100644
index 0000000..b606981
--- /dev/null
+++ b/autonature/org.eclipse.statet.eutils.autonature/src/org/eclipse/statet/internal/eutils/autonature/wizards/ConfigureProjectWizardPage.java
@@ -0,0 +1,198 @@
+/*=============================================================================#
+ # Copyright (c) 2016, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autonature.wizards;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CellLabelProvider;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.ColumnPixelData;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.viewers.ViewerCell;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+
+import org.eclipse.statet.ecommons.ui.util.LayoutUtil;
+import org.eclipse.statet.ecommons.ui.viewers.ViewerUtils;
+import org.eclipse.statet.ecommons.ui.viewers.ViewerUtils.CheckboxColumnControl;
+import org.eclipse.statet.ecommons.ui.viewers.ViewerUtils.TableComposite;
+import org.eclipse.statet.internal.eutils.autonature.Task;
+
+
+public class ConfigureProjectWizardPage extends WizardPage implements ICheckStateListener {
+	
+	
+	private final IProject project;
+	
+	private TableComposite configTable;
+	private CheckboxColumnControl<Task> configTableEnabledColumn;
+	
+	private Button deselectButton;
+	
+	private final Collection<Task> editableTasks= new HashSet<>();
+	
+	private final HashSet<Task> alreadyConfigTasks= new HashSet<>();
+	private final HashSet<Task> toConfigTasks= new HashSet<>();
+	
+	
+	public ConfigureProjectWizardPage(final IProject project) {
+		super("AutoConfigureProject");
+		
+		this.project= project;
+		
+		setTitle(NLS.bind("Configure project ''{0}''", project.getName()));
+		setDescription("Select the project configurations to apply.");
+	}
+	
+	
+	@Override
+	public void createControl(final Composite parent) {
+		initializeDialogUnits(parent);
+		
+		final Composite composite = new Composite(parent, SWT.NONE);
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		composite.setLayout(LayoutUtil.createContentGrid(2));
+		
+		{	final TableComposite tableComposite= new TableComposite(composite,
+					SWT.BORDER | SWT.FULL_SELECTION | SWT.V_SCROLL );
+			this.configTable= tableComposite;
+			
+			final GridData gd= new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+			Dialog.applyDialogFont(tableComposite);
+			gd.heightHint= tableComposite.table.getItemHeight() * 10;
+			tableComposite.setLayoutData(gd);
+			
+			tableComposite.viewer.setContentProvider(new ArrayContentProvider());
+			
+			{	final TableViewerColumn column= new TableViewerColumn(tableComposite.viewer,
+						SWT.CENTER );
+				this.configTableEnabledColumn= new ViewerUtils.CheckboxColumnControl<Task>(
+						tableComposite.viewer, this.toConfigTasks, this.editableTasks ) {
+					@Override
+					public boolean getChecked(final Object element) {
+						return (ConfigureProjectWizardPage.this.alreadyConfigTasks.contains(element)
+								|| super.getChecked(element) );
+					}
+				};
+				column.setLabelProvider(this.configTableEnabledColumn);
+				this.configTableEnabledColumn.configureAsMainColumn();
+				tableComposite.layout.setColumnData(column.getColumn(), new ColumnPixelData(
+						this.configTableEnabledColumn.hintColumnWidth(), false, true ));
+				this.configTableEnabledColumn.addCheckStateListener(this);
+			}
+			{	final TableViewerColumn column= tableComposite.addColumn("Project Configuration",
+						SWT.LEFT, new ColumnWeightData(5, true) );
+				column.setLabelProvider(new CellLabelProvider() {
+					@Override
+					public void update(final ViewerCell cell) {
+						final Task task= (Task) cell.getElement();
+						cell.setText(task.getLabel());
+					}
+				});
+			}
+		}
+		{	final Button button= new Button(composite, SWT.PUSH);
+			button.setText("&Deselect All");
+			
+			final GridData gd= new GridData(SWT.FILL, SWT.TOP, false, false);
+			gd.widthHint= LayoutUtil.hintWidth(button);
+			button.setLayoutData(gd);
+			
+			button.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(final SelectionEvent e) {
+					ConfigureProjectWizardPage.this.toConfigTasks.clear();
+					ConfigureProjectWizardPage.this.configTable.viewer.update(ConfigureProjectWizardPage.this.editableTasks.toArray(), null);
+					updateState();
+				}
+			});
+			this.deselectButton= button;
+		}
+		
+		setControl(composite);
+		
+		resetInput();
+	}
+	
+	@Override
+	public void setVisible(final boolean visible) {
+		super.setVisible(visible);
+		
+		this.configTable.getDisplay().asyncExec(new Runnable() {
+			@Override
+			public void run() {
+				((ConfigureProjectWizard) getWizard()).runInit();
+			}
+		});
+	}
+	
+	public void resetInput() {
+		this.configTable.table.setEnabled(false);
+		this.configTable.viewer.setInput(Collections.EMPTY_LIST);
+		this.deselectButton.setEnabled(false);
+		
+		this.editableTasks.clear();
+		this.toConfigTasks.clear();
+		updateState();
+	}
+	
+	public void setInput(final List<Task> allTasks, final List<Task> alreadyConfigTasks,
+			final List<Task> recommendTasks) {
+		for (final Task task : allTasks) {
+			if (!alreadyConfigTasks.contains(task)) {
+				this.editableTasks.add(task);
+			}
+		}
+		this.alreadyConfigTasks.addAll(alreadyConfigTasks);
+		this.toConfigTasks.addAll(recommendTasks);
+		this.configTable.viewer.setInput(allTasks);
+		this.configTable.table.setEnabled(true);
+		updateState();
+	}
+	
+	@Override
+	public void checkStateChanged(final CheckStateChangedEvent event) {
+		updateState();
+	}
+	
+	private void updateState() {
+		this.deselectButton.setEnabled(!this.toConfigTasks.isEmpty());
+		getContainer().updateButtons();
+	}
+	
+	@Override
+	public boolean isPageComplete() {
+		return (!this.toConfigTasks.isEmpty());
+	}
+	
+	public Collection<Task> getConfigTasks() {
+		return this.toConfigTasks;
+	}
+	
+}
diff --git a/autorun/_build/org.eclipse.statet.eutils.autorun-feature/.project b/autorun/_build/org.eclipse.statet.eutils.autorun-feature/.project
new file mode 100644
index 0000000..82280a5
--- /dev/null
+++ b/autorun/_build/org.eclipse.statet.eutils.autorun-feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.statet.eutils.autorun-feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/autorun/_build/org.eclipse.statet.eutils.autorun-feature/build.properties b/autorun/_build/org.eclipse.statet.eutils.autorun-feature/build.properties
new file mode 100644
index 0000000..4fc35c8
--- /dev/null
+++ b/autorun/_build/org.eclipse.statet.eutils.autorun-feature/build.properties
@@ -0,0 +1,2 @@
+bin.includes= feature.xml,\
+              feature.properties
diff --git a/autorun/_build/org.eclipse.statet.eutils.autorun-feature/feature.properties b/autorun/_build/org.eclipse.statet.eutils.autorun-feature/feature.properties
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/autorun/_build/org.eclipse.statet.eutils.autorun-feature/feature.properties
diff --git a/autorun/_build/org.eclipse.statet.eutils.autorun-feature/feature.xml b/autorun/_build/org.eclipse.statet.eutils.autorun-feature/feature.xml
new file mode 100644
index 0000000..43f19e9
--- /dev/null
+++ b/autorun/_build/org.eclipse.statet.eutils.autorun-feature/feature.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.statet.eutils.autorun"
+      version="1.0.1.qualifier"
+      label="Auto Run"
+      provider-name="Eclipse.org"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1">
+
+   <description url="https://www.eclipse.org/statet">
+      Utility to run a launch configuration at startup of Eclipse automatically.
+   </description>
+
+   <copyright>
+      Copyright (c) 2003, 2017 Stephan Wahlbrink and others. All rights reserved.
+   </copyright>
+
+   <license url="%license_url">
+      %license_text
+   </license>
+
+   <plugin
+         id="org.eclipse.statet.eutils.autorun"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/autorun/_build/repo/category.xml b/autorun/_build/repo/category.xml
new file mode 100644
index 0000000..159caa5
--- /dev/null
+++ b/autorun/_build/repo/category.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<site>
+	<category-def name="org.eclipse.statet.utils" label="StatET - Utilities"/>
+	
+	<feature id="org.eclipse.statet.eutils.autorun" version="0.0.0">
+		<category name="org.eclipse.statet.utils"/>
+	</feature>
+	
+</site>
diff --git a/autorun/org.eclipse.statet.eutils.autorun/.classpath b/autorun/org.eclipse.statet.eutils.autorun/.classpath
new file mode 100644
index 0000000..22f3064
--- /dev/null
+++ b/autorun/org.eclipse.statet.eutils.autorun/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/autorun/org.eclipse.statet.eutils.autorun/.gitignore b/autorun/org.eclipse.statet.eutils.autorun/.gitignore
new file mode 100644
index 0000000..7447f89
--- /dev/null
+++ b/autorun/org.eclipse.statet.eutils.autorun/.gitignore
@@ -0,0 +1 @@
+/bin
\ No newline at end of file
diff --git a/autorun/org.eclipse.statet.eutils.autorun/.project b/autorun/org.eclipse.statet.eutils.autorun/.project
new file mode 100644
index 0000000..2ed33ea
--- /dev/null
+++ b/autorun/org.eclipse.statet.eutils.autorun/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.statet.eutils.autorun</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/autorun/org.eclipse.statet.eutils.autorun/.settings/org.eclipse.core.resources.prefs b/autorun/org.eclipse.statet.eutils.autorun/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/autorun/org.eclipse.statet.eutils.autorun/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/autorun/org.eclipse.statet.eutils.autorun/.settings/org.eclipse.core.runtime.prefs b/autorun/org.eclipse.statet.eutils.autorun/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 0000000..5a0ad22
--- /dev/null
+++ b/autorun/org.eclipse.statet.eutils.autorun/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/autorun/org.eclipse.statet.eutils.autorun/.settings/org.eclipse.jdt.core.prefs b/autorun/org.eclipse.statet.eutils.autorun/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..ccb1eaa
--- /dev/null
+++ b/autorun/org.eclipse.statet.eutils.autorun/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,325 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=85
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
+org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=2
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=1
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=2
+org.eclipse.jdt.core.formatter.blank_lines_before_package=1
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=100
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=false
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=100
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=false
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/autorun/org.eclipse.statet.eutils.autorun/.settings/org.eclipse.jdt.ui.prefs b/autorun/org.eclipse.statet.eutils.autorun/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..abdf3e0
--- /dev/null
+++ b/autorun/org.eclipse.statet.eutils.autorun/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,131 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=true
+cleanup.always_use_this_for_non_static_field_access=true
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=false
+cleanup.format_source_code=false
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=true
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=true
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=false
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=false
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=false
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup.use_type_arguments=false
+cleanup_profile=_StatET
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_StatET
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=e
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=\#;java;javax;com.ibm.icu;org.osgi;org.eclipse;;org.eclipse.statet;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=true
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * ${tags}\n */</template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\#\n \# Copyright (c) ${year} ${user} and others.\n # \n # This program and the accompanying materials are made available under the\n # terms of the Eclipse Public License 2.0 which is available at\n # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0\n # which is available at https://www.apache.org/licenses/LICENSE-2.0.\n # \n # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0\n # \n \# Contributors\:\n \#     ${user} - initial API and implementation\n \#\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=*/</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * \n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n */</template><template autoinsert\="false" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=true
+sp_cleanup.always_use_this_for_non_static_field_access=true
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=true
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=false
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=true
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=true
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=false
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=true
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=false
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=false
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+sp_cleanup.use_type_arguments=false
diff --git a/autorun/org.eclipse.statet.eutils.autorun/META-INF/MANIFEST.MF b/autorun/org.eclipse.statet.eutils.autorun/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..43a52e3
--- /dev/null
+++ b/autorun/org.eclipse.statet.eutils.autorun/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.statet.eutils.autorun;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Vendor: Eclipse.org
+Bundle-Name: StatET EUtils - Auto Run
+Bundle-ActivationPolicy: lazy;exclude:="org.eclipse.statet.eutils.autorun.internal.nostart"
+Bundle-Activator: org.eclipse.statet.internal.eutils.autorun.Activator
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle:  org.eclipse.core.runtime;bundle-version="3.10.0",
+ org.eclipse.ui,
+ org.eclipse.debug.core,
+ org.eclipse.debug.ui
+Import-Package: com.ibm.icu.text
diff --git a/autorun/org.eclipse.statet.eutils.autorun/about.html b/autorun/org.eclipse.statet.eutils.autorun/about.html
new file mode 100644
index 0000000..7206cec
--- /dev/null
+++ b/autorun/org.eclipse.statet.eutils.autorun/about.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+		"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>December 1, 2017</p>
+<h3>License</h3>
+
+<p>
+	The Eclipse Foundation makes available all content in this plug-in
+	(&quot;Content&quot;). Unless otherwise indicated below, the Content
+	is provided to you under the terms and conditions of the Eclipse
+	Public License Version 2.0 (&quot;EPL&quot;). A copy of the EPL is
+	available at <a href="https://www.eclipse.org/legal/epl-2.0">https://www.eclipse.org/legal/epl-2.0</a>.
+	For purposes of the EPL, &quot;Program&quot; will mean the Content.
+</p>
+
+<p>
+	If you did not receive this Content directly from the Eclipse
+	Foundation, the Content is being redistributed by another party
+	(&quot;Redistributor&quot;) and different terms and conditions may
+	apply to your use of any object code in the Content. Check the
+	Redistributor's license that was provided with the Content. If no such
+	license exists, contact the Redistributor. Unless otherwise indicated
+	below, the terms and conditions of the EPL still apply to any source
+	code in the Content and such source code may be obtained at <a
+	href="https://www.eclipse.org/">https://www.eclipse.org</a>.
+</p>
+
+</body>
+</html>
diff --git a/autorun/org.eclipse.statet.eutils.autorun/build.properties b/autorun/org.eclipse.statet.eutils.autorun/build.properties
new file mode 100644
index 0000000..e50f254
--- /dev/null
+++ b/autorun/org.eclipse.statet.eutils.autorun/build.properties
@@ -0,0 +1,9 @@
+source..= src/
+output..= bin/
+javacDefaultEncoding..= UTF-8
+
+bin.includes= META-INF/,\
+              plugin.xml,\
+              .,\
+              about.html
+src.includes= .settings/org.eclipse.core.resources.prefs
diff --git a/autorun/org.eclipse.statet.eutils.autorun/plugin.xml b/autorun/org.eclipse.statet.eutils.autorun/plugin.xml
new file mode 100644
index 0000000..7c09b20
--- /dev/null
+++ b/autorun/org.eclipse.statet.eutils.autorun/plugin.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+ #=============================================================================#
+ # Copyright (c) 2007, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================#
+-->
+
+<plugin>
+   
+   <extension
+         point="org.eclipse.ui.startup">
+      <startup
+            class="org.eclipse.statet.internal.eutils.autorun.nostart.AutoRunStartup">
+      </startup>
+   </extension>
+   
+   <extension
+         point="org.eclipse.ui.keywords">
+      <keyword
+            id="org.eclipse.statet.autorun.keywords.startup"
+            label="startup run autostart launch">
+      </keyword>
+   </extension>
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+            id="org.eclipse.statet.autorun.preferencePages.Config"
+            category="org.eclipse.debug.ui.DebugPreferencePage"
+            class="org.eclipse.statet.internal.eutils.autorun.AutoRunPreferencePage"
+            name="Auto Run">
+         <keywordReference
+               id="org.eclipse.statet.autorun.keywords.startup">
+         </keywordReference>
+      </page>
+   </extension>
+   
+</plugin>
diff --git a/autorun/org.eclipse.statet.eutils.autorun/src/org/eclipse/statet/internal/eutils/autorun/Activator.java b/autorun/org.eclipse.statet.eutils.autorun/src/org/eclipse/statet/internal/eutils/autorun/Activator.java
new file mode 100644
index 0000000..64c7424
--- /dev/null
+++ b/autorun/org.eclipse.statet.eutils.autorun/src/org/eclipse/statet/internal/eutils/autorun/Activator.java
@@ -0,0 +1,63 @@
+/*=============================================================================#
+ # Copyright (c) 2007, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autorun;
+
+import org.osgi.framework.BundleContext;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+	
+	
+	public static final String BUNDLE_ID= "org.eclipse.statet.eutils.autorun"; //$NON-NLS-1$
+	
+	public static final String ENABLED_PREF_KEY= "enabled"; //$NON-NLS-1$
+	public static final String LAUNCH_CONFIG_ID_PREF_KEY= "config.id"; //$NON-NLS-1$
+	public static final String LAUNCH_MODE_ID_PREF_KEY= "mode.id"; //$NON-NLS-1$
+	
+	
+	private static Activator instance;
+	
+	/**
+	 * Returns the shared plug-in instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getInstance() {
+		return instance;
+	}
+	
+	
+	public Activator() {
+	}
+	
+	
+	@Override
+	public void start(final BundleContext context) throws Exception {
+		super.start(context);
+		instance= this;
+	}
+	
+	@Override
+	public void stop(final BundleContext context) throws Exception {
+		instance= null;
+		super.stop(context);
+	}
+	
+}
diff --git a/autorun/org.eclipse.statet.eutils.autorun/src/org/eclipse/statet/internal/eutils/autorun/AutoRunPreferencePage.java b/autorun/org.eclipse.statet.eutils.autorun/src/org/eclipse/statet/internal/eutils/autorun/AutoRunPreferencePage.java
new file mode 100644
index 0000000..763c347
--- /dev/null
+++ b/autorun/org.eclipse.statet.eutils.autorun/src/org/eclipse/statet/internal/eutils/autorun/AutoRunPreferencePage.java
@@ -0,0 +1,350 @@
+/*=============================================================================#
+ # Copyright (c) 2007, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autorun;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.osgi.service.prefs.BackingStoreException;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IPreferencesService;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.debug.core.ILaunchMode;
+import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationComparator;
+import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTreeContentProvider;
+import org.eclipse.debug.ui.DebugUITools;
+import org.eclipse.debug.ui.IDebugUIConstants;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.statushandlers.StatusManager;
+
+
+public class AutoRunPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+	
+	
+	private ILaunchManager launchManager;
+	
+	private Button enableButton;
+	
+	private TreeViewer entryViewer;
+	private Button viewButton;
+	
+	private Label modeLabel;
+	private ComboViewer modeViewer;
+	
+	private Set<String> lastMode;
+	
+	
+	public AutoRunPreferencePage() {
+	}
+	
+	
+	@Override
+	public void init(final IWorkbench workbench) {
+	}
+	
+	@Override
+	protected Control createContents(final Composite parent) {
+		this.launchManager= DebugPlugin.getDefault().getLaunchManager();
+		
+		final Composite composite= new Composite(parent, SWT.NONE);
+		{	final GridLayout gd= new GridLayout();
+			gd.marginWidth= 0;
+			gd.marginHeight= 0;
+			gd.numColumns= 3;
+			composite.setLayout(gd);
+		}
+		{	this.enableButton= new Button(composite, SWT.CHECK);
+			this.enableButton.setText("Enable &launch at startup of:");
+			this.enableButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));
+		}
+		{	this.entryViewer= new TreeViewer(composite, SWT.BORDER | SWT.FULL_SELECTION);
+			final Tree tree= this.entryViewer.getTree();
+			final GridData gd= new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
+			Dialog.applyDialogFont(this.entryViewer.getControl());
+			gd.heightHint= tree.getItemHeight() * 10;
+			this.entryViewer.getControl().setLayoutData(gd);
+			
+			this.entryViewer.setLabelProvider(DebugUITools.newDebugModelPresentation());
+			this.entryViewer.setContentProvider(new LaunchConfigurationTreeContentProvider(ILaunchManager.RUN_MODE, getShell()) {
+				@Override
+				public Object[] getElements(final Object parentElement) {
+					final Object[] children= super.getChildren(parentElement);
+					final List<Object> filtered= new ArrayList<>(children.length);
+					for (int i= 0; i < children.length; i++) {
+						if (super.hasChildren(children[i])) {
+							filtered.add(children[i]);
+						}
+					}
+					return filtered.toArray();
+				}
+			});
+			this.entryViewer.setComparator(new LaunchConfigurationComparator());
+		}
+		{	this.viewButton= new Button(composite, SWT.PUSH);
+			this.viewButton.setText("View/&Edit...");
+			final GridData gd= new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1);
+			Dialog.applyDialogFont(this.viewButton);
+			gd.widthHint= Math.max(this.viewButton.computeSize(SWT.DEFAULT, SWT.DEFAULT).x,
+					convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH) );
+			this.viewButton.setLayoutData(gd);
+			this.viewButton.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(final SelectionEvent e) {
+					final Object element= ((IStructuredSelection) AutoRunPreferencePage.this.entryViewer.getSelection()).getFirstElement();
+					if (element instanceof ILaunchConfiguration) {
+						DebugUITools.openLaunchConfigurationPropertiesDialog(getShell(), (ILaunchConfiguration) element, IDebugUIConstants.ID_RUN_LAUNCH_GROUP);
+					}
+				}
+			});
+		}
+		{	this.modeLabel= new Label(composite, SWT.NONE);
+			this.modeLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+			this.modeLabel.setText("Launch &Mode:");
+			
+			this.modeViewer= new ComboViewer(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
+			this.modeViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+			this.modeViewer.setContentProvider(new ArrayContentProvider());
+			this.modeViewer.setLabelProvider(new LabelProvider() {
+				
+				private final StringBuilder fStringBuilder= new StringBuilder();
+				
+				@Override
+				public String getText(final Object element) {
+					this.fStringBuilder.setLength(0);
+					final Iterator<String> iter= ((Set<String>) element).iterator();
+					if (iter.hasNext()) {
+						append(AutoRunPreferencePage.this.launchManager.getLaunchMode(iter.next()));
+						while (iter.hasNext()) {
+							this.fStringBuilder.append("+");
+							append(AutoRunPreferencePage.this.launchManager.getLaunchMode(iter.next()));
+						}
+					}
+					return this.fStringBuilder.toString();
+				}
+				
+				private void append(final ILaunchMode mode) {
+					final String s= mode.getLabel();
+					for (int i= 0; i < s.length(); i++) {
+						final char c= s.charAt(i);
+						if (c == '&') {
+							i++;
+							if (i < s.length()) {
+								this.fStringBuilder.append(s.charAt(i));
+							}
+						}
+						else {
+							this.fStringBuilder.append(c);
+						}
+					}
+				}
+			});
+			
+			this.entryViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+				@Override
+				public void selectionChanged(final SelectionChangedEvent event) {
+					updateModes();
+				}
+			});
+			this.modeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+				@Override
+				public void selectionChanged(final SelectionChangedEvent event) {
+					final Object element= ((IStructuredSelection) event.getSelection()).getFirstElement();
+					if (element != null) {
+						AutoRunPreferencePage.this.lastMode= (Set<String>) element;
+					}
+				}
+			});
+		}
+		
+		Dialog.applyDialogFont(composite);
+		
+		loadConfigs();
+		loadPrefs();
+		
+		return composite;
+	}
+	
+	private void updateModes() {
+		final Object element= ((IStructuredSelection) this.entryViewer.getSelection()).getFirstElement();
+		if (element instanceof ILaunchConfiguration) {
+			try {
+				final Set<Set<String>> combinations= ((ILaunchConfiguration) element).getType()
+						.getSupportedModeCombinations();
+				{	// mixed not yet supported
+					final Iterator<Set<String>> iter= combinations.iterator();
+					while (iter.hasNext()) {
+						if (iter.next().size() != 1) {
+							iter.remove();
+						}
+					}
+				}
+				final Set<String>[] array= combinations.toArray(new Set[combinations.size()]);
+				if (array.length > 0) {
+					this.modeViewer.setInput(array);
+					if (this.lastMode != null && combinations.contains(this.lastMode)) {
+						this.modeViewer.setSelection(new StructuredSelection(this.lastMode));
+					}
+					else {
+						this.modeViewer.setSelection(new StructuredSelection(array[0]));
+					}
+					this.modeLabel.setEnabled(true);
+					this.modeViewer.getControl().setEnabled(true);
+					return;
+				}
+			}
+			catch (final CoreException e) {
+				StatusManager.getManager().handle(new Status(IStatus.ERROR, Activator.BUNDLE_ID, -1, 
+						"An error occured when loading supported modes for the launch configuration.", e));
+			}
+		}
+		this.modeViewer.setInput(new Set[0]);
+		this.modeLabel.setEnabled(false);
+		this.modeViewer.getControl().setEnabled(false);
+	}
+	
+	private void loadConfigs() {
+		final ILaunchConfiguration[] launchConfigurations;
+		try {
+			launchConfigurations= this.launchManager.getLaunchConfigurations();
+			this.entryViewer.setInput(launchConfigurations);
+		}
+		catch (final CoreException e) {
+			Activator.getInstance().getLog().log(new Status(IStatus.ERROR, Activator.BUNDLE_ID, -1, 
+					"Error occured when loading available launch configurations.", e)); //$NON-NLS-1$
+			this.enableButton.setSelection(false);
+			this.enableButton.setEnabled(false);
+			
+			updateModes();
+			return;
+		}
+	}
+	
+	private void loadPrefs() {
+		final IPreferencesService preferences= Platform.getPreferencesService();
+		this.enableButton.setSelection(preferences.getBoolean(
+				Activator.BUNDLE_ID, Activator.ENABLED_PREF_KEY, true, null ));
+		try {
+			final String key= preferences.getString(
+					Activator.BUNDLE_ID, Activator.LAUNCH_CONFIG_ID_PREF_KEY, null, null );
+			final ILaunchConfiguration config= (key != null && key.length() > 0) ?
+					this.launchManager.getLaunchConfiguration(key) : null;
+			this.entryViewer.setSelection((config != null) ? new StructuredSelection(config) : new StructuredSelection());
+		}
+		catch (final CoreException e) {
+		}
+		
+		{	final String mode= preferences.getString(
+					Activator.BUNDLE_ID, Activator.LAUNCH_MODE_ID_PREF_KEY, null, null );
+			if (mode != null) {
+				this.lastMode= new HashSet<>(1);
+				this.lastMode.add(mode);
+			}
+		}
+		
+		updateModes();
+	}
+	
+	private void savePrefs(final boolean flush) {
+		final IEclipsePreferences node= InstanceScope.INSTANCE.getNode(Activator.BUNDLE_ID);
+		
+		node.putBoolean(Activator.ENABLED_PREF_KEY, this.enableButton.getSelection());
+		
+		final Object element= ((IStructuredSelection) this.entryViewer.getSelection()).getFirstElement();
+		String key= null;
+		if (element instanceof ILaunchConfiguration) {
+			try {
+				key= ((ILaunchConfiguration) element).getMemento();
+			}
+			catch (final CoreException e) {
+				StatusManager.getManager().handle(new Status(IStatus.ERROR, Activator.BUNDLE_ID, -1, 
+						"An error occured when saving the autorun launch configuration.", e));
+				return;
+			}
+		}
+		if (key != null) {
+			node.put(Activator.LAUNCH_CONFIG_ID_PREF_KEY, key);
+			
+			final Set<String> modes= (Set<String>) ((IStructuredSelection) this.modeViewer.getSelection()).getFirstElement();
+			if (modes != null && modes.size() == 1) {
+				node.put(Activator.LAUNCH_MODE_ID_PREF_KEY, modes.iterator().next());
+			}
+		}
+		else {
+			node.remove(Activator.LAUNCH_CONFIG_ID_PREF_KEY);
+		}
+		
+		if (flush) {
+			try {
+				node.flush();
+			}
+			catch (final BackingStoreException e) {
+				StatusManager.getManager().handle(new Status(IStatus.ERROR, Activator.BUNDLE_ID, -1, 
+						"An error occured when saving the autorun launch configuration.", e));
+			}
+		}
+	}
+	
+	
+	@Override
+	protected void performDefaults() {
+		this.enableButton.setSelection(true);
+		this.entryViewer.setSelection(new StructuredSelection());
+	}
+	
+	@Override
+	protected void performApply() {
+		savePrefs(true);
+	}
+	
+	@Override
+	public boolean performOk() {
+		savePrefs(false);
+		return true;
+	}
+	
+}
diff --git a/autorun/org.eclipse.statet.eutils.autorun/src/org/eclipse/statet/internal/eutils/autorun/AutoRunner.java b/autorun/org.eclipse.statet.eutils.autorun/src/org/eclipse/statet/internal/eutils/autorun/AutoRunner.java
new file mode 100644
index 0000000..4711d4b
--- /dev/null
+++ b/autorun/org.eclipse.statet.eutils.autorun/src/org/eclipse/statet/internal/eutils/autorun/AutoRunner.java
@@ -0,0 +1,68 @@
+/*=============================================================================#
+ # Copyright (c) 2007, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autorun;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.ui.statushandlers.StatusManager;
+
+public class AutoRunner extends Job {
+	
+	
+	private final String key;
+	
+	private final String mode;
+	
+	
+	public AutoRunner(final String key, final String mode) {
+		super("Auto Run");
+		if (key == null) {
+			throw new NullPointerException("key");
+		}
+		if (mode == null) {
+			throw new NullPointerException("mode");
+		}
+		this.key= key;
+		this.mode= mode;
+	}
+	
+	
+	@Override
+	protected IStatus run(final IProgressMonitor monitor) {
+		try {
+			final ILaunchConfiguration config= DebugPlugin.getDefault().getLaunchManager().getLaunchConfiguration(this.key);
+			if (config == null) {
+				final IStatus status= new Status(IStatus.WARNING, Activator.BUNDLE_ID, 101,
+						"The configured launch configuration for Auto Run could not be loaded.", null);
+				StatusManager.getManager().handle(status);
+				return Status.OK_STATUS;
+			}
+			
+			config.launch(this.mode, monitor, false, true);
+		}
+		catch (final CoreException e) {
+			final IStatus status= new Status(IStatus.ERROR, Activator.BUNDLE_ID, 102, 
+					"An error occured when starting the launch configuration by Auto Run.", e);
+			return status;
+		}
+		return Status.OK_STATUS;
+	}
+	
+}
diff --git a/autorun/org.eclipse.statet.eutils.autorun/src/org/eclipse/statet/internal/eutils/autorun/nostart/AutoRunStartup.java b/autorun/org.eclipse.statet.eutils.autorun/src/org/eclipse/statet/internal/eutils/autorun/nostart/AutoRunStartup.java
new file mode 100644
index 0000000..d6e1647
--- /dev/null
+++ b/autorun/org.eclipse.statet.eutils.autorun/src/org/eclipse/statet/internal/eutils/autorun/nostart/AutoRunStartup.java
@@ -0,0 +1,48 @@
+/*=============================================================================#
+ # Copyright (c) 2007, 2017 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.eutils.autorun.nostart;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.IPreferencesService;
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.ui.IStartup;
+
+import org.eclipse.statet.internal.eutils.autorun.Activator;
+import org.eclipse.statet.internal.eutils.autorun.AutoRunner;
+
+
+public class AutoRunStartup implements IStartup {
+	
+	
+	public AutoRunStartup() {
+	}
+	
+	
+	@Override
+	public void earlyStartup() {
+		if (Boolean.parseBoolean(System.getProperty("org.eclipse.statet.eutils.autorun.disable"))) { //$NON-NLS-1$
+			return;
+		}
+		final IPreferencesService preferences= Platform.getPreferencesService();
+		if (preferences.getBoolean(Activator.BUNDLE_ID, Activator.ENABLED_PREF_KEY, true, null)) {
+			final String key= preferences.getString(Activator.BUNDLE_ID, Activator.LAUNCH_CONFIG_ID_PREF_KEY, null, null);
+			if (key != null) {
+				final String mode= preferences.getString(Activator.BUNDLE_ID, Activator.LAUNCH_MODE_ID_PREF_KEY, ILaunchManager.RUN_MODE, null);
+				new AutoRunner(key, mode).schedule(500);
+			}
+		}
+	}
+	
+}
