diff --git a/bundles/org.eclipse.jsch.ui/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.jsch.ui/.settings/org.eclipse.jdt.core.prefs
index 3f7e0fc..b603ebc 100644
--- a/bundles/org.eclipse.jsch.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/bundles/org.eclipse.jsch.ui/.settings/org.eclipse.jdt.core.prefs
@@ -76,8 +76,10 @@
 org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
 org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,NORMAL
 org.eclipse.jdt.core.compiler.taskTags=TODO,XXX
+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
@@ -86,17 +88,25 @@
 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_enum_constants=16
 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_module_statements=16
 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=80
 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=1
 org.eclipse.jdt.core.formatter.blank_lines_after_package=1
 org.eclipse.jdt.core.formatter.blank_lines_before_field=0
@@ -106,6 +116,7 @@
 org.eclipse.jdt.core.formatter.blank_lines_before_method=1
 org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
 org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+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
@@ -115,23 +126,38 @@
 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.align_tags_descriptions_grouped=true
+org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
 org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false
+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.count_line_length_from_starting_position=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
 org.eclipse.jdt.core.formatter.comment.format_comments=false
 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=true
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
 org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
 org.eclipse.jdt.core.formatter.comment.line_length=80
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+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=false
 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
@@ -141,16 +167,25 @@
 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=true
-org.eclipse.jdt.core.formatter.indentation.size=2
+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=insert
+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=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not 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=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not 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
@@ -159,14 +194,14 @@
 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=do not 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=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=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=do not 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=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not 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
@@ -192,10 +227,11 @@
 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=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
@@ -210,21 +246,23 @@
 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_assignment_operator=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=do not 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=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
@@ -239,6 +277,7 @@
 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
@@ -266,42 +305,46 @@
 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=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=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=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=do not 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=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=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=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=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=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
@@ -311,14 +354,35 @@
 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=80
+org.eclipse.jdt.core.formatter.lineSplit=120
+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=space
-org.eclipse.jdt.core.formatter.tabulation.size=2
+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=true
+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/bundles/org.eclipse.jsch.ui/.settings/org.eclipse.jdt.ui.prefs b/bundles/org.eclipse.jsch.ui/.settings/org.eclipse.jdt.ui.prefs
index 5fa0e28..2536167 100644
--- a/bundles/org.eclipse.jsch.ui/.settings/org.eclipse.jdt.ui.prefs
+++ b/bundles/org.eclipse.jsch.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -1,4 +1,62 @@
-#Thu Dec 07 16:35:54 JST 2006
 eclipse.preferences.version=1
-formatter_profile=_eclipse-java-code-formatter-20060522
-formatter_settings_version=10
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=org.eclipse.jdt.ui.default.eclipse_profile
+formatter_settings_version=14
+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=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+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=true
+sp_cleanup.format_source_code_changes_only=true
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+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=true
+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=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+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=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+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=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/IUIConstants.java b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/IUIConstants.java
index 4a294df..cffb10e 100644
--- a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/IUIConstants.java
+++ b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/IUIConstants.java
@@ -19,8 +19,8 @@
 
   // preferences
   public final String PREF_FIRST_STARTUP="pref_first_startup"; //$NON-NLS-1$
- 
+
   // images
   public final String IMG_KEY_LOCK="wizban/keylock.gif"; //$NON-NLS-1$
-  
+
 }
diff --git a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/JSchUIPlugin.java b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/JSchUIPlugin.java
index 0b3b643..e6ce9a8 100644
--- a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/JSchUIPlugin.java
+++ b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/JSchUIPlugin.java
@@ -40,7 +40,7 @@
 
   /**
    * Returns the singleton plug-in instance.
-   * 
+   *
    * @return the plugin instance
    */
   public static JSchUIPlugin getPlugin(){
@@ -69,7 +69,7 @@
 
   /**
    * Convenience method to get an image descriptor for an extension
-   * 
+   *
    * @param extension  the extension declaring the image
    * @param subdirectoryAndFilename  the path to the image
    * @return the image
@@ -85,13 +85,13 @@
   private void initializeImages() {
     createImageDescriptor(IUIConstants.IMG_KEY_LOCK);
   }
-  
+
   /**
    * @see Plugin#start(BundleContext)
    */
   public void start(BundleContext context) throws Exception {
     super.start(context);
-    
+
     initializeImages();
 
     IPreferenceStore store = getPreferenceStore();
@@ -102,12 +102,12 @@
     tracker = new ServiceTracker(getBundle().getBundleContext(),IJSchService.class.getName(), null);
     tracker.open();
   }
-  
+
   public void stop(BundleContext context) throws Exception{
     super.stop(context);
     tracker.close();
   }
-  
+
   public IJSchService getJSchService() {
     return (IJSchService)tracker.getService();
   }
diff --git a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/KeyboardInteractiveDialog.java b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/KeyboardInteractiveDialog.java
index da1a102..2b47a6f 100644
--- a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/KeyboardInteractiveDialog.java
+++ b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/KeyboardInteractiveDialog.java
@@ -46,7 +46,7 @@
   private String message;
   private String[] result;
   protected boolean allowCaching=false;
-  
+
   private boolean isPasswordAuth=false;
 
 
@@ -54,10 +54,10 @@
    * Creates a new KeyboardInteractiveDialog.
    *
    * @param parentShell the parent shell
-   * @param location 
-   * @param destination 
+   * @param location
+   * @param destination
    * @param name the name
-   * @param userName 
+   * @param userName
    * @param instruction the instruction
    * @param prompt the titles for text fields
    * @param echo '*' should be used or not
@@ -66,7 +66,7 @@
 				   String location,
 				   String destination,
 				   String name,
-				   String userName, 
+				   String userName,
 				   String instruction,
 				   String[] prompt,
 				   boolean[] echo){
@@ -79,11 +79,11 @@
     this.prompt=prompt;
     this.echo=echo;
     if (name!=null && name.length()>0) {
-    	this.message=NLS.bind(Messages.KeyboardInteractiveDialog_0, new String[] { destination, name });  
+    	this.message=NLS.bind(Messages.KeyboardInteractiveDialog_0, new String[] { destination, name });
     } else {
-    	this.message=NLS.bind(Messages.KeyboardInteractiveDialog_1, destination); 
+    	this.message=NLS.bind(Messages.KeyboardInteractiveDialog_1, destination);
     }
- 
+
     if(KeyboardInteractiveDialog.isPasswordAuth(prompt)){
         isPasswordAuth=true;
       }
@@ -156,7 +156,7 @@
 			data.widthHint = 300;
 			messageLabel.setLayoutData(data);
 		}
-		
+
 		if (domain != null) {
 			Label d = new Label(main, SWT.WRAP);
 			d.setText(Messages.KeyboardInteractiveDialog_3);
@@ -172,7 +172,7 @@
 			data.widthHint = 300;
 			label.setLayoutData(data);
 		}
-		
+
 		if (instruction != null && instruction.length() > 0) {
 			Label label = new Label(main, SWT.WRAP);
 			label.setText(instruction);
@@ -182,7 +182,7 @@
 			data.widthHint = 300;
 			label.setLayoutData(data);
 		}
-		
+
 		if (isPasswordAuth) {
 			createUsernameFields(main);
 		}
@@ -206,10 +206,10 @@
 		Dialog.applyDialogFont(parent);
 		return main;
 	}
-  
+
   /**
    * Creates the three widgets that represent the user name entry area.
-   * 
+   *
    * @param parent  the parent of the widgets
    */
   protected void createUsernameFields(Composite parent){
@@ -221,10 +221,10 @@
     data.widthHint=convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH);
     usernameField.setLayoutData(data);
   }
-  
+
   /**
 	 * Creates the widgets that represent the entry area.
-	 * 
+	 *
 	 * @param parent
 	 *            the parent of the widgets
 	 */
@@ -237,26 +237,26 @@
 	      if(!echo[i]){
 	        flag|=SWT.PASSWORD;
 	      }
-	      texts[i]=new Text(parent, flag); 
+	      texts[i]=new Text(parent, flag);
 	      GridData data=new GridData(GridData.FILL_HORIZONTAL);
 	      data.horizontalSpan=2;
 	      data.widthHint=convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH);
 	      texts[i].setLayoutData(data);
 	      if(!echo[i]){
 	        texts[i].setEchoChar('*');
-	      }     
+	      }
 	    }
   }
-  /**                                                                                           
-   * Returns the entered values, or null                                          
-   * if the user canceled.                                                                      
-   *                                                                                            
+  /**
+   * Returns the entered values, or null
+   * if the user canceled.
+   *
    * @return the entered values
    */
   public String[] getResult() {
     return result;
   }
-  
+
   /**
    * Returns <code>true</code> if the save password checkbox was selected.
    * @return <code>true</code> if the save password checkbox was selected and <code>false</code>
@@ -265,14 +265,14 @@
   public boolean getAllowCaching(){
     return allowCaching;
   }
-  
-  /**                                                                                           
-   * Notifies that the ok button of this dialog has been pressed.                               
-   * <p>                                                                                        
-   * The default implementation of this framework method sets                                   
-   * this dialog's return code to <code>Window.OK</code>                                        
-   * and closes the dialog. Subclasses may override.                                            
-   * </p>                                                                                       
+
+  /**
+   * Notifies that the ok button of this dialog has been pressed.
+   * <p>
+   * The default implementation of this framework method sets
+   * this dialog's return code to <code>Window.OK</code>
+   * and closes the dialog. Subclasses may override.
+   * </p>
    */
   protected void okPressed() {
     result=new String[prompt.length];
@@ -281,19 +281,19 @@
     }
     super.okPressed();
   }
-  /**                                                                                           
-   * Notifies that the cancel button of this dialog has been pressed.                               
-   * <p>                                                                                        
-   * The default implementation of this framework method sets                                   
-   * this dialog's return code to <code>Window.CANCEL</code>                                        
-   * and closes the dialog. Subclasses may override.                                            
-   * </p>                                                                                       
+  /**
+   * Notifies that the cancel button of this dialog has been pressed.
+   * <p>
+   * The default implementation of this framework method sets
+   * this dialog's return code to <code>Window.CANCEL</code>
+   * and closes the dialog. Subclasses may override.
+   * </p>
    */
   protected void cancelPressed() {
     result=null;
     super.cancelPressed();
   }
-    
+
   /* (non-Javadoc)
    * @see org.eclipse.jface.dialogs.Dialog#close()
    */
@@ -303,7 +303,7 @@
     }
     return super.close();
   }
-  
+
   /**
    * Guesses if this dialog is used for password authentication.
    * @param prompt prompts for keyboard-interactive authentication method.
diff --git a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/Messages.java b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/Messages.java
index 583ab42..128f015 100644
--- a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/Messages.java
+++ b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/Messages.java
@@ -20,7 +20,7 @@
     // load message values from bundle file
     NLS.initializeMessages(BUNDLE_NAME, Messages.class);
   }
-  
+
   public static String CVSSSH2ServerConnection_open;
   public static String CVSSSH2PreferencePage_18;
   public static String CVSSSH2PreferencePage_19;
@@ -122,7 +122,7 @@
   public static String UserValidationDialog_password;
   public static String UserValidationDialog_user;
 
-  
+
   public static String WorkbenchUserAuthenticator_cancelled;
   public static String WorkbenchUserAuthenticator_1;
   public static String WorkbenchUserAuthenticator_2;
diff --git a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/UserValidationDialog.java b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/UserValidationDialog.java
index d3f161a..d80ae8f 100644
--- a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/UserValidationDialog.java
+++ b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/UserValidationDialog.java
@@ -38,7 +38,7 @@
 	protected String password = null;
 	protected boolean allowCaching = false;
 	protected Image keyLockImage;
-	
+
 	// whether or not the user name can be changed
 	protected boolean isUsernameMutable = true;
 	protected String username = null;
@@ -46,7 +46,7 @@
 
 	/**
 	 * Creates a new UserValidationDialog.
-	 * 
+	 *
 	 * @param parentShell  the parent shell
 	 * @param location  the location
 	 * @param defaultName  the default user name
@@ -64,9 +64,9 @@
 	 */
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
-		newShell.setText(Messages.UserValidationDialog_0); 
+		newShell.setText(Messages.UserValidationDialog_0);
 		// set F1 help
-        PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IHelpContextIds.USER_VALIDATION_DIALOG);	
+        PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IHelpContextIds.USER_VALIDATION_DIALOG);
 	}
 	/**
 	 * @see Window#create
@@ -75,7 +75,7 @@
 		super.create();
 		// add some default values
 		usernameField.setText(defaultUsername);
-	
+
 		if (isUsernameMutable) {
 			// give focus to user name field
 			usernameField.selectAll();
@@ -85,7 +85,7 @@
 			passwordField.setFocus();
 		}
 	}
-	
+
 	/**
 	 * @see Dialog#createDialogArea
 	 */
@@ -93,10 +93,10 @@
 		Composite top = new Composite(parent, SWT.NONE);
 		GridLayout layout = new GridLayout();
 		layout.numColumns = 2;
-		
+
 		top.setLayout(layout);
 		top.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-	
+
 		Composite imageComposite = new Composite(top, SWT.NONE);
 		layout = new GridLayout();
 		imageComposite.setLayout(layout);
@@ -107,13 +107,13 @@
 		layout.numColumns = 3;
 		main.setLayout(layout);
 		main.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		
+
 		Label imageLabel = new Label(imageComposite, SWT.NONE);
 		keyLockImage = ImageDescriptor.createFromURL(JSchUIPlugin.getPlugin().getImageUrl(IUIConstants.IMG_KEY_LOCK)).createImage();
 		imageLabel.setImage(keyLockImage);
 		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
 		imageLabel.setLayoutData(data);
-		
+
 		if (message != null) {
 			Label messageLabel = new Label(main, SWT.WRAP);
 			messageLabel.setText(message);
@@ -124,11 +124,11 @@
 		}
 		if (domain != null) {
 			Label d = new Label(main, SWT.WRAP);
-			d.setText(Messages.UserValidationDialog_1); 
+			d.setText(Messages.UserValidationDialog_1);
 			data = new GridData();
 			d.setLayoutData(data);
 			Label label = new Label(main, SWT.WRAP);
-			label.setText(domain); 
+			label.setText(domain);
 			data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
 			data.horizontalSpan = 2;
 			data.widthHint = 300;
@@ -136,10 +136,10 @@
 		}
 		createUsernameFields(main);
 		createPasswordFields(main);
-		
+
 		if(domain != null) {
 			allowCachingButton = new Button(main, SWT.CHECK);
-			allowCachingButton.setText(Messages.UserValidationDialog_2); 
+			allowCachingButton.setText(Messages.UserValidationDialog_2);
 			data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
 			data.horizontalSpan = 3;
 			allowCachingButton.setLayoutData(data);
@@ -149,20 +149,20 @@
 				}
 			});
 		}
-		
+
         Dialog.applyDialogFont(parent);
-        
+
 		return main;
 	}
-	
+
 	/**
 	 * Creates the three widgets that represent the password entry area.
-	 * 
+	 *
 	 * @param parent  the parent of the widgets
 	 */
 	protected void createPasswordFields(Composite parent) {
-		new Label(parent, SWT.NONE).setText(Messages.UserValidationDialog_4); 
-		
+		new Label(parent, SWT.NONE).setText(Messages.UserValidationDialog_4);
+
 		passwordField = new Text(parent, SWT.BORDER | SWT.PASSWORD);
 		GridData data = new GridData(GridData.FILL_HORIZONTAL);
 		data.horizontalSpan = 2;
@@ -171,39 +171,39 @@
 	}
 	/**
 	 * Creates the three widgets that represent the user name entry area.
-	 * 
+	 *
 	 * @param parent  the parent of the widgets
 	 */
 	protected void createUsernameFields(Composite parent) {
-		new Label(parent, SWT.NONE).setText(Messages.UserValidationDialog_5); 
-		
+		new Label(parent, SWT.NONE).setText(Messages.UserValidationDialog_5);
+
 		usernameField = new Text(parent, SWT.BORDER);
 		GridData data = new GridData(GridData.FILL_HORIZONTAL);
 		data.horizontalSpan = 2;
 		data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH);
 		usernameField.setLayoutData(data);
 	}
-	
+
 	/**
 	 * Returns the password entered by the user, or null
 	 * if the user canceled.
-	 * 
+	 *
 	 * @return the entered password
 	 */
 	public String getPassword() {
 		return password;
 	}
-	
+
 	/**
 	 * Returns the user name entered by the user, or null
 	 * if the user canceled.
-	 * 
+	 *
 	 * @return the entered user name
 	 */
 	public String getUsername() {
 		return username;
 	}
-	
+
 	/**
 	 * Returns <code>true</code> if the save password checkbox was selected.
 	 * @return <code>true</code> if the save password checkbox was selected and <code>false</code>
@@ -212,7 +212,7 @@
 	public boolean getAllowCaching() {
 		return allowCaching;
 	}
-	
+
 	/**
 	 * Notifies that the ok button of this dialog has been pressed.
 	 * <p>
@@ -224,27 +224,27 @@
 	protected void okPressed() {
 		password = passwordField.getText();
 		username = usernameField.getText();
-	
+
 		super.okPressed();
 	}
-	
+
 	protected void cancelPressed(){
 	  password = null;
 	  username = null;
 	  super.cancelPressed();
 	}
-	
+
 	/**
 	 * Sets whether or not the user name field should be mutable.
 	 * This method must be called before create(), otherwise it
 	 * will be ignored.
-	 * 
+	 *
 	 * @param value  whether the user name is mutable
 	 */
 	public void setUsernameMutable(boolean value) {
 		isUsernameMutable = value;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#close()
 	 */
diff --git a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/authenticator/IHelpContextIds.java b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/authenticator/IHelpContextIds.java
index d9ef67d..c973a01 100644
--- a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/authenticator/IHelpContextIds.java
+++ b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/authenticator/IHelpContextIds.java
@@ -15,7 +15,7 @@
 
 /**
  * Here's how to reference the help context in code:
- * 
+ *
  * WorkbenchHelp.setHelp(actionOrControl, IHelpContextIds.NAME_DEFIED_BELOW);
  * @since 1.1
  */
diff --git a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/authenticator/KeyboardInteractiveDialog.java b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/authenticator/KeyboardInteractiveDialog.java
index 19e7f54..3df1e4d 100644
--- a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/authenticator/KeyboardInteractiveDialog.java
+++ b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/authenticator/KeyboardInteractiveDialog.java
@@ -36,13 +36,13 @@
 public class KeyboardInteractiveDialog extends TrayDialog{
   // whether or not the user name can be changed
   protected boolean isUsernameMutable=false;
-  
+
   // widgets
   private Text[] texts;
   protected Image keyLockImage;
   protected Button allowCachingButton;
   protected Text usernameField;
-  
+
   protected String defaultUsername;
   protected String comment;
   protected String destination;
@@ -54,7 +54,7 @@
   private String message;
   private String[] result;
   protected boolean allowCaching=false;
-  
+
   private boolean isPasswordAuth=false;
 
   /**
@@ -83,12 +83,12 @@
     this.echo=echo;
     this.message=NLS.bind(Messages.KeyboradInteractiveDialog_message,
         new String[] {destination
-            +(name!=null&&name.length()>0 ? ": "+name : "")}); //NON-NLS-1$ //$NON-NLS-1$ //$NON-NLS-2$ 
- 
+            +(name!=null&&name.length()>0 ? ": "+name : "")}); //NON-NLS-1$ //$NON-NLS-1$ //$NON-NLS-2$
+
     if(prompt!=null && prompt.length==1 && prompt[0].trim().equalsIgnoreCase("password:")){ //$NON-NLS-1$
       isPasswordAuth=true;
     }
-  
+
   }
 
   /**
@@ -107,8 +107,8 @@
         IHelpContextIds.KEYBOARD_INTERACTIVE_DIALOG);
   }
 
-  /**                                                                                           
-   * @see Window#create                                                                         
+  /**
+   * @see Window#create
    */
   public void create(){
     super.create();
@@ -123,8 +123,8 @@
     }
   }
 
-  /**                                                                                           
-   * @see Dialog#createDialogArea                                                               
+  /**
+   * @see Dialog#createDialogArea
    */
   protected Control createDialogArea(Composite parent){
     Composite top=new Composite(parent, SWT.NONE);
@@ -133,18 +133,18 @@
 
     top.setLayout(layout);
     top.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-    
+
     Composite imageComposite=new Composite(top, SWT.NONE);
     layout=new GridLayout();
     imageComposite.setLayout(layout);
     imageComposite.setLayoutData(new GridData(GridData.FILL_VERTICAL));
-    
+
     Composite main=new Composite(top, SWT.NONE);
     layout=new GridLayout();
     layout.numColumns=3;
     main.setLayout(layout);
     main.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-    
+
     Label imageLabel=new Label(imageComposite, SWT.NONE);
     keyLockImage=JSchUIPlugin.getImageDescriptor(IUIConstants.IMG_KEY_LOCK)
         .createImage();
@@ -184,13 +184,13 @@
       data.widthHint=400;
       label.setLayoutData(data);
     }
-    
+
     if(isPasswordAuth){
       createUsernameFields(main);
     }
-    
+
     createPasswordFields(main);
-    
+
     if(isPasswordAuth){
     allowCachingButton=new Button(main, SWT.CHECK);
     allowCachingButton.setText(Messages.UserValidationDialog_6);
@@ -203,15 +203,15 @@
       }
     });
     }
-    
+
     Dialog.applyDialogFont(parent);
-    
+
     return main;
   }
 
   /**
    * Creates the three widgets that represent the user name entry area.
-   * 
+   *
    * @param parent  the parent of the widgets
    */
   protected void createUsernameFields(Composite parent){
@@ -223,11 +223,11 @@
     data.widthHint=convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH);
     usernameField.setLayoutData(data);
   }
-  
-  /**                                                                                           
-   * Creates the widgets that represent the entry area.                          
-   *                                                                                            
-   * @param parent  the parent of the widgets                                                   
+
+  /**
+   * Creates the widgets that represent the entry area.
+   *
+   * @param parent  the parent of the widgets
    */
   protected void createPasswordFields(Composite parent){
     texts=new Text[prompt.length];
@@ -238,21 +238,21 @@
       if(!echo[i]){
         flag|=SWT.PASSWORD;
       }
-      texts[i]=new Text(parent, flag); 
+      texts[i]=new Text(parent, flag);
       GridData data=new GridData(GridData.FILL_HORIZONTAL);
       data.horizontalSpan=2;
       data.widthHint=convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH);
       texts[i].setLayoutData(data);
       if(!echo[i]){
         texts[i].setEchoChar('*');
-      }     
+      }
     }
   }
 
-  /**                                                                                           
-   * Returns the entered values, or null                                          
-   * if the user canceled.                                                                      
-   *                                                                                            
+  /**
+   * Returns the entered values, or null
+   * if the user canceled.
+   *
    * @return the entered values
    */
   public String[] getResult(){
@@ -267,14 +267,14 @@
   public boolean getAllowCaching(){
     return allowCaching;
   }
-  
-  /**                                                                                           
-   * Notifies that the ok button of this dialog has been pressed.                               
-   * <p>                                                                                        
-   * The default implementation of this framework method sets                                   
-   * this dialog's return code to <code>Window.OK</code>                                        
-   * and closes the dialog. Subclasses may override.                                            
-   * </p>                                                                                       
+
+  /**
+   * Notifies that the ok button of this dialog has been pressed.
+   * <p>
+   * The default implementation of this framework method sets
+   * this dialog's return code to <code>Window.OK</code>
+   * and closes the dialog. Subclasses may override.
+   * </p>
    */
   protected void okPressed(){
     result=new String[prompt.length];
@@ -288,26 +288,26 @@
    * Sets whether or not the username field should be mutable.
    * This method must be called before create(), otherwise it
    * will be ignored.
-   * 
+   *
    * @param value  whether the username is mutable
    */
   public void setUsernameMutable(boolean value){
     isUsernameMutable=value;
   }
-  
-  /**                                                                                           
-   * Notifies that the cancel button of this dialog has been pressed.                               
-   * <p>                                                                                        
-   * The default implementation of this framework method sets                                   
-   * this dialog's return code to <code>Window.CANCEL</code>                                        
-   * and closes the dialog. Subclasses may override.                                            
-   * </p>                                                                                       
+
+  /**
+   * Notifies that the cancel button of this dialog has been pressed.
+   * <p>
+   * The default implementation of this framework method sets
+   * this dialog's return code to <code>Window.CANCEL</code>
+   * and closes the dialog. Subclasses may override.
+   * </p>
    */
   protected void cancelPressed(){
     result=null;
     super.cancelPressed();
   }
-  
+
   /* (non-Javadoc)
    * @see org.eclipse.jface.dialogs.Dialog#close()
    */
diff --git a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/authenticator/UserValidationDialog.java b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/authenticator/UserValidationDialog.java
index aedc2d6..11ba270 100644
--- a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/authenticator/UserValidationDialog.java
+++ b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/authenticator/UserValidationDialog.java
@@ -52,7 +52,7 @@
 
   /**
    * Creates a new UserValidationDialog.
-   * 
+   *
    * @param parentShell
    *          the parent shell
    * @param comment
@@ -180,7 +180,7 @@
 
   /**
    * Creates the three widgets that represent the password entry area.
-   * 
+   *
    * @param parent
    *          the parent of the widgets
    */
@@ -196,7 +196,7 @@
 
   /**
    * Creates the three widgets that represent the user name entry area.
-   * 
+   *
    * @param parent
    *          the parent of the widgets
    */
@@ -212,7 +212,7 @@
 
   /**
    * Returns the password entered by the user, or null if the user canceled.
-   * 
+   *
    * @return the entered password
    */
   public String getPassword(){
@@ -221,7 +221,7 @@
 
   /**
    * Returns the username entered by the user, or null if the user canceled.
-   * 
+   *
    * @return the entered username
    */
   public String getUsername(){
@@ -230,7 +230,7 @@
 
   /**
    * Returns <code>true</code> if the save password checkbox was selected.
-   * 
+   *
    * @return <code>true</code> if the save password checkbox was selected and
    *         <code>false</code> otherwise.
    */
@@ -256,7 +256,7 @@
   /**
    * Sets whether or not the username field should be mutable. This method must
    * be called before create(), otherwise it will be ignored.
-   * 
+   *
    * @param value
    *          whether the username is mutable
    */
@@ -266,7 +266,7 @@
 
   /*
    * (non-Javadoc)
-   * 
+   *
    * @see org.eclipse.jface.dialogs.Dialog#close()
    */
   public boolean close(){
diff --git a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/authenticator/WorkbenchUserAuthenticator.java b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/authenticator/WorkbenchUserAuthenticator.java
index 84c016e..1852fe4 100644
--- a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/authenticator/WorkbenchUserAuthenticator.java
+++ b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/authenticator/WorkbenchUserAuthenticator.java
@@ -4,7 +4,7 @@
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Atsuhiko Yamanaka, JCraft,Inc. - implementation of promptForKeyboradInteractive
@@ -90,7 +90,7 @@
    * results in the supplied string[].  result[0] must
    * contain the username, result[1] must contain the password.
    * If the user canceled, both values must be zero.
-   * 
+   *
    * @param location  the location to obtain the password for
    * @param username  the username
    * @param message  a message to display to the user
@@ -111,8 +111,8 @@
   }
 
   /**
-   * Asks the user to enter values. 
-   * 
+   * Asks the user to enter values.
+   *
    * @param location  the location to obtain the password for
    * @param destination the location
    * @param name the name
@@ -161,7 +161,7 @@
     String comment=location==null ? null : location.getComment();
     String username=location==null ? "" : location.getUsername(); //$NON-NLS-1$
     KeyboardInteractiveDialog dialog=new KeyboardInteractiveDialog(null,
-        comment, destination, name, username, instruction, prompt, echo); 
+        comment, destination, name, username, instruction, prompt, echo);
     dialog.setUsernameMutable(false);
     dialog.open();
     String[] _result=dialog.getResult();
@@ -216,7 +216,7 @@
         openConfirm[0]=MessageDialog.openConfirm(null,
             Messages.WorkbenchUserAuthenticator_1, NLS.bind(
                 Messages.WorkbenchUserAuthenticator_2, new String[] {location
-                    .getHost()})); // 
+                    .getHost()})); //
       }
     });
     if(!openConfirm[0]){
@@ -224,7 +224,7 @@
     }
     return openConfirm[0];
   }
-  
+
   /**
    * Returns the standard display to be used. The method first checks, if
    * the thread calling this method has an associated display. If so, this
diff --git a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/preference/PixelConverter.java b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/preference/PixelConverter.java
index 039c12e..7b113ed 100644
--- a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/preference/PixelConverter.java
+++ b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/preference/PixelConverter.java
@@ -17,9 +17,9 @@
 import org.eclipse.swt.widgets.Control;
 
 public class PixelConverter {
-	
+
 	private final FontMetrics fFontMetrics;
-	
+
 	public PixelConverter(Control control) {
 		GC gc = new GC(control);
         try {
@@ -29,7 +29,7 @@
             gc.dispose();
         }
 	}
-	
+
 	public int convertHeightInCharsToPixels(int chars) {
 		return Dialog.convertHeightInCharsToPixels(fFontMetrics, chars);
 	}
@@ -41,7 +41,7 @@
 	public int convertVerticalDLUsToPixels(int dlus) {
 		return Dialog.convertVerticalDLUsToPixels(fFontMetrics, dlus);
 	}
-	
+
 	public int convertWidthInCharsToPixels(int chars) {
 		return Dialog.convertWidthInCharsToPixels(fFontMetrics, chars);
 	}
diff --git a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/preference/PreferencePage.java b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/preference/PreferencePage.java
index 54a7f9b..e4c5202 100644
--- a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/preference/PreferencePage.java
+++ b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/preference/PreferencePage.java
@@ -116,7 +116,7 @@
   KeyPair kpair=null;
   String kpairComment;
 
-  public static final String AUTH_SCHEME="";//$NON-NLS-1$ 
+  public static final String AUTH_SCHEME="";//$NON-NLS-1$
 
   public PreferencePage(){
     setDescription(Messages.CVSSSH2PreferencePage_18);
@@ -142,15 +142,15 @@
     tabItem=new CTabItem(tabFolder, SWT.NONE);
     tabItem.setText(Messages.CVSSSH2PreferencePage_133);
     tabItem.setControl(createHostKeyManagementPage(tabFolder));
-    
+
     tabItem=new CTabItem(tabFolder, SWT.NONE);
     tabItem.setText(Messages.CVSSSH2PreferencePage_137);
     tabItem.setControl(createPreferredAuthenticationPage(tabFolder));
-    
+
     tabItem=new CTabItem(tabFolder, SWT.NONE);
     tabItem.setText(Messages.CVSSSH2PreferencePage_144);
     tabItem.setControl(createPreferredKeyExchangePage(tabFolder));
-    
+
     tabItem=new CTabItem(tabFolder, SWT.NONE);
     tabItem.setText(Messages.CVSSSH2PreferencePage_145);
     tabItem.setControl(createPreferredMACPage(tabFolder));
@@ -614,7 +614,7 @@
           }
 
           ByteArrayOutputStream out=new ByteArrayOutputStream();
-          
+
           kpair.writePublicKey(out, kpairComment);
           out.close();
           publicKeyText.setText(out.toString());
@@ -757,7 +757,7 @@
 
         if(new File(file).exists()){
           if(!MessageDialog.openConfirm(getShell(),
-              Messages.CVSSSH2PreferencePage_confirmation, // 
+              Messages.CVSSSH2PreferencePage_confirmation, //
               NLS.bind(Messages.CVSSSH2PreferencePage_53, new String[] {file}))){
             return;
           }
@@ -899,8 +899,8 @@
     columns[1].setText(Messages.CVSSSH2PreferencePage_135);
     columns[2].setText(Messages.CVSSSH2PreferencePage_136);
     viewer.setColumnProperties(new String[] {
-        Messages.CVSSSH2PreferencePage_134, // 
-        Messages.CVSSSH2PreferencePage_135, // 
+        Messages.CVSSSH2PreferencePage_134, //
+        Messages.CVSSSH2PreferencePage_135, //
         Messages.CVSSSH2PreferencePage_136});
     viewer.setLabelProvider(new TableLabelProvider());
     viewer.setContentProvider(new IStructuredContentProvider(){
@@ -955,7 +955,7 @@
 
     return group;
   }
-  
+
   private Control createPreferredAuthenticationPage(Composite parent){
     Composite root = new Composite(parent, SWT.NONE);
     GridLayout layout=new GridLayout();
@@ -965,13 +965,13 @@
     layout.horizontalSpacing=convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
     layout.numColumns = 2;
     root.setLayout(layout);
-    
+
     Label label=new Label(root, SWT.NONE);
     GridData textLayoutData=new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false);
     textLayoutData.horizontalSpan = 2;
     label.setLayoutData(textLayoutData);
     label.setText(Messages.CVSSSH2PreferencePage_4);
-    
+
     preferedAuthMethodTable=new Table(root, SWT.CHECK | SWT.BORDER);
     GridData layoutData=new GridData(SWT.FILL, SWT.BEGINNING, true, true);
     layoutData.verticalSpan = 3;
@@ -979,25 +979,25 @@
     layoutData.minimumHeight = 150;
     layoutData.minimumWidth = 200;
     populateAuthMethods();
-    
+
     up=new Button(root, SWT.PUSH);
     up.setText(Messages.CVSSSH2PreferencePage_2);
     up.setEnabled(false);
     setButtonLayoutData(up);
-    
+
     down=new Button(root, SWT.PUSH);
     down.setText(Messages.CVSSSH2PreferencePage_3);
     down.setEnabled(false);
     setButtonLayoutData(down);
-    
+
     preferedAuthMethodTable.addSelectionListener(new SelectionAdapter(){
-      
+
       public void widgetSelected(SelectionEvent e){
         boolean anySelected = false;
         for(int i = 0; i < preferedAuthMethodTable.getItemCount(); i++){
           anySelected |= preferedAuthMethodTable.getItem(i).getChecked();
         }
-        
+
         if(anySelected){
           setErrorMessage(null);
           setValid(true);
@@ -1011,7 +1011,7 @@
             .setEnabled(preferedAuthMethodTable.getSelectionIndex()<preferedAuthMethodTable
                 .getItemCount()-1);
       }
-      
+
     });
     up.addSelectionListener(new SelectionAdapter(){
 
@@ -1023,21 +1023,21 @@
         down.setEnabled(true);
         TableItem sourceItem = preferedAuthMethodTable.getItem(selectedIndex);
         TableItem targetItem = preferedAuthMethodTable.getItem(selectedIndex-1);
-        
+
         //switch text
         String stemp = targetItem.getText();
         targetItem.setText(sourceItem.getText());
         sourceItem.setText(stemp);
-        
+
         //switch selection
         boolean btemp = targetItem.getChecked();
         targetItem.setChecked(sourceItem.getChecked());
         sourceItem.setChecked(btemp);
-        
+
         preferedAuthMethodTable.setSelection(targetItem);
       }
     });
-    
+
     down.addSelectionListener(new SelectionAdapter(){
 
       public void widgetSelected(SelectionEvent e){
@@ -1048,21 +1048,21 @@
         up.setEnabled(true);
         TableItem sourceItem = preferedAuthMethodTable.getItem(selectedIndex);
         TableItem targetItem = preferedAuthMethodTable.getItem(selectedIndex+1);
-        
+
         //switch text
         String stemp = targetItem.getText();
         targetItem.setText(sourceItem.getText());
         sourceItem.setText(stemp);
-        
+
         //switch selection
         boolean btemp = targetItem.getChecked();
         targetItem.setChecked(sourceItem.getChecked());
         sourceItem.setChecked(btemp);
-        
+
         preferedAuthMethodTable.setSelection(targetItem);
       }
     });
-    
+
     return root;
   }
 
@@ -1070,9 +1070,9 @@
     preferedAuthMethodTable.removeAll();
     String[] methods = Utils.getEnabledPreferredAuthMethods().split(","); //$NON-NLS-1$
     Set smethods  = new HashSet(Arrays.asList(methods));
-    
+
     String[] order = Utils.getMethodsOrder().split(","); //$NON-NLS-1$
-    
+
     for(int i=0; i<order.length; i++){
       TableItem tableItem= new TableItem(preferedAuthMethodTable, SWT.NONE);
       tableItem.setText(0, order[i]);
@@ -1081,7 +1081,7 @@
       }
     }
   }
-  
+
   private Control createPreferredKeyExchangePage(Composite parent){
     Composite root = new Composite(parent, SWT.NONE);
     GridLayout layout=new GridLayout();
@@ -1091,13 +1091,13 @@
     layout.horizontalSpacing=convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
     layout.numColumns = 2;
     root.setLayout(layout);
-    
+
     Label label=new Label(root, SWT.NONE);
     GridData textLayoutData=new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false);
     textLayoutData.horizontalSpan = 2;
     label.setLayoutData(textLayoutData);
     label.setText(Messages.CVSSSH2PreferencePage_140);
-    
+
     preferedKeyExchangeMethodTable=new Table(root, SWT.CHECK | SWT.BORDER);
     GridData layoutData=new GridData(SWT.FILL, SWT.BEGINNING, true, true);
     layoutData.verticalSpan = 3;
@@ -1105,25 +1105,25 @@
     layoutData.minimumHeight = 150;
     layoutData.minimumWidth = 200;
     populateAuthMethods();
-    
+
     kex_up=new Button(root, SWT.PUSH);
     kex_up.setText(Messages.CVSSSH2PreferencePage_2);
     kex_up.setEnabled(false);
     setButtonLayoutData(kex_up);
-    
+
     kex_down=new Button(root, SWT.PUSH);
     kex_down.setText(Messages.CVSSSH2PreferencePage_3);
     kex_down.setEnabled(false);
     setButtonLayoutData(kex_down);
-    
+
     preferedKeyExchangeMethodTable.addSelectionListener(new SelectionAdapter(){
-      
+
       public void widgetSelected(SelectionEvent e){
         boolean anySelected = false;
         for(int i = 0; i < preferedKeyExchangeMethodTable.getItemCount(); i++){
           anySelected |= preferedKeyExchangeMethodTable.getItem(i).getChecked();
         }
-        
+
         if(anySelected){
           setErrorMessage(null);
           setValid(true);
@@ -1137,7 +1137,7 @@
             .setEnabled(preferedKeyExchangeMethodTable.getSelectionIndex()<preferedKeyExchangeMethodTable
                 .getItemCount()-1);
       }
-      
+
     });
     kex_up.addSelectionListener(new SelectionAdapter(){
 
@@ -1149,21 +1149,21 @@
         kex_down.setEnabled(true);
         TableItem sourceItem = preferedKeyExchangeMethodTable.getItem(selectedIndex);
         TableItem targetItem = preferedKeyExchangeMethodTable.getItem(selectedIndex-1);
-        
+
         //switch text
         String stemp = targetItem.getText();
         targetItem.setText(sourceItem.getText());
         sourceItem.setText(stemp);
-        
+
         //switch selection
         boolean btemp = targetItem.getChecked();
         targetItem.setChecked(sourceItem.getChecked());
         sourceItem.setChecked(btemp);
-        
+
         preferedKeyExchangeMethodTable.setSelection(targetItem);
       }
     });
-    
+
     kex_down.addSelectionListener(new SelectionAdapter(){
 
       public void widgetSelected(SelectionEvent e){
@@ -1174,21 +1174,21 @@
         kex_up.setEnabled(true);
         TableItem sourceItem = preferedKeyExchangeMethodTable.getItem(selectedIndex);
         TableItem targetItem = preferedKeyExchangeMethodTable.getItem(selectedIndex+1);
-        
+
         //switch text
         String stemp = targetItem.getText();
         targetItem.setText(sourceItem.getText());
         sourceItem.setText(stemp);
-        
+
         //switch selection
         boolean btemp = targetItem.getChecked();
         targetItem.setChecked(sourceItem.getChecked());
         sourceItem.setChecked(btemp);
-        
+
         preferedKeyExchangeMethodTable.setSelection(targetItem);
       }
     });
-    
+
     return root;
   }
 
@@ -1196,9 +1196,9 @@
     preferedKeyExchangeMethodTable.removeAll();
     String[] methods = Utils.getEnabledPreferredKEXMethods().split(","); //$NON-NLS-1$
     Set smethods  = new HashSet(Arrays.asList(methods));
-    
+
     String[] order = Utils.getKEXMethodsOrder().split(","); //$NON-NLS-1$
-    
+
     for(int i=0; i<order.length; i++){
       TableItem tableItem= new TableItem(preferedKeyExchangeMethodTable, SWT.NONE);
       tableItem.setText(0, order[i]);
@@ -1207,7 +1207,7 @@
       }
     }
   }
-  
+
   private Control createPreferredMACPage(Composite parent){
     Composite root = new Composite(parent, SWT.NONE);
     GridLayout layout=new GridLayout();
@@ -1217,13 +1217,13 @@
     layout.horizontalSpacing=convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
     layout.numColumns = 2;
     root.setLayout(layout);
-    
+
     Label label=new Label(root, SWT.NONE);
     GridData textLayoutData=new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false);
     textLayoutData.horizontalSpan = 2;
     label.setLayoutData(textLayoutData);
     label.setText(Messages.CVSSSH2PreferencePage_141);
-    
+
     preferedMACMethodTable=new Table(root, SWT.CHECK | SWT.BORDER);
     GridData layoutData=new GridData(SWT.FILL, SWT.BEGINNING, true, true);
     layoutData.verticalSpan = 3;
@@ -1231,25 +1231,25 @@
     layoutData.minimumHeight = 150;
     layoutData.minimumWidth = 200;
     populateMACMethods();
-    
+
     mac_up=new Button(root, SWT.PUSH);
     mac_up.setText(Messages.CVSSSH2PreferencePage_2);
     mac_up.setEnabled(false);
     setButtonLayoutData(mac_up);
-    
+
     mac_down=new Button(root, SWT.PUSH);
     mac_down.setText(Messages.CVSSSH2PreferencePage_3);
     mac_down.setEnabled(false);
     setButtonLayoutData(mac_down);
-    
+
     preferedMACMethodTable.addSelectionListener(new SelectionAdapter(){
-      
+
       public void widgetSelected(SelectionEvent e){
         boolean anySelected = false;
         for(int i = 0; i < preferedMACMethodTable.getItemCount(); i++){
           anySelected |= preferedMACMethodTable.getItem(i).getChecked();
         }
-        
+
         if(anySelected){
           setErrorMessage(null);
           setValid(true);
@@ -1263,7 +1263,7 @@
             .setEnabled(preferedMACMethodTable.getSelectionIndex()<preferedMACMethodTable
                 .getItemCount()-1);
       }
-      
+
     });
     mac_up.addSelectionListener(new SelectionAdapter(){
 
@@ -1275,21 +1275,21 @@
         mac_down.setEnabled(true);
         TableItem sourceItem = preferedMACMethodTable.getItem(selectedIndex);
         TableItem targetItem = preferedMACMethodTable.getItem(selectedIndex-1);
-        
+
         //switch text
         String stemp = targetItem.getText();
         targetItem.setText(sourceItem.getText());
         sourceItem.setText(stemp);
-        
+
         //switch selection
         boolean btemp = targetItem.getChecked();
         targetItem.setChecked(sourceItem.getChecked());
         sourceItem.setChecked(btemp);
-        
+
         preferedMACMethodTable.setSelection(targetItem);
       }
     });
-    
+
     mac_down.addSelectionListener(new SelectionAdapter(){
 
       public void widgetSelected(SelectionEvent e){
@@ -1300,21 +1300,21 @@
         mac_up.setEnabled(true);
         TableItem sourceItem = preferedMACMethodTable.getItem(selectedIndex);
         TableItem targetItem = preferedMACMethodTable.getItem(selectedIndex+1);
-        
+
         //switch text
         String stemp = targetItem.getText();
         targetItem.setText(sourceItem.getText());
         sourceItem.setText(stemp);
-        
+
         //switch selection
         boolean btemp = targetItem.getChecked();
         targetItem.setChecked(sourceItem.getChecked());
         sourceItem.setChecked(btemp);
-        
+
         preferedMACMethodTable.setSelection(targetItem);
       }
     });
-    
+
     return root;
   }
 
@@ -1367,9 +1367,9 @@
     preferedMACMethodTable.removeAll();
     String[] methods = Utils.getEnabledPreferredMACMethods().split(","); //$NON-NLS-1$
     Set smethods  = new HashSet(Arrays.asList(methods));
-    
+
     String[] order = Utils.getMACMethodsOrder().split(","); //$NON-NLS-1$
-    
+
     for(int i=0; i<order.length; i++){
       TableItem tableItem= new TableItem(preferedMACMethodTable, SWT.NONE);
       tableItem.setText(0, order[i]);
@@ -1403,7 +1403,7 @@
         MessageDialog.openInformation(getShell(), Messages.PreferencePage_0, Messages.PreferencePage_1);
         return;
       }
-      
+
       IJSchLocation location=service.getLocation(user, host, port);
       // We hope that prompts for jsch are given by IJSchService, so "null" should be passed.
       Session session = service.createSession(location, null);
@@ -1419,7 +1419,7 @@
 	      ChannelSftp c=(ChannelSftp)channel;
 
 	      SftpATTRS attr=null;
-	
+
 	      try{
 	        attr=c.stat(".ssh");} //$NON-NLS-1$
 	      catch(SftpException ee){
@@ -1457,7 +1457,7 @@
 	          Messages.CVSSSH2PreferencePage_information,
 	          NLS.bind(Messages.CVSSSH2PreferencePage_109, (user
 	              +"@"+host+(port==22 ? "" : ":"+port)+":~/.ssh/authorized_keys"))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-	
+
 	      c.quit();
 	      c.disconnect();
       } finally {
@@ -1577,7 +1577,7 @@
     }
     Utils.setEnabledPreferredAuthMethods(selected, order);
   }
-  
+
   private void storeSSHAgentSettings(){
     String selected = ""; //$NON-NLS-1$
     for(int i = 0; i < preferedSSHAgentTable.getItemCount(); i++){
@@ -1615,7 +1615,7 @@
     }
     Utils.setEnabledPreferredKEXMethods(selected, order);
   }
-  
+
   private void storeMACMethodSettings(){
     String selected = null;
     String order = null;
diff --git a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/preference/SWTUtils.java b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/preference/SWTUtils.java
index 9b9b15f..222fbe7 100644
--- a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/preference/SWTUtils.java
+++ b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/preference/SWTUtils.java
@@ -22,7 +22,7 @@
 import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
 
 public class SWTUtils {
-	
+
 	public static final int MARGINS_DEFAULT= -1;
 	public static final int MARGINS_NONE= 0;
 	public static final int MARGINS_DIALOG= 1;
@@ -31,11 +31,11 @@
         final PreferenceLinkArea area = new PreferenceLinkArea(parent, SWT.NONE, pageId, text, container, null);
         return area;
 	}
-	
+
     public static GridData createGridData(int width, int height, boolean hFill, boolean vFill) {
         return createGridData(width, height, hFill ? SWT.FILL : SWT.BEGINNING, vFill ? SWT.FILL : SWT.CENTER, hFill, vFill);
     }
-    
+
     public static GridData createGridData(int width, int height, int hAlign, int vAlign, boolean hGrab, boolean vGrab) {
         final GridData gd= new GridData(hAlign, vAlign, hGrab, vGrab);
         gd.widthHint= width;
@@ -46,7 +46,7 @@
     public static GridData createHFillGridData() {
         return createHFillGridData(1);
     }
-    
+
     public static GridData createHFillGridData(int span) {
         final GridData gd= createGridData(0, SWT.DEFAULT, SWT.FILL, SWT.CENTER, true, false);
         gd.horizontalSpan= span;
@@ -56,7 +56,7 @@
     public static Composite createHFillComposite(Composite parent, int margins) {
         return createHFillComposite(parent, margins, 1);
     }
-    
+
     public static Composite createHFillComposite(Composite parent, int margins, int columns) {
         final Composite composite= new Composite(parent, SWT.NONE);
         composite.setFont(parent.getFont());
@@ -64,11 +64,11 @@
         composite.setLayout(createGridLayout(columns, new PixelConverter(parent), margins));
         return composite;
     }
-    
+
     public static Composite createHVFillComposite(Composite parent, int margins) {
         return createHVFillComposite(parent, margins, 1);
     }
-    
+
     public static Composite createHVFillComposite(Composite parent, int margins, int columns) {
         final Composite composite= new Composite(parent, SWT.NONE);
         composite.setFont(parent.getFont());
@@ -77,11 +77,11 @@
         return composite;
     }
 
-    
+
     public static Group createHFillGroup(Composite parent, String text, int margins) {
         return createHFillGroup(parent, text, margins, 1);
     }
-    
+
     public static Group createHFillGroup(Composite parent, String text, int margins, int rows) {
         final Group group= new Group(parent, SWT.NONE);
         group.setFont(parent.getFont());
@@ -91,11 +91,11 @@
         group.setLayout(createGridLayout(rows, new PixelConverter(parent), margins));
         return group;
     }
-    
+
     public static Group createHVFillGroup(Composite parent, String text, int margins) {
         return createHVFillGroup(parent, text, margins, 1);
     }
-    
+
     public static Group createHVFillGroup(Composite parent, String text, int margins, int rows) {
         final Group group= new Group(parent, SWT.NONE);
         group.setFont(parent.getFont());
@@ -105,22 +105,22 @@
         group.setLayout(createGridLayout(rows, new PixelConverter(parent), margins));
         return group;
     }
-    
+
     public static GridData createHVFillGridData() {
         return createHVFillGridData(1);
     }
-    
+
     public static GridData createHVFillGridData(int span) {
         final GridData gd= createGridData(0, 0, true, true);
         gd.horizontalSpan= span;
         return gd;
     }
 
-    
+
     /**
 	 * Create a grid layout with the specified number of columns and the
 	 * standard spacings.
-	 * 
+	 *
 	 * @param numColumns
 	 *                the number of columns
 	 * @param converter
@@ -132,11 +132,11 @@
 	 */
     public static GridLayout createGridLayout(int numColumns, PixelConverter converter, int margins) {
     	Assert.isTrue(margins == MARGINS_DEFAULT || margins == MARGINS_NONE || margins == MARGINS_DIALOG);
-    	
+
         final GridLayout layout= new GridLayout(numColumns, false);
         layout.horizontalSpacing= converter.convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
         layout.verticalSpacing= converter.convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
-        
+
         switch (margins) {
         case MARGINS_NONE:
             layout.marginLeft= layout.marginRight= 0;
@@ -153,8 +153,8 @@
         layout.marginWidth= layout.marginHeight= 0;
         return layout;
     }
-    
-    
+
+
     public static Label createLabel(Composite parent, String message) {
         return createLabel(parent, message, 1);
     }
@@ -166,7 +166,7 @@
         label.setLayoutData(createHFillGridData(span));
         return label;
     }
-    
+
     public static Button createCheckBox(Composite parent, String message) {
         return createCheckBox(parent, message, 1);
     }
@@ -177,7 +177,7 @@
         button.setLayoutData(createHFillGridData(span));
         return button;
     }
-    
+
     public static Button createRadioButton(Composite parent, String message) {
         return createRadioButton(parent, message, 1);
     }
@@ -189,7 +189,7 @@
         return button;
     }
 
-    
+
     public static Text createText(Composite parent) {
         return createText(parent, 1);
     }
@@ -199,7 +199,7 @@
         text.setLayoutData(createHFillGridData(span));
         return text;
     }
-    
+
 
     public static Control createPlaceholder(Composite parent, int heightInChars, int span) {
         Assert.isTrue(heightInChars > 0);
@@ -211,16 +211,16 @@
         return placeHolder;
     }
 
-    
+
     public static Control createPlaceholder(Composite parent, int heightInChars) {
         return createPlaceholder(parent, heightInChars, 1);
     }
-    
+
     public static PixelConverter createDialogPixelConverter(Control control) {
     	Dialog.applyDialogFont(control);
     	return new PixelConverter(control);
     }
-    
+
 	public static int calculateControlSize(PixelConverter converter, Control [] controls) {
 		return calculateControlSize(converter, controls, 0, controls.length - 1);
 	}
@@ -234,7 +234,7 @@
 		}
 		return minimum;
 	}
-	
+
 	public static void equalizeControls(PixelConverter converter, Control [] controls) {
 		equalizeControls(converter, controls, 0, controls.length - 1);
 	}
diff --git a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/ui/UserInfoPrompter.java b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/ui/UserInfoPrompter.java
index a425b54..25b850d 100644
--- a/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/ui/UserInfoPrompter.java
+++ b/bundles/org.eclipse.jsch.ui/src/org/eclipse/jsch/ui/UserInfoPrompter.java
@@ -25,7 +25,7 @@
  * {@link Session}.
  * <p>
  * Clients may instantiate or subclass this class.
- * 
+ *
  * @since 1.0
  * @see IJSchService#createSession(String, int, String)
  * @see IJSchService#connect(Session, int,
@@ -41,7 +41,7 @@
   /**
    * Create a prompter for the given session. This constructor will associate
    * this prompter with the session using {@link Session#setUserInfo(UserInfo)}.
-   * 
+   *
    * @param session
    *          the session
    */
@@ -53,7 +53,7 @@
 
   /**
    * Return the session to which this prompter is assigned.
-   * 
+   *
    * @return the session to which this prompter is assigned
    */
   public Session getSession(){
@@ -62,7 +62,7 @@
 
   /*
    * (non-Javadoc)
-   * 
+   *
    * @see com.jcraft.jsch.UserInfo#getPassphrase()
    */
   public String getPassphrase(){
@@ -71,7 +71,7 @@
 
   /*
    * (non-Javadoc)
-   * 
+   *
    * @see com.jcraft.jsch.UserInfo#getPassword()
    */
   public String getPassword(){
@@ -81,7 +81,7 @@
   /**
    * Set the pass phrase to be used when connecting the session. Return
    * <code>null</code> if the pass phrase is not known.
-   * 
+   *
    * @param passphrase
    *          the pass phrase to be used when connecting the session or
    *          <code>null</code>
@@ -93,7 +93,7 @@
   /**
    * Set the password to be used when connecting the session. Return
    * <code>null</code> if the password is not known.
-   * 
+   *
    * @param password
    *          the password to be used when connecting the session or
    *          <code>null</code>
@@ -104,7 +104,7 @@
 
   /*
    * (non-Javadoc)
-   * 
+   *
    * @see com.jcraft.jsch.UserInfo#promptPassphrase(java.lang.String)
    */
   public boolean promptPassphrase(String message){
@@ -117,7 +117,7 @@
 
   /*
    * (non-Javadoc)
-   * 
+   *
    * @see com.jcraft.jsch.UserInfo#promptPassword(java.lang.String)
    */
   public boolean promptPassword(String message){
@@ -161,7 +161,7 @@
 
   /*
    * (non-Javadoc)
-   * 
+   *
    * @see com.jcraft.jsch.UIKeyboardInteractive#promptKeyboardInteractive(java.lang.String,
    *      java.lang.String, java.lang.String, java.lang.String[], boolean[])
    */
@@ -229,7 +229,7 @@
 
   /*
    * (non-Javadoc)
-   * 
+   *
    * @see com.jcraft.jsch.UserInfo#promptYesNo(java.lang.String)
    */
   public boolean promptYesNo(String question){
@@ -244,7 +244,7 @@
 
   /*
    * (non-Javadoc)
-   * 
+   *
    * @see com.jcraft.jsch.UserInfo#showMessage(java.lang.String)
    */
   public void showMessage(String message){
