diff --git a/.gitmodules b/.gitmodules
index 1540682e01bc0db7317e75d7e1aaebe40f43056c..ae780729fd3c2e22a3a6f5029fb0b611977ccfeb 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -4,3 +4,6 @@
 [submodule "json"]
 	path = external/json
 	url = git@github.com:bcumming/json.git
+[submodule "modparser"]
+	path = external/modparser
+	url = git@github.com:eth-cscs/modparser.git
diff --git a/README.md b/README.md
index 127377ed2520ebb7b90179df39d2c74b9d05eadc..b47b3ac90a3815b7ba34de67c0dfd722de9d4b99 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,36 @@
 # cell_algorithms
 
 ```bash
+# clone repo
+git clone git@github.com:eth-cscs/cell_algorithms.git
+cd cell_algorithms/
+
+# setup sub modules
 git submodule init
 git submodule update
+
+# setup environment
+module load gcc 
+module load cmake
+export CC=`which gcc`
+export CXX=`which g++`
+
+# build modparser
+cd modparser
+cmake .
+make -j
+cd ..
+
+# create mechanisms
+cd mechanisms
+./generate.sh
+cd ..
+
+# build main project
+cmake .
+make -j
+
+# test
+cd tests
+./test.exe
 ```
diff --git a/external/modparser b/external/modparser
new file mode 160000
index 0000000000000000000000000000000000000000..d1dd8fa868c0dc7e348093ed4a4b5c6c94e29e34
--- /dev/null
+++ b/external/modparser
@@ -0,0 +1 @@
+Subproject commit d1dd8fa868c0dc7e348093ed4a4b5c6c94e29e34
diff --git a/mechanisms/generate.sh b/mechanisms/generate.sh
index 9fe83f04d1b2775eae25f0e4ec7030cd89ee6163..d9033f0dbc1cb34e6ef10b1b42d6bdd9e37b0cd7 100755
--- a/mechanisms/generate.sh
+++ b/mechanisms/generate.sh
@@ -1,4 +1,4 @@
 for mech in pas hh
 do
-    modcc -t cpu -o ../include/mechanisms/$mech.hpp ./mod/$mech.mod
+    ../modparser/bin/modcc -t cpu -o ../include/mechanisms/$mech.hpp ./mod/$mech.mod
 done