diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..eb5a316
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+target
diff --git a/org.springframework.build.aws.maven/.classpath b/org.springframework.build.aws.maven/.classpath
new file mode 100644
index 0000000..49140ee
--- /dev/null
+++ b/org.springframework.build.aws.maven/.classpath
@@ -0,0 +1,13 @@
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar" sourcepath="M2_REPO/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-codec/commons-codec/1.2/commons-codec-1.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/net/java/dev/jets3t/jets3t/0.5.1-20080115/jets3t-0.6.0.jar" sourcepath="M2_REPO/net/java/dev/jets3t/jets3t/0.5.1-20080115/jets3t-0.6.0-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar" sourcepath="M2_REPO/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.jar" sourcepath="M2_REPO/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4-sources.jar"/>
+</classpath>
\ No newline at end of file
diff --git a/org.springframework.build.aws.maven/.project b/org.springframework.build.aws.maven/.project
new file mode 100644
index 0000000..23247a8
--- /dev/null
+++ b/org.springframework.build.aws.maven/.project
@@ -0,0 +1,13 @@
+<projectDescription>
+  <name>org.springframework.build.aws.maven</name>
+  <comment>Standard Maven wagon support for s3:// urls</comment>
+  <projects/>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
+</projectDescription>
\ No newline at end of file
diff --git a/org.springframework.build.aws.maven/.settings/org.eclipse.jdt.core.prefs b/org.springframework.build.aws.maven/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..3a378cf
--- /dev/null
+++ b/org.springframework.build.aws.maven/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,259 @@
+#Tue Nov 13 08:43:58 EST 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.source=1.5
+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_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+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_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.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=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
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not 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.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.format_guardian_clause_on_one_line=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
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=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_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_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_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_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=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_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_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.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=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.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
diff --git a/org.springframework.build.aws.maven/.settings/org.eclipse.jdt.ui.prefs b/org.springframework.build.aws.maven/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..c9e3c77
--- /dev/null
+++ b/org.springframework.build.aws.maven/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,4 @@
+#Tue Nov 13 08:43:58 EST 2007
+eclipse.preferences.version=1
+formatter_profile=_Spring
+formatter_settings_version=11
diff --git a/org.springframework.build.aws.maven/pom.xml b/org.springframework.build.aws.maven/pom.xml
new file mode 100644
index 0000000..711e803
--- /dev/null
+++ b/org.springframework.build.aws.maven/pom.xml
@@ -0,0 +1,73 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.springframework.build.aws</groupId>
+    <artifactId>org.springframework.build.aws.maven</artifactId>
+    <packaging>jar</packaging>
+    <name>Amazon Web Services Maven Wagon Support</name>
+    <version>2.0.1.BUILD-SNAPSHOT</version>
+    <description>
+        Standard Maven wagon support for s3:// urls
+    </description>
+    <url>http://www.springframework.org</url>
+    <inceptionYear>2007</inceptionYear>
+    <licenses>
+        <license>
+            <name>Apache License, Version 2.0</name>
+            <url>http://www.apache.org/licenses/LICENSE-2.0</url>
+            <distribution>repo</distribution>
+        </license>
+    </licenses>
+    <scm>
+        <connection>scm:svn:https://springframework.svn.sourceforge.net/svnroot/springframework/spring-aws/trunk</connection>
+        <developerConnection>scm:svn:https://springframework.svn.sourceforge.net/svnroot/springframework/spring-aws/trunk</developerConnection>
+        <url>http://fisheye3.cenqua.com/browse/springframework/spring-aws/trunk</url>
+    </scm>
+    <organization>
+        <name>Spring Framework</name>
+        <url>http://www.springframework.org</url>
+    </organization>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.5</source>
+                    <target>1.5</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>commons-httpclient</groupId>
+            <artifactId>commons-httpclient</artifactId>
+            <version>3.1</version>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>net.java.dev.jets3t</groupId>
+            <artifactId>jets3t</artifactId>
+            <version>0.6.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.wagon</groupId>
+            <artifactId>wagon-provider-api</artifactId>
+            <version>1.0-beta-2</version>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+    <distributionManagement>
+        <repository>
+            <id>spring-milestone</id>
+            <name>Spring Milestone Repository</name>
+            <url>s3://maven.springframework.org/snapshot</url>
+        </repository>
+        <snapshotRepository>
+            <id>spring-snapshot</id>
+            <name>Spring Snapshot Repository</name>
+            <url>s3://maven.springframework.org/snapshot</url>
+        </snapshotRepository>
+    </distributionManagement>
+</project>
\ No newline at end of file
diff --git a/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/AbstractWagon.java b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/AbstractWagon.java
new file mode 100644
index 0000000..1e1c760
--- /dev/null
+++ b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/AbstractWagon.java
@@ -0,0 +1,364 @@
+/*
+ * Copyright 2004-2007 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.aws.maven;
+
+import org.apache.maven.wagon.ConnectionException;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.authentication.AuthenticationException;
+import org.apache.maven.wagon.authentication.AuthenticationInfo;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.events.SessionListener;
+import org.apache.maven.wagon.events.TransferEvent;
+import org.apache.maven.wagon.events.TransferListener;
+import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.repository.Repository;
+import org.apache.maven.wagon.resource.Resource;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * An abstract implementation of the Wagon interface. This implementation
+ * manages listener and other common behaviors.
+ * 
+ * @author Ben Hale
+ * @since 1.1
+ */
+public abstract class AbstractWagon implements Wagon {
+
+	private boolean interactive;
+
+	private Repository repository;
+
+	private boolean supportsDirectoryCopy;
+
+	private SessionListenerSupport sessionListeners = new SessionListenerSupport(this);
+
+	private TransferListenerSupport transferListeners = new TransferListenerSupport(this);
+
+	protected AbstractWagon(boolean supportsDirectoryCopy) {
+		this.supportsDirectoryCopy = supportsDirectoryCopy;
+	}
+
+	public final void addSessionListener(SessionListener listener) {
+		sessionListeners.addListener(listener);
+	}
+
+	protected final SessionListenerSupport getSessionListeners() {
+		return sessionListeners;
+	}
+
+	public final boolean hasSessionListener(SessionListener listener) {
+		return sessionListeners.hasListener(listener);
+	}
+
+	public final void removeSessionListener(SessionListener listener) {
+		sessionListeners.removeListener(listener);
+	}
+
+	public final void addTransferListener(TransferListener listener) {
+		transferListeners.addListener(listener);
+	}
+
+	protected final TransferListenerSupport getTransferListeners() {
+		return transferListeners;
+	}
+
+	public final boolean hasTransferListener(TransferListener listener) {
+		return transferListeners.hasListener(listener);
+	}
+
+	public final void removeTransferListener(TransferListener listener) {
+		transferListeners.removeListener(listener);
+	}
+
+	public final Repository getRepository() {
+		return repository;
+	}
+
+	public final boolean isInteractive() {
+		return interactive;
+	}
+
+	public final void setInteractive(boolean interactive) {
+		this.interactive = interactive;
+	}
+
+	public final void connect(Repository source) throws ConnectionException, AuthenticationException {
+		connect(source, null, null);
+	}
+
+	public final void connect(Repository source, ProxyInfo proxyInfo) throws ConnectionException,
+			AuthenticationException {
+		connect(source, null, proxyInfo);
+	}
+
+	public final void connect(Repository source, AuthenticationInfo authenticationInfo) throws ConnectionException,
+			AuthenticationException {
+		connect(source, authenticationInfo, null);
+	}
+
+	public final void connect(Repository source, AuthenticationInfo authenticationInfo, ProxyInfo proxyInfo)
+			throws ConnectionException, AuthenticationException {
+		repository = source;
+		sessionListeners.fireSessionOpening();
+		try {
+			connectToRepository(source, authenticationInfo, proxyInfo);
+		}
+		catch (ConnectionException e) {
+			sessionListeners.fireSessionConnectionRefused();
+			throw e;
+		}
+		catch (AuthenticationException e) {
+			sessionListeners.fireSessionConnectionRefused();
+			throw e;
+		}
+		catch (Exception e) {
+			sessionListeners.fireSessionConnectionRefused();
+			throw new ConnectionException("Could not connect to repository", e);
+		}
+		sessionListeners.fireSessionLoggedIn();
+		sessionListeners.fireSessionOpened();
+	}
+
+	public final void disconnect() throws ConnectionException {
+		sessionListeners.fireSessionDisconnecting();
+		try {
+			disconnectFromRepository();
+		}
+		catch (ConnectionException e) {
+			sessionListeners.fireSessionConnectionRefused();
+			throw e;
+		}
+		catch (Exception e) {
+			sessionListeners.fireSessionConnectionRefused();
+			throw new ConnectionException("Could not disconnect from repository", e);
+		}
+		sessionListeners.fireSessionLoggedOff();
+		sessionListeners.fireSessionDisconnected();
+	}
+
+	public final void get(String resourceName, File destination) throws TransferFailedException,
+			ResourceDoesNotExistException, AuthorizationException {
+		Resource resource = new Resource(resourceName);
+		transferListeners.fireTransferInitiated(resource, TransferEvent.REQUEST_GET);
+		transferListeners.fireTransferStarted(resource, TransferEvent.REQUEST_GET);
+
+		try {
+			getResource(resourceName, destination, new TransferProgress(resource, TransferEvent.REQUEST_GET,
+					transferListeners));
+			transferListeners.fireTransferCompleted(resource, TransferEvent.REQUEST_GET);
+		}
+		catch (TransferFailedException e) {
+			throw e;
+		}
+		catch (ResourceDoesNotExistException e) {
+			throw e;
+		}
+		catch (AuthorizationException e) {
+			throw e;
+		}
+		catch (Exception e) {
+			transferListeners.fireTransferError(resource, TransferEvent.REQUEST_GET, e);
+			throw new TransferFailedException("Transfer of resource " + destination + "failed", e);
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	public final List getFileList(String destinationDirectory) throws TransferFailedException,
+			ResourceDoesNotExistException, AuthorizationException {
+		try {
+			return listDirectory(destinationDirectory);
+		}
+		catch (TransferFailedException e) {
+			throw e;
+		}
+		catch (ResourceDoesNotExistException e) {
+			throw e;
+		}
+		catch (AuthorizationException e) {
+			throw e;
+		}
+		catch (Exception e) {
+			sessionListeners.fireSessionError(e);
+			throw new TransferFailedException("Listing of directory " + destinationDirectory + "failed", e);
+		}
+	}
+
+	public final boolean getIfNewer(String resourceName, File destination, long timestamp)
+			throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException {
+		Resource resource = new Resource(resourceName);
+		try {
+			if (isRemoteResourceNewer(resourceName, timestamp)) {
+				get(resourceName, destination);
+				return true;
+			}
+			else {
+				return false;
+			}
+		}
+		catch (TransferFailedException e) {
+			throw e;
+		}
+		catch (ResourceDoesNotExistException e) {
+			throw e;
+		}
+		catch (AuthorizationException e) {
+			throw e;
+		}
+		catch (Exception e) {
+			transferListeners.fireTransferError(resource, TransferEvent.REQUEST_GET, e);
+			throw new TransferFailedException("Transfer of resource " + destination + "failed", e);
+		}
+	}
+
+	public final void openConnection() throws ConnectionException, AuthenticationException {
+		// Nothing to do here (never called by the wagon manager)
+	}
+
+	public final void put(File source, String destination) throws TransferFailedException,
+			ResourceDoesNotExistException, AuthorizationException {
+		Resource resource = new Resource(destination);
+		transferListeners.fireTransferInitiated(resource, TransferEvent.REQUEST_PUT);
+		transferListeners.fireTransferStarted(resource, TransferEvent.REQUEST_PUT);
+
+		try {
+			putResource(source, destination, new TransferProgress(resource, TransferEvent.REQUEST_PUT,
+					transferListeners));
+			transferListeners.fireTransferCompleted(resource, TransferEvent.REQUEST_PUT);
+		}
+		catch (TransferFailedException e) {
+			throw e;
+		}
+		catch (ResourceDoesNotExistException e) {
+			throw e;
+		}
+		catch (AuthorizationException e) {
+			throw e;
+		}
+		catch (Exception e) {
+			transferListeners.fireTransferError(resource, TransferEvent.REQUEST_PUT, e);
+			throw new TransferFailedException("Transfer of resource " + destination + "failed", e);
+		}
+	}
+
+	public final void putDirectory(File sourceDirectory, String destinationDirectory) throws TransferFailedException,
+			ResourceDoesNotExistException, AuthorizationException {
+		for (File f : sourceDirectory.listFiles()) {
+			put(f, destinationDirectory + "/" + f.getName());
+		}
+	}
+
+	public final boolean resourceExists(String resourceName) throws TransferFailedException, AuthorizationException {
+		try {
+			return doesRemoteResourceExist(resourceName);
+		}
+		catch (TransferFailedException e) {
+			throw e;
+		}
+		catch (AuthorizationException e) {
+			throw e;
+		}
+		catch (Exception e) {
+			sessionListeners.fireSessionError(e);
+			throw new TransferFailedException("Listing of resource " + resourceName + "failed", e);
+		}
+	}
+
+	public final boolean supportsDirectoryCopy() {
+		return supportsDirectoryCopy;
+	}
+
+	/**
+	 * Subclass must implement with specific connection behavior
+	 * 
+	 * @param source The repository connection information
+	 * @param authenticationInfo Authentication information, if any
+	 * @param proxyInfo Proxy information, if any
+	 * @throws Exception Implementations can throw any exception and it will be
+	 * handled by the base class
+	 */
+	protected abstract void connectToRepository(Repository source, AuthenticationInfo authenticationInfo,
+			ProxyInfo proxyInfo) throws Exception;
+
+	/**
+	 * Subclass must implement with specific detection behavior
+	 * 
+	 * @param resourceName The remote resource to detect
+	 * @return true if the remote resource exists
+	 * @throws Exception Implementations can throw any exception and it will be
+	 * handled by the base class
+	 */
+	protected abstract boolean doesRemoteResourceExist(String resourceName) throws Exception;
+
+	/**
+	 * Subclasses must implement with specific disconnection behavior
+	 * 
+	 * @throws Exception Implementations can throw any exception and it will be
+	 * handled by the base class
+	 */
+	protected abstract void disconnectFromRepository() throws Exception;
+
+	/**
+	 * Subclass must implement with specific get behavior
+	 * 
+	 * @param resourceName The name of the remote resource to read
+	 * @param destination The local file to write to
+	 * @param progress A progress notifier for the upload. It must be used or
+	 * hashes will not be calculated correctly
+	 * @throws Exception Implementations can throw any exception and it will be
+	 * handled by the base class
+	 */
+	protected abstract void getResource(String resourceName, File destination, TransferProgress progress)
+			throws Exception;
+
+	/**
+	 * Subclass must implement with newer detection behavior
+	 * 
+	 * @param resourceName The name of the resource being compared
+	 * @param timestamp The timestamp to compare against
+	 * @return true if the current version of the resource is newer than the
+	 * timestamp
+	 * @throws Exception Implementations can throw any exception and it will be
+	 * handled by the base class
+	 */
+	protected abstract boolean isRemoteResourceNewer(String resourceName, long timestamp) throws Exception;
+
+	/**
+	 * Subclass must implement with specific directory listing behavior
+	 * 
+	 * @param directory The directory to list files in
+	 * @return A collection of file names
+	 * @throws Exception Implementations can throw any exception and it will be
+	 * handled by the base class
+	 */
+	protected abstract List<String> listDirectory(String directory) throws Exception;
+
+	/**
+	 * Subclasses must implement with specific put behavior
+	 * 
+	 * @param source The local source file to read from
+	 * @param destination The name of the remote resource to write to
+	 * @param progress A progress notifier for the upload. It must be used or
+	 * hashes will not be calculated correctly
+	 * @throws Exception Implementations can throw any exception and it will be
+	 * handled by the base class
+	 */
+	protected abstract void putResource(File source, String destination, TransferProgress progress) throws Exception;
+
+}
diff --git a/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/SessionListenerSupport.java b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/SessionListenerSupport.java
new file mode 100644
index 0000000..5de3f9c
--- /dev/null
+++ b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/SessionListenerSupport.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2004-2007 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.aws.maven;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.events.SessionEvent;
+import org.apache.maven.wagon.events.SessionListener;
+
+/**
+ * Support for sending messages to Maven session listeners. Automates the
+ * collection of listeners and the iteration over that collection when an event
+ * is fired.
+ * 
+ * @author Ben Hale
+ */
+class SessionListenerSupport {
+
+	private Wagon wagon;
+
+	private Set<SessionListener> listeners = new HashSet<SessionListener>();
+
+	/**
+	 * Creates a new instance
+	 * @param wagon The wagon that events will come from
+	 */
+	public SessionListenerSupport(Wagon wagon) {
+		this.wagon = wagon;
+	}
+
+	/**
+	 * Adds a listener to the collection
+	 * @param listener The listener to add
+	 */
+	public void addListener(SessionListener listener) {
+		listeners.add(listener);
+	}
+
+	/**
+	 * Removes a listener from the collection
+	 * @param listener The listener to remove
+	 */
+	public void removeListener(SessionListener listener) {
+		listeners.remove(listener);
+	}
+
+	/**
+	 * Whether the collection already contains a listener
+	 * @param listener The listener to check for
+	 * @return Whether the collection contains a listener
+	 */
+	public boolean hasListener(SessionListener listener) {
+		return listeners.contains(listener);
+	}
+
+	/**
+	 * Sends a session opening event to all listeners
+	 * @see SessionEvent#SESSION_OPENING
+	 */
+	public void fireSessionOpening() {
+		SessionEvent event = new SessionEvent(wagon, SessionEvent.SESSION_OPENING);
+		for (SessionListener listener : listeners) {
+			listener.sessionOpening(event);
+		}
+	}
+
+	/**
+	 * Sends a session opened event to all listeners
+	 * @see SessionEvent#SESSION_OPENED
+	 */
+	public void fireSessionOpened() {
+		SessionEvent event = new SessionEvent(wagon, SessionEvent.SESSION_OPENED);
+		for (SessionListener listener : listeners) {
+			listener.sessionOpened(event);
+		}
+	}
+
+	/**
+	 * Sends a session disconnecting event to all listeners
+	 * @see SessionEvent#SESSION_DISCONNECTING
+	 */
+	public void fireSessionDisconnecting() {
+		SessionEvent event = new SessionEvent(wagon, SessionEvent.SESSION_DISCONNECTING);
+		for (SessionListener listener : listeners) {
+			listener.sessionDisconnecting(event);
+		}
+	}
+
+	/**
+	 * Sends a session disconnected event to all listeners
+	 * @see SessionEvent#SESSION_DISCONNECTED
+	 */
+	public void fireSessionDisconnected() {
+		SessionEvent event = new SessionEvent(wagon, SessionEvent.SESSION_DISCONNECTED);
+		for (SessionListener listener : listeners) {
+			listener.sessionDisconnected(event);
+		}
+	}
+
+	/**
+	 * Sends a session connection refused event to all listeners
+	 * @see SessionEvent#SESSION_CONNECTION_REFUSED
+	 */
+	public void fireSessionConnectionRefused() {
+		SessionEvent event = new SessionEvent(wagon, SessionEvent.SESSION_CONNECTION_REFUSED);
+		for (SessionListener listener : listeners) {
+			listener.sessionConnectionRefused(event);
+		}
+	}
+
+	/**
+	 * Sends a session logged in event to all listeners
+	 * @see SessionEvent#SESSION_LOGGED_IN
+	 */
+	public void fireSessionLoggedIn() {
+		SessionEvent event = new SessionEvent(wagon, SessionEvent.SESSION_LOGGED_IN);
+		for (SessionListener listener : listeners) {
+			listener.sessionLoggedIn(event);
+		}
+	}
+
+	/**
+	 * Sends a session logged off event to all listeners
+	 * @see SessionEvent#SESSION_LOGGED_OFF
+	 */
+	public void fireSessionLoggedOff() {
+		SessionEvent event = new SessionEvent(wagon, SessionEvent.SESSION_LOGGED_OFF);
+		for (SessionListener listener : listeners) {
+			listener.sessionLoggedOff(event);
+		}
+	}
+
+	/**
+	 * Sends a session error event to all listeners
+	 * @param e The session error
+	 */
+	public void fireSessionError(Exception e) {
+		SessionEvent event = new SessionEvent(wagon, e);
+		for (SessionListener listener : listeners) {
+			listener.sessionError(event);
+		}
+	}
+}
diff --git a/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/SimpleStorageServiceWagon.java b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/SimpleStorageServiceWagon.java
new file mode 100644
index 0000000..6fb37e0
--- /dev/null
+++ b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/SimpleStorageServiceWagon.java
@@ -0,0 +1,214 @@
+/*
+ * Copyright 2004-2007 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.aws.maven;
+
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.authentication.AuthenticationException;
+import org.apache.maven.wagon.authentication.AuthenticationInfo;
+import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.repository.Repository;
+import org.jets3t.service.S3Service;
+import org.jets3t.service.S3ServiceException;
+import org.jets3t.service.acl.AccessControlList;
+import org.jets3t.service.impl.rest.httpclient.RestS3Service;
+import org.jets3t.service.model.S3Bucket;
+import org.jets3t.service.model.S3Object;
+import org.jets3t.service.security.AWSCredentials;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * An implementation of the Maven Wagon interface that allows you to access the
+ * Amazon S3 service. URLs that reference the S3 service should be in the form
+ * of <code>s3://bucket.name</code>. As an example
+ * <code>s3://static.springframework.org</code> would put files into the
+ * <code>static.springframework.org</code> bucket on the S3 service. <p/> This
+ * implementation uses the <code>username</code> and <code>passphrase</code>
+ * portions of the server authentication metadata for credentials.
+ * 
+ * @author Ben Hale
+ */
+public class SimpleStorageServiceWagon extends AbstractWagon {
+
+	private S3Service service;
+
+	private S3Bucket bucket;
+
+	private String basedir;
+
+	public SimpleStorageServiceWagon() {
+		super(false);
+	}
+
+	protected void connectToRepository(Repository source, AuthenticationInfo authenticationInfo, ProxyInfo proxyInfo)
+			throws AuthenticationException {
+		try {
+			service = new RestS3Service(getCredentials(authenticationInfo));
+		}
+		catch (S3ServiceException e) {
+			throw new AuthenticationException("Cannot authenticate with current credentials", e);
+		}
+		bucket = new S3Bucket(source.getHost());
+		basedir = getBaseDir(source);
+	}
+
+	protected boolean doesRemoteResourceExist(String resourceName) {
+		try {
+			service.getObjectDetails(bucket, basedir + resourceName);
+		}
+		catch (S3ServiceException e) {
+			return false;
+		}
+		return true;
+	}
+
+	protected void disconnectFromRepository() {
+		// Nothing to do for S3
+	}
+
+	protected void getResource(String resourceName, File destination, TransferProgress progress)
+			throws ResourceDoesNotExistException, S3ServiceException, IOException {
+		S3Object object;
+		try {
+			object = service.getObject(bucket, basedir + resourceName);
+		}
+		catch (S3ServiceException e) {
+			throw new ResourceDoesNotExistException("Resource " + resourceName + " does not exist in the repository", e);
+		}
+
+		if(!destination.getParentFile().exists()) {
+			destination.getParentFile().mkdirs();
+		}
+
+		InputStream in = null;
+		OutputStream out = null;
+		try {
+			in = object.getDataInputStream();
+			out = new TransferProgressFileOutputStream(destination, progress);
+			byte[] buffer = new byte[1024];
+			int length;
+			while ((length = in.read(buffer)) != -1) {
+				out.write(buffer, 0, length);
+			}
+		}
+		finally {
+			if (in != null) {
+				try {
+					in.close();
+				}
+				catch (IOException e) {
+					// Nothing possible at this point
+				}
+			}
+			if (out != null) {
+				try {
+					out.close();
+				}
+				catch (IOException e) {
+					// Nothing possible at this point
+				}
+			}
+		}
+	}
+
+	protected boolean isRemoteResourceNewer(String resourceName, long timestamp) throws S3ServiceException {
+		S3Object object = service.getObjectDetails(bucket, basedir + resourceName);
+		return object.getLastModifiedDate().compareTo(new Date(timestamp)) < 0;
+	}
+
+	protected List<String> listDirectory(String directory) throws Exception {
+		S3Object[] objects = service.listObjects(bucket, basedir + directory, "");
+		List<String> fileNames = new ArrayList<String>(objects.length);
+		for (S3Object object : objects) {
+			fileNames.add(object.getKey());
+		}
+		return fileNames;
+	}
+
+	protected void putResource(File source, String destination, TransferProgress progress) throws S3ServiceException,
+			IOException {
+		buildDestinationPath(getDestinationPath(destination));
+		S3Object object = new S3Object(basedir + destination);
+		object.setAcl(AccessControlList.REST_CANNED_PUBLIC_READ);
+		object.setDataInputFile(source);
+		object.setContentLength(source.length());
+
+		InputStream in = null;
+		try {
+			service.putObject(bucket, object);
+
+			in = new FileInputStream(source);
+			byte[] buffer = new byte[1024];
+			int length;
+			while ((length = in.read(buffer)) != -1) {
+				progress.notify(buffer, length);
+			}
+		}
+		finally {
+			if (in != null) {
+				try {
+					in.close();
+				}
+				catch (IOException e) {
+					// Nothing possible at this point
+				}
+			}
+		}
+	}
+
+	private void buildDestinationPath(String destination) throws S3ServiceException {
+		S3Object object = new S3Object(basedir + destination + "/");
+		object.setAcl(AccessControlList.REST_CANNED_PUBLIC_READ);
+		object.setContentLength(0);
+		service.putObject(bucket, object);
+		int index = destination.lastIndexOf('/');
+		if (index != -1) {
+			buildDestinationPath(destination.substring(0, index));
+		}
+	}
+
+	private String getDestinationPath(String destination) {
+		return destination.substring(0, destination.lastIndexOf('/'));
+	}
+
+	private String getBaseDir(Repository source) {
+		StringBuilder sb = new StringBuilder(source.getBasedir());
+		sb.deleteCharAt(0);
+		if (sb.charAt(sb.length() - 1) != '/') {
+			sb.append('/');
+		}
+		return sb.toString();
+	}
+
+	private AWSCredentials getCredentials(AuthenticationInfo authenticationInfo) throws AuthenticationException {
+		if (authenticationInfo == null) {
+			return null;
+		}
+		String accessKey = authenticationInfo.getUserName();
+		String secretKey = authenticationInfo.getPassphrase();
+		if (accessKey == null || secretKey == null) {
+			throw new AuthenticationException("S3 requires a username and passphrase to be set");
+		}
+		return new AWSCredentials(accessKey, secretKey);
+	}
+}
diff --git a/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/TransferListenerSupport.java b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/TransferListenerSupport.java
new file mode 100644
index 0000000..7ed1eff
--- /dev/null
+++ b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/TransferListenerSupport.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2004-2007 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.aws.maven;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.events.TransferEvent;
+import org.apache.maven.wagon.events.TransferListener;
+import org.apache.maven.wagon.resource.Resource;
+
+/**
+ * Support for sending messages to Maven transfer listeners. Automates the
+ * collection of listeners and the iteration over that collection when an event
+ * is fired.
+ * 
+ * @author Ben Hale
+ */
+class TransferListenerSupport {
+
+	private Wagon wagon;
+
+	private Set<TransferListener> listeners = new HashSet<TransferListener>();
+
+	/**
+	 * Creates a new instance
+	 * @param wagon The wagon that events will come from
+	 */
+	public TransferListenerSupport(Wagon wagon) {
+		this.wagon = wagon;
+	}
+
+	/**
+	 * Adds a listener to the collection
+	 * @param listener The listener to add
+	 */
+	public void addListener(TransferListener listener) {
+		listeners.add(listener);
+	}
+
+	/**
+	 * Removes a listener from the collection
+	 * @param listener The listener to remove
+	 */
+	public void removeListener(TransferListener listener) {
+		listeners.remove(listener);
+	}
+
+	/**
+	 * Whether the collection already contains a listener
+	 * @param listener The listener to check for
+	 * @return whether the collection contains the listener
+	 */
+	public boolean hasListener(TransferListener listener) {
+		return listeners.contains(listener);
+	}
+
+	/**
+	 * Sends a transfer initated event to all listeners
+	 * @param resource The resource being transfered
+	 * @param requestType GET or PUT request
+	 * @see TransferEvent#TRANSFER_INITIATED
+	 */
+	public void fireTransferInitiated(Resource resource, int requestType) {
+		TransferEvent event = new TransferEvent(wagon, resource, TransferEvent.TRANSFER_INITIATED, requestType);
+		for (TransferListener listener : listeners) {
+			listener.transferInitiated(event);
+		}
+	}
+
+	/**
+	 * Sends a transfer started event to all listeners
+	 * @param resource The resource being transfered
+	 * @param requestType GET or PUT request
+	 * @see TransferEvent#TRANSFER_STARTED
+	 */
+	public void fireTransferStarted(Resource resource, int requestType) {
+		TransferEvent event = new TransferEvent(wagon, resource, TransferEvent.TRANSFER_STARTED, requestType);
+		for (TransferListener listener : listeners) {
+			listener.transferStarted(event);
+		}
+	}
+
+	public void fireTransferProgress(Resource resource, int requestType, byte[] buffer, int length) {
+		TransferEvent event = new TransferEvent(wagon, resource, TransferEvent.TRANSFER_PROGRESS, requestType);
+		for (TransferListener listener : listeners) {
+			listener.transferProgress(event, buffer, length);
+		}
+	}
+
+	/**
+	 * Sends a transfer completed event to all listeners
+	 * @param resource The resource being transfered
+	 * @param requestType GET or PUT request
+	 * @see TransferEvent#TRANSFER_COMPLETED
+	 */
+	public void fireTransferCompleted(Resource resource, int requestType) {
+		TransferEvent event = new TransferEvent(wagon, resource, TransferEvent.TRANSFER_COMPLETED, requestType);
+		for (TransferListener listener : listeners) {
+			listener.transferCompleted(event);
+		}
+	}
+
+	/**
+	 * Sends a transfer error event to all listeners
+	 * @param resource The resource being transfered
+	 * @param requestType GET or PUT request
+	 * @param e The transfer error
+	 */
+	public void fireTransferError(Resource resource, int requestType, Exception e) {
+		TransferEvent event = new TransferEvent(wagon, resource, e, requestType);
+		for (TransferListener listener : listeners) {
+			listener.transferError(event);
+		}
+	}
+}
diff --git a/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/TransferProgress.java b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/TransferProgress.java
new file mode 100644
index 0000000..6fbce32
--- /dev/null
+++ b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/TransferProgress.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2004-2007 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.aws.maven;
+
+import org.apache.maven.wagon.resource.Resource;
+
+/**
+ * A class that encapsulates the notification of the transfer listeners for
+ * Maven Wagon.
+ * 
+ * @author Ben Hale
+ * @since 1.1
+ */
+class TransferProgress {
+
+	private Resource resource;
+
+	private int requestType;
+
+	private TransferListenerSupport transferListeners;
+
+	public TransferProgress(Resource resource, int requestType, TransferListenerSupport listeners) {
+		this.resource = resource;
+		this.requestType = requestType;
+		this.transferListeners = listeners;
+	}
+
+	protected void notify(byte[] buffer, int length) {
+		transferListeners.fireTransferProgress(resource, requestType, buffer, length);
+	}
+
+}
diff --git a/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/TransferProgressFileInputStream.java b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/TransferProgressFileInputStream.java
new file mode 100644
index 0000000..fa4b434
--- /dev/null
+++ b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/TransferProgressFileInputStream.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2004-2007 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.aws.maven;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+/**
+ * An extension to the {@link FileInputStream} that notifies a
+ * @{link TransferProgress} object as it is being written to.
+ * 
+ * @author Ben Hale
+ * @since 1.1
+ */
+public class TransferProgressFileInputStream extends FileInputStream {
+
+	private TransferProgress progress;
+
+	public TransferProgressFileInputStream(File file, TransferProgress progress) throws FileNotFoundException {
+		super(file);
+		this.progress = progress;
+	}
+
+	public int read() throws IOException {
+		int b = super.read();
+		progress.notify(new byte[] { (byte) b }, 1);
+		return b;
+	}
+
+	public int read(byte b[]) throws IOException {
+		int count = super.read(b);
+		progress.notify(b, b.length);
+		return count;
+	}
+
+	public int read(byte b[], int off, int len) throws IOException {
+		int count = super.read(b, off, len);
+		if (off == 0) {
+			progress.notify(b, len);
+		}
+		else {
+			byte[] bytes = new byte[len];
+			System.arraycopy(b, off, bytes, 0, len);
+			progress.notify(bytes, len);
+		}
+		return count;
+	}
+}
diff --git a/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/TransferProgressFileOutputStream.java b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/TransferProgressFileOutputStream.java
new file mode 100644
index 0000000..7984a48
--- /dev/null
+++ b/org.springframework.build.aws.maven/src/main/java/org/springframework/aws/maven/TransferProgressFileOutputStream.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2004-2007 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.aws.maven;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * An extension to the {@link FileOutputStream} that notifies a
+ * @{link TransferProgress} object as it is being written to.
+ * 
+ * @author Ben Hale
+ * @since 1.1
+ */
+class TransferProgressFileOutputStream extends FileOutputStream {
+
+	private TransferProgress progress;
+
+	public TransferProgressFileOutputStream(File file, TransferProgress progress) throws FileNotFoundException {
+		super(file);
+		this.progress = progress;
+	}
+
+	public void write(int b) throws IOException {
+		super.write(b);
+		progress.notify(new byte[] { (byte) b }, 1);
+	}
+
+	public void write(byte b[]) throws IOException {
+		super.write(b);
+		progress.notify(b, b.length);
+	}
+
+	public void write(byte b[], int off, int len) throws IOException {
+		super.write(b, off, len);
+		if (off == 0) {
+			progress.notify(b, len);
+		}
+		else {
+			byte[] bytes = new byte[len];
+			System.arraycopy(b, off, bytes, 0, len);
+			progress.notify(bytes, len);
+		}
+	}
+}
diff --git a/org.springframework.build.aws.maven/src/main/resources/META-INF/plexus/components.xml b/org.springframework.build.aws.maven/src/main/resources/META-INF/plexus/components.xml
new file mode 100644
index 0000000..1373d4d
--- /dev/null
+++ b/org.springframework.build.aws.maven/src/main/resources/META-INF/plexus/components.xml
@@ -0,0 +1,10 @@
+<component-set>
+    <components>
+        <component>
+            <role>org.apache.maven.wagon.Wagon</role>
+            <role-hint>s3</role-hint>
+            <implementation>org.springframework.aws.maven.SimpleStorageServiceWagon</implementation>
+            <instantiation-strategy>per-lookup</instantiation-strategy>
+        </component>
+    </components>
+</component-set>
diff --git a/org.springframework.build.aws.maven/src/main/resources/mime.types b/org.springframework.build.aws.maven/src/main/resources/mime.types
new file mode 100644
index 0000000..83d948e
--- /dev/null
+++ b/org.springframework.build.aws.maven/src/main/resources/mime.types
@@ -0,0 +1,602 @@
+# This is a comment. I love comments.
+
+# This file controls what Internet media types are sent to the client for
+# given file extension(s).  Sending the correct media type to the client
+# is important so they know how to handle the content of the file.
+# Extra types can either be added here or by using an AddType directive
+# in your config files. For more information about Internet media types,
+# please read RFC 2045, 2046, 2047, 2048, and 2077.  The Internet media type
+# registry is at <http://www.iana.org/assignments/media-types/>.
+
+# MIME type			Extensions
+application/activemessage
+application/andrew-inset	ez
+application/applefile
+application/atom+xml		atom
+application/atomicmail
+application/batch-smtp
+application/beep+xml
+application/cals-1840
+application/cnrp+xml
+application/commonground
+application/cpl+xml
+application/cybercash
+application/dca-rft
+application/dec-dx
+application/dvcs
+application/edi-consent
+application/edifact
+application/edi-x12
+application/eshop
+application/font-tdpfr
+application/http
+application/hyperstudio
+application/iges
+application/index
+application/index.cmd
+application/index.obj
+application/index.response
+application/index.vnd
+application/iotp
+application/ipp
+application/isup
+application/mac-binhex40	hqx
+application/mac-compactpro	cpt
+application/macwriteii
+application/marc
+application/mathematica
+application/mathml+xml		mathml
+application/msword		doc
+application/news-message-id
+application/news-transmission
+application/ocsp-request
+application/ocsp-response
+application/octet-stream	bin dms lha lzh exe class so dll dmg
+application/oda			oda
+application/ogg			ogg
+application/parityfec
+application/pdf			pdf
+application/pgp-encrypted
+application/pgp-keys
+application/pgp-signature
+application/pkcs10
+application/pkcs7-mime
+application/pkcs7-signature
+application/pkix-cert
+application/pkix-crl
+application/pkixcmp
+application/postscript		ai eps ps
+application/prs.alvestrand.titrax-sheet
+application/prs.cww
+application/prs.nprend
+application/prs.plucker
+application/qsig
+application/rdf+xml		rdf
+application/reginfo+xml
+application/remote-printing
+application/riscos
+application/rtf
+application/sdp
+application/set-payment
+application/set-payment-initiation
+application/set-registration
+application/set-registration-initiation
+application/sgml
+application/sgml-open-catalog
+application/sieve
+application/slate
+application/smil		smi smil
+application/srgs		gram
+application/srgs+xml		grxml
+application/timestamp-query
+application/timestamp-reply
+application/tve-trigger
+application/vemmi
+application/vnd.3gpp.pic-bw-large
+application/vnd.3gpp.pic-bw-small
+application/vnd.3gpp.pic-bw-var
+application/vnd.3gpp.sms
+application/vnd.3m.post-it-notes
+application/vnd.accpac.simply.aso
+application/vnd.accpac.simply.imp
+application/vnd.acucobol
+application/vnd.acucorp
+application/vnd.adobe.xfdf
+application/vnd.aether.imp
+application/vnd.amiga.ami
+application/vnd.anser-web-certificate-issue-initiation
+application/vnd.anser-web-funds-transfer-initiation
+application/vnd.audiograph
+application/vnd.blueice.multipass
+application/vnd.bmi
+application/vnd.businessobjects
+application/vnd.canon-cpdl
+application/vnd.canon-lips
+application/vnd.cinderella
+application/vnd.claymore
+application/vnd.commerce-battelle
+application/vnd.commonspace
+application/vnd.contact.cmsg
+application/vnd.cosmocaller
+application/vnd.criticaltools.wbs+xml
+application/vnd.ctc-posml
+application/vnd.cups-postscript
+application/vnd.cups-raster
+application/vnd.cups-raw
+application/vnd.curl
+application/vnd.cybank
+application/vnd.data-vision.rdz
+application/vnd.dna
+application/vnd.dpgraph
+application/vnd.dreamfactory
+application/vnd.dxr
+application/vnd.ecdis-update
+application/vnd.ecowin.chart
+application/vnd.ecowin.filerequest
+application/vnd.ecowin.fileupdate
+application/vnd.ecowin.series
+application/vnd.ecowin.seriesrequest
+application/vnd.ecowin.seriesupdate
+application/vnd.enliven
+application/vnd.epson.esf
+application/vnd.epson.msf
+application/vnd.epson.quickanime
+application/vnd.epson.salt
+application/vnd.epson.ssf
+application/vnd.ericsson.quickcall
+application/vnd.eudora.data
+application/vnd.fdf
+application/vnd.ffsns
+application/vnd.fints
+application/vnd.flographit
+application/vnd.framemaker
+application/vnd.fsc.weblaunch
+application/vnd.fujitsu.oasys
+application/vnd.fujitsu.oasys2
+application/vnd.fujitsu.oasys3
+application/vnd.fujitsu.oasysgp
+application/vnd.fujitsu.oasysprs
+application/vnd.fujixerox.ddd
+application/vnd.fujixerox.docuworks
+application/vnd.fujixerox.docuworks.binder
+application/vnd.fut-misnet
+application/vnd.grafeq
+application/vnd.groove-account
+application/vnd.groove-help
+application/vnd.groove-identity-message
+application/vnd.groove-injector
+application/vnd.groove-tool-message
+application/vnd.groove-tool-template
+application/vnd.groove-vcard
+application/vnd.hbci
+application/vnd.hhe.lesson-player
+application/vnd.hp-hpgl
+application/vnd.hp-hpid
+application/vnd.hp-hps
+application/vnd.hp-pcl
+application/vnd.hp-pclxl
+application/vnd.httphone
+application/vnd.hzn-3d-crossword
+application/vnd.ibm.afplinedata
+application/vnd.ibm.electronic-media
+application/vnd.ibm.minipay
+application/vnd.ibm.modcap
+application/vnd.ibm.rights-management
+application/vnd.ibm.secure-container
+application/vnd.informix-visionary
+application/vnd.intercon.formnet
+application/vnd.intertrust.digibox
+application/vnd.intertrust.nncp
+application/vnd.intu.qbo
+application/vnd.intu.qfx
+application/vnd.irepository.package+xml
+application/vnd.is-xpr
+application/vnd.japannet-directory-service
+application/vnd.japannet-jpnstore-wakeup
+application/vnd.japannet-payment-wakeup
+application/vnd.japannet-registration
+application/vnd.japannet-registration-wakeup
+application/vnd.japannet-setstore-wakeup
+application/vnd.japannet-verification
+application/vnd.japannet-verification-wakeup
+application/vnd.jisp
+application/vnd.kde.karbon
+application/vnd.kde.kchart
+application/vnd.kde.kformula
+application/vnd.kde.kivio
+application/vnd.kde.kontour
+application/vnd.kde.kpresenter
+application/vnd.kde.kspread
+application/vnd.kde.kword
+application/vnd.kenameaapp
+application/vnd.koan
+application/vnd.liberty-request+xml
+application/vnd.llamagraphics.life-balance.desktop
+application/vnd.llamagraphics.life-balance.exchange+xml
+application/vnd.lotus-1-2-3
+application/vnd.lotus-approach
+application/vnd.lotus-freelance
+application/vnd.lotus-notes
+application/vnd.lotus-organizer
+application/vnd.lotus-screencam
+application/vnd.lotus-wordpro
+application/vnd.mcd
+application/vnd.mediastation.cdkey
+application/vnd.meridian-slingshot
+application/vnd.micrografx.flo
+application/vnd.micrografx.igx
+application/vnd.mif		mif
+application/vnd.minisoft-hp3000-save
+application/vnd.mitsubishi.misty-guard.trustweb
+application/vnd.mobius.daf
+application/vnd.mobius.dis
+application/vnd.mobius.mbk
+application/vnd.mobius.mqy
+application/vnd.mobius.msl
+application/vnd.mobius.plc
+application/vnd.mobius.txf
+application/vnd.mophun.application
+application/vnd.mophun.certificate
+application/vnd.motorola.flexsuite
+application/vnd.motorola.flexsuite.adsi
+application/vnd.motorola.flexsuite.fis
+application/vnd.motorola.flexsuite.gotap
+application/vnd.motorola.flexsuite.kmr
+application/vnd.motorola.flexsuite.ttc
+application/vnd.motorola.flexsuite.wem
+application/vnd.mozilla.xul+xml	xul
+application/vnd.ms-artgalry
+application/vnd.ms-asf
+application/vnd.ms-excel	xls
+application/vnd.ms-lrm
+application/vnd.ms-powerpoint	ppt
+application/vnd.ms-project
+application/vnd.ms-tnef
+application/vnd.ms-works
+application/vnd.ms-wpl
+application/vnd.mseq
+application/vnd.msign
+application/vnd.music-niff
+application/vnd.musician
+application/vnd.netfpx
+application/vnd.noblenet-directory
+application/vnd.noblenet-sealer
+application/vnd.noblenet-web
+application/vnd.novadigm.edm
+application/vnd.novadigm.edx
+application/vnd.novadigm.ext
+application/vnd.obn
+application/vnd.osa.netdeploy
+application/vnd.palm
+application/vnd.pg.format
+application/vnd.pg.osasli
+application/vnd.powerbuilder6
+application/vnd.powerbuilder6-s
+application/vnd.powerbuilder7
+application/vnd.powerbuilder7-s
+application/vnd.powerbuilder75
+application/vnd.powerbuilder75-s
+application/vnd.previewsystems.box
+application/vnd.publishare-delta-tree
+application/vnd.pvi.ptid1
+application/vnd.pwg-multiplexed
+application/vnd.pwg-xhtml-print+xml
+application/vnd.quark.quarkxpress
+application/vnd.rapid
+application/vnd.rn-realmedia	rm
+application/vnd.s3sms
+application/vnd.sealed.net
+application/vnd.seemail
+application/vnd.shana.informed.formdata
+application/vnd.shana.informed.formtemplate
+application/vnd.shana.informed.interchange
+application/vnd.shana.informed.package
+application/vnd.smaf
+application/vnd.sss-cod
+application/vnd.sss-dtf
+application/vnd.sss-ntf
+application/vnd.street-stream
+application/vnd.svd
+application/vnd.swiftview-ics
+application/vnd.triscape.mxs
+application/vnd.trueapp
+application/vnd.truedoc
+application/vnd.ufdl
+application/vnd.uplanet.alert
+application/vnd.uplanet.alert-wbxml
+application/vnd.uplanet.bearer-choice
+application/vnd.uplanet.bearer-choice-wbxml
+application/vnd.uplanet.cacheop
+application/vnd.uplanet.cacheop-wbxml
+application/vnd.uplanet.channel
+application/vnd.uplanet.channel-wbxml
+application/vnd.uplanet.list
+application/vnd.uplanet.list-wbxml
+application/vnd.uplanet.listcmd
+application/vnd.uplanet.listcmd-wbxml
+application/vnd.uplanet.signal
+application/vnd.vcx
+application/vnd.vectorworks
+application/vnd.vidsoft.vidconference
+application/vnd.visio
+application/vnd.visionary
+application/vnd.vividence.scriptfile
+application/vnd.vsf
+application/vnd.wap.sic
+application/vnd.wap.slc
+application/vnd.wap.wbxml	wbxml
+application/vnd.wap.wmlc	wmlc
+application/vnd.wap.wmlscriptc	wmlsc
+application/vnd.webturbo
+application/vnd.wrq-hp3000-labelled
+application/vnd.wt.stf
+application/vnd.wv.csp+wbxml
+application/vnd.xara
+application/vnd.xfdl
+application/vnd.yamaha.hv-dic
+application/vnd.yamaha.hv-script
+application/vnd.yamaha.hv-voice
+application/vnd.yellowriver-custom-menu
+application/voicexml+xml	vxml
+application/watcherinfo+xml
+application/whoispp-query
+application/whoispp-response
+application/wita
+application/wordperfect5.1
+application/x-bcpio		bcpio
+application/x-cdlink		vcd
+application/x-chess-pgn		pgn
+application/x-compress
+application/x-cpio		cpio
+application/x-csh		csh
+application/x-director		dcr dir dxr
+application/x-dvi		dvi
+application/x-futuresplash	spl
+application/x-gtar		gtar
+application/x-gzip		gz
+application/x-hdf		hdf
+application/x-javascript	js
+application/x-java-jnlp-file	jnlp
+application/x-koan		skp skd skt skm
+application/x-latex		latex
+application/x-netcdf		nc cdf
+application/x-sh		sh
+application/x-shar		shar
+application/x-shockwave-flash	swf
+application/x-stuffit		sit
+application/x-sv4cpio		sv4cpio
+application/x-sv4crc		sv4crc
+application/x-tar		tar
+application/x-tcl		tcl
+application/x-tex		tex
+application/x-texinfo		texinfo texi
+application/x-troff		t tr roff
+application/x-troff-man		man
+application/x-troff-me		me
+application/x-troff-ms		ms
+application/x-ustar		ustar
+application/x-wais-source	src
+application/x400-bp
+application/xhtml+xml		xhtml xht
+application/xslt+xml		xslt
+application/xml			xml xsl
+application/xml-dtd		dtd
+application/xml-external-parsed-entity
+application/zip			zip
+audio/32kadpcm
+audio/amr
+audio/amr-wb
+audio/basic			au snd
+audio/cn
+audio/dat12
+audio/dsr-es201108
+audio/dvi4
+audio/evrc
+audio/evrc0
+audio/g722
+audio/g.722.1
+audio/g723
+audio/g726-16
+audio/g726-24
+audio/g726-32
+audio/g726-40
+audio/g728
+audio/g729
+audio/g729D
+audio/g729E
+audio/gsm
+audio/gsm-efr
+audio/l8
+audio/l16
+audio/l20
+audio/l24
+audio/lpc
+audio/midi			mid midi kar
+audio/mpa
+audio/mpa-robust
+audio/mp4a-latm			m4a m4p
+audio/mpeg			mpga mp2 mp3
+audio/parityfec
+audio/pcma
+audio/pcmu
+audio/prs.sid
+audio/qcelp
+audio/red
+audio/smv
+audio/smv0
+audio/telephone-event
+audio/tone
+audio/vdvi
+audio/vnd.3gpp.iufp
+audio/vnd.cisco.nse
+audio/vnd.cns.anp1
+audio/vnd.cns.inf1
+audio/vnd.digital-winds
+audio/vnd.everad.plj
+audio/vnd.lucent.voice
+audio/vnd.nortel.vbk
+audio/vnd.nuera.ecelp4800
+audio/vnd.nuera.ecelp7470
+audio/vnd.nuera.ecelp9600
+audio/vnd.octel.sbc
+audio/vnd.qcelp
+audio/vnd.rhetorex.32kadpcm
+audio/vnd.vmx.cvsd
+audio/x-aiff			aif aiff aifc
+audio/x-alaw-basic
+audio/x-mpegurl			m3u
+audio/x-pn-realaudio		ram ra
+audio/x-pn-realaudio-plugin
+audio/x-wav			wav
+chemical/x-pdb			pdb
+chemical/x-xyz			xyz
+image/bmp			bmp
+image/cgm			cgm
+image/g3fax
+image/gif			gif
+image/ief			ief
+image/jpeg			jpeg jpg jpe
+image/jp2			jp2
+image/naplps
+image/pict			pict pic pct
+image/png			png
+image/prs.btif
+image/prs.pti
+image/svg+xml			svg
+image/t38
+image/tiff			tiff tif
+image/tiff-fx
+image/vnd.cns.inf2
+image/vnd.djvu			djvu djv
+image/vnd.dwg
+image/vnd.dxf
+image/vnd.fastbidsheet
+image/vnd.fpx
+image/vnd.fst
+image/vnd.fujixerox.edmics-mmr
+image/vnd.fujixerox.edmics-rlc
+image/vnd.globalgraphics.pgb
+image/vnd.mix
+image/vnd.ms-modi
+image/vnd.net-fpx
+image/vnd.svf
+image/vnd.wap.wbmp		wbmp
+image/vnd.xiff
+image/x-cmu-raster		ras
+image/x-macpaint		pntg pnt mac
+image/x-icon			ico
+image/x-portable-anymap		pnm
+image/x-portable-bitmap		pbm
+image/x-portable-graymap	pgm
+image/x-portable-pixmap		ppm
+image/x-quicktime		qtif qti
+image/x-rgb			rgb
+image/x-xbitmap			xbm
+image/x-xpixmap			xpm
+image/x-xwindowdump		xwd
+message/delivery-status
+message/disposition-notification
+message/external-body
+message/http
+message/news
+message/partial
+message/rfc822
+message/s-http
+message/sip
+message/sipfrag
+model/iges			igs iges
+model/mesh			msh mesh silo
+model/vnd.dwf
+model/vnd.flatland.3dml
+model/vnd.gdl
+model/vnd.gs-gdl
+model/vnd.gtw
+model/vnd.mts
+model/vnd.parasolid.transmit.binary
+model/vnd.parasolid.transmit.text
+model/vnd.vtu
+model/vrml			wrl vrml
+multipart/alternative
+multipart/appledouble
+multipart/byteranges
+multipart/digest
+multipart/encrypted
+multipart/form-data
+multipart/header-set
+multipart/mixed
+multipart/parallel
+multipart/related
+multipart/report
+multipart/signed
+multipart/voice-message
+text/calendar			ics ifb
+text/css			css
+text/directory
+text/enriched
+text/html			html htm
+text/parityfec
+text/plain			asc txt
+text/prs.lines.tag
+text/rfc822-headers
+text/richtext			rtx
+text/rtf			rtf
+text/sgml			sgml sgm
+text/t140
+text/tab-separated-values	tsv
+text/uri-list
+text/vnd.abc
+text/vnd.curl
+text/vnd.dmclientscript
+text/vnd.fly
+text/vnd.fmi.flexstor
+text/vnd.in3d.3dml
+text/vnd.in3d.spot
+text/vnd.iptc.nitf
+text/vnd.iptc.newsml
+text/vnd.latex-z
+text/vnd.motorola.reflex
+text/vnd.ms-mediapackage
+text/vnd.net2phone.commcenter.command
+text/vnd.sun.j2me.app-descriptor
+text/vnd.wap.si
+text/vnd.wap.sl
+text/vnd.wap.wml		wml
+text/vnd.wap.wmlscript		wmls
+text/x-setext			etx
+text/xml
+text/xml-external-parsed-entity
+video/3gpp		3gp
+video/bmpeg
+video/bt656
+video/celb
+video/dv
+video/h261
+video/h263
+video/h263-1998
+video/h263-2000
+video/jpeg
+video/mp1s
+video/mp2p
+video/mp2t
+video/mp4			mp4
+video/mp4v-es
+video/mpv
+video/mpeg			mpeg mpg mpe
+video/nv
+video/parityfec
+video/pointer
+video/quicktime			qt mov
+video/smpte292m
+video/vnd.fvt
+video/vnd.motorola.video
+video/vnd.motorola.videop
+video/vnd.mpegurl		mxu m4u
+video/vnd.nokia.interleaved-multimedia
+video/vnd.objectvideo
+video/vnd.vivo
+video/x-dv			dv dif
+video/x-flv			flv
+video/x-ms-wmv		wmv
+video/x-msvideo			avi
+video/x-sgi-movie		movie
+x-conference/x-cooltalk		ice
