diff --git a/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/AbstractILPSolver.java b/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/AbstractILPSolver.java
index 4c50b7a290bcf1458aa23bfa59d7820e8d95dd9d..91cb89dcfa4efc60f54f39b44ad5af1bf2ae7eb9 100644
--- a/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/AbstractILPSolver.java
+++ b/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/AbstractILPSolver.java
@@ -85,7 +85,7 @@ public abstract class AbstractILPSolver implements BenchmarkableSolver {
 
     // call to abstract method
     try {
-      solve0(model, watch, variablesSetToOne);
+      solve0(model, ilp, watch, variablesSetToOne);
       this.lastSolving = watch.time(TimeUnit.MILLISECONDS) - this.lastGeneration;
       // translate ilp-encoded solution to MQuAT solution
       return populateSolution(variablesSetToOne, new ILPSolution(model));
@@ -103,12 +103,11 @@ public abstract class AbstractILPSolver implements BenchmarkableSolver {
    * @return the objective value
    * @throws SolvingException if anything went wrong
    */
-  protected abstract double solve0(Root model, StopWatch watch, List<IlpVariable> variablesSetToOne) throws SolvingException;
+  protected abstract double solve0(Root model, ILP ilp, StopWatch watch, List<IlpVariable> variablesSetToOne) throws SolvingException;
 
   protected ILPSolution populateSolution(List<IlpVariable> variablesSetToOne, ILPSolution result) throws SolvingException {
     List<Assignment> listOfAssignments = new ArrayList<>();
     for (IlpVariable var : variablesSetToOne) {
-      logger.debug("Found, that {} = 1", var.getName());
       if (var.isMappingVariable()) {
         IlpMappingVariable mappingVar = var.asMappingVariable();
         Assignment assignment = new Assignment();
diff --git a/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/GurobiSolver.java b/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/GurobiSolver.java
index 50dfad47ae459b0255eab4cd82536b7cade22c5d..53238dadb87c2775c6428efdbbb7e6d168977351 100644
--- a/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/GurobiSolver.java
+++ b/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/GurobiSolver.java
@@ -4,6 +4,9 @@ import de.tudresden.inf.st.mquat.jastadd.model.ILP;
 import de.tudresden.inf.st.mquat.jastadd.model.IlpVariable;
 import de.tudresden.inf.st.mquat.solving.SolvingException;
 
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -23,20 +26,24 @@ public class GurobiSolver extends ILPExternalSolver {
    * @see GurobiSolver#setDeleteFilesOnExit(boolean)
    */
   public GurobiSolver() {
+
   }
 
 
   @Override
   protected String[] getCommand(Path lp, Path solution, long remainingTimeForSolvingInMillis) {
-    String[] command = {"gurobi_cl", " ResultFile=" + solution.toAbsolutePath(), "TimeLimit=" + remainingTimeForSolvingInMillis/1000, String.valueOf(lp.toAbsolutePath())};
+    String[] command = {"gurobi_cl", "ResultFile=" + solution.toAbsolutePath(), "TimeLimit=" + remainingTimeForSolvingInMillis/1000, String.valueOf(lp.toAbsolutePath())};
     return command;
   }
 
   @Override
   protected void readFromPlainTextSolution(ILP ilp, Path solution, ILPSolution result,
                                                 List<IlpVariable> variablesSetToOne) throws SolvingException {
-    try (Stream<String> lines = Files.lines(solution)) {
-      for (String line : lines.collect(Collectors.toList())) {
+
+    logger.debug("reading solution from {}.", solution);
+
+    try(BufferedReader br = new BufferedReader(new FileReader(solution.toFile()))) {
+      for(String line; (line = br.readLine()) != null; ) {
         if (line.startsWith("#")) {
           // comment line
 
@@ -45,24 +52,20 @@ public class GurobiSolver extends ILPExternalSolver {
             logger.debug("read objective {}", Double.valueOf(line.substring(20).trim()));
           }
         } else {
-          String[] tokens = line.split("\\s+");
-          if (tokens.length == 2) {
-            // tokens: name, value
-            if (Math.round(Double.parseDouble(tokens[1])*1000000000)==1000000000) {
-              logger.debug("found new variable {} with value {}", tokens[0], tokens[1]);
-              IlpVariable variable = ilp.resolve(tokens[0]);
-              if (variable == null) {
-                throw new SolvingException("Could not find variable with name " + tokens[0]);
-              }
-              variablesSetToOne.add(variable);
+          if (line.endsWith(" 1")) {
+            String varString = line.substring(0,line.length()-2);
+            IlpVariable variable = ilp.resolve(varString);
+            if (variable == null) {
+              throw new SolvingException("Could not find variable with name " + varString);
             }
+            variablesSetToOne.add(variable);
           }
         }
       }
+    } catch (FileNotFoundException e) {
+      e.printStackTrace();
     } catch (IOException e) {
-      throw new SolvingException("Could not open solution file", e);
-    } catch (NumberFormatException e) {
-      throw new SolvingException("Could not parse solution file", e);
+      e.printStackTrace();
     }
   }
 
diff --git a/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/ILPDirectSolver.java b/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/ILPDirectSolver.java
index 12f6d952ed95324a366dc10eb307af41b336ca34..ef9ad6b002261fcf9a8f4b0fdaf64fc3f9a69736 100644
--- a/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/ILPDirectSolver.java
+++ b/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/ILPDirectSolver.java
@@ -57,8 +57,7 @@ public class ILPDirectSolver extends AbstractILPSolver {
     this.prob = null;
   }
 
-  protected double solve0(Root model, StopWatch watch, List<IlpVariable> variablesSetToOne) throws SolvingException {
-    ILP ilp = model.getILP();
+  protected double solve0(Root model, ILP ilp, StopWatch watch, List<IlpVariable> variablesSetToOne) throws SolvingException {
 
     if (logger.isTraceEnabled()) {
       logger.trace(ilp.printIlp().toString());
diff --git a/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/ILPExternalSolver.java b/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/ILPExternalSolver.java
index f1625f4425a9f0158e64559f6e85d62f33c655ad..ef53166b8740f48b403d1b9a81b16f7e71f50002 100644
--- a/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/ILPExternalSolver.java
+++ b/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/ILPExternalSolver.java
@@ -70,7 +70,7 @@ public abstract class ILPExternalSolver extends AbstractILPSolver {
     }
   }
 
-  protected double solve0(Root model, StopWatch watch, List<IlpVariable> variablesSetToOne) throws SolvingException {
+  protected double solve0(Root model, ILP ilp, StopWatch watch, List<IlpVariable> variablesSetToOne) throws SolvingException {
 
     long startOfWriteOutInMillis = watch.time(TimeUnit.MILLISECONDS);
 
@@ -85,7 +85,9 @@ public abstract class ILPExternalSolver extends AbstractILPSolver {
     }
 
     // write out lp file
-    IlpString output = model.getILP().printIlp();
+    logger.debug("Starting ILP string construction.");
+    IlpString output = ilp.printIlp();
+    logger.debug("ILP string construction completed.");
     try (BufferedWriter writer = Files.newBufferedWriter(
         lp, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) {
       writer.write(output.toString());
@@ -140,8 +142,10 @@ public abstract class ILPExternalSolver extends AbstractILPSolver {
     // read the solution file
     ILPSolution result = new ILPSolution(model);
 
+    logger.debug("created empty solution");
+
 //    readFromPrintableSolution(ilp, solution, result, variablesSetToOne);
-    readFromPlainTextSolution(model.getILP(), solutionReadable, result, variablesSetToOne);
+    readFromPlainTextSolution(ilp, solutionReadable, result, variablesSetToOne);
     return result.getObjective();
   }