diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/.classpath b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/.classpath
new file mode 100755
index 0000000..3e5654f
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/.classpath
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src">
+		<attributes>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/.project b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/.project
new file mode 100755
index 0000000..cda13e6
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.papyrus.cdo.benchmarks</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/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/.settings/org.eclipse.jdt.core.prefs b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/.settings/org.eclipse.jdt.core.prefs
new file mode 100755
index 0000000..e82ec2b
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,294 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+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_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+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_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=260
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=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=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=false
+org.eclipse.jdt.core.formatter.join_wrapped_lines=false
+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=260
+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=5
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/.settings/org.eclipse.jdt.ui.prefs b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/.settings/org.eclipse.jdt.ui.prefs
new file mode 100755
index 0000000..ce7d519
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,68 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=false
+cleanup.format_source_code=false
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=false
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup.use_type_arguments=false
+cleanup_profile=_Papyrus
+cleanup_settings_version=2
+eclipse.preferences.version=1
+formatter_profile=_Papyrus
+formatter_settings_version=12
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=java;javax;org;com;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * Constructor.\n *\n * ${tags}\n */</template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*****************************************************************************\n * Copyright (c) ${year} CEA LIST and others.\n * \n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License 2.0\n * which accompanies this distribution, and is available at\n * http\://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors\:\n *   CEA LIST - Initial API and implementation\n *   \n *****************************************************************************/\n</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @author ${user}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/**\n * ${see_to_overridden}\n *\n * ${tags}\n */</template><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${see_to_target}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/Benchmarks results.xlsx b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/Benchmarks results.xlsx
new file mode 100755
index 0000000..a891fae
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/Benchmarks results.xlsx
Binary files differ
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/META-INF/MANIFEST.MF b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..a9560d9
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/META-INF/MANIFEST.MF
@@ -0,0 +1,23 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus CDO Integration Perfo Tests
+Bundle-SymbolicName: org.eclipse.papyrus.cdo.benchmarks
+Bundle-Version: 1.0.0.qualifier
+Bundle-Vendor: Eclipse Modeling Project
+Automatic-Module-Name: org.eclipse.papyrus.cdo.perfo.tests
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.junit,
+ org.eclipse.gmf.runtime.notation;bundle-version="1.8.0",
+ org.eclipse.papyrus.infra.gmfdiag.style;bundle-version="1.0.0",
+ org.eclipse.papyrus.cdo.core.tests;bundle-version="1.2.0",
+ org.eclipse.papyrus.uml.tools;bundle-version="4.1.0",
+ org.eclipse.papyrus.uml.diagram.wizards;bundle-version="3.1.0",
+ org.eclipse.net4j.tcp,
+ org.eclipse.emf.transaction;bundle-version="1.9.1",
+ org.eclipse.papyrus.uml.service.types;bundle-version="4.1.0",
+ org.eclipse.uml2.uml;bundle-version="5.4.0",
+ org.eclipse.papyrus.uml.extensionpoints;bundle-version="1.3.0",
+ org.eclipse.papyrus.infra.types.core;bundle-version="4.0.0",
+ org.eclipse.papyrus.sysml14.service.types;bundle-version="1.3.0",
+ org.eclipse.papyrus.infra.architecture;bundle-version="2.0.0"
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/README b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/README
new file mode 100755
index 0000000..fe387e2
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/README
@@ -0,0 +1,8 @@
+This plugin has been created to get time creation using pure Papyrus and Papyrus on CDO.
+To execute them, you need to launch a CDO server on your computer, with the expected parameter
+user:Administrator
+Password: 0000
+host and port : localhost:2036
+repo name : PapyrusCDOSecuredRepository
+
+These tests have been developed on Eclipse 2018.09
\ No newline at end of file
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/about.html b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/about.html
new file mode 100755
index 0000000..997c5a2
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/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>November 30, 2017</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 2.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="https://www.eclipse.org/legal/epl-2.0/">https://www.eclipse.org/legal/epl-2.0/</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/build.properties b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/build.properties
new file mode 100755
index 0000000..34d2e4d
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/pom.xml b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/pom.xml
new file mode 100755
index 0000000..de7a816
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/pom.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	
+	<!-- Parent of this POM -->
+	<parent>
+		<groupId>org.eclipse.papyrus.cdo</groupId>
+		<artifactId>org.eclipse.papyrus.cdo-benchmarks</artifactId>
+		<version>1.2.0-SNAPSHOT</version>
+	</parent>
+	
+	<!-- Project POM -->
+	<artifactId>org.eclipse.papyrus.cdo.benchmarks</artifactId>
+	<version>1.0.0-SNAPSHOT</version>
+	<packaging>eclipse-plugin</packaging>
+</project>
\ No newline at end of file
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/AbstractModelCreation.java b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/AbstractModelCreation.java
new file mode 100755
index 0000000..a023352
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/AbstractModelCreation.java
@@ -0,0 +1,273 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.cdo.benchmarks.tests;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CompoundCommand;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.papyrus.infra.architecture.ArchitectureDescriptionUtils;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.resource.sasheditor.DiModel;
+import org.eclipse.papyrus.infra.core.sashwindows.di.service.IPageManager;
+import org.eclipse.papyrus.infra.core.services.ExtensionServicesRegistry;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.core.services.ServiceMultiException;
+import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
+import org.eclipse.papyrus.uml.diagram.wizards.command.NewPapyrusModelCommand;
+import org.eclipse.papyrus.uml.extensionpoints.profile.IRegisteredProfile;
+import org.eclipse.papyrus.uml.extensionpoints.profile.RegisteredProfile;
+import org.eclipse.papyrus.uml.tools.commands.ApplyProfileCommand;
+import org.eclipse.uml2.uml.Model;
+import org.eclipse.uml2.uml.Profile;
+import org.eclipse.uml2.uml.UMLFactory;
+
+/**
+ * @author VL222926
+ *
+ */
+public abstract class AbstractModelCreation implements IPapyrusModelCreation {
+
+
+	protected ServicesRegistry servicesRegistry;
+
+	protected ModelSet modelSet;
+
+
+	public ModelSet getModelSet() {
+		return this.modelSet;
+	}
+
+	private URI diURi = null;
+
+	private Resource umlResource;
+
+	private Model rootModel;
+
+	private List<String> profilesToApply;
+
+	protected void createModelSet(final String folderName, final String modelName, final List<String> profilesToApply) throws IOException, ServiceException {
+		if (null == profilesToApply) {
+			this.profilesToApply = Collections.emptyList();
+		} else {
+			this.profilesToApply = profilesToApply;
+		}
+		servicesRegistry = createServicesRegistry();
+		Assert.isNotNull(servicesRegistry);
+
+
+		this.modelSet = servicesRegistry.getService(ModelSet.class);
+		Assert.isNotNull(this.modelSet);
+
+
+
+		diURi = createBaseURI();
+		if (null == diURi) {
+			diURi = URI.createPlatformResourceURI(folderName, true);
+		} else {
+			diURi = diURi.appendSegment(folderName);
+		}
+		diURi = diURi.appendSegment(modelName);
+		diURi = diURi.appendFileExtension(DiModel.MODEL_FILE_EXTENSION);
+
+		RecordingCommand command = new NewPapyrusModelCommand(this.modelSet, diURi);
+
+		modelSet.getTransactionalEditingDomain().getCommandStack().execute(command);
+		modelSet.save(new NullProgressMonitor());
+		final URI umlURi = diURi.trimFileExtension().appendFileExtension("uml");
+		umlResource = modelSet.getResource(umlURi, true);
+
+
+		// create the architecture context
+		ArchitectureDescriptionUtils helper = new ArchitectureDescriptionUtils(modelSet);
+
+
+		final String contextId;
+		final List<String> viewpointsIds = new ArrayList<String>();
+		if (profilesToApply.contains("SysML 1.4")) {
+			contextId = "org.eclipse.papyrus.sysml.architecture.SysML14";
+			viewpointsIds.add("org.eclipse.papyrus.sysml14.standard.modeling");
+		} else {
+			// we assume we are in pure UML
+			contextId = "org.eclipse.papyrus.infra.services.edit.TypeContext";
+			viewpointsIds.add("org.eclipse.papyrus.uml.analysis");
+			viewpointsIds.add("org.eclipse.papyrus.uml.design");
+		}
+		// CompoundCommand cc = new CompoundCommand();
+		// final Command cmd1 = helper.switchArchitectureContextId(contextId);
+		// cc.append(cmd1);
+		String[] stringsViewPointIds = new String[viewpointsIds.size()];
+		stringsViewPointIds = viewpointsIds.toArray(stringsViewPointIds);
+		// final Command cmd2 = helper.switchArchitectureViewpointIds(stringsViewPointIds);
+		// cc.append(cmd2);
+
+		modelSet.getTransactionalEditingDomain().getCommandStack().execute(helper.createNewModel(contextId, stringsViewPointIds));
+		modelSet.save(new NullProgressMonitor());
+
+
+		Assert.isNotNull(umlResource);
+		final Model model = (Model) umlResource.getContents().get(0);
+		// UMLFactory.eINSTANCE.createModel();
+		// model.setName(modelName);
+
+		RecordingCommand rc = new RecordingCommand(modelSet.getTransactionalEditingDomain()) {
+
+			@Override
+			protected void doExecute() {
+				model.setName(modelName);
+				// umlResource.getContents().add(model);
+			}
+		};
+
+		modelSet.getTransactionalEditingDomain().getCommandStack().execute(rc);
+		rootModel = model;
+		initServicesRegistry(servicesRegistry);// we need to have a root in the model to init it!?!?
+
+
+		modelSet.save(new NullProgressMonitor());
+		if (this.profilesToApply.size() > 0) {
+			applyRequiredProfilesFromName(getProfilesToApply());
+			modelSet.save(new NullProgressMonitor());
+		}
+
+
+	}
+
+	protected void createModelSet(final String folderName, final String modelName) throws IOException, ServiceException {
+		createModelSet(folderName, modelName, Collections.<String> emptyList());
+
+	}
+
+	protected void applyRequiredProfilesFromName(final List<String> profileNames) {
+		if (profileNames.size() >= 0) {
+			final List<Profile> profilesToApply = new ArrayList<Profile>();
+			for (final String current : profileNames) {
+				IRegisteredProfile profile = RegisteredProfile.getRegisteredProfile(current);
+				org.junit.Assert.assertNotNull(profile);
+				URI uri = profile.getUri();
+				Resource resource = modelSet.getResource(uri, true);
+				Profile profileToApply = (Profile) resource.getContents().get(0);
+				org.junit.Assert.assertNotNull(profileToApply);
+				profilesToApply.add(profileToApply);
+			}
+			applyRequiredProfiles(profilesToApply);
+		}
+	}
+
+	protected void applyRequiredProfiles(final List<Profile> profiles) {
+		if (profiles.size() > 0) {
+			final CompoundCommand cc = new CompoundCommand("Apply Profiles");
+			for (Profile current : profiles) {
+				cc.append(new ApplyProfileCommand(rootModel, current, modelSet.getTransactionalEditingDomain()));
+			}
+			modelSet.getTransactionalEditingDomain().getCommandStack().execute(cc);
+			org.junit.Assert.assertTrue(profiles.size() <= rootModel.getAppliedProfiles().size());
+		}
+	}
+
+	protected List<String> getProfilesToApply() {
+		return this.profilesToApply;
+	}
+
+	/**
+	 * @throws ServiceMultiException
+	 * @see org.eclipse.papyrus.cdo.benchmarks.tests.IPapyrusModelCreation#disposeAll()
+	 *
+	 */
+	@Override
+	public void disposeAll() throws ServiceMultiException {
+		this.modelSet.unload();
+		this.modelSet = null;
+		this.servicesRegistry.disposeRegistry();
+		this.servicesRegistry = null;
+	}
+
+	/**
+	 * @return
+	 */
+	protected abstract URI createBaseURI();
+
+	/**
+	 * 
+	 * 
+	 * TODO : duplicated code from CreateModelWizard
+	 * 
+	 * 
+	 * @return
+	 */
+	protected ServicesRegistry createServicesRegistry() {
+		ServicesRegistry result = null;
+
+		try {
+			result = new ExtensionServicesRegistry(org.eclipse.papyrus.infra.core.Activator.PLUGIN_ID);
+		} catch (ServiceException e) {
+			// couldn't create the registry? Fatal problem
+			// Activator.log.error(e); //TODO
+		}
+
+		try {
+			// have to create the model set and populate it with the DI model
+			// before initializing other services that actually need the DI
+			// model, such as the SashModel Manager service
+			result.startServicesByClassKeys(ModelSet.class);
+		} catch (ServiceException ex) {
+			// Ignore this exception: some services may not have been loaded,
+			// which is probably normal at this point
+		}
+
+		return result;
+	}
+
+	/**
+	 * 
+	 * 
+	 * TODO : duplicated code from CreateModelWizard
+	 * 
+	 * 
+	 * @return
+	 */
+	protected void initServicesRegistry(ServicesRegistry registry) throws ServiceException {
+		try {
+			registry.startRegistry();
+		} catch (ServiceException ex) {
+			// Ignore this exception: some services may not have been loaded,
+			// which is probably normal at this point
+		}
+
+		registry.getService(IPageManager.class);
+	}
+
+	public ServicesRegistry getServicesRegistry() {
+		return this.servicesRegistry;
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.cdo.benchmarks.tests.IPapyrusModelCreation#getModelRoot()
+	 *
+	 * @return
+	 */
+	@Override
+	public Model getModelRoot() {
+		return this.rootModel;
+	}
+
+}
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/AbstractPerfTest.java b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/AbstractPerfTest.java
new file mode 100755
index 0000000..769162c
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/AbstractPerfTest.java
@@ -0,0 +1,92 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.cdo.benchmarks.tests;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.gmf.runtime.emf.type.core.ElementTypeRegistry;
+import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
+import org.eclipse.papyrus.junit.framework.classification.tests.AbstractPapyrusTest;
+import org.eclipse.papyrus.sysml14.service.types.util.SysMLServiceTypeUtil;
+import org.eclipse.papyrus.uml.service.types.element.UMLElementTypes;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * @author VL222926
+ *
+ */
+public abstract class AbstractPerfTest extends AbstractPapyrusTest {
+
+
+
+
+	protected void runCreation(List<String> profilesToApply, IHintedType elementTypeToCreate, final int nbElementsToCreate) throws Exception {
+		IPapyrusModelCreation helper = createPapyrusModelCreation();
+		if(null==profilesToApply) {
+			profilesToApply = Collections.<String>emptyList();
+		}
+		final ExecutionTimeHelper timeHelper = createTimeExecutionHelper(nbElementsToCreate, elementTypeToCreate);
+		ModelConstructor<IPapyrusModelCreation> test = new ModelConstructor<IPapyrusModelCreation>(helper, timeHelper);
+		test.createElementsInModel(Long.toString(System.currentTimeMillis()), nbElementsToCreate, elementTypeToCreate, profilesToApply);
+		timeHelper.toString();
+	}
+
+	protected abstract IPapyrusModelCreation createPapyrusModelCreation();
+
+	protected abstract ExecutionTimeHelper createTimeExecutionHelper(final int nbElementsToCreate, IHintedType elementType);
+
+
+//
+//	@Test
+//	public void create_100_Classes() throws Exception {
+//		runCreation(null, UMLElementTypes.CLASS, 100);
+//	}
+//
+//	@Test
+//	public void create_1000_Classes() throws Exception {
+//		runCreation(null, UMLElementTypes.CLASS, 1000);
+//	}
+
+	@Test
+	public void create_10000_Classes() throws Exception {
+		runCreation(null, UMLElementTypes.CLASS, 10000);
+	}
+
+
+//	@Test
+//	public void create_1000_Blocks() throws Exception {
+//		Object value = ElementTypeRegistry.getInstance().getType(SysMLServiceTypeUtil.ORG_ECLIPSE_PAPYRUS_SYSML14_BLOCK);
+//		Assert.assertTrue(value instanceof IHintedType);
+//		runCreation(Collections.<String> singletonList("SysML 1.4"), (IHintedType) value, 1000);
+//	}
+
+	@Test
+	public void create_10000_Blocks() throws Exception {
+		Object value = ElementTypeRegistry.getInstance().getType(SysMLServiceTypeUtil.ORG_ECLIPSE_PAPYRUS_SYSML14_BLOCK);
+		Assert.assertTrue(value instanceof IHintedType);
+		runCreation(Collections.<String> singletonList("SysML 1.4"), (IHintedType) value, 10000);
+	}
+	
+//	@Test
+//	public void create_50000_Blocks() throws Exception {
+//		Object value = ElementTypeRegistry.getInstance().getType(SysMLServiceTypeUtil.ORG_ECLIPSE_PAPYRUS_SYSML14_BLOCK);
+//		Assert.assertTrue(value instanceof IHintedType);
+//		runCreation(Collections.<String> singletonList("SysML 1.4"), (IHintedType) value, 50000);
+//	}
+
+	
+
+}
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/AbstractQuickIndexCreationTest.java b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/AbstractQuickIndexCreationTest.java
new file mode 100755
index 0000000..339dcbf
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/AbstractQuickIndexCreationTest.java
@@ -0,0 +1,53 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.cdo.benchmarks.tests;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.infra.types.core.registries.ElementTypeSetConfigurationRegistry;
+import org.eclipse.papyrus.uml.tools.utils.internal.preferences.NameElementNamingStrategyPreferenceInitializer;
+import org.eclipse.papyrus.uml.tools.utils.internal.preferences.NamedElementIndexNamingStrategyEnum;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+
+/**
+ * @author VL222926
+ *
+ */
+public abstract class AbstractQuickIndexCreationTest extends AbstractPerfTest {
+
+	protected static final ExecutionTimeHelperMerger merger = new ExecutionTimeHelperMerger("Time for creation with quick index");
+
+	@BeforeClass
+	public static final void initTest() {
+		// we need to initialize it before usingUMLElementTypes.CLASS, because, it is Papyrus that fills the GMF registry used by UMLElementTypes.CLASS.
+		// without doing that, the value will be null
+		ElementTypeSetConfigurationRegistry.getInstance();
+
+		IPreferenceStore store = org.eclipse.papyrus.uml.tools.utils.Activator.getDefault().getPreferenceStore();
+		store.setValue(NameElementNamingStrategyPreferenceInitializer.NAMED_ELEMENT_INDEX_INITIALIZATION, NamedElementIndexNamingStrategyEnum.QUICK_INDEX_INITIALIZATION.toString());
+	}
+
+
+	@AfterClass
+	public static final void endTest() {
+		IPreferenceStore store = org.eclipse.papyrus.uml.tools.utils.Activator.getDefault().getPreferenceStore();
+		store.setToDefault(NameElementNamingStrategyPreferenceInitializer.NAMED_ELEMENT_INDEX_INITIALIZATION);
+
+		if (merger.isFull()) {
+			System.out.println(merger.toString());
+		}
+	}
+
+}
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/AbstractUniqueIndexCreationTest.java b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/AbstractUniqueIndexCreationTest.java
new file mode 100755
index 0000000..dd7b540
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/AbstractUniqueIndexCreationTest.java
@@ -0,0 +1,60 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.cdo.benchmarks.tests;
+
+import java.util.Collections;
+
+import org.eclipse.gmf.runtime.emf.type.core.ElementTypeRegistry;
+import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.infra.types.core.registries.ElementTypeSetConfigurationRegistry;
+import org.eclipse.papyrus.sysml14.service.types.util.SysMLServiceTypeUtil;
+import org.eclipse.papyrus.uml.tools.utils.internal.preferences.NameElementNamingStrategyPreferenceInitializer;
+import org.eclipse.papyrus.uml.tools.utils.internal.preferences.NamedElementIndexNamingStrategyEnum;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+
+/**
+ * @author VL222926
+ *
+ */
+public abstract class AbstractUniqueIndexCreationTest extends AbstractPerfTest {
+
+	protected static final ExecutionTimeHelperMerger merger = new ExecutionTimeHelperMerger("Time for creation with unique index");
+
+
+	@BeforeClass
+	public static final void initTest() {
+
+		// we need to initialize it before usingUMLElementTypes.CLASS, because, it is Papyrus that fills the GMF registry used by UMLElementTypes.CLASS.
+		// without doing that, the value will be null
+		ElementTypeSetConfigurationRegistry.getInstance();
+		IPreferenceStore store = org.eclipse.papyrus.uml.tools.utils.Activator.getDefault().getPreferenceStore();
+		store.setValue(NameElementNamingStrategyPreferenceInitializer.NAMED_ELEMENT_INDEX_INITIALIZATION, NamedElementIndexNamingStrategyEnum.UNIQUE_INDEX_INITIALIZATION.toString());
+	}
+	
+
+	@AfterClass
+	public static final void endTest() {
+		IPreferenceStore store = org.eclipse.papyrus.uml.tools.utils.Activator.getDefault().getPreferenceStore();
+		store.setToDefault(NameElementNamingStrategyPreferenceInitializer.NAMED_ELEMENT_INDEX_INITIALIZATION);
+		if (merger.isFull()) {
+			System.out.println(merger.toString());
+		}
+	}
+
+}
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/CDOPapyrusModelCreation.java b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/CDOPapyrusModelCreation.java
new file mode 100755
index 0000000..bba5186
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/CDOPapyrusModelCreation.java
@@ -0,0 +1,208 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.cdo.benchmarks.tests;
+
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.explorer.CDOExplorerUtil;
+import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
+import org.eclipse.emf.cdo.explorer.repositories.CDORepository;
+import org.eclipse.emf.cdo.internal.explorer.AbstractElement;
+import org.eclipse.emf.cdo.internal.explorer.checkouts.CDOCheckoutImpl;
+import org.eclipse.emf.cdo.internal.explorer.repositories.CDORepositoryImpl;
+import org.eclipse.emf.cdo.internal.explorer.repositories.RemoteCDORepository;
+import org.eclipse.emf.cdo.net4j.CDONet4jSessionConfiguration;
+import org.eclipse.emf.cdo.net4j.CDONet4jUtil;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.net4j.Net4jUtil;
+import org.eclipse.net4j.connector.IConnector;
+import org.eclipse.net4j.tcp.TCPUtil;
+import org.eclipse.net4j.util.container.ContainerUtil;
+import org.eclipse.net4j.util.container.IManagedContainer;
+import org.eclipse.net4j.util.security.IPasswordCredentialsProvider;
+import org.eclipse.net4j.util.security.PasswordCredentialsProvider;
+import org.eclipse.papyrus.infra.core.services.ServiceMultiException;
+
+/**
+ * @author VL222926
+ *
+ */
+public class CDOPapyrusModelCreation extends AbstractModelCreation {
+
+	private static final String HOST_AND_PORT = "localhost:2036";
+
+	private static final String USER_NAME = "Administrator";
+
+	private static final String PASSWORD = "0000";
+
+
+	private CDOSession session;
+	private CDOCheckout checkout;
+	private CDORepository repository;
+	private CDOTransaction transaction;
+
+	final String PAPYRUS_CDO_SECURED_REPOSITORY = "PapyrusCDOSecuredRepository";
+
+
+
+	public final void connect() throws Exception {
+		connect(getHostAndPort(), getUser(), getPassword());
+	}
+
+	/**
+	 * @return
+	 */
+	private String getPassword() {
+		return PASSWORD;
+	}
+
+	/**
+	 * @return
+	 */
+	private String getUser() {
+		return USER_NAME;
+	}
+
+	/**
+	 * @return
+	 */
+	private String getHostAndPort() {
+		return HOST_AND_PORT;
+	}
+
+	private void connect(final String serverURI, final String login, final String password) throws Exception {
+		try {
+			// Prepare container
+			final IManagedContainer container = ContainerUtil.createContainer();
+			Net4jUtil.prepareContainer(container); // Register Net4j factories
+			TCPUtil.prepareContainer(container); // Register TCP factories
+			CDONet4jUtil.prepareContainer(container); // Register CDO factories
+			container.activate();
+
+			// Create connector
+			final IConnector connector = TCPUtil.getConnector(container, serverURI);
+
+			// Create configuration
+			final CDONet4jSessionConfiguration configuration = CDONet4jUtil.createNet4jSessionConfiguration();
+			configuration.setConnector(connector);
+			configuration.setRepositoryName(PAPYRUS_CDO_SECURED_REPOSITORY);
+			final IPasswordCredentialsProvider credentialsProvider = new PasswordCredentialsProvider(login, password);
+			configuration.setCredentialsProvider(credentialsProvider);
+
+			final Properties properties = new Properties();
+
+			properties.setProperty(AbstractElement.PROP_TYPE, CDORepository.TYPE_REMOTE);
+			properties.setProperty(AbstractElement.PROP_LABEL, PAPYRUS_CDO_SECURED_REPOSITORY);
+			properties.setProperty(CDORepositoryImpl.PROP_NAME, PAPYRUS_CDO_SECURED_REPOSITORY);
+			properties.setProperty(RemoteCDORepository.PROP_CONNECTOR_TYPE, "tcp"); //$NON-NLS-1$
+			// TODO : is it serverURI?
+			properties.setProperty(RemoteCDORepository.PROP_CONNECTOR_DESCRIPTION, serverURI);
+
+			repository = CDOExplorerUtil.getRepositoryManager().addRepository(properties, credentialsProvider.getCredentials());
+			repository.connect();
+
+			// Open session
+			session = configuration.openNet4jSession();
+
+			this.checkout = createCheckout("PapyrusPerfoTestCheckout"); //$NON-NLS-1$
+
+
+		} catch (final Exception e) {
+			throw e;
+		}
+
+	}
+
+	private CDOCheckout createCheckout(final String checkoutName) {
+		final Properties properties = new Properties();
+		properties.setProperty(AbstractElement.PROP_TYPE, CDOCheckout.TYPE_ONLINE_HISTORICAL);
+		properties.setProperty(AbstractElement.PROP_LABEL, checkoutName);
+		properties.setProperty(CDOCheckoutImpl.PROP_REPOSITORY, this.repository.getID());
+		properties.setProperty(CDOCheckoutImpl.PROP_BRANCH_ID, Integer.toString(CDOBranch.MAIN_BRANCH_ID));
+		properties.setProperty(CDOCheckoutImpl.PROP_TIME_STAMP, Long.toString(CDOBranchPoint.UNSPECIFIED_DATE));
+		properties.setProperty(CDOCheckoutImpl.PROP_READ_ONLY, Boolean.toString(false));
+
+		final CDOCheckout checkout = CDOExplorerUtil.getCheckoutManager().addCheckout(properties);
+		checkout.open();
+		return checkout;
+	}
+
+	/**
+	 * Gets the running session.
+	 *
+	 * @return the running session
+	 */
+	protected CDOSession getSession() {
+		return this.session;
+	}
+
+
+
+	public CDOTransaction getOpenTransaction() {
+		if (transaction != null) {
+			return transaction;
+		}
+
+		transaction = session.openTransaction(this.modelSet);
+
+
+		return transaction;
+	}
+
+
+	public void closeTransaction() {
+		if (null != this.transaction) {
+			this.transaction.close();
+		}
+		transaction = null;// TODO : probably missing in QS
+	}
+
+
+	/**
+	 * @see org.eclipse.papyrus.cdo.perfo.tests.impl.IPapyrusModelCreation#initPapyrusEnvironnement(java.lang.String, java.lang.String, List<String>)
+	 *
+	 * @param folderName
+	 * @param modelName
+	 * @throws Exception
+	 */
+	@Override
+	public void initPapyrusEnvironnement(final String folderName, final String modelName, final List<String> profilesName) throws Exception {
+		connect();
+		createModelSet(folderName, modelName, profilesName);
+	}
+
+
+	protected URI createBaseURI() {
+		URI uri = URI.createURI("cdo.checkout://1/home");
+		return uri.appendSegment(getUser());
+
+	}
+
+	/**
+	 * @throws ServiceMultiException
+	 * @see org.eclipse.papyrus.cdo.benchmarks.tests.IPapyrusModelCreation#disposeAll()
+	 *
+	 */
+	@Override
+	public void disposeAll() throws ServiceMultiException {
+		closeTransaction();
+		super.disposeAll();
+	}
+
+}
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/CDOQuickIndexCreationTest.java b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/CDOQuickIndexCreationTest.java
new file mode 100755
index 0000000..8a85758
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/CDOQuickIndexCreationTest.java
@@ -0,0 +1,51 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.cdo.benchmarks.tests;
+
+import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
+
+/**
+ * @author VL222926
+ *
+ */
+public class CDOQuickIndexCreationTest extends AbstractQuickIndexCreationTest {
+
+	/**
+	 * @see org.eclipse.papyrus.cdo.benchmarks.tests.AbstractPerfTest#createPapyrusModelCreation()
+	 *
+	 * @return
+	 */
+	@Override
+	protected IPapyrusModelCreation createPapyrusModelCreation() {
+		return new CDOPapyrusModelCreation();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.cdo.benchmarks.tests.AbstractPerfTest#createTimeExecutionHelper(int, IHintedType)
+	 *
+	 * @param nbClasses
+	 * @return
+	 */
+	@Override
+	protected ExecutionTimeHelper createTimeExecutionHelper(int nbClasses, IHintedType elementType) {
+		final String id = elementType.getId();
+		ExecutionTimeHelper helper = new ExecutionTimeHelper("CDO Project: Create " + nbClasses + " " + id + " with quick Index.", ExecutionTimeHelper.CDO_TYPE, nbClasses, id);
+		merger.addTimeHelper(helper);
+		return helper;
+	}
+
+
+
+
+}
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/CDOUniqueIndexCreationTest.java b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/CDOUniqueIndexCreationTest.java
new file mode 100755
index 0000000..3f40873
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/CDOUniqueIndexCreationTest.java
@@ -0,0 +1,48 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.cdo.benchmarks.tests;
+
+import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
+
+/**
+ * @author VL222926
+ *
+ */
+public class CDOUniqueIndexCreationTest extends AbstractUniqueIndexCreationTest {
+
+	/**
+	 * @see org.eclipse.papyrus.cdo.benchmarks.tests.AbstractPerfTest#createPapyrusModelCreation()
+	 *
+	 * @return
+	 */
+	@Override
+	protected IPapyrusModelCreation createPapyrusModelCreation() {
+		return new CDOPapyrusModelCreation();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.cdo.benchmarks.tests.AbstractPerfTest#createTimeExecutionHelper(int, IHintedType)
+	 *
+	 * @param nbClasses
+	 * @return
+	 */
+	@Override
+	protected ExecutionTimeHelper createTimeExecutionHelper(int nbClasses, IHintedType elementType) {
+		final String id = elementType.getId();
+		ExecutionTimeHelper helper = new ExecutionTimeHelper("CDO Project: Create " + nbClasses + " " + id + " with Unique Index.", ExecutionTimeHelper.CDO_TYPE, nbClasses, id);
+		merger.addTimeHelper(helper);
+		return helper;
+	}
+
+}
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/ExecutionTimeHelper.java b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/ExecutionTimeHelper.java
new file mode 100755
index 0000000..9a6730b
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/ExecutionTimeHelper.java
@@ -0,0 +1,144 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.cdo.benchmarks.tests;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.TreeMap;
+
+import org.eclipse.osgi.framework.util.ArrayMap;
+import org.junit.Assert;
+
+/**
+ * @author VL222926
+ *
+ */
+public class ExecutionTimeHelper {
+
+	public static final String STEP_1 = "Step 1 : Creating Model Set";
+	public static final String STEP_2 = "Step 2 : Creating elements";
+	public static final String STEP_3 = "Step 3 : Saving the model";
+	public static final String STEP_4 = "Step 4 : Accessing Element";
+	public static final String STEP_5 = "Step 5 : Accessing 5 000th Element";
+	public static final String STEP_6 = "Step 6 : Get stereotype application on 5 000th Element";
+	public static final String STEP_7 = "Step 7 : Add 100 elements to the root of the resource";
+
+
+	public static final String CDO_TYPE = "CDO Type";
+
+	public static final String Papyrus_TYPE = "Papyrus Type";
+
+	private String title;
+
+	private String type;
+
+	private int nbElementToCreate;
+
+	private Map<String, List<Long>> count = new HashMap<String, List<Long>>();
+
+	private List<Long> currentList = null;
+
+	private static final String NEWLINE = "\n";
+
+	private String createdElement;
+
+	public String getElementType() {
+		return this.createdElement;
+	}
+
+	public ExecutionTimeHelper(final String title, final String type, final int nbElementToCreate, String createdElement) {
+		this.title = title;
+		this.type = type;
+		this.nbElementToCreate = nbElementToCreate;
+		this.createdElement = createdElement;
+	}
+
+	public void startCounting(final String step) {
+		Assert.assertNull("The stop method has not been called", currentList);
+		currentList = new LinkedList<Long>();
+		count.put(step, currentList);
+		currentList.add(System.currentTimeMillis());
+	}
+
+
+	public void top() {
+		currentList.add(System.currentTimeMillis());
+	}
+
+	public void stop() {
+		currentList.add(System.currentTimeMillis());
+		currentList = null;
+	}
+
+	public String getType() {
+		return this.type;
+	}
+
+	/**
+	 * @see java.lang.Object#toString()
+	 *
+	 * @return
+	 */
+	@Override
+	public String toString() {
+		final StringBuilder builder = new StringBuilder();
+		builder.append("------");
+		builder.append(title);
+		builder.append("------");
+		builder.append(NEWLINE);
+		final Iterator<Entry<String, List<Long>>> iter = count.entrySet().iterator();
+		while (iter.hasNext()) {
+			final Entry<String, List<Long>> current = iter.next();
+			builder.append("# ");
+			builder.append(current.getKey());
+			builder.append(NEWLINE);
+			builder.append("## ");
+			for (int i = 0; i < current.getValue().size() - 1; i++) {
+				long diff = current.getValue().get(i + 1) - current.getValue().get(i);
+				builder.append(diff);
+				builder.append(NEWLINE);
+			}
+			builder.append(NEWLINE);
+			builder.append(NEWLINE);
+		}
+
+		return builder.toString();
+	}
+
+
+	public Map<String, List<Long>> getCount() {
+		return this.count;
+	}
+
+
+	public List<Long> getValuesForStep(final String step) {
+		return this.count.get(step);
+	}
+
+
+	/**
+	 * @return
+	 */
+	public int getNbCreation() {
+		return this.nbElementToCreate;
+	}
+
+}
+
+
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/ExecutionTimeHelperMerger.java b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/ExecutionTimeHelperMerger.java
new file mode 100755
index 0000000..83dadb0
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/ExecutionTimeHelperMerger.java
@@ -0,0 +1,162 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.cdo.benchmarks.tests;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import junit.framework.Assert;
+
+/**
+ * @author VL222926
+ *
+ */
+public class ExecutionTimeHelperMerger {
+
+	private String testResultDescription;
+
+	public ExecutionTimeHelperMerger(final String testResultDescription) {
+		this.testResultDescription = testResultDescription;
+	}
+
+	// nb elements created, elementTypeID, execution
+	private Map<Integer, Map<String, List<ExecutionTimeHelper>>> timeHelperMap = new HashMap<Integer, Map<String, List<ExecutionTimeHelper>>>();
+
+
+
+	public void addTimeHelper(final ExecutionTimeHelper helper) {
+		int nbCreatedElement = helper.getNbCreation();
+		Map<String, List<ExecutionTimeHelper>> subMap = timeHelperMap.get(Integer.valueOf(nbCreatedElement));
+		if (null == subMap) {
+			subMap = new HashMap<String, List<ExecutionTimeHelper>>();
+			subMap.put(helper.getElementType(), new ArrayList<ExecutionTimeHelper>());
+			timeHelperMap.put(Integer.valueOf(nbCreatedElement), subMap);
+		}
+
+		List<ExecutionTimeHelper> helpers = subMap.get(helper.getElementType());
+		if (null == helpers) {
+			helpers = new ArrayList<ExecutionTimeHelper>();
+			subMap.put(helper.getElementType(), helpers);
+		}
+		helpers.add(helper);
+	}
+
+	public boolean isFull() {
+		final Iterator<Entry<Integer, Map<String, List<ExecutionTimeHelper>>>> iter = timeHelperMap.entrySet().iterator();
+		while (iter.hasNext()) {
+			final Entry<Integer, Map<String, List<ExecutionTimeHelper>>> current = iter.next();
+			final Map<String, List<ExecutionTimeHelper>> curr = current.getValue();
+			final Iterator<Entry<String, List<ExecutionTimeHelper>>> iter2 = curr.entrySet().iterator();
+			while (iter2.hasNext()) {
+				if (2 != iter2.next().getValue().size()) {
+					return false;
+				}
+			}
+
+		}
+		return true;
+	}
+
+
+	/**
+	 * @see java.lang.Object#toString()
+	 *
+	 * @return
+	 */
+	@Override
+	public String toString() {
+		final List<Integer> keys = new ArrayList<Integer>(timeHelperMap.keySet());
+		Collections.sort(keys);
+
+		final StringBuilder builder = new StringBuilder(testResultDescription);
+		builder.append("\n");
+		for (int i = 0; i < keys.size(); i++) {
+			ExecutionTimeHelper papyrusTimeHelper;
+			ExecutionTimeHelper CDOTimeHelper;
+			Map<String, List<ExecutionTimeHelper>> subMap = timeHelperMap.get(keys.get(i));
+			final Iterator<Entry<String, List<ExecutionTimeHelper>>> subIter = subMap.entrySet().iterator();
+			while (subIter.hasNext()) {
+				final Entry<String, List<ExecutionTimeHelper>> current = subIter.next();
+
+				List<ExecutionTimeHelper> helpers = current.getValue();
+				if (ExecutionTimeHelper.CDO_TYPE.equals(helpers.get(0).getType())) {
+					CDOTimeHelper = helpers.get(0);
+					papyrusTimeHelper = helpers.get(1);
+				} else {
+					CDOTimeHelper = helpers.get(1);
+					papyrusTimeHelper = helpers.get(0);
+				}
+
+
+				builder.append("Creating " + keys.get(i) + " " + current.getKey());
+				builder.append("\n");
+
+				builder.append(" ");
+				builder.append("\t");
+				builder.append(ExecutionTimeHelper.Papyrus_TYPE);
+				builder.append("\t");
+				builder.append(ExecutionTimeHelper.CDO_TYPE);
+				builder.append("\n");
+
+				builder.append(createStepsRows(ExecutionTimeHelper.STEP_1, papyrusTimeHelper, CDOTimeHelper));
+				builder.append(createStepsRows(ExecutionTimeHelper.STEP_2, papyrusTimeHelper, CDOTimeHelper));
+				builder.append(createStepsRows(ExecutionTimeHelper.STEP_3, papyrusTimeHelper, CDOTimeHelper));
+				builder.append(createStepsRows(ExecutionTimeHelper.STEP_4, papyrusTimeHelper, CDOTimeHelper));
+				builder.append(createStepsRows(ExecutionTimeHelper.STEP_5, papyrusTimeHelper, CDOTimeHelper));
+				builder.append(createStepsRows(ExecutionTimeHelper.STEP_6, papyrusTimeHelper, CDOTimeHelper));
+				builder.append(createStepsRows(ExecutionTimeHelper.STEP_7, papyrusTimeHelper, CDOTimeHelper));
+
+			}
+		}
+		return builder.toString();
+	}
+
+
+	private String createStepsRows(final String step, final ExecutionTimeHelper papyrusHelper, final ExecutionTimeHelper cdoHelper) {
+		final StringBuilder builder = new StringBuilder(step);
+		builder.append("\t");
+		builder.append(" ");
+		builder.append("\t");
+		builder.append(" ");
+		builder.append("\n");
+
+		builder.append(createValueList(papyrusHelper.getValuesForStep(step), cdoHelper.getValuesForStep(step)));
+		builder.append("\n");
+
+		return builder.toString();
+	}
+
+	private String createValueList(final List<Long> papyrusValues, final List<Long> cdoValues) {
+		if (papyrusValues != null && cdoValues != null) {
+			final StringBuilder builder = new StringBuilder();
+			org.junit.Assert.assertEquals(papyrusValues.size(), cdoValues.size());
+			for (int i = 0; i < papyrusValues.size() - 1; i++) {
+				builder.append(" ");
+				builder.append("\t");
+				builder.append(Long.valueOf(papyrusValues.get(i + 1) - papyrusValues.get(i)) + "ms");
+				builder.append("\t");
+				builder.append(Long.valueOf(cdoValues.get(i + 1) - cdoValues.get(i)) + "ms");
+				builder.append("\n");
+			}
+			return builder.toString();
+		}
+		return "";
+	}
+
+}
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/IPapyrusModelCreation.java b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/IPapyrusModelCreation.java
new file mode 100755
index 0000000..f5dd642
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/IPapyrusModelCreation.java
@@ -0,0 +1,68 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.cdo.benchmarks.tests;
+
+import java.util.List;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.services.ServiceMultiException;
+import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
+import org.eclipse.uml2.uml.Model;
+
+/**
+ * @author VL222926
+ *
+ */
+public interface IPapyrusModelCreation {
+
+	/**
+	 * This methods creates:
+	 * <ul>
+	 * <li>the Papyrus service registry</li>
+	 * <li>the ModelSet</li>
+	 * <li>all the required Papyrus files (uml, notation, di and others)</li>
+	 * 
+	 * </ul>
+	 * 
+	 * @param folderName
+	 *            the name of the folder where the files will be created
+	 * @param modelName
+	 *            the name of the root model
+	 * @param profilesName TODO
+	 * @throws Exception 
+	 */
+	public void initPapyrusEnvironnement(final String folderName, final String modelName, List<String> profilesName) throws Exception;
+
+	/**
+	 * 
+	 * @return
+	 * 		the created {@link ModelSet} or <code>null</code>
+	 */
+	public ModelSet getModelSet();
+
+	/**
+	 * 
+	 * @return
+	 * 		the created {@link ServicesRegistry} or <code>null</code>
+	 */
+	public ServicesRegistry getServicesRegistry();
+
+	public void disposeAll() throws ServiceMultiException;
+
+	public Model getModelRoot();
+
+
+
+}
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/ModelConstructor.java b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/ModelConstructor.java
new file mode 100755
index 0000000..2a0106e
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/ModelConstructor.java
@@ -0,0 +1,175 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.cdo.benchmarks.tests;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.emf.gmf.command.GMFtoEMFCommandWrapper;
+import org.eclipse.papyrus.infra.services.edit.service.ElementEditServiceUtils;
+import org.eclipse.papyrus.infra.services.edit.service.IElementEditService;
+import org.eclipse.papyrus.uml.service.types.element.UMLElementTypes;
+import org.eclipse.uml2.uml.Model;
+import org.eclipse.uml2.uml.NamedElement;
+import org.eclipse.uml2.uml.UMLFactory;
+
+/**
+ * @author VL222926
+ *
+ */
+public class ModelConstructor<T extends IPapyrusModelCreation> {
+
+	private T creationHelper;
+
+	protected ExecutionTimeHelper timeHelper;
+
+	public ModelConstructor(final T creationHelper, final ExecutionTimeHelper timeHelper) {
+		this.creationHelper = creationHelper;
+		this.timeHelper = timeHelper;
+	}
+
+
+	/**
+	 * r
+	 * 
+	 * @param folderName
+	 * @param nbElementsToCreate
+	 * @param elementType
+	 * @param profilesName
+	 * @throws Exception
+	 */
+	public void createElementsInModel(final String folderName, int nbElementsToCreate, IHintedType elementType, List<String> profilesName) throws Exception {
+
+		String modelName = Long.toString(System.currentTimeMillis());
+
+		// creating model set
+		timeHelper.startCounting(ExecutionTimeHelper.STEP_1);
+		this.creationHelper.initPapyrusEnvironnement(folderName, modelName, profilesName);
+		timeHelper.stop();
+
+		Assert.isNotNull(creationHelper.getServicesRegistry());
+		Assert.isNotNull(creationHelper.getModelSet());
+
+		// creating classes
+		final Model model = this.creationHelper.getModelRoot();
+		final ModelSet modelSet = this.creationHelper.getModelSet();
+
+
+		final IElementEditService provider = ElementEditServiceUtils.getCommandProvider(model);
+		int modulo = 100;
+		timeHelper.startCounting(ExecutionTimeHelper.STEP_2);
+		for (int i = 0; i < nbElementsToCreate; i++) {
+			CreateElementRequest request = new CreateElementRequest(modelSet.getTransactionalEditingDomain(), model, elementType);
+			final ICommand cmd = provider.getEditCommand(request);
+			modelSet.getTransactionalEditingDomain().getCommandStack().execute(GMFtoEMFCommandWrapper.wrap(cmd));
+			if (i % modulo == 0) {
+				timeHelper.top();
+			}
+		}
+
+		timeHelper.stop();
+
+		// saving the models
+		timeHelper.startCounting(ExecutionTimeHelper.STEP_3);
+		try {
+			modelSet.save(new NullProgressMonitor());
+			// modelSet.
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		timeHelper.stop();
+
+
+		// accessing to an element
+		List<String> names = Arrays.asList(elementType.getId().split("\\."));
+		Collections.reverse(names);
+		String name = names.get(0);
+		int i = 0;
+		timeHelper.startCounting(ExecutionTimeHelper.STEP_4);
+		while (i + modulo <= nbElementsToCreate) {
+			i = i + modulo;
+			final NamedElement element = model.getMember(name + i);
+			// TODO !
+			Assert.isNotNull(element);
+			if (profilesName.size() > 0) {
+				Assert.isTrue(element.getAppliedStereotypes().size() > 0);
+			}
+			timeHelper.top();
+		}
+
+		timeHelper.stop();
+
+		name = name + "5000";
+		NamedElement element = null;
+		if (nbElementsToCreate > 5000) {
+			timeHelper.startCounting(ExecutionTimeHelper.STEP_5);
+			for (int j = 0; j < 100; j++) {// we do it 100 times
+				element = model.getMember(name);
+			}
+			timeHelper.stop();
+		}
+
+		if (nbElementsToCreate > 5000) {
+
+			if (profilesName.size() > 0) {
+				timeHelper.startCounting(ExecutionTimeHelper.STEP_6);
+				for (int j = 0; j < 100; j++) {// we do it 100 times
+					element.getAppliedStereotypes();
+				}
+				timeHelper.stop();
+			}
+		}
+
+		final Resource res = element.eResource();
+		Assert.isNotNull(res);
+		timeHelper.startCounting(ExecutionTimeHelper.STEP_7);
+		for (int k = 0; k < 100; k++) {
+			final EObject newModel = UMLFactory.eINSTANCE.createModel();
+			RecordingCommand rc = new RecordingCommand(modelSet.getTransactionalEditingDomain()) {
+
+				@Override
+				protected void doExecute() {
+					res.getContents().add(newModel);
+
+				}
+			};
+			modelSet.getTransactionalEditingDomain().getCommandStack().execute(rc);
+		}
+		timeHelper.stop();
+		try {
+			modelSet.save(new NullProgressMonitor());
+			// modelSet.
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+
+		this.creationHelper.disposeAll();
+	}
+
+
+}
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/PapyrusModelCreation.java b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/PapyrusModelCreation.java
new file mode 100755
index 0000000..c2037de
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/PapyrusModelCreation.java
@@ -0,0 +1,67 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.cdo.benchmarks.tests;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.papyrus.infra.core.services.ServiceMultiException;
+
+/**
+ * @author VL222926
+ *
+ */
+public class PapyrusModelCreation extends AbstractModelCreation {
+
+	/**
+	 * @see org.eclipse.papyrus.cdo.perfo.tests.impl.IPapyrusModelCreation#initPapyrusEnvironnement(java.lang.String, java.lang.String, List<String>)
+	 *
+	 * @param folderName
+	 * @param modelName
+	 * @throws Exception
+	 */
+	@Override
+	public void initPapyrusEnvironnement(String folderName, String modelName, List<String> profilesName) throws Exception {
+		createProject(folderName);
+		createModelSet(folderName, modelName, profilesName);
+	}
+
+	private void createProject(final String projectName) throws CoreException {
+		IProgressMonitor progressMonitor = new NullProgressMonitor();
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IProject project = root.getProject(projectName);
+		project.create(progressMonitor);
+		project.open(progressMonitor);
+	}
+
+
+
+
+	/**
+	 * @see org.eclipse.papyrus.cdo.benchmarks.tests.AbstractModelCreation#createBaseURI()
+	 *
+	 * @return
+	 */
+	@Override
+	protected URI createBaseURI() {
+		return null;
+	}
+
+}
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/PurePapyrusQuickIndexCreationTest.java b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/PurePapyrusQuickIndexCreationTest.java
new file mode 100755
index 0000000..b4bff41
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/PurePapyrusQuickIndexCreationTest.java
@@ -0,0 +1,51 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.cdo.benchmarks.tests;
+
+import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
+
+/**
+ * @author VL222926
+ *
+ */
+public class PurePapyrusQuickIndexCreationTest extends AbstractQuickIndexCreationTest {
+
+	/**
+	 * @see org.eclipse.papyrus.cdo.benchmarks.tests.AbstractPerfTest#createPapyrusModelCreation()
+	 *
+	 * @return
+	 */
+	@Override
+	protected IPapyrusModelCreation createPapyrusModelCreation() {
+		return new PapyrusModelCreation();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.cdo.benchmarks.tests.AbstractPerfTest#createTimeExecutionHelper(int, IHintedType)
+	 *
+	 * @param nbClasses
+	 * @return
+	 */
+	@Override
+	protected ExecutionTimeHelper createTimeExecutionHelper(int nbClasses, IHintedType elementType) {
+		final String id = elementType.getId();
+
+		ExecutionTimeHelper helper = new ExecutionTimeHelper("Papyrus Project: Create " + nbClasses + " " + id + " with quick Index.", ExecutionTimeHelper.Papyrus_TYPE, nbClasses, id);
+		merger.addTimeHelper(helper);
+		return helper;
+	}
+
+
+
+}
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/PurePapyrusUniqueIndexCreationTest.java b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/PurePapyrusUniqueIndexCreationTest.java
new file mode 100755
index 0000000..fd2a420
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/src/org/eclipse/papyrus/cdo/benchmarks/tests/PurePapyrusUniqueIndexCreationTest.java
@@ -0,0 +1,51 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.cdo.benchmarks.tests;
+
+import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
+
+/**
+ * @author VL222926
+ *
+ */
+public class PurePapyrusUniqueIndexCreationTest extends AbstractUniqueIndexCreationTest {
+
+	/**
+	 * @see org.eclipse.papyrus.cdo.benchmarks.tests.AbstractPerfTest#createPapyrusModelCreation()
+	 *
+	 * @return
+	 */
+	@Override
+	protected IPapyrusModelCreation createPapyrusModelCreation() {
+		return new PapyrusModelCreation();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.cdo.benchmarks.tests.AbstractPerfTest#createTimeExecutionHelper(int, IHintedType)
+	 *
+	 * @param nbClasses
+	 * @return
+	 */
+	@Override
+	protected ExecutionTimeHelper createTimeExecutionHelper(int nbClasses, IHintedType elementType) {
+		final String id = elementType.getId();
+
+		ExecutionTimeHelper helper = new ExecutionTimeHelper("Papyrus Project: Create " + nbClasses + " " + id + " with unique Index.", ExecutionTimeHelper.Papyrus_TYPE, nbClasses, id);
+		merger.addTimeHelper(helper);
+		return helper;
+	}
+
+
+
+}
diff --git a/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/~$Benchmarks results.xlsx b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/~$Benchmarks results.xlsx
new file mode 100755
index 0000000..d06f542
--- /dev/null
+++ b/plugins/cdo/benchmarks/org.eclipse.papyrus.cdo.benchmarks/~$Benchmarks results.xlsx
Binary files differ
diff --git a/plugins/cdo/benchmarks/pom.xml b/plugins/cdo/benchmarks/pom.xml
new file mode 100755
index 0000000..7450eab
--- /dev/null
+++ b/plugins/cdo/benchmarks/pom.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	
+	<!-- Parent of this POM -->
+	<parent>
+		<groupId>org.eclipse.papyrus.cdo</groupId>
+		<artifactId>org.eclipse.papyrus.cdo.root</artifactId>
+		<version>1.2.0-SNAPSHOT</version>
+	</parent>
+	
+	<!-- Project POM (aggregator) -->
+	<artifactId>org.eclipse.papyrus.cdo-benchmarks</artifactId>
+	
+	<packaging>pom</packaging>
+
+	<!-- Children modules to build -->
+	<modules>
+		<module>org.eclipse.papyrus.cdo.benchmarks</module>
+	</modules>
+	
+</project>
\ No newline at end of file
diff --git a/plugins/cdo/pom.xml b/plugins/cdo/pom.xml
index faccebb..5dd3634 100755
--- a/plugins/cdo/pom.xml
+++ b/plugins/cdo/pom.xml
@@ -32,6 +32,7 @@
 
 	<!-- Children modules to build -->
 	<modules>
+		<module>benchmarks</module>		
 		<module>bundles</module>				
 		<module>features</module>				
 		<module>releng</module>				
diff --git a/plugins/cdo/releng/targetplatforms/eclipse/org.eclipse.papyrus.cdo.targetplatform.target b/plugins/cdo/releng/targetplatforms/eclipse/org.eclipse.papyrus.cdo.targetplatform.target
index e618767..e79fd4c 100755
--- a/plugins/cdo/releng/targetplatforms/eclipse/org.eclipse.papyrus.cdo.targetplatform.target
+++ b/plugins/cdo/releng/targetplatforms/eclipse/org.eclipse.papyrus.cdo.targetplatform.target
@@ -29,5 +29,9 @@
       <unit id="org.eclipse.emf.cdo.gmf.notation" version="0.0.0"/>
       <repository id="cdo" location="file:/home/data/httpd/download.eclipse.org/modeling/emf/cdo/drops/R20180613-0111"/>
     </location>
+     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.papyrus.sysml14.feature.feature.group" version="0.0.0"/>
+      <repository id="SysML 1.4" location="https://hudson.eclipse.org/papyrus/view/Sysml/job/papyrus-sysml-photon/4/artifact/releng/org.eclipse.papyrus.sysml14.p2/target/repository/"/>
+    </location>
   </locations>
 </target>
diff --git a/plugins/cdo/releng/targetplatforms/org.eclipse.papyrus.cdo.targetplatform/org.eclipse.papyrus.cdo.targetplatform.target b/plugins/cdo/releng/targetplatforms/org.eclipse.papyrus.cdo.targetplatform/org.eclipse.papyrus.cdo.targetplatform.target
index b2b480b..7825b46 100755
--- a/plugins/cdo/releng/targetplatforms/org.eclipse.papyrus.cdo.targetplatform/org.eclipse.papyrus.cdo.targetplatform.target
+++ b/plugins/cdo/releng/targetplatforms/org.eclipse.papyrus.cdo.targetplatform/org.eclipse.papyrus.cdo.targetplatform.target
@@ -29,5 +29,9 @@
       <unit id="org.eclipse.emf.cdo.gmf.notation" version="0.0.0"/>
       <repository id="cdo" location="http://download.eclipse.org/modeling/emf/cdo/drops/R20180613-0111"/>
     </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.papyrus.sysml14.feature.feature.group" version="0.0.0"/>
+      <repository id="SysML 1.4" location="https://hudson.eclipse.org/papyrus/view/Sysml/job/papyrus-sysml-photon/4/artifact/releng/org.eclipse.papyrus.sysml14.p2/target/repository/"/>
+    </location>
   </locations>
 </target>
diff --git a/plugins/cdo/releng/targetplatforms/org.eclipse.papyrus.cdo.targetplatform/org.eclipse.papyrus.cdo.targetplatform.tpd b/plugins/cdo/releng/targetplatforms/org.eclipse.papyrus.cdo.targetplatform/org.eclipse.papyrus.cdo.targetplatform.tpd
index fa07876..44d910d 100755
--- a/plugins/cdo/releng/targetplatforms/org.eclipse.papyrus.cdo.targetplatform/org.eclipse.papyrus.cdo.targetplatform.tpd
+++ b/plugins/cdo/releng/targetplatforms/org.eclipse.papyrus.cdo.targetplatform/org.eclipse.papyrus.cdo.targetplatform.tpd
@@ -34,4 +34,9 @@
  org.eclipse.emf.cdo.server.ocl
  org.eclipse.emf.cdo.ecore lazy
  org.eclipse.emf.cdo.gmf.notation lazy
+ 
+ 
+ location Sysml https://hudson.eclipse.org/papyrus/view/Sysml/job/papyrus-sysml-photon/4/artifact/releng/org.eclipse.papyrus.sysml14.p2/target/repository/{
+ 	org.eclipse.papyrus.sysml14.feature.feature.group
+ }
 }
\ No newline at end of file
