diff --git a/.gitignore b/.gitignore
index ff89d39d332c850925e8c78ed6c9cbbf0c4bd2fb..f636df0b8562ba294769ba8c516a1c31327c677e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,7 +13,7 @@ frameworks/Kieker/scripts/benchmark/
 frameworks/Kieker/scripts/data/
 frameworks/Kieker/scripts/kieker-*-aspectj.jar
 frameworks/Kieker/scripts/receiver/
-frameworks/Kieker/scripts/results-kieker/
+frameworks/Kieker/results-Kieker/
 frameworks/Kieker/scripts/benchmark_*
 frameworks/SPASSmeter/spassmeter.log
 frameworks/SPASSmeter/tmp/
@@ -24,7 +24,7 @@ frameworks/inspectIT/logs/
 frameworks/inspectIT/tmp/
 frameworks/inspectIT/zipkin/
 frameworks/inspectIT/configuration.txt
-frameworks/inspectIT/results-inspectit/
+frameworks/inspectIT/results-inspectIT/
 frameworks/inspectIT/prometheus-2.28.1.linux-amd64/
 frameworks/opentelemetry/results-opentelemetry/
 frameworks/opentelemetry/opentelemetry.log
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/benchmark.sh b/frameworks/Kieker/scripts/benchmark.sh
index 40748a8bdc92fe937118a6b00d23a21baedb45a1..02eb06a7496910b39d65e3571c48a9adb7123ada 100755
--- a/frameworks/Kieker/scripts/benchmark.sh
+++ b/frameworks/Kieker/scripts/benchmark.sh
@@ -18,6 +18,10 @@ fi
 
 source ../../common-functions.sh
 
+# Only temporary fix: Overwrite Kieker results folder here
+RESULTS_DIR=../results-Kieker
+RAWFN=$RESULTS_DIR"/raw"
+
 getKiekerAgent
 
 if [ -f "${BASE_DIR}/common-functions" ] ; then
@@ -65,8 +69,6 @@ information "Removing and recreating '$RESULTS_DIR'"
 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} -Xms1G -Xmx2G"
@@ -85,22 +87,12 @@ 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}/receiver/bin/receiver 2345"
@@ -184,13 +176,6 @@ function execute-benchmark-body() {
   fi
 }
 
-function printIntermediaryResults {
-   for ((index=0;index<${#WRITER_CONFIG[@]};index+=1)); do
-      echo -n "Intermediary results "$TITLE[$index]" "
-      cat results-kieker/raw-*-${RECURSION_DEPTH}-${index}.csv | awk -F';' '{print $2}' | getSum
-   done
-}
-
 ## Execute Benchmark
 function execute-benchmark() {
   for ((loop=1;loop<=${NUM_OF_LOOPS};loop+=1)); do
diff --git a/frameworks/Kieker/scripts/config b/frameworks/Kieker/scripts/config
index d499e03a3f4fe87c2e7fed6af4ce4562f156b64a..6486f0fa674fb30bb592722319b024be9e97dae6 100644
--- a/frameworks/Kieker/scripts/config
+++ b/frameworks/Kieker/scripts/config
@@ -4,10 +4,9 @@
 # path setup
 JAVA_BIN="java"
 
-RSCRIPT_PATH="${BASE_DIR}/stats.csv.r"
+RSCRIPT_PATH="../../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"
 
diff --git a/frameworks/common-functions.sh b/frameworks/common-functions.sh
index 43909b470d59c8aa9f3a8e67087ff0ffa6902d45..dfabac2003231c52ee4f54c464c154d5434f006e 100644
--- a/frameworks/common-functions.sh
+++ b/frameworks/common-functions.sh
@@ -110,21 +110,33 @@ function stopBackgroundProcess {
 }
 
 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
+	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
diff --git a/frameworks/inspectIT/benchmark.sh b/frameworks/inspectIT/benchmark.sh
index c0211262ab9e6115b283d005d253b1160a83861a..49fbb001d6163c253d3839e489a26b0bac73ab7d 100755
--- a/frameworks/inspectIT/benchmark.sh
+++ b/frameworks/inspectIT/benchmark.sh
@@ -2,22 +2,22 @@
 
 function runNoInstrumentation {
     # No instrumentation
-    echo " # ${i}.$RECURSION_DEPTH.${k} No instrumentation"
-    echo " # ${i}.$RECURSION_DEPTH.${k} No instrumentation" >>${BASEDIR}inspectit.log
+    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} &> ${RESULTSDIR}output_"$i"_"$RECURSION_DEPTH"_noinstrumentation.txt
+        ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt
 }
 
 function runInspectITDeactivated {
     # InspectIT (minimal)
     k=`expr ${k} + 1`
-    echo " # ${i}.$RECURSION_DEPTH.${k} InspectIT (deactivated)"
-    echo " # ${i}.$RECURSION_DEPTH.${k} InspectIT (deactivated)" >>${BASEDIR}inspectit.log
+    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 \
@@ -26,7 +26,7 @@ function runInspectITDeactivated {
         --total-threads ${THREADS} \
         --recursion-depth ${RECURSION_DEPTH} \
         --force-terminate \
-        ${MOREPARAMS} &> ${RESULTSDIR}output_"$i"_"$RECURSION_DEPTH"_inspectit.txt
+        ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt
     sleep $SLEEP_TIME
 }
 
@@ -34,8 +34,8 @@ function runInspectITDeactivated {
 function runInspectITZipkin {
     # InspectIT (minimal)
     k=`expr ${k} + 1`
-    echo " # ${i}.$RECURSION_DEPTH.${k} InspectIT (Zipkin)"
-    echo " # ${i}.$RECURSION_DEPTH.${k} InspectIT (Zipkin)" >>${BASEDIR}inspectit.log
+    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} \
@@ -45,7 +45,7 @@ function runInspectITZipkin {
         --total-threads ${THREADS} \
         --recursion-depth ${RECURSION_DEPTH} \
         --force-terminate \
-        ${MOREPARAMS} &> ${RESULTSDIR}output_"$i"_"$RECURSION_DEPTH"_inspectit.txt
+        ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt
     sleep $SLEEP_TIME
     stopBackgroundProcess
 }
@@ -53,8 +53,8 @@ function runInspectITZipkin {
 function runInspectITPrometheus {
     # InspectIT (minimal)
     k=`expr ${k} + 1`
-    echo " # ${i}.$RECURSION_DEPTH.${k} InspectIT (Prometheus)"
-    echo " # ${i}.$RECURSION_DEPTH.${k} InspectIT (Prometheus)" >>${BASEDIR}inspectit.log
+    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} \
@@ -64,15 +64,15 @@ function runInspectITPrometheus {
         --total-threads ${THREADS} \
         --recursion-depth ${RECURSION_DEPTH} \
         --force-terminate \
-        ${MOREPARAMS} &> ${RESULTSDIR}output_"$i"_"$RECURSION_DEPTH"_inspectit.txt
+        ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt
     sleep $SLEEP_TIME
     stopBackgroundProcess
 }
 
 function cleanup {
-	[ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
-	echo >>${BASEDIR}inspectit.log
-	echo >>${BASEDIR}inspectit.log
+	[ -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}
 }
@@ -81,27 +81,12 @@ function getSum {
   awk '{sum += $1; square += $1^2} END {print "Average: "sum/NR" Standard Deviation: "sqrt(square / NR - (sum/NR)^2)" Count: "NR}'
 }
 
-function printIntermediaryResults {
-    echo -n "Intermediary results uninstrumented "
-    cat results-inspectit/raw-*-"$RECURSION_DEPTH"-0.csv | awk -F';' '{print $2}' | getSum
-    
-    echo -n "Intermediary results inspectIT Deactivated"
-    cat results-inspectit/raw-*-"$RECURSION_DEPTH"-1.csv | awk -F';' '{print $2}' | getSum
-    
-    echo -n "Intermediary results inspectIT Zipkin "
-    cat results-inspectit/raw-*-"$RECURSION_DEPTH"-2.csv | awk -F';' '{print $2}' | getSum
-    
-    echo -n "Intermediary results inspectIT Prometheus "
-    cat results-inspectit/raw-*-"$RECURSION_DEPTH"-3.csv | awk -F';' '{print $2}' | getSum
-}
-
 JAVABIN=""
 
-RSCRIPTDIR=r/
-BASEDIR=./
-RESULTSDIR="${BASEDIR}results-inspectit/"
+BASE_DIR=$(pwd)
 
 source ../common-functions.sh
+source labels.sh
 
 checkMoobenchApplication
 
@@ -113,14 +98,12 @@ MOREPARAMS="${MOREPARAMS}"
 TIME=`expr ${METHODTIME} \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSION_DEPTH} \* ${NUM_OF_LOOPS} + ${SLEEPTIME} \* 4 \* ${NUM_OF_LOOPS}  \* ${RECURSION_DEPTH} + 50 \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSION_DEPTH} \* ${NUM_OF_LOOPS} `
 echo "Experiment will take circa ${TIME} seconds."
 
-echo "Removing and recreating '$RESULTSDIR'"
-(rm -rf ${RESULTSDIR}) && mkdir -p ${RESULTSDIR}
+echo "Removing and recreating '$RESULTS_DIR'"
+(rm -rf ${RESULTS_DIR}) && mkdir -p ${RESULTS_DIR}
 
 # Clear inspectit.log and initialize logging
-rm -f ${BASEDIR}inspectit.log
-touch ${BASEDIR}inspectit.log
-
-RAWFN="${RESULTSDIR}raw"
+rm -f ${BASE_DIR}inspectit.log
+touch ${BASE_DIR}inspectit.log
 
 JAVAARGS="-server"
 JAVAARGS="${JAVAARGS} -Xms1G -Xmx2G"
@@ -128,19 +111,20 @@ JAVAARGS="${JAVAARGS} -verbose:gc "
 JAR="-jar MooBench.jar --application moobench.application.MonitoredClassSimple"
 
 JAVAARGS_NOINSTR="${JAVAARGS}"
-JAVAARGS_LTW="${JAVAARGS} -javaagent:${BASEDIR}agent/inspectit-ocelot-agent-1.11.1.jar -Djava.util.logging.config.file=${BASEDIR}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=${BASEDIR}config/onlyInstrument/"
-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=${BASEDIR}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=${BASEDIR}config/prometheus/"
-
+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_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_OF_LOOPS};i+=1)); do
     k=0
     echo "## Starting iteration ${i}/${NUM_OF_LOOPS}"
-    echo "## Starting iteration ${i}/${NUM_OF_LOOPS}" >>${BASEDIR}inspectit.log
+    echo "## Starting iteration ${i}/${NUM_OF_LOOPS}" >>${BASE_DIR}inspectit.log
 
     runNoInstrumentation
     cleanup
@@ -156,51 +140,16 @@ for ((i=1;i<=${NUM_OF_LOOPS};i+=1)); do
     
     printIntermediaryResults
 done
-mv ${BASEDIR}inspectit.log ${RESULTSDIR}inspectit.log
-[ -f ${RESULTSDIR}hotspot-1-${RECURSION_DEPTH}-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_OF_LOOPS}
-configs.recursion=c(${RECURSION_DEPTH})
-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_OF_LOOPS}
-configs.recursion=c(${RECURSION_DEPTH})
-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_OF_LOOPS}
-configs.recursion=c(${RECURSION_DEPTH})
-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
+[ -f ${BASE_DIR}nohup.out ] && cp ${BASE_DIR}nohup.out ${RESULTSDIR}
+[ -f ${BASE_DIR}nohup.out ] && > ${BASE_DIR}nohup.out
diff --git a/frameworks/inspectIT/labels.sh b/frameworks/inspectIT/labels.sh
new file mode 100644
index 0000000000000000000000000000000000000000..49508d65384be97fc6b3383b3c32ec6f3e80045e
--- /dev/null
+++ b/frameworks/inspectIT/labels.sh
@@ -0,0 +1,4 @@
+TITLE[0]="No instrumentation"
+TITLE[1]="Deactivated processing"
+TITLE[2]="Zipkin"
+TITLE[3]="Prometheus"
diff --git a/frameworks/runR.sh b/frameworks/runR.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3f4a207956943d7fd39784b8df54efefd3d37f60
--- /dev/null
+++ b/frameworks/runR.sh
@@ -0,0 +1,18 @@
+if [ $# -lt 1 ]
+then
+	echo "Please pass the folder that should be analyzed"
+fi
+
+BASE_DIR=$(pwd)/$1
+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