diff --git a/Dockerfile b/Dockerfile
index 055f0873d7f355f6ab16c5bff52e80d8fa51a129..073e4567993b6170637be1b7c6b82e43b43cb1c0 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:latest
+FROM ubuntu:22.04
 
 SHELL ["/bin/bash", "-c"]
 
@@ -9,6 +9,7 @@ RUN apt update -y && \
     make autoconf g++ flex bison ccache libgoogle-perftools-dev numactl \
     perl-doc libfl2 libfl-dev zlib1g zlib1g-dev gawk libncurses5 help2man
 
+RUN ln -s /usr/bin/python2 /usr/bin/python
 RUN pip3 install seaborn pandas numpy
 
 # Build latest Verilator from sources
diff --git a/README.md b/README.md
index 56b025d7a28c0bf9fa66de5f734a0a685c2821f8..c97770e9d38a568ef34c19d17a2b3432623ecc90 100644
--- a/README.md
+++ b/README.md
@@ -67,9 +67,10 @@ The experiment pipeline contains the following steps:
 - We recommend to use this experiment to go through basic functionality of the experiment pipeline (e.g., _AE kick-the-tires stage_).
 - The experiment demonstrates that the OSMOSIS WLBVT scheduler achieves fair share of SmartNIC compute engine between two tenants when compared to the Round Robin scheduler (e.g., see Figure 9 and Figure 4 in the paper).
 
-1. `osmosis-ae # nohup bash ./scripts/run_hpu_contention.sh $(pwd)/traces/ $(pwd)/logs/ &`
-2. `osmosis-ae # python3 ./scripts/postprocess_hpu_contention.py $(pwd)/logs`
-3. `osmosis-ae # python3 ./scripts/plot_hpu_contention.py`- produces `figures/hpu_occupation.pdf`
+1. `osmosis-ae # make SPIN_APP_NAME=hpu_contention osmosis`
+2. `osmosis-ae # nohup bash ./scripts/run_hpu_contention.sh $(pwd)/traces/ $(pwd)/logs/ &`
+3. `osmosis-ae # python3 ./scripts/postprocess_hpu_contention.py $(pwd)/logs`
+4. `osmosis-ae # python3 ./scripts/plot_hpu_contention.py`- produces `figures/hpu_occupation.pdf`
 
 ### Experiment 2: DMA engine contention with fragmentation