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 40d0bc75e79f06703a3c5e2b43582dde70b6d6ac..805ff1a2a1b7d6082ee81d9a1e2e611a38d90749 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
@@ -16,6 +16,7 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -88,7 +89,18 @@ public class FullBenchmarkMain {
               pb.redirectError(ProcessBuilder.Redirect.INHERIT);
               pb.directory(currentDir);
               Process p = pb.start();
-              p.waitFor();
+              boolean finishedInTime = p.waitFor(settings.basic.timeoutValue * 2,
+                  TimeUnit.valueOf(settings.basic.timeoutUnit));
+              if(!finishedInTime) {
+                p.destroy();
+                p.destroyForcibly();
+                // wait for the process to actually end
+                p.waitFor();
+                // skip remaining repetitions, as this timeout is considered as an error
+                if (settings.skipOnError) {
+                  continue nextSolver;
+                }
+              }
             } catch (IOException | InterruptedException e) {
               e.printStackTrace();
               if (settings.skipOnError) {