diff --git a/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/FullBenchmarkMain.java b/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/FullBenchmarkMain.java
index 706ff95be0466597507193a68048e79342862687..4fcbbe0658242d11cb4a0673b63eb4e42982aa71 100644
--- a/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/FullBenchmarkMain.java
+++ b/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/FullBenchmarkMain.java
@@ -32,12 +32,20 @@ public class FullBenchmarkMain {
   static class InvokeJavaVMBenchmark extends Benchmark {
     BenchmarkSettings settings;
     int repetitions;
+    private boolean useGradleConnection = false;
+    private final String gradleCommand = System.getProperty("os.name")
+        .toLowerCase().contains("windows") ? "./gradle.bat" : "./gradlew";
 
     InvokeJavaVMBenchmark(BenchmarkSettings settings, int repetitions) {
       this.settings = settings;
       this.repetitions = repetitions;
     }
 
+    InvokeJavaVMBenchmark setUseGradleConnection(boolean useGradleConnection) {
+      this.useGradleConnection = useGradleConnection;
+      return this;
+    }
+
     @Override
     public void run() {
       for (int i = 0; i < this.repetitions; i++) {
@@ -49,21 +57,46 @@ public class FullBenchmarkMain {
           logger.catching(e);
           throw new RuntimeException("Could not create temporary file for sandBoxed use. Exiting.");
         }
-        // invoke Gradle target
-        ProjectConnection connection = GradleConnector.newConnector()
-            .forProjectDirectory(new File("."))
-            .connect();
-        try {
-          connection.newBuild()
-              .forTasks("sandboxRun")
-              .withArguments("-PrunSettingsFile=" + tempPath.toAbsolutePath().toString())
-              .setStandardOutput(System.out)
-              .run();
-        } finally {
-          connection.close();
+        if (useGradleConnection) {
+          // invoke Gradle target directly
+          ProjectConnection connection = GradleConnector.newConnector()
+              .forProjectDirectory(new File("."))
+              .connect();
+          try {
+            connection.newBuild()
+                .forTasks("sandboxRun")
+                .withArguments("-PrunSettingsFile=" + tempPath.toAbsolutePath().toString())
+                .setStandardOutput(System.out)
+                .run();
+          } finally {
+            connection.close();
+          }
+        } else {
+          // start a new process calling gradle
+          File currentDir = getCurrentDir();
+          try {
+            ProcessBuilder pb = new ProcessBuilder(gradleCommand, "sandboxRun",
+                "-PrunSettingsFile=" + tempPath.toAbsolutePath().toString());
+            pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
+            pb.redirectError(ProcessBuilder.Redirect.INHERIT);
+            pb.directory(currentDir);
+            Process p = pb.start();
+            p.waitFor();
+          } catch (IOException | InterruptedException e) {
+            e.printStackTrace();
+          }
         }
       }
     }
+
+    private File getCurrentDir() {
+      // hacky solution to get to the root of the repository
+      File maybeCurrentDir = new File("").getAbsoluteFile();
+      if ("jastadd-mquat-benchmark".equals(maybeCurrentDir.getName())) {
+        maybeCurrentDir = maybeCurrentDir.getParentFile();
+      }
+      return maybeCurrentDir;
+    }
   }
 
   public static void main(String[] args) {
@@ -95,7 +128,7 @@ public class FullBenchmarkMain {
         .map(SolverFactory::getSolverByName).collect(Collectors.toList());
     return settings.scenarios.stream()
         .filter(data -> takeAll || allowedIds.contains(data.getId()) || allowedNames.contains(data.name))
-        .map(data -> create(from(settings, data), solvers, settings.repetitions, settings.sandBoxed))
+        .map(data -> create(settings, data, solvers))
         .collect(Collectors.toList());
   }
 
@@ -143,10 +176,15 @@ public class FullBenchmarkMain {
     return result;
   }
 
-  private static Benchmark create(BenchmarkSettings settings, List<BenchmarkableSolver> solvers, int repetitions, boolean sandBoxed) {
-    return sandBoxed ?
-        new InvokeJavaVMBenchmark(settings, repetitions) :
-        new ScenarioBenchmark(settings, solvers, repetitions);
+  private static Benchmark create(ScenarioSettings scenarioSettings, ScenarioData data,
+                                  List<BenchmarkableSolver> solvers) {
+    BenchmarkSettings settings = from(scenarioSettings, data);
+    if (scenarioSettings.sandBoxed) {
+      return new InvokeJavaVMBenchmark(settings, scenarioSettings.repetitions)
+          .setUseGradleConnection(scenarioSettings.useGradleConnection);
+    } else {
+      return new ScenarioBenchmark(settings, solvers, scenarioSettings.repetitions);
+    }
   }
 
 }
diff --git a/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/data/ScenarioSettings.java b/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/data/ScenarioSettings.java
index 9614f3fc64696c3649929325850e117b905d8f41..3d2fa733087fc1e52d0519114e0a7e83afc0b7b7 100644
--- a/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/data/ScenarioSettings.java
+++ b/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/data/ScenarioSettings.java
@@ -17,4 +17,5 @@ public class ScenarioSettings {
   public int repetitions = 1;
   public List<ScenarioData> scenarios;
   public boolean sandBoxed;
+  public boolean useGradleConnection = false;
 }