diff --git a/jastadd-mquat-base/src/main/jastadd/solvers/genetic/Checking.jrag b/jastadd-mquat-base/src/main/jastadd/solvers/genetic/Checking.jrag
index 8ab4e34322bc582d8a2ab269f58466eb361fb4ec..fcc46c76c564aea942d201a426e0a1a81ecab4d6 100644
--- a/jastadd-mquat-base/src/main/jastadd/solvers/genetic/Checking.jrag
+++ b/jastadd-mquat-base/src/main/jastadd/solvers/genetic/Checking.jrag
@@ -2,7 +2,7 @@ aspect Checking {
 
   syn int Solution.evaluateValidity() {
 
-    int faults = evaluateSoftwareCompletenessa();
+    int faults = evaluateSoftwareCompleteness();
 
     Set<Request> requestSet = new HashSet<>();
     Set<Resource> resourceSet = new HashSet<>();
@@ -54,7 +54,7 @@ aspect Checking {
 
   syn int Solution.evaluateSoftwareValidity() {
 
-    int faults = evaluateSoftwareCompletenessa();
+    int faults = evaluateSoftwareCompleteness();
 
     // check assignments
     Iterator<Assignment> assignmentIterator = this.assignmentIterator();
@@ -92,7 +92,7 @@ aspect Checking {
     return faults;
   }
 
-  syn int Solution.evaluateSoftwareCompletenessa() {
+  syn int Solution.evaluateSoftwareCompleteness() {
 
     int faults = 0;
 
@@ -102,7 +102,7 @@ aspect Checking {
     }
 
     for (Assignment assignment : getAssignmentList()) {
-      faults += assignment.evaluateSoftwareCompletenessa();
+      faults += assignment.evaluateSoftwareCompleteness();
       targets.remove(assignment.getImplementation().containingComponent());
     }
 
@@ -113,7 +113,7 @@ aspect Checking {
     return faults + targets.size();
   }
 
-  syn int Assignment.evaluateSoftwareCompletenessa() {
+  syn int Assignment.evaluateSoftwareCompleteness() {
     int faults = 0;
 
     if (getRequest() == null) {
diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/GeneticSolver.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/GeneticSolver.java
index bb07c4440f3397e44f8e7ee80ff8dd7e02b6e0dd..b89bb498d1ba81147e57d98d9f9dfccd6b80c4c9 100644
--- a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/GeneticSolver.java
+++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/GeneticSolver.java
@@ -1,13 +1,23 @@
 package de.tudresden.inf.st.mquat.solving.genetic;
 
+import de.tudresden.inf.st.mquat.generator.ScenarioDescription;
 import de.tudresden.inf.st.mquat.jastadd.model.Root;
 import de.tudresden.inf.st.mquat.jastadd.model.Solution;
 import de.tudresden.inf.st.mquat.solving.BenchmarkableSolver;
 import de.tudresden.inf.st.mquat.solving.Solver;
 import de.tudresden.inf.st.mquat.solving.SolvingException;
+import de.tudresden.inf.st.mquat.solving.genetic.opt4j.Opt4jModule;
+import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.operator.copy.TreeCopyOperatorModule;
+import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.operator.crossover.TreeCrossoverOperatorModule;
+import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.operator.mutate.TreeMutateOperatorModule;
 import de.tudresden.inf.st.mquat.utils.StopWatch;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
+import org.opt4j.core.Individual;
+import org.opt4j.core.optimizer.Archive;
+import org.opt4j.core.start.Opt4JTask;
+import org.opt4j.optimizers.ea.EvolutionaryAlgorithmModule;
+import org.opt4j.viewer.ViewerModule;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -39,14 +49,58 @@ public class GeneticSolver implements BenchmarkableSolver {
   @Override
   public Solution solve(Root model) throws SolvingException {
     reset();
+
+    stopWatch = StopWatch.start();
+
+    List<Solution> solutions = new ArrayList<>();
+
     if (model.getNumRequest() == 0) {
       return Solution.emptySolutionOf(model);
     }
-    stopWatch = StopWatch.start();
 
-    List<Solution> solutions = new ArrayList<>();
 
-    // do some solvin'
+    Opt4jModule.setModel(model);
+
+    EvolutionaryAlgorithmModule ea = new EvolutionaryAlgorithmModule();
+    ea.setGenerations(1000);
+
+    // set population size
+    ea.setAlpha(50);
+
+    Opt4jModule testModule = new Opt4jModule();
+
+    TreeCrossoverOperatorModule crossover = new TreeCrossoverOperatorModule();
+    TreeMutateOperatorModule mutate = new TreeMutateOperatorModule();
+    TreeCopyOperatorModule copy = new TreeCopyOperatorModule();
+
+    ViewerModule viewer = new ViewerModule();
+    viewer.setCloseOnStop(false);
+
+    Opt4JTask task = new Opt4JTask(false);
+    task.init(ea, testModule, crossover, mutate, copy);
+//    task.init(ea, testModule, viewer, crossover, mutate, copy);
+    try {
+      task.execute();
+      Archive archive = task.getInstance(Archive.class);
+      for (Individual individual : archive) {
+        // obtain the phenotype and objective, etc. of each individual
+        Solution solution = (Solution) individual.getPhenotype();
+        if (solution.isValid()) {
+          if (solutions.isEmpty() || solution.computeObjective() < solutions.get(solutions.size() - 1).computeObjective()) {
+            Solution clone = solution.deepCopy();
+            solutions.add(clone);
+            logger.info("found a better solution with an objective of {}.", solution.computeObjective());
+          }
+        } else {
+          logger.warn("Found an invalid solution with " + solution.evaluateValidity() + " errors.");
+        }
+
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+    } finally {
+      task.close();
+    }
 
     if (solutions.size() > 0) {
       lastSolution = solutions.get(solutions.size() - 1);
diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/Opt4jEvaluator.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/Opt4jEvaluator.java
index 26bfffdcf29a03a0207a286ee82c62ba101c7275..d4612e7eb8b56d9a5c839997df220d9033dd9a40 100644
--- a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/Opt4jEvaluator.java
+++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/Opt4jEvaluator.java
@@ -12,7 +12,7 @@ public class Opt4jEvaluator implements Evaluator<Solution> {
     Objectives objectives = new Objectives();
     objectives.add("Validity Errors", Sign.MIN, phenotype.evaluateValidity() * 1000);
     objectives.add("Software Validity Errors", Sign.MIN, phenotype.evaluateSoftwareValidity() * 1000);
-    objectives.add("Structural Errors", Sign.MIN, phenotype.evaluateSoftwareCompletenessa() * 1000);
+    objectives.add("Structural Errors", Sign.MIN, phenotype.evaluateSoftwareCompleteness() * 1000);
 
     double objective = phenotype.computeObjective();
 
@@ -22,7 +22,7 @@ public class Opt4jEvaluator implements Evaluator<Solution> {
     if (phenotype.evaluateSoftwareValidity() != 0) {
       objective *= 10;
     }
-    if (phenotype.evaluateSoftwareCompletenessa() != 0) {
+    if (phenotype.evaluateSoftwareCompleteness() != 0) {
       objective *= 10;
     }
 
diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/Opt4jModule.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/Opt4jModule.java
index 86f1ebc7915c2eafcf61b257f91f296678af4cd1..5fff25a053d85f763512784f4aa9719393e23ce1 100644
--- a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/Opt4jModule.java
+++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/Opt4jModule.java
@@ -1,16 +1,7 @@
 package de.tudresden.inf.st.mquat.solving.genetic.opt4j;
 
-import de.tudresden.inf.st.mquat.generator.ScenarioDescription;
 import de.tudresden.inf.st.mquat.jastadd.model.Root;
-import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.operator.copy.TreeCopyOperatorModule;
-import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.operator.crossover.TreeCrossoverOperatorModule;
-import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.operator.mutate.TreeMutateOperatorModule;
-import org.opt4j.core.Individual;
-import org.opt4j.core.optimizer.Archive;
 import org.opt4j.core.problem.ProblemModule;
-import org.opt4j.core.start.Opt4JTask;
-import org.opt4j.optimizers.ea.EvolutionaryAlgorithmModule;
-import org.opt4j.viewer.ViewerModule;
 
 public class Opt4jModule extends ProblemModule {
 
@@ -24,45 +15,6 @@ public class Opt4jModule extends ProblemModule {
     Opt4jModule.model = model;
   }
 
-  public static void main(String[] args) {
-
-    final ScenarioDescription SCENARIO_DESCRIPTION = new ScenarioDescription(1, 2, 0, 0, 0, 2, 3, 1.5, 1, 1, 0);
-    de.tudresden.inf.st.mquat.generator.ScenarioGenerator sc = new de.tudresden.inf.st.mquat.generator.ScenarioGenerator(
-        SCENARIO_DESCRIPTION);
-
-    Opt4jModule.setModel(sc.generate());
-
-    EvolutionaryAlgorithmModule ea = new EvolutionaryAlgorithmModule();
-    ea.setGenerations(100000);
-
-    // set population size
-    ea.setAlpha(100);
-
-    Opt4jModule testModule = new Opt4jModule();
-
-    TreeCrossoverOperatorModule crossover = new TreeCrossoverOperatorModule();
-    TreeMutateOperatorModule mutate = new TreeMutateOperatorModule();
-    TreeCopyOperatorModule copy = new TreeCopyOperatorModule();
-
-    // testModule.setFunction(JohannesModule.Function.dtlz);
-    ViewerModule viewer = new ViewerModule();
-    viewer.isCloseOnStop();
-
-    Opt4JTask task = new Opt4JTask(false);
-    task.init(ea, testModule, viewer, crossover, mutate, copy);
-    try {
-      task.execute();
-      Archive archive = task.getInstance(Archive.class);
-      for (Individual individual : archive) {
-        // obtain the phenotype and objective, etc. of each individual
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-    } finally {
-      task.close();
-    }
-  }
-
   @Override
   protected void configure() {
     bindProblem(Opt4jCreator.class, Opt4jDecoder.class, Opt4jEvaluator.class);
diff --git a/jastadd-mquat-solver-genetic/src/test/java/de/tudresden/inf/st/mquat/solving/SimpleHandwrittenTest.java b/jastadd-mquat-solver-genetic/src/test/java/de/tudresden/inf/st/mquat/solving/GeneticHandwrittenTest.java
similarity index 74%
rename from jastadd-mquat-solver-genetic/src/test/java/de/tudresden/inf/st/mquat/solving/SimpleHandwrittenTest.java
rename to jastadd-mquat-solver-genetic/src/test/java/de/tudresden/inf/st/mquat/solving/GeneticHandwrittenTest.java
index 380e0ad6f96789819b9a74b6fc6404cd2d8c1189..22271aba9ac871c67ed47e818e0fb5d262adb37e 100644
--- a/jastadd-mquat-solver-genetic/src/test/java/de/tudresden/inf/st/mquat/solving/SimpleHandwrittenTest.java
+++ b/jastadd-mquat-solver-genetic/src/test/java/de/tudresden/inf/st/mquat/solving/GeneticHandwrittenTest.java
@@ -2,7 +2,7 @@ package de.tudresden.inf.st.mquat.solving;
 
 import de.tudresden.inf.st.mquat.solving.genetic.GeneticSolver;
 
-public class SimpleHandwrittenTest extends HandwrittenTestSuite {
+public class GeneticHandwrittenTest extends HandwrittenTestSuite {
 
   @Override
   protected Solver getSolver() {
diff --git a/jastadd-mquat-solver-genetic/src/test/java/de/tudresden/inf/st/mquat/solving/SimpleSolverTest.java b/jastadd-mquat-solver-genetic/src/test/java/de/tudresden/inf/st/mquat/solving/GeneticSolverTest.java
similarity index 89%
rename from jastadd-mquat-solver-genetic/src/test/java/de/tudresden/inf/st/mquat/solving/SimpleSolverTest.java
rename to jastadd-mquat-solver-genetic/src/test/java/de/tudresden/inf/st/mquat/solving/GeneticSolverTest.java
index 1af14070cf7d8a1a44e190ef62eebc57615b185b..9cc7a2615c1033e47ab942167f71a08a236d021f 100644
--- a/jastadd-mquat-solver-genetic/src/test/java/de/tudresden/inf/st/mquat/solving/SimpleSolverTest.java
+++ b/jastadd-mquat-solver-genetic/src/test/java/de/tudresden/inf/st/mquat/solving/GeneticSolverTest.java
@@ -11,20 +11,20 @@ import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-public class SimpleSolverTest {
+public class GeneticSolverTest {
 
   private static Logger logger;
 
   @BeforeClass
   public static void initLogger() {
-    logger = LogManager.getLogger(SimpleSolverTest.class);
+    logger = LogManager.getLogger(GeneticSolverTest.class);
   }
 
   /**
    * tests the genetic solver with one very genetic use case
    */
   @Test
-  public void testSimpleSolver() throws SolvingException {
+  public void testGeneticSolver() throws SolvingException {
     int tlc = 1;
     int iac = 2;
     int isd = 0;
diff --git a/jastadd-mquat-solver/src/test/java/de/tudresden/inf/st/mquat/solving/HandwrittenTestSuite.java b/jastadd-mquat-solver/src/test/java/de/tudresden/inf/st/mquat/solving/HandwrittenTestSuite.java
index dbae9d35bb8a902914d39388205865054f5fbbb8..73072275cb9db130134ab2cae5e4f55adb6de65c 100644
--- a/jastadd-mquat-solver/src/test/java/de/tudresden/inf/st/mquat/solving/HandwrittenTestSuite.java
+++ b/jastadd-mquat-solver/src/test/java/de/tudresden/inf/st/mquat/solving/HandwrittenTestSuite.java
@@ -14,6 +14,7 @@ import java.util.Iterator;
 
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 public abstract class HandwrittenTestSuite {
   private static Logger logger;
@@ -141,6 +142,7 @@ public abstract class HandwrittenTestSuite {
   public void test_05() throws IOException, Parser.Exception, SolvingException {
     Tuple<Root, Solution> modelAndSolution = loadAndSolve("test_05.txt");
     assertValidSolution(modelAndSolution);
+    assertTrue(modelAndSolution.getSecondElement().isValid());
     Assignment configA = assertAssignment(modelAndSolution, 0, "configA0", "r0");
     Assignment configB = assertAssignment(modelAndSolution, 0, "configB0", "r1");
     Assignment configC = assertAssignment(modelAndSolution, 0, "configC0", "r4");