diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d0ec93fa2838622bc315106375dcb48d13446b18..3e25a31fca90ac5b15017d8ca4f4fbbfcc28d259 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,7 +1,6 @@
 stages:
   - build
-#  - test
-  - benchmark
+  - test
 
 before_script:
   - export GRADLE_USER_HOME=`pwd`/.gradle
@@ -10,6 +9,7 @@ cache:
   paths:
     - .gradle/wrapper
     - .gradle/caches
+    - ttc2018liveContest
 
 build:
   image: openjdk:11
@@ -17,25 +17,16 @@ build:
   script:
     - ./gradlew --console=plain assemble
 
-#test:
-#  image: openjdk:11
-#  stage: test
-#  needs:
-#    - build
-#  script:
-#    - ./gradlew --console=plain --info test
-#  artifacts:
-#    when: always
-#    reports:
-#      junit: "*/build/test-results/test/**/TEST-*.xml"
-
-timing:
+test:
   image: openjdk:11
-  stage: benchmark
+  stage: test
   needs:
     - build
   script:
-    - ./all-timed-benchmark.sh
+    - "[ -d ttc2018liveContest ] || git clone --depth=1 https://github.com/TransformationToolContest/ttc2018liveContest.git ttc2018liveContest"
+    - ln -sf ../../../../ttc2018liveContest/models solve/src/test/resources
+    - ./gradlew --console=plain test
   artifacts:
-    paths:
-      - results/
+    when: always
+    reports:
+      junit: "*/build/test-results/test/**/TEST-*.xml"
diff --git a/all-timed-benchmark.sh b/all-timed-benchmark.sh
index 0405c2d58e0de760fef8bba7626d7e9a95b110ac..1ea69e0528fa40044d3091ee8dbd027dc850494f 100755
--- a/all-timed-benchmark.sh
+++ b/all-timed-benchmark.sh
@@ -3,6 +3,6 @@ mkdir -p "results"
 query=2
 size=32
 for d in relast-* namelookup-xml-*; do
-  ./timedBenchmark.sh $d $query $size
-  mv events-xml-${size}-Q${query}.csv results/events-${d}-${size}-Q${query}.csv
+  ./gradlew ":${d}:installDist"
+  ./timedBenchmark.sh "$d" $query $size > "results/results-${d}-${size}-Q${query}.csv"
 done
diff --git a/cp-to-solution.sh b/cp-to-solution.sh
index 6746d80da9f9a14188f78f53d8c5e0e33dcafdc5..728ed2f2aff6126f149bf6c67416f4dfb44bddc9 100755
--- a/cp-to-solution.sh
+++ b/cp-to-solution.sh
@@ -1,104 +1,22 @@
-#!/usr/bin/env bash
-
-function build_sed_activate() {
-  # enable integration
-  sed -i 's/enabled = false/enabled = true/g' solve/build.gradle
-  # disable debug
-  sed -i 's|"--debug",|//"--debug",|g' solve/build.gradle
-}
-
-function build_sed_deactivate() {
-  sed -i 's/enabled = true/enabled = false/g' solve/build.gradle
-  sed -i 's|//"--debug",|"--debug",|g' solve/build.gradle
-  sed -i 's/"--incremental=[^"]*"/"--incremental=param,debug"/g' solve/build.gradle
-  sed -i 's/--flush=[^"]*/--flush=api/g' solve/build.gradle
-}
-
-function build_incremental() {
-  #TODO
-  name="$1-inc"
-  echo ">> Building $name"
-  build_sed_activate
-  sed -i 's/--flush=full/--flush=api/g' solve/build.gradle
-  sed -i 's/"--incremental=[^"]*"/"--incremental=param"/g' solve/build.gradle
-  ./gradlew --console=plain distTar
-  build_sed_deactivate
-  copy_to_ttc $name
-}
-
-function build_flushing() {
-  #TODO
-  name="$1-flush"
-  echo ">> Building $name"
-  build_sed_activate
-  sed -i 's/--flush=api/--flush=full/g' solve/build.gradle
-  sed -i 's/"--incremental=[^"]*"/"--incremental=none"/g' solve/build.gradle
-  ./gradlew --console=plain distTar
-  build_sed_deactivate
-  copy_to_ttc $name
-}
-
-function copy_to_ttc() {(
-  name=$1
-  ls -lh solve/build/distributions
-
-  # ensure directory exists and unpack into it
-  mkdir -p ../ttc2018liveContest/solutions/$name
-  tar -xf solve/build/distributions/solve-1.0-SNAPSHOT.tar -C ../ttc2018liveContest/solutions/$name/ solve-1.0-SNAPSHOT/bin/ solve-1.0-SNAPSHOT/lib/
-
-  # cp solution.ini
-  cp solution.ini ../ttc2018liveContest/solutions/$name/
-
-  # fix directory layout
-  cd ../ttc2018liveContest/solutions/$name/
-  rm -r bin/ lib/
-  mv solve-1.0-SNAPSHOT/bin/ .
-  mv solve-1.0-SNAPSHOT/lib/ .
-  rmdir solve-1.0-SNAPSHOT
-)}
-
-function build() {
-  build_flushing $@
-  build_incremental $@
-}
-
-function prepare_namelookup() {
-  # deactivate preprocess
-  sed -i 's|^generateAst.dependsOn preprocess|//generateAst.dependsOn preprocess|g' solve/build.gradle
-  # remove generated AST and helper files, activate namelookup AST and helper jadd files
-  ( cd solve/src/main/jastadd &&
-    rm SocialNetworkGen.ast SocialNetworkGen.jadd &&
-    mv Refs.jadd.unused Refs.jadd &&
-    mv SocialNetworkNamelookup.ast.unused SocialNetworkNamelookup.ast )
-}
-
-function revert_namelookup() {
-  # activate preprocess
-  sed -i 's|//generateAst.dependsOn preprocess|generateAst.dependsOn preprocess|g' solve/build.gradle
-  # deactivate normal AST and helper jadd files
-  ( cd solve/src/main/jastadd &&
-    mv Refs.jadd Refs.jadd.unused &&
-    mv SocialNetworkNamelookup.ast SocialNetworkNamelookup.ast.unused )
-}
-
-prepare_namelookup
-# Build jastadd-ttc18-xml (namelookup)
-sed -i 's/LiveContestDriverEMF/LiveContestDriverXml/' solve/build.gradle
-build "jastadd-ttc18-xml"
-
-revert_namelookup
-
-# workaround for failing build
-echo ">> Prepare building relast building"
-sleep 1
-./gradlew --console=plain preprocess jastadd build 2> /dev/null
-sleep 1
-./gradlew --console=plain preprocess jastadd build 2> /dev/null
-
-# Build jastadd-ttc18-xml
-sed -i 's/LiveContestDriverEMF/LiveContestDriverXml/' solve/build.gradle
-build "jastadd-ttc18-relast-xml"
-
-# Build jastadd-ttc18-emf
-sed -i 's/LiveContestDriverXml/LiveContestDriverEMF/' solve/build.gradle
-build "jastadd-ttc18-relast-emf"
+target="../ttc2018liveContest/solutions"
+# skipping "namelookup-xml-*"
+for s in relast-* ; do
+  echo ">> Building $s"
+  ./gradlew ":${s}:installDist"
+  solutionDir="$target/jastadd-$s"
+  echo ">> Copy to $solutionDir"
+  rm -rI "$solutionDir"
+  mkdir -p "$solutionDir/bin"
+  cp solution.ini "$solutionDir/"
+  cp "solve/README-for-TTC-repo.md" "$solutionDir/README.md"
+  cp "${s}/build/libs/solve-1.0-SNAPSHOT.jar" "${solutionDir}/bin/solve.jar"
+done
+
+# source code
+echo "Copying source"
+copySourceDir="$target/jastadd-source"
+rm -rI "$copySourceDir"
+mkdir -p "$copySourceDir/src"
+cp -a solve/gradle-parts solve/build.gradle solve/jastadd_modules solve/.gitignore "$copySourceDir/"
+cp -a solve/src/main "$copySourceDir/src/"
+cp "solve/README-for-TTC-repo.md" "$copySourceDir/README.md"
diff --git a/namelookup-xml-flush/build.gradle b/namelookup-xml-flush/build.gradle
index f4790d8b87d070726589952f401109fbd03a86d0..22e5a75face242d31730fcb93684f394e379709a 100644
--- a/namelookup-xml-flush/build.gradle
+++ b/namelookup-xml-flush/build.gradle
@@ -14,8 +14,8 @@ plugins {
 
 ext.relastFiles = []
 
-apply from: '../solve/gradle-parts/base.gradle'
+apply from: '../solve/gradle-parts/01-inc-flush.gradle'
 
-apply from: '../solve/gradle-parts/inc-flush.gradle'
+apply from: '../solve/gradle-parts/02-base.gradle'
 
-apply from: '../solve/gradle-parts/rel-namelookup.gradle'
+apply from: '../solve/gradle-parts/03-rel-namelookup.gradle'
diff --git a/namelookup-xml-inc/build.gradle b/namelookup-xml-inc/build.gradle
index a9982547c32aa541be4998b529b3d742935b0975..bbc3f2a466858cdbfda0451cf3e7c6b1654557ad 100644
--- a/namelookup-xml-inc/build.gradle
+++ b/namelookup-xml-inc/build.gradle
@@ -14,8 +14,8 @@ plugins {
 
 ext.relastFiles = []
 
-apply from: '../solve/gradle-parts/base.gradle'
+apply from: '../solve/gradle-parts/01-inc-incremental.gradle'
 
-apply from: '../solve/gradle-parts/inc-incremental.gradle'
+apply from: '../solve/gradle-parts/02-base.gradle'
 
-apply from: '../solve/gradle-parts/rel-namelookup.gradle'
+apply from: '../solve/gradle-parts/03-rel-namelookup.gradle'
diff --git a/relast-reusable-flush/.gitignore b/relast-reusable-flush/.gitignore
new file mode 120000
index 0000000000000000000000000000000000000000..ceb2b6936f4f0dd308fa1247836fe38f9bc624e2
--- /dev/null
+++ b/relast-reusable-flush/.gitignore
@@ -0,0 +1 @@
+../solve/.gitignore
\ No newline at end of file
diff --git a/relast-reusable-flush/build.gradle b/relast-reusable-flush/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..46f61fc354fe561e448f2c46e8e4e59f6f3672c0
--- /dev/null
+++ b/relast-reusable-flush/build.gradle
@@ -0,0 +1,23 @@
+buildscript {
+    repositories.mavenCentral()
+    dependencies {
+        classpath group: 'org.jastadd', name: 'jastaddgradle', version: '1.13.3'
+    }
+}
+
+plugins {
+    id 'application'
+    id 'maven'
+    id 'java'
+    id 'idea'
+}
+
+project.ext.relastFiles = ["src/main/jastadd/base/SocialNetwork.relast",
+                   "src/main/jastadd/reusable/dg/DependencyGraph.relast",
+                   "src/main/jastadd/reusable/CommentToDG.relast"]
+
+apply from: '../solve/gradle-parts/01-inc-flush.gradle'
+
+apply from: '../solve/gradle-parts/02-base.gradle'
+
+apply from: '../solve/gradle-parts/03-rel-relast.gradle'
diff --git a/relast-reusable-flush/jastadd_modules b/relast-reusable-flush/jastadd_modules
new file mode 100644
index 0000000000000000000000000000000000000000..b1c7ae2e1600ce3530b8daa89ed0d2e5297812f8
--- /dev/null
+++ b/relast-reusable-flush/jastadd_modules
@@ -0,0 +1,13 @@
+module("solve") {
+    jastadd {
+        basedir "src/"
+        include "main/jastadd/base/**/*.ast"
+        include "main/jastadd/base/**/*.jadd"
+        include "main/jastadd/base/**/*.jrag"
+        include "main/jastadd/reusable/dg/DependencyGraphReachability.jrag"
+        include "main/jastadd/reusable/CommentToDG.jrag"
+        include "main/jastadd/reusable/queriesRefined.jrag"
+        include "gen/jastadd/**/*.ast"
+        include "gen/jastadd/**/*.jadd"
+    }
+}
diff --git a/relast-reusable-flush/libs b/relast-reusable-flush/libs
new file mode 120000
index 0000000000000000000000000000000000000000..8810c453ce71cee07a5f9bc4c23d35e3fb40a7c3
--- /dev/null
+++ b/relast-reusable-flush/libs
@@ -0,0 +1 @@
+../solve/libs
\ No newline at end of file
diff --git a/solve/gradle-parts/inc-flush.gradle b/relast-reusable-flush/src/gen/jastadd/.gitkeep
similarity index 100%
rename from solve/gradle-parts/inc-flush.gradle
rename to relast-reusable-flush/src/gen/jastadd/.gitkeep
diff --git a/relast-reusable-flush/src/main b/relast-reusable-flush/src/main
new file mode 120000
index 0000000000000000000000000000000000000000..009e6afff58b3370e41626fcb30e244be792621d
--- /dev/null
+++ b/relast-reusable-flush/src/main
@@ -0,0 +1 @@
+../../solve/src/main
\ No newline at end of file
diff --git a/relast-reusable-flush/src/test b/relast-reusable-flush/src/test
new file mode 120000
index 0000000000000000000000000000000000000000..86aebbfd9eae4fb213d30a0be66b27c796277633
--- /dev/null
+++ b/relast-reusable-flush/src/test
@@ -0,0 +1 @@
+../../solve/src/test
\ No newline at end of file
diff --git a/relast-reusable-inc/build.gradle b/relast-reusable-inc/build.gradle
index 9b02e1faaaa51a1d0fbab15a66000287a6f5d1dd..bb719dccc27a3aaf93a5177310eb0d13033232f2 100644
--- a/relast-reusable-inc/build.gradle
+++ b/relast-reusable-inc/build.gradle
@@ -16,8 +16,8 @@ project.ext.relastFiles = ["src/main/jastadd/base/SocialNetwork.relast",
                    "src/main/jastadd/reusable/dg/DependencyGraph.relast",
                    "src/main/jastadd/reusable/CommentToDG.relast"]
 
-apply from: '../solve/gradle-parts/base.gradle'
+apply from: '../solve/gradle-parts/01-inc-incremental.gradle'
 
-apply from: '../solve/gradle-parts/inc-incremental.gradle'
+apply from: '../solve/gradle-parts/02-base.gradle'
 
-apply from: '../solve/gradle-parts/rel-relast.gradle'
+apply from: '../solve/gradle-parts/03-rel-relast.gradle'
diff --git a/relast-xml-flush/build.gradle b/relast-xml-flush/build.gradle
index cf5bca341b3400c1a12cc56fc829042a08085e04..d9215febff0607a440fda5536925ed37fe4eb9d7 100644
--- a/relast-xml-flush/build.gradle
+++ b/relast-xml-flush/build.gradle
@@ -14,8 +14,8 @@ plugins {
 
 ext.relastFiles = ["src/main/jastadd/base/SocialNetwork.relast"]
 
-apply from: '../solve/gradle-parts/base.gradle'
+apply from: '../solve/gradle-parts/01-inc-flush.gradle'
 
-apply from: '../solve/gradle-parts/inc-flush.gradle'
+apply from: '../solve/gradle-parts/02-base.gradle'
 
-apply from: '../solve/gradle-parts/rel-relast.gradle'
+apply from: '../solve/gradle-parts/03-rel-relast.gradle'
diff --git a/relast-xml-inc/build.gradle b/relast-xml-inc/build.gradle
index ac6352f69116f114e5c0557c4b271b6f1f68f8e0..851c96e148ed22f71ee719764faa7baa9bda15ae 100644
--- a/relast-xml-inc/build.gradle
+++ b/relast-xml-inc/build.gradle
@@ -14,8 +14,8 @@ plugins {
 
 ext.relastFiles = ["src/main/jastadd/base/SocialNetwork.relast"]
 
-apply from: '../solve/gradle-parts/base.gradle'
+apply from: '../solve/gradle-parts/01-inc-incremental.gradle'
 
-apply from: '../solve/gradle-parts/inc-incremental.gradle'
+apply from: '../solve/gradle-parts/02-base.gradle'
 
-apply from: '../solve/gradle-parts/rel-relast.gradle'
+apply from: '../solve/gradle-parts/03-rel-relast.gradle'
diff --git a/settings.gradle b/settings.gradle
index ba25857cff1ac0301b90839d0045490544f45076..666aad8493328e2ada80e8b2ec637599cb1d268f 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,6 +1,7 @@
 include ':solve'
 include ':namelookup-xml-flush'
 include ':namelookup-xml-inc'
+include ':relast-reusable-flush'
 include ':relast-reusable-inc'
 include ':relast-xml-flush'
 include ':relast-xml-inc'
diff --git a/solution.ini b/solution.ini
index d5652e8e5561d57839265654a20c69e400290131..650fde118f552c700be76a56724915d998d710b1 100644
--- a/solution.ini
+++ b/solution.ini
@@ -3,5 +3,5 @@ default=echo "It is already built"
 skipTests=echo "It is already built"
 
 [run]
-Q1=bin/solve
-Q2=bin/solve
+Q1=java -Xms6G -Xmx6G -jar bin/solve.jar
+Q2=java -Xms6G -Xmx6G -jar bin/solve.jar
diff --git a/solve/README-for-TTC-repo.md b/solve/README-for-TTC-repo.md
new file mode 100644
index 0000000000000000000000000000000000000000..8781e4c6d84d46ad9b48b304f8184c712634c0a8
--- /dev/null
+++ b/solve/README-for-TTC-repo.md
@@ -0,0 +1 @@
+The sources for all JastAdd solutions can be found in a [separate repository](https://git-st.inf.tu-dresden.de/stgroup/ttc18live).
diff --git a/solve/build.gradle b/solve/build.gradle
index ac6352f69116f114e5c0557c4b271b6f1f68f8e0..24d0deba194e27ccb319509d871d937928c41644 100644
--- a/solve/build.gradle
+++ b/solve/build.gradle
@@ -14,8 +14,8 @@ plugins {
 
 ext.relastFiles = ["src/main/jastadd/base/SocialNetwork.relast"]
 
-apply from: '../solve/gradle-parts/base.gradle'
+apply from: 'gradle-parts/01-inc-incremental.gradle'
 
-apply from: '../solve/gradle-parts/inc-incremental.gradle'
+apply from: 'gradle-parts/02-base.gradle'
 
-apply from: '../solve/gradle-parts/rel-relast.gradle'
+apply from: 'gradle-parts/03-rel-relast.gradle'
diff --git a/solve/gradle-parts/01-inc-flush.gradle b/solve/gradle-parts/01-inc-flush.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..577b3eea510e2d985c09e21c578b5fa9f4ea1184
--- /dev/null
+++ b/solve/gradle-parts/01-inc-flush.gradle
@@ -0,0 +1,7 @@
+project.ext.extraJastAddOptions = [
+        '--lineColumnNumbers',
+        '--cache=all',
+        "--flush=full",
+        "--incremental=none",
+        "--tracing=api",
+]
diff --git a/solve/gradle-parts/01-inc-incremental.gradle b/solve/gradle-parts/01-inc-incremental.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..39e8592f3522865dbc23662decfd64dfa0302dee
--- /dev/null
+++ b/solve/gradle-parts/01-inc-incremental.gradle
@@ -0,0 +1,7 @@
+project.ext.extraJastAddOptions = [
+        '--lineColumnNumbers',
+        '--cache=all',
+        "--flush=api",
+        "--incremental=param,debug",
+        "--tracing=api",
+]
diff --git a/solve/gradle-parts/base.gradle b/solve/gradle-parts/02-base.gradle
similarity index 91%
rename from solve/gradle-parts/base.gradle
rename to solve/gradle-parts/02-base.gradle
index 6851c021aa2a0b5aba2b438f97d5e18eebb290a5..47fbd7426daf4fbcc63f784e9469ba77d2eedbf0 100644
--- a/solve/gradle-parts/base.gradle
+++ b/solve/gradle-parts/02-base.gradle
@@ -26,7 +26,7 @@ dependencies {
     testImplementation group: 'junit', name: 'junit', version: junitVersion
     testImplementation group: 'org.hamcrest', name: 'hamcrest-junit', version: '1.0.0.0'
     testImplementation 'com.opencsv:opencsv:3.8'
-    testImplementation 'com.github.stefanbirkner:system-rules:1.19.0'
+    testImplementation 'com.github.stefanbirkner:system-lambda:1.2.0'
 }
 
 mainClassName = 'de.tudresden.inf.st.ttc18live.LiveContestDriverXml'
@@ -74,13 +74,7 @@ jastadd {
     buildInfoDir = 'src/gen-res'
 
     // default options are: '--rewrite=cnta', '--safeLazy', '--visitCheck=false', '--cacheCycle=false'
-    extraJastAddOptions = [
-            '--lineColumnNumbers',
-            '--cache=all',
-            "--flush=api",
-            "--incremental=param,debug",
-            "--tracing=api",
-    ]
+    extraJastAddOptions = project.ext.extraJastAddOptions
 }
 
 cleanGen.doFirst {
diff --git a/solve/gradle-parts/inc-incremental.gradle b/solve/gradle-parts/03-rel-namelookup.gradle
similarity index 100%
rename from solve/gradle-parts/inc-incremental.gradle
rename to solve/gradle-parts/03-rel-namelookup.gradle
diff --git a/solve/gradle-parts/rel-relast.gradle b/solve/gradle-parts/03-rel-relast.gradle
similarity index 100%
rename from solve/gradle-parts/rel-relast.gradle
rename to solve/gradle-parts/03-rel-relast.gradle
diff --git a/solve/gradle-parts/rel-namelookup.gradle b/solve/gradle-parts/rel-namelookup.gradle
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverXml.java b/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverXml.java
index b68d0d5d74414e2d049f38b0ec1f31352fd346d2..0a028bde316e4d6a6eb1a0706263bdab825bb975 100644
--- a/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverXml.java
+++ b/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverXml.java
@@ -21,8 +21,9 @@ public class LiveContestDriverXml extends AbstractLiveContestDriver {
 
   public static void main(String[] args) {
     LiveContestDriverXml driver = new LiveContestDriverXml();
-    Path filename = Paths.get(String.format("events-xml-%s-%s.csv", driver.getChangeSet(), driver.getQuery()));
-    driver.enableTracing(filename).mainImpl();
+//    Path filename = Paths.get(String.format("events-emf-%s-%s.csv", driver.getChangeSet(), driver.getQuery()));
+//    driver.enableTracing(filename).mainImpl();
+    driver.mainImpl();
   }
 
   private XmlToJastaddTranslator translator = new XmlToJastaddTranslator();
diff --git a/solve/src/test/java/de/tudresden/inf/st/ttc18live/test/AbstractAllTest.java b/solve/src/test/java/de/tudresden/inf/st/ttc18live/test/AbstractAllTest.java
index b145a7df0138fbe8866e9d4f6a6212aad530a404..931b3b82271d1fb2e8969a780c767cf451d408f2 100644
--- a/solve/src/test/java/de/tudresden/inf/st/ttc18live/test/AbstractAllTest.java
+++ b/solve/src/test/java/de/tudresden/inf/st/ttc18live/test/AbstractAllTest.java
@@ -1,11 +1,13 @@
 package de.tudresden.inf.st.ttc18live.test;
 
+import com.github.stefanbirkner.systemlambda.Statement;
+import com.github.stefanbirkner.systemlambda.SystemLambda;
 import com.opencsv.CSVReader;
 import de.tudresden.inf.st.ttc18live.AbstractLiveContestDriver;
 import de.tudresden.inf.st.ttc18live.LiveContestDriverXml;
 import org.junit.*;
-import org.junit.contrib.java.lang.system.EnvironmentVariables;
-import org.junit.contrib.java.lang.system.SystemOutRule;
+//import org.junit.contrib.java.lang.system.EnvironmentVariables;
+//import org.junit.contrib.java.lang.system.SystemOutRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
@@ -23,9 +25,9 @@ import java.util.*;
  */
 @RunWith(Parameterized.class)
 public abstract class AbstractAllTest {
-  @Rule
-  public final EnvironmentVariables environmentVariables = new EnvironmentVariables();
-  @Rule public final SystemOutRule systemOutRule = new SystemOutRule().enableLog();
+//  @Rule
+//  public final EnvironmentVariables environmentVariables = new EnvironmentVariables();
+//  @Rule public final SystemOutRule systemOutRule = new SystemOutRule().enableLog();
 
   private final static int maxSequence = 5;
   private final static Path modelsPath = Paths.get("src", "test", "resources", "models");
@@ -74,11 +76,12 @@ public abstract class AbstractAllTest {
     }
   }
 
-  private void setVars() {
-    environmentVariables.set("ChangeSet", Integer.toString(size));
-    environmentVariables.set("ChangePath", modelsPath.resolve(Integer.toString(size)).toFile().getAbsolutePath());
-    environmentVariables.set("Sequences", Integer.toString(maxSequence));
-    environmentVariables.set("Query", "Q" + query);
+  private void withVars(Statement statement) throws Exception {
+    SystemLambda.withEnvironmentVariable("ChangeSet", Integer.toString(size))
+        .and("ChangePath", modelsPath.resolve(Integer.toString(size)).toFile().getAbsolutePath())
+        .and("Sequences", Integer.toString(maxSequence))
+        .and("Query", "Q" + query)
+        .execute(statement);
   }
 
   private AbstractLiveContestDriver driver;
@@ -87,23 +90,19 @@ public abstract class AbstractAllTest {
     this.query = query;
     this.size = size;
     this.localExpected = expected.get(query).get(size);
-    setVars();
-  }
-
-  @Before
-  public void setupDriver() {
-    driver = createDriver();
   }
 
   abstract AbstractLiveContestDriver createDriver();
 
   @Test
-  public void test() {
+  public void test() throws Exception {
     System.out.println(query + "," + size + ":" + expected.get(query).get(size));
-    systemOutRule.clearLog();
-    driver.mainImpl();
+    String systemOut = SystemLambda.tapSystemOut(() -> withVars(() -> {
+      driver = createDriver();
+      driver.mainImpl();
+    }));
     Map<Integer, String> actual = new HashMap<>();
-    for (String line : systemOutRule.getLog().split("\n")) {
+    for (String line : systemOut.split("\n")) {
       String[] tokens = line.split(";");
       if ("Elements".equals(tokens[6])) {
         int iteration = Integer.parseInt(tokens[4]);
diff --git a/solve/src/test/java/de/tudresden/inf/st/ttc18live/test/AllEmfTest.java b/solve/src/test/java/de/tudresden/inf/st/ttc18live/test/AllEmfTest.java
index 9859238d9b140f205bac45a115971ff4d65e6a88..e57dda5758894c4351121c2bba0000f825e119ae 100644
--- a/solve/src/test/java/de/tudresden/inf/st/ttc18live/test/AllEmfTest.java
+++ b/solve/src/test/java/de/tudresden/inf/st/ttc18live/test/AllEmfTest.java
@@ -16,11 +16,6 @@ public class AllEmfTest extends AbstractAllTest {
 
   @Override
   AbstractLiveContestDriver createDriver() {
-    return new LiveContestDriverEMF() {
-//      @Override
-//      public void Initial() {
-//        // do nothing (i.e. do not throw an Exception)
-//      }
-    };
+    return new LiveContestDriverEMF();
   }
 }
diff --git a/solve/src/test/java/de/tudresden/inf/st/ttc18live/test/AllXmlTest.java b/solve/src/test/java/de/tudresden/inf/st/ttc18live/test/AllXmlTest.java
index 8ae095e24e20619c29734ec07a2df98229d2fd15..c3bb53cbbdd1b6e7000016382dbc5c2c264af165 100644
--- a/solve/src/test/java/de/tudresden/inf/st/ttc18live/test/AllXmlTest.java
+++ b/solve/src/test/java/de/tudresden/inf/st/ttc18live/test/AllXmlTest.java
@@ -1,23 +1,7 @@
 package de.tudresden.inf.st.ttc18live.test;
 
-import com.opencsv.CSVReader;
 import de.tudresden.inf.st.ttc18live.AbstractLiveContestDriver;
 import de.tudresden.inf.st.ttc18live.LiveContestDriverXml;
-import org.junit.*;
-import org.junit.contrib.java.lang.system.EnvironmentVariables;
-import org.junit.contrib.java.lang.system.SystemOutRule;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
 
 /**
  * Test against given expected query results using XML solution.
diff --git a/timedBenchmark.sh b/timedBenchmark.sh
index b509203719612ae46d7da376bd77598474c42a3a..c734c78952b6c92c4b67bffa7d1b5381e0ad364d 100755
--- a/timedBenchmark.sh
+++ b/timedBenchmark.sh
@@ -2,5 +2,4 @@
 project=$1
 query=$2
 size=$3
-./gradlew :${project}:installDist
-ChangeSet=$size ChangePath=solve/src/test/resources/models/$size/ Sequences=20 Query=Q$query java -jar $project/build/libs/solve-1.0-SNAPSHOT.jar
+ChangeSet=$size ChangePath=solve/src/test/resources/models/$size/ Sequences=20 Query=Q$query java -jar "$project/build/libs/solve-1.0-SNAPSHOT.jar"