diff --git a/eval-muhq-ma.sh b/eval-muhq-ma.sh
index a32ae455d65626fe16cb53a6330a1f596e85d3b4..a9b3111e560f5aecd16df3fc6a1273ebacf6e333 100755
--- a/eval-muhq-ma.sh
+++ b/eval-muhq-ma.sh
@@ -22,8 +22,6 @@ if [ -d "$OUT" ]; then
 	mv "$OUT" "$OUT"-"$ctime"
 fi
 
-mkdir -p "${OUT}"/{latency,throughput}
-
 NUMA_ARGS=--measure-cmd="numactl --cpunodebind=netdev:10gbe-card-p1 /usr/bin/time -o {BENCHDIR}/server_stats.{RUN}.txt -v"
 
 COMMON_ARGS=(--ssh-port "${SSH_PORT}" --host "${HOST}" --perf-energy)
@@ -40,77 +38,92 @@ COMMON_ARGS_LATENCY=(${COMMON_ARGS[@]} --data-dir ${OUT}/latency \
 echo "muhq's MA io eval"
 echo 'Writing results to' "$OUT"
 echo 'arguments:' "${COMMON_ARGS[@]}"
-echo 'throughput-arguments:' "${COMMON_ARGS_THROUGHPUT[@]}"
-echo 'latency-arguments:' "${COMMON_ARGS_LATENCY[@]}"
-
-# Baseline measurements
-./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f vanilla vanilla-200us -- emper
-
-# No sleep measurements
-./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f no-sleep no-sleep-0us-1ms -- emper
-
-# Measure parsimonious sem
-./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f parsimonious-sem -- emper
-
-# Measure registering io_uring fd's improvements
-./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f not-register-iouring -- emper
-
-# Measurements comparing runtimes
-./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -- go go-200us tokio tokio-200us
-
-# Measurements showing distributed design improvements
-./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f simple-arch simple-arch-try-syscall -- emper
-
-# Measurements showing linked future improvements
-./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f linked-futures -- emper
-
-# Measurements showing sleep strategies
-./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f pipe waitfd -- emper
-
-# Measurements showing completer, stealing, notification benefits
-./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f \
-	io-stealing \
-	pipe-no-comp io-stealing-pipe-no-comp \
-	waitfd-no-comp io-stealing-waitfd-no-comp \
-	io-notification-waitfd-no-comp \
-	-- emper
-
-# Measurements showing completer, stealing notification benefits with computation
-./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f \
-	vanilla-0us-1ms io-stealing-0us-1ms \
-	pipe-0us-1ms pipe-no-comp-0us-1ms \
-	io-stealing-pipe-no-comp-0us-1ms \
-	waitfd-0us-1ms waitfd-no-comp-0us-1ms \
-	io-stealing-waitfd-no-comp-0us-1ms \
-	io-notification-waitfd-no-comp-0us-1ms \
-	-- emper
-
-# Measurements waitfree notification variants benefits
-./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f \
-	io-notification-waitfree io-notification-waitfree-no-comp \
-	io-notification-waitfree-0us-1ms io-notification-waitfree-no-comp-0us-1ms \
-	-- emper
-
-# Measure lockless stealing variants seperatly because they are not reliable
-# and thus easier to skip
-#./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f \
-	#io-stealing-lockless \
-	#io-stealing-pipe-no-comp-lockless \
-	#io-stealing-waitfd-no-comp-lockless \
-	#io-notification-waitfd-no-comp-lockless \
-	#io-stealing-pipe-no-comp-lockless-0us-1ms \
-	#io-stealing-waitfd-no-comp-lockless-0us-1ms \
-	#io-notification-waitfd-no-comp-lockless-0us-1ms \
-	#io-notification-waitfree-no-comp-lockless \
-	#io-notification-waitfree-no-comp-lockless-0us-1ms \
-	#-- emper
-
-# Latency evaluation
-./eval.py "${COMMON_ARGS_LATENCY[@]}" -f vanilla-200us vanilla-0us-1ms no-sleep-0us-1ms \
-	-- emper go-200us tokio-200us
-
-./eval.py "${COMMON_ARGS_LATENCY[@]}" -f \
-	{pipe,waitfd}{,-no-comp}-{200us,0us-1ms} \
-	io-stealing-{pipe,waitfd}-no-comp-{200us,0us-1ms} \
-	io-notification-{,waitfree-}waitfd-no-comp-{200us,0us-1ms} \
-	-- emper
+
+## Baseline measurements
+eval_throughput() {
+	echo "Measuring throughput"
+	echo 'throughput-arguments:' "${COMMON_ARGS_THROUGHPUT[@]}"
+
+	mkdir -p "${OUT}"/throughput
+
+	./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f vanilla vanilla-200us -- emper
+
+	# No sleep measurements
+	./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f no-sleep no-sleep-0us-1ms -- emper
+
+	# Measure parsimonious sem
+	./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f parsimonious-sem -- emper
+
+	# Measure registering io_uring fd's improvements
+	./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f not-register-iouring -- emper
+
+	# Measurements comparing runtimes
+	./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -- go go-200us tokio tokio-200us
+
+	# Measurements showing distributed design improvements
+	./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f simple-arch simple-arch-try-syscall -- emper
+
+	# Measurements showing linked future improvements
+	./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f linked-futures -- emper
+
+	# Measurements showing sleep strategies
+	./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f pipe waitfd -- emper
+
+	# Measurements showing completer, stealing, notification benefits
+	./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f \
+		io-stealing \
+		pipe-no-comp io-stealing-pipe-no-comp \
+		waitfd-no-comp io-stealing-waitfd-no-comp \
+		io-notification-waitfd-no-comp \
+		-- emper
+
+	# Measurements showing completer, stealing notification benefits with computation
+	./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f \
+		vanilla-0us-1ms io-stealing-0us-1ms \
+		pipe-0us-1ms pipe-no-comp-0us-1ms \
+		io-stealing-pipe-no-comp-0us-1ms \
+		waitfd-0us-1ms waitfd-no-comp-0us-1ms \
+		io-stealing-waitfd-no-comp-0us-1ms \
+		io-notification-waitfd-no-comp-0us-1ms \
+		-- emper
+
+	# Measurements waitfree notification variants benefits
+	./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f \
+		io-notification-waitfree io-notification-waitfree-no-comp \
+		io-notification-waitfree-0us-1ms io-notification-waitfree-no-comp-0us-1ms \
+		-- emper
+
+	# Measure lockless stealing variants seperatly because they are not reliable
+	# and thus easier to skip
+	#./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f \
+		#io-stealing-lockless \
+		#io-stealing-pipe-no-comp-lockless \
+		#io-stealing-waitfd-no-comp-lockless \
+		#io-notification-waitfd-no-comp-lockless \
+		#io-stealing-pipe-no-comp-lockless-0us-1ms \
+		#io-stealing-waitfd-no-comp-lockless-0us-1ms \
+		#io-notification-waitfd-no-comp-lockless-0us-1ms \
+		#io-notification-waitfree-no-comp-lockless \
+		#io-notification-waitfree-no-comp-lockless-0us-1ms \
+		#-- emper
+}
+
+eval_latency() {
+## Latency evaluation
+	echo "Measuring latency"
+	echo 'latency-arguments:' "${COMMON_ARGS_LATENCY[@]}"
+
+	mkdir -p "${OUT}"/latency
+
+	./eval.py "${COMMON_ARGS_LATENCY[@]}" -f {no-sleep,vanilla}-{200us,0us-1ms} \
+		-- emper go-200us tokio-200us
+
+	./eval.py "${COMMON_ARGS_LATENCY[@]}" -f \
+		{pipe,waitfd}{,-no-comp}-{200us,0us-1ms} \
+		io-stealing-{pipe,waitfd}-no-comp-{200us,0us-1ms} \
+		io-notification-{,waitfree-}waitfd-no-comp-{200us,0us-1ms} \
+		-- emper
+}
+
+[[ "${EVAL_THROUGHPUT:=true}" != "false" ]] && eval_throughput
+[[ "${EVAL_LATENCY:=true}" != "false" ]] && eval_latency