diff --git a/collect_data.sh b/collect_data.sh
index 9444841e2a10ff2fa6a42cd9ca6078a487f78759..452e8b4072de714f990670ea4cb8b66b1bc2159d 100755
--- a/collect_data.sh
+++ b/collect_data.sh
@@ -17,7 +17,15 @@ get_info() {
 }
 
 perforate() {
-    $PERF -a -o "$2" -s "$3" -l "$4" "$1"
+    if [ "$1" = "--nopluto" ]; then
+        shift
+        $PERF -e -p -g -o "$2" -s "$3" -l "$4" "$1"
+    elif [ "$1" = "--noperf" ]; then
+        shift
+        $PERF  -e -g -P -o "$2" "$1"
+    else
+        $PERF -a -o "$2" -s "$3" -l "$4" "$1"
+    fi
 }
 
 compile() {
@@ -29,214 +37,143 @@ correlation() {
 
     # accurate baseline
     # FIXME: baseline is currently without pluto, we need also accurate+pluto
+baseline() {
     output="$(dirname ${target})/$(basename ${target})"
-    compile "${output}.c" "${output}" "-O3"
-    printf "correlation,,," >> ${LOG}
+    type=baseline
+    if [ "$1" = "--pluto" ]; then
+        perforate --noperf "${target}.c" "${output}_baseline.c"
+        type=plutobaseline
+    else
+        cat "${target}.c" > "${output}_baseline.c"
+    fi
+    compile "${output}_baseline.c" "${output}" "codes/${code}/data.o"
+    printf "${code},${type},,," >> ${LOG}
     ./${output} >> ${LOG}
+}
 
+permute() {
     get_scop "${target}.c" "${target}_perf.c"
     get_info "${target}.c.openscop" | \
     while read x y; do
+        # pluto
         output="$(dirname ${target})/${x}_${y}_$(basename ${target})"
         perforate "${target}.c" "${output}.c" "$x" "$y"
         echo compile "${output}.c" "${output}"
-        compile "${output}.c" "${output}" "-O3"
-        printf "correlation,%s,%s," "${x}" "${y}" >> ${LOG}
+        compile "${output}.c" "${output}" "codes/${code}/data.o"
+        printf "${code},perfpluto,%s,%s," "${x}" "${y}" >> ${LOG}
+        ./${output} >> ${LOG}
+        # no pluto
+        perforate --nopluto "${target}.c" "${output}.c" "$x" "$y"
+        echo compile "${output}.c" "${output}"
+        compile "${output}.c" "${output}" "codes/${code}/data.o"
+        printf "${code},perf,%s,%s," "${x}" "${y}" >> ${LOG}
         ./${output} >> ${LOG}
     done
 }
 
+correlation() {
+    code=correlation
+    target="codes/${code}/${code}"
+
+    baseline
+    baseline --pluto
+
+    permute
+}
+
 jacobi_2d() {
-    target=codes/jacobi-2d/jacobi-2d
+    code=jacobi-2d
+    target="codes/${code}/${code}"
 
-    # accurate
-    output="$(dirname ${target})/$(basename ${target})"
-    compile "${output}.c" "${output}" "codes/jacobi-2d/data.o"
-    printf "jacobi-2d,,," >> ${LOG}
-    ./${output} >> ${LOG}
+    baseline
+    baseline --pluto
 
-    get_scop "${target}.c" "${target}_perf.c"
-    get_info "${target}.c.openscop" | \
-    while read x y; do
-        output="$(dirname ${target})/${x}_${y}_$(basename ${target})"
-        perforate "${target}.c" "${output}.c" "$x" "$y"
-        echo compile "${output}.c" "${output}"
-        compile "${output}.c" "${output}" "codes/jacobi-2d/data.o"
-        printf "jacobi-2d,%s,%s," "${x}" "${y}" >> ${LOG}
-        ./${output} >> ${LOG}
-    done
+    permute
 }
 
 deriche() {
-    target=codes/deriche/deriche
+    code=deriche
+    target="codes/${code}/${code}"
 
-    # accurate
-    output="$(dirname ${target})/$(basename ${target})"
-    compile "${output}.c" "${output}" "codes/deriche/data.o"
-    printf "deriche,,," >> ${LOG}
-    ./${output} >> ${LOG}
+    baseline
+    baseline --pluto
 
-    get_scop "${target}.c" "${target}_perf.c"
-    get_info "${target}.c.openscop" | \
-    while read x y; do
-        output="$(dirname ${target})/${x}_${y}_$(basename ${target})"
-        perforate "${target}.c" "${output}.c" "$x" "$y"
-        echo compile "${output}.c" "${output}"
-        compile "${output}.c" "${output}" "codes/deriche/data.o"
-        printf "deriche,%s,%s," "${x}" "${y}" >> ${LOG}
-        ./${output} >> ${LOG}
-    done
+    permute
 }
 
 floyd_warshall() {
-    target=codes/floyd-warshall/floyd-warshall
+    code=floyd-warshall
+    target="codes/${code}/${code}"
 
-    # accurate
-    output="$(dirname ${target})/$(basename ${target})"
-    compile "${output}.c" "${output}" "codes/floyd-warshall/data.o"
-    printf "floyd_warshall,,," >> ${LOG}
-    ./${output} >> ${LOG}
+    baseline
+    baseline --pluto
 
-    get_scop "${target}.c" "${target}_perf.c"
-    get_info "${target}.c.openscop" | \
-    while read x y; do
-        output="$(dirname ${target})/${x}_${y}_$(basename ${target})"
-        perforate "${target}.c" "${output}.c" "$x" "$y"
-        echo compile "${output}.c" "${output}"
-        compile "${output}.c" "${output}" "codes/floyd-warshall/data.o"
-        printf "floyd_warshall,%s,%s," "${x}" "${y}" >> ${LOG}
-        ./${output} >> ${LOG}
-    done
+    permute
 }
 
 doitgen() {
-    target=codes/doitgen/doitgen
+    code=doitgen
+    target="codes/${code}/${code}"
 
-    # accurate
-    output="$(dirname ${target})/$(basename ${target})"
-    compile "${output}.c" "${output}" "codes/doitgen/data.o"
-    printf "doitgen,,," >> ${LOG}
-    ./${output} >> ${LOG}
+    baseline
+    baseline --pluto
 
-    get_scop "${target}.c" "${target}_perf.c"
-    get_info "${target}.c.openscop" | \
-    while read x y; do
-        output="$(dirname ${target})/${x}_${y}_$(basename ${target})"
-        perforate "${target}.c" "${output}.c" "$x" "$y"
-        echo compile "${output}.c" "${output}"
-        compile "${output}.c" "${output}" "codes/doitgen/data.o"
-        printf "doitgen,%s,%s," "${x}" "${y}" >> ${LOG}
-        ./${output} >> ${LOG}
-    done
+    permute
 }
 
 seidel_2d() {
-    target=codes/seidel-2d/seidel-2d
+    code=seidel-2d
+    target="codes/${code}/${code}"
 
-    # accurate
-    output="$(dirname ${target})/$(basename ${target})"
-    compile "${output}.c" "${output}" "codes/seidel-2d/data.o"
-    printf "seidel-2d,,," >> ${LOG}
-    ./${output} >> ${LOG}
+    baseline
+    baseline --pluto
 
-    get_scop "${target}.c" "${target}_perf.c"
-    get_info "${target}.c.openscop" | \
-    while read x y; do
-        output="$(dirname ${target})/${x}_${y}_$(basename ${target})"
-        perforate "${target}.c" "${output}.c" "$x" "$y"
-        echo compile "${output}.c" "${output}"
-        compile "${output}.c" "${output}" "codes/seidel-2d/data.o"
-        printf "seidel-2d,%s,%s," "${x}" "${y}" >> ${LOG}
-        ./${output} >> ${LOG}
-    done
+    permute
 }
 
 fdtd_2d() {
-    target=codes/fdtd-2d/fdtd-2d
+    code=fdtd-2d
+    target="codes/${code}/${code}"
 
-    # accurate
-    output="$(dirname ${target})/$(basename ${target})"
-    compile "${output}.c" "${output}" "codes/fdtd-2d/data.o"
-    printf "fdtd-2d,,," >> ${LOG}
-    ./${output} >> ${LOG}
+    baseline
+    baseline --pluto
 
-    get_scop "${target}.c" "${target}_perf.c"
-    get_info "${target}.c.openscop" | \
-    while read x y; do
-        output="$(dirname ${target})/${x}_${y}_$(basename ${target})"
-        perforate "${target}.c" "${output}.c" "$x" "$y"
-        echo compile "${output}.c" "${output}"
-        compile "${output}.c" "${output}" "codes/fdtd-2d/data.o"
-        printf "fdtd-2d,%s,%s," "${x}" "${y}" >> ${LOG}
-        ./${output} >> ${LOG}
-    done
+    permute
 }
 
 adi() {
-    target=codes/adi/adi
+    code=adi
+    target="codes/${code}/${code}"
 
-    # accurate
-    output="$(dirname ${target})/$(basename ${target})"
-    compile "${output}.c" "${output}" "codes/adi/data.o"
-    printf "adi,,," >> ${LOG}
-    ./${output} >> ${LOG}
+    baseline
+    baseline --pluto
 
-    get_scop "${target}.c" "${target}_perf.c"
-    get_info "${target}.c.openscop" | \
-    while read x y; do
-        output="$(dirname ${target})/${x}_${y}_$(basename ${target})"
-        perforate "${target}.c" "${output}.c" "$x" "$y"
-        echo compile "${output}.c" "${output}"
-        compile "${output}.c" "${output}" "codes/adi/data.o"
-        printf "adi,%s,%s," "${x}" "${y}" >> ${LOG}
-        ./${output} >> ${LOG}
-    done
+    permute
 }
 
 heat_3d() {
-    target=codes/heat-3d/heat-3d
+    code=heat-3d
+    target="codes/${code}/${code}"
 
-    # accurate
-    output="$(dirname ${target})/$(basename ${target})"
-    compile "${output}.c" "${output}" "codes/heat-3d/data.o"
-    printf "heat-3d,,," >> ${LOG}
-    ./${output} >> ${LOG}
+    baseline
+    baseline --pluto
 
-    get_scop "${target}.c" "${target}_perf.c"
-    get_info "${target}.c.openscop" | \
-    while read x y; do
-        output="$(dirname ${target})/${x}_${y}_$(basename ${target})"
-        perforate "${target}.c" "${output}.c" "$x" "$y"
-        echo compile "${output}.c" "${output}"
-        compile "${output}.c" "${output}" "codes/heat-3d/data.o"
-        printf "heat-3d,%s,%s," "${x}" "${y}" >> ${LOG}
-        ./${output} >> ${LOG}
-    done
+    permute
 }
 
 jacobi_1d() {
-    target=codes/jacobi-1d/jacobi-1d
+    code=jacobi-1d
+    target="codes/${code}/${code}"
 
-    # accurate
-    output="$(dirname ${target})/$(basename ${target})"
-    compile "${output}.c" "${output}" "codes/jacobi-1d/data.o"
-    printf "jacobi-1d,,," >> ${LOG}
-    ./${output} >> ${LOG}
+    baseline
+    baseline --pluto
 
-    get_scop "${target}.c" "${target}_perf.c"
-    get_info "${target}.c.openscop" | \
-    while read x y; do
-        output="$(dirname ${target})/${x}_${y}_$(basename ${target})"
-        perforate "${target}.c" "${output}.c" "$x" "$y"
-        echo compile "${output}.c" "${output}"
-        compile "${output}.c" "${output}" "codes/jacobi-1d/data.o"
-        printf "jacobi-1d,%s,%s," "${x}" "${y}" >> ${LOG}
-        ./${output} >> ${LOG}
-    done
+    permute
 }
 
 
 hotspot() {
+    code=hotspot
     target=codes/hotspot/hotspot_openmp
 
     # accurate
@@ -259,7 +196,6 @@ hotspot() {
 correlation
 deriche
 floyd_warshall
-hotspot
 doitgen
 seidel_2d
 fdtd_2d
@@ -267,3 +203,4 @@ adi
 heat_3d
 jacobi_2d
 jacobi_1d
+#hotspot