diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c3e1e6d5fb2cff6e69a7089ae97e30a789ee17d6..e9fdb0fa2dce032dd534859f92a988e82309b23b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,6 +1,7 @@
 stages:
   - build
   - test
+  - benchmark
 
 before_script:
   - export GRADLE_USER_HOME=`pwd`/.gradle
@@ -29,3 +30,16 @@ test:
     when: always
     reports:
       junit: "*/build/test-results/test/**/TEST-*.xml"
+
+timing:
+  image: openjdk:11
+  tags:
+    - docker
+  stage: benchmark
+  needs:
+    - build
+  script:
+    - ./all-timed-benchmark.sh
+  artifacts:
+    paths:
+      - results/
diff --git a/all-timed-benchmark.sh b/all-timed-benchmark.sh
new file mode 100644
index 0000000000000000000000000000000000000000..445e8598ec064703fbf5ac0a5bd9bd3f509d145c
--- /dev/null
+++ b/all-timed-benchmark.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env sh
+mkdir -p "results"
+for d in relast-*/ namelookup-xml-*/; do
+  ./timedBenchmark.sh $d 2 32
+done
diff --git a/namelookup-xml-flush/.gitignore b/namelookup-xml-flush/.gitignore
deleted file mode 100644
index bef26b50e99f1e8efd8d681885b6ea2870f80b3d..0000000000000000000000000000000000000000
--- a/namelookup-xml-flush/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/src/gen/
-/src/gen-res/
-/build/
-events.txt
-/src/main/jastadd/SocialNetworkGen.ast
-/src/main/jastadd/SocialNetworkGen.jadd
diff --git a/namelookup-xml-flush/.gitignore b/namelookup-xml-flush/.gitignore
new file mode 120000
index 0000000000000000000000000000000000000000..ceb2b6936f4f0dd308fa1247836fe38f9bc624e2
--- /dev/null
+++ b/namelookup-xml-flush/.gitignore
@@ -0,0 +1 @@
+../solve/.gitignore
\ No newline at end of file
diff --git a/namelookup-xml-inc/.gitignore b/namelookup-xml-inc/.gitignore
deleted file mode 100644
index bef26b50e99f1e8efd8d681885b6ea2870f80b3d..0000000000000000000000000000000000000000
--- a/namelookup-xml-inc/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/src/gen/
-/src/gen-res/
-/build/
-events.txt
-/src/main/jastadd/SocialNetworkGen.ast
-/src/main/jastadd/SocialNetworkGen.jadd
diff --git a/namelookup-xml-inc/.gitignore b/namelookup-xml-inc/.gitignore
new file mode 120000
index 0000000000000000000000000000000000000000..ceb2b6936f4f0dd308fa1247836fe38f9bc624e2
--- /dev/null
+++ b/namelookup-xml-inc/.gitignore
@@ -0,0 +1 @@
+../solve/.gitignore
\ No newline at end of file
diff --git a/relast-reusable-inc/.gitignore b/relast-reusable-inc/.gitignore
deleted file mode 100644
index bef26b50e99f1e8efd8d681885b6ea2870f80b3d..0000000000000000000000000000000000000000
--- a/relast-reusable-inc/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/src/gen/
-/src/gen-res/
-/build/
-events.txt
-/src/main/jastadd/SocialNetworkGen.ast
-/src/main/jastadd/SocialNetworkGen.jadd
diff --git a/relast-reusable-inc/.gitignore b/relast-reusable-inc/.gitignore
new file mode 120000
index 0000000000000000000000000000000000000000..ceb2b6936f4f0dd308fa1247836fe38f9bc624e2
--- /dev/null
+++ b/relast-reusable-inc/.gitignore
@@ -0,0 +1 @@
+../solve/.gitignore
\ No newline at end of file
diff --git a/relast-reusable-inc/src/gen/jastadd/.gitkeep b/relast-reusable-inc/src/gen/jastadd/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/relast-xml-flush/.gitignore b/relast-xml-flush/.gitignore
deleted file mode 100644
index bef26b50e99f1e8efd8d681885b6ea2870f80b3d..0000000000000000000000000000000000000000
--- a/relast-xml-flush/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/src/gen/
-/src/gen-res/
-/build/
-events.txt
-/src/main/jastadd/SocialNetworkGen.ast
-/src/main/jastadd/SocialNetworkGen.jadd
diff --git a/relast-xml-flush/.gitignore b/relast-xml-flush/.gitignore
new file mode 120000
index 0000000000000000000000000000000000000000..ceb2b6936f4f0dd308fa1247836fe38f9bc624e2
--- /dev/null
+++ b/relast-xml-flush/.gitignore
@@ -0,0 +1 @@
+../solve/.gitignore
\ No newline at end of file
diff --git a/relast-xml-flush/src/gen/jastadd/.gitkeep b/relast-xml-flush/src/gen/jastadd/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/relast-xml-inc/.gitignore b/relast-xml-inc/.gitignore
deleted file mode 100644
index bef26b50e99f1e8efd8d681885b6ea2870f80b3d..0000000000000000000000000000000000000000
--- a/relast-xml-inc/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/src/gen/
-/src/gen-res/
-/build/
-events.txt
-/src/main/jastadd/SocialNetworkGen.ast
-/src/main/jastadd/SocialNetworkGen.jadd
diff --git a/relast-xml-inc/.gitignore b/relast-xml-inc/.gitignore
new file mode 120000
index 0000000000000000000000000000000000000000..ceb2b6936f4f0dd308fa1247836fe38f9bc624e2
--- /dev/null
+++ b/relast-xml-inc/.gitignore
@@ -0,0 +1 @@
+../solve/.gitignore
\ No newline at end of file
diff --git a/relast-xml-inc/src/gen/jastadd/.gitkeep b/relast-xml-inc/src/gen/jastadd/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/solve/.gitignore b/solve/.gitignore
index bef26b50e99f1e8efd8d681885b6ea2870f80b3d..6f230e1eac5d049bda1ae1e26299c6e2662b1b21 100644
--- a/solve/.gitignore
+++ b/solve/.gitignore
@@ -1,6 +1,8 @@
-/src/gen/
-/src/gen-res/
 /build/
 events.txt
-/src/main/jastadd/SocialNetworkGen.ast
-/src/main/jastadd/SocialNetworkGen.jadd
+
+# src
+/src/gen/java/
+/src/gen/jastadd/*
+!/src/gen/jastadd/.gitkeep
+/src/gen-res/
diff --git a/solve/src/.gitignore b/solve/src/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/solve/src/gen/jastadd/.gitkeep b/solve/src/gen/jastadd/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391