diff --git a/bench/run.py b/bench/run.py
index 68be8954beb7d60fab84fa69028fd1f7e61b6132..f06bede63d61fae04e7b0c97a790420a531a1263 100755
--- a/bench/run.py
+++ b/bench/run.py
@@ -100,7 +100,14 @@ def run_bench(suite_dir, bench_run_data, bench, burst_len):
     bench_run_data.joinpath("burst_len").write_text(str(burst_len))
 
     with open(bench_run_data.joinpath("bench-run.yaml"), "w") as bench_run_yaml:
-        bench_run = copy.deepcopy(bench)
+        bench_cp = copy.deepcopy(bench)
+
+        # Merge boot/run for eval, were only needed to avoid reboots here.
+        bench_run = {}
+        bench_run.update(bench_cp.pop('boot'))
+        bench_run.update(bench_cp.pop('run'))
+        bench_run.update(bench_cp)
+
         bench_run["date"] = datetime.datetime.now().isoformat()
         bench_run["burst_len"] = burst_len
         yaml.dump(bench_run, bench_run_yaml)
diff --git a/eval/plot-workload-perf b/eval/plot-workload-perf
index 78d0d286069c7a446522b6ce4b515fbc1cf53e82..721b5b6ce71a8e7c5f3f706015ef2aae8be34b92 100755
--- a/eval/plot-workload-perf
+++ b/eval/plot-workload-perf
@@ -8,11 +8,11 @@ cns <- colnames(DATA)
 perf_metrics <- cns[startsWith(cns, "perf_") & ! startsWith(cns, "perf_counter_run_time_")]
 for (m in perf_metrics) {
   print(m)
-  ggplot(DATA, aes(x=run_WORKLOAD, y=get(m), colour=burst_pos)) +
+  ggplot(DATA, aes(x=WORKLOAD, y=get(m), colour=burst_pos)) +
     geom_smooth(linetype = "dashed", method = "lm") +
     geom_point() +
-    facet_grid(rows=vars(boot_T, workload_exitcode),
-               cols=vars(run_CPUFREQ, bench_script),
+    facet_grid(rows=vars(T, workload_exitcode),
+               cols=vars(CPUFREQ, bench_script),
                labeller=label_both, scales="free")
   eval_save(paste0(m, "-point"))
 }
diff --git a/eval/plotlib.R b/eval/plotlib.R
index 0caf21ffef3a85768dcd7ba58be831166b7ab1cf..66d197f1836d5c7f6af7344d9dc0ab29edfbb19e 100644
--- a/eval/plotlib.R
+++ b/eval/plotlib.R
@@ -99,10 +99,10 @@ ALL_DATA <- read_tsv(
 )
 DATA <- ALL_DATA %>%
   mutate(
-    CPU = factor(case_when(
-      boot_T == "easy16" ~ "AMD 3950X",
-      boot_T == "nuc" ~ "Intel i5-6260U",
-      ), levels = c("AMD 3950X", "Intel i5-6260U")),
+    ## CPU = factor(case_when(
+    ##   boot_T == "easy16" ~ "AMD 3950X",
+    ##   boot_T == "nuc" ~ "Intel i5-6260U",
+    ##   ), levels = c("AMD 3950X", "Intel i5-6260U")),
     Caches = factor(case_when(
       burst_pos == 0 ~ "Cold Caches",
       burst_pos == max(burst_pos) ~ "Hot Caches",
diff --git a/system/Makefile b/system/Makefile
index 2792a6d9ab45df0de28c527368af84a78d492b07..f7779d578a792c707681a74a9ab8310a92465fc2 100644
--- a/system/Makefile
+++ b/system/Makefile
@@ -119,8 +119,7 @@ $(LINUX_PERF_TARXZ): $(LINUX_TREE)
 	touch $@
 
 .build/target-state/faui49%/kernel: .build/target-state/faui49%/deb-install
-	./scripts/target-boot -r "$$(cat .build/linux-bindeb/kernel.release)"
-	touch $@
+	./scripts/target-grub-boot -r "$$(cat .build/linux-bindeb/kernel.release)" -t $@
 
 .build/target-state/$(T)/linux-src: .build/linux-src/d.tar.gz .build/target-state/$(T)/kernel
 	./scripts/target-scpsh 'sudo rm -rfd ../target_prefix/linux-src && mkdir -p ../target_prefix/linux-src'
@@ -129,7 +128,7 @@ $(LINUX_PERF_TARXZ): $(LINUX_TREE)
 
 .build/target-state/$(T)/linux-tools: .build/target-state/$(T)/linux-src .build/target-state/$(T)/kernel
 	./scripts/target-scpsh 'sudo apt-get --assume-yes install libcpupower-dev libpci-dev libcap-dev make gcc binutils-dev libreadline-dev libbison-dev flex libelf-dev'
-	./scripts/target-scpsh 'sudo make STATIC=true -C ../target_prefix/linux-src/tools bpf_install cpupower_install turbostat_install'
+	./scripts/target-scpsh 'sudo make STATIC=true -j $$(getconf _NPROCESSORS_ONLN) -C ../target_prefix/linux-src/tools bpf_install cpupower_install turbostat_install'
 	touch $@
 
 # Could also be installed from ../target_prefix/linux-src on target, but this
diff --git a/system/scripts/make-linux-deb b/system/scripts/make-linux-deb
index e2dcd433bee69acc89a324d1222ced25188298c7..f1312d457058ad25a243b38ec751bbb29ad9207d 100755
--- a/system/scripts/make-linux-deb
+++ b/system/scripts/make-linux-deb
@@ -9,10 +9,25 @@ DST=$3
 
 MAKE=${MAKE:-make -j `getconf _NPROCESSORS_ONLN`}
 
+RM="rm -rfd"
+if which trash
+then
+   RM=trash
+fi
+
 # Determine the kernel release and build version our package will have.
 env - PATH=${PATH} ${MAKE} -C ${LINUX} include/config/kernel.release
 KERNEL_RELEASE=`cat ${LINUX}/include/config/kernel.release`
 
+set +e
+$RM linux-*_${KERNEL_RELEASE}-*_amd64.buildinfo
+$RM linux-*_${KERNEL_RELEASE}-*_amd64.changes
+$RM linux-headers-${KERNEL_RELEASE}_${KERNEL_RELEASE}-*_amd64.deb
+$RM linux-image-${KERNEL_RELEASE}_${KERNEL_RELEASE}-*_amd64.deb
+$RM linux-image-${KERNEL_RELEASE}-dbg_${KERNEL_RELEASE}-*_amd64.deb
+$RM linux-libc-dev_${KERNEL_RELEASE}-*_amd64.deb
+set -e
+
 # if [ -f ${LINUX}/.version ]
 # then
 #     KBUILD_BUILD_VERSION_OLD=`cat ${LINUX}/.version`
@@ -39,7 +54,7 @@ fi
 #     KBUILD_BUILD_VERSION=1
 # fi
 
-TMP=$(mktemp -d $USER-$(basename $0))/
+TMP=$(mktemp -d --suffix $USER-$(basename $0))/
 
 ls -al > "${TMP}kernel.filenames"
 mv linux-*_${KERNEL_RELEASE}-*_amd64.buildinfo "${TMP}linux_amd64.buildinfo"
diff --git a/system/scripts/target-boot b/system/scripts/target-grub-boot
similarity index 50%
rename from system/scripts/target-boot
rename to system/scripts/target-grub-boot
index e4beb71fc6ab94621e2606440c6c8b4a5c0bb426..d59a172f036512decbd0021248eb2d7e8f0a9e19 100755
--- a/system/scripts/target-boot
+++ b/system/scripts/target-grub-boot
@@ -1,30 +1,35 @@
 #!/usr/bin/env bash
 set -euo pipefail
-
 set -x
 
+
 . ./env.sh
 
 release=undefined
 cmdline=${GRUB_CMDLINE_LINUX:-}
 
 usage() {
-    echo "Usage: $0 -r KERNEL_RELEASE [-c CMDLINE]" >&2
+    echo "Usage: $0 -r KERNEL_RELEASE -t REBOOT_MARKER [-c CMDLINE]
+
+Reboot marker is touched whenever the system was rebooted with the new kernel, to be used as a make dependency." >&2
     exit 1
 }
 
-while getopts "r:c:" opt; do
-    case "${opt}" in
-        r)
-            release=${OPTARG}
-            ;;
-        c)
-            cmdline=${OPTARG}
-            ;;
-        *)
-            usage
-            ;;
-    esac
+while getopts "r:c:t:" opt; do
+	case "${opt}" in
+		r)
+			release=${OPTARG}
+			;;
+		c)
+			cmdline=${OPTARG}
+			;;
+		t)
+			rebootmarker=${OPTARG}
+			;;
+		*)
+			usage
+			;;
+	esac
 done
 shift $((OPTIND-1))
 
@@ -38,12 +43,16 @@ booted_cmdline=$(tssh cat /proc/cmdline)
 booted_release=$(tssh uname -r)
 if [[ "${booted_release}" = "${release}" ]] && [[ "${booted_cmdline}" = *${cmdline}* ]]
 then
-    exit 0
+	if [ ! -e $rebootmarker ]
+	then
+		touch $rebootmarker
+	fi
+	exit 0
 fi
 echo "Booting ${release} from ${booted_release}" >&2
 
 tssh sudo mv -n /etc/default/grub /etc/default/grub.$USER-backup || true
-echo "# Generated by $(hostname) $(pwd) $0, previous contents have been moved to ./grub.$USER-backup
+echo "# Generated on $(hostname) in $(pwd) by $0, previous contents have been moved to ./grub.$USER-backup
 GRUB_DEFAULT=saved
 GRUB_TIMEOUT=5
 GRUB_DISTRIBUTOR='Debian'
@@ -51,26 +60,39 @@ GRUB_CMDLINE_LINUX_DEFAULT='panic=30'
 GRUB_CMDLINE_LINUX='${cmdline}'" | tssh sudo tee /etc/default/grub
 tssh sudo update-grub
 
-# Can also be "Ubuntu".
+# I don“t know where to get this value or why grub-reboot needs this in the first place.
 distro="Debian GNU/Linux"
+if ! ./scripts/target-scpsh "grep '$distro' /boot/grub/grub.cfg"
+then
+   distro="GNU/Linux" # maybe thats on Debian 11
+fi
+if ! ./scripts/target-scpsh "grep '$distro' /boot/grub/grub.cfg"
+then
+   distro="Ubuntu"
+fi
 
+# Set the fallback kernel in case the new custom kernel panics. That's also why
+# we set panic=30 and GRUB_DEFAULT=saved in grub config above.
 ${TARGET_EXEC} "sudo grub-set-default \"Advanced options for ${distro}>${distro}, with Linux \$(uname -r)\""
 
-# Sanity check, does the fallback entry exist?
+# Sanity check, does the fallback boot entry exist?
 ${TARGET_EXEC} "sudo grep \"Advanced options for ${distro}\" /boot/grub/grub.cfg"
 ${TARGET_EXEC} "sudo grep \"${distro}, with Linux \$(uname -r)\" /boot/grub/grub.cfg"
 
+# Set the new kernel, effective only for the next reboot. Otherwise it falls
+# back to the default kernel.
 ${TARGET_EXEC} "sudo grub-reboot \"Advanced options for ${distro}>${distro}, with Linux ${release}\""
 ${TARGET_EXEC} 'sudo reboot' || true
 
 # Allow it to shut down.
 sleep 10
 
-new_release=$(AUTOSSH_POLL=5 AUTOSSH_GATETIME=0 autossh -p ${SSH_PORT} ${SSH_DEST} 'uname -r')
+new_release=$(AUTOSSH_POLL=5 AUTOSSH_GATETIME=1 autossh -p ${SSH_PORT} ${SSH_DEST} 'uname -r')
 if [ "${new_release}" = "${release}" ]
 then
-    exit 0
+	touch $rebootmarker
+	exit 0
 else
-    echo "Failed to boot ${release} on ${SSH_DEST}:${SSH_PORT}" >&2
-    exit 1
+	echo "Failed to boot ${release} on ${SSH_DEST}:${SSH_PORT}" >&2
+	exit 1
 fi