diff --git a/bundles/org.eclipse.equinox.io/.classpath b/bundles/org.eclipse.equinox.io/.classpath
new file mode 100644
index 0000000..755d49b
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/OSGi%Minimum-1.0"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/org.eclipse.equinox.io/.cvsignore b/bundles/org.eclipse.equinox.io/.cvsignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/.cvsignore
@@ -0,0 +1 @@
+bin
diff --git a/bundles/org.eclipse.equinox.io/.project b/bundles/org.eclipse.equinox.io/.project
new file mode 100644
index 0000000..8c9bd86
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.io</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/bundles/org.eclipse.equinox.io/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.io/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..d304116
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,331 @@
+#Thu Aug 16 11:00:59 EDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=error
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.3
+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=0
+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=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=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=false
+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=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=true
+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=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=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=do not 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=do not 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=do not 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=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=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=800
+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=false
+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
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/bundles/org.eclipse.equinox.io/.settings/org.eclipse.jdt.ui.prefs b/bundles/org.eclipse.equinox.io/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..023a27a
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,57 @@
+#Tue Aug 21 11:19:11 CDT 2007
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_core
+formatter_settings_version=11
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=;
+org.eclipse.jdt.ui.ondemandthreshold=3
+org.eclipse.jdt.ui.staticondemandthreshold=99
+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_nls_tags=false
+sp_cleanup.add_missing_override_annotations=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_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_variable_declarations_final=true
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=false
+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_trailing_whitespaces=false
+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_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+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.equinox.io/.settings/org.eclipse.pde.core.prefs b/bundles/org.eclipse.equinox.io/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..c37bbc4
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+#Thu Mar 29 10:30:40 EEST 2007
+eclipse.preferences.version=1
+pluginProject.extensions=false
diff --git a/bundles/org.eclipse.equinox.io/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.io/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..4a908f8
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/META-INF/MANIFEST.MF
@@ -0,0 +1,31 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: IO Connector Service
+Bundle-SymbolicName: org.eclipse.equinox.io
+Bundle-Version: 0.1.0.qualifier
+Bundle-Vendor: Eclipse
+Bundle-Activator: org.eclipse.equinox.internal.io.impl.Activator
+Bundle-Description: This bundle contains service for creating connections. 
+Import-Package: 
+ javax.microedition.io,
+ org.eclipse.equinox.internal.util.hash;version="1.0.0",
+ org.eclipse.equinox.internal.util.pool;version="1.0.0",
+ org.eclipse.equinox.internal.util.ref;version="1.0.0",
+ org.osgi.framework;version="1.0",
+ org.osgi.service.io;version="1.0",
+ org.osgi.service.log;version="1.0.0",
+ org.osgi.util.tracker;version="1.2"
+Export-Package: 
+ javax.microedition.io,
+ org.eclipse.equinox.internal.io; x-internal:=true,
+ org.eclipse.equinox.internal.io.impl; x-internal:=true,
+ org.eclipse.equinox.internal.io.util; x-internal:=true
+Bundle-RequiredExecutionEnvironment: OSGi/Minimum-1.0,
+ CDC-1.0/Foundation-1.0,
+ J2SE-1.2,
+ J2SE-1.3,
+ J2SE-1.4,
+ J2SE-1.5,
+ JavaSE-1.6,
+ CDC-1.1/Foundation-1.1
+Provided-Services: class=org.osgi.service.io.ConnectorService
diff --git a/bundles/org.eclipse.equinox.io/OSGI-INF/permissions.perm b/bundles/org.eclipse.equinox.io/OSGI-INF/permissions.perm
new file mode 100644
index 0000000..6cedcdd
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/OSGI-INF/permissions.perm
@@ -0,0 +1,18 @@
+(org.osgi.framework.PackagePermission "javax.microedition.io" "import")
+(org.osgi.framework.PackagePermission "org.osgi.service.io" "import")
+(org.osgi.framework.PackagePermission "org.osgi.service.log" "import")
+(org.osgi.framework.PackagePermission "org.osgi.util.tracker" "import")
+(org.osgi.framework.PackagePermission "org.osgi.framework" "import")
+(org.osgi.framework.PackagePermission "org.eclipse.equinox.internal.util.hash" "import")
+(org.osgi.framework.PackagePermission "org.eclipse.equinox.internal.util.pool" "import")
+(org.osgi.framework.PackagePermission "org.eclipse.equinox.internal.util.ref" "import")
+(org.osgi.framework.PackagePermission "org.eclipse.equinox.internal.io" "export")
+(org.osgi.framework.PackagePermission "org.eclipse.equinox.internal.io.impl" "export")
+(org.osgi.framework.PackagePermission "org.eclipse.equinox.internal.io.util" "export")
+(org.osgi.framework.PackagePermission "javax.microedition.io" "export")
+(org.osgi.framework.BundlePermission "*" "provide")
+(org.osgi.framework.BundlePermission "*" "host")
+(org.osgi.framework.ServicePermission "org.osgi.service.io.ConnectionFactory" "get")
+(org.osgi.framework.ServicePermission "org.osgi.service.io.ConnectorService" "register")
+(java.util.PropertyPermission "*" "read")
+(java.net.SocketPermission "*" "listen")
diff --git a/bundles/org.eclipse.equinox.io/about.html b/bundles/org.eclipse.equinox.io/about.html
new file mode 100644
index 0000000..40e147d
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>January 15, 2008</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/bundles/org.eclipse.equinox.io/build.properties b/bundles/org.eclipse.equinox.io/build.properties
new file mode 100644
index 0000000..9cbab3c
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               about.html
+src.includes = about.html
diff --git a/bundles/org.eclipse.equinox.io/src/javax/microedition/io/Connection.java b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/Connection.java
new file mode 100644
index 0000000..1d5fffd
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/Connection.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package javax.microedition.io;
+
+public abstract interface Connection {
+
+	public abstract void close() throws java.io.IOException;
+
+}
diff --git a/bundles/org.eclipse.equinox.io/src/javax/microedition/io/ConnectionNotFoundException.java b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/ConnectionNotFoundException.java
new file mode 100644
index 0000000..68a9016
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/ConnectionNotFoundException.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package javax.microedition.io;
+
+public class ConnectionNotFoundException extends java.io.IOException {
+
+	private static final long serialVersionUID = 1L;
+
+	public ConnectionNotFoundException() {
+	}
+
+	public ConnectionNotFoundException(java.lang.String var0) {
+	}
+
+}
diff --git a/bundles/org.eclipse.equinox.io/src/javax/microedition/io/Connector.java b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/Connector.java
new file mode 100644
index 0000000..dceb48e
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/Connector.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package javax.microedition.io;
+
+public class Connector {
+
+	private Connector() {
+	}
+
+	public static javax.microedition.io.Connection open(java.lang.String var0) throws java.io.IOException {
+		return null;
+	}
+
+	public static javax.microedition.io.Connection open(java.lang.String var0, int var1) throws java.io.IOException {
+		return null;
+	}
+
+	public static javax.microedition.io.Connection open(java.lang.String var0, int var1, boolean var2) throws java.io.IOException {
+		return null;
+	}
+
+	public static java.io.DataInputStream openDataInputStream(java.lang.String var0) throws java.io.IOException {
+		return null;
+	}
+
+	public static java.io.DataOutputStream openDataOutputStream(java.lang.String var0) throws java.io.IOException {
+		return null;
+	}
+
+	public static java.io.InputStream openInputStream(java.lang.String var0) throws java.io.IOException {
+		return null;
+	}
+
+	public static java.io.OutputStream openOutputStream(java.lang.String var0) throws java.io.IOException {
+		return null;
+	}
+
+	public final static int READ = 1;
+
+	public final static int WRITE = 2;
+
+	public final static int READ_WRITE = 3;
+
+}
diff --git a/bundles/org.eclipse.equinox.io/src/javax/microedition/io/ContentConnection.java b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/ContentConnection.java
new file mode 100644
index 0000000..8064b2f
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/ContentConnection.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package javax.microedition.io;
+
+public abstract interface ContentConnection extends javax.microedition.io.StreamConnection {
+
+	public abstract java.lang.String getEncoding();
+
+	public abstract long getLength();
+
+	public abstract java.lang.String getType();
+
+}
diff --git a/bundles/org.eclipse.equinox.io/src/javax/microedition/io/Datagram.java b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/Datagram.java
new file mode 100644
index 0000000..b59b5bf
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/Datagram.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package javax.microedition.io;
+
+public abstract interface Datagram extends java.io.DataInput, java.io.DataOutput {
+
+	public abstract java.lang.String getAddress();
+
+	public abstract byte[] getData();
+
+	public abstract int getLength();
+
+	public abstract int getOffset();
+
+	public abstract void reset();
+
+	public abstract void setAddress(javax.microedition.io.Datagram var0);
+
+	public abstract void setAddress(java.lang.String var0) throws java.io.IOException;
+
+	public abstract void setData(byte[] var0, int var1, int var2);
+
+	public abstract void setLength(int var0);
+
+}
diff --git a/bundles/org.eclipse.equinox.io/src/javax/microedition/io/DatagramConnection.java b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/DatagramConnection.java
new file mode 100644
index 0000000..b97d452
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/DatagramConnection.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package javax.microedition.io;
+
+public abstract interface DatagramConnection extends javax.microedition.io.Connection {
+
+	public abstract int getMaximumLength() throws java.io.IOException;
+
+	public abstract int getNominalLength() throws java.io.IOException;
+
+	public abstract javax.microedition.io.Datagram newDatagram(byte[] var0, int var1) throws java.io.IOException;
+
+	public abstract javax.microedition.io.Datagram newDatagram(byte[] var0, int var1, java.lang.String var2) throws java.io.IOException;
+
+	public abstract javax.microedition.io.Datagram newDatagram(int var0) throws java.io.IOException;
+
+	public abstract javax.microedition.io.Datagram newDatagram(int var0, java.lang.String var1) throws java.io.IOException;
+
+	public abstract void receive(javax.microedition.io.Datagram var0) throws java.io.IOException;
+
+	public abstract void send(javax.microedition.io.Datagram var0) throws java.io.IOException;
+
+}
diff --git a/bundles/org.eclipse.equinox.io/src/javax/microedition/io/HttpConnection.java b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/HttpConnection.java
new file mode 100644
index 0000000..6a3bb45
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/HttpConnection.java
@@ -0,0 +1,140 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package javax.microedition.io;
+
+public abstract interface HttpConnection extends javax.microedition.io.ContentConnection {
+
+	public abstract long getDate() throws java.io.IOException;
+
+	public abstract long getExpiration() throws java.io.IOException;
+
+	public abstract java.lang.String getFile();
+
+	public abstract java.lang.String getHeaderField(int var0) throws java.io.IOException;
+
+	public abstract java.lang.String getHeaderField(java.lang.String var0) throws java.io.IOException;
+
+	public abstract long getHeaderFieldDate(java.lang.String var0, long var1) throws java.io.IOException;
+
+	public abstract int getHeaderFieldInt(java.lang.String var0, int var1) throws java.io.IOException;
+
+	public abstract java.lang.String getHeaderFieldKey(int var0) throws java.io.IOException;
+
+	public abstract java.lang.String getHost();
+
+	public abstract long getLastModified() throws java.io.IOException;
+
+	public abstract int getPort();
+
+	public abstract java.lang.String getProtocol();
+
+	public abstract java.lang.String getQuery();
+
+	public abstract java.lang.String getRef();
+
+	public abstract java.lang.String getRequestMethod();
+
+	public abstract java.lang.String getRequestProperty(java.lang.String var0);
+
+	public abstract int getResponseCode() throws java.io.IOException;
+
+	public abstract java.lang.String getResponseMessage() throws java.io.IOException;
+
+	public abstract java.lang.String getURL();
+
+	public abstract void setRequestMethod(java.lang.String var0) throws java.io.IOException;
+
+	public abstract void setRequestProperty(java.lang.String var0, java.lang.String var1) throws java.io.IOException;
+
+	public final static java.lang.String GET = "GET";
+
+	public final static java.lang.String HEAD = "HEAD";
+
+	public final static java.lang.String POST = "POST";
+
+	public final static int HTTP_ACCEPTED = 202;
+
+	public final static int HTTP_BAD_GATEWAY = 502;
+
+	public final static int HTTP_BAD_METHOD = 405;
+
+	public final static int HTTP_BAD_REQUEST = 400;
+
+	public final static int HTTP_CLIENT_TIMEOUT = 408;
+
+	public final static int HTTP_CONFLICT = 409;
+
+	public final static int HTTP_CREATED = 201;
+
+	public final static int HTTP_ENTITY_TOO_LARGE = 413;
+
+	public final static int HTTP_EXPECT_FAILED = 417;
+
+	public final static int HTTP_FORBIDDEN = 403;
+
+	public final static int HTTP_GATEWAY_TIMEOUT = 504;
+
+	public final static int HTTP_GONE = 410;
+
+	public final static int HTTP_INTERNAL_ERROR = 500;
+
+	public final static int HTTP_LENGTH_REQUIRED = 411;
+
+	public final static int HTTP_MOVED_PERM = 301;
+
+	public final static int HTTP_MOVED_TEMP = 302;
+
+	public final static int HTTP_MULT_CHOICE = 300;
+
+	public final static int HTTP_NO_CONTENT = 204;
+
+	public final static int HTTP_NOT_ACCEPTABLE = 406;
+
+	public final static int HTTP_NOT_AUTHORITATIVE = 203;
+
+	public final static int HTTP_NOT_FOUND = 404;
+
+	public final static int HTTP_NOT_IMPLEMENTED = 501;
+
+	public final static int HTTP_NOT_MODIFIED = 304;
+
+	public final static int HTTP_OK = 200;
+
+	public final static int HTTP_PARTIAL = 206;
+
+	public final static int HTTP_PAYMENT_REQUIRED = 402;
+
+	public final static int HTTP_PRECON_FAILED = 412;
+
+	public final static int HTTP_PROXY_AUTH = 407;
+
+	public final static int HTTP_REQ_TOO_LONG = 414;
+
+	public final static int HTTP_RESET = 205;
+
+	public final static int HTTP_SEE_OTHER = 303;
+
+	public final static int HTTP_TEMP_REDIRECT = 307;
+
+	public final static int HTTP_UNAUTHORIZED = 401;
+
+	public final static int HTTP_UNAVAILABLE = 503;
+
+	public final static int HTTP_UNSUPPORTED_RANGE = 416;
+
+	public final static int HTTP_UNSUPPORTED_TYPE = 415;
+
+	public final static int HTTP_USE_PROXY = 305;
+
+	public final static int HTTP_VERSION = 505;
+
+}
diff --git a/bundles/org.eclipse.equinox.io/src/javax/microedition/io/InputConnection.java b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/InputConnection.java
new file mode 100644
index 0000000..c738f18
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/InputConnection.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package javax.microedition.io;
+
+public abstract interface InputConnection extends javax.microedition.io.Connection {
+
+	public abstract java.io.DataInputStream openDataInputStream() throws java.io.IOException;
+
+	public abstract java.io.InputStream openInputStream() throws java.io.IOException;
+
+}
diff --git a/bundles/org.eclipse.equinox.io/src/javax/microedition/io/OutputConnection.java b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/OutputConnection.java
new file mode 100644
index 0000000..e03cbea
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/OutputConnection.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package javax.microedition.io;
+
+public abstract interface OutputConnection extends javax.microedition.io.Connection {
+
+	public abstract java.io.DataOutputStream openDataOutputStream() throws java.io.IOException;
+
+	public abstract java.io.OutputStream openOutputStream() throws java.io.IOException;
+
+}
diff --git a/bundles/org.eclipse.equinox.io/src/javax/microedition/io/StreamConnection.java b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/StreamConnection.java
new file mode 100644
index 0000000..aecb893
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/StreamConnection.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package javax.microedition.io;
+
+public abstract interface StreamConnection extends javax.microedition.io.InputConnection, javax.microedition.io.OutputConnection {
+
+}
diff --git a/bundles/org.eclipse.equinox.io/src/javax/microedition/io/StreamConnectionNotifier.java b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/StreamConnectionNotifier.java
new file mode 100644
index 0000000..9b718bf
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/StreamConnectionNotifier.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package javax.microedition.io;
+
+public abstract interface StreamConnectionNotifier extends javax.microedition.io.Connection {
+
+	public abstract javax.microedition.io.StreamConnection acceptAndOpen() throws java.io.IOException;
+
+}
diff --git a/bundles/org.eclipse.equinox.io/src/javax/microedition/io/package.html b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/package.html
new file mode 100644
index 0000000..84f3c6f
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/javax/microedition/io/package.html
@@ -0,0 +1,9 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html">
+</head>
+<body bgcolor="#FFFFFF">
+The classes for the generic connections.
+</body>
+</html>
diff --git a/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/ConnectionListener.java b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/ConnectionListener.java
new file mode 100644
index 0000000..c698fe2
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/ConnectionListener.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.io;
+
+import java.util.EventListener;
+import javax.microedition.io.Connection;
+
+/**
+ * Interface for a listener that will receive notification when the connection
+ * is created and when is closed.
+ * <p>
+ * Listener is notified for creation of the connection only when the connector
+ * service creates connection that implements only this and the Connection
+ * interface, when the needed IOProvider is not available at the moment of
+ * creation. When the provider becomes available then all registered listeners
+ * will receive event
+ * <p>
+ * <code>CONNECTION_CREATED</code> and the created connection. Event
+ * <code>CONNECTION_CLOSED</code> must be send from every connection that
+ * implements this interface when it is closing.
+ * 
+ * @author Pavlin Dobrev
+ * @version 1.0
+ */
+
+public interface ConnectionListener extends EventListener {
+	/**
+	 * Constant for event type created
+	 */
+	public static final int CONNECTION_CREATED = 0;
+	/**
+	 * Constant for event type closed
+	 */
+	public static final int CONNECTION_CLOSED = 1;
+
+	/**
+	 * Receives notification that a connection has been created or closed.
+	 */
+	public void notify(String uri, int eventType, Connection conn);
+
+}
diff --git a/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/ConnectionNotifier.java b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/ConnectionNotifier.java
new file mode 100644
index 0000000..86029c6
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/ConnectionNotifier.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.io;
+
+/**
+ * Provides methods for registering listeners for receiving events from a
+ * connection (that implements this interface).
+ * 
+ * @author Pavlin Dobrev
+ * @version 1.0
+ */
+
+public interface ConnectionNotifier {
+	/**
+	 * Adds the given listener to the set of listeners that will be notified
+	 * when the connection is created or closed.
+	 */
+	public void addConnectionListener(ConnectionListener l);
+
+	/**
+	 * Removes the given listener from the set of listeners that will be
+	 * notified when the connection is created or closed.
+	 */
+	public void removeConnectionListener(ConnectionListener l);
+}
diff --git a/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/RandomAccessConnection.java b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/RandomAccessConnection.java
new file mode 100644
index 0000000..c550e5e
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/RandomAccessConnection.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.io;
+
+import java.io.*;
+import javax.microedition.io.InputConnection;
+import javax.microedition.io.OutputConnection;
+
+/**
+ * @author Pavlin Dobrev
+ * @version 1.0
+ */
+
+public interface RandomAccessConnection extends InputConnection, OutputConnection, DataInput, DataOutput {
+
+	public long length() throws IOException;
+
+	public long getFilePointer() throws IOException;
+
+	public boolean isSelected();
+
+	public int read() throws IOException;
+
+	public int read(byte[] buff, int off, int len) throws IOException;
+
+	public void seek(long len) throws IOException;
+
+	public void write(int b) throws IOException;
+
+	public void write(byte[] buff, int off, int len) throws IOException;
+
+	public void flush() throws IOException;
+}
diff --git a/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/Activator.java b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/Activator.java
new file mode 100644
index 0000000..f159f87
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/Activator.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.io.impl;
+
+import org.eclipse.equinox.internal.util.ref.Log;
+import org.osgi.framework.*;
+
+/**
+ * @author Pavlin Dobrev
+ * @version 1.0
+ */
+
+public class Activator implements BundleActivator {
+
+	public static BundleContext bc = null;
+	private ConnectorServiceImpl connector;
+	private Log log;
+
+	public void start(BundleContext bc) throws BundleException {
+		Activator.bc = bc;
+		log = new Log(bc, false);
+		log.setDebug(getBoolean("equinox.connector.debug"));
+		log.setPrintOnConsole(getBoolean("equinox.connector.console"));
+		if (log.getDebug()) {
+			log.setMaps(TracerConfigConnector.getMap(), null);
+		}
+		connector = new ConnectorServiceImpl(bc, log);
+	}
+
+	public void stop(BundleContext bc) {
+		if (connector != null) {
+			connector.close();
+			connector = null;
+			log.close();
+		}
+		bc = null;
+	}
+
+	public static boolean getBoolean(String property) {
+		String prop = (bc != null) ? bc.getProperty(property) : System.getProperty(property);
+		return ((prop != null) && prop.equalsIgnoreCase("true"));
+	}
+
+	public static int getInteger(String property, int defaultValue) {
+		String prop = (bc != null) ? bc.getProperty(property) : System.getProperty(property);
+		if (prop != null) {
+			try {
+				return Integer.decode(prop).intValue();
+			} catch (NumberFormatException e) {
+				//do nothing
+			}
+		}
+		return defaultValue;
+	}
+}
diff --git a/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectionFactoryListener.java b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectionFactoryListener.java
new file mode 100644
index 0000000..bdce47f
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectionFactoryListener.java
@@ -0,0 +1,152 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.io.impl;
+
+import java.io.IOException;
+import java.util.*;
+import javax.microedition.io.Connection;
+import org.eclipse.equinox.internal.io.impl.PrivilegedRunner.PrivilegedDispatcher;
+import org.osgi.framework.*;
+import org.osgi.service.io.ConnectionFactory;
+
+/**
+ * @author Pavlin Dobrev
+ * @version 1.0
+ */
+
+public class ConnectionFactoryListener implements ServiceListener, PrivilegedDispatcher {
+	private static Hashtable urlToConN = new Hashtable(5);
+	private BundleContext bc;
+
+	public ConnectionFactoryListener(BundleContext bc) {
+		this.bc = bc;
+
+		try {
+			bc.addServiceListener(this, '(' + Constants.OBJECTCLASS + '=' + ConnectionFactory.class.getName() + ')');
+		} catch (InvalidSyntaxException ex) {
+			// Ignored - syntax is right!
+		}
+	}
+
+	public void close() {
+		bc.removeServiceListener(this);
+
+		if (!urlToConN.isEmpty()) {
+			Vector copyV = new Vector(urlToConN.size());
+
+			for (Enumeration en = urlToConN.elements(); en.hasMoreElements();) {
+				copyV.addElement(en.nextElement());
+			}
+
+			for (Enumeration en = copyV.elements(); en.hasMoreElements();) {
+				ConnectionNotifierImpl cn = (ConnectionNotifierImpl) en.nextElement();
+				try {
+					cn.close();
+				} catch (IOException ex) {
+				}
+			}
+		}
+	}
+
+	static void removeConnectionNotifier(String url) {
+		urlToConN.remove(url);
+	}
+
+	static int count = 0;
+
+	static Connection getConnectionNotifier(String scheme, String url, int mode, boolean timeouts, String filter, int count) throws IOException {
+		ConnectionNotifierImpl ret = null;
+		synchronized (urlToConN) {
+			if (urlToConN.containsKey(url)) {
+				return (Connection) urlToConN.get(url);
+			}
+
+			ret = new ConnectionNotifierImpl(scheme, url, mode, timeouts, filter);
+			urlToConN.put(url, ret);
+			if (count == ConnectionFactoryListener.count)
+				return ret;
+		}
+
+		Connection c = ConnectorServiceImpl.getConnection(filter, url, mode, timeouts, false);
+		if (c != null) {
+			if (ret.hasListeners())
+				ret.notifyCreated(c);
+			else
+				ret.close();
+		}
+		return c;
+	}
+
+	public void serviceChanged(ServiceEvent event) {
+		if (event.getType() == ServiceEvent.REGISTERED && !urlToConN.isEmpty()) {
+			ServiceReference ref = event.getServiceReference();
+			ConnectionFactory factory = (ConnectionFactory) bc.getService(ref);
+			String[] schemes = (String[]) ref.getProperty(ConnectionFactory.IO_SCHEME);
+
+			Vector toNotify = new Vector(urlToConN.size());
+			synchronized (urlToConN) {
+				for (Enumeration en = urlToConN.elements(); en.hasMoreElements();) {
+					ConnectionNotifierImpl cn = (ConnectionNotifierImpl) en.nextElement();
+					if (match(schemes, cn.scheme))
+						toNotify.addElement(cn);
+				}
+			}
+			for (int i = 0; i < toNotify.size(); i++) {
+				ConnectionNotifierImpl cn = (ConnectionNotifierImpl) toNotify.elementAt(i);
+				try {
+					if (cn.context != null) {
+						PrivilegedRunner.doPrivileged(cn.context, this, 0, cn, factory, null, null);
+						return;
+					}
+					Connection connection = factory.createConnection(cn.url, cn.mode, cn.timeouts);
+					if (cn.hasListeners())
+						cn.notifyCreated(connection);
+					else
+						cn.close();
+				} catch (Throwable ex) {
+					ex.printStackTrace();
+				}
+			}
+
+			bc.ungetService(ref);
+		}
+	}
+
+	static boolean match(String[] schemes, String scheme) {
+		if (schemes != null && scheme != null) {
+			for (int i = 0; i < schemes.length; i++) {
+				if (scheme.equals(schemes[i])) {
+					return true;
+				}
+			}
+		}
+
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.equinox.internal.io.impl.PrivilegedRunner.PrivilegedDispatcher#dispatchPrivileged(int,
+	 *      java.lang.Object, java.lang.Object, java.lang.Object,
+	 *      java.lang.Object)
+	 */
+	public Object dispatchPrivileged(int type, Object arg1, Object arg2, Object arg3, Object arg4) throws Exception {
+		ConnectionNotifierImpl cn = (ConnectionNotifierImpl) arg1;
+		ConnectionFactory factory = (ConnectionFactory) arg2;
+		Connection connection = factory.createConnection(cn.url, cn.mode, cn.timeouts);
+		if (cn.hasListeners()) {
+			cn.notifyCreated(connection);
+		} else {
+			cn.close();
+		}
+		return null;
+	}
+}
diff --git a/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectionNotifierImpl.java b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectionNotifierImpl.java
new file mode 100644
index 0000000..c5fbf4a
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectionNotifierImpl.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.io.impl;
+
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.Vector;
+import javax.microedition.io.Connection;
+import org.eclipse.equinox.internal.io.ConnectionListener;
+import org.eclipse.equinox.internal.io.ConnectionNotifier;
+
+/**
+ * @author Pavlin Dobrev
+ * @version 1.0
+ */
+
+class ConnectionNotifierImpl implements ConnectionNotifier, Connection {
+	private Vector list;
+	String scheme;
+	int mode;
+	boolean timeouts;
+	String url;
+	String filter;
+
+	boolean notified = false;
+	Object context;
+
+	ConnectionNotifierImpl(String scheme, String url, int mode, boolean timeouts, String filter) {
+		list = new Vector(3, 5);
+		this.scheme = scheme;
+		this.url = url;
+		this.mode = mode;
+		this.timeouts = timeouts;
+		this.filter = filter;
+		SecurityManager sm = System.getSecurityManager();
+		if (sm != null)
+			context = System.getSecurityManager().getSecurityContext();
+	}
+
+	public void addConnectionListener(ConnectionListener l) {
+		long timeStart = 0;
+		if (ConnectorServiceImpl.hasDebug) {
+			ConnectorServiceImpl.debug(16050, l.getClass().getName(), null);
+			timeStart = System.currentTimeMillis();
+		}
+		try {
+			synchronized (list) {
+				if (!notified) {
+					if (!list.contains(l))
+						list.addElement(l);
+					return;
+				}
+			}
+			Connection c = ConnectorServiceImpl.getConnection(filter, url, mode, timeouts, false);
+			if (c != null)
+				l.notify(url, ConnectionListener.CONNECTION_CREATED, c);
+		} catch (Exception exc) {
+		} finally {
+			if (ConnectorServiceImpl.hasDebug) {
+				ConnectorServiceImpl.debug(16051, String.valueOf(System.currentTimeMillis() - timeStart), null);
+			}
+		}
+	}
+
+	public void removeConnectionListener(ConnectionListener l) {
+		if (ConnectorServiceImpl.hasDebug) {
+			ConnectorServiceImpl.debug(16052, l.getClass().getName(), null);
+		}
+		list.removeElement(l);
+	}
+
+	boolean hasListeners() {
+		return !list.isEmpty();
+	}
+
+	void notifyCreated(Connection conn) {
+		notify(ConnectionListener.CONNECTION_CREATED, conn);
+	}
+
+	private void notify(int eventType, Connection conn) {
+		if (eventType != ConnectionListener.CONNECTION_CREATED && eventType != ConnectionListener.CONNECTION_CLOSED) {
+			return;
+		}
+
+		synchronized (list) {
+			if (notified)
+				return;
+			notified = true;
+		}
+		ConnectionFactoryListener.removeConnectionNotifier(url);
+		for (Enumeration en = list.elements(); en.hasMoreElements();) {
+			ConnectionListener l = (ConnectionListener) en.nextElement();
+			l.notify(url, eventType, conn);
+		}
+	}
+
+	public void close() throws IOException {
+		if (ConnectorServiceImpl.hasDebug) {
+			ConnectorServiceImpl.debug(16053, url, null);
+		}
+		synchronized (list) {
+			if (notified)
+				return;
+			notified = true;
+		}
+		ConnectionFactoryListener.removeConnectionNotifier(url);
+	}
+}
diff --git a/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectorServiceImpl.java b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectorServiceImpl.java
new file mode 100644
index 0000000..e9217f9
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectorServiceImpl.java
@@ -0,0 +1,401 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.io.impl;
+
+import java.io.*;
+import javax.microedition.io.*;
+import org.eclipse.equinox.internal.util.ref.Log;
+import org.osgi.framework.*;
+import org.osgi.service.io.ConnectionFactory;
+import org.osgi.service.io.ConnectorService;
+
+/**
+ * ConnectorService implementation.
+ * 
+ * @author Pavlin Dobrev
+ * @version 1.0
+ */
+
+public class ConnectorServiceImpl implements ConnectorService {
+	static BundleContext bc;
+	ServiceRegistration reg;
+	ConnectionFactoryListener listener;
+
+	static boolean enableNotification = Activator.getBoolean("eclipse.io.enable.notification");
+	public static boolean hasDebug;
+	private static Log log;
+
+	public ConnectorServiceImpl(BundleContext bc, Log log) {
+		ConnectorServiceImpl.log = log;
+		ConnectorServiceImpl.hasDebug = log.getDebug();
+		init(bc);
+	}
+
+	public static void debug(int id, String message, Throwable t) {
+		log.debug(0x1200, id, message, t, false);
+	}
+
+	public ConnectorServiceImpl(BundleContext bc) {
+		init(bc);
+	}
+
+	private void init(BundleContext bc) {
+		ConnectorServiceImpl.bc = bc;
+
+		if (enableNotification) {
+			listener = new ConnectionFactoryListener(bc);
+		}
+
+		reg = bc.registerService(ConnectorService.class.getName(), this, null);
+	}
+
+	public void close() {
+		reg.unregister();
+
+		if (listener != null) {
+			listener.close();
+		}
+	}
+
+	public Connection open(String uri) throws IOException {
+		return open(uri, READ_WRITE);
+	}
+
+	public Connection open(String uri, int mode) throws IOException {
+		return open(uri, mode, false);
+	}
+
+	static char[] chars = {'~', '='};
+
+	public Connection open(String uri, int mode, boolean timeouts) throws IOException {
+		long timeStart = 0;
+		if (hasDebug) {
+			debug(16001, uri + ", " + (mode == READ_WRITE ? "READ_WRITE" : (mode == READ) ? "READ" : "WRITE"), null);
+			timeStart = System.currentTimeMillis();
+		}
+		try {
+			if (uri == null) {
+				throw new IllegalArgumentException("URL cannot be NULL!");
+			}
+
+			int sPos = uri.indexOf(":");
+
+			if (sPos < 1) { // scheme must be at least with 1 symbol
+				throw new IllegalArgumentException("Does not have scheme");
+			}
+
+			String scheme = uri.substring(0, sPos);
+			StringBuffer filter = new StringBuffer(scheme.length() + 13);
+			filter.append('(');
+			filter.append(ConnectionFactory.IO_SCHEME);
+			filter.append(chars);
+			filter.append(scheme);
+			filter.append(')');
+
+			int count = 0;
+			if (listener != null)
+				count = ConnectionFactoryListener.count;
+			Connection c = getConnection(filter.toString(), uri, mode, timeouts, true);
+
+			if (c == null && listener != null)
+				c = ConnectionFactoryListener.getConnectionNotifier(scheme, uri, mode, timeouts, filter.toString(), count);
+			if (c == null)
+				throw new ConnectionNotFoundException("Failed to create connection " + uri);
+			return c;
+		} finally {
+			if (hasDebug) {
+				debug(16002, String.valueOf(System.currentTimeMillis() - timeStart), null);
+			}
+		}
+	}
+
+	static protected Connection getConnection(String filter, String uri, int mode, boolean timeouts, boolean connector) throws IOException {
+		ServiceReference[] cfRefs = null;
+		Connection ret = null;
+		try {
+			cfRefs = bc.getServiceReferences(ConnectionFactory.class.getName(), filter);
+		} catch (InvalidSyntaxException ex) {
+		}
+
+		if (cfRefs != null) {
+			sort(cfRefs, 0, cfRefs.length);
+		}
+
+		IOException ioExc = null;
+		boolean not_found = false;
+		if (cfRefs != null)
+			for (int i = 0; i < cfRefs.length; i++) {
+				ConnectionFactory prov = (ConnectionFactory) bc.getService(cfRefs[i]);
+				if (prov != null)
+					try {
+						not_found = true;
+						ret = prov.createConnection(uri, mode, timeouts);
+					} catch (IOException e) {
+						if (hasDebug) {
+							debug(16003, prov.getClass().getName(), e);
+						}
+						if (ioExc == null)
+							ioExc = e;
+					} finally {
+						if (ret == null)
+							bc.ungetService(cfRefs[i]);
+						else {
+							if (hasDebug) {
+								debug(16004, prov.getClass().getName(), null);
+							}
+							return ret;
+						}
+					}
+			}
+
+		if (connector)
+			try {
+				ret = Connector.open(uri, mode, timeouts);
+			} catch (ConnectionNotFoundException ignore) { // returns null ->
+				// ConnectionNotifier
+				// is created
+				debug(16014, null, ignore);
+			} finally {
+				if (ret == null) {
+					if (ioExc != null)
+						throw ioExc;
+					if (not_found)
+						throw new ConnectionNotFoundException("Failed to create connection " + uri);
+
+				} else {
+					if (hasDebug) {
+						debug(16005, null, null);
+					}
+				}
+			}
+		return ret;
+	}
+
+	private static void sort(ServiceReference[] array, int start, int end) {
+		int middle = (start + end) / 2;
+		if (start + 1 < middle)
+			sort(array, start, middle);
+		if (middle + 1 < end)
+			sort(array, middle, end);
+		if (start + 1 >= end)
+			return; // this case can only happen when this method is called by
+		// the user
+
+		if (getRanking(array[middle - 1]) == getRanking(array[middle])) {
+			if (getServiceID(array[middle - 1]) < getServiceID(array[middle])) {
+				return;
+			}
+		} else if (getRanking(array[middle - 1]) >= getRanking(array[middle])) {
+			return;
+		}
+
+		if (start + 2 == end) {
+			ServiceReference temp = array[start];
+			array[start] = array[middle];
+			array[middle] = temp;
+			return;
+		}
+		int i1 = start, i2 = middle, i3 = 0;
+		Object[] merge = new Object[end - start];
+		while (i1 < middle && i2 < end) {
+			if (getRanking(array[i1]) == getRanking(array[i2])) {
+				merge[i3++] = getServiceID(array[i1]) < getServiceID(array[i2]) ? array[i1++] : array[i2++];
+			} else {
+				merge[i3++] = getRanking(array[i1]) >= getRanking(array[i2]) ? array[i1++] : array[i2++];
+			}
+		}
+		if (i1 < middle)
+			System.arraycopy(array, i1, merge, i3, middle - i1);
+		System.arraycopy(merge, 0, array, start, i2 - start);
+	}
+
+	private static int getRanking(ServiceReference ref) {
+		Object rank = ref.getProperty(Constants.SERVICE_RANKING);
+
+		if (rank == null || !(rank instanceof Integer)) {
+			return 0;
+		}
+
+		return ((Integer) rank).intValue();
+	}
+
+	private static long getServiceID(ServiceReference ref) {
+		Object sid = ref.getProperty(Constants.SERVICE_ID);
+
+		if (sid == null || !(sid instanceof Long)) {
+			return 0;
+		}
+
+		return ((Long) sid).intValue();
+	}
+
+	/**
+	 * Create and open an <tt>DataInputStream</tt> object for the specified
+	 * name.
+	 * 
+	 * @param name
+	 *            the URI for the connection.
+	 * @throws IOException
+	 *             if and I/O error occurs
+	 * @throws ConnectionNotFoundException
+	 *             if the <tt>Connection</tt> object can not be made or if no
+	 *             handler for the requested scheme can be found.
+	 * @throws IllegalArgumentException
+	 *             if the given uri is invalid
+	 * @return A <tt>DataInputStream</tt> to the given URI
+	 */
+	public DataInputStream openDataInputStream(String name) throws IOException {
+		long timeBegin = 0;
+		if (hasDebug) {
+			debug(16006, name, null);
+			timeBegin = System.currentTimeMillis();
+		}
+		try {
+			Connection conn = open(name, READ);
+
+			if (!(conn instanceof InputConnection)) {
+				try {
+					conn.close();
+				} catch (IOException e) {
+				}
+				throw new IOException("Connection does not implement InputConnection:" + conn.getClass());
+			}
+
+			return ((InputConnection) conn).openDataInputStream();
+		} finally {
+			if (hasDebug) {
+				debug(16007, String.valueOf(System.currentTimeMillis() - timeBegin), null);
+			}
+		}
+	}
+
+	/**
+	 * Create and open an <tt>DataOutputStream</tt> object for the specified
+	 * name.
+	 * 
+	 * @param name
+	 *            the URI for the connection.
+	 * @throws IOException
+	 *             if and I/O error occurs
+	 * @throws ConnectionNotFoundException
+	 *             if the <tt>Connection</tt> object can not be made or if no
+	 *             handler for the requested scheme can be found.
+	 * @throws IllegalArgumentException
+	 *             if the given uri is invalid
+	 * @return A <tt>DataOutputStream</tt> to the given URI
+	 */
+	public DataOutputStream openDataOutputStream(String name) throws IOException {
+		long timeBegin = 0;
+		if (hasDebug) {
+			debug(16008, name, null);
+		}
+		try {
+			Connection conn = open(name, WRITE);
+
+			if (!(conn instanceof OutputConnection)) {
+				try {
+					conn.close();
+				} catch (IOException e) {
+				}
+
+				throw new IOException("Connection does not implement OutputConnection:" + conn.getClass());
+			}
+
+			return ((OutputConnection) conn).openDataOutputStream();
+		} finally {
+			if (hasDebug) {
+				debug(16009, String.valueOf(System.currentTimeMillis() - timeBegin), null);
+			}
+		}
+	}
+
+	/**
+	 * Create and open an <tt>InputStream</tt> object for the specified name.
+	 * 
+	 * 
+	 * @param name
+	 *            the URI for the connection.
+	 * @throws IOException
+	 *             if and I/O error occurs
+	 * @throws ConnectionNotFoundException
+	 *             if the <tt>Connection</tt> object can not be made or if no
+	 *             handler for the requested scheme can be found.
+	 * @throws IllegalArgumentException
+	 *             if the given uri is invalid
+	 * @return A <tt>InputStream</tt> to the given URI
+	 */
+	public InputStream openInputStream(String name) throws IOException {
+		long timeBegin = 0;
+		if (hasDebug) {
+			debug(16010, name, null);
+			timeBegin = System.currentTimeMillis();
+		}
+		try {
+			Connection conn = open(name, READ);
+
+			if (!(conn instanceof InputConnection)) {
+				try {
+					conn.close();
+				} catch (IOException e) {
+				}
+
+				throw new IOException("Connection does not implement InputConnection:" + conn.getClass());
+			}
+
+			return ((InputConnection) conn).openInputStream();
+		} finally {
+			if (hasDebug) {
+				debug(16011, String.valueOf(System.currentTimeMillis() - timeBegin), null);
+			}
+		}
+	}
+
+	/**
+	 * Create and open an <tt>OutputStream</tt> object for the specified name.
+	 * 
+	 * @param name
+	 *            the URI for the connection.
+	 * @throws IOException
+	 *             if and I/O error occurs
+	 * @throws ConnectionNotFoundException
+	 *             if the <tt>Connection</tt> object can not be made or if no
+	 *             handler for the requested scheme can be found.
+	 * @throws IllegalArgumentException
+	 *             if the given uri is invalid
+	 * @return A <tt>OutputStream</tt> to the given URI
+	 */
+	public OutputStream openOutputStream(String name) throws IOException {
+		long timeBegin = 0;
+		if (hasDebug) {
+			debug(16012, name, null);
+			timeBegin = System.currentTimeMillis();
+		}
+		try {
+			Connection conn = open(name, WRITE);
+
+			if (!(conn instanceof OutputConnection)) {
+				try {
+					conn.close();
+				} catch (IOException e) {
+				}
+
+				throw new IOException("Connection does not implement OutputConnection:" + conn.getClass());
+			}
+
+			return ((OutputConnection) conn).openOutputStream();
+		} finally {
+			if (hasDebug) {
+				debug(16013, String.valueOf(System.currentTimeMillis() - timeBegin), null);
+			}
+		}
+	}
+}
diff --git a/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/PrivilegedRunner.java b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/PrivilegedRunner.java
new file mode 100644
index 0000000..485724e
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/PrivilegedRunner.java
@@ -0,0 +1,194 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.io.impl;
+
+import java.security.*;
+import org.eclipse.equinox.internal.util.pool.ObjectCreator;
+import org.eclipse.equinox.internal.util.pool.ObjectPool;
+
+/**
+ * @author Pavlin Dobrev
+ * @version 1.0
+ */
+
+public final class PrivilegedRunner implements ObjectCreator {
+
+	private static ObjectPool POOL;
+
+	static {
+		try {
+			POOL = new ObjectPool(new PrivilegedRunner(), 5, 10);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/* prevent instantiations */
+	private PrivilegedRunner() {
+	}
+
+	/**
+	 * Same as the longer doPrivileged method, but fills in the first parameter
+	 * only. All other parameters are set to <code>null</code>.
+	 * 
+	 * @param dispatcher
+	 *            the dispatcher which should be called
+	 * @param type
+	 *            the type of the action - used in the dispatcher
+	 * @param arg1
+	 *            a parameter received by the dispatcher
+	 * @see #doPrivileged(PrivilegedDispatcher, int, Object, Object, Object,
+	 *      Object)
+	 * @return the object returned from the execution
+	 * @throws Exception
+	 *             if the dispatcher fails
+	 */
+	public static final Object doPrivileged(PrivilegedDispatcher dispatcher, int type, Object arg1) throws Exception {
+		return doPrivileged(null, dispatcher, type, arg1, null, null, null);
+	}
+
+	/**
+	 * Performs a privileged action. The method calls the dispatcher inside the
+	 * privileged call passing it the same parameters that were passed to this
+	 * method.
+	 * 
+	 * @param dispatcher
+	 *            the dispatcher which should be called
+	 * @param type
+	 *            the type of the action - used in the dispatcher
+	 * @param arg1
+	 *            a parameter received by the dispatcher
+	 * @param arg2
+	 *            a parameter received by the dispatcher
+	 * @param arg3
+	 *            a parameter received by the dispatcher
+	 * @param arg4
+	 *            a parameter received by the dispatcher
+	 * @return the object returned from the execution
+	 * @throws Exception
+	 *             if the dispatcher fails
+	 */
+	public static final Object doPrivileged(PrivilegedDispatcher dispatcher, int type, Object arg1, Object arg2, Object arg3, Object arg4) throws Exception {
+		return doPrivileged(null, dispatcher, type, arg1, arg2, arg3, arg4);
+	}
+
+	/**
+	 * Performs a privileged action. The method calls the dispatcher inside the
+	 * privileged call passing it the same parameters that were passed to this
+	 * method.
+	 * 
+	 * @param context
+	 *            the access context
+	 * @param dispatcher
+	 *            the dispatcher which should be called
+	 * @param type
+	 *            the type of the action - used in the dispatcher
+	 * @param arg1
+	 *            a parameter received by the dispatcher
+	 * @param arg2
+	 *            a parameter received by the dispatcher
+	 * @param arg3
+	 *            a parameter received by the dispatcher
+	 * @param arg4
+	 *            a parameter received by the dispatcher
+	 * @return the object returned from the execution
+	 * @throws Exception
+	 *             if the dispatcher fails
+	 */
+	public static final Object doPrivileged(Object context, PrivilegedDispatcher dispatcher, int type, Object arg1, Object arg2, Object arg3, Object arg4) throws Exception {
+		/* init runner */
+		PA runner = (PA) POOL.getObject();
+		runner.dispatcher = dispatcher;
+		runner.type = type;
+		runner.arg1 = arg1;
+		runner.arg2 = arg2;
+		runner.arg3 = arg3;
+		runner.arg4 = arg4;
+
+		try {
+			if (System.getSecurityManager() != null) {
+				/*
+				 * if security manager is set - then privileged execution is
+				 * started
+				 */
+				return (context != null)
+				// 
+				? AccessController.doPrivileged(runner, (AccessControlContext) context)
+						: AccessController.doPrivileged(runner);
+			}
+			/* if no security manager is set - simply run the action */
+			return runner.run();
+		} catch (PrivilegedActionException e) {
+			throw e.getException();
+		} finally {
+			runner.recycle();
+			POOL.releaseObject(runner);
+		}
+	}
+
+	/**
+	 * @see org.eclipse.equinox.internal.util.pool.ObjectCreator#getInstance()
+	 */
+	public Object getInstance() throws Exception {
+		return new PA();
+	}
+
+	/**
+	 * This dispatcher is the handler that is called within the privileged call.
+	 * It should dispatch and perform the requested actions depending on the
+	 * action type and using the given job parameters.
+	 * 
+	 * @author Valentin Valchev
+	 * @version $Revision: 1.3 $
+	 */
+	public static interface PrivilegedDispatcher {
+
+		/**
+		 * @param type
+		 *            the type of the action
+		 * @param arg1
+		 *            parameter 1 - depends on the action type
+		 * @param arg2
+		 *            parameter 2 - depends on the action type
+		 * @param arg3
+		 *            parameter 3 - depends on the action type
+		 * @param arg4
+		 *            parameter 4 - depends on the action type
+		 * @return an object which should be returned from the
+		 *         PrivilegedAction.run() method
+		 * @throws Exception
+		 *             on error
+		 */
+		Object dispatchPrivileged(int type, Object arg1, Object arg2, Object arg3, Object arg4) throws Exception;
+	}
+
+	static class PA implements PrivilegedExceptionAction {
+
+		int type;
+		Object arg1, arg2, arg3, arg4;
+		PrivilegedDispatcher dispatcher;
+
+		void recycle() {
+			dispatcher = null;
+			type = -1;
+			arg1 = arg2 = arg3 = arg4 = null;
+		}
+
+		/**
+		 * @see java.security.PrivilegedExceptionAction#run()
+		 */
+		public Object run() throws Exception {
+			return dispatcher.dispatchPrivileged(type, arg1, arg2, arg3, arg4);
+		}
+	}
+
+}
diff --git a/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/TracerConfigConnector.java b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/TracerConfigConnector.java
new file mode 100644
index 0000000..caa5445
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/TracerConfigConnector.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.io.impl;
+
+import org.eclipse.equinox.internal.util.hash.HashIntObjNS;
+
+/**
+ * @author Lubomir Mitev
+ * @author Pavlin Dobrev
+ * @version 1.0
+ */
+public class TracerConfigConnector {
+
+	public static HashIntObjNS getMap() {
+		/*
+		 * increase size if you add more dumps in the table - at this moment the
+		 * entries in table are 159
+		 */
+		HashIntObjNS map = new HashIntObjNS(28);// (int)(28 * 0.7) = 19, 18
+		constructMap(map);
+		return map;
+	}
+
+	public static void constructMap(HashIntObjNS map) {
+		map.put(-0x1200, "Connector Service");
+		map.put(16001, "[BEGIN - open connection] The values of the URI and the access mode are");
+		map.put(16002, "[END - open connection] took");
+		map.put(16003, "IOException when connection is created from ConnectionFactory");
+		map.put(16004, "Connection is created from ConnectionFactory");
+		map.put(16005, "Connection is created from javax.microedition.io.Connector");
+		map.put(16006, "[BEGIN - open DataInputStream] The URI is");
+		map.put(16007, "[END - open DataInputStream] took");
+		map.put(16008, "[BEGIN - open DataOutputStream] The URI is");
+		map.put(16009, "[END - open DataOutputStream] took");
+		map.put(16010, "[BEGIN - open InputStream] The URI is");
+		map.put(16011, "[END - open InputStream] took");
+		map.put(16012, "[BEGIN - open OutputStream] The URI is");
+		map.put(16013, "[END - open OutputStream] took");
+		map.put(16014, "ConnectionNotFoundException thrown from system javax.microedition.io.Connector");
+		map.put(16050, "[BEGIN - add ConnectionListener] The ConnectionListener is");
+		map.put(16051, "[END - add ConnectionListener] took");
+		map.put(16052, "Remove ConnectionListener");
+		map.put(16053, "Close connection. The URI is");
+	}
+}
diff --git a/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/package.html b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/package.html
new file mode 100644
index 0000000..32d3d84
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/package.html
@@ -0,0 +1,10 @@
+<!-- $Header: /cvsroot/eclipse/equinox-incubator/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/package.html,v 1.1 2007/11/30 13:45:13 pdobrev Exp $ -->
+<BODY>
+<P>The OSGi IO Provider Specification Version 1.0.
+<p>Bundles wishing to use this package must list the package
+in the <TT>Import-Package</TT> header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.io; specification-version=1.0
+</pre>
+</BODY>
diff --git a/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/AbstractConnectionNotifier.java b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/AbstractConnectionNotifier.java
new file mode 100644
index 0000000..5cf2968
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/AbstractConnectionNotifier.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.io.util;
+
+import java.util.*;
+import javax.microedition.io.Connection;
+import org.eclipse.equinox.internal.io.ConnectionListener;
+import org.eclipse.equinox.internal.io.ConnectionNotifier;
+
+/**
+ * @author Pavlin Dobrev
+ * @version 1.0
+ */
+
+public abstract class AbstractConnectionNotifier extends Dictionary implements ConnectionNotifier {
+	private Vector list;
+	private Hashtable info;
+
+	// the local address to which the connection is bound
+
+	public final static String LOCAL_ADDRESS = "local_address";
+
+	// the local port to which the connection is bound.
+
+	public final static String LOCAL_PORT = "local_port";
+
+	// the remote address to which the connection is connected.
+
+	public final static String ADDRESS = "address";
+
+	// the remote port to which the connection is connected.
+
+	public final static String PORT = "port";
+
+	// the encoder used
+
+	public final static String ENCODER = "enc";
+
+	public static final String SO_TIMEOUT = "timeout";
+
+	protected AbstractConnectionNotifier() {
+		list = new Vector(2, 3);
+		info = new Hashtable(30);
+	}
+
+	// ConnectionNotifier methods
+	public void addConnectionListener(ConnectionListener l) {
+		if (!list.contains(l)) {
+			list.addElement(l);
+		}
+	}
+
+	public void removeConnectionListener(ConnectionListener l) {
+		list.removeElement(l);
+	}
+
+	// returns the url of connection
+	protected abstract String getURL();
+
+	// the connection to which this ConnectionLife is bound to
+	protected abstract Connection getConnection();
+
+	protected void notifyClosed() {
+		for (Enumeration en = list.elements(); en.hasMoreElements();) {
+			ConnectionListener l = (ConnectionListener) en.nextElement();
+			l.notify(getURL(), ConnectionListener.CONNECTION_CLOSED, getConnection());
+		}
+	}
+
+	protected void setInfo(String key, Object value) {
+		if (key != null && value != null) {
+			info.put(key, value);
+		}
+	}
+
+	public int size() {
+		return info.size();
+	}
+
+	public boolean isEmpty() {
+		return info.isEmpty();
+	}
+
+	public Enumeration keys() {
+		return info.keys();
+	}
+
+	public Enumeration elements() {
+		return info.elements();
+	}
+
+	public Object get(Object key) {
+		return info.get(key);
+	}
+
+	public Object remove(Object key) {
+		return info.remove(key);
+	}
+
+}
diff --git a/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/AbstractDatagram.java b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/AbstractDatagram.java
new file mode 100644
index 0000000..4f81da4
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/AbstractDatagram.java
@@ -0,0 +1,434 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.io.util;
+
+import java.io.*;
+import javax.microedition.io.Datagram;
+
+/**
+ * @author Pavlin Dobrev
+ * @version 1.0
+ */
+
+public abstract class AbstractDatagram implements Datagram {
+	protected byte[] data;
+	private int pos;
+	private int count;
+
+	public AbstractDatagram(int size) {
+		this(new byte[size]);
+	}
+
+	public AbstractDatagram(byte[] data) {
+		this.data = data;
+		pos = 0;
+		count = data.length;
+	}
+
+	public AbstractDatagram(byte[] data, int start, int length) {
+		if (start > data.length || (start + length) > data.length) {
+			throw new IllegalArgumentException("Start possition or length is greater than data length");
+		}
+
+		this.data = data;
+		pos = start;
+		count = length;
+	}
+
+	public synchronized byte[] getData() {
+		return data;
+	}
+
+	public int getLength() {
+		return count;
+	}
+
+	public int getOffset() {
+		return pos;
+	}
+
+	public void setLength(int len) {
+		if (len < 0 || len > data.length) {
+			throw new IllegalArgumentException("Given length is negative or greater than buffer size");
+		}
+
+		count = len;
+	}
+
+	public synchronized void setData(byte[] buffer, int offset, int len) {
+		if (offset > buffer.length || (offset + len) > buffer.length) {
+			throw new IllegalArgumentException();
+		}
+
+		data = buffer;
+		pos = offset;
+		count = len;
+	}
+
+	public void reset() {
+		pos = 0;
+		count = 0;
+	}
+
+	public int read() {
+		return (pos < count) ? (data[pos++] & 0xff) : -1;
+	}
+
+	public void readFully(byte b[]) throws IOException {
+		readFully(b, 0, b.length);
+	}
+
+	public void readFully(byte b[], int off, int len) throws IOException {
+		if (len < 0) {
+			throw new IndexOutOfBoundsException();
+		}
+
+		int n = 0;
+
+		while (n < len) {
+			int ch = read();
+
+			if (ch < 0) {
+				throw new EOFException();
+			}
+
+			b[off + (n++)] = (byte) ch;
+		}
+	}
+
+	public int skipBytes(int n) throws IOException {
+		if (pos + n > count) {
+			n = count - pos;
+		}
+
+		if (n < 0) {
+			return 0;
+		}
+
+		pos += n;
+		return n;
+	}
+
+	public boolean readBoolean() throws IOException {
+		int ch = read();
+
+		if (ch < 0) {
+			throw new EOFException();
+		}
+
+		return (ch != 0);
+	}
+
+	public byte readByte() throws IOException {
+		int ch = read();
+
+		if (ch < 0) {
+			throw new EOFException();
+		}
+
+		return (byte) (ch);
+	}
+
+	public int readUnsignedByte() throws IOException {
+		int ch = read();
+
+		if (ch < 0) {
+			throw new EOFException();
+		}
+
+		return ch;
+	}
+
+	public short readShort() throws IOException {
+		int ch1 = read();
+		int ch2 = read();
+
+		if ((ch1 | ch2) < 0) {
+			throw new EOFException();
+		}
+
+		return (short) ((ch1 << 8) + (ch2 << 0));
+	}
+
+	public int readUnsignedShort() throws IOException {
+		int ch1 = read();
+		int ch2 = read();
+
+		if ((ch1 | ch2) < 0) {
+			throw new EOFException();
+		}
+
+		return (ch1 << 8) + (ch2 << 0);
+	}
+
+	public char readChar() throws IOException {
+		int ch1 = read();
+		int ch2 = read();
+
+		if ((ch1 | ch2) < 0) {
+			throw new EOFException();
+		}
+
+		return (char) ((ch1 << 8) + (ch2 << 0));
+	}
+
+	public int readInt() throws IOException {
+		int ch1 = read();
+		int ch2 = read();
+		int ch3 = read();
+		int ch4 = read();
+
+		if ((ch1 | ch2 | ch3 | ch4) < 0) {
+			throw new EOFException();
+		}
+
+		return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
+	}
+
+	public long readLong() throws IOException {
+		return ((long) (readInt()) << 32) + (readInt() & 0xFFFFFFFFL);
+	}
+
+	public float readFloat() throws IOException {
+		return Float.intBitsToFloat(readInt());
+	}
+
+	public double readDouble() throws IOException {
+		return Double.longBitsToDouble(readLong());
+	}
+
+	public String readLine() throws IOException {
+		throw new RuntimeException("Function not supported");
+	}
+
+	public String readUTF() throws IOException {
+		return readUTF(this);
+	}
+
+	public final static String readUTF(DataInput in) throws IOException {
+		int utflen = in.readUnsignedShort();
+		StringBuffer str = new StringBuffer(utflen);
+		byte bytearr[] = new byte[utflen];
+		int c, char2, char3;
+		int count = 0;
+
+		in.readFully(bytearr, 0, utflen);
+
+		while (count < utflen) {
+			c = bytearr[count] & 0xff;
+
+			switch (c >> 4) {
+				case 0 :
+				case 1 :
+				case 2 :
+				case 3 :
+				case 4 :
+				case 5 :
+				case 6 :
+				case 7 :
+					/* 0xxxxxxx */
+					count++;
+					str.append((char) c);
+					break;
+
+				case 12 :
+				case 13 :
+					/* 110x xxxx 10xx xxxx */
+					count += 2;
+
+					if (count > utflen) {
+						throw new UTFDataFormatException();
+					}
+
+					char2 = bytearr[count - 1];
+
+					if ((char2 & 0xC0) != 0x80) {
+						throw new UTFDataFormatException();
+					}
+
+					str.append((char) (((c & 0x1F) << 6) | (char2 & 0x3F)));
+					break;
+
+				case 14 :
+					/* 1110 xxxx 10xx xxxx 10xx xxxx */
+					count += 3;
+
+					if (count > utflen) {
+						throw new UTFDataFormatException();
+					}
+
+					char2 = bytearr[count - 2];
+					char3 = bytearr[count - 1];
+
+					if (((char2 & 0xC0) != 0x80) || ((char3 & 0xC0) != 0x80)) {
+						throw new UTFDataFormatException();
+					}
+
+					str.append((char) (((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)));
+					break;
+
+				default :
+					/* 10xx xxxx, 1111 xxxx */
+					throw new UTFDataFormatException();
+			}
+		}
+
+		// The number of chars produced may be less than utflen
+		return str.toString();
+	}
+
+	// --------------------------------------------------------
+	public void write(int b) throws IOException {
+
+		if (pos < data.length) {
+			data[pos++] = (byte) b;
+		} else {
+			byte buf[] = new byte[data.length + 1];
+			System.arraycopy(data, 0, buf, 0, count);
+			data = buf;
+			data[pos++] = (byte) b;
+			count++;
+		}
+	}
+
+	public void write(byte b[]) throws IOException {
+		write(b, 0, b.length);
+	}
+
+	public void write(byte b[], int off, int len) throws IOException {
+		if (b == null) {
+			throw new NullPointerException();
+		} else if ((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0)) {
+			throw new IndexOutOfBoundsException();
+		} else if (len == 0) {
+			return;
+		}
+
+		for (int i = 0; i < len; i++) {
+			write(b[off + i]);
+		}
+	}
+
+	public void writeBoolean(boolean v) throws IOException {
+		write(v ? 1 : 0);
+	}
+
+	public void writeByte(int v) throws IOException {
+		write(v);
+	}
+
+	public void writeShort(int v) throws IOException {
+		write((v >>> 8) & 0xFF);
+		write((v >>> 0) & 0xFF);
+	}
+
+	public void writeChar(int v) throws IOException {
+		write((v >>> 8) & 0xFF);
+		write((v >>> 0) & 0xFF);
+	}
+
+	public void writeInt(int v) throws IOException {
+		write((v >>> 24) & 0xFF);
+		write((v >>> 16) & 0xFF);
+		write((v >>> 8) & 0xFF);
+		write((v >>> 0) & 0xFF);
+	}
+
+	public void writeLong(long v) throws IOException {
+		write((int) (v >>> 56) & 0xFF);
+		write((int) (v >>> 48) & 0xFF);
+		write((int) (v >>> 40) & 0xFF);
+		write((int) (v >>> 32) & 0xFF);
+		write((int) (v >>> 24) & 0xFF);
+		write((int) (v >>> 16) & 0xFF);
+		write((int) (v >>> 8) & 0xFF);
+		write((int) (v >>> 0) & 0xFF);
+	}
+
+	public void writeFloat(float v) throws IOException {
+		writeInt(Float.floatToIntBits(v));
+	}
+
+	public void writeDouble(double v) throws IOException {
+		writeLong(Double.doubleToLongBits(v));
+	}
+
+	public void writeBytes(String s) throws IOException {
+		int len = s.length();
+
+		for (int i = 0; i < len; i++) {
+			write((byte) s.charAt(i));
+		}
+	}
+
+	public void writeChars(String s) throws IOException {
+		int len = s.length();
+
+		for (int i = 0; i < len; i++) {
+			int v = s.charAt(i);
+			write((v >>> 8) & 0xFF);
+			write((v >>> 0) & 0xFF);
+		}
+	}
+
+	public void writeUTF(String str) throws IOException {
+		writeUTF(str, this);
+	}
+
+	static int writeUTF(String str, DataOutput out) throws IOException {
+		int strlen = str.length();
+		int utflen = 0;
+		char[] charr = new char[strlen];
+		int c, count = 0;
+
+		str.getChars(0, strlen, charr, 0);
+
+		for (int i = 0; i < strlen; i++) {
+			c = charr[i];
+
+			if ((c >= 0x0001) && (c <= 0x007F)) {
+				utflen++;
+			} else if (c > 0x07FF) {
+				utflen += 3;
+			} else {
+				utflen += 2;
+			}
+		}
+
+		if (utflen > 65535) {
+			throw new UTFDataFormatException();
+		}
+
+		byte[] bytearr = new byte[utflen + 2];
+		bytearr[count++] = (byte) ((utflen >>> 8) & 0xFF);
+		bytearr[count++] = (byte) ((utflen >>> 0) & 0xFF);
+
+		for (int i = 0; i < strlen; i++) {
+			c = charr[i];
+
+			if ((c >= 0x0001) && (c <= 0x007F)) {
+				bytearr[count++] = (byte) c;
+			} else if (c > 0x07FF) {
+				bytearr[count++] = (byte) (0xE0 | ((c >> 12) & 0x0F));
+				bytearr[count++] = (byte) (0x80 | ((c >> 6) & 0x3F));
+				bytearr[count++] = (byte) (0x80 | ((c >> 0) & 0x3F));
+			} else {
+				bytearr[count++] = (byte) (0xC0 | ((c >> 6) & 0x1F));
+				bytearr[count++] = (byte) (0x80 | ((c >> 0) & 0x3F));
+			}
+		}
+
+		out.write(bytearr);
+		return utflen + 2;
+	}
+
+}
diff --git a/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/URI.java b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/URI.java
new file mode 100644
index 0000000..3cfdfd7
--- /dev/null
+++ b/bundles/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/URI.java
@@ -0,0 +1,347 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.io.util;
+
+import java.util.Hashtable;
+import java.util.Enumeration;
+
+/**
+ * @author Pavlin Dobrev
+ * @version 1.0
+ */
+
+public class URI {
+
+	/*
+	 * <scheme>://<net_loc>/<path>;<params>?<query>#<fragment>
+	 */
+	private String scheme;
+	private String schemeSpec;
+	private String auth;
+	private String userInfo;
+	private String host;
+	private String port;
+	private String path;
+	private String query;
+	private String fragment;
+	private boolean isOpaque;
+
+	private Hashtable params;
+
+	public URI(String uri) {
+		if (uri == null) {
+			throw new IllegalArgumentException("URL cannot be NULL!");
+		}
+
+		byte[] buf = uri.getBytes();
+		int sPos = indexOf(buf, ':', 0);
+
+		scheme = trim(buf, 0, sPos);
+
+		sPos++;
+
+		int ePos = indexOf(buf, '#', sPos);
+
+		if (ePos != -1) {
+			fragment = trim(buf, ePos + 1, buf.length);
+		} else {
+			ePos = buf.length;
+		}
+
+		schemeSpec = trim(buf, sPos, ePos);
+
+		int pos = indexOf(buf, '?', sPos, ePos);
+
+		if (pos != -1) {
+			query = trim(buf, pos + 1, ePos);
+			ePos = pos;
+		}
+
+		pos = indexOf(buf, ';', sPos, ePos);
+
+		if (pos != -1) {
+			parseParams(buf, pos + 1, ePos);
+			ePos = pos;
+		}
+
+		isOpaque = true;
+
+		if (buf[sPos] == '/' && buf[sPos + 1] == '/') {
+			sPos += 2;
+			isOpaque = false;
+		}
+
+		pos = indexOf(buf, '/', sPos, ePos);
+
+		if (pos != -1) {
+			path = trim(buf, pos, ePos);
+			ePos = pos;
+		}
+
+		auth = trim(buf, sPos, ePos);
+
+		if (!isOpaque) {
+			pos = indexOf(buf, '@', sPos);
+
+			if (pos != -1) {
+				userInfo = trim(buf, sPos, pos);
+				sPos = pos + 1;
+			}
+
+			pos = indexOf(buf, ']', sPos);
+			if (pos != -1) {
+				host = trim(buf, sPos, pos + 1);
+				sPos = pos + 1;
+			}
+
+			pos = indexOf(buf, ':', sPos);
+
+			if (pos != -1) {
+				port = trim(buf, pos + 1, ePos);
+				ePos = pos;
+			}
+			if (host == null) {
+				host = trim(buf, sPos, ePos);
+			}
+		}
+	}
+
+	public String getScheme() {
+		return scheme;
+	}
+
+	public String getHost() {
+		return host;
+	}
+
+	public String getPort() {
+		return port;
+	}
+
+	public int getPortNumber() {
+		return port == null ? -1 : Integer.parseInt(port);
+	}
+
+	public String getFragment() {
+		return fragment;
+	}
+
+	public String getQuery() {
+		return query;
+	}
+
+	public String getUserInfo() {
+		return userInfo;
+	}
+
+	public String getPath() {
+		return path;
+	}
+
+	public String getSchemeSpecificPart() {
+		return schemeSpec;
+	}
+
+	public String getAuthority() {
+		return auth;
+	}
+
+	public boolean isOpaque() {
+		return isOpaque;
+	}
+
+	public String get(String param) {
+		return params == null ? null : (String) params.get(param);
+	}
+
+	public String getParams() {
+		if (params == null || params.isEmpty()) {
+			return null;
+		}
+
+		StringBuffer sb = new StringBuffer();
+
+		for (Enumeration en = params.keys(); en.hasMoreElements();) {
+			String key = (String) en.nextElement();
+			sb.append(";");
+			sb.append(key);
+			sb.append("=");
+			sb.append(((String) params.get(key)));
+		}
+
+		if (sb.length() == 0) {
+			return null;
+		}
+
+		return sb.toString();
+	}
+
+	public static String getHost(String uri) {
+		if (uri == null) {
+			throw new IllegalArgumentException("URL cannot be NULL!");
+		}
+
+		int pos = uri.indexOf("://");
+
+		if (pos == -1) {
+			throw new IllegalArgumentException("Does not have scheme");
+		}
+
+		int sPos = pos + 3;
+
+		pos = uri.indexOf('@', sPos);
+		if (pos != -1) {
+			sPos = pos + 1;
+		}
+
+		int ePos = endOfHostPort(uri, sPos);
+
+		pos = uri.indexOf(']', sPos);
+		if (pos != -1) {
+			return uri.substring(sPos, pos + 1);
+		}
+
+		pos = uri.indexOf(':', sPos);
+
+		if (sPos != -1 && pos < ePos) {
+			return uri.substring(sPos, pos);
+		}
+
+		return uri.substring(sPos, ePos);
+	}
+
+	public static int getPort(String uri) {
+		if (uri == null) {
+			throw new IllegalArgumentException("URL cannot be NULL!");
+		}
+
+		int pos = uri.indexOf("://");
+
+		if (pos == -1) {
+			throw new IllegalArgumentException("Does not have scheme");
+		}
+
+		int sPos = pos + 3;
+
+		pos = uri.indexOf('@', sPos);
+		if (pos != -1) {
+			sPos = pos + 1;
+		}
+
+		pos = uri.indexOf(']', sPos);
+		if (pos != -1) {
+			sPos = pos + 1;
+		}
+
+		sPos = uri.indexOf(":", sPos);
+
+		if (sPos == -1) {
+			// return -1;
+			throw new IllegalArgumentException("Port is missing " + uri);
+		}
+
+		sPos++;
+
+		int ePos = endOfHostPort(uri, sPos);
+
+		return Integer.parseInt(uri.substring(sPos, ePos));
+	}
+
+	static int endOfHostPort(String str, int spos) {
+		int pos = str.indexOf("/", spos);
+		int tmp = str.indexOf(";", spos);
+
+		if (tmp != -1 && tmp < pos || pos == -1) {
+			pos = tmp;
+		}
+
+		if (pos != -1) {
+			return pos;
+		}
+
+		return str.length();
+	}
+
+	static int indexOf(byte[] ba, char b, int startPos) {
+		return indexOf(ba, b, startPos, ba.length);
+	}
+
+	static int indexOf(byte[] ba, char b, int sPos, int ePos) {
+		if (sPos > ba.length || sPos < 0 || ePos > ba.length || ePos < 0 || sPos >= ePos) {
+			return -1;// throw new IllegalArgumentException();
+		}
+
+		for (int i = sPos; i < ePos; i++) {
+			if (ba[i] == b) {
+				return i;
+			}
+		}
+
+		return -1;
+	}
+
+	static String trim(byte[] buf, int s, int e) {
+		if (s >= e) {
+			return null;
+		}
+
+		while (s < buf.length && s < e && buf[s] == ' ') {
+			s++;
+		}
+
+		while (e >= 0 && e > s && buf[e - 1] == ' ') {
+			e--;
+		}
+
+		if (s == e) {
+			return null;
+		}
+
+		return new String(buf, s, e - s);
+	}
+
+	private void parseParams(byte[] buf, int sPos, int ePos) {
+		int pos;
+
+		while (sPos < ePos && (pos = indexOf(buf, ';', sPos)) != -1) {
+			parseParam(buf, sPos, pos);
+			sPos = pos + 1;
+		}
+
+		if (sPos < ePos) {
+			parseParam(buf, sPos, ePos);
+		}
+	}
+
+	private void parseParam(byte[] buf, int sPos, int ePos) {
+		int rpos = indexOf(buf, '=', sPos, ePos);
+
+		if (rpos != -1) {
+			String key = trim(buf, sPos, rpos);
+
+			if (key == null) {
+				return;
+			}
+
+			String str = trim(buf, rpos + 1, ePos);
+
+			if (str != null) {
+				if (params == null) {
+					params = new Hashtable();
+				}
+
+				params.put(key, str);
+			}
+		}
+	}
+
+}
