diff --git a/jastadd-mquat-base/src/main/jastadd/mquat.parser b/jastadd-mquat-base/src/main/jastadd/mquat.parser
index 37243db6d937080d99c3e2ae8f160302cbfd682c..768e3b25a50f025a0f949380f0ff2781b10813c0 100644
--- a/jastadd-mquat-base/src/main/jastadd/mquat.parser
+++ b/jastadd-mquat-base/src/main/jastadd/mquat.parser
@@ -247,7 +247,7 @@ Instance instance =
   ;
 
 List instance_list =
-    instance.i COMMA instance_list.l {: insertZero(l, i); :}
+    instance.i COMMA instance_list.l {: insertZero(l, i); return l; :}
   | instance.i {: return new List<>(i); :}
   ;
 
diff --git a/jastadd-mquat-base/src/test/java/de/tudresden/inf/st/mquat/PPPTest.java b/jastadd-mquat-base/src/test/java/de/tudresden/inf/st/mquat/PPPTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba95a6a368c7ec5bdf0badd7a170b2f2c11f542d
--- /dev/null
+++ b/jastadd-mquat-base/src/test/java/de/tudresden/inf/st/mquat/PPPTest.java
@@ -0,0 +1,72 @@
+package de.tudresden.inf.st.mquat;
+
+import beaver.Parser;
+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 org.junit.Test;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.StringReader;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+/**
+ * Parser and pretty-printer test.
+ *
+ * @author rschoene - Initial contribution
+ */
+public class PPPTest {
+
+  private static final ScenarioDescription SCENARIO_DESCRIPTION = new ScenarioDescription(2, 2, 0, 0, 0, 2, 2, 1.5, 2, 2, 0);
+  private static final Path ERROR_PATH = Paths.get(".");
+
+  private static Tuple<Root, Solution> generateNewModel() {
+    ScenarioGenerator generator = new ScenarioGenerator(SCENARIO_DESCRIPTION);
+    Root model = generator.generate();
+    Solution solution = generator.getInitialSolution();
+    return Tuple.of(model, solution);
+  }
+
+  @Test
+  public void roundtripTest() throws IOException, Parser.Exception {
+    MquatWriteSettings settings = new MquatWriteSettings(" ");
+    // 1. Generate a model, and use initial solution
+    Tuple<Root, Solution> modelAndSolution = generateNewModel();
+    // 2. Print it as a string (model and solution), no need to use files
+    final String firstModel = modelAndSolution.getFirstElement().print(settings).toString();
+    final String firstSolution = modelAndSolution.getSecondElement().print(settings).toString();
+    // 3. Read/Parse both strings again
+    Tuple<Root, Solution> modelAndSolution2 = parse(firstModel, firstSolution);
+    // 4. Print them again
+    final String secondModel = modelAndSolution2.getFirstElement().print(settings).toString();
+    final String secondSolution = modelAndSolution2.getSecondElement().print(settings).toString();
+    // 5. Check if both are syntactically equal
+    assertEquals("Models are not equal", firstModel, secondModel);
+    assertEquals("Solutions are not equal", firstSolution, secondSolution);
+  }
+
+  private Tuple<Root, Solution> parse(String modelContent, String solutionContent) throws IOException, Parser.Exception {
+    MquatParser parser = new MquatParser();
+
+    StringReader reader = new StringReader(modelContent);
+    MquatScanner scanner = new MquatScanner(reader);
+    Root model = (Root) parser.parse(scanner);
+    parser.resolveReferences();
+
+    reader = new StringReader(solutionContent);
+    scanner = new MquatScanner(reader);
+    Solution solution = (Solution) parser.parse(scanner, MquatParser.AltGoals.solution);
+    parser.resolveSolutionReferencesWith(model);
+
+    return Tuple.of(model, solution);
+  }
+}