diff --git a/src/main/jastadd/Graphviz.jrag b/src/main/jastadd/Graphviz.jrag
new file mode 100644
index 0000000000000000000000000000000000000000..a66ae5cc81430e81495dbe9eb15a75d4a02a06d6
--- /dev/null
+++ b/src/main/jastadd/Graphviz.jrag
@@ -0,0 +1,41 @@
+aspect Graphviz {
+  syn String PetriNet.toDot() {
+
+    StringBuffer b = new StringBuffer();
+
+    b.append("digraph G {\n")
+        .append("rankdir=LR;\n")
+        .append("center=true; margin=1;\n")
+        .append("\n")
+        .append("subgraph place {\n")
+        .append("node [shape=circle,fixedsize=true,label=\"\", height=.3,width=.3];\n");
+
+    for (Place place : allPlaces()) {
+      b.append(place.dotId()).append(" [");
+      if (place.hasName()) b.append("xlabel=\"").append(place.name()).append("\", ");
+      b.append("label=\"").append("0").append("\"];\n");
+    }
+
+    b.append("}\n\n");
+
+    b.append("subgraph transitions {\n")
+        .append("node [shape=rect,height=0.4,width=.4];\n");
+    for (Transition transition : allTransitions()) {
+      b.append(transition.dotId()).append(" [");
+      if (transition.hasName()) b.append("label=\"").append(transition.name()).append("\"");
+      b.append("]\n");
+    }
+
+    b.append("}\n\n");
+
+    for (Arc arc : allArcs()) {
+      b.append(arc.getSource().dotId()).append("->").append(arc.getTarget().dotId()).append(";\n");
+    }
+    b.append("}\n");
+
+    return b.toString();
+  }
+
+  syn String PnObject.dotId() = "\"" + getId().replaceAll("\"", "\\\"") + "\"";
+
+}
diff --git a/src/main/jastadd/Navigation.jrag b/src/main/jastadd/Navigation.jrag
index e84c14f1cccfef8a671d729d9184620b43b9e1b5..34cda81c92d1430287d971bfea660f11bfc8ece8 100644
--- a/src/main/jastadd/Navigation.jrag
+++ b/src/main/jastadd/Navigation.jrag
@@ -52,4 +52,9 @@ aspect Navigation {
   Transition contributes this
     to PetriNet.allTransitions()
     for petriNet();
+
+  coll java.util.Set<Arc> PetriNet.allArcs() [new java.util.HashSet()] root PetriNet;
+  Arc contributes this
+    to PetriNet.allArcs()
+    for petriNet();
 }
diff --git a/src/main/java/de/tudresden/inf/st/pnml/Main.java b/src/main/java/de/tudresden/inf/st/pnml/Main.java
index f1ec05978fdc92803a50d675229f40dabc974e70..83d8b5827b40af828615523a980368121dc294e3 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/Main.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/Main.java
@@ -51,6 +51,8 @@ public class Main {
         logger.info("Original marking after {} firings: {}", i, originalMarking.print());
         logger.info("Current marking after {} firings: {}", i, currentMarking.print());
       }
+
+      logger.info("DOT file:\n\n{}", petriNet.toDot());
     }
   }