diff --git a/jastadd-mquat-base/.gitignore b/jastadd-mquat-base/.gitignore
index cebd2f80655a5da0c591d1dc9c2999f354871b9b..86705c02f96d1438953c264f7c5dcd3451905a69 100644
--- a/jastadd-mquat-base/.gitignore
+++ b/jastadd-mquat-base/.gitignore
@@ -7,3 +7,7 @@ coverage
 /bin/
 /build/
 /out/
+
+# files created by Main
+model-serialized.txt
+solution-serialized.txt
diff --git a/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/Main.java b/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/Main.java
index 049adef0e744a6f2b55660efdc46862ea616953d..8749c301cbc28bb78b25d677658a053ece6fe190 100644
--- a/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/Main.java
+++ b/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/Main.java
@@ -2,16 +2,14 @@ package de.tudresden.inf.st.mquat;
 
 import beaver.Parser;
 import de.tudresden.inf.st.mquat.deserializer.ASTNodeDeserializer;
-import de.tudresden.inf.st.mquat.generator.*;
+import de.tudresden.inf.st.mquat.generator.ScenarioDescription;
+import de.tudresden.inf.st.mquat.generator.ScenarioGenerator;
 import de.tudresden.inf.st.mquat.jastadd.model.*;
 import de.tudresden.inf.st.mquat.jastadd.parser.MquatParser;
 import de.tudresden.inf.st.mquat.jastadd.scanner.MquatScanner;
-import de.tudresden.inf.st.mquat.serializer.ASTNodeSerializer;
 import de.tudresden.inf.st.mquat.serializer.JsonSerializer;
-import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.config.Configurator;
 
 import java.io.*;
 import java.net.URL;
@@ -19,7 +17,6 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.nio.file.StandardOpenOption;
-import java.util.Map;
 import java.util.Optional;
 import java.util.Scanner;
 
@@ -30,7 +27,7 @@ import java.util.Scanner;
 @SuppressWarnings("unused")
 public class Main {
 
-  public static final ScenarioDescription SCENARIO_DESCRIPTION = new ScenarioDescription(2, 2, 0, 0, 0, 2, 2, 1.5, 2, 2, 0);
+  private static final ScenarioDescription SCENARIO_DESCRIPTION = new ScenarioDescription(2, 2, 0, 0, 0, 2, 2, 1.5, 2, 2, 0);
 
   private static File getAbsoluteFileForLoading(String fileName) throws FileNotFoundException {
     URL expUrl = Main.class.getClassLoader().getResource(fileName);
@@ -97,7 +94,7 @@ public class Main {
   // required for the DrAST debugger
   public static Object DrAST_root_node;
 
-  public static Optional<Root> loadModel(String fileName) {
+  private static Optional<Root> loadModel(String fileName) {
     try {
       Root root = load(fileName);
       // required for the DrAST debugger
@@ -110,6 +107,21 @@ public class Main {
     return Optional.empty();
   }
 
+  private static Optional<Solution> loadSolution(String fileName, Root model) {
+    try {
+      File file = getAbsoluteFileForLoading(fileName);
+      FileReader reader = new FileReader(file);
+      MquatScanner scanner = new MquatScanner(reader);
+      MquatParser parser = new MquatParser();
+      Solution result = (Solution) parser.parse(scanner, MquatParser.AltGoals.solution);
+      parser.resolveSolutionReferencesWith(model);
+      return Optional.of(result);
+    } catch (IOException | Parser.Exception e) {
+      e.printStackTrace();
+    }
+    return Optional.empty();
+  }
+
   private static void checkParsedModel(Root parsedModel, File originalFile, MquatWriteSettings settings)
       throws IOException, InterruptedException {
     if (parsedModel == null) {
@@ -140,14 +152,27 @@ public class Main {
     return generatedModel;
   }
 
-  public static void main(String[] args) throws Exception {
+  public static void main(String[] args) {
     Logger logger = LogManager.getLogger(Main.class);
     logger.info("Starting base.Main");
 
-    String fileName = args.length > 0 ? args[0] : "model-handmade.txt";
+    String modelFileName = args.length > 0 ? args[0] : "model-handmade.txt";
+    String solutionFileName = args.length > 0 ? args[0] : "solution-handmade.txt";
 //    Configurator.setRootLevel(Level.TRACE);
-    Optional<Root> parsedModel = loadModel(fileName);
-    parsedModel.ifPresent(model -> JsonSerializer.write(model, "model-serialized.txt"));
+    Optional<Root> parsedModel = loadModel(modelFileName);
+    Root model;
+    if (parsedModel.isPresent()) {
+      model = parsedModel.get();
+    } else {
+      logger.error("Model was not parsed correctly!");
+      return;
+    }
+    JsonSerializer.write(model, "model-serialized.txt");
+    Optional<Solution> parsedSolution = loadSolution(solutionFileName, model);
+    if (parsedSolution.isPresent()) {
+      Solution solution = parsedSolution.get();
+      JsonSerializer.write(solution, "solution-serialized.txt");
+    }
 
 //    Root model = generateNewModel(new MquatWriteSettings("  "), false);
 //    JsonSerializer.write(model, "model-serialized.txt");
diff --git a/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/serializer/JsonSerializer.java b/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/serializer/JsonSerializer.java
index 1a6e35af6d3f9ec7fe2656de9b36c9462f3f1696..e000a614b804953834158d3a2e7a112ba0f1cc68 100644
--- a/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/serializer/JsonSerializer.java
+++ b/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/serializer/JsonSerializer.java
@@ -3,10 +3,7 @@ package de.tudresden.inf.st.mquat.serializer;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.databind.module.SimpleModule;
-import de.tudresden.inf.st.mquat.jastadd.model.ASTNode;
-import de.tudresden.inf.st.mquat.jastadd.model.List;
-import de.tudresden.inf.st.mquat.jastadd.model.Opt;
-import de.tudresden.inf.st.mquat.jastadd.model.Root;
+import de.tudresden.inf.st.mquat.jastadd.model.*;
 
 import java.io.File;
 import java.io.IOException;
@@ -14,6 +11,14 @@ import java.io.IOException;
 public class JsonSerializer {
 
   public static void write(Root r, String fileName) {
+    writeAstNode(r, fileName);
+  }
+
+  public static void write(Solution s, String fileName) {
+    writeAstNode(s, fileName);
+  }
+
+  private static void writeAstNode(ASTNode a, String fileName) {
     ObjectMapper mapper = new ObjectMapper();
     mapper.enable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS);
     mapper.enable(SerializationFeature.INDENT_OUTPUT);
@@ -25,10 +30,9 @@ public class JsonSerializer {
     mapper.registerModule(module);
 
     try {
-      mapper.writeValue(new File(fileName), r);
+      mapper.writeValue(new File(fileName), a);
     } catch (IOException e) {
       e.printStackTrace();
     }
-
   }
 }
diff --git a/jastadd-mquat-base/src/main/resources/solution-handmade.txt b/jastadd-mquat-base/src/main/resources/solution-handmade.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a50770faca7fcbd6cbfb0194cec315d644e24485
--- /dev/null
+++ b/jastadd-mquat-base/src/main/resources/solution-handmade.txt
@@ -0,0 +1,26 @@
+solution {
+ request0 -> implementation_0i1 {
+  compute_resource_0 -> resource0 {
+   cpu_0 -> cpu0_0
+   ram_1 -> ram0
+   disk_1 -> disk0
+   network_1 -> network0
+  }
+  the_component_0c0 -> implementation_0c0i0 {
+   compute_resource_0 -> resource1 {
+    cpu_0 -> cpu1_0
+    ram_1 -> ram1
+    disk_1 -> disk1
+    network_1 -> network1
+   }
+  }
+  the_component_0c1 -> implementation_0c1i0 {
+   compute_resource_0 -> resource2 {
+    cpu_0 -> cpu2_0
+    ram_1 -> ram2
+    disk_1 -> disk2
+    network_1 -> network2
+   }
+  }
+ }
+}