diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index cc294cccfc4bde66d12535f07beb46cca562eca6..0df52baf006a3d3297634f4d11e6e1ec2b531d34 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -24,6 +24,8 @@ test:
   stage: test
   needs:
     - build
+  before_script:
+    - apt-get update && apt-get -y install graphviz
   script:
     - "./gradlew test"
   artifacts:
diff --git a/pages/mkdocs.yml b/pages/mkdocs.yml
index 231e4b66ca06eb17c65861d3febf0a07b765cc7d..f489d983d32f03ed63c8b6434c89d139b488dcc8 100644
--- a/pages/mkdocs.yml
+++ b/pages/mkdocs.yml
@@ -1,4 +1,4 @@
-site_name: Motion Grammar
+site_name: Motion Grammar JastAdd Implementation Example
 repo_url: https://git-st.inf.tu-dresden.de/jastadd/motion-grammar-example
 site_dir: ../public
 
diff --git a/src/main/java/de/tudresden/inf/st/mg/Main.java b/src/main/java/de/tudresden/inf/st/mg/Main.java
index df724f3fce4e3bc939d99c29a645f4b377618f26..3acb2474553f7e87a8239d38327ece9d112d599b 100644
--- a/src/main/java/de/tudresden/inf/st/mg/Main.java
+++ b/src/main/java/de/tudresden/inf/st/mg/Main.java
@@ -19,6 +19,7 @@ public class Main {
     World world = World.initialWorld(new Random(1));
 
     WorldParser parser = new WorldParser(world);
+    parser.setDebugDiagramDir(AST_DIAGRAM_DIR);
 
     try {
       Files.walk(AST_DIAGRAM_DIR)
diff --git a/src/main/java/de/tudresden/inf/st/mg/common/MotionGrammarParser.java b/src/main/java/de/tudresden/inf/st/mg/common/MotionGrammarParser.java
index 5ff6a0b8c3e0f4a3fdac1fa5478c8cf8a202c8ba..1666e34c3e653142358427a81f07dcad77a74e08 100644
--- a/src/main/java/de/tudresden/inf/st/mg/common/MotionGrammarParser.java
+++ b/src/main/java/de/tudresden/inf/st/mg/common/MotionGrammarParser.java
@@ -7,18 +7,22 @@ import de.tudresden.inf.st.mg.jastadd.model.Token;
 import de.tudresden.inf.st.mg.jastadd.model.TokenType;
 
 import java.io.IOException;
+import java.nio.file.Path;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.stream.Collectors;
 
-import static de.tudresden.inf.st.mg.Main.AST_DIAGRAM_DIR;
-
 public abstract class MotionGrammarParser {
 
   protected final Map<String, ASTNode<?>> context_ = new HashMap<>();
   protected ASTNode<T> rootContainer_;
-  private int timeStep;
+  private int timeStep_;
+  protected Path astDiagramDir_;
+
+  public void setDebugDiagramDir(Path p) {
+    astDiagramDir_ = p;
+  }
 
   /**
    * Prints the AST and all context models into PlantUML diagrams. Each time this method is called, a counter incremented.
@@ -27,6 +31,11 @@ public abstract class MotionGrammarParser {
    * @param highlightNode a node that is highlighted, to illustrate what happens in the current step; may be null
    */
   protected void printAST(String step, ASTNode<?> highlightNode) {
+
+    if (astDiagramDir_ == null) {
+      return;
+    }
+
     final String N_N = "4C78A6";
     final String H_N = "DCE9F7";
     final String N_T = "A78344";
@@ -37,16 +46,16 @@ public abstract class MotionGrammarParser {
       for (var contextEntry : context_.entrySet()) {
         Dumper.read(contextEntry.getValue())
                 .setNameMethod(o -> o == null ? "null" : o.getClass().getSimpleName())
-                .dumpAsPNG(AST_DIAGRAM_DIR.resolve("Context-" + contextEntry.getKey() + "-" + String.format("%03d", timeStep) + "-" + step + ".png"));
+                .dumpAsPNG(astDiagramDir_.resolve("Context-" + contextEntry.getKey() + "-" + String.format("%03d", timeStep_) + "-" + step + ".png"));
       }
       // TODO remove this once the issue in relast2uml has been resolved
       if (rootContainer_.getChild(0) != null) {
         Dumper.read(rootContainer_.getChild(0)).setBackgroundColorMethod(n -> n == null ? "white" : (n == highlightNode ? (n instanceof Token ? H_T : H_N) : (n instanceof Token ? N_T : N_N)))
                 .setNameMethod(o -> o == null ? "null" : o.getClass().getSimpleName())
                 .customPreamble("\nskinparam object {\nBackgroundColor<<null>> white\nBorderColor<<null>> white\nStereotypeFontColor<<null>> white\n}\n")
-                .dumpAsPNG(AST_DIAGRAM_DIR.resolve("AST-" + String.format("%03d", timeStep) + "-" + step + ".png"));
+                .dumpAsPNG(astDiagramDir_.resolve("AST-" + String.format("%03d", timeStep_) + "-" + step + ".png"));
       }
-      timeStep++;
+      timeStep_++;
     } catch (IOException e) {
       e.printStackTrace();
     }
diff --git a/src/test/java/de/tudresden/inf/st/mg/ParserTest.java b/src/test/java/de/tudresden/inf/st/mg/ParserTest.java
index a50279775b75480581829d0f415d3077ec9c5df2..8a0327e964c523f30050e773cc4dcb2bd6dbe0b0 100644
--- a/src/test/java/de/tudresden/inf/st/mg/ParserTest.java
+++ b/src/test/java/de/tudresden/inf/st/mg/ParserTest.java
@@ -21,12 +21,15 @@ public class ParserTest {
 
   @BeforeAll
   static void prepareOutputPath() throws IOException {
-    Files.walk(AST_DIAGRAM_DIR)
-            .sorted(Comparator.reverseOrder())
-            .map(Path::toFile)
-            .forEach(File::delete);
+    try {
+      Files.walk(AST_DIAGRAM_DIR)
+              .sorted(Comparator.reverseOrder())
+              .map(Path::toFile)
+              .forEach(File::delete);
+    } catch (IOException e) {
+      // do nothing
+    }
     Files.createDirectories(AST_DIAGRAM_DIR);
-
   }
 
   @Test
@@ -36,6 +39,7 @@ public class ParserTest {
     World world = World.initialWorld(new Random(1));
 
     WorldParser parser = new WorldParser(world);
+    parser.setDebugDiagramDir(AST_DIAGRAM_DIR);
 
     var result = parser.parseT();