diff --git a/build.gradle b/build.gradle
index fae5d2b811356606b494c85b5f92261b2d3a9376..5d9812f293ba26725ba2642f75f78ec80493487b 100644
--- a/build.gradle
+++ b/build.gradle
@@ -84,9 +84,10 @@ task relastToJastAdd(type: JavaExec) {
             "--jastAddList=JastAddList",
             "--resolverHelper",
             "--file",
-            relastFile
+            relastFile,
+            "./src/main/jastadd/marking/Marking.relast"
 
-    inputs.files relastFile
+    inputs.files relastFile, file("./src/main/jastadd/marking/Marking.relast")
     outputs.files file("./src/gen/jastadd/placeTransition.ast"), file("./src/gen/jastadd/placeTransition.jadd")
 }
 
diff --git a/src/main/jastadd/marking/Marking.jrag b/src/main/jastadd/marking/Marking.jrag
new file mode 100644
index 0000000000000000000000000000000000000000..93a7ec3f2b1691c48798cdd33be12d144ca8fd6e
--- /dev/null
+++ b/src/main/jastadd/marking/Marking.jrag
@@ -0,0 +1,27 @@
+aspect Marking {
+  public Marking PetriNet.initialMarking() {
+    Marking marking = new Marking();
+    marking.setPetriNet(this);
+    for (Place place : allPlaces()) {
+      MarkedPlace markedPlace = new MarkedPlace();
+      markedPlace.setPlace(place);
+      if (place.hasInitialMarking() && place.getInitialMarking().getText() != null) {
+        markedPlace.setMarking(place.getInitialMarking().getText());
+      } else {
+        markedPlace.setMarking(0);
+      }
+      marking.addPlace(markedPlace);
+    }
+    return marking;
+  }
+
+  syn MarkedPlace Marking.resolvePlace(Place place) = placeMap().get(place);
+
+  syn lazy java.util.Map<Place, MarkedPlace> Marking.placeMap() {
+    java.util.Map<Place, MarkedPlace> map = new java.util.HashMap<>();
+    for (MarkedPlace markedPlace : getPlaceList()) {
+      map.put(markedPlace.getPlace(), markedPlace);
+    }
+    return map;
+  }
+}
diff --git a/src/main/jastadd/marking/Marking.relast b/src/main/jastadd/marking/Marking.relast
new file mode 100644
index 0000000000000000000000000000000000000000..335ed8c6513a9b8faa033f60c38e9b41ac516b05
--- /dev/null
+++ b/src/main/jastadd/marking/Marking.relast
@@ -0,0 +1,5 @@
+Marking ::= Place:MarkedPlace*;
+MarkedPlace ::= <Marking:int>;
+
+rel Marking.PetriNet -> PetriNet;
+rel MarkedPlace.Place -> Place;
diff --git a/src/main/jastadd/marking/Printing.jrag b/src/main/jastadd/marking/Printing.jrag
new file mode 100644
index 0000000000000000000000000000000000000000..66bd662a6cf90e48c7f4bbd3842aced901391157
--- /dev/null
+++ b/src/main/jastadd/marking/Printing.jrag
@@ -0,0 +1,10 @@
+aspect Printing {
+  syn String Marking.print() {
+    StringBuilder b = new StringBuilder();
+    b.append("Marking for Petri net '").append(getPetriNet().getId()).append("':\n");
+    for (MarkedPlace place : getPlaceList()) {
+      b.append("  ").append(place.getPlace().getId()).append(": ").append(place.getMarking()).append("\n");
+    }
+    return b.toString();
+  }
+}
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 91a499f4fbea71db4661573153d55415f285e22a..25690ef3d799b00128b1c54b5b6a9f14e37e3145 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/Main.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/Main.java
@@ -24,6 +24,14 @@ public class Main {
 
     String fileName = "src/main/resources/minimal.pnml";
 
+    List<PetriNet> petriNets = parsePnml(fileName);
+
+    for (PetriNet petriNet : petriNets) {
+      logger.info(petriNet.initialMarking().print());
+    }
+  }
+
+  private static List<PetriNet> parsePnml(String fileName) {
     Path file = Paths.get(fileName);
 
     HLAPIRootClass document = null;
@@ -40,13 +48,15 @@ public class Main {
 
     logger.info("Imported document workspace ID: {}", ModelRepository.getInstance().getCurrentDocWSId());
 
+    List<PetriNet> petriNets = new ArrayList<>();
+
     PNType type = PNMLUtils.determinePNType(document);
     switch (type) {
       case PTNET:
         PetriNetDocHLAPI ptDoc =
             (PetriNetDocHLAPI) document;
 
-        List<PetriNet> petriNets = new ArrayList<>();
+
 
         for (fr.lip6.move.pnml.ptnet.PetriNet pmnlNet : ptDoc.getNets()) {
           PnmlParser parser;
@@ -67,6 +77,7 @@ public class Main {
         logger.error("Petri net is of unsupported type {}.", type.getLiteral());
         System.exit(-1);
     }
+    return petriNets;
   }
 
 }