diff --git a/eclipse_template.xml b/eclipse_template.xml
new file mode 100644
index 0000000..3d6e91a
--- /dev/null
+++ b/eclipse_template.xml
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<profiles version="12">
+<profile kind="CodeFormatterProfile" name="Apache UIMA Code Conventions" version="12">
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="100"/>
+<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
+<setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.compiler.source" value="1.7"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.7"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.7"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="100"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
+</profile>
+</profiles>
diff --git a/src/main/java/com/google/code/gossip/GossipMember.java b/src/main/java/com/google/code/gossip/GossipMember.java
index 0160dea..56a5f44 100644
--- a/src/main/java/com/google/code/gossip/GossipMember.java
+++ b/src/main/java/com/google/code/gossip/GossipMember.java
@@ -24,158 +24,176 @@
 
 /**
  * A abstract class representing a gossip member.
- *
+ * 
  * @author joshclemm, harmenw
  */
-public abstract class GossipMember implements Comparable<GossipMember>{
+public abstract class GossipMember implements Comparable<GossipMember> {
 
-	public static final String JSON_HOST = "host";
-	public static final String JSON_PORT = "port";
-	public static final String JSON_HEARTBEAT = "heartbeat";
-	public static final String JSON_ID = "id";
-	public static final String JSON_CLUSTER = "cluster";
-	protected final String _host;
-	protected final int _port;
-	protected volatile long _heartbeat;
-	protected final String _clusterName;
-	/**
-	 * The purpose of the id field is to be able for nodes to identify themselves beyond there host/port. For example
-	 * an application might generate a persistent id so if they rejoin the cluster at a different host and port we 
-	 * are aware it is the same node.
-	 */
-	protected String _id;
+  public static final String JSON_HOST = "host";
 
-	/**
-	 * Constructor.
-	 * @param host The hostname or IP address.
-	 * @param port The port number.
-	 * @param heartbeat The current heartbeat.
-	 * @param id an id that may be replaced after contact
-	 */
-	public GossipMember(String clusterName, String host, int port, String id, long heartbeat) {
-		_clusterName = clusterName;
-		_host = host;
-		_port = port;
-		_id = id;
-		_heartbeat = heartbeat;
-	}
+  public static final String JSON_PORT = "port";
 
-	/**
-	 * Get the name of the cluster the member belongs to.
-	 *
-	 * @return The cluster name
-     */
-	public String getClusterName(){
-		return _clusterName;
-	}
+  public static final String JSON_HEARTBEAT = "heartbeat";
 
-	/**
-	 * Get the hostname or IP address of the remote gossip member.
-	 * @return The hostname or IP address.
-	 */
-	public String getHost() {
-		return _host;
-	}
+  public static final String JSON_ID = "id";
 
-	/**
-	 * Get the port number of the remote gossip member.
-	 * @return The port number.
-	 */
-	public int getPort() {
-		return _port;
-	}
+  public static final String JSON_CLUSTER = "cluster";
 
-	/**
-	 * The member address in the form IP/host:port
-	 * Similar to the toString in {@link InetSocketAddress}
-	 */
-	public String getAddress() {
-		return _host+":"+_port;
-	}
+  protected final String host;
 
-	/**
-	 * Get the heartbeat of this gossip member.
-	 * @return The current heartbeat.
-	 */
-	public long getHeartbeat() {
-		return _heartbeat;
-	}
+  protected final int port;
 
-	/**
-	 * Set the heartbeat of this gossip member.
-	 * @param heartbeat The new heartbeat.
-	 */
-	public void setHeartbeat(long heartbeat) {
-		this._heartbeat = heartbeat;
-	}
+  protected volatile long heartbeat;
 
+  protected final String clusterName;
 
-	public String getId() {
-    return _id;
+  /**
+   * The purpose of the id field is to be able for nodes to identify themselves beyond there
+   * host/port. For example an application might generate a persistent id so if they rejoin the
+   * cluster at a different host and port we are aware it is the same node.
+   */
+  protected String id;
+
+  /**
+   * Constructor.
+   * 
+   * @param host
+   *          The hostname or IP address.
+   * @param port
+   *          The port number.
+   * @param heartbeat
+   *          The current heartbeat.
+   * @param id
+   *          an id that may be replaced after contact
+   */
+  public GossipMember(String clusterName, String host, int port, String id, long heartbeat) {
+    this.clusterName = clusterName;
+    this.host = host;
+    this.port = port;
+    this.id = id;
+    this.heartbeat = heartbeat;
+  }
+
+  /**
+   * Get the name of the cluster the member belongs to.
+   * 
+   * @return The cluster name
+   */
+  public String getClusterName() {
+    return clusterName;
+  }
+
+  /**
+   * Get the hostname or IP address of the remote gossip member.
+   * 
+   * @return The hostname or IP address.
+   */
+  public String getHost() {
+    return host;
+  }
+
+  /**
+   * Get the port number of the remote gossip member.
+   * 
+   * @return The port number.
+   */
+  public int getPort() {
+    return port;
+  }
+
+  /**
+   * The member address in the form IP/host:port Similar to the toString in
+   * {@link InetSocketAddress}
+   */
+  public String getAddress() {
+    return host + ":" + port;
+  }
+
+  /**
+   * Get the heartbeat of this gossip member.
+   * 
+   * @return The current heartbeat.
+   */
+  public long getHeartbeat() {
+    return heartbeat;
+  }
+
+  /**
+   * Set the heartbeat of this gossip member.
+   * 
+   * @param heartbeat
+   *          The new heartbeat.
+   */
+  public void setHeartbeat(long heartbeat) {
+    this.heartbeat = heartbeat;
+  }
+
+  public String getId() {
+    return id;
   }
 
   public void setId(String _id) {
-    this._id = _id;
+    this.id = _id;
   }
 
-	public String toString() {
-		return "Member [address=" + getAddress() + ", id=" + _id + ", heartbeat=" + _heartbeat + "]";
-	}
+  public String toString() {
+    return "Member [address=" + getAddress() + ", id=" + id + ", heartbeat=" + heartbeat + "]";
+  }
 
-	/**
-	 * @see java.lang.Object#hashCode()
-	 */
-	@Override
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		String address = getAddress();
-		result = prime * result
-		+ ((address == null) ? 0 : address.hashCode())
-		+ _clusterName == null ? 0 : _clusterName.hashCode();
-		return result;
-	}
+  /**
+   * @see java.lang.Object#hashCode()
+   */
+  @Override
+  public int hashCode() {
+    final int prime = 31;
+    int result = 1;
+    String address = getAddress();
+    result = prime * result + ((address == null) ? 0 : address.hashCode()) + clusterName == null ? 0
+            : clusterName.hashCode();
+    return result;
+  }
 
-	/**
-	 * @see java.lang.Object#equals(java.lang.Object)
-	 */
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj) {
-			return true;
-		}
-		if (obj == null) {
-			System.err.println("equals(): obj is null.");
-			return false;
-		}
-		if (! (obj instanceof GossipMember) ) {
-			System.err.println("equals(): obj is not of type GossipMember.");
-			return false;
-		}
-		// The object is the same of they both have the same address (hostname and port).
-		return getAddress().equals(((LocalGossipMember) obj).getAddress()) &&
-				getClusterName().equals(((LocalGossipMember) obj).getClusterName());
-	}
+  /**
+   * @see java.lang.Object#equals(java.lang.Object)
+   */
+  @Override
+  public boolean equals(Object obj) {
+    if (this == obj) {
+      return true;
+    }
+    if (obj == null) {
+      System.err.println("equals(): obj is null.");
+      return false;
+    }
+    if (!(obj instanceof GossipMember)) {
+      System.err.println("equals(): obj is not of type GossipMember.");
+      return false;
+    }
+    // The object is the same of they both have the same address (hostname and port).
+    return getAddress().equals(((LocalGossipMember) obj).getAddress())
+            && getClusterName().equals(((LocalGossipMember) obj).getClusterName());
+  }
 
-	/**
-	 * Get the JSONObject which is the JSON representation of this GossipMember.
-	 * @return The JSONObject of this GossipMember.
-	 */
-	public JSONObject toJSONObject() {
-		try {
-			JSONObject jsonObject = new JSONObject();
-			jsonObject.put(JSON_CLUSTER, _clusterName);
-			jsonObject.put(JSON_HOST, _host);
-			jsonObject.put(JSON_PORT, _port);
-			jsonObject.put(JSON_ID, _id);
-			jsonObject.put(JSON_HEARTBEAT, _heartbeat);
-			return jsonObject;
-		} catch (JSONException e) {
-			throw new RuntimeException(e);
-		}
-	}
+  /**
+   * Get the JSONObject which is the JSON representation of this GossipMember.
+   * 
+   * @return The JSONObject of this GossipMember.
+   */
+  public JSONObject toJSONObject() {
+    try {
+      JSONObject jsonObject = new JSONObject();
+      jsonObject.put(JSON_CLUSTER, clusterName);
+      jsonObject.put(JSON_HOST, host);
+      jsonObject.put(JSON_PORT, port);
+      jsonObject.put(JSON_ID, id);
+      jsonObject.put(JSON_HEARTBEAT, heartbeat);
+      return jsonObject;
+    } catch (JSONException e) {
+      throw new RuntimeException(e);
+    }
+  }
 
-	public int compareTo(GossipMember other){
-	  return this.getAddress().compareTo(other.getAddress());
-	}
+  public int compareTo(GossipMember other) {
+    return this.getAddress().compareTo(other.getAddress());
+  }
 }
diff --git a/src/main/java/com/google/code/gossip/GossipRunner.java b/src/main/java/com/google/code/gossip/GossipRunner.java
index 4694974..7530fd9 100644
--- a/src/main/java/com/google/code/gossip/GossipRunner.java
+++ b/src/main/java/com/google/code/gossip/GossipRunner.java
@@ -27,18 +27,15 @@
 
   public static void main(String[] args) {
     File configFile;
-
     if (args.length == 1) {
       configFile = new File("./" + args[0]);
     } else {
       configFile = new File("gossip.conf");
     }
-
     new GossipRunner(configFile);
   }
 
   public GossipRunner(File configFile) {
-
     if (configFile != null && configFile.exists()) {
       try {
         System.out.println("Parsing the configuration file...");
diff --git a/src/main/java/com/google/code/gossip/GossipService.java b/src/main/java/com/google/code/gossip/GossipService.java
index 3d578a4..2226a48 100644
--- a/src/main/java/com/google/code/gossip/GossipService.java
+++ b/src/main/java/com/google/code/gossip/GossipService.java
@@ -29,57 +29,59 @@
 
 /**
  * This object represents the service which is responsible for gossiping with other gossip members.
- *
+ * 
  * @author joshclemm, harmenw
  */
 public class GossipService {
 
   public static final Logger LOGGER = Logger.getLogger(GossipService.class);
 
-  private GossipManager _gossipManager;
+  private GossipManager gossipManager;
 
   /**
    * Constructor with the default settings.
-   *
+   * 
    * @throws InterruptedException
    * @throws UnknownHostException
    */
   public GossipService(StartupSettings startupSettings) throws InterruptedException,
           UnknownHostException {
-    this(startupSettings.getCluster(), InetAddress.getLocalHost().getHostAddress(), startupSettings.getPort(), startupSettings.getId(),
-             startupSettings.getGossipMembers(), startupSettings
-                    .getGossipSettings(), null);
+    this(startupSettings.getCluster(), InetAddress.getLocalHost().getHostAddress(), startupSettings
+            .getPort(), startupSettings.getId(), startupSettings.getGossipMembers(),
+            startupSettings.getGossipSettings(), null);
   }
 
   /**
    * Setup the client's lists, gossiping parameters, and parse the startup config file.
-   *
+   * 
    * @throws InterruptedException
    * @throws UnknownHostException
    */
   public GossipService(String cluster, String ipAddress, int port, String id,
           List<GossipMember> gossipMembers, GossipSettings settings, GossipListener listener)
           throws InterruptedException, UnknownHostException {
-    _gossipManager = new RandomGossipManager(cluster, ipAddress, port, id, settings, gossipMembers, listener);
+    gossipManager = new RandomGossipManager(cluster, ipAddress, port, id, settings, gossipMembers,
+            listener);
   }
 
   public void start() {
-    String address = get_gossipManager().getMyself().getHost() + ":" + get_gossipManager().getMyself().getPort();
-    LOGGER.debug( "Starting: " + _gossipManager.getName() + " - " + address );
+    String address = get_gossipManager().getMyself().getHost() + ":"
+            + get_gossipManager().getMyself().getPort();
+    LOGGER.debug("Starting: " + gossipManager.getName() + " - " + address);
 
-    _gossipManager.start();
+    gossipManager.start();
   }
 
   public void shutdown() {
-    _gossipManager.shutdown();
+    gossipManager.shutdown();
   }
 
   public GossipManager get_gossipManager() {
-    return _gossipManager;
+    return gossipManager;
   }
 
   public void set_gossipManager(GossipManager _gossipManager) {
-    this._gossipManager = _gossipManager;
+    this.gossipManager = _gossipManager;
   }
 
 }
diff --git a/src/main/java/com/google/code/gossip/GossipSettings.java b/src/main/java/com/google/code/gossip/GossipSettings.java
index 82558dd..ec9aae1 100644
--- a/src/main/java/com/google/code/gossip/GossipSettings.java
+++ b/src/main/java/com/google/code/gossip/GossipSettings.java
@@ -25,10 +25,10 @@
 public class GossipSettings {
 
   /** Time between gossip'ing in ms. Default is 1 second. */
-  private int _gossipInterval = 1000;
+  private int gossipInterval = 1000;
 
   /** Time between cleanups in ms. Default is 10 seconds. */
-  private int _cleanupInterval = 10000;
+  private int cleanupInterval = 10000;
 
   /**
    * Construct GossipSettings with default settings.
@@ -45,8 +45,8 @@
    *          The cleanup interval in ms.
    */
   public GossipSettings(int gossipInterval, int cleanupInterval) {
-    _gossipInterval = gossipInterval;
-    _cleanupInterval = cleanupInterval;
+    this.gossipInterval = gossipInterval;
+    this.cleanupInterval = cleanupInterval;
   }
 
   /**
@@ -56,7 +56,7 @@
    *          The gossip interval in ms.
    */
   public void setGossipTimeout(int gossipInterval) {
-    _gossipInterval = gossipInterval;
+    this.gossipInterval = gossipInterval;
   }
 
   /**
@@ -67,7 +67,7 @@
    *          The cleanup interval in ms.
    */
   public void setCleanupInterval(int cleanupInterval) {
-    _cleanupInterval = cleanupInterval;
+    this.cleanupInterval = cleanupInterval;
   }
 
   /**
@@ -76,7 +76,7 @@
    * @return The gossip interval in ms.
    */
   public int getGossipInterval() {
-    return _gossipInterval;
+    return gossipInterval;
   }
 
   /**
@@ -85,6 +85,6 @@
    * @return The cleanup interval.
    */
   public int getCleanupInterval() {
-    return _cleanupInterval;
+    return cleanupInterval;
   }
 }
diff --git a/src/main/java/com/google/code/gossip/GossipTimeoutTimer.java b/src/main/java/com/google/code/gossip/GossipTimeoutTimer.java
index cd2ee9f..a1bf130 100644
--- a/src/main/java/com/google/code/gossip/GossipTimeoutTimer.java
+++ b/src/main/java/com/google/code/gossip/GossipTimeoutTimer.java
@@ -26,17 +26,18 @@
  * This object represents a timer for a gossip member. When the timer has elapsed without being
  * reset in the meantime, it will inform the GossipService about this who in turn will put the
  * gossip member on the dead list, because it is apparantly not alive anymore.
- *
+ * 
  * @author joshclemm, harmenw
  */
 public class GossipTimeoutTimer extends Timer {
 
-  private final long _sleepTime;
-  private final LocalGossipMember _source;
+  private final long sleepTime;
+
+  private final LocalGossipMember source;
 
   /**
    * Constructor. Creates a reset-able timer that wakes up after millisecondsSleepTime.
-   *
+   * 
    * @param millisecondsSleepTime
    *          The time for this timer to wait before an event.
    * @param notificationListener
@@ -45,8 +46,8 @@
   public GossipTimeoutTimer(long millisecondsSleepTime, NotificationListener notificationListener,
           LocalGossipMember member) {
     super();
-    _sleepTime = millisecondsSleepTime;
-    _source = member;
+    sleepTime = millisecondsSleepTime;
+    source = member;
     addNotificationListener(notificationListener, null, null);
   }
 
@@ -63,15 +64,15 @@
    */
   public void reset() {
     removeAllNotifications();
-    setWakeupTime(_sleepTime);
+    setWakeupTime(sleepTime);
   }
 
   /**
    * Adds a new wake-up time for this timer.
-   *
+   * 
    * @param milliseconds
    */
   private void setWakeupTime(long milliseconds) {
-    addNotification("type", "message", _source, new Date(System.currentTimeMillis() + milliseconds));
+    addNotification("type", "message", source, new Date(System.currentTimeMillis() + milliseconds));
   }
 }
diff --git a/src/main/java/com/google/code/gossip/LocalGossipMember.java b/src/main/java/com/google/code/gossip/LocalGossipMember.java
index 978e822..216da96 100644
--- a/src/main/java/com/google/code/gossip/LocalGossipMember.java
+++ b/src/main/java/com/google/code/gossip/LocalGossipMember.java
@@ -22,7 +22,7 @@
 /**
  * This object represent a gossip member with the properties known locally. These objects are stored
  * in the local list of gossip member.s
- *
+ * 
  * @author harmenw
  */
 public class LocalGossipMember extends GossipMember {
@@ -31,7 +31,7 @@
 
   /**
    * Constructor.
-   *
+   * 
    * @param hostname
    *          The hostname or IP address.
    * @param port
@@ -43,28 +43,28 @@
    * @param cleanupTimeout
    *          The cleanup timeout for this gossip member.
    */
-  public LocalGossipMember(String clusterName, String hostname, int port, String id, long heartbeat,
-          NotificationListener notificationListener, int cleanupTimeout) {
+  public LocalGossipMember(String clusterName, String hostname, int port, String id,
+          long heartbeat, NotificationListener notificationListener, int cleanupTimeout) {
     super(clusterName, hostname, port, id, heartbeat);
 
-    this.timeoutTimer = new GossipTimeoutTimer(cleanupTimeout, notificationListener, this);
+    timeoutTimer = new GossipTimeoutTimer(cleanupTimeout, notificationListener, this);
   }
 
   /**
    * Start the timeout timer.
    */
   public void startTimeoutTimer() {
-    this.timeoutTimer.start();
+    timeoutTimer.start();
   }
 
   /**
    * Reset the timeout timer.
    */
   public void resetTimeoutTimer() {
-    this.timeoutTimer.reset();
+    timeoutTimer.reset();
   }
-  
+
   public void disableTimer() {
-    this.timeoutTimer.removeAllNotifications();
+    timeoutTimer.removeAllNotifications();
   }
 }
diff --git a/src/main/java/com/google/code/gossip/RemoteGossipMember.java b/src/main/java/com/google/code/gossip/RemoteGossipMember.java
index d3848fd..a7c3a1f 100644
--- a/src/main/java/com/google/code/gossip/RemoteGossipMember.java
+++ b/src/main/java/com/google/code/gossip/RemoteGossipMember.java
@@ -20,14 +20,14 @@
 /**
  * The object represents a gossip member with the properties as received from a remote gossip
  * member.
- *
+ * 
  * @author harmenw
  */
 public class RemoteGossipMember extends GossipMember {
 
   /**
    * Constructor.
-   *
+   * 
    * @param hostname
    *          The hostname or IP address.
    * @param port
@@ -41,7 +41,7 @@
 
   /**
    * Construct a RemoteGossipMember with a heartbeat of 0.
-   *
+   * 
    * @param hostname
    *          The hostname or IP address.
    * @param port
diff --git a/src/main/java/com/google/code/gossip/StartupSettings.java b/src/main/java/com/google/code/gossip/StartupSettings.java
index 5e0a674..6d9d43c 100644
--- a/src/main/java/com/google/code/gossip/StartupSettings.java
+++ b/src/main/java/com/google/code/gossip/StartupSettings.java
@@ -32,29 +32,29 @@
 
 /**
  * This object represents the settings used when starting the gossip service.
- *
+ * 
  * @author harmenw
  */
 public class StartupSettings {
   private static final Logger log = Logger.getLogger(StartupSettings.class);
 
   /** The id to use fo the service */
-  private String _id;
+  private String id;
 
   /** The port to start the gossip service on. */
-  private int _port;
+  private int port;
 
   private String cluster;
 
   /** The gossip settings used at startup. */
-  private final GossipSettings _gossipSettings;
+  private final GossipSettings gossipSettings;
 
   /** The list with gossip members to start with. */
-  private final List<GossipMember> _gossipMembers;
+  private final List<GossipMember> gossipMembers;
 
   /**
    * Constructor.
-   *
+   * 
    * @param id
    *          The id to be used for this service
    * @param port
@@ -68,96 +68,96 @@
 
   /**
    * Constructor.
-   *
+   * 
    * @param id
    *          The id to be used for this service
    * @param port
    *          The port to start the service on.
    */
   public StartupSettings(String id, int port, GossipSettings gossipSettings) {
-    _id = id;
-    _port = port;
-    _gossipSettings = gossipSettings;
-    _gossipMembers = new ArrayList<>();
+    this.id = id;
+    this.port = port;
+    this.gossipSettings = gossipSettings;
+    gossipMembers = new ArrayList<>();
   }
 
-  public void setCluster(String cluster){
+  public void setCluster(String cluster) {
     this.cluster = cluster;
   }
 
-  public String getCluster(){
-    return this.cluster;
+  public String getCluster() {
+    return cluster;
   }
 
   /**
    * Set the id to be used for this service.
-   *
+   * 
    * @param id
    *          The id for this service.
    */
-  public void setId( String id ) {
-    _id = id;
+  public void setId(String id) {
+    this.id = id;
   }
 
   /**
    * Get the id for this service.
-   *
+   * 
    * @return the service's id.
    */
   public String getId() {
-    return _id;
+    return id;
   }
 
   /**
    * Set the port of the gossip service.
-   *
+   * 
    * @param port
    *          The port for the gossip service.
    */
   public void setPort(int port) {
-    _port = port;
+    this.port = port;
   }
 
   /**
    * Get the port for the gossip service.
-   *
+   * 
    * @return The port of the gossip service.
    */
   public int getPort() {
-    return _port;
+    return port;
   }
 
   /**
    * Get the GossipSettings.
-   *
+   * 
    * @return The GossipSettings object.
    */
   public GossipSettings getGossipSettings() {
-    return _gossipSettings;
+    return gossipSettings;
   }
 
   /**
    * Add a gossip member to the list of members to start with.
-   *
+   * 
    * @param member
    *          The member to add.
    */
   public void addGossipMember(GossipMember member) {
-    _gossipMembers.add(member);
+    gossipMembers.add(member);
   }
 
   /**
    * Get the list with gossip members.
-   *
+   * 
    * @return The gossip members.
    */
   public List<GossipMember> getGossipMembers() {
-    return _gossipMembers;
+    return gossipMembers;
   }
 
   /**
    * Parse the settings for the gossip service from a JSON file.
-   *
+   * 
    * @param jsonFile
    *          The file object which refers to the JSON config file.
    * @return The StartupSettings object with the settings from the config file.
@@ -171,12 +171,14 @@
   public static StartupSettings fromJSONFile(File jsonFile) throws JSONException,
           FileNotFoundException, IOException {
     // Read the file to a String.
-    BufferedReader br = new BufferedReader(new FileReader(jsonFile));
     StringBuffer buffer = new StringBuffer();
-    String line;
-    while ((line = br.readLine()) != null) {
-      buffer.append(line.trim());
+    try (BufferedReader br = new BufferedReader(new FileReader(jsonFile)) ){
+      String line;
+      while ((line = br.readLine()) != null) {
+        buffer.append(line.trim());
+      }
     }
+    
 
     // Lets parse the String as JSON.
     JSONObject jsonObject = new JSONArray(buffer.toString()).getJSONObject(0);
@@ -194,22 +196,22 @@
     int cleanupInterval = jsonObject.getInt("cleanup_interval");
 
     // Initiate the settings with the port number.
-    StartupSettings settings = new StartupSettings(id, port, new GossipSettings(
-            gossipInterval, cleanupInterval));
+    StartupSettings settings = new StartupSettings(id, port, new GossipSettings(gossipInterval,
+            cleanupInterval));
 
     // Now iterate over the members from the config file and add them to the settings.
     String configMembersDetails = "Config-members [";
     JSONArray membersJSON = jsonObject.getJSONArray("members");
     for (int i = 0; i < membersJSON.length(); i++) {
       JSONObject memberJSON = membersJSON.getJSONObject(i);
-      RemoteGossipMember member = new RemoteGossipMember(memberJSON.getString("cluster"), memberJSON.getString("host"),
-              memberJSON.getInt("port"), "");
+      RemoteGossipMember member = new RemoteGossipMember(memberJSON.getString("cluster"),
+              memberJSON.getString("host"), memberJSON.getInt("port"), "");
       settings.addGossipMember(member);
       configMembersDetails += member.getAddress();
       if (i < (membersJSON.length() - 1))
         configMembersDetails += ", ";
     }
-    log.info( configMembersDetails + "]" );
+    log.info(configMembersDetails + "]");
 
     // Return the created settings object.
     return settings;
diff --git a/src/main/java/com/google/code/gossip/event/GossipState.java b/src/main/java/com/google/code/gossip/event/GossipState.java
index 9b19c66..c0bc565 100644
--- a/src/main/java/com/google/code/gossip/event/GossipState.java
+++ b/src/main/java/com/google/code/gossip/event/GossipState.java
@@ -21,7 +21,7 @@
   UP("up"), DOWN("down");
   private final String state;
 
-  private GossipState(String state){
+  private GossipState(String state) {
     this.state = state;
   }
 }
diff --git a/src/main/java/com/google/code/gossip/examples/GossipExample.java b/src/main/java/com/google/code/gossip/examples/GossipExample.java
index bb5c884..b82bb40 100644
--- a/src/main/java/com/google/code/gossip/examples/GossipExample.java
+++ b/src/main/java/com/google/code/gossip/examples/GossipExample.java
@@ -30,7 +30,7 @@
 /**
  * This class is an example of how one could use the gossip service. Here we start multiple gossip
  * clients on this host as specified in the config file.
- *
+ * 
  * @author harmenw
  */
 public class GossipExample extends Thread {
diff --git a/src/main/java/com/google/code/gossip/manager/ActiveGossipThread.java b/src/main/java/com/google/code/gossip/manager/ActiveGossipThread.java
index 89659a2..9b0bd5c 100644
--- a/src/main/java/com/google/code/gossip/manager/ActiveGossipThread.java
+++ b/src/main/java/com/google/code/gossip/manager/ActiveGossipThread.java
@@ -31,31 +31,31 @@
  */
 abstract public class ActiveGossipThread implements Runnable {
 
-  protected final GossipManager _gossipManager;
+  protected final GossipManager gossipManager;
 
-  private final AtomicBoolean _keepRunning;
+  private final AtomicBoolean keepRunning;
 
   public ActiveGossipThread(GossipManager gossipManager) {
-    _gossipManager = gossipManager;
-    _keepRunning = new AtomicBoolean(true);
+    this.gossipManager = gossipManager;
+    this.keepRunning = new AtomicBoolean(true);
   }
 
   @Override
   public void run() {
-    while (_keepRunning.get()) {
+    while (keepRunning.get()) {
       try {
-        TimeUnit.MILLISECONDS.sleep(_gossipManager.getSettings().getGossipInterval());
-        sendMembershipList(_gossipManager.getMyself(), _gossipManager.getMemberList());
+        TimeUnit.MILLISECONDS.sleep(gossipManager.getSettings().getGossipInterval());
+        sendMembershipList(gossipManager.getMyself(), gossipManager.getMemberList());
       } catch (InterruptedException e) {
         GossipService.LOGGER.error(e);
-        _keepRunning.set(false);
+        keepRunning.set(false);
       }
     }
     shutdown();
   }
 
   public void shutdown() {
-    _keepRunning.set(false);
+    keepRunning.set(false);
   }
 
   /**
@@ -67,7 +67,7 @@
   /**
    * Abstract method which should be implemented by a subclass. This method should return a member
    * of the list to gossip with.
-   *
+   * 
    * @param memberList
    *          The list of members which are stored in the local list of members.
    * @return The chosen LocalGossipMember to gossip with.
diff --git a/src/main/java/com/google/code/gossip/manager/GossipManager.java b/src/main/java/com/google/code/gossip/manager/GossipManager.java
index b695fcc..42354b6 100644
--- a/src/main/java/com/google/code/gossip/manager/GossipManager.java
+++ b/src/main/java/com/google/code/gossip/manager/GossipManager.java
@@ -43,39 +43,50 @@
 public abstract class GossipManager extends Thread implements NotificationListener {
 
   public static final Logger LOGGER = Logger.getLogger(GossipManager.class);
+
   public static final int MAX_PACKET_SIZE = 102400;
 
-  private final ConcurrentSkipListMap<LocalGossipMember,GossipState> members;
-  private final LocalGossipMember _me;
-  private final GossipSettings _settings;
-  private final AtomicBoolean _gossipServiceRunning;
-  private final Class<? extends PassiveGossipThread> _passiveGossipThreadClass;
-  private final Class<? extends ActiveGossipThread> _activeGossipThreadClass;
+  private final ConcurrentSkipListMap<LocalGossipMember, GossipState> members;
+
+  private final LocalGossipMember me;
+
+  private final GossipSettings settings;
+
+  private final AtomicBoolean gossipServiceRunning;
+
+  private final Class<? extends PassiveGossipThread> passiveGossipThreadClass;
+
+  private final Class<? extends ActiveGossipThread> activeGossipThreadClass;
+
   private final GossipListener listener;
+
   private ActiveGossipThread activeGossipThread;
+
   private PassiveGossipThread passiveGossipThread;
-  private ExecutorService _gossipThreadExecutor;
+
+  private ExecutorService gossipThreadExecutor;
 
   public GossipManager(Class<? extends PassiveGossipThread> passiveGossipThreadClass,
-          Class<? extends ActiveGossipThread> activeGossipThreadClass, String cluster, String address, int port,
-          String id, GossipSettings settings, List<GossipMember> gossipMembers,
-          GossipListener listener) {
-    _passiveGossipThreadClass = passiveGossipThreadClass;
-    _activeGossipThreadClass = activeGossipThreadClass;
-    _settings = settings;
-    _me = new LocalGossipMember(cluster, address, port, id, System.currentTimeMillis(), this, settings.getCleanupInterval());
+          Class<? extends ActiveGossipThread> activeGossipThreadClass, String cluster,
+          String address, int port, String id, GossipSettings settings,
+          List<GossipMember> gossipMembers, GossipListener listener) {
+    this.passiveGossipThreadClass = passiveGossipThreadClass;
+    this.activeGossipThreadClass = activeGossipThreadClass;
+    this.settings = settings;
+    me = new LocalGossipMember(cluster, address, port, id, System.currentTimeMillis(), this,
+            settings.getCleanupInterval());
     members = new ConcurrentSkipListMap<>();
     for (GossipMember startupMember : gossipMembers) {
-      if (!startupMember.equals(_me)) {
-        LocalGossipMember member = new LocalGossipMember(startupMember.getClusterName(), startupMember.getHost(),
-                startupMember.getPort(), startupMember.getId(), System.currentTimeMillis(), this,
-                settings.getCleanupInterval());
+      if (!startupMember.equals(me)) {
+        LocalGossipMember member = new LocalGossipMember(startupMember.getClusterName(),
+                startupMember.getHost(), startupMember.getPort(), startupMember.getId(),
+                System.currentTimeMillis(), this, settings.getCleanupInterval());
         members.put(member, GossipState.UP);
         GossipService.LOGGER.debug(member);
       }
     }
-    _gossipThreadExecutor = Executors.newCachedThreadPool();
-    _gossipServiceRunning = new AtomicBoolean(true);
+    gossipThreadExecutor = Executors.newCachedThreadPool();
+    gossipServiceRunning = new AtomicBoolean(true);
     this.listener = listener;
     Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
       public void run() {
@@ -98,9 +109,9 @@
     }
   }
 
-  public void revivieMember(LocalGossipMember m){
-    for ( Entry<LocalGossipMember, GossipState> it : this.members.entrySet()){
-      if (it.getKey().getId().equals(m.getId())){
+  public void revivieMember(LocalGossipMember m) {
+    for (Entry<LocalGossipMember, GossipState> it : this.members.entrySet()) {
+      if (it.getKey().getId().equals(m.getId())) {
         it.getKey().disableTimer();
       }
     }
@@ -110,8 +121,8 @@
       listener.gossipEvent(m, GossipState.UP);
     }
   }
-  
-  public void createOrRevivieMember(LocalGossipMember m){
+
+  public void createOrRevivieMember(LocalGossipMember m) {
     members.put(m, GossipState.UP);
     if (listener != null) {
       listener.gossipEvent(m, GossipState.UP);
@@ -119,7 +130,7 @@
   }
 
   public GossipSettings getSettings() {
-    return _settings;
+    return settings;
   }
 
   /**
@@ -128,8 +139,8 @@
    */
   public List<LocalGossipMember> getMemberList() {
     List<LocalGossipMember> up = new ArrayList<>();
-    for (Entry<LocalGossipMember, GossipState> entry : members.entrySet()){
-      if (GossipState.UP.equals(entry.getValue())){
+    for (Entry<LocalGossipMember, GossipState> entry : members.entrySet()) {
+      if (GossipState.UP.equals(entry.getValue())) {
         up.add(entry.getKey());
       }
     }
@@ -137,13 +148,13 @@
   }
 
   public LocalGossipMember getMyself() {
-    return _me;
+    return me;
   }
 
   public List<LocalGossipMember> getDeadList() {
     List<LocalGossipMember> up = new ArrayList<>();
-    for (Entry<LocalGossipMember, GossipState> entry : members.entrySet()){
-      if (GossipState.DOWN.equals(entry.getValue())){
+    for (Entry<LocalGossipMember, GossipState> entry : members.entrySet()) {
+      if (GossipState.DOWN.equals(entry.getValue())) {
         up.add(entry.getKey());
       }
     }
@@ -156,23 +167,23 @@
    */
   public void run() {
     for (LocalGossipMember member : members.keySet()) {
-      if (member != _me) {
+      if (member != me) {
         member.startTimeoutTimer();
       }
     }
     try {
-      passiveGossipThread = _passiveGossipThreadClass.getConstructor(GossipManager.class)
+      passiveGossipThread = passiveGossipThreadClass.getConstructor(GossipManager.class)
               .newInstance(this);
-      _gossipThreadExecutor.execute(passiveGossipThread);
-      activeGossipThread = _activeGossipThreadClass.getConstructor(GossipManager.class)
+      gossipThreadExecutor.execute(passiveGossipThread);
+      activeGossipThread = activeGossipThreadClass.getConstructor(GossipManager.class)
               .newInstance(this);
-      _gossipThreadExecutor.execute(activeGossipThread);
+      gossipThreadExecutor.execute(activeGossipThread);
     } catch (InstantiationException | IllegalAccessException | IllegalArgumentException
             | InvocationTargetException | NoSuchMethodException | SecurityException e1) {
       throw new RuntimeException(e1);
     }
     GossipService.LOGGER.debug("The GossipService is started.");
-    while (_gossipServiceRunning.get()) {
+    while (gossipServiceRunning.get()) {
       try {
         // TODO
         TimeUnit.MILLISECONDS.sleep(1);
@@ -186,17 +197,17 @@
    * Shutdown the gossip service.
    */
   public void shutdown() {
-    _gossipServiceRunning.set(false);
-    _gossipThreadExecutor.shutdown();
-    if (passiveGossipThread != null){
+    gossipServiceRunning.set(false);
+    gossipThreadExecutor.shutdown();
+    if (passiveGossipThread != null) {
       passiveGossipThread.shutdown();
     }
-    if (activeGossipThread != null){
+    if (activeGossipThread != null) {
       activeGossipThread.shutdown();
     }
     try {
-      boolean result = _gossipThreadExecutor.awaitTermination(1000, TimeUnit.MILLISECONDS);
-      if (!result){
+      boolean result = gossipThreadExecutor.awaitTermination(1000, TimeUnit.MILLISECONDS);
+      if (!result) {
         LOGGER.error("executor shutdown timed out");
       }
     } catch (InterruptedException e) {
diff --git a/src/main/java/com/google/code/gossip/manager/PassiveGossipThread.java b/src/main/java/com/google/code/gossip/manager/PassiveGossipThread.java
index 5dcea09..e8eb034 100644
--- a/src/main/java/com/google/code/gossip/manager/PassiveGossipThread.java
+++ b/src/main/java/com/google/code/gossip/manager/PassiveGossipThread.java
@@ -47,38 +47,38 @@
   public static final Logger LOGGER = Logger.getLogger(PassiveGossipThread.class);
 
   /** The socket used for the passive thread of the gossip service. */
-  private DatagramSocket _server;
+  private DatagramSocket server;
 
-  private final GossipManager _gossipManager;
+  private final GossipManager gossipManager;
 
-  private AtomicBoolean _keepRunning;
+  private AtomicBoolean keepRunning;
 
-  private final String _cluster;
+  private final String cluster;
 
   public PassiveGossipThread(GossipManager gossipManager) {
-    _gossipManager = gossipManager;
+    this.gossipManager = gossipManager;
     try {
-      SocketAddress socketAddress = new InetSocketAddress(_gossipManager.getMyself().getHost(),
-              _gossipManager.getMyself().getPort());
-      _server = new DatagramSocket(socketAddress);
+      SocketAddress socketAddress = new InetSocketAddress(gossipManager.getMyself().getHost(),
+              gossipManager.getMyself().getPort());
+      server = new DatagramSocket(socketAddress);
       GossipService.LOGGER.debug("Gossip service successfully initialized on port "
-              + _gossipManager.getMyself().getPort());
-      GossipService.LOGGER.debug("I am " + _gossipManager.getMyself());
-      _cluster = _gossipManager.getMyself().getClusterName();
+              + gossipManager.getMyself().getPort());
+      GossipService.LOGGER.debug("I am " + gossipManager.getMyself());
+      cluster = gossipManager.getMyself().getClusterName();
     } catch (SocketException ex) {
       GossipService.LOGGER.warn(ex);
       throw new RuntimeException(ex);
     }
-    _keepRunning = new AtomicBoolean(true);
+    keepRunning = new AtomicBoolean(true);
   }
 
   @Override
   public void run() {
-    while (_keepRunning.get()) {
+    while (keepRunning.get()) {
       try {
-        byte[] buf = new byte[_server.getReceiveBufferSize()];
+        byte[] buf = new byte[server.getReceiveBufferSize()];
         DatagramPacket p = new DatagramPacket(buf, buf.length);
-        _server.receive(p);
+        server.receive(p);
         int packet_length = 0;
         for (int i = 0; i < 4; i++) {
           int shift = (4 - 1 - i) * 8;
@@ -98,7 +98,8 @@
             JSONArray jsonArray = new JSONArray(receivedMessage);
             for (int i = 0; i < jsonArray.length(); i++) {
               JSONObject memberJSONObject = jsonArray.getJSONObject(i);
-              if (memberJSONObject.length() == 5  && _cluster.equals(memberJSONObject.get(GossipMember.JSON_CLUSTER))) {
+              if (memberJSONObject.length() == 5
+                      && cluster.equals(memberJSONObject.get(GossipMember.JSON_CLUSTER))) {
                 RemoteGossipMember member = new RemoteGossipMember(
                         memberJSONObject.getString(GossipMember.JSON_CLUSTER),
                         memberJSONObject.getString(GossipMember.JSON_HOST),
@@ -112,7 +113,7 @@
                   senderMember = member;
                 }
                 remoteGossipMembers.add(member);
-              } else if(memberJSONObject.length() == 5) {
+              } else if (memberJSONObject.length() == 5) {
                 GossipService.LOGGER.warn("The member object does not belong to this cluster.");
               } else {
                 GossipService.LOGGER
@@ -121,7 +122,7 @@
               }
 
             }
-            mergeLists(_gossipManager, senderMember, remoteGossipMembers);
+            mergeLists(gossipManager, senderMember, remoteGossipMembers);
           } catch (JSONException e) {
             GossipService.LOGGER
                     .error("The received message is not well-formed JSON. The following message has been dropped:\n"
@@ -137,7 +138,7 @@
       } catch (IOException e) {
         GossipService.LOGGER.error(e);
         System.out.println(e);
-        _keepRunning.set(false);
+        keepRunning.set(false);
       }
     }
     shutdown();
@@ -145,13 +146,14 @@
 
   public void shutdown() {
     try {
-    _server.close();
-    } catch (RuntimeException ex){ }
+      server.close();
+    } catch (RuntimeException ex) {
+    }
   }
 
   /**
    * Abstract method for merging the local and remote list.
-   *
+   * 
    * @param gossipManager
    *          The GossipManager for retrieving the local members and dead members list.
    * @param senderMember
@@ -165,11 +167,9 @@
 }
 
 /*
- * random comments
- *         // Check whether the package is smaller than the maximal packet length.
-        // A package larger than this would not be possible to be send from a GossipService,
-        // since this is check before sending the message.
-        // This could normally only occur when the list of members is very big,
-        // or when the packet is malformed, and the first 4 bytes is not the right in anymore.
-        // For this reason we regards the message.
-         * */
+ * random comments // Check whether the package is smaller than the maximal packet length. // A
+ * package larger than this would not be possible to be send from a GossipService, // since this is
+ * check before sending the message. // This could normally only occur when the list of members is
+ * very big, // or when the packet is malformed, and the first 4 bytes is not the right in anymore.
+ * // For this reason we regards the message.
+ */
diff --git a/src/main/java/com/google/code/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java b/src/main/java/com/google/code/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java
index 16584f9..08d573a 100644
--- a/src/main/java/com/google/code/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java
+++ b/src/main/java/com/google/code/gossip/manager/impl/OnlyProcessReceivedPassiveGossipThread.java
@@ -36,7 +36,7 @@
    * Merge remote list (received from peer), and our local member list. Simply, we must update the
    * heartbeats that the remote list has with our list. Also, some additional logic is needed to
    * make sure we have not timed out a member and then immediately received a list with that member.
-   *
+   * 
    * @param gossipManager
    * @param senderMember
    * @param remoteList
@@ -44,13 +44,14 @@
   protected void mergeLists(GossipManager gossipManager, RemoteGossipMember senderMember,
           List<GossipMember> remoteList) {
 
-    //if the person sending to us is in the dead list consider them up
-    for (LocalGossipMember i : gossipManager.getDeadList()){
-      if (i.getId().equals(senderMember.getId())){
-        System.out.println(gossipManager.getMyself() +" caught a live one!");
-        LocalGossipMember newLocalMember = new LocalGossipMember(senderMember.getClusterName(), senderMember.getHost(),
-                senderMember.getPort(), senderMember.getId(), senderMember.getHeartbeat(),
-                gossipManager, gossipManager.getSettings().getCleanupInterval());
+    // if the person sending to us is in the dead list consider them up
+    for (LocalGossipMember i : gossipManager.getDeadList()) {
+      if (i.getId().equals(senderMember.getId())) {
+        System.out.println(gossipManager.getMyself() + " caught a live one!");
+        LocalGossipMember newLocalMember = new LocalGossipMember(senderMember.getClusterName(),
+                senderMember.getHost(), senderMember.getPort(), senderMember.getId(),
+                senderMember.getHeartbeat(), gossipManager, gossipManager.getSettings()
+                        .getCleanupInterval());
         gossipManager.revivieMember(newLocalMember);
         newLocalMember.startTimeoutTimer();
       }
@@ -58,7 +59,7 @@
     for (GossipMember remoteMember : remoteList) {
       if (remoteMember.getId().equals(gossipManager.getMyself().getId())) {
         continue;
-      }  
+      }
       if (gossipManager.getMemberList().contains(remoteMember)) {
         LocalGossipMember localMember = gossipManager.getMemberList().get(
                 gossipManager.getMemberList().indexOf(remoteMember));
@@ -66,11 +67,12 @@
           localMember.setHeartbeat(remoteMember.getHeartbeat());
           localMember.resetTimeoutTimer();
         }
-      } else if (!gossipManager.getMemberList().contains(remoteMember) 
-              && !gossipManager.getDeadList().contains(remoteMember) ){
-        LocalGossipMember newLocalMember = new LocalGossipMember(remoteMember.getClusterName(), remoteMember.getHost(),
-                remoteMember.getPort(), remoteMember.getId(), remoteMember.getHeartbeat(),
-                gossipManager, gossipManager.getSettings().getCleanupInterval());
+      } else if (!gossipManager.getMemberList().contains(remoteMember)
+              && !gossipManager.getDeadList().contains(remoteMember)) {
+        LocalGossipMember newLocalMember = new LocalGossipMember(remoteMember.getClusterName(),
+                remoteMember.getHost(), remoteMember.getPort(), remoteMember.getId(),
+                remoteMember.getHeartbeat(), gossipManager, gossipManager.getSettings()
+                        .getCleanupInterval());
         gossipManager.createOrRevivieMember(newLocalMember);
         newLocalMember.startTimeoutTimer();
       } else {
@@ -78,9 +80,10 @@
           LocalGossipMember localDeadMember = gossipManager.getDeadList().get(
                   gossipManager.getDeadList().indexOf(remoteMember));
           if (remoteMember.getHeartbeat() > localDeadMember.getHeartbeat()) {
-            LocalGossipMember newLocalMember = new LocalGossipMember(remoteMember.getClusterName(), remoteMember.getHost(),
-                    remoteMember.getPort(), remoteMember.getId(), remoteMember.getHeartbeat(),
-                    gossipManager, gossipManager.getSettings().getCleanupInterval());
+            LocalGossipMember newLocalMember = new LocalGossipMember(remoteMember.getClusterName(),
+                    remoteMember.getHost(), remoteMember.getPort(), remoteMember.getId(),
+                    remoteMember.getHeartbeat(), gossipManager, gossipManager.getSettings()
+                            .getCleanupInterval());
             gossipManager.revivieMember(newLocalMember);
             newLocalMember.startTimeoutTimer();
             GossipService.LOGGER.debug("Removed remote member " + remoteMember.getAddress()
@@ -98,7 +101,7 @@
           GossipService.LOGGER.debug("remote " + remoteList);
           GossipService.LOGGER.debug("live " + gossipManager.getMemberList());
           GossipService.LOGGER.debug("dead " + gossipManager.getDeadList());
-          //throw new IllegalArgumentException("wtf");
+          // throw new IllegalArgumentException("wtf");
         }
       }
     }
@@ -107,25 +110,19 @@
 }
 
 /**
-old comment section:
-// If a member is restarted the heartbeat will restart from 1, so we should check
-// that here.
-// So a member can become from the dead when it is either larger than a previous
-// heartbeat (due to network failure)
-// or when the heartbeat is 1 (after a restart of the service).
-// TODO: What if the first message of a gossip service is sent to a dead node? The
-// second member will receive a heartbeat of two.
-// TODO: The above does happen. Maybe a special message for a revived member?
-// TODO: Or maybe when a member is declared dead for more than
-// _settings.getCleanupInterval() ms, reset the heartbeat to 0.
-// It will then accept a revived member.
-// The above is now handle by checking whether the heartbeat differs
-// _settings.getCleanupInterval(), it must be restarted.
-*/
+ * old comment section: // If a member is restarted the heartbeat will restart from 1, so we should
+ * check // that here. // So a member can become from the dead when it is either larger than a
+ * previous // heartbeat (due to network failure) // or when the heartbeat is 1 (after a restart of
+ * the service). // TODO: What if the first message of a gossip service is sent to a dead node? The
+ * // second member will receive a heartbeat of two. // TODO: The above does happen. Maybe a special
+ * message for a revived member? // TODO: Or maybe when a member is declared dead for more than //
+ * _settings.getCleanupInterval() ms, reset the heartbeat to 0. // It will then accept a revived
+ * member. // The above is now handle by checking whether the heartbeat differs //
+ * _settings.getCleanupInterval(), it must be restarted.
+ */
 
 /*
-// The remote member is back from the dead.
-// Remove it from the dead list.
-// gossipManager.getDeadList().remove(localDeadMember);
-// Add it as a new member and add it to the member list.
-*/
\ No newline at end of file
+ * // The remote member is back from the dead. // Remove it from the dead list. //
+ * gossipManager.getDeadList().remove(localDeadMember); // Add it as a new member and add it to the
+ * member list.
+ */
\ No newline at end of file
diff --git a/src/main/java/com/google/code/gossip/manager/impl/SendMembersActiveGossipThread.java b/src/main/java/com/google/code/gossip/manager/impl/SendMembersActiveGossipThread.java
index ea3d0e0..4e5f855 100644
--- a/src/main/java/com/google/code/gossip/manager/impl/SendMembersActiveGossipThread.java
+++ b/src/main/java/com/google/code/gossip/manager/impl/SendMembersActiveGossipThread.java
@@ -47,8 +47,8 @@
     if (member == null) {
       return;
     }
-    try (DatagramSocket socket = new DatagramSocket()){
-      socket.setSoTimeout(_gossipManager.getSettings().getGossipInterval());
+    try (DatagramSocket socket = new DatagramSocket()) {
+      socket.setSoTimeout(gossipManager.getSettings().getGossipInterval());
       InetAddress dest = InetAddress.getByName(member.getHost());
       JSONArray jsonArray = new JSONArray();
       jsonArray.put(me.toJSONObject());
@@ -60,8 +60,7 @@
       int packet_length = json_bytes.length;
       if (packet_length < GossipManager.MAX_PACKET_SIZE) {
         byte[] buf = createBuffer(packet_length, json_bytes);
-        DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length, dest,
-                member.getPort());
+        DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length, dest, member.getPort());
         socket.send(datagramPacket);
       } else {
         GossipService.LOGGER.error("The length of the to be send message is too large ("
@@ -71,8 +70,8 @@
       GossipService.LOGGER.warn(e1);
     }
   }
-  
-  private byte[] createBuffer(int packetLength, byte [] jsonBytes){
+
+  private byte[] createBuffer(int packetLength, byte[] jsonBytes) {
     byte[] lengthBytes = new byte[4];
     lengthBytes[0] = (byte) (packetLength >> 24);
     lengthBytes[1] = (byte) ((packetLength << 8) >> 24);
@@ -84,5 +83,5 @@
     byte[] buf = byteBuffer.array();
     return buf;
   }
-  
+
 }
diff --git a/src/main/java/com/google/code/gossip/manager/random/RandomActiveGossipThread.java b/src/main/java/com/google/code/gossip/manager/random/RandomActiveGossipThread.java
index 558a9e4..914f5ca 100644
--- a/src/main/java/com/google/code/gossip/manager/random/RandomActiveGossipThread.java
+++ b/src/main/java/com/google/code/gossip/manager/random/RandomActiveGossipThread.java
@@ -28,23 +28,23 @@
 public class RandomActiveGossipThread extends SendMembersActiveGossipThread {
 
   /** The Random used for choosing a member to gossip with. */
-  private final Random _random;
+  private final Random random;
 
   public RandomActiveGossipThread(GossipManager gossipManager) {
     super(gossipManager);
-    _random = new Random();
+    random = new Random();
   }
 
   /**
    * [The selectToSend() function.] Find a random peer from the local membership list. In the case
    * where this client is the only member in the list, this method will return null.
-   *
+   * 
    * @return Member random member if list is greater than 1, null otherwise
    */
   protected LocalGossipMember selectPartner(List<LocalGossipMember> memberList) {
     LocalGossipMember member = null;
     if (memberList.size() > 0) {
-      int randomNeighborIndex = _random.nextInt(memberList.size());
+      int randomNeighborIndex = random.nextInt(memberList.size());
       member = memberList.get(randomNeighborIndex);
     } else {
       GossipService.LOGGER.debug("I am alone in this world.");
diff --git a/src/main/java/com/google/code/gossip/manager/random/RandomGossipManager.java b/src/main/java/com/google/code/gossip/manager/random/RandomGossipManager.java
index e256ec2..c1e69d6 100644
--- a/src/main/java/com/google/code/gossip/manager/random/RandomGossipManager.java
+++ b/src/main/java/com/google/code/gossip/manager/random/RandomGossipManager.java
@@ -26,9 +26,9 @@
 import java.util.List;
 
 public class RandomGossipManager extends GossipManager {
-  public RandomGossipManager(String cluster, String address, int port, String id, GossipSettings settings,
-          List<GossipMember> gossipMembers, GossipListener listener) {
-    super(OnlyProcessReceivedPassiveGossipThread.class, RandomActiveGossipThread.class, cluster, address,
-            port, id, settings, gossipMembers, listener);
+  public RandomGossipManager(String cluster, String address, int port, String id,
+          GossipSettings settings, List<GossipMember> gossipMembers, GossipListener listener) {
+    super(OnlyProcessReceivedPassiveGossipThread.class, RandomActiveGossipThread.class, cluster,
+            address, port, id, settings, gossipMembers, listener);
   }
 }
