diff --git a/.classpath b/.classpath
deleted file mode 100644
index 4a04201ca2839bf43ab901d599c311dafcc5754b..0000000000000000000000000000000000000000
--- a/.classpath
+++ /dev/null
@@ -1,6 +0,0 @@
-<?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-11/"/>
-	<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
-	<classpathentry kind="output" path="bin/default"/>
-</classpath>
diff --git a/.gitignore b/.gitignore
index 5c682b778d7efe85437303a7b2c435b55d01d4ab..dab7b95353ecc3addd50c5a1e3c914cc637743ac 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,13 +2,45 @@
 # Ignore Gradle project-specific cache directory
 **/.gradle/**
 
+.classpath
+.settings
 **/.classpath
 **/.project
 **/.settings/**
 **/build/**
 **/bin/**
-frameworks/Kieker/scripts/benchmark/
-frameworks/Kieker/scripts/data/
-frameworks/Kieker/scripts/kieker-*-aspectj.jar
-frameworks/Kieker/scripts/receiver/
-frameworks/Kieker/scripts/results-kieker/
+frameworks/log_*
+results/
+frameworks/Kieker/benchmark/
+frameworks/Kieker/data/
+frameworks/Kieker/MooBench.jar
+frameworks/Kieker/kieker-*-aspectj.jar
+frameworks/Kieker/receiver/
+frameworks/Kieker/results-Kieker/
+frameworks/Kieker/benchmark_*
+frameworks/SPASSmeter/spassmeter.log
+frameworks/SPASSmeter/tmp/
+frameworks/SPASSmeter/MooBench.jar
+frameworks/inspectIT/inspectit.log
+frameworks/inspectIT/MooBench.jar
+frameworks/inspectIT/logs/
+frameworks/inspectIT/tmp/
+frameworks/inspectIT/zipkin/
+frameworks/inspectIT/configuration.txt
+frameworks/inspectIT/results-inspectIT/
+frameworks/inspectIT/prometheus-2.28.1.linux-amd64/
+frameworks/OpenTelemetry/results-OpenTelemetry/
+frameworks/OpenTelemetry/tmp/
+frameworks/OpenTelemetry/*.txt
+frameworks/OpenTelemetry/OpenTelemetry.log
+frameworks/OpenTelemetry/MooBench.jar
+frameworks/OpenTelemetry/zipkin/
+frameworks/OpenTelemetry/lib/
+frameworks/OpenTelemetry/jaeger-1.24.0-linux-amd64/
+frameworks/OpenTelemetry/prometheus-2.28.1.linux-amd64/
+frameworks/OpenTelemetry/prometheus-2.28.1.linux-amd64.tar.gz
+
+frameworks/Kieker/compile-results/
+tools/getConfidenceIntervalTable/*csv
+/.gradle/
+/build/
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 8341a87fe904e7d18a7ff290d3558f71f6c19932..0000000000000000000000000000000000000000
--- a/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,313 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=11
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=11
-org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-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_expressions_in_for_loop_header=0
-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_parameterized_type_references=0
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
-org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
-org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-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=100
-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=1
-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=2
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=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=do not 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=do not 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=100
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=space
-org.eclipse.jdt.core.formatter.tabulation.size=2
-org.eclipse.jdt.core.formatter.use_on_off_tags=false
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 95fc2a88820bbb9ffab9b6c165fc4fa66eac643b..0000000000000000000000000000000000000000
--- a/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,118 +0,0 @@
-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=false
-cleanup.add_serial_version_id=true
-cleanup.always_use_blocks=true
-cleanup.always_use_parentheses_in_expressions=true
-cleanup.always_use_this_for_non_static_field_access=true
-cleanup.always_use_this_for_non_static_method_access=true
-cleanup.convert_functional_interfaces=false
-cleanup.convert_to_enhanced_for_loop=true
-cleanup.correct_indentation=true
-cleanup.format_source_code=true
-cleanup.format_source_code_changes_only=false
-cleanup.insert_inferred_type_arguments=false
-cleanup.make_local_variable_final=true
-cleanup.make_parameters_final=true
-cleanup.make_private_fields_final=true
-cleanup.make_type_abstract_if_missing_method=false
-cleanup.make_variable_declarations_final=true
-cleanup.never_use_blocks=false
-cleanup.never_use_parentheses_in_expressions=false
-cleanup.organize_imports=true
-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=true
-cleanup.remove_private_constructors=true
-cleanup.remove_redundant_type_arguments=false
-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=true
-cleanup.use_this_for_non_static_field_access=true
-cleanup.use_this_for_non_static_field_access_only_if_necessary=false
-cleanup.use_this_for_non_static_method_access=true
-cleanup.use_this_for_non_static_method_access_only_if_necessary=false
-cleanup_profile=_eclipse-cs MooBench
-cleanup_settings_version=2
-eclipse.preferences.version=1
-editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
-formatter_profile=_eclipse-cs MooBench
-formatter_settings_version=12
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=java;javax;junit;org;com;mooBench;kieker;kieker.test;
-org.eclipse.jdt.ui.ondemandthreshold=99
-org.eclipse.jdt.ui.staticondemandthreshold=99
-sp_cleanup.add_default_serial_version_id=true
-sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=true
-sp_cleanup.add_missing_deprecated_annotations=true
-sp_cleanup.add_missing_methods=false
-sp_cleanup.add_missing_nls_tags=false
-sp_cleanup.add_missing_override_annotations=true
-sp_cleanup.add_missing_override_annotations_interface_methods=false
-sp_cleanup.add_serial_version_id=false
-sp_cleanup.always_use_blocks=true
-sp_cleanup.always_use_parentheses_in_expressions=true
-sp_cleanup.always_use_this_for_non_static_field_access=true
-sp_cleanup.always_use_this_for_non_static_method_access=true
-sp_cleanup.convert_to_enhanced_for_loop=true
-sp_cleanup.correct_indentation=true
-sp_cleanup.format_source_code=true
-sp_cleanup.format_source_code_changes_only=false
-sp_cleanup.make_local_variable_final=true
-sp_cleanup.make_parameters_final=true
-sp_cleanup.make_private_fields_final=true
-sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=true
-sp_cleanup.never_use_blocks=false
-sp_cleanup.never_use_parentheses_in_expressions=false
-sp_cleanup.on_save_use_additional_actions=true
-sp_cleanup.organize_imports=true
-sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=true
-sp_cleanup.qualify_static_method_accesses_with_declaring_class=true
-sp_cleanup.remove_private_constructors=true
-sp_cleanup.remove_trailing_whitespaces=true
-sp_cleanup.remove_trailing_whitespaces_all=true
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=true
-sp_cleanup.remove_unnecessary_nls_tags=true
-sp_cleanup.remove_unused_imports=true
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=true
-sp_cleanup.remove_unused_private_members=false
-sp_cleanup.remove_unused_private_methods=true
-sp_cleanup.remove_unused_private_types=true
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_blocks=true
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_parentheses_in_expressions=true
-sp_cleanup.use_this_for_non_static_field_access=true
-sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=false
-sp_cleanup.use_this_for_non_static_method_access=true
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=false
diff --git a/README b/README
deleted file mode 100644
index 0b5f5304bbe8181e624cbfef420a704e32b7ce60..0000000000000000000000000000000000000000
--- a/README
+++ /dev/null
@@ -1,88 +0,0 @@
-The MooBench Monitoring Overhead Micro-Benchmark 
-------------------------------------------------------------------------
-
-Website: http://kieker-monitoring.net/MooBench
-Contact: moobench@notme.de
-
-The MooBench micro-benchmarks can be used to quantify the performance 
-overhead caused by monitoring framework components. 
-
-Currenly (directly) supported monitoring frameworks include:
-* Kieker (http://kieker-monitoring.net)
-* inspectIT (http://inspectit.eu/)
-* SPASS-meter (https://github.com/SSEHUB/spassMeter.git)
-
-An ant script (build.xml) is provided to prepare the benchmark for the
-respective monitoring framwork. Corresponding build targets, providing
-preconfigured builds for each supported framework, are available.
-For instance, the target "build-kieker" prepares a jar for Kieker 
-benchmarking experiments.
-
-The relevant build targets are:
-* build-all (framework independant benchmark)
-* build-kieker (Kieker)
-* build-inspectit (inspectIT)
-* build-spassmeter (SPASS-meter)
-
-All experiments are started with the provided "External Controller"
-scripts. These scripts are available inside the respective bin/ 
-directory. Currently only shell (.sh) scripts are provided. These 
-scripts have been developed on Solaris environments. Thus, minor
-adjustments might be required for common Linux operatong systems,
-such as Ubuntu. Additionally, several Eclipse launch targets are 
-provided for debugging purposes.
-
-The default execution of the benchmark requires a 64Bit JVM!
-However, this behavior can be changed in the respective .sh scripts.
-
-Initially, the following steps are required:
-1. You should check whether you installed ant (http://ant.apache.org/), 
-   since the execution of all examples described in this 
-   README is based on the run-targets in the ant file build.xml.
-2. Make sure, that you've installed R (http://www.r-project.org/) to 
-   generate the results.
-3. Compile the application by calling ant with the appropriate build 
-   target.
-
-Execution of the micro-benchmark:
-All benchmarks are started with calls of .sh scripts in the bin folder.
-The top of the files include some configuration parameters, such as
-* SLEEPTIME           between executions (default 30 seconds)
-* NUM_LOOPS           number of repetitions (default 10)
-* THREADS             concurrent benchmarking threads (default 1)
-* MAXRECURSIONDEPTH   recursion up to this depth (default 10)
-* TOTALCALLS          the duration of the benchmark (deafult 2,000,000 calls)
-* METHODTIME          the time per monitored call (default 0 ns or 500 us)
-
-Furthermore some JVM arguments can be adjusted:
-* JAVAARGS            JVM Arguments (e.g., available memory)
-
-Typical call (using Solaris):
-$ nohup ./benchmark.sh & sleep 1;tail +0cf nohup.out
-
-
-Analyzing the data:
-===================
-In the folder /bin/r are some R scripts provided to generate graphs to 
-visualize the results. In the top the files, one can configure the 
-required paths and the configuration used to analyze the data.
-
-
-(Outdated) Documentation of additional experiments:
-===================================================
-
-Different recursion depth (with MAXRECURSIONDEPTH=1 without recursion)
--> bin/run-benchmark-recursive.sh
-
-To check for a linear rise in monitoring overhead, this benchmark 
-increases the recursion depth up to 2^MAXRECURSIONDEPTH in logarithmic 
-steps
--> bin/run-benchmark-recursive-linear.sh
-
-Benchmarking the JMX-writer
--> bin/run-benchmark-recursive-jmx.sh
-
-The experiments run-cycle*.sh and their used files 
-run-benchmark-cycle-*.sh are currently only supporting Solaris 
-environments and require pfexec permissions to assign subsets of cores 
-to the benchmarking system.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f2f32ccca45cb369c0117299c035c8512b866500
--- /dev/null
+++ b/README.md
@@ -0,0 +1,53 @@
+# The MooBench Monitoring Overhead Micro-Benchmark 
+
+Website: http://kieker-monitoring.net/MooBench
+
+The MooBench micro-benchmarks can be used to quantify the performance overhead caused by monitoring framework components. 
+
+Currenly (fully) supported monitoring frameworks are:
+* Kieker (http://kieker-monitoring.net)
+* OpenTelemetry (https://opentelemetry.io/)
+* inspectIT (https://inspectit.rocks/)
+
+## Benchmark Execution
+
+Initially, the following steps are required:
+1. Make sure, that you've installed R (http://www.r-project.org/) to generate the results , awk to install intermediate results and curl to download processing tools (Ubuntu: `sudo apt install r-base gawk curl`).
+2. Compile the application by calling `./gradlew assemble` in the main folder.
+
+All experiments are started with the provided "External Controller" scripts. The following scripts are available for every framework ($FRAMEWORK):
+* In `frameworks/$FRAMEWORK/benchmark.sh` a script is provided for regular execution (with default parameters)
+* In `frameworks/$FRAMEWORK/runExponentialSizes.sh` a script is provided for execution with different call tree depth sizes (exponentially growing from 2)
+
+Each scripts will start different factorial experiments (started `$NUM_OF_LOOPS` times for repeatability), which will be:
+- baseline execution
+- execution with instrumentation but without processing or serialization
+- execution with serialization to hard disc (currently not available for inspectIT)
+- execution with serialization to tcp receiver, which might be a simple receiver (Kieker), or Zikpin and Prometheus (OpenTelemetry and inspectIT)
+
+All scripts have been tested on Ubuntu and Raspbian. 
+
+The execution may be parameterized by the following environment variables:
+* SLEEP_TIME           between executions (default 30 seconds)
+* NUM_OF_LOOPS         number of repetitions (default 10)
+* THREADS              concurrent benchmarking threads (default 1)
+* RECURSION_DEPTH      recursion up to this depth (default 10)
+* TOTAL_NUM_OF_CALLS   the duration of the benchmark (deafult 2,000,000 calls)
+* METHOD_TIME          the time per monitored call (default 0 ns or 500 us)
+
+If they are unset, the values are set via `frameworks/common-function.sh`.
+
+Typical call (using Ubuntu):
+```
+export SLEEP_TIME=1 
+./gradlew assemble 
+cd frameworks/opentelemetry/ 
+./benchmark.sh
+```
+
+## Data Analysis
+Each benchmark execution calls an R script providing mean, standard deviation and confidence intervals for the benchmark variants. If you want to get these values again, switch to `frameworks` and call `runR.sh $FRAMEWORK`, where framework is the folder name of the framework (e.g. Kieker).
+
+If you got data from a run with exponential growing call tree depth, unzip them first (`for file in *.zip; do unzip $file; done`), copy all `results-$framework` folder to a common folder and run `./getExponential.sh` in analysis. This will create a graph for each framework and an overview graph for external processing of the traces (zipkin for OpenTelemetry and inspectIT, TCP for Kieker).
+
+In the folder /bin/r are some R scripts provided to generate graphs to visualize the results. In the top the files, one can configure the required paths and the configuration used to analyze the data.
diff --git a/analysis/getExponential.sh b/analysis/getExponential.sh
new file mode 100755
index 0000000000000000000000000000000000000000..95164d635de10fa22a5a05033ac8dc6aaba7738e
--- /dev/null
+++ b/analysis/getExponential.sh
@@ -0,0 +1,62 @@
+function getSum {
+	awk '{sum += $1; square += $1^2} END {print "Average: "sum/NR" Standard Deviation: "sqrt(square / NR - (sum/NR)^2)" Count: "NR}'
+}
+
+function getFileAverages {
+	variants=$(ls $1 | grep raw | awk -F'[-.]' '{print $4}' | sort | uniq)
+	for size in 2 4 8 16 32 64 128
+	do
+		for variant in $variants
+		do
+		        allExecutions=$(cat $1/raw-*-$size-$variant.csv | wc -l)
+		        for file in $(ls $1/raw-*-$size-$variant.csv)
+		        do
+		                fileSize=$(cat $file | wc -l)
+		                afterWarmup=$(($fileSize/2))
+		                average=$(tail -n $afterWarmup $file | awk -F';' '{print $2}' | getSum | awk '{print $2}')
+		                echo $variant";"$size";"$average
+		        done
+		done
+	done
+}
+
+function getFrameworkEvolutionFile {
+	folder=$1
+	framework=$2
+	getFileAverages $1/results-$framework/ > $RESULTFOLDER/$framework.csv
+	variants=$(cat $RESULTFOLDER/$framework.csv | awk -F';' '{print $1}' | sort | uniq)
+	for size in 2 4 8 16 32 64 128
+	do
+		echo -n "$size;"
+		for variant in $variants
+		do
+			cat $RESULTFOLDER/$framework.csv | grep "^$variant;$size;" | awk -F';' '{print $3}' | getSum | awk '{print $2";"$5";"}' | tr -d "\n"
+		done
+		echo
+	done > $RESULTFOLDER/evolution_$framework.csv
+}
+
+if [ "$#" -lt 1 ]; then
+	echo "Please pass the folder where results-Kieker, results-OpenTelemetry and results-inspectIT are"
+	exit 1
+fi
+
+if [ ! -d $1 ]; then
+	echo "$1 should be a folder, but is not."
+	exit 1
+fi
+
+RESULTFOLDER=../results
+if [ -d $RESULTFOLDER ]
+then
+	rm -rf $RESULTFOLDER/* 
+fi
+mkdir -p $RESULTFOLDER
+
+for framework in Kieker OpenTelemetry inspectIT
+do
+	echo "Analysing $framework"
+	getFrameworkEvolutionFile $1 $framework
+done
+
+gnuplot -c plotExponential.plt
diff --git a/analysis/getFileAverages.sh b/analysis/getFileAverages.sh
new file mode 100755
index 0000000000000000000000000000000000000000..0f0f85342e8b979ed9b73eee7e39a7f55a0fc073
--- /dev/null
+++ b/analysis/getFileAverages.sh
@@ -0,0 +1,19 @@
+function getSum {
+	awk '{sum += $1; square += $1^2} END {print "Average: "sum/NR" Standard Deviation: "sqrt(square / NR - (sum/NR)^2)" Count: "NR}'
+}
+
+variants=$(ls $1 | grep raw | awk -F'[-.]' '{print $4}' | sort | uniq)
+for size in 2 4 8 16 32 64 128
+do
+	for variant in $variants
+	do
+		allExecutions=$(cat $1/raw-*-$size-$variant.csv | wc -l)
+		for file in $(ls $1/raw-*-$size-$variant.csv)
+		do
+			fileSize=$(cat $file | wc -l)
+			afterWarmup=$(($fileSize/2))
+			average=$(tail -n $afterWarmup $file | awk -F';' '{print $2}' | getSum | awk '{print $2}')
+			echo $variant";"$size";"$average
+		done
+	done
+done
diff --git a/analysis/plotExponential.plt b/analysis/plotExponential.plt
new file mode 100644
index 0000000000000000000000000000000000000000..c00d61256e9e8d7c1bb17780e39392a81038060a
--- /dev/null
+++ b/analysis/plotExponential.plt
@@ -0,0 +1,116 @@
+set encoding iso_8859_1
+set terminal pdf size 8,5
+
+set datafile separator ";"
+
+set out '../results/Kieker.pdf'
+
+set title 'Kieker Method Execution Durations'
+
+set xlabel 'Call Tree Depth'
+set ylabel 'Duration {/Symbol m}s'
+
+set key right center
+	
+plot '../results/evolution_Kieker.csv' u 1:2 w linespoint lc "red" title 'Baseline', \
+	'../results/evolution_Kieker.csv' u 1:($2-$3):($2+$3) w filledcurves lc "red" notitle fs transparent solid 0.5, \
+     '../results/evolution_Kieker.csv' u 1:4 w linespoint lc "yellow" title 'Deactivated Probe', \
+	'../results/evolution_Kieker.csv' u 1:($4-$5):($4+$5) w filledcurves lc "yellow" notitle fs transparent solid 0.5, \
+     '../results/evolution_Kieker.csv' u 1:10 w linespoint lc "red" title 'Logging (Binary)', \
+	'../results/evolution_Kieker.csv' u 1:($10-$11):($10+$11) w filledcurves lc "red" notitle fs transparent solid 0.5, \
+     '../results/evolution_Kieker.csv' u 1:12 w linespoint lc "blue" title 'TCP', \
+        '../results/evolution_Kieker.csv' u 1:($12-$13):($12+$13) w filledcurves lc "blue" notitle fs transparent solid 0.5
+#     '../results/evolution_Kieker.csv' u 1:8 w linespoint lc "green" title 'Logging (Text)', \
+#	'../results/evolution_Kieker.csv' u 1:($8-$9):($8+$9) w filledcurves lc "green" notitle fs transparent solid 0.5, \
+# Activate this, if text logging should be displayed (very big, so disabled by default)	
+	
+unset output
+
+set out '../results/OpenTelemetry.pdf'
+
+set title 'OpenTelemetry Method Execution Durations'
+
+set xlabel 'Call Tree Depth'
+set ylabel 'Duration {/Symbol m}s'
+
+set key right center
+	
+plot '../results/evolution_OpenTelemetry.csv' u 1:2 w linespoint lc "red" title 'Baseline', \
+	'../results/evolution_OpenTelemetry.csv' u 1:($2-$3):($2+$3) w filledcurves lc "red" notitle fs transparent solid 0.5, \
+     '../results/evolution_OpenTelemetry.csv' u 1:4 w linespoint lc "yellow" title 'No Logging', \
+	'../results/evolution_OpenTelemetry.csv' u 1:($4-$5):($4+$5) w filledcurves lc "yellow" notitle fs transparent solid 0.5, \
+     '../results/evolution_OpenTelemetry.csv' u 1:8 w linespoint lc "red" title 'Zipkin', \
+	'../results/evolution_OpenTelemetry.csv' u 1:($8-$9):($8+$9) w filledcurves lc "red" notitle fs transparent solid 0.5, \
+     '../results/evolution_OpenTelemetry.csv' u 1:10 w linespoint lc "blue" title 'Prometheus', \
+        '../results/evolution_OpenTelemetry.csv' u 1:($10-$11):($10+$11) w filledcurves lc "blue" notitle fs transparent solid 0.5
+
+#    'evolution_OpenTelemetry.csv' u 1:6 w linespoint lc "green" title 'Logging (Text)', \
+#	'evolution_OpenTelemetry.csv' u 1:($6-$7):($6+$7) w filledcurves lc "green" notitle fs transparent solid 0.5, \
+# Activate this, if text logging should be displayed (very big, so disabled by default)	
+	
+unset output
+
+set out '../results/inspectIT.pdf'
+
+set title 'inspectIT Method Execution Durations'
+
+set xlabel 'Call Tree Depth'
+set ylabel 'Duration {/Symbol m}s'
+
+set key right center
+	
+plot '../results/evolution_inspectIT.csv' u 1:2 w linespoint lc "red" title 'Baseline', \
+	'../results/evolution_inspectIT.csv' u 1:($2-$3):($2+$3) w filledcurves lc "red" notitle fs transparent solid 0.5, \
+     '../results/evolution_inspectIT.csv' u 1:4 w linespoint lc "yellow" title 'No Logging', \
+	'../results/evolution_inspectIT.csv' u 1:($4-$5):($4+$5) w filledcurves lc "yellow" notitle fs transparent solid 0.5, \
+     '../results/evolution_inspectIT.csv' u 1:6 w linespoint lc "red" title 'Zipkin', \
+	'../results/evolution_inspectIT.csv' u 1:($6-$7):($6+$7) w filledcurves lc "red" notitle fs transparent solid 0.5, \
+     '../results/evolution_inspectIT.csv' u 1:8 w linespoint lc "blue" title 'Prometheus', \
+        '../results/evolution_inspectIT.csv' u 1:($8-$9):($8+$9) w filledcurves lc "blue" notitle fs transparent solid 0.5
+
+	
+unset output
+
+set terminal pdf size 5,3
+
+set out '../results/overview.pdf'
+
+set title 'Overview of Method Execution Durations'
+
+set xlabel 'Call Tree Depth'
+set ylabel 'Duration {/Symbol m}s'
+
+set key left top
+	
+plot '../results/evolution_inspectIT.csv' u 1:2 w linespoint lc "red" title 'Baseline', \
+	'../results/evolution_inspectIT.csv' u 1:($2-$3):($2+$3) w filledcurves lc "red" notitle fs transparent solid 0.5, \
+     '../results/evolution_Kieker.csv' u 1:12 w linespoint lc "blue" title 'Kieker (TCP)', \
+        '../results/evolution_Kieker.csv' u 1:($12-$13):($12+$13) w filledcurves lc "blue" notitle fs transparent solid 0.5, \
+     '../results/evolution_inspectIT.csv' u 1:6 w linespoint lc rgb "#c66900" title 'inspectIT (Zipkin)', \
+	'../results/evolution_inspectIT.csv' u 1:($6-$7):($6+$7) w filledcurves lc rgb "#c66900" notitle fs transparent solid 0.5, \
+     '../results/evolution_OpenTelemetry.csv' u 1:8 w linespoint lc "green" title 'OpenTelemetry (Zipkin)', \
+	'../results/evolution_OpenTelemetry.csv' u 1:($8-$9):($8+$9) w filledcurves lc "green" notitle fs transparent solid 0.5
+
+	
+unset output
+
+set out '../results/overview_opentelemetry.pdf'
+
+set title 'Overview of Method Execution Durations'
+
+set xlabel 'Call Tree Depth'
+set ylabel 'Duration {/Symbol m}s'
+
+set key left top
+	
+plot '../results/evolution_inspectIT.csv' u 1:2 w linespoint lc "red" title 'Baseline', \
+	'../results/evolution_inspectIT.csv' u 1:($2-$3):($2+$3) w filledcurves lc "red" notitle fs transparent solid 0.5, \
+     '../results/evolution_OpenTelemetry.csv' u 1:4 w linespoint lc "blue" title 'OpenTelemetry (No Logging)', \
+	'../results/evolution_OpenTelemetry.csv' u 1:($4-$5):($4+$5) w filledcurves lc "blue" notitle fs transparent solid 0.5, \
+     '../results/evolution_inspectIT.csv' u 1:6 w linespoint lc rgb "#c66900" title 'inspectIT (Zipkin)', \
+	'../results/evolution_inspectIT.csv' u 1:($6-$7):($6+$7) w filledcurves lc rgb "#c66900" notitle fs transparent solid 0.5, \
+     '../results/evolution_OpenTelemetry.csv' u 1:8 w linespoint lc "green" title 'OpenTelemetry (Zipkin)', \
+	'../results/evolution_OpenTelemetry.csv' u 1:($8-$9):($8+$9) w filledcurves lc "green" notitle fs transparent solid 0.5
+
+	
+unset output
diff --git a/benchmark/build.gradle b/benchmark/build.gradle
index 514b30e9ed1ac1aabe3c2f2a430ae4593546a5d3..3705a9b362cf00e5223460e20b6e8c48bf7c0c4d 100644
--- a/benchmark/build.gradle
+++ b/benchmark/build.gradle
@@ -7,6 +7,40 @@ dependencies {
     implementation 'com.beust:jcommander:1.72'
 }
 
-application {
-    mainClass = 'moobench.benchmark.BenchmarkMain'
+jar {
+    manifest {
+        attributes 'Implementation-Title': 'Moobench Benchmark',
+                   'Implementation-Version': '0.1-SNAPSHOT',
+                   'Main-Class': 'moobench.benchmark.BenchmarkMain'
+    }
+    
+    from sourceSets.main.output
+
+	dependsOn configurations.runtimeClasspath
+	from {
+    	configurations.runtimeClasspath.findAll { it.name.endsWith('jar') }.collect { zipTree(it) }
+	}
+	
+	doLast {
+		copy {
+		    from jar
+		    into "../frameworks/SPASSmeter/"
+		    rename('benchmark.jar', 'MooBench.jar')
+	    }
+	    copy {
+		    from jar
+		    into "../frameworks/OpenTelemetry/"
+		    rename('benchmark.jar', 'MooBench.jar')
+	    }
+	    copy {
+		    from jar
+		    into "../frameworks/inspectIT/"
+		    rename('benchmark.jar', 'MooBench.jar')
+	    }
+	    copy {
+		    from jar
+		    into "../frameworks/Kieker/"
+		    rename('benchmark.jar', 'MooBench.jar')
+	    }
+	}
 }
diff --git a/benchmark/src/main/java/moobench/benchmark/BenchmarkMain.java b/benchmark/src/main/java/moobench/benchmark/BenchmarkMain.java
index e1c5a86002f9a306757eef98717ff55cec277735..a0d7b4dc982ba61a23b710239c5eadcf6d897d9b 100644
--- a/benchmark/src/main/java/moobench/benchmark/BenchmarkMain.java
+++ b/benchmark/src/main/java/moobench/benchmark/BenchmarkMain.java
@@ -148,6 +148,7 @@ public final class BenchmarkMain {
 				commander.usage();
 			}
 			System.out.println(ex.toString()); // NOPMD (Stacktrace)
+			ex.printStackTrace();
 			System.exit(-1);
 		}
 	}
diff --git a/frameworks/Kieker/Benchmark (Kicker).launch b/frameworks/Kieker/Benchmark (Kicker).launch
deleted file mode 100644
index 43cf8336cd59e1045fb26bb8d226e0a8251980c1..0000000000000000000000000000000000000000
--- a/frameworks/Kieker/Benchmark (Kicker).launch	
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/MooBench/src/mooBench/benchmark/Benchmark.java"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="mooBench.benchmark.Benchmark"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-d 10 -h 1 -m 0 -t 10 -o tmp/test.txt -q -a mooBench.monitoredApplication.MonitoredClassManualInstrumentation"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="MooBench"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:frameworks/Kieker/lib/kicker-1.10_aspectj.jar&#13;&#10;-Dkicker.monitoring.debug=true&#13;&#10;-Dkicker.monitoring.skipDefaultAOPConfiguration=true&#13;&#10;-Dkicker.monitoring.writer=kicker.monitoring.writer.filesystem.AsyncFsWriter"/>
-</launchConfiguration>
diff --git a/frameworks/Kieker/Benchmark (Kicker-objectinterfaces).launch b/frameworks/Kieker/Benchmark (Kicker-objectinterfaces).launch
deleted file mode 100644
index 944b3f2bc26a626970cc7e230f9e7af78fe89cbe..0000000000000000000000000000000000000000
--- a/frameworks/Kieker/Benchmark (Kicker-objectinterfaces).launch	
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/MooBench/src/mooBench/benchmark/Benchmark.java"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="mooBench.benchmark.Benchmark"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-d 10 -h 1 -m 0 -t 10 -o tmp/test.txt -q -a mooBench.monitoredApplication.MonitoredClassManualInstrumentation"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="MooBench"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:frameworks/Kieker/lib/kicker-1.10_aspectj.jar&#13;&#10;-Dkicker.monitoring.debug=true&#13;&#10;-Dkicker.monitoring.skipDefaultAOPConfiguration=true&#13;&#10;-Dkicker.monitoring.writer=kicker.monitoring.writer.filesystem.AsyncFsWriter&#13;&#10;-Dorg.aspectj.weaver.loadtime.configuration=META-INF/aop-objectinterfaces.xml"/>
-</launchConfiguration>
diff --git a/frameworks/Kieker/Benchmark (Kicker-objects).launch b/frameworks/Kieker/Benchmark (Kicker-objects).launch
deleted file mode 100644
index f570d79be163b315d49ace06215f96ca2e8674ab..0000000000000000000000000000000000000000
--- a/frameworks/Kieker/Benchmark (Kicker-objects).launch	
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/MooBench/src/mooBench/benchmark/Benchmark.java"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="mooBench.benchmark.Benchmark"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-d 10 -h 1 -m 0 -t 10 -o tmp/test.txt -q -a mooBench.monitoredApplication.MonitoredClassManualInstrumentation"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="MooBench"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:frameworks/Kieker/lib/kicker-1.10_aspectj.jar&#13;&#10;-Dkicker.monitoring.debug=true&#13;&#10;-Dkicker.monitoring.skipDefaultAOPConfiguration=true&#13;&#10;-Dkicker.monitoring.writer=kicker.monitoring.writer.filesystem.AsyncFsWriter&#13;&#10;-Dorg.aspectj.weaver.loadtime.configuration=META-INF/aop-objects.xml"/>
-</launchConfiguration>
diff --git a/frameworks/Kieker/Benchmark (Kieker).launch b/frameworks/Kieker/Benchmark (Kieker).launch
deleted file mode 100644
index b2f4493cb912b8397637950634a8d53bd2dc1e5d..0000000000000000000000000000000000000000
--- a/frameworks/Kieker/Benchmark (Kieker).launch	
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/MooBench/src/mooBench/benchmark/Benchmark.java"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="mooBench.benchmark.Benchmark"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-d 10 -h 1 -m 0 -t 1000000 -o tmp/test.txt -q"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="MooBench"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:frameworks/Kieker/lib/kieker-1.11-SNAPSHOT_aspectj.jar&#13;&#10;-Dorg.aspectj.weaver.loadtime.configuration=META-INF/kieker.aop.xml&#13;&#10;-Dorg.aspectj.weaver.showWeaveInfo=true -Daj.weaving.verbose=true&#13;&#10;-Dkieker.monitoring.writer=kieker.monitoring.writer.tcp.TCPWriter"/>
-</launchConfiguration>
diff --git a/frameworks/Kieker/scripts/benchmark.sh b/frameworks/Kieker/benchmark.sh
similarity index 77%
rename from frameworks/Kieker/scripts/benchmark.sh
rename to frameworks/Kieker/benchmark.sh
index 98a83367d3ff73b286fd9bcd05ee8e572c9a3492..af95c4ac5aad0cc8da9a44d1c9d6d25eca5652c5 100755
--- a/frameworks/Kieker/scripts/benchmark.sh
+++ b/frameworks/Kieker/benchmark.sh
@@ -15,6 +15,16 @@ else
 	echo "Missing configuration: ${BASE_DIR}/config"
 	exit 1
 fi
+
+source ../common-functions.sh
+
+getKiekerAgent
+
+# copy receiver
+tar -xvpf ${BASE_DIR}/../../tools/receiver/build/distributions/receiver.tar
+# copy result compiler
+tar -xvpf ${BASE_DIR}/../../tools/compile-results/build/distributions/compile-results.tar
+
 if [ -f "${BASE_DIR}/common-functions" ] ; then
 	. ${BASE_DIR}/common-functions
 else
@@ -42,34 +52,26 @@ checkDirectory DATA_DIR "${DATA_DIR}" create
 PARENT=`dirname "${RESULTS_DIR}"`
 checkDirectory result-base "$PARENT"
 checkFile ApsectJ-Agent "${AGENT}"
-checkFile moobench "${BENCHMARK}"
 
 information "----------------------------------"
 information "Running benchmark..."
 information "----------------------------------"
 
-FIXED_PARAMETERS="--quickstart -a moobench.application.MonitoredClassSimple"
-
 TIME=`expr ${METHOD_TIME} \* ${TOTAL_NUM_OF_CALLS} / 1000000000 \* 4 \* ${RECURSION_DEPTH} \* ${NUM_OF_LOOPS} + ${SLEEP_TIME} \* 4 \* ${NUM_OF_LOOPS}  \* ${RECURSION_DEPTH} + 50 \* ${TOTAL_NUM_OF_CALLS} / 1000000000 \* 4 \* ${RECURSION_DEPTH} \* ${NUM_OF_LOOPS} `
 information "Experiment will take circa ${TIME} seconds."
 
 information "Removing and recreating '$RESULTS_DIR'"
-(rm -rf ${RESULTS_DIR}) && mkdir -p ${RESULTS_DIR}
+(rm -rf ${RESULTS_DIR}/*csv) && mkdir -p ${RESULTS_DIR}
 
 # Clear kieker.log and initialize logging
 rm -f ${DATA_DIR}/kieker.log
 touch ${DATA_DIR}/kieker.log
 
-RAWFN="${RESULTS_DIR}/raw"
-
 # general server arguments
 JAVA_ARGS="-server"
-JAVA_ARGS="${JAVA_ARGS} -d64"
-JAVA_ARGS="${JAVA_ARGS} -Xms1G -Xmx4G"
-
-JAVA_OPTS="${FIXED_PARAMETERS}"
+JAVA_ARGS="${JAVA_ARGS} -Xms1G -Xmx2G"
 
-LTW_ARGS="-javaagent:${AGENT} -Dorg.aspectj.weaver.showWeaveInfo=false -Daj.weaving.verbose=false -Dkieker.monitoring.skipDefaultAOPConfiguration=true -Dorg.aspectj.weaver.loadtime.configuration=${AOP}"
+LTW_ARGS="-javaagent:${AGENT} -Dorg.aspectj.weaver.showWeaveInfo=true -Daj.weaving.verbose=true -Dkieker.monitoring.skipDefaultAOPConfiguration=true -Dorg.aspectj.weaver.loadtime.configuration=${AOP}"
 
 KIEKER_ARGS="-Dlog4j.configuration=log4j.cfg -Dkieker.monitoring.name=KIEKER-BENCHMARK -Dkieker.monitoring.adaptiveMonitoring.enabled=false -Dkieker.monitoring.periodicSensorsExecutorPoolSize=0"
 
@@ -81,37 +83,16 @@ declare -a RECEIVER
 declare -a TITLE
 
 # Configurations
-TITLE[0]="No instrumentation"
+source labels.sh
 WRITER_CONFIG[0]=""
-
-TITLE[1]="Deactivated probe"
 WRITER_CONFIG[1]="-Dkieker.monitoring.enabled=false -Dkieker.monitoring.writer=kieker.monitoring.writer.dump.DumpWriter"
-
-TITLE[2]="No logging (null writer)"
 WRITER_CONFIG[2]="-Dkieker.monitoring.enabled=true -Dkieker.monitoring.writer=kieker.monitoring.writer.dump.DumpWriter"
-
-TITLE[3]="Logging (Generic Text)"
 WRITER_CONFIG[3]="-Dkieker.monitoring.enabled=true -Dkieker.monitoring.writer=kieker.monitoring.writer.filesystem.FileWriter -Dkieker.monitoring.writer.filesystem.FileWriter.logStreamHandler=kieker.monitoring.writer.filesystem.TextLogStreamHandler -Dkieker.monitoring.writer.filesystem.FileWriter.customStoragePath=${DATA_DIR}/"
-
-TITLE[4]="Logging (Generic Bin)"
 WRITER_CONFIG[4]="-Dkieker.monitoring.enabled=true -Dkieker.monitoring.writer=kieker.monitoring.writer.filesystem.FileWriter -Dkieker.monitoring.writer.filesystem.FileWriter.logStreamHandler=kieker.monitoring.writer.filesystem.BinaryLogStreamHandler -Dkieker.monitoring.writer.filesystem.FileWriter.bufferSize=8192 -Dkieker.monitoring.writer.filesystem.FileWriter.customStoragePath=${DATA_DIR}/"
-
-TITLE[5]="Logging (Single TCP)"
 WRITER_CONFIG[5]="-Dkieker.monitoring.writer=kieker.monitoring.writer.tcp.SingleSocketTcpWriter -Dkieker.monitoring.writer.tcp.SingleSocketTcpWriter.port=2345"
-#RECEIVER[5]="${BASE_DIR}/collector-2.0/bin/collector -p 2345"
+RECEIVER[5]="${BASE_DIR}/collector-2.0/bin/collector -p 2345"
 RECEIVER[5]="${BASE_DIR}/receiver/bin/receiver 2345"
 
-# Create R labels
-LABELS=""
-for I in "${TITLE[@]}" ; do
-	title="$I"
-	if [ "$LABELS" == "" ] ; then
-		LABELS="\"$title\""
-	else
-		LABELS="${LABELS}, \"$title\""
-	fi
-done
-
 ## Write configuration
 uname -a >${RESULTS_DIR}/configuration.txt
 ${JAVA_BIN} ${JAVA_ARGS} -version 2>>${RESULTS_DIR}/configuration.txt
@@ -152,13 +133,16 @@ function execute-experiment() {
     else
        BENCHMARK_OPTS="${JAVA_ARGS} ${LTW_ARGS} ${KIEKER_ARGS} ${kieker_parameters}"
     fi
+    
+    echo ${BENCHMARK_OPTS}" -jar MooBench.jar"
 
-    ${BENCHMARK} \
+    ${JAVABIN}java ${BENCHMARK_OPTS} -jar MooBench.jar \
+	--application moobench.application.MonitoredClassSimple \
         --output-filename ${RAWFN}-${loop}-${recursion}-${index}.csv \
         --total-calls ${TOTAL_NUM_OF_CALLS} \
         --method-time ${METHOD_TIME} \
         --total-threads 1 \
-        --recursion-depth ${recursion}
+        --recursion-depth ${recursion} &> ${RESULTS_DIR}/output_"$loop"_"$RECURSION_DEPTH"_$index.txt
 
     rm -rf ${DATA_DIR}/kieker-*
 
@@ -193,12 +177,14 @@ function execute-benchmark() {
   for ((loop=1;loop<=${NUM_OF_LOOPS};loop+=1)); do
     recursion=${RECURSION_DEPTH}
 
-    information "## Starting iteration ${i}/${NUM_OF_LOOPS}"
-    echo "## Starting iteration ${i}/${NUM_OF_LOOPS}" >>${DATA_DIR}/kieker.log
+    information "## Starting iteration ${loop}/${NUM_OF_LOOPS}"
+    echo "## Starting iteration ${loop}/${NUM_OF_LOOPS}" >>${DATA_DIR}/kieker.log
 
     for ((index=0;index<${#WRITER_CONFIG[@]};index+=1)); do
       execute-benchmark-body $index $loop $recursion
     done
+    
+    printIntermediaryResults
   done
 
   mv ${DATA_DIR}/kieker.log ${RESULTS_DIR}/kieker.log
@@ -206,29 +192,6 @@ function execute-benchmark() {
   [ -f ${DATA_DIR}/errorlog.txt ] && mv ${DATA_DIR}/errorlog.txt ${RESULTS_DIR}
 }
 
-## Generate Results file
-function run-r() {
-R --vanilla --silent << EOF
-results_fn="${RAWFN}"
-outtxt_fn="${RESULTS_DIR}/results-text.txt"
-outcsv_fn="${RESULTS_DIR}/results-text.csv"
-configs.loop=${NUM_OF_LOOPS}
-configs.recursion=${RECURSION_DEPTH}
-configs.labels=c($LABELS)
-results.count=${TOTAL_NUM_OF_CALLS}
-results.skip=${TOTAL_NUM_OF_CALLS}/2
-source("${RSCRIPT_PATH}")
-EOF
-}
-
-## Clean up raw results
-function cleanup-results() {
-  zip -jqr ${RESULTS_DIR}/results.zip ${RAWFN}*
-  rm -f ${RAWFN}*
-  [ -f ${DATA_DIR}/nohup.out ] && cp ${DATA_DIR}/nohup.out ${RESULTS_DIR}
-  [ -f ${DATA_DIR}/nohup.out ] && > ${DATA_DIR}/nohup.out
-}
-
 ## Execute benchmark
 if [ "$MODE" == "execute" ] ; then
    if [ "$OPTION" == "" ] ; then
@@ -236,7 +199,11 @@ if [ "$MODE" == "execute" ] ; then
    else
      execute-benchmark-body $OPTION 1 1
    fi
+   
+   # Create R labels
+   LABELS=$(createRLabels)
    run-r
+   
    cleanup-results
 else
    execute-benchmark-body $OPTION 1 1
diff --git a/frameworks/Kieker/scripts/common-functions b/frameworks/Kieker/common-functions
similarity index 100%
rename from frameworks/Kieker/scripts/common-functions
rename to frameworks/Kieker/common-functions
diff --git a/frameworks/Kieker/config b/frameworks/Kieker/config
new file mode 100644
index 0000000000000000000000000000000000000000..5ed8d82e0f7b0dda6de73f0ecb63f100f57e5821
--- /dev/null
+++ b/frameworks/Kieker/config
@@ -0,0 +1,17 @@
+##
+# MooBench configuration parameter
+
+# path setup
+JAVA_BIN="java"
+
+RSCRIPT_PATH="../stats.csv.r"
+
+DATA_DIR="${BASE_DIR}/data"
+AGENT="${BASE_DIR}/kieker-1.15-SNAPSHOT-aspectj.jar"
+
+BATCH_MODE="yes"
+
+# in-jar locations
+AOP="file:"$(pwd)"/src/META-INF/kieker.aop.xml"
+
+# end
diff --git a/frameworks/Kieker/labels.sh b/frameworks/Kieker/labels.sh
new file mode 100644
index 0000000000000000000000000000000000000000..840ec0512d93a865bb92ea65e0070a93b448e6f3
--- /dev/null
+++ b/frameworks/Kieker/labels.sh
@@ -0,0 +1,6 @@
+TITLE[0]="No instrumentation"
+TITLE[1]="Deactivated probe"
+TITLE[2]="No logging (null writer)"
+TITLE[3]="Logging (Generic Text)"
+TITLE[4]="Logging (Generic Bin)"
+TITLE[5]="Logging (Single TCP)"
diff --git a/frameworks/Kieker/scripts/run-benchmark.sh b/frameworks/Kieker/run-benchmark.sh
similarity index 71%
rename from frameworks/Kieker/scripts/run-benchmark.sh
rename to frameworks/Kieker/run-benchmark.sh
index 4a2b5854afbccb50180c448ae3179f7d71858d1d..b80da7c8f2ae923edcbbd11ed758c27c3a1d94f3 100755
--- a/frameworks/Kieker/scripts/run-benchmark.sh
+++ b/frameworks/Kieker/run-benchmark.sh
@@ -28,10 +28,6 @@ cd ${BASE_DIR}
 ## setup
 # install benchmark
 tar -xvpf ${BASE_DIR}/../../../benchmark/build/distributions/benchmark.tar
-# get agent
-export VERSION_PATH=`curl "https://oss.sonatype.org/service/local/repositories/snapshots/content/net/kieker-monitoring/kieker/" | grep '<resourceURI>' | sed 's/ *<resourceURI>//g' | sed 's/<\/resourceURI>//g' | grep '/$'`
-export AGENT_PATH=`curl "${VERSION_PATH}" | grep 'aspectj.jar</resourceURI' | sort | sed 's/ *<resourceURI>//g' | sed 's/<\/resourceURI>//g' | tail -1`
-curl "${AGENT_PATH}" > "${AGENT}"
 # copy receiver
 tar -xvpf ${BASE_DIR}/../../../tools/receiver/build/distributions/receiver.tar
 # copy result compiler
diff --git a/frameworks/Kieker/runExponentialSizes.sh b/frameworks/Kieker/runExponentialSizes.sh
new file mode 100755
index 0000000000000000000000000000000000000000..f08d60347cb4122fa7fccc0f0dde8d2cbd696231
--- /dev/null
+++ b/frameworks/Kieker/runExponentialSizes.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+RESULTS_DIR=results-Kieker/
+mkdir -p $RESULTS_DIR
+
+for depth in 2 4 8 16 32 64 128
+do
+	export RECURSION_DEPTH=$depth
+	echo "Running $depth"
+	./benchmark.sh &> $RESULTS_DIR/$depth.txt
+	mv $RESULTS_DIR/results.zip $RESULTS_DIR/results-$RECURSION_DEPTH.zip
+done
diff --git a/frameworks/Kieker/scripts/config b/frameworks/Kieker/scripts/config
deleted file mode 100644
index 9f2084f620f4cf20947bd4218e768a7f7b8342a0..0000000000000000000000000000000000000000
--- a/frameworks/Kieker/scripts/config
+++ /dev/null
@@ -1,26 +0,0 @@
-##
-# MooBench configuration parameter
-
-# path setup
-JAVA_BIN="java"
-
-RSCRIPT_PATH="${BASE_DIR}/stats.csv.r"
-
-DATA_DIR="${BASE_DIR}/data"
-RESULTS_DIR="${BASE_DIR}/results-kieker"
-AGENT="${BASE_DIR}/kieker-1.15-SNAPSHOT-aspectj.jar"
-BENCHMARK="${BASE_DIR}/benchmark/bin/benchmark"
-
-BATCH_MODE="yes"
-
-# in-jar locations
-AOP="kieker.aop.xml"
-
-# execution parameter
-SLEEP_TIME=1                    ## 30
-NUM_OF_LOOPS=10                 ## 10
-RECURSION_DEPTH=10              ## 10
-TOTAL_NUM_OF_CALLS=2000 #0        ## 2 000 000
-METHOD_TIME=5 #00               ## 500000
-
-# end
diff --git a/frameworks/Kieker/src/META-INF/kieker.aop.xml b/frameworks/Kieker/src/META-INF/kieker.aop.xml
index 579e6609746abaeec5fb9c13c6417c745ce45895..8ebe6f38f83cf1e5213d8d74149c6801bfef0218 100644
--- a/frameworks/Kieker/src/META-INF/kieker.aop.xml
+++ b/frameworks/Kieker/src/META-INF/kieker.aop.xml
@@ -1,7 +1,7 @@
 <!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.aspectj.org/dtd/aspectj_1_5_0.dtd">
 <aspectj>
     <weaver options="">
-        <include within="mooBench.monitoredApplication.*"/>
+        <include within="moobench.application.*"/>
     </weaver>
     <aspects>
         <aspect name="kieker.monitoring.probe.aspectj.flow.operationExecution.FullInstrumentation" />
diff --git a/frameworks/Kieker/scripts/stats.csv.r b/frameworks/Kieker/stats.csv.r
similarity index 94%
rename from frameworks/Kieker/scripts/stats.csv.r
rename to frameworks/Kieker/stats.csv.r
index 7d3e21f069b0da249d2581c2f5272886d5ff3caa..8ba1ca1098b033fb93f7b5d5c61016c066c3af31 100644
--- a/frameworks/Kieker/scripts/stats.csv.r
+++ b/frameworks/Kieker/stats.csv.r
@@ -67,9 +67,9 @@ for (writer_idx in (1:numberOfWriters)) {
 qnorm_value <- qnorm(0.975)
 
 # print results
-printDimensionNames <- list(c("mean","ci95%","md25%","md50%","md75%","max","min"), c(1:numberOfWriters))
+printDimensionNames <- list(c("mean","sd","ci95%","md25%","md50%","md75%","max","min"), c(1:numberOfWriters))
 # row number == number of computed result values, e.g., mean, min, max
-printvalues <- matrix(nrow=7, ncol=numberOfWriters, dimnames=printDimensionNames)
+printvalues <- matrix(nrow=8, ncol=numberOfWriters, dimnames=printDimensionNames)
 
 for (writer_idx in (1:numberOfWriters)) {
    idx_mult <- c(1:numOfRowsToRead)
@@ -77,6 +77,7 @@ for (writer_idx in (1:numberOfWriters)) {
    valuesBIG <- resultsBIG[writer_idx,idx_mult]/timeUnit
 
    printvalues["mean",writer_idx] <- mean(valuesBIG)
+   printvalues["sd",writer_idx] <- sd(valuesBIG)
    printvalues["ci95%",writer_idx] <- qnorm_value*sd(valuesBIG)/sqrt(length(valuesBIG))
    printvalues[c("md25%","md50%","md75%"),writer_idx] <- quantile(valuesBIG, probs=c(0.25, 0.5, 0.75))
    printvalues["max",writer_idx] <- max(valuesBIG)
diff --git a/frameworks/OpenTelemetry/benchmark.sh b/frameworks/OpenTelemetry/benchmark.sh
new file mode 100755
index 0000000000000000000000000000000000000000..0d7173ba7a954cd3d4b1edb8ddae16a2d2f6a5a2
--- /dev/null
+++ b/frameworks/OpenTelemetry/benchmark.sh
@@ -0,0 +1,197 @@
+#!/bin/bash
+
+function startJaeger {
+	if [ ! -d jaeger-1.24.0-linux-amd64 ]
+	then
+		wget https://github.com/jaegertracing/jaeger/releases/download/v1.24.0/jaeger-1.24.0-linux-amd64.tar.gz
+		tar -xvf jaeger-1.24.0-linux-amd64.tar.gz
+		rm jaeger-1.24.0-linux-amd64.tar.gz
+	fi
+	cd jaeger-1.24.0-linux-amd64
+	./jaeger-all-in-one &> jaeger.log &
+	cd ..
+}
+
+function cleanup {
+	[ -f ${BASE_DIR}hotspot.log ] && mv ${BASE_DIR}hotspot.log ${RESULTS_DIR}hotspot-${i}-$RECURSION_DEPTH-${k}.log
+	echo >>${BASE_DIR}/OpenTelemetry.log
+	echo >>${BASE_DIR}/OpenTelemetry.log
+	sync
+	sleep ${SLEEP_TIME}
+}
+
+function runNoInstrumentation {
+    # No instrumentation
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]}
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/OpenTelemetry.log
+    ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \
+        --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \
+        --total-calls ${TOTAL_NUM_OF_CALLS} \
+        --method-time ${METHOD_TIME} \
+        --total-threads ${THREADS} \
+        --recursion-depth $RECURSION_DEPTH \
+        ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt
+}
+
+function runOpenTelemetryNoLogging {
+    # OpenTelemetry Instrumentation Logging Deactivated
+    k=`expr ${k} + 1`
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]}
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/OpenTelemetry.log
+    ${JAVABIN}java ${JAVAARGS_OPENTELEMETRY_LOGGING_DEACTIVATED} ${JAR} \
+        --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \
+        --total-calls ${TOTAL_NUM_OF_CALLS} \
+        --method-time ${METHOD_TIME} \
+        --total-threads ${THREADS} \
+        --recursion-depth $RECURSION_DEPTH \
+        ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt
+}
+
+function runOpenTelemetryLogging {
+    # OpenTelemetry Instrumentation Logging
+    k=`expr ${k} + 1`
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]}
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/OpenTelemetry.log
+    ${JAVABIN}java ${JAVAARGS_OPENTELEMETRY_LOGGING} ${JAR} \
+        --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \
+        --total-calls ${TOTAL_NUM_OF_CALLS} \
+        --method-time ${METHOD_TIME} \
+        --total-threads ${THREADS} \
+        --recursion-depth $RECURSION_DEPTH \
+        ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt
+    if [ ! "$DEBUG" = true ]
+    then
+    	echo "DEBUG is $DEBUG, deleting opentelemetry logging file"
+    	rm ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt
+    fi
+}
+
+function runOpenTelemetryZipkin {
+    # OpenTelemetry Instrumentation Zipkin
+    k=`expr ${k} + 1`
+    startZipkin
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]}
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/OpenTelemetry.log
+    ${JAVABIN}java ${JAVAARGS_OPENTELEMETRY_ZIPKIN} ${JAR} \
+        --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \
+        --total-calls ${TOTAL_NUM_OF_CALLS} \
+        --method-time ${METHOD_TIME} \
+        --total-threads ${THREADS} \
+        --recursion-depth $RECURSION_DEPTH \
+        ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt
+    stopBackgroundProcess
+    sleep $SLEEP_TIME
+}
+
+function runOpenTelemetryJaeger {
+	# OpenTelemetry Instrumentation Jaeger
+	k=`expr ${k} + 1`
+	startJaeger
+	echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]}
+	echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/OpenTelemetry.log
+	${JAVABIN}java ${JAVAARGS_OPENTELEMETRY_JAEGER} ${JAR} \
+		--output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \
+		--total-calls ${TOTAL_NUM_OF_CALLS} \
+		--method-time ${METHOD_TIME} \
+		--total-threads ${THREADS} \
+		--recursion-depth $RECURSION_DEPTH \
+		${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt
+	stopBackgroundProcess
+	sleep $SLEEP_TIME
+}
+
+function runOpenTelemetryPrometheus {
+	# OpenTelemetry Instrumentation Prometheus
+	k=`expr ${k} + 1`
+	startPrometheus
+	echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]}
+	echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/OpenTelemetry.log
+	${JAVABIN}java ${JAVAARGS_OPENTELEMETRY_PROMETHEUS} ${JAR} \
+		--output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \
+		--total-calls ${TOTAL_NUM_OF_CALLS} \
+		--method-time ${METHOD_TIME} \
+		--total-threads ${THREADS} \
+		--recursion-depth $RECURSION_DEPTH \
+		${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt
+	stopBackgroundProcess
+	sleep $SLEEP_TIME
+}
+
+JAVABIN=""
+
+BASE_DIR=$(pwd)
+RSCRIPT_PATH="../stats.csv.r"
+
+source ../common-functions.sh
+source labels.sh
+
+#MOREPARAMS="--quickstart"
+MOREPARAMS="--application moobench.application.MonitoredClassSimple ${MOREPARAMS}"
+
+TIME=`expr ${METHOD_TIME} \* ${TOTAL_NUM_OF_CALLS} / 1000000000 \* 4 \* ${RECURSION_DEPTH} \* ${NUM_OF_LOOPS} + ${SLEEP_TIME} \* 4 \* ${NUM_OF_LOOPS}  \* ${RECURSION_DEPTH} + 50 \* ${TOTAL_NUM_OF_CALLS} / 1000000000 \* 4 \* ${RECURSION_DEPTH} \* ${NUM_OF_LOOPS} `
+echo "Experiment will take circa ${TIME} seconds."
+
+echo "Cleaning and recreating '$RESULTS_DIR'"
+(rm -rf ${RESULTS_DIR}/**csv) && mkdir -p ${RESULTS_DIR}
+#mkdir ${RESULTS_DIR}stat/
+
+# Clear OpenTelemetry.log and initialize logging
+rm -f ${BASE_DIR}/OpenTelemetry.log
+touch ${BASE_DIR}/OpenTelemetry.log
+
+JAVAARGS="-server"
+JAVAARGS="${JAVAARGS} "
+JAVAARGS="${JAVAARGS} -Xms1G -Xmx2G"
+JAVAARGS="${JAVAARGS} -verbose:gc "
+JAR="-jar MooBench.jar"
+
+checkMoobenchApplication
+
+getOpentelemetryAgent
+
+JAVAARGS_NOINSTR="${JAVAARGS}"
+JAVAARGS_OPENTELEMETRY_BASIC="${JAVAARGS} -javaagent:${BASE_DIR}/lib/opentelemetry-javaagent-all.jar -Dotel.resource.attributes=service.name=moobench -Dotel.instrumentation.methods.include=moobench.application.MonitoredClassSimple[monitoredMethod];moobench.application.MonitoredClassThreaded[monitoredMethod]"
+JAVAARGS_OPENTELEMETRY_LOGGING_DEACTIVATED="${JAVAARGS_OPENTELEMETRY_BASIC} -Dotel.traces.exporter=logging -Dotel.traces.sampler=always_off"
+JAVAARGS_OPENTELEMETRY_LOGGING="${JAVAARGS_OPENTELEMETRY_BASIC} -Dotel.traces.exporter=logging"
+JAVAARGS_OPENTELEMETRY_ZIPKIN="${JAVAARGS_OPENTELEMETRY_BASIC} -Dotel.traces.exporter=zipkin -Dotel.metrics.exporter=none"
+JAVAARGS_OPENTELEMETRY_JAEGER="${JAVAARGS_OPENTELEMETRY_BASIC} -Dotel.traces.exporter=none -Dotel.traces.exporter=jaeger"
+JAVAARGS_OPENTELEMETRY_PROMETHEUS="${JAVAARGS_OPENTELEMETRY_BASIC} -Dotel.traces.exporter=none -Dotel.metrics.exporter=prometheus"
+
+writeConfiguration
+
+## Execute Benchmark
+for ((i=1;i<=${NUM_OF_LOOPS};i+=1)); do
+    k=0
+    echo "## Starting iteration ${i}/${NUM_OF_LOOPS}"
+    echo "## Starting iteration ${i}/${NUM_OF_LOOPS}" >>${BASE_DIR}/OpenTelemetry.log
+
+    runNoInstrumentation
+    cleanup
+
+    runOpenTelemetryNoLogging
+    cleanup
+
+    runOpenTelemetryLogging
+    cleanup
+    
+    runOpenTelemetryZipkin
+    cleanup
+    
+    runOpenTelemetryPrometheus
+    cleanup
+
+    printIntermediaryResults
+done
+
+# Create R labels
+LABELS=$(createRLabels)
+run-r
+
+cleanup-results
+
+#zip -jqr ${RESULTS_DIR}stat.zip ${RESULTS_DIR}stat
+#rm -rf ${RESULTS_DIR}stat/
+mv ${BASE_DIR}/OpenTelemetry.log ${RESULTS_DIR}/OpenTelemetry.log
+[ -f ${RESULTS_DIR}hotspot-1-${RECURSION_DEPTH}-1.log ] && grep "<task " ${RESULTS_DIR}hotspot-*.log >${RESULTS_DIR}log.log
+[ -f ${BASE_DIR}errorlog.txt ] && mv ${BASE_DIR}errorlog.txt ${RESULTS_DIR}
+
diff --git a/frameworks/OpenTelemetry/labels.sh b/frameworks/OpenTelemetry/labels.sh
new file mode 100644
index 0000000000000000000000000000000000000000..31c1d4f1398a629846072894a6bbb2305bb4be7a
--- /dev/null
+++ b/frameworks/OpenTelemetry/labels.sh
@@ -0,0 +1,10 @@
+TITLE[0]="No instrumentation"
+TITLE[1]="OpenTelemetry No Logging"
+TITLE[2]="OpenTelemetry Logging"
+TITLE[3]="OpenTelemetry Zipkin"
+MACHINE_TYPE=`uname -m`; 
+if [ ${MACHINE_TYPE} == 'x86_64' ]
+then
+	TITLE[4]="OpenTelemetry Prometheus"
+	#TITLE[5]="OpenTelemetry Jaeger"
+fi
diff --git a/frameworks/OpenTelemetry/runExponentialSizes.sh b/frameworks/OpenTelemetry/runExponentialSizes.sh
new file mode 100755
index 0000000000000000000000000000000000000000..904e77a978c632b79f0e34bb978c44a384e1cb9a
--- /dev/null
+++ b/frameworks/OpenTelemetry/runExponentialSizes.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+RESULTS_DIR=results-OpenTelemetry/
+mkdir -p $RESULTS_DIR
+
+for depth in 2 4 8 16 32 64 128
+do
+	export RECURSION_DEPTH=$depth
+	echo "Running $depth"
+	./benchmark.sh &> $RESULTS_DIR/$depth.txt
+	mv $RESULTS_DIR/results.zip $RESULTS_DIR/results-$RECURSION_DEPTH.zip
+done
diff --git a/frameworks/SPASSmeter/benchmark.sh b/frameworks/SPASSmeter/benchmark.sh
old mode 100644
new mode 100755
index d7fdb643a7498aa381604e65be7cee03f9a7450c..9c5d98f4cc722f1dcebd5d5a9cd7db056d4837ac
--- a/frameworks/SPASSmeter/benchmark.sh
+++ b/frameworks/SPASSmeter/benchmark.sh
@@ -15,13 +15,13 @@ TOTALCALLS=2000000     ## 2000000
 METHODTIME=0      ## 500000
 
 #MOREPARAMS="--quickstart"
-MOREPARAMS="--application mooBench.monitoredApplication.MonitoredClassSimple ${MOREPARAMS}"
+MOREPARAMS="--application moobench.application.MonitoredClassSimple ${MOREPARAMS}"
 
 TIME=`expr ${METHODTIME} \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} + ${SLEEPTIME} \* 4 \* ${NUM_LOOPS}  \* ${RECURSIONDEPTH} + 50 \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} `
 echo "Experiment will take circa ${TIME} seconds."
 
 echo "Removing and recreating '$RESULTSDIR'"
-(rm -rf ${RESULTSDIR}) && mkdir ${RESULTSDIR}
+(rm -rf ${RESULTSDIR}) && mkdir -p ${RESULTSDIR}
 #mkdir ${RESULTSDIR}stat/
 
 # Clear spassmeter.log and initialize logging
@@ -31,7 +31,7 @@ touch ${BASEDIR}spassmeter.log
 RAWFN="${RESULTSDIR}raw"
 
 JAVAARGS="-server"
-JAVAARGS="${JAVAARGS} -d64"
+JAVAARGS="${JAVAARGS} "
 JAVAARGS="${JAVAARGS} -Xms1G -Xmx4G"
 JAVAARGS="${JAVAARGS} -verbose:gc -XX:+PrintCompilation"
 #JAVAARGS="${JAVAARGS} -XX:+PrintInlining"
@@ -73,10 +73,10 @@ for ((i=1;i<=${NUM_LOOPS};i+=1)); do
     #sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
     ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \
         --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
+        --total-calls ${TOTALCALLS} \
+        --method-time ${METHODTIME} \
+        --total-threads ${THREADS} \
+        --recursion-depth ${j} \
         ${MOREPARAMS}
     #kill %sar
     [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
@@ -92,10 +92,10 @@ for ((i=1;i<=${NUM_LOOPS};i+=1)); do
     #sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
     ${JAVABIN}java ${JAVAARGS_LTW} ${JAR} \
         --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
+        --total-calls ${TOTALCALLS} \
+        --method-time ${METHODTIME} \
+        --total-threads ${THREADS} \
+        --recursion-depth ${j} \
         ${MOREPARAMS}
     #kill %sar
     [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
@@ -111,10 +111,10 @@ for ((i=1;i<=${NUM_LOOPS};i+=1)); do
     #sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
     ${JAVABIN}java ${JAVAARGS_LTW_ASM} ${JAR} \
         --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
+        --total-calls ${TOTALCALLS} \
+        --method-time ${METHODTIME} \
+        --total-threads ${THREADS} \
+        --recursion-depth ${j} \
         ${MOREPARAMS}
     #kill %sar
     [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
diff --git a/frameworks/common-functions.sh b/frameworks/common-functions.sh
new file mode 100644
index 0000000000000000000000000000000000000000..9fc3bc4c2e57a66056bda5a705dab6a91a51cd6d
--- /dev/null
+++ b/frameworks/common-functions.sh
@@ -0,0 +1,164 @@
+#!/bin/bash
+
+function getSum {
+  awk '{sum += $1; square += $1^2} END {print "Average: "sum/NR" Standard Deviation: "sqrt(square / NR - (sum/NR)^2)" Count: "NR}'
+}
+
+## Clean up raw results
+function cleanup-results() {
+  zip -jqr ${RESULTS_DIR}/results.zip ${RAWFN}*
+  rm -f ${RAWFN}*
+  [ -f ${DATA_DIR}/nohup.out ] && cp ${DATA_DIR}/nohup.out ${RESULTS_DIR}
+  [ -f ${DATA_DIR}/nohup.out ] && > ${DATA_DIR}/nohup.out
+}
+
+function checkMoobenchApplication() {
+	if [ ! -f "MooBench.jar" ]
+	then
+		echo "MooBench.jar missing; please build it first using ./gradlew assemble in the main folder"
+		exit 1
+	fi
+}
+
+function getKiekerAgent() {
+	echo "Checking whether Kieker is present in $AGENT"
+	if [ ! -f $AGENT ]
+	then
+		# get agent
+		export VERSION_PATH=`curl "https://oss.sonatype.org/service/local/repositories/snapshots/content/net/kieker-monitoring/kieker/" | grep '<resourceURI>' | sed 's/ *<resourceURI>//g' | sed 's/<\/resourceURI>//g' | grep '/$'`
+		export AGENT_PATH=`curl "${VERSION_PATH}" | grep 'aspectj.jar</resourceURI' | sort | sed 's/ *<resourceURI>//g' | sed 's/<\/resourceURI>//g' | tail -1`
+		curl "${AGENT_PATH}" > "${AGENT}"
+	fi
+}
+
+function getInspectItAgent() {
+	if [ ! -d agent ]
+	then
+		mkdir agent
+		cd agent
+		wget https://github.com/inspectIT/inspectit-ocelot/releases/download/1.11.1/inspectit-ocelot-agent-1.11.1.jar
+		cd ..
+	fi
+}
+
+function getOpentelemetryAgent() {
+	if [ ! -f ${BASEDIR}lib/opentelemetry-javaagent-all.jar ]
+	then
+		mkdir -p ${BASEDIR}lib
+		wget --output-document=${BASEDIR}lib/opentelemetry-javaagent-all.jar \
+			https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent-all.jar
+	fi
+}
+
+function createRLabels() {
+	# Create R labels
+	LABELS=""
+	for I in "${TITLE[@]}" ; do
+		title="$I"
+		if [ "$LABELS" == "" ] ; then
+			LABELS="\"$title\""
+		else
+			LABELS="${LABELS}, \"$title\""
+		fi
+	done
+	echo $LABELS
+}
+
+## Generate Results file
+function run-r() {
+R --vanilla --silent << EOF
+results_fn="${RAWFN}"
+outtxt_fn="${RESULTS_DIR}/results-text.txt"
+outcsv_fn="${RESULTS_DIR}/results-text.csv"
+configs.loop=${NUM_OF_LOOPS}
+configs.recursion=${RECURSION_DEPTH}
+configs.labels=c($LABELS)
+results.count=${TOTAL_NUM_OF_CALLS}
+results.skip=${TOTAL_NUM_OF_CALLS}/2
+source("${RSCRIPT_PATH}")
+EOF
+}
+
+function startZipkin {
+	if [ ! -d zipkin ] || [ ! -f zipkin/zipkin.jar ]
+	then
+		mkdir zipkin
+		cd zipkin
+		curl -sSL https://zipkin.io/quickstart.sh | bash -s
+	else
+		cd zipkin
+	fi
+	java -Xmx6g -jar zipkin.jar &> zipkin.txt &
+	pid=$!
+	sleep 5
+	cd ..
+}
+
+function periodicallyCurlPrometheus {
+	while [ true ]
+	do
+		echo "Curling for prometheus simulation..."
+		curl localhost:8888/metrics 
+		sleep 15
+	done
+}
+
+function startPrometheus {
+	periodicallyCurlPrometheus &
+	pid=$!
+}
+
+function stopBackgroundProcess {
+	kill $pid
+}
+
+function writeConfiguration() {
+	uname -a >${RESULTS_DIR}/configuration.txt
+	${JAVABIN}java ${JAVAARGS} -version 2>>${RESULTS_DIR}/configuration.txt
+	echo "JAVAARGS: ${JAVAARGS}" >>${RESULTS_DIR}/configuration.txt
+	echo "" >>${RESULTS_DIR}/configuration.txt
+	echo "Runtime: circa ${TIME} seconds" >>${RESULTS_DIR}/configuration.txt
+	echo "" >>${RESULTS_DIR}/configuration.txt
+	echo "SLEEPTIME=${SLEEPTIME}" >>${RESULTS_DIR}/configuration.txt
+	echo "NUM_OF_LOOPS=${NUM_OF_LOOPS}" >>${RESULTS_DIR}/configuration.txt
+	echo "TOTAL_NUM_OF_CALLS=${TOTAL_NUM_OF_CALLS}" >>${RESULTS_DIR}/configuration.txt
+	echo "METHODTIME=${METHODTIME}" >>${RESULTS_DIR}/configuration.txt
+	echo "THREADS=${THREADS}" >>${RESULTS_DIR}/configuration.txt
+	echo "RECURSION_DEPTH=${RECURSION_DEPTH}" >>${RESULTS_DIR}/configuration.txt
+	sync
+}
+
+function printIntermediaryResults {
+   for ((index=0;index<${#TITLE[@]};index+=1)); do
+      echo -n "Intermediary results "${TITLE[$index]}" "
+      cat $RESULTS_DIR/raw-*-${RECURSION_DEPTH}-${index}.csv | awk -F';' '{print $2}' | getSum
+   done
+}
+
+
+FRAMEWORK_NAME=$(basename -- "$BASE_DIR")
+RESULTS_DIR="$BASE_DIR/results-$FRAMEWORK_NAME"
+RAWFN=$RESULTS_DIR"/raw"
+
+# Initialize all unset parameters
+if [ -z $SLEEP_TIME ]; then
+	SLEEP_TIME=30           ## 30
+fi
+if [ -z $NUM_OF_LOOPS ]; then
+	NUM_OF_LOOPS=10           ## 10
+fi
+if [ -z $THREADS ]; then
+	THREADS=1              ## 1
+fi
+if [ -z $RECURSION_DEPTH ]; then
+	RECURSION_DEPTH=10      ## 10
+fi
+if [ -z $TOTAL_NUM_OF_CALLS ]; then
+	TOTAL_NUM_OF_CALLS=2000000     ## 2000000
+fi
+if [ -z $METHOD_TIME ]; then
+	METHOD_TIME=0      ## 500000
+fi
+if [ -z $DEBUG ]; then
+	DEBUG=false		## false
+fi
diff --git a/frameworks/inspectIT/Benchmark (inspectIT).launch b/frameworks/inspectIT/Benchmark (inspectIT).launch
deleted file mode 100644
index 19365e35eeee4e51bd9b75900cc5fb79bbea879d..0000000000000000000000000000000000000000
--- a/frameworks/inspectIT/Benchmark (inspectIT).launch	
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/MooBench/src/mooBench/benchmark/Benchmark.java"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="mooBench.benchmark.Benchmark"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-d 10 -h 1 -m 0 -t 1000 -o tmp/test.txt -q"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="MooBench"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:frameworks/inspectIT/agent/inspectit-agent-mod.jar&#13;&#10;-Dinspectit.config=frameworks/inspectIT/config/isequence/"/>
-</launchConfiguration>
diff --git a/frameworks/inspectIT/README b/frameworks/inspectIT/README
deleted file mode 100644
index 2340fa65d8201e25bba5dc35103312a69f14f8a6..0000000000000000000000000000000000000000
--- a/frameworks/inspectIT/README
+++ /dev/null
@@ -1,8 +0,0 @@
-Folder structure:
-
-agent/  -> add from download
-CMR/    -> add from download
-config/ -> present and preconfigured
-
-
-the -inner experiments require a customized version of inspectIT, that is able to deactivate parts of its probes
diff --git a/frameworks/inspectIT/benchmark-isequence-inner-remote.sh b/frameworks/inspectIT/benchmark-isequence-inner-remote.sh
deleted file mode 100644
index 57bdc79cd9aa38bf79916398fb2e9b84c4820668..0000000000000000000000000000000000000000
--- a/frameworks/inspectIT/benchmark-isequence-inner-remote.sh
+++ /dev/null
@@ -1,213 +0,0 @@
-#!/bin/bash
-
-JAVABIN="/localhome/jwa/jre/bin/"
-REMOTEHOST="blade1"
-REMOTEBASEDIR="/localhome/jwa/MooBench-inspectIT/"
-
-RSCRIPTDIR=r/
-BASEDIR=./
-RESULTSDIR="${BASEDIR}tmp/results-inspectit-isequence/"
-
-SLEEPTIME=30           ## 30
-NUM_LOOPS=10           ## 10
-THREADS=1              ## 1
-RECURSIONDEPTH=10      ## 10
-TOTALCALLS=2000000     ## 2000000
-METHODTIME=0           ## 0
-
-#MOREPARAMS="--quickstart"
-MOREPARAMS="${MOREPARAMS}"
-
-TIME=`expr ${METHODTIME} \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} + ${SLEEPTIME} \* 4 \* ${NUM_LOOPS}  \* ${RECURSIONDEPTH} + 50 \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} `
-echo "Experiment will take circa ${TIME} seconds."
-
-echo "Removing and recreating '$RESULTSDIR'"
-(rm -rf ${RESULTSDIR}) && mkdir ${RESULTSDIR}
-mkdir ${RESULTSDIR}stat/
-
-# Clear inspectit.log and initialize logging
-rm -f ${BASEDIR}inspectit.log
-touch ${BASEDIR}inspectit.log
-
-RAWFN="${RESULTSDIR}raw"
-
-JAVAARGS="-server"
-JAVAARGS="${JAVAARGS} -d64"
-JAVAARGS="${JAVAARGS} -Xms1G -Xmx4G"
-JAVAARGS="${JAVAARGS} -verbose:gc -XX:+PrintCompilation"
-#JAVAARGS="${JAVAARGS} -XX:+PrintInlining"
-#JAVAARGS="${JAVAARGS} -XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation"
-#JAVAARGS="${JAVAARGS} -Djava.compiler=NONE"
-JAR="-jar MooBench.jar"
-
-JAVAARGS_NOINSTR="${JAVAARGS}"
-JAVAARGS_LTW="${JAVAARGS} -javaagent:${BASEDIR}agent/inspectit-agent-mod.jar -Djava.util.logging.config.file=${BASEDIR}config/logging.properties  -Dinspectit.config=${BASEDIR}config/isequence-remote/"
-JAVAARGS_INSPECTIT_DISABLED="${JAVAARGS_LTW} -Dinspectit.disableProbe=true"
-JAVAARGS_INSPECTIT_NOSTORAGE="${JAVAARGS_LTW} -Dinspectit.disableStorage=true"
-JAVAARGS_INSPECTIT_FULL="${JAVAARGS_LTW}"
-
-CMR_ARGS="-d64 -Xms12G -Xmx12G -Xmn4G -XX:MaxPermSize=128m -XX:PermSize=128m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+DisableExplicitGC -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseBiasedLocking -XX:+HeapDumpOnOutOfMemoryError -server -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -Dinspectit.logging.config=CMR/logging-config.xml"
-
-## Write configuration
-uname -a >${RESULTSDIR}configuration.txt
-${JAVABIN}java ${JAVAARGS} -version 2>>${RESULTSDIR}configuration.txt
-echo "JAVAARGS: ${JAVAARGS}" >>${RESULTSDIR}configuration.txt
-echo "" >>${RESULTSDIR}configuration.txt
-echo "Runtime: circa ${TIME} seconds" >>${RESULTSDIR}configuration.txt
-echo "" >>${RESULTSDIR}configuration.txt
-echo "SLEEPTIME=${SLEEPTIME}" >>${RESULTSDIR}configuration.txt
-echo "NUM_LOOPS=${NUM_LOOPS}" >>${RESULTSDIR}configuration.txt
-echo "TOTALCALLS=${TOTALCALLS}" >>${RESULTSDIR}configuration.txt
-echo "METHODTIME=${METHODTIME}" >>${RESULTSDIR}configuration.txt
-echo "THREADS=${THREADS}" >>${RESULTSDIR}configuration.txt
-echo "RECURSIONDEPTH=${RECURSIONDEPTH}" >>${RESULTSDIR}configuration.txt
-sync
-
-## Execute Benchmark
-for ((i=1;i<=${NUM_LOOPS};i+=1)); do
-    j=${RECURSIONDEPTH}
-    k=0
-    echo "## Starting iteration ${i}/${NUM_LOOPS}"
-    echo "## Starting iteration ${i}/${NUM_LOOPS}" >>${BASEDIR}inspectit.log
-
-    # No instrumentation
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} No instrumentation"
-    echo " # ${i}.${j}.${k} No instrumentation" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
-        ${MOREPARAMS}
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-
-    # InspectIT (disabled)
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} InspectIT (disabled)"
-    echo " # ${i}.${j}.${k} InspectIT (disabled)" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ssh ${REMOTEHOST} "nohup ${JAVABIN}java ${CMR_ARGS} -Xloggc:${REMOTEBASEDIR}logs/gc.log -jar ${REMOTEBASEDIR}/CMR/inspectit-cmr-mod.jar 1>>${REMOTEBASEDIR}logs/out.log 2>&1 &"
-    sleep 10
-    ${JAVABIN}java ${JAVAARGS_INSPECTIT_DISABLED} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
-        ${MOREPARAMS}
-    ssh ${REMOTEHOST} "pkill -f 'java'"
-    sleep 10
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-
-    # InspectIT (no storage)
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} InspectIT (no storage)"
-    echo " # ${i}.${j}.${k} InspectIT (no storage)" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ssh ${REMOTEHOST} "nohup ${JAVABIN}java ${CMR_ARGS} -Xloggc:${REMOTEBASEDIR}logs/gc.log -jar ${REMOTEBASEDIR}/CMR/inspectit-cmr-mod.jar 1>>${REMOTEBASEDIR}logs/out.log 2>&1 &"
-    sleep 10
-    ${JAVABIN}java ${JAVAARGS_INSPECTIT_NOSTORAGE} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
-        ${MOREPARAMS}
-    ssh ${REMOTEHOST} "pkill -f 'java'"
-    sleep 10
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-    
-    # InspectIT (full)
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} InspectIT (full)"
-    echo " # ${i}.${j}.${k} InspectIT (full)" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ssh ${REMOTEHOST} "nohup ${JAVABIN}java ${CMR_ARGS} -Xloggc:${REMOTEBASEDIR}logs/gc.log -jar ${REMOTEBASEDIR}/CMR/inspectit-cmr-mod.jar 1>>${REMOTEBASEDIR}logs/out.log 2>&1 &"
-    sleep 10
-    ${JAVABIN}java ${JAVAARGS_INSPECTIT_FULL} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
-        ${MOREPARAMS}
-    sleep 10
-    ssh ${REMOTEHOST} "pkill -f 'java'"
-    sleep 10
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-
-done
-zip -jqr ${RESULTSDIR}stat.zip ${RESULTSDIR}stat
-rm -rf ${RESULTSDIR}stat/
-mv ${BASEDIR}inspectit.log ${RESULTSDIR}inspectit.log
-[ -f ${RESULTSDIR}hotspot-1-${RECURSIONDEPTH}-1.log ] && grep "<task " ${RESULTSDIR}hotspot-*.log >${RESULTSDIR}log.log
-[ -f ${BASEDIR}errorlog.txt ] && mv ${BASEDIR}errorlog.txt ${RESULTSDIR}
-
-## Generate Results file
-# Timeseries
-R --vanilla --silent <<EOF
-results_fn="${RAWFN}"
-output_fn="${RESULTSDIR}results-timeseries.pdf"
-configs.loop=${NUM_LOOPS}
-configs.recursion=c(${RECURSIONDEPTH})
-configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)")
-configs.colors=c("black","red","blue","green")
-results.count=${TOTALCALLS}
-tsconf.min=(${METHODTIME}/1000)
-tsconf.max=(${METHODTIME}/1000)+100
-source("${RSCRIPTDIR}timeseries.r")
-EOF
-# Timeseries-Average
-R --vanilla --silent <<EOF
-results_fn="${RAWFN}"
-output_fn="${RESULTSDIR}results-timeseries-average.pdf"
-configs.loop=${NUM_LOOPS}
-configs.recursion=c(${RECURSIONDEPTH})
-configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)")
-configs.colors=c("black","red","blue","green")
-results.count=${TOTALCALLS}
-tsconf.min=(${METHODTIME}/1000)
-tsconf.max=(${METHODTIME}/1000)+100
-source("${RSCRIPTDIR}timeseries-average.r")
-EOF
-# Bars
-R --vanilla --silent <<EOF
-results_fn="${RAWFN}"
-outtxt_fn="${RESULTSDIR}results-text.txt"
-configs.loop=${NUM_LOOPS}
-configs.recursion=c(${RECURSIONDEPTH})
-configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)")
-configs.colors=c("black","red","blue","green")
-results.count=${TOTALCALLS}
-results.skip=${TOTALCALLS}*3/4
-source("${RSCRIPTDIR}stats.r")
-EOF
-
-## Clean up raw results
-zip -jqr ${RESULTSDIR}results.zip ${RAWFN}*
-rm -f ${RAWFN}*
-[ -f ${BASEDIR}nohup.out ] && cp ${BASEDIR}nohup.out ${RESULTSDIR}
-[ -f ${BASEDIR}nohup.out ] && > ${BASEDIR}nohup.out
diff --git a/frameworks/inspectIT/benchmark-isequence-inner-threaded.sh b/frameworks/inspectIT/benchmark-isequence-inner-threaded.sh
deleted file mode 100644
index 8babe369c84ef7f8104c8367f69edc388cbac80d..0000000000000000000000000000000000000000
--- a/frameworks/inspectIT/benchmark-isequence-inner-threaded.sh
+++ /dev/null
@@ -1,226 +0,0 @@
-#!/bin/bash
-
-JAVABIN=""
-
-RSCRIPTDIR=r/
-BASEDIR=./
-RESULTSDIR="${BASEDIR}tmp/results-inspectit-isequence/"
-
-SLEEPTIME=30          ## 30
-NUM_LOOPS=10          ## 10
-THREADS=32            ## 32
-RECURSIONDEPTH=10     ## 10
-TOTALCALLS=200000     ## 2000000
-METHODTIME=0          ## 0
-
-#MOREPARAMS="--quickstart"
-MOREPARAMS="${MOREPARAMS}"
-
-TIME=`expr ${METHODTIME} \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} + ${SLEEPTIME} \* 4 \* ${NUM_LOOPS}  \* ${RECURSIONDEPTH} + 50 \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} `
-echo "Experiment will take circa ${TIME} seconds."
-
-echo "Removing and recreating '$RESULTSDIR'"
-(rm -rf ${RESULTSDIR}) && mkdir ${RESULTSDIR}
-mkdir ${RESULTSDIR}stat/
-
-# Clear inspectit.log and initialize logging
-rm -f ${BASEDIR}inspectit.log
-touch ${BASEDIR}inspectit.log
-mkdir ${BASEDIR}logs/
-
-RAWFN="${RESULTSDIR}raw"
-
-JAVAARGS="-server"
-JAVAARGS="${JAVAARGS} -d64"
-JAVAARGS="${JAVAARGS} -Xms1G -Xmx4G"
-JAVAARGS="${JAVAARGS} -verbose:gc -XX:+PrintCompilation"
-#JAVAARGS="${JAVAARGS} -XX:+PrintInlining"
-#JAVAARGS="${JAVAARGS} -XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation"
-#JAVAARGS="${JAVAARGS} -Djava.compiler=NONE"
-JAR="-jar MooBench.jar"
-
-JAVAARGS_NOINSTR="${JAVAARGS}"
-JAVAARGS_LTW="${JAVAARGS} -javaagent:${BASEDIR}agent/inspectit-agent-mod.jar -Djava.util.logging.config.file=${BASEDIR}config/logging.properties  -Dinspectit.config=${BASEDIR}config/isequence/"
-JAVAARGS_INSPECTIT_DISABLED="${JAVAARGS_LTW} -Dinspectit.disableProbe=true"
-JAVAARGS_INSPECTIT_NOSTORAGE="${JAVAARGS_LTW} -Dinspectit.disableStorage=true"
-JAVAARGS_INSPECTIT_FULL="${JAVAARGS_LTW}"
-
-CMR_ARGS="-d64 -Xms12G -Xmx12G -Xmn4G -XX:MaxPermSize=128m -XX:PermSize=128m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+DisableExplicitGC -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseBiasedLocking -XX:+HeapDumpOnOutOfMemoryError -server -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -Dinspectit.logging.config=CMR/logging-config.xml"
-
-## Write configuration
-uname -a >${RESULTSDIR}configuration.txt
-${JAVABIN}java ${JAVAARGS} -version 2>>${RESULTSDIR}configuration.txt
-echo "JAVAARGS: ${JAVAARGS}" >>${RESULTSDIR}configuration.txt
-echo "" >>${RESULTSDIR}configuration.txt
-echo "Runtime: circa ${TIME} seconds" >>${RESULTSDIR}configuration.txt
-echo "" >>${RESULTSDIR}configuration.txt
-echo "SLEEPTIME=${SLEEPTIME}" >>${RESULTSDIR}configuration.txt
-echo "NUM_LOOPS=${NUM_LOOPS}" >>${RESULTSDIR}configuration.txt
-echo "TOTALCALLS=${TOTALCALLS}" >>${RESULTSDIR}configuration.txt
-echo "METHODTIME=${METHODTIME}" >>${RESULTSDIR}configuration.txt
-echo "THREADS=${THREADS}" >>${RESULTSDIR}configuration.txt
-echo "RECURSIONDEPTH=${RECURSIONDEPTH}" >>${RESULTSDIR}configuration.txt
-sync
-
-## Execute Benchmark
-for ((j=1;i<=${THREADS};j+=1)); do
-for ((i=1;i<=${NUM_LOOPS};i+=1)); do
-    k=0
-    echo "## Starting iteration ${i}/${NUM_LOOPS}"
-    echo "## Starting iteration ${i}/${NUM_LOOPS}" >>${BASEDIR}inspectit.log
-
-    # No instrumentation
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} No instrumentation"
-    echo " # ${i}.${j}.${k} No instrumentation" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${j} \
-        --recursiondepth ${RECURSIONDEPTH} \
-        ${MOREPARAMS}
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-
-    # InspectIT (disabled)
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} InspectIT (disabled)"
-    echo " # ${i}.${j}.${k} InspectIT (disabled)" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 &
-    sleep 10
-    ${JAVABIN}java ${JAVAARGS_INSPECTIT_DISABLED} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${j} \
-        --recursiondepth ${RECURSIONDEPTH} \
-        ${MOREPARAMS}
-    kill $!
-    sleep 10
-    kill -9 $!
-    rm -rf ${BASEDIR}storage/
-    rm -rf ${BASEDIR}db/
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-
-    # InspectIT (no storage)
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} InspectIT (no storage)"
-    echo " # ${i}.${j}.${k} InspectIT (no storage)" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 &
-    sleep 10
-    ${JAVABIN}java ${JAVAARGS_INSPECTIT_NOSTORAGE} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${j} \
-        --recursiondepth ${RECURSIONDEPTH} \
-        ${MOREPARAMS}
-    kill $!
-    sleep 10
-    kill -9 $!
-    rm -rf ${BASEDIR}storage/
-    rm -rf ${BASEDIR}db/
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-    
-    # InspectIT (full)
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} InspectIT (full)"
-    echo " # ${i}.${j}.${k} InspectIT (full)" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 &
-    sleep 10
-    ${JAVABIN}java ${JAVAARGS_INSPECTIT_FULL} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${j} \
-        --recursiondepth ${RECURSIONDEPTH} \
-        ${MOREPARAMS}
-    sleep 10
-    kill $!
-    sleep 10
-    kill -9 $!
-    rm -rf ${BASEDIR}storage/
-    rm -rf ${BASEDIR}db/
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-
-done
-done
-zip -jqr ${RESULTSDIR}stat.zip ${RESULTSDIR}stat
-rm -rf ${RESULTSDIR}stat/
-mv ${BASEDIR}logs/ ${RESULTSDIR}
-mv ${BASEDIR}inspectit.log ${RESULTSDIR}inspectit.log
-[ -f ${RESULTSDIR}hotspot-1-${RECURSIONDEPTH}-1.log ] && grep "<task " ${RESULTSDIR}hotspot-*.log >${RESULTSDIR}log.log
-[ -f ${BASEDIR}errorlog.txt ] && mv ${BASEDIR}errorlog.txt ${RESULTSDIR}
-
-## Generate Results file
-# Timeseries
-R --vanilla --silent <<EOF
-results_fn="${RAWFN}"
-output_fn="${RESULTSDIR}results-timeseries.pdf"
-configs.loop=${NUM_LOOPS}
-configs.recursion=c(${RECURSIONDEPTH})
-configs.threads=c(1:${THREADS})
-configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)")
-configs.colors=c("black","red","blue","green")
-results.count=${TOTALCALLS}
-tsconf.min=(${METHODTIME}/1000)
-tsconf.max=(${METHODTIME}/1000)+100
-source("${RSCRIPTDIR}timeseries-threads.r")
-EOF
-# Timeseries-Average
-R --vanilla --silent <<EOF
-results_fn="${RAWFN}"
-output_fn="${RESULTSDIR}results-timeseries-average.pdf"
-configs.loop=${NUM_LOOPS}
-configs.recursion=c(${RECURSIONDEPTH})
-configs.threads=c(1:${THREADS})
-configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)")
-configs.colors=c("black","red","blue","green")
-results.count=${TOTALCALLS}
-tsconf.min=(${METHODTIME}/1000)
-tsconf.max=(${METHODTIME}/1000)+100
-source("${RSCRIPTDIR}timeseries-average.r")
-EOF
-# Bars
-R --vanilla --silent <<EOF
-results_fn="${RAWFN}"
-outtxt_fn="${RESULTSDIR}results-text.txt"
-configs.loop=${NUM_LOOPS}
-configs.recursion=c(${RECURSIONDEPTH})
-configs.threads=c(1:${THREADS})
-configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)")
-configs.colors=c("black","red","blue","green")
-results.count=${TOTALCALLS}
-results.skip=${TOTALCALLS}*3/4
-source("${RSCRIPTDIR}stats.r")
-EOF
-
-## Clean up raw results
-zip -jqr ${RESULTSDIR}results.zip ${RAWFN}*
-rm -f ${RAWFN}*
-[ -f ${BASEDIR}nohup.out ] && cp ${BASEDIR}nohup.out ${RESULTSDIR}
-[ -f ${BASEDIR}nohup.out ] && > ${BASEDIR}nohup.out
diff --git a/frameworks/inspectIT/benchmark-isequence-inner.sh b/frameworks/inspectIT/benchmark-isequence-inner.sh
deleted file mode 100644
index 435f452cbcaf2f83e617f295a4a3434bff416186..0000000000000000000000000000000000000000
--- a/frameworks/inspectIT/benchmark-isequence-inner.sh
+++ /dev/null
@@ -1,224 +0,0 @@
-#!/bin/bash
-
-JAVABIN=""
-
-RSCRIPTDIR=r/
-BASEDIR=./
-RESULTSDIR="${BASEDIR}tmp/results-inspectit-isequence/"
-
-SLEEPTIME=30           ## 30
-NUM_LOOPS=10           ## 10
-THREADS=1              ## 1
-RECURSIONDEPTH=10      ## 10
-TOTALCALLS=2000000     ## 2000000
-METHODTIME=0           ## 0
-
-#MOREPARAMS="--quickstart"
-MOREPARAMS="${MOREPARAMS}"
-
-TIME=`expr ${METHODTIME} \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} + ${SLEEPTIME} \* 4 \* ${NUM_LOOPS}  \* ${RECURSIONDEPTH} + 50 \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} `
-echo "Experiment will take circa ${TIME} seconds."
-
-echo "Removing and recreating '$RESULTSDIR'"
-(rm -rf ${RESULTSDIR}) && mkdir ${RESULTSDIR}
-mkdir ${RESULTSDIR}stat/
-
-# Clear inspectit.log and initialize logging
-rm -f ${BASEDIR}inspectit.log
-touch ${BASEDIR}inspectit.log
-mkdir ${BASEDIR}logs/
-
-RAWFN="${RESULTSDIR}raw"
-
-JAVAARGS="-server"
-JAVAARGS="${JAVAARGS} -d64"
-JAVAARGS="${JAVAARGS} -Xms1G -Xmx4G"
-JAVAARGS="${JAVAARGS} -verbose:gc -XX:+PrintCompilation"
-#JAVAARGS="${JAVAARGS} -XX:+PrintInlining"
-#JAVAARGS="${JAVAARGS} -XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation"
-#JAVAARGS="${JAVAARGS} -Djava.compiler=NONE"
-JAR="-jar MooBench.jar"
-
-JAVAARGS_NOINSTR="${JAVAARGS}"
-JAVAARGS_LTW="${JAVAARGS} -javaagent:${BASEDIR}agent/inspectit-agent-mod.jar -Djava.util.logging.config.file=${BASEDIR}config/logging.properties -Dinspectit.config=${BASEDIR}config/isequence/"
-JAVAARGS_INSPECTIT_DISABLED="${JAVAARGS_LTW} -Dinspectit.disableProbe=true"
-JAVAARGS_INSPECTIT_NOSTORAGE="${JAVAARGS_LTW} -Dinspectit.disableStorage=true"
-JAVAARGS_INSPECTIT_FULL="${JAVAARGS_LTW}"
-
-CMR_ARGS="-d64 -Xms12G -Xmx12G -Xmn4G -XX:MaxPermSize=128m -XX:PermSize=128m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+DisableExplicitGC -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseBiasedLocking -XX:+HeapDumpOnOutOfMemoryError -server -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -Dinspectit.logging.config=config/logging-config.xml"
-
-## Write configuration
-uname -a >${RESULTSDIR}configuration.txt
-${JAVABIN}java ${JAVAARGS} -version 2>>${RESULTSDIR}configuration.txt
-echo "JAVAARGS: ${JAVAARGS}" >>${RESULTSDIR}configuration.txt
-echo "" >>${RESULTSDIR}configuration.txt
-echo "Runtime: circa ${TIME} seconds" >>${RESULTSDIR}configuration.txt
-echo "" >>${RESULTSDIR}configuration.txt
-echo "SLEEPTIME=${SLEEPTIME}" >>${RESULTSDIR}configuration.txt
-echo "NUM_LOOPS=${NUM_LOOPS}" >>${RESULTSDIR}configuration.txt
-echo "TOTALCALLS=${TOTALCALLS}" >>${RESULTSDIR}configuration.txt
-echo "METHODTIME=${METHODTIME}" >>${RESULTSDIR}configuration.txt
-echo "THREADS=${THREADS}" >>${RESULTSDIR}configuration.txt
-echo "RECURSIONDEPTH=${RECURSIONDEPTH}" >>${RESULTSDIR}configuration.txt
-sync
-
-## Execute Benchmark
-for ((i=1;i<=${NUM_LOOPS};i+=1)); do
-    j=${RECURSIONDEPTH}
-    k=0
-    echo "## Starting iteration ${i}/${NUM_LOOPS}"
-    echo "## Starting iteration ${i}/${NUM_LOOPS}" >>${BASEDIR}inspectit.log
-
-    # No instrumentation
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} No instrumentation"
-    echo " # ${i}.${j}.${k} No instrumentation" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
-        ${MOREPARAMS}
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-
-    # InspectIT (disabled)
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} InspectIT (disabled)"
-    echo " # ${i}.${j}.${k} InspectIT (disabled)" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 &
-    sleep 10
-    ${JAVABIN}java ${JAVAARGS_INSPECTIT_DISABLED} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
-        ${MOREPARAMS}
-    sleep 10
-    kill $!
-    sleep 10
-    kill -9 $!
-    rm -rf ${BASEDIR}storage/
-    rm -rf ${BASEDIR}db/
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-
-    # InspectIT (no storage)
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} InspectIT (no storage)"
-    echo " # ${i}.${j}.${k} InspectIT (no storage)" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 &
-    sleep 10
-    ${JAVABIN}java ${JAVAARGS_INSPECTIT_NOSTORAGE} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
-        ${MOREPARAMS}
-    sleep 10
-    kill $!
-    sleep 10
-    kill -9 $!
-    rm -rf ${BASEDIR}storage/
-    rm -rf ${BASEDIR}db/
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-    
-    # InspectIT (full)
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} InspectIT (full)"
-    echo " # ${i}.${j}.${k} InspectIT (full)" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 &
-    sleep 10
-    ${JAVABIN}java  ${JAVAARGS_INSPECTIT_FULL} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
-        ${MOREPARAMS}
-    sleep 10
-    kill $!
-    sleep 10
-    kill -9 $!
-    rm -rf ${BASEDIR}storage/
-    rm -rf ${BASEDIR}db/
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-
-done
-zip -jqr ${RESULTSDIR}stat.zip ${RESULTSDIR}stat
-rm -rf ${RESULTSDIR}stat/
-mv ${BASEDIR}logs/ ${RESULTSDIR}
-mv ${BASEDIR}inspectit.log ${RESULTSDIR}inspectit.log
-[ -f ${RESULTSDIR}hotspot-1-${RECURSIONDEPTH}-1.log ] && grep "<task " ${RESULTSDIR}hotspot-*.log >${RESULTSDIR}log.log
-[ -f ${BASEDIR}errorlog.txt ] && mv ${BASEDIR}errorlog.txt ${RESULTSDIR}
-
-## Generate Results file
-# Timeseries
-R --vanilla --silent <<EOF
-results_fn="${RAWFN}"
-output_fn="${RESULTSDIR}results-timeseries.pdf"
-configs.loop=${NUM_LOOPS}
-configs.recursion=c(${RECURSIONDEPTH})
-configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)")
-configs.colors=c("black","red","blue","green")
-results.count=${TOTALCALLS}
-tsconf.min=(${METHODTIME}/1000)
-tsconf.max=(${METHODTIME}/1000)+100
-source("${RSCRIPTDIR}timeseries.r")
-EOF
-# Timeseries-Average
-R --vanilla --silent <<EOF
-results_fn="${RAWFN}"
-output_fn="${RESULTSDIR}results-timeseries-average.pdf"
-configs.loop=${NUM_LOOPS}
-configs.recursion=c(${RECURSIONDEPTH})
-configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)")
-configs.colors=c("black","red","blue","green")
-results.count=${TOTALCALLS}
-tsconf.min=(${METHODTIME}/1000)
-tsconf.max=(${METHODTIME}/1000)+100
-source("${RSCRIPTDIR}timeseries-average.r")
-EOF
-# Bars
-R --vanilla --silent <<EOF
-results_fn="${RAWFN}"
-outtxt_fn="${RESULTSDIR}results-text.txt"
-configs.loop=${NUM_LOOPS}
-configs.recursion=c(${RECURSIONDEPTH})
-configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)")
-configs.colors=c("black","red","blue","green")
-results.count=${TOTALCALLS}
-results.skip=${TOTALCALLS}*3/4
-source("${RSCRIPTDIR}stats.r")
-EOF
-
-## Clean up raw results
-zip -jqr ${RESULTSDIR}results.zip ${RAWFN}*
-rm -f ${RAWFN}*
-[ -f ${BASEDIR}nohup.out ] && cp ${BASEDIR}nohup.out ${RESULTSDIR}
-[ -f ${BASEDIR}nohup.out ] && > ${BASEDIR}nohup.out
diff --git a/frameworks/inspectIT/benchmark-timer-inner.sh b/frameworks/inspectIT/benchmark-timer-inner.sh
deleted file mode 100644
index 3b55a447bcb4725c6cea641133732dc03493641c..0000000000000000000000000000000000000000
--- a/frameworks/inspectIT/benchmark-timer-inner.sh
+++ /dev/null
@@ -1,220 +0,0 @@
-#!/bin/bash
-
-JAVABIN=""
-
-RSCRIPTDIR=r/
-BASEDIR=./
-RESULTSDIR="${BASEDIR}tmp/results-inspectit-timer/"
-
-SLEEPTIME=30           ## 30
-NUM_LOOPS=10           ## 10
-THREADS=1              ## 1
-RECURSIONDEPTH=10      ## 10
-TOTALCALLS=2000000     ## 2000000
-METHODTIME=0           ## 0
-
-#MOREPARAMS="--quickstart"
-MOREPARAMS="${MOREPARAMS}"
-
-TIME=`expr ${METHODTIME} \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} + ${SLEEPTIME} \* 4 \* ${NUM_LOOPS}  \* ${RECURSIONDEPTH} + 50 \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} `
-echo "Experiment will take circa ${TIME} seconds."
-
-echo "Removing and recreating '$RESULTSDIR'"
-(rm -rf ${RESULTSDIR}) && mkdir ${RESULTSDIR}
-mkdir ${RESULTSDIR}stat/
-
-# Clear inspectit.log and initialize logging
-rm -f ${BASEDIR}inspectit.log
-touch ${BASEDIR}inspectit.log
-mkdir ${BASEDIR}logs/
-
-RAWFN="${RESULTSDIR}raw"
-
-JAVAARGS="-server"
-JAVAARGS="${JAVAARGS} -d64"
-JAVAARGS="${JAVAARGS} -Xms1G -Xmx4G"
-JAVAARGS="${JAVAARGS} -verbose:gc -XX:+PrintCompilation"
-#JAVAARGS="${JAVAARGS} -XX:+PrintInlining"
-#JAVAARGS="${JAVAARGS} -XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation"
-#JAVAARGS="${JAVAARGS} -Djava.compiler=NONE"
-JAR="-jar MooBench.jar"
-
-JAVAARGS_NOINSTR="${JAVAARGS}"
-JAVAARGS_LTW="${JAVAARGS} -javaagent:${BASEDIR}agent/inspectit-agent-mod.jar -Djava.util.logging.config.file=${BASEDIR}config/logging.properties -Dinspectit.config=${BASEDIR}config/timer/"
-JAVAARGS_INSPECTIT_DISABLED="${JAVAARGS_LTW} -Dinspectit.disableProbe=true"
-JAVAARGS_INSPECTIT_NOSTORAGE="${JAVAARGS_LTW} -Dinspectit.disableStorage=true"
-JAVAARGS_INSPECTIT_FULL="${JAVAARGS_LTW}"
-
-CMR_ARGS="-d64 -Xms12G -Xmx12G -Xmn4G -XX:MaxPermSize=128m -XX:PermSize=128m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+DisableExplicitGC -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseBiasedLocking -XX:+HeapDumpOnOutOfMemoryError -server -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -Dinspectit.logging.config=config/logging-config.xml"
-
-## Write configuration
-uname -a >${RESULTSDIR}configuration.txt
-${JAVABIN}java ${JAVAARGS} -version 2>>${RESULTSDIR}configuration.txt
-echo "JAVAARGS: ${JAVAARGS}" >>${RESULTSDIR}configuration.txt
-echo "" >>${RESULTSDIR}configuration.txt
-echo "Runtime: circa ${TIME} seconds" >>${RESULTSDIR}configuration.txt
-echo "" >>${RESULTSDIR}configuration.txt
-echo "SLEEPTIME=${SLEEPTIME}" >>${RESULTSDIR}configuration.txt
-echo "NUM_LOOPS=${NUM_LOOPS}" >>${RESULTSDIR}configuration.txt
-echo "TOTALCALLS=${TOTALCALLS}" >>${RESULTSDIR}configuration.txt
-echo "METHODTIME=${METHODTIME}" >>${RESULTSDIR}configuration.txt
-echo "THREADS=${THREADS}" >>${RESULTSDIR}configuration.txt
-echo "RECURSIONDEPTH=${RECURSIONDEPTH}" >>${RESULTSDIR}configuration.txt
-sync
-
-## Execute Benchmark
-for ((i=1;i<=${NUM_LOOPS};i+=1)); do
-    j=${RECURSIONDEPTH}
-    k=0
-    echo "## Starting iteration ${i}/${NUM_LOOPS}"
-    echo "## Starting iteration ${i}/${NUM_LOOPS}" >>${BASEDIR}inspectit.log
-
-    # No instrumentation
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} No instrumentation"
-    echo " # ${i}.${j}.${k} No instrumentation" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
-        ${MOREPARAMS}
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-
-    # InspectIT (disabled)
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} InspectIT (disabled)"
-    echo " # ${i}.${j}.${k} InspectIT (disabled)" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 &
-    sleep 10
-    ${JAVABIN}java ${JAVAARGS_INSPECTIT_DISABLED} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
-        ${MOREPARAMS}
-    sleep 10
-    kill $!
-    sleep 10
-    rm -rf ${BASEDIR}storage/
-    rm -rf ${BASEDIR}db/
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-
-    # InspectIT (no storage)
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} InspectIT (no storage)"
-    echo " # ${i}.${j}.${k} InspectIT (no storage)" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 &
-    sleep 10
-    ${JAVABIN}java ${JAVAARGS_INSPECTIT_NOSTORAGE} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
-        ${MOREPARAMS}
-    sleep 10
-    kill $!
-    sleep 10
-    rm -rf ${BASEDIR}storage/
-    rm -rf ${BASEDIR}db/
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-    
-    # InspectIT (full)
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} InspectIT (full)"
-    echo " # ${i}.${j}.${k} InspectIT (full)" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 &
-    sleep 10
-    ${JAVABIN}java ${JAVAARGS_INSPECTIT_FULL} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
-        ${MOREPARAMS}
-    sleep 10
-    kill $!
-    sleep 10
-    rm -rf ${BASEDIR}storage/
-    rm -rf ${BASEDIR}db/
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-
-done
-zip -jqr ${RESULTSDIR}stat.zip ${RESULTSDIR}stat
-rm -rf ${RESULTSDIR}stat/
-mv ${BASEDIR}logs/ ${RESULTSDIR}
-mv ${BASEDIR}inspectit.log ${RESULTSDIR}inspectit.log
-[ -f ${RESULTSDIR}hotspot-1-${RECURSIONDEPTH}-1.log ] && grep "<task " ${RESULTSDIR}hotspot-*.log >${RESULTSDIR}log.log
-[ -f ${BASEDIR}errorlog.txt ] && mv ${BASEDIR}errorlog.txt ${RESULTSDIR}
-
-## Generate Results file
-# Timeseries
-R --vanilla --silent <<EOF
-results_fn="${RAWFN}"
-output_fn="${RESULTSDIR}results-timeseries.pdf"
-configs.loop=${NUM_LOOPS}
-configs.recursion=c(${RECURSIONDEPTH})
-configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)")
-configs.colors=c("black","red","blue","green")
-results.count=${TOTALCALLS}
-tsconf.min=(${METHODTIME}/1000)
-tsconf.max=(${METHODTIME}/1000)+300
-source("${RSCRIPTDIR}timeseries.r")
-EOF
-# Timeseries-Average
-R --vanilla --silent <<EOF
-results_fn="${RAWFN}"
-output_fn="${RESULTSDIR}results-timeseries-average.pdf"
-configs.loop=${NUM_LOOPS}
-configs.recursion=c(${RECURSIONDEPTH})
-configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)")
-configs.colors=c("black","red","blue","green")
-results.count=${TOTALCALLS}
-tsconf.min=(${METHODTIME}/1000)
-tsconf.max=(${METHODTIME}/1000)+300
-source("${RSCRIPTDIR}timeseries-average.r")
-EOF
-# Bars
-R --vanilla --silent <<EOF
-results_fn="${RAWFN}"
-outtxt_fn="${RESULTSDIR}results-text.txt"
-configs.loop=${NUM_LOOPS}
-configs.recursion=c(${RECURSIONDEPTH})
-configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)")
-results.count=${TOTALCALLS}
-results.skip=${TOTALCALLS}*3/4
-source("${RSCRIPTDIR}stats.r")
-EOF
-
-## Clean up raw results
-zip -jqr ${RESULTSDIR}results.zip ${RAWFN}*
-rm -f ${RAWFN}*
-[ -f ${BASEDIR}nohup.out ] && cp ${BASEDIR}nohup.out ${RESULTSDIR}
-[ -f ${BASEDIR}nohup.out ] && > ${BASEDIR}nohup.out
diff --git a/frameworks/inspectIT/benchmark.sh b/frameworks/inspectIT/benchmark.sh
old mode 100644
new mode 100755
index 006d01ced2b44b0434ac7386c7c4a68196bcf651..78498bdc8d045b1882c2c09c084bc8ebace8482f
--- a/frameworks/inspectIT/benchmark.sh
+++ b/frameworks/inspectIT/benchmark.sh
@@ -1,214 +1,173 @@
 #!/bin/bash
 
+function runNoInstrumentation {
+    # No instrumentation
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]}
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/inspectIT.log
+    ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \
+        --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \
+        --total-calls ${TOTAL_NUM_OF_CALLS} \
+        --method-time ${METHOD_TIME} \
+        --total-threads ${THREADS} \
+        --recursion-depth ${RECURSION_DEPTH} \
+        ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt
+}
+
+function runInspectITDeactivated {
+    k=`expr ${k} + 1`
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]}
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/inspectIT.log
+    sleep $SLEEP_TIME
+    ${JAVABIN}java ${JAVAARGS_INSPECTIT_DEACTIVATED} ${JAR} \
+        --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \
+        --total-calls ${TOTAL_NUM_OF_CALLS} \
+        --method-time ${METHOD_TIME} \
+        --total-threads ${THREADS} \
+        --recursion-depth ${RECURSION_DEPTH} \
+        --force-terminate \
+        ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt
+    sleep $SLEEP_TIME
+}
+
+function runInspectITNullWriter {
+    k=`expr ${k} + 1`
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]}
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/inspectIT.log
+    sleep $SLEEP_TIME
+    ${JAVABIN}java ${JAVAARGS_INSPECTIT_NULLWRITER} ${JAR} \
+        --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \
+        --total-calls ${TOTAL_NUM_OF_CALLS} \
+        --method-time ${METHOD_TIME} \
+        --total-threads ${THREADS} \
+        --recursion-depth ${RECURSION_DEPTH} \
+        --force-terminate \
+        ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt
+    sleep $SLEEP_TIME
+}
+
+
+function runInspectITZipkin {
+    # InspectIT (minimal)
+    k=`expr ${k} + 1`
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]}
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/inspectIT.log
+    startZipkin
+    sleep $SLEEP_TIME
+    ${JAVABIN}java ${JAVAARGS_INSPECTIT_ZIPKIN} ${JAR} \
+        --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \
+        --total-calls ${TOTAL_NUM_OF_CALLS} \
+        --method-time ${METHOD_TIME} \
+        --total-threads ${THREADS} \
+        --recursion-depth ${RECURSION_DEPTH} \
+        --force-terminate \
+        ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt
+    stopBackgroundProcess
+    sleep $SLEEP_TIME
+}
+
+function runInspectITPrometheus {
+    # InspectIT (minimal)
+    k=`expr ${k} + 1`
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]}
+    echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/inspectIT.log
+    startPrometheus
+    sleep $SLEEP_TIME
+    ${JAVABIN}java ${JAVAARGS_INSPECTIT_PROMETHEUS} ${JAR} \
+        --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \
+        --total-calls ${TOTAL_NUM_OF_CALLS} \
+        --method-time ${METHOD_TIME} \
+        --total-threads ${THREADS} \
+        --recursion-depth ${RECURSION_DEPTH} \
+        --force-terminate \
+        ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt
+    stopBackgroundProcess
+    sleep $SLEEP_TIME
+}
+
+function cleanup {
+	[ -f ${BASE_DIR}hotspot.log ] && mv ${BASE_DIR}hotspot.log ${RESULTS_DIR}hotspot-${i}-${j}-${k}.log
+	echo >>${BASE_DIR}/inspectIT.log
+	echo >>${BASE_DIR}/inspectIT.log
+	sync
+	sleep ${SLEEP_TIME}
+}
+
+function getSum {
+  awk '{sum += $1; square += $1^2} END {print "Average: "sum/NR" Standard Deviation: "sqrt(square / NR - (sum/NR)^2)" Count: "NR}'
+}
+
 JAVABIN=""
 
-RSCRIPTDIR=r/
-BASEDIR=./
-RESULTSDIR="${BASEDIR}tmp/results-inspectit/"
+BASE_DIR=$(pwd)
+RSCRIPT_PATH="../stats.csv.r"
 
-SLEEPTIME=30           ## 30
-NUM_LOOPS=10           ## 10
-THREADS=1              ## 1
-RECURSIONDEPTH=10      ## 10
-TOTALCALLS=2000000     ## 2000000
-METHODTIME=500000      ## 500000
+source ../common-functions.sh
+source labels.sh
+
+checkMoobenchApplication
+
+getInspectItAgent
 
 #MOREPARAMS="--quickstart"
 MOREPARAMS="${MOREPARAMS}"
 
-TIME=`expr ${METHODTIME} \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} + ${SLEEPTIME} \* 4 \* ${NUM_LOOPS}  \* ${RECURSIONDEPTH} + 50 \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} `
+TIME=`expr ${METHOD_TIME} \* ${TOTAL_NUM_OF_CALLS} / 1000000000 \* 4 \* ${RECURSION_DEPTH} \* ${NUM_OF_LOOPS} + ${SLEEP_TIME} \* 4 \* ${NUM_OF_LOOPS}  \* ${RECURSION_DEPTH} + 50 \* ${TOTAL_NUM_OF_CALLS} / 1000000000 \* 4 \* ${RECURSION_DEPTH} \* ${NUM_OF_LOOPS} `
 echo "Experiment will take circa ${TIME} seconds."
 
-echo "Removing and recreating '$RESULTSDIR'"
-(rm -rf ${RESULTSDIR}) && mkdir ${RESULTSDIR}
-mkdir ${RESULTSDIR}stat/
+echo "Removing and recreating '$RESULTS_DIR'"
+(rm -rf ${RESULTS_DIR}/**csv) && mkdir -p ${RESULTS_DIR}
 
 # Clear inspectit.log and initialize logging
-rm -f ${BASEDIR}inspectit.log
-touch ${BASEDIR}inspectit.log
-mkdir ${BASEDIR}logs/
-
-RAWFN="${RESULTSDIR}raw"
+rm -f ${BASE_DIR}/inspectIT.log
+touch ${BASE_DIR}/inspectIT.log
 
 JAVAARGS="-server"
-JAVAARGS="${JAVAARGS} -d64"
-JAVAARGS="${JAVAARGS} -Xms1G -Xmx4G"
-JAVAARGS="${JAVAARGS} -verbose:gc -XX:+PrintCompilation"
-#JAVAARGS="${JAVAARGS} -XX:+PrintInlining"
-#JAVAARGS="${JAVAARGS} -XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation"
-#JAVAARGS="${JAVAARGS} -Djava.compiler=NONE"
-JAR="-jar MooBench.jar"
+JAVAARGS="${JAVAARGS} -Xms1G -Xmx2G"
+JAVAARGS="${JAVAARGS} -verbose:gc "
+JAR="-jar MooBench.jar --application moobench.application.MonitoredClassSimple"
 
 JAVAARGS_NOINSTR="${JAVAARGS}"
-JAVAARGS_LTW="${JAVAARGS} -javaagent:${BASEDIR}agent/inspectit-agent-mod.jar -Djava.util.logging.config.file=${BASEDIR}config/logging.properties"
-JAVAARGS_INSPECTIT_MINIMAL="${JAVAARGS_LTW} -Dinspectit.config=${BASEDIR}config/minimal/"
-JAVAARGS_INSPECTIT_FULL="${JAVAARGS_LTW} -Dinspectit.config=${BASEDIR}config/timer/"
-
-CMR_ARGS="-d64 -Xms12G -Xmx12G -Xmn4G -XX:MaxPermSize=128m -XX:PermSize=128m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+DisableExplicitGC -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseBiasedLocking -XX:+HeapDumpOnOutOfMemoryError -server -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -Dinspectit.logging.config=config/logging-config.xml"
-
-## Write configuration
-uname -a >${RESULTSDIR}configuration.txt
-${JAVABIN}java ${JAVAARGS} -version 2>>${RESULTSDIR}configuration.txt
-echo "JAVAARGS: ${JAVAARGS}" >>${RESULTSDIR}configuration.txt
-echo "" >>${RESULTSDIR}configuration.txt
-echo "Runtime: circa ${TIME} seconds" >>${RESULTSDIR}configuration.txt
-echo "" >>${RESULTSDIR}configuration.txt
-echo "SLEEPTIME=${SLEEPTIME}" >>${RESULTSDIR}configuration.txt
-echo "NUM_LOOPS=${NUM_LOOPS}" >>${RESULTSDIR}configuration.txt
-echo "TOTALCALLS=${TOTALCALLS}" >>${RESULTSDIR}configuration.txt
-echo "METHODTIME=${METHODTIME}" >>${RESULTSDIR}configuration.txt
-echo "THREADS=${THREADS}" >>${RESULTSDIR}configuration.txt
-echo "RECURSIONDEPTH=${RECURSIONDEPTH}" >>${RESULTSDIR}configuration.txt
-sync
+JAVAARGS_LTW="${JAVAARGS} -javaagent:${BASE_DIR}/agent/inspectit-ocelot-agent-1.11.1.jar -Djava.util.logging.config.file=${BASE_DIR}/config/logging.properties"
+JAVAARGS_INSPECTIT_DEACTIVATED="${JAVAARGS_LTW} -Dinspectit.service-name=moobench-inspectit -Dinspectit.exporters.metrics.prometheus.enabled=false -Dinspectit.exporters.tracing.zipkin.enabled=false -Dinspectit.config.file-based.path=${BASE_DIR}/config/onlyInstrument/"
+JAVAARGS_INSPECTIT_NULLWRITER="${JAVAARGS_LTW} -Dinspectit.service-name=moobench-inspectit -Dinspectit.exporters.metrics.prometheus.enabled=false -Dinspectit.exporters.tracing.zipkin.enabled=false -Dinspectit.config.file-based.path=${BASE_DIR}/config/nullWriter/"
+JAVAARGS_INSPECTIT_ZIPKIN="${JAVAARGS_LTW} -Dinspectit.service-name=moobench-inspectit -Dinspectit.exporters.metrics.prometheus.enabled=false -Dinspectit.exporters.tracing.zipkin.url=http://127.0.0.1:9411/api/v2/spans -Dinspectit.config.file-based.path=${BASE_DIR}/config/zipkin/"
+JAVAARGS_INSPECTIT_PROMETHEUS="${JAVAARGS_LTW} -Dinspectit.service-name=moobench-inspectit -Dinspectit.exporters.metrics.zipkin.enabled=false -Dinspectit.exporters.metrics.prometheus.enabled=true -Dinspectit.config.file-based.path=${BASE_DIR}/config/prometheus/"
+
+echo "RESULTS_DIR: $RESULTS_DIR"
+echo "RAWFN: $RAWFN"
+writeConfiguration
 
 ## Execute Benchmark
-for ((i=1;i<=${NUM_LOOPS};i+=1)); do
-    j=${RECURSIONDEPTH}
+for ((i=1;i<=${NUM_OF_LOOPS};i+=1)); do
     k=0
-    echo "## Starting iteration ${i}/${NUM_LOOPS}"
-    echo "## Starting iteration ${i}/${NUM_LOOPS}" >>${BASEDIR}inspectit.log
-
-    # No instrumentation
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} No instrumentation"
-    echo " # ${i}.${j}.${k} No instrumentation" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
-        ${MOREPARAMS}
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-
-    # InspectIT (minimal)
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} InspectIT (minimal)"
-    echo " # ${i}.${j}.${k} InspectIT (minimal)" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 &
-    sleep 10
-    ${JAVABIN}java ${JAVAARGS_INSPECTIT_MINIMAL} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
-        ${MOREPARAMS}
-    sleep 10
-    kill $!
-    sleep 10
-    kill -9 $!
-    rm -rf ${BASEDIR}storage/
-    rm -rf ${BASEDIR}db/
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-
-    # InspectIT (without CMR)
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} InspectIT (without CMR)"
-    echo " # ${i}.${j}.${k} InspectIT (without CMR)" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${JAVAARGS_INSPECTIT_FULL} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
-        ${MOREPARAMS}
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-
-    # InspectIT (with CMR)
-    k=`expr ${k} + 1`
-    echo " # ${i}.${j}.${k} InspectIT (with CMR)"
-    echo " # ${i}.${j}.${k} InspectIT (with CMR)" >>${BASEDIR}inspectit.log
-    sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
-    ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 &
-    sleep 10
-    ${JAVABIN}java ${JAVAARGS_INSPECTIT_FULL} ${JAR} \
-        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
-        --totalcalls ${TOTALCALLS} \
-        --methodtime ${METHODTIME} \
-        --totalthreads ${THREADS} \
-        --recursiondepth ${j} \
-        ${MOREPARAMS}
-    sleep 10
-    kill $!
-    sleep 10
-    kill -9 $!
-    rm -rf ${BASEDIR}storage/
-    rm -rf ${BASEDIR}db/
-    kill %sar
-    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-    echo >>${BASEDIR}inspectit.log
-    echo >>${BASEDIR}inspectit.log
-    sync
-    sleep ${SLEEPTIME}
-
+    echo "## Starting iteration ${i}/${NUM_OF_LOOPS}"
+    echo "## Starting iteration ${i}/${NUM_OF_LOOPS}" >>${BASE_DIR}/inspectIT.log
+
+    runNoInstrumentation
+    cleanup
+
+    runInspectITDeactivated
+    cleanup
+    
+    runInspectITNullWriter
+    cleanup
+
+    runInspectITZipkin
+    cleanup
+    
+    runInspectITPrometheus
+    cleanup
+    
+    printIntermediaryResults
 done
-zip -jqr ${RESULTSDIR}stat.zip ${RESULTSDIR}stat
-rm -rf ${RESULTSDIR}stat/
-mv ${BASEDIR}inspectit.log ${RESULTSDIR}inspectit.log
-mv ${BASEDIR}logs/ ${RESULTSDIR}
-[ -f ${RESULTSDIR}hotspot-1-${RECURSIONDEPTH}-1.log ] && grep "<task " ${RESULTSDIR}hotspot-*.log >${RESULTSDIR}log.log
-[ -f ${BASEDIR}errorlog.txt ] && mv ${BASEDIR}errorlog.txt ${RESULTSDIR}
-
-## Generate Results file
-# Timeseries
-R --vanilla --silent <<EOF
-results_fn="${RAWFN}"
-output_fn="${RESULTSDIR}results-timeseries.pdf"
-configs.loop=${NUM_LOOPS}
-configs.recursion=c(${RECURSIONDEPTH})
-configs.labels=c("No Probe","InspectIT (minimal)","InspectIT (without CMR)","InspectIT (with CMR)")
-configs.colors=c("black","red","blue","green")
-results.count=${TOTALCALLS}
-tsconf.min=(${METHODTIME}/1000)
-tsconf.max=(${METHODTIME}/1000)+300
-source("${RSCRIPTDIR}timeseries.r")
-EOF
-# Timeseries-Average
-R --vanilla --silent <<EOF
-results_fn="${RAWFN}"
-output_fn="${RESULTSDIR}results-timeseries-average.pdf"
-configs.loop=${NUM_LOOPS}
-configs.recursion=c(${RECURSIONDEPTH})
-configs.labels=c("No Probe","InspectIT (minimal)","InspectIT (without CMR)","InspectIT (with CMR)")
-configs.colors=c("black","red","blue","green")
-results.count=${TOTALCALLS}
-tsconf.min=(${METHODTIME}/1000)
-tsconf.max=(${METHODTIME}/1000)+300
-source("${RSCRIPTDIR}timeseries-average.r")
-EOF
-# Bars
-R --vanilla --silent <<EOF
-results_fn="${RAWFN}"
-outtxt_fn="${RESULTSDIR}results-text.txt"
-configs.loop=${NUM_LOOPS}
-configs.recursion=c(${RECURSIONDEPTH})
-configs.labels=c("No Probe","InspectIT (minimal)","InspectIT (without CMR)","InspectIT (with CMR)")
-results.count=${TOTALCALLS}
-results.skip=${TOTALCALLS}*3/4
-source("${RSCRIPTDIR}stats.r")
-EOF
+mv ${BASE_DIR}/inspectIT.log ${RESULTS_DIR}/inspectIT.log
+[ -f ${RESULTS_DIR}Hotspot-1-${RECURSION_DEPTH}-1.log ] && grep "<task " ${RESULTS_DIR}hotspot-*.log >${RESULTS_DIR}log.log
+[ -f ${BASE_DIR}errorlog.txt ] && mv ${BASE_DIR}errorlog.txt ${RESULTS_DIR}
+
+# Create R labels
+LABELS=$(createRLabels)
+run-r
 
 ## Clean up raw results
-zip -jqr ${RESULTSDIR}results.zip ${RAWFN}*
-rm -f ${RAWFN}*
-[ -f ${BASEDIR}nohup.out ] && cp ${BASEDIR}nohup.out ${RESULTSDIR}
-[ -f ${BASEDIR}nohup.out ] && > ${BASEDIR}nohup.out
+zip -jqr ${RESULTS_DIR}/results.zip ${RAWFN}*
+rm ${RAWFN}*
diff --git a/frameworks/inspectIT/config/isequence-remote/inspectit-agent.cfg b/frameworks/inspectIT/config/isequence-remote/inspectit-agent.cfg
deleted file mode 100644
index 6ca618ad09b2000cea9aa25f150e95f5abe47091..0000000000000000000000000000000000000000
--- a/frameworks/inspectIT/config/isequence-remote/inspectit-agent.cfg
+++ /dev/null
@@ -1,52 +0,0 @@
-## repository <IP> <port> <Agent Name>
-#############################################
-repository blade1 9070 inspectIT
-
-## method-sensor-type <name> <fully-qualified-name> <priority> [<additional options>]
-#####################################################################################
-# method-sensor-type average-timer info.novatec.inspectit.agent.sensor.method.averagetimer.AverageTimerSensor HIGH stringLength=100
-method-sensor-type timer info.novatec.inspectit.agent.sensor.method.timer.TimerSensor MAX stringLength=100
-method-sensor-type isequence info.novatec.inspectit.agent.sensor.method.invocationsequence.InvocationSequenceSensor INVOC stringLength=100
-method-sensor-type jdbc-connection info.novatec.inspectit.agent.sensor.method.jdbc.ConnectionSensor MIN
-method-sensor-type jdbc-prepared-statement info.novatec.inspectit.agent.sensor.method.jdbc.PreparedStatementSensor MIN stringLength=1000
-method-sensor-type jdbc-prepared-statement-parameter info.novatec.inspectit.agent.sensor.method.jdbc.PreparedStatementParameterSensor MIN
-method-sensor-type jdbc-statement info.novatec.inspectit.agent.sensor.method.jdbc.StatementSensor MIN stringLength=1000
-
-## exception-sensor-type <fully-qualified-name> [<additional options>]
-######################################################################
-exception-sensor-type info.novatec.inspectit.agent.sensor.exception.ExceptionSensor mode=simple stringLength=500
-
-## platform-sensor-type <fully-qualified-name> [<additional options>]
-#####################################################################
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.ClassLoadingInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.CompilationInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.MemoryInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.CpuInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.RuntimeInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.SystemInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.ThreadInformation
-
-## send-strategy <fully-qualified-name>
-#######################################
-send-strategy info.novatec.inspectit.agent.sending.impl.TimeStrategy time=1000
-#send-strategy info.novatec.inspectit.agent.sending.impl.ListSizeStrategy size=10000
-
-## buffer-strategy <fully-qualified-name>
-#########################################
-#buffer-strategy info.novatec.inspectit.agent.buffer.impl.SimpleBufferStrategy
-buffer-strategy info.novatec.inspectit.agent.buffer.impl.SizeBufferStrategy size=1000000
-
-## Ignore classes settings
-#########################################
-exclude-class info.novatec.inspectit.*
-exclude-class $Proxy*
-exclude-class sun.*
-exclude-class java.lang.ThreadLocal
-exclude-class java.lang.ref.Reference
-exclude-class *_WLStub
-exclude-class *[]
-
-## INSTRUMENTATION
-##################
-sensor isequence mooBench.monitoredApplication.MonitoredClass monitoredMethod interface=true
-#sensor timer mooBench.monitoredApplication.MonitoredClass monitoredMethod interface=true charting=true
diff --git a/frameworks/inspectIT/config/isequence/inspectit-agent.cfg b/frameworks/inspectIT/config/isequence/inspectit-agent.cfg
deleted file mode 100644
index 93a2115025e4c18ad72082718a4586b36b4cf6e1..0000000000000000000000000000000000000000
--- a/frameworks/inspectIT/config/isequence/inspectit-agent.cfg
+++ /dev/null
@@ -1,52 +0,0 @@
-## repository <IP> <port> <Agent Name>
-#############################################
-repository localhost 9070 inspectIT
-
-## method-sensor-type <name> <fully-qualified-name> <priority> [<additional options>]
-#####################################################################################
-# method-sensor-type average-timer info.novatec.inspectit.agent.sensor.method.averagetimer.AverageTimerSensor HIGH stringLength=100
-method-sensor-type timer info.novatec.inspectit.agent.sensor.method.timer.TimerSensor MAX stringLength=100
-method-sensor-type isequence info.novatec.inspectit.agent.sensor.method.invocationsequence.InvocationSequenceSensor INVOC stringLength=100
-method-sensor-type jdbc-connection info.novatec.inspectit.agent.sensor.method.jdbc.ConnectionSensor MIN
-method-sensor-type jdbc-prepared-statement info.novatec.inspectit.agent.sensor.method.jdbc.PreparedStatementSensor MIN stringLength=1000
-method-sensor-type jdbc-prepared-statement-parameter info.novatec.inspectit.agent.sensor.method.jdbc.PreparedStatementParameterSensor MIN
-method-sensor-type jdbc-statement info.novatec.inspectit.agent.sensor.method.jdbc.StatementSensor MIN stringLength=1000
-
-## exception-sensor-type <fully-qualified-name> [<additional options>]
-######################################################################
-exception-sensor-type info.novatec.inspectit.agent.sensor.exception.ExceptionSensor mode=simple stringLength=500
-
-## platform-sensor-type <fully-qualified-name> [<additional options>]
-#####################################################################
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.ClassLoadingInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.CompilationInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.MemoryInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.CpuInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.RuntimeInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.SystemInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.ThreadInformation
-
-## send-strategy <fully-qualified-name>
-#######################################
-send-strategy info.novatec.inspectit.agent.sending.impl.TimeStrategy time=1000
-#send-strategy info.novatec.inspectit.agent.sending.impl.ListSizeStrategy size=10000
-
-## buffer-strategy <fully-qualified-name>
-#########################################
-#buffer-strategy info.novatec.inspectit.agent.buffer.impl.SimpleBufferStrategy
-buffer-strategy info.novatec.inspectit.agent.buffer.impl.SizeBufferStrategy size=1000000
-
-## Ignore classes settings
-#########################################
-exclude-class info.novatec.inspectit.*
-exclude-class $Proxy*
-exclude-class sun.*
-exclude-class java.lang.ThreadLocal
-exclude-class java.lang.ref.Reference
-exclude-class *_WLStub
-exclude-class *[]
-
-## INSTRUMENTATION
-##################
-sensor isequence mooBench.monitoredApplication.MonitoredClass monitoredMethod interface=true
-#sensor timer mooBench.monitoredApplication.MonitoredClass monitoredMethod interface=true charting=true
diff --git a/frameworks/inspectIT/config/logging-config.xml b/frameworks/inspectIT/config/logging-config.xml
deleted file mode 100644
index 7c507dbc21ee72b4d0702a6f7acfeb9d955c7fa7..0000000000000000000000000000000000000000
--- a/frameworks/inspectIT/config/logging-config.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-	<!-- The appenders are defined at the top -->
-	
-	<!-- Console output -->
-	<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
-		<Target>System.out</Target>
-		<encoder>
-			<pattern>%d{ISO8601}: %-6r [%15.15t] %-5p %30.30c - %m%n</pattern>
-		</encoder>
-	</appender>
-
-	<!-- Statistics -->
-	<appender name="statistics" class="ch.qos.logback.core.FileAppender">
-		<file>logs/statistics.log</file>
-		<encoder>
-			<pattern>%d{ISO8601}: %m%n</pattern>
-		</encoder>
-	</appender>
-
-	<!-- Enriched Sysout -->
-	<!-- Rollover every day or when file reaches 20MB -->
-	<appender name="file" class="ch.qos.logback.core.FileAppender">
-		<file>logs/cmr.log</file>
-		<encoder>
-			<pattern>%d{ISO8601}: %-6r [%15.15t] %-5p %30.30c - %m%n</pattern>
-		</encoder>
-	</appender>
-
-	<!-- Exceptions -->
-	<!-- Only warn & error levels-->
-	<appender name="exceptions" class="ch.qos.logback.core.FileAppender">
-		<file>logs/exceptions.log</file>
-		<encoder>
-			<pattern>%d{ISO8601}: %-6r [%15.15t] %-5p %30.30c - %m%n</pattern>
-		</encoder>
-		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-			<level>WARN</level>
-		</filter>
-	</appender>
-
-	<!-- Loggers are defined from down here -->
-
-	<!-- set log levels - for more verbose logging change 'info' to 'debug' -->
-	<root level="info">
-		<appender-ref ref="stdout" />
-		<appender-ref ref="file" />
-		<appender-ref ref="exceptions" />
-	</root>
-
-	<!-- deactivate all other loggers, except for errors -->
-	<logger name="org" level="error" />
-	<logger name="com" level="error" />
-	<logger name="uk" level="error" />
-
-	<!-- service logging, set this to 'debug' to get additional information about: - Number of timer objects being stored - information about the exception sensor - information about the combined metric sensor -->
-	<logger name="info.novatec.inspectit.cmr.service" level="info" />
-	
-	<!-- service logging, set this to 'debug' to get additional information about: - DAOs -->
-	<logger name="info.novatec.inspectit.cmr.dao" level="info" />
-
-	<!-- RMI Exporter Logging - this logger provides the information to which ip/port the RMI services are bound -->
-	<logger name="org.springframework.remoting.rmi" level="info" />
-
-	<!-- This service logs information about the health status of the CMR. By default this is only being logged into a specific file. Set additivity to true if you want to print this information in the default 
-		appender, too. -->
-	<logger name="info.novatec.inspectit.cmr.util.HealthStatus" additivity="false" level="info">
-		<appender-ref ref="statistics" />
-	</logger>
-
-	<!-- Buffer information -->
-	<logger name="info.novatec.inspectit.cmr.cache.impl.AtomicBuffer" level="info" />
-
-	<!-- Storage, set this to debug for more information about: - storage and failed storage serializations -->
-	<logger name="info.novatec.inspectit.storage" level="info" />
-	<logger name="info.novatec.inspectit.cmr.storage" level="info" />
-
-	<!-- Set this to debug for more information about: - IO write/read -->
-	<logger name="info.novatec.inspectit.storage.nio" level="info" />
-	<logger name="info.novatec.inspectit.storage.write" level="info" />
-	
-	<!-- Set this to debug for more information about: - serialization -->
-	<logger name="info.novatec.inspectit.storage.serializer" level="info" />
-
-	<!-- Set this to debug for more information about: - schema loading for serialization -->
-	<logger name="info.novatec.inspectit.storage.serializer.schema" level="info" />
-
-	<!-- Disabled loggers from down here -->
-
-	<!-- hibernate logging -->
-	<!-- logger name="org.hibernate" level="info" / -->
-
-	<!-- log HQL query parser activity -->
-	<!-- logger name="org.hibernate.hql.ast.AST" level="info" / -->
-
-	<!-- log just the SQL -->
-	<!-- logger name="org.hibernate.SQL" level="info" / -->
-
-	<!-- log JDBC bind parameters -->
-	<!-- logger name="org.hibernate.type" level="info" / -->
-
-	<!-- log schema export/update -->
-	<!-- logger name="org.hibernate.tool.hbm2ddl" level="info" / -->
-
-	<!-- log HQL parse trees -->
-	<!-- logger name="org.hibernate.hql" level="debug" / -->
-
-	<!-- log cache activity -->
-	<!-- logger name="org.hibernate.cache" level="info" / -->
-
-	<!-- log transaction activity -->
-	<!-- logger name="org.hibernate.transaction" level="debug" / -->
-
-	<!-- log JDBC resource acquisition -->
-	<!-- logger name="org.hibernate.jdbc" level="debug" / -->
-
-	<!-- enable the following line if you want to track down connection leakages when using DriverManagerConnectionProvider -->
-	<!-- logger name="org.hibernate.connection.DriverManagerConnectionProvider" level="trace" / -->
-
-	<!-- Log only the info level of the c3p0 connection pooling -->
-	<!-- logger name="com.mchange" level="info" / -->
-
-</configuration>
\ No newline at end of file
diff --git a/frameworks/inspectIT/config/logging.properties b/frameworks/inspectIT/config/logging.properties
deleted file mode 100644
index 8beb798794066cbd195e452b0fd01072a024a9ba..0000000000000000000000000000000000000000
--- a/frameworks/inspectIT/config/logging.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-# This is the default logging configuration for the inspectIT agent. Feel free
-# to adapt this logging to your needs.
-#
-# To integrate this logging configuration set the "-Djava.util.logging.config.file" Parameter to 
-# point to the configuration (for example: -Djava.util.logging.config.file=[path-to]/logging.properties
-handlers = java.util.logging.FileHandler
-java.util.logging.FileHandler.level = INFO
-java.util.logging.FileHandler.formatter = info.novatec.inspectit.util.MessageFormatFormatter
-java.util.logging.FileHandler.append = true
-java.util.logging.FileHandler.pattern = inspectit.log
diff --git a/frameworks/inspectIT/config/minimal/inspectit-agent.cfg b/frameworks/inspectIT/config/minimal/inspectit-agent.cfg
deleted file mode 100644
index 86963d2f797a142a52a199008bde36569766c615..0000000000000000000000000000000000000000
--- a/frameworks/inspectIT/config/minimal/inspectit-agent.cfg
+++ /dev/null
@@ -1,52 +0,0 @@
-## repository <IP> <port> <Agent Name>
-#############################################
-repository localhost 9070 inspectIT
-
-## method-sensor-type <name> <fully-qualified-name> <priority> [<additional options>]
-#####################################################################################
-# method-sensor-type average-timer info.novatec.inspectit.agent.sensor.method.averagetimer.AverageTimerSensor HIGH stringLength=100
-method-sensor-type timer info.novatec.inspectit.agent.sensor.method.timer.TimerSensor MAX stringLength=100
-method-sensor-type isequence info.novatec.inspectit.agent.sensor.method.invocationsequence.InvocationSequenceSensor INVOC stringLength=100
-method-sensor-type jdbc-connection info.novatec.inspectit.agent.sensor.method.jdbc.ConnectionSensor MIN
-method-sensor-type jdbc-prepared-statement info.novatec.inspectit.agent.sensor.method.jdbc.PreparedStatementSensor MIN stringLength=1000
-method-sensor-type jdbc-prepared-statement-parameter info.novatec.inspectit.agent.sensor.method.jdbc.PreparedStatementParameterSensor MIN
-method-sensor-type jdbc-statement info.novatec.inspectit.agent.sensor.method.jdbc.StatementSensor MIN stringLength=1000
-
-## exception-sensor-type <fully-qualified-name> [<additional options>]
-######################################################################
-exception-sensor-type info.novatec.inspectit.agent.sensor.exception.ExceptionSensor mode=simple stringLength=500
-
-## platform-sensor-type <fully-qualified-name> [<additional options>]
-#####################################################################
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.ClassLoadingInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.CompilationInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.MemoryInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.CpuInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.RuntimeInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.SystemInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.ThreadInformation
-
-## send-strategy <fully-qualified-name>
-#######################################
-send-strategy info.novatec.inspectit.agent.sending.impl.TimeStrategy time=1000
-#send-strategy info.novatec.inspectit.agent.sending.impl.ListSizeStrategy size=10000
-
-## buffer-strategy <fully-qualified-name>
-#########################################
-#buffer-strategy info.novatec.inspectit.agent.buffer.impl.SimpleBufferStrategy
-buffer-strategy info.novatec.inspectit.agent.buffer.impl.SizeBufferStrategy size=1000000
-
-## Ignore classes settings
-#########################################
-exclude-class info.novatec.inspectit.*
-exclude-class $Proxy*
-exclude-class sun.*
-exclude-class java.lang.ThreadLocal
-exclude-class java.lang.ref.Reference
-exclude-class *_WLStub
-exclude-class *[]
-
-## INSTRUMENTATION
-##################
-#sensor isequence mooBench.monitoredApplication.MonitoredClass monitoredMethod interface=true
-#sensor timer mooBench.monitoredApplication.MonitoredClass monitoredMethod interface=true charting=true
diff --git a/frameworks/inspectIT/config/nullWriter/nullWriter.yml b/frameworks/inspectIT/config/nullWriter/nullWriter.yml
new file mode 100644
index 0000000000000000000000000000000000000000..62aa32139f3a0ce9192d0e506c5214ac3a494412
--- /dev/null
+++ b/frameworks/inspectIT/config/nullWriter/nullWriter.yml
@@ -0,0 +1,19 @@
+inspectit:
+  instrumentation:
+    scopes:
+      's_moobench':
+        type:
+          name: 'MonitoredClass'
+          matcher-mode: 'CONTAINS'
+    rules:
+      'r_moobench':
+        enabled: true
+        include:
+          'r_trace_method': true # do not save anything
+          'r_capture_method_duration': false # do not save anything
+        scopes:
+          's_moobench': true 
+    actions: 
+      'a_do_nothing':
+        value-body: |
+          'if (true) {}'
diff --git a/frameworks/inspectIT/config/onlyInstrument/onlyInstrument.yml b/frameworks/inspectIT/config/onlyInstrument/onlyInstrument.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a226459211e15d2be67b557eb784f40b4d6673fb
--- /dev/null
+++ b/frameworks/inspectIT/config/onlyInstrument/onlyInstrument.yml
@@ -0,0 +1,19 @@
+inspectit:
+  instrumentation:
+    scopes:
+      's_moobench':
+        type:
+          name: 'MonitoredClass'
+          matcher-mode: 'CONTAINS'
+    rules:
+      'r_moobench':
+        enabled: true
+        include:
+          'r_trace_method': false # do not save anything
+          'r_capture_method_duration': false # do not save anything
+        scopes:
+          's_moobench': true 
+    actions: 
+      'a_do_nothing':
+        value-body: |
+          'if (true) {}'
diff --git a/frameworks/inspectIT/config/prometheus/prometheus.yml b/frameworks/inspectIT/config/prometheus/prometheus.yml
new file mode 100644
index 0000000000000000000000000000000000000000..93be23506c366278bf1177854e521ba7224a02cb
--- /dev/null
+++ b/frameworks/inspectIT/config/prometheus/prometheus.yml
@@ -0,0 +1,15 @@
+inspectit:
+  instrumentation:
+    scopes:
+      's_moobench':
+        type:
+          name: 'MonitoredClass'
+          matcher-mode: 'CONTAINS'
+    rules:
+      'r_moobench':
+        enabled: true
+        include:
+          'r_trace_method': false # records spans
+          'r_capture_method_duration': true # records metrics
+        scopes:
+          's_moobench': true 
diff --git a/frameworks/inspectIT/config/timer/inspectit-agent.cfg b/frameworks/inspectIT/config/timer/inspectit-agent.cfg
deleted file mode 100644
index c65c99fab40c32750195c07a54a8e748b435deb7..0000000000000000000000000000000000000000
--- a/frameworks/inspectIT/config/timer/inspectit-agent.cfg
+++ /dev/null
@@ -1,53 +0,0 @@
-## repository <IP> <port> <Agent Name>
-#############################################
-repository localhost 9070 inspectIT
-
-## method-sensor-type <name> <fully-qualified-name> <priority> [<additional options>]
-#####################################################################################
-# method-sensor-type average-timer info.novatec.inspectit.agent.sensor.method.averagetimer.AverageTimerSensor HIGH stringLength=100
-method-sensor-type timer info.novatec.inspectit.agent.sensor.method.timer.TimerSensor MAX stringLength=100
-method-sensor-type isequence info.novatec.inspectit.agent.sensor.method.invocationsequence.InvocationSequenceSensor INVOC stringLength=100
-method-sensor-type jdbc-connection info.novatec.inspectit.agent.sensor.method.jdbc.ConnectionSensor MIN
-method-sensor-type jdbc-prepared-statement info.novatec.inspectit.agent.sensor.method.jdbc.PreparedStatementSensor MIN stringLength=1000
-method-sensor-type jdbc-prepared-statement-parameter info.novatec.inspectit.agent.sensor.method.jdbc.PreparedStatementParameterSensor MIN
-method-sensor-type jdbc-statement info.novatec.inspectit.agent.sensor.method.jdbc.StatementSensor MIN stringLength=1000
-
-## exception-sensor-type <fully-qualified-name> [<additional options>]
-######################################################################
-exception-sensor-type info.novatec.inspectit.agent.sensor.exception.ExceptionSensor mode=simple stringLength=500
-
-## platform-sensor-type <fully-qualified-name> [<additional options>]
-#####################################################################
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.ClassLoadingInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.CompilationInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.MemoryInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.CpuInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.RuntimeInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.SystemInformation
-platform-sensor-type info.novatec.inspectit.agent.sensor.platform.ThreadInformation
-
-## send-strategy <fully-qualified-name>
-#######################################
-send-strategy info.novatec.inspectit.agent.sending.impl.TimeStrategy time=1000
-#send-strategy info.novatec.inspectit.agent.sending.impl.ListSizeStrategy size=10000
-
-## buffer-strategy <fully-qualified-name>
-#########################################
-#buffer-strategy info.novatec.inspectit.agent.buffer.impl.SimpleBufferStrategy
-buffer-strategy info.novatec.inspectit.agent.buffer.impl.SizeBufferStrategy size=1000000
-
-
-## Ignore classes settings
-#########################################
-exclude-class info.novatec.inspectit.*
-exclude-class $Proxy*
-exclude-class sun.*
-exclude-class java.lang.ThreadLocal
-exclude-class java.lang.ref.Reference
-exclude-class *_WLStub
-exclude-class *[]
-
-## INSTRUMENTATION
-##################
-sensor isequence mooBench.monitoredApplication.MonitoredClass monitoredMethod interface=true
-sensor timer mooBench.monitoredApplication.MonitoredClass monitoredMethod interface=true charting=true
diff --git a/frameworks/inspectIT/config/zipkin/zipkin.yml b/frameworks/inspectIT/config/zipkin/zipkin.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9997999a8c5a6e2b999b3191a4b14db81bc3661b
--- /dev/null
+++ b/frameworks/inspectIT/config/zipkin/zipkin.yml
@@ -0,0 +1,15 @@
+inspectit:
+  instrumentation:
+    scopes:
+      's_moobench':
+        type:
+          name: 'MonitoredClass'
+          matcher-mode: 'CONTAINS'
+    rules:
+      'r_moobench':
+        enabled: true
+        include:
+          'r_trace_method': true # records spans
+          'r_capture_method_duration': false # records metrics
+        scopes:
+          's_moobench': true 
diff --git a/frameworks/inspectIT/labels.sh b/frameworks/inspectIT/labels.sh
new file mode 100644
index 0000000000000000000000000000000000000000..bf62e408956c400eda8c027eece37aff86a81914
--- /dev/null
+++ b/frameworks/inspectIT/labels.sh
@@ -0,0 +1,5 @@
+TITLE[0]="No instrumentation"
+TITLE[1]="Deactivated processing"
+TITLE[2]="Null writer"
+TITLE[3]="Zipkin"
+TITLE[4]="Prometheus"
diff --git a/frameworks/inspectIT/runExponentialSizes.sh b/frameworks/inspectIT/runExponentialSizes.sh
new file mode 100755
index 0000000000000000000000000000000000000000..d30fc2cb3ed7a9933110de78cf66ae5c8cc768ad
--- /dev/null
+++ b/frameworks/inspectIT/runExponentialSizes.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+RESULTS_DIR=results-inspectIT/
+mkdir -p $RESULTS_DIR
+
+for depth in 2 4 8 16 32 64 128
+do
+	export RECURSION_DEPTH=$depth
+	echo "Running $depth"
+	./benchmark.sh &> $RESULTS_DIR/$depth.txt
+	mv $RESULTS_DIR/results.zip $RESULTS_DIR/results-$RECURSION_DEPTH.zip
+done
diff --git a/frameworks/runAll.sh b/frameworks/runAll.sh
new file mode 100755
index 0000000000000000000000000000000000000000..2e8bc3fcec20b0de3459671a4c35dc6ba4fdb09b
--- /dev/null
+++ b/frameworks/runAll.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+echo "This scripts benchmarks all defined monitoring frameworks, currently InspectIT, Kieker and OpenTelemetry"
+
+start=$(pwd)
+for benchmark in inspectIT OpenTelemetry Kieker
+do
+        cd $benchmark
+        ./benchmark.sh &> $start/log_$benchmark.txt
+        cd $start
+done
+
diff --git a/frameworks/runR.sh b/frameworks/runR.sh
new file mode 100755
index 0000000000000000000000000000000000000000..46a1c0431640341a5b207fa4c738797e78862992
--- /dev/null
+++ b/frameworks/runR.sh
@@ -0,0 +1,26 @@
+if [ $# -lt 1 ]
+then
+	echo "Please pass the folder that should be analyzed"
+fi
+
+if [[ "$1" = /* ]]
+then
+	echo "absolute path"
+	BASE_DIR=$1
+else
+	echo "relative path"
+	BASE_DIR=$(pwd)/$1
+fi
+
+source common-functions.sh
+
+source $1/labels.sh
+
+echo "RESULTS_DIR: $RESULTS_DIR"
+echo "Rawfn: $RAWFN"
+
+RSCRIPT_PATH=stats.csv.r
+
+# Create R labels
+LABELS=$(createRLabels)
+run-r
diff --git a/frameworks/stats.csv.r b/frameworks/stats.csv.r
new file mode 100644
index 0000000000000000000000000000000000000000..8ba1ca1098b033fb93f7b5d5c61016c066c3af31
--- /dev/null
+++ b/frameworks/stats.csv.r
@@ -0,0 +1,108 @@
+############################################
+# R - script to collect all moobench results
+############################################
+
+# these values are here only as documentation. The parameters are set by benchmark.sh
+#rm(list=ls(all=TRUE))
+#data_fn="data/"
+#folder_fn="results-benchmark-binary"
+#results_fn=paste(data_fn,folder_fn,"/raw",sep="")
+#outtxt_fn=paste(data_fn,folder_fn,"/results-text.txt",sep="")
+#results_fn="raw"
+#outtxt_fn="results-text.txt"
+
+#########
+# These are configuration parameters which are automatically prepended to this file by the benchmark.sh script.
+# Therefore, they must not be set here. The following lines only serve as documentation.
+#configs.loop=10
+#configs.recursion=c(10)
+#configs.labels=c("No Probe","Inactive Probe","Collecting Data","Writing Data (ASCII)", "Writing Data (Bin)")
+#results.count=2000000
+#results.skip=1000000
+
+#bars.minval=500
+#bars.maxval=600
+
+
+##########
+# Process configuration
+
+# divisor 1 = nano, 1000 = micro, 1000000 = milli seconds
+timeUnit <- 1000 
+
+# number of Kieker writer configurations 
+numberOfWriters <- length(configs.labels)
+recursion_depth <- configs.recursion
+
+numberOfValues <- configs.loop*(results.count-results.skip)
+numbers <- c(1:(numberOfValues))
+resultDimensionNames <- list(configs.labels, numbers)
+
+# result values
+resultsBIG <- array(dim=c(numberOfWriters, numberOfValues), dimnames=resultDimensionNames)
+
+##########
+# Create result
+
+## "[ recursion , config , loop ]"
+
+numOfRowsToRead <- results.count-results.skip
+
+for (writer_idx in (1:numberOfWriters)) {
+   recordsPerSecond = c()
+   rpsLastDuration = 0
+   rpsCount = 0
+   file_idx <- writer_idx - 1
+
+   # loop
+   for (loop_counter in (1:configs.loop)) {
+      results_fn_filepath <- paste(results_fn, "-", loop_counter, "-", recursion_depth, "-", file_idx, ".csv", sep="")
+      message(results_fn_filepath)
+      results <- read.csv2(results_fn_filepath, nrows=numOfRowsToRead, skip=results.skip, quote="", colClasses=c("NULL","numeric", "numeric", "numeric"), comment.char="", col.names=c("thread_id", "duration_nsec", "gc", "t"), header=FALSE)
+      trx_idx <- c(1:numOfRowsToRead)
+      resultsBIG[writer_idx,trx_idx] <- results[["duration_nsec"]]
+   }
+}
+
+qnorm_value <- qnorm(0.975)
+
+# print results
+printDimensionNames <- list(c("mean","sd","ci95%","md25%","md50%","md75%","max","min"), c(1:numberOfWriters))
+# row number == number of computed result values, e.g., mean, min, max
+printvalues <- matrix(nrow=8, ncol=numberOfWriters, dimnames=printDimensionNames)
+
+for (writer_idx in (1:numberOfWriters)) {
+   idx_mult <- c(1:numOfRowsToRead)
+
+   valuesBIG <- resultsBIG[writer_idx,idx_mult]/timeUnit
+
+   printvalues["mean",writer_idx] <- mean(valuesBIG)
+   printvalues["sd",writer_idx] <- sd(valuesBIG)
+   printvalues["ci95%",writer_idx] <- qnorm_value*sd(valuesBIG)/sqrt(length(valuesBIG))
+   printvalues[c("md25%","md50%","md75%"),writer_idx] <- quantile(valuesBIG, probs=c(0.25, 0.5, 0.75))
+   printvalues["max",writer_idx] <- max(valuesBIG)
+   printvalues["min",writer_idx] <- min(valuesBIG)
+}
+resultstext <- formatC(printvalues,format="f",digits=4,width=8)
+
+print(resultstext)
+
+write(paste("Recursion Depth: ", recursion_depth),file=outtxt_fn,append=TRUE)
+write("response time",file=outtxt_fn,append=TRUE)
+write.table(resultstext,file=outtxt_fn,append=TRUE,quote=FALSE,sep="\t",col.names=FALSE)
+
+concResult <- ""
+headResult <- ""
+# write the first n-1 elements preceded by a comma (,)
+for (writer_idx in (1:(numberOfWriters-1))) {
+   headResult <- paste(headResult, configs.labels[writer_idx], ",")
+   concResult <- paste(concResult, printvalues["mean",writer_idx], ",")
+}
+# write the last without a comma
+headResult <- paste(headResult, configs.labels[numberOfWriters])
+concResult <- paste(concResult, printvalues["mean", numberOfWriters])
+  
+write(headResult,file=outcsv_fn,append=TRUE)
+write(concResult,file=outcsv_fn,append=TRUE)
+
+# end
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 622ab64a3cb60378cd29384961554c0b032c9368..ffed3a254e91df704a9acc0f2745c0e340d9b582 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
diff --git a/tools/getConfidenceIntervalTable/getConfidenceIntervalTable.sh b/tools/getConfidenceIntervalTable/getConfidenceIntervalTable.sh
new file mode 100755
index 0000000000000000000000000000000000000000..cbdef3b8c139d2ddd0d7cf83db6c0475ec7b3d21
--- /dev/null
+++ b/tools/getConfidenceIntervalTable/getConfidenceIntervalTable.sh
@@ -0,0 +1,75 @@
+#!/bin/bash
+
+## Generate Results file
+function run-r() {
+R --vanilla --silent << EOF
+results_fn="${RAWFN}"
+outtxt_fn="${RESULTS_DIR}/results-text.txt"
+outcsv_fn="${RESULTS_DIR}/results-text.csv"
+configs.loop=${NUM_OF_LOOPS}
+configs.recursion=${RECURSION_DEPTH}
+configs.labels=c($LABELS)
+results.count=${TOTAL_NUM_OF_CALLS}
+results.skip=${TOTAL_NUM_OF_CALLS}/2
+source("${RSCRIPT_PATH}")
+EOF
+}
+
+function createVariantsString {
+	local LABELS=""
+	local variants=$(ls $RESULTS_DIR | grep ".csv" | awk -F'[.-]' '{print $4}' | sort | uniq | sed '/^[[:space:]]*$/d')
+	for variant in $variants
+	do
+		if [ -z "$LABELS" ]
+		then
+			LABELS="\"$variant\""
+		else
+			LABELS="$LABELS, \"$variant\""
+		fi
+	done
+	echo $LABELS
+}
+
+function createLatexTable {
+	cat $RESULTS_DIR/results-text.txt | tail -n 8 > transposeMe.csv
+	awk '
+	{ 
+	    for (i=1; i<=NF; i++)  {
+		a[NR,i] = $i
+	    }
+	}
+	NF>p { p = NF }
+	END {    
+	    for(j=1; j<=p; j++) {
+		str=a[1,j]
+		for(i=2; i<=NR; i++){
+		    str=str" "a[i,j];
+		}
+		print str
+	    }
+	}' transposeMe.csv > transposed.csv
+
+	cat transposed.csv | awk '{print "["$1-$3";"$1+$3"] & "$2}'
+}
+
+if [ "$#" -lt 1 ]
+then
+    echo "Please pass folder with MooBench CSV files for analysis!"
+    exit 1
+fi
+
+
+RESULTS_DIR=$1
+
+RAWFN=$RESULTS_DIR/raw
+NUM_OF_LOOPS=10
+RECURSION_DEPTH=10
+TOTAL_NUM_OF_CALLS=2000000
+LABELS=$(createVariantsString)
+
+
+RSCRIPT_PATH=$MOOBENCH_HOME/frameworks/Kieker/scripts/stats.csv.r
+
+run-r
+
+createLatexTable
diff --git a/tools/getConfidenceIntervalTable/stats.csv.r b/tools/getConfidenceIntervalTable/stats.csv.r
new file mode 100644
index 0000000000000000000000000000000000000000..8ba1ca1098b033fb93f7b5d5c61016c066c3af31
--- /dev/null
+++ b/tools/getConfidenceIntervalTable/stats.csv.r
@@ -0,0 +1,108 @@
+############################################
+# R - script to collect all moobench results
+############################################
+
+# these values are here only as documentation. The parameters are set by benchmark.sh
+#rm(list=ls(all=TRUE))
+#data_fn="data/"
+#folder_fn="results-benchmark-binary"
+#results_fn=paste(data_fn,folder_fn,"/raw",sep="")
+#outtxt_fn=paste(data_fn,folder_fn,"/results-text.txt",sep="")
+#results_fn="raw"
+#outtxt_fn="results-text.txt"
+
+#########
+# These are configuration parameters which are automatically prepended to this file by the benchmark.sh script.
+# Therefore, they must not be set here. The following lines only serve as documentation.
+#configs.loop=10
+#configs.recursion=c(10)
+#configs.labels=c("No Probe","Inactive Probe","Collecting Data","Writing Data (ASCII)", "Writing Data (Bin)")
+#results.count=2000000
+#results.skip=1000000
+
+#bars.minval=500
+#bars.maxval=600
+
+
+##########
+# Process configuration
+
+# divisor 1 = nano, 1000 = micro, 1000000 = milli seconds
+timeUnit <- 1000 
+
+# number of Kieker writer configurations 
+numberOfWriters <- length(configs.labels)
+recursion_depth <- configs.recursion
+
+numberOfValues <- configs.loop*(results.count-results.skip)
+numbers <- c(1:(numberOfValues))
+resultDimensionNames <- list(configs.labels, numbers)
+
+# result values
+resultsBIG <- array(dim=c(numberOfWriters, numberOfValues), dimnames=resultDimensionNames)
+
+##########
+# Create result
+
+## "[ recursion , config , loop ]"
+
+numOfRowsToRead <- results.count-results.skip
+
+for (writer_idx in (1:numberOfWriters)) {
+   recordsPerSecond = c()
+   rpsLastDuration = 0
+   rpsCount = 0
+   file_idx <- writer_idx - 1
+
+   # loop
+   for (loop_counter in (1:configs.loop)) {
+      results_fn_filepath <- paste(results_fn, "-", loop_counter, "-", recursion_depth, "-", file_idx, ".csv", sep="")
+      message(results_fn_filepath)
+      results <- read.csv2(results_fn_filepath, nrows=numOfRowsToRead, skip=results.skip, quote="", colClasses=c("NULL","numeric", "numeric", "numeric"), comment.char="", col.names=c("thread_id", "duration_nsec", "gc", "t"), header=FALSE)
+      trx_idx <- c(1:numOfRowsToRead)
+      resultsBIG[writer_idx,trx_idx] <- results[["duration_nsec"]]
+   }
+}
+
+qnorm_value <- qnorm(0.975)
+
+# print results
+printDimensionNames <- list(c("mean","sd","ci95%","md25%","md50%","md75%","max","min"), c(1:numberOfWriters))
+# row number == number of computed result values, e.g., mean, min, max
+printvalues <- matrix(nrow=8, ncol=numberOfWriters, dimnames=printDimensionNames)
+
+for (writer_idx in (1:numberOfWriters)) {
+   idx_mult <- c(1:numOfRowsToRead)
+
+   valuesBIG <- resultsBIG[writer_idx,idx_mult]/timeUnit
+
+   printvalues["mean",writer_idx] <- mean(valuesBIG)
+   printvalues["sd",writer_idx] <- sd(valuesBIG)
+   printvalues["ci95%",writer_idx] <- qnorm_value*sd(valuesBIG)/sqrt(length(valuesBIG))
+   printvalues[c("md25%","md50%","md75%"),writer_idx] <- quantile(valuesBIG, probs=c(0.25, 0.5, 0.75))
+   printvalues["max",writer_idx] <- max(valuesBIG)
+   printvalues["min",writer_idx] <- min(valuesBIG)
+}
+resultstext <- formatC(printvalues,format="f",digits=4,width=8)
+
+print(resultstext)
+
+write(paste("Recursion Depth: ", recursion_depth),file=outtxt_fn,append=TRUE)
+write("response time",file=outtxt_fn,append=TRUE)
+write.table(resultstext,file=outtxt_fn,append=TRUE,quote=FALSE,sep="\t",col.names=FALSE)
+
+concResult <- ""
+headResult <- ""
+# write the first n-1 elements preceded by a comma (,)
+for (writer_idx in (1:(numberOfWriters-1))) {
+   headResult <- paste(headResult, configs.labels[writer_idx], ",")
+   concResult <- paste(concResult, printvalues["mean",writer_idx], ",")
+}
+# write the last without a comma
+headResult <- paste(headResult, configs.labels[numberOfWriters])
+concResult <- paste(concResult, printvalues["mean", numberOfWriters])
+  
+write(headResult,file=outcsv_fn,append=TRUE)
+write(concResult,file=outcsv_fn,append=TRUE)
+
+# end
diff --git a/tools/receiver/build.gradle b/tools/receiver/build.gradle
index b777f15fea4f4a731d1b4d35dfc830ab4eb54e20..15a5514a6ffc4fb25dc6e7fd42855df9f2dac28a 100644
--- a/tools/receiver/build.gradle
+++ b/tools/receiver/build.gradle
@@ -13,3 +13,12 @@ dependencies {
     implementation 'org.slf4j:slf4j-api:1.7.+'
     implementation 'ch.qos.logback:logback-classic:1.2.3'  
 }
+
+jar {
+	doLast {
+		copy {
+		    from jar
+		    into "../../frameworks/Kieker/scripts/receiver/lib/"
+	    }
+	}
+}
diff --git a/tools/receiver/src/main/java/moobench/tools/receiver/ReceiverConfiguration.java b/tools/receiver/src/main/java/moobench/tools/receiver/ReceiverConfiguration.java
index 4fb52f4d89615768f6cbbff9fc71f0daa044bf31..0f0636cb51da079b18e6d9397652721a726778e9 100644
--- a/tools/receiver/src/main/java/moobench/tools/receiver/ReceiverConfiguration.java
+++ b/tools/receiver/src/main/java/moobench/tools/receiver/ReceiverConfiguration.java
@@ -1,13 +1,14 @@
 package moobench.tools.receiver;
 
+import kieker.analysis.source.rewriter.NoneTraceMetadataRewriter;
 import kieker.analysis.source.tcp.MultipleConnectionTcpSourceStage;
 import kieker.analysisteetime.plugin.filter.forward.CountingFilter;
 import teetime.framework.Configuration;
 
 public class ReceiverConfiguration extends Configuration {
 
-	public ReceiverConfiguration(int inputPort, int bufferSize) {
-		MultipleConnectionTcpSourceStage source = new MultipleConnectionTcpSourceStage(inputPort, bufferSize, null);
+	public ReceiverConfiguration(final int inputPort, final int bufferSize) {
+		MultipleConnectionTcpSourceStage source = new MultipleConnectionTcpSourceStage(inputPort, bufferSize, new NoneTraceMetadataRewriter());
 		CountingFilter counting = new CountingFilter();
 		
 		connectPorts(source.getOutputPort(), counting.getInputPort());