diff --git a/src/main/jastadd/LoadWorld.jadd b/src/main/jastadd/LoadWorld.jadd
index 4881399fe4b10d6a44087cba5f0062130e997065..135921136296fa74c5c0c60da3f9303a1b0d7978 100644
--- a/src/main/jastadd/LoadWorld.jadd
+++ b/src/main/jastadd/LoadWorld.jadd
@@ -14,11 +14,9 @@ aspect World {
     return print();
   }
 
-  public enum TokenType {UNDEFINED,FULL,LOAD,UNLOAD; }
-  public static TokenType Token.type() {return TokenType.UNDEFINED; }
-  public static TokenType Full.type() {return TokenType.FULL; }
-  public static TokenType Load.type() {return TokenType.LOAD; }
-  public static TokenType Unload.type() {return TokenType.UNLOAD; }
+  public static TokenType Full.type()   {return TokenType.of("FULL"); }
+  public static TokenType Load.type()   {return TokenType.of("LOAD"); }
+  public static TokenType Unload.type() {return TokenType.of("UNLOAD"); }
 
   public Full World.parseFull() {
     return null;
diff --git a/src/main/jastadd/LoadWorld.jrag b/src/main/jastadd/LoadWorld.jrag
index aca640a4190c0ac94b50cb9f4b8fd8bb8991b753..b658ab505e01816b61717e70772aed8a25e2dc07 100644
--- a/src/main/jastadd/LoadWorld.jrag
+++ b/src/main/jastadd/LoadWorld.jrag
@@ -1,3 +1,6 @@
 aspect LoadWorld {
   syn String Container.print() = "[Container " + getElementCount() + "/" + getCapacity() + "]";
+
+  syn Container World.asContainer() = null;
+  eq Container.asContainer() = this;
 }
\ No newline at end of file
diff --git a/src/main/jastadd/RobotWorld.jadd b/src/main/jastadd/RobotWorld.jadd
index e69ba01777de0f7620b01082bbfaf5d07d703663..02351bbe47b79bda248ba724a2e1952801e383a1 100644
--- a/src/main/jastadd/RobotWorld.jadd
+++ b/src/main/jastadd/RobotWorld.jadd
@@ -12,6 +12,17 @@ aspect RobotWorld {
     return new RobotScene(t, b);
   }
 
+  public static TokenType EmptyTable.type()             { return TokenType.of("EMPTY_TABLE"); }
+  public static TokenType ObjectAtWrongPlace.type()     { return TokenType.of("OBJECT_AT_WRONG_PLACE"); }
+  public static TokenType Pick.type()                   { return TokenType.of("PICK"); }
+  public static TokenType RobotIsFree.type()            { return TokenType.of("ROBOT_IS_FREE"); }
+  public static TokenType RobotIsBusy.type()            { return TokenType.of("ROBOT_IS_BUSY"); }
+  public static TokenType RobotIsIdle.type()            { return TokenType.of("ROBOT_IS_IDLE"); }
+  public static TokenType RobotHasNoItemAttached.type() { return TokenType.of("ROBOT_HAS_NO_ITEM_ATTACHED"); }
+  public static TokenType Wait.type()                   { return TokenType.of("WAIT"); }
+  public static TokenType RightPlace.type()             { return TokenType.of("RIGHT_PLACE"); }
+  public static TokenType Drop.type()                   { return TokenType.of("DROP"); }
+
   public static Pose Pose.of(double x, double y, double z) {
     return new Pose(x, y, z, 0, 0, 0, 1);
   }
diff --git a/src/main/jastadd/RobotWorld.jrag b/src/main/jastadd/RobotWorld.jrag
index ee136ab6580ac65cc5c5d6bc710ebac959b6726d..a3560dba5d348c951c064572f35874af3e61a502 100644
--- a/src/main/jastadd/RobotWorld.jrag
+++ b/src/main/jastadd/RobotWorld.jrag
@@ -7,6 +7,9 @@ aspect RobotWorld {
     return result + "\n]\n";
   }
 
+  syn RobotScene World.asRobotScene() = null;
+  eq RobotScene.asRobotScene() = this;
+
   syn boolean PhysicalObject.isBin() = false;
   eq Bin.isBin() = true;
 
diff --git a/src/main/jastadd/SemanticActions.jadd b/src/main/jastadd/SemanticActions.jadd
index a3edb74e2957dce04df01881010e084a37caf10c..f91e0fe65e16e1635ce7b0847d150ab0c0c29ea1 100644
--- a/src/main/jastadd/SemanticActions.jadd
+++ b/src/main/jastadd/SemanticActions.jadd
@@ -1,18 +1,18 @@
 aspect SemanticActions {
 
-  @Override
   public void Load.action(World world) {
+    Container container = world.asContainer();
     System.out.println("performing semantic action for element Load");
     System.out.print("  " + world);
-    world.setElementCount(world.getElementCount() + 1);
+    container.setElementCount(world.asContainer().getElementCount() + 1);
     System.out.println(" -> " + world);
   }
 
-  @Override
   public void Unload.action(World world) {
+    Container container = world.asContainer();
     System.out.println("performing semantic action for element Unload");
     System.out.print("  " + world);
-    world.setElementCount(world.getElementCount() - 1);
+    container.setElementCount(container.getElementCount() - 1);
     System.out.println(" -> " + world);
   }
 }
\ No newline at end of file
diff --git a/src/main/jastadd/common/SemanticActions.jadd b/src/main/jastadd/common/SemanticActions.jadd
index d4b7afd9ec5499875b6da5d01776c9c6d912146d..ea271e412fbddfc474cf1c1a8d4e91cd78c68b32 100644
--- a/src/main/jastadd/common/SemanticActions.jadd
+++ b/src/main/jastadd/common/SemanticActions.jadd
@@ -1,7 +1,7 @@
 aspect SemanticActions {
 
   public void MotionGrammarElement.action(World world) {
-    System.out.println("performing semantic action for element " + getClass().getSimpleName());
+    System.out.println("NOT performing any semantic action for element " + getClass().getSimpleName());
   }
 
 }
\ No newline at end of file
diff --git a/src/main/jastadd/common/Tokens.jadd b/src/main/jastadd/common/Tokens.jadd
new file mode 100644
index 0000000000000000000000000000000000000000..6f4d21fa77cb3e32fe89102beb4a39200ecd206e
--- /dev/null
+++ b/src/main/jastadd/common/Tokens.jadd
@@ -0,0 +1,23 @@
+aspect Tokens {
+
+  public class TokenType {
+
+    private String name_;
+
+    private TokenType(String name) {
+      name_ = name;
+    }
+
+    public String name() {
+      return name_;
+    }
+
+    public static TokenType of(String name) {
+      return new TokenType(name);
+    }
+
+  }
+
+  public static TokenType Token.type()  {return TokenType.of("UNDEFINED"); }
+
+}
\ No newline at end of file
diff --git a/src/main/java/de/tudresden/inf/st/mg/WorldParser.java b/src/main/java/de/tudresden/inf/st/mg/LoadWorldParser.java
similarity index 94%
rename from src/main/java/de/tudresden/inf/st/mg/WorldParser.java
rename to src/main/java/de/tudresden/inf/st/mg/LoadWorldParser.java
index f263b7263bc1b3098f324d2154be8fab6878dd0d..3638eb4971643f63f880434d762e7b9a0da6dc82 100644
--- a/src/main/java/de/tudresden/inf/st/mg/WorldParser.java
+++ b/src/main/java/de/tudresden/inf/st/mg/LoadWorldParser.java
@@ -5,7 +5,7 @@ import de.tudresden.inf.st.mg.jastadd.model.*;
 
 
 
-public final class WorldParser extends MotionGrammarParser<T> {
+public final class LoadWorldParser extends MotionGrammarParser<T> {
 
   private static final String WORLD = "World";
 
@@ -13,12 +13,12 @@ public final class WorldParser extends MotionGrammarParser<T> {
   private Unload peekedUnload_ = null;
   private Full peekedFull_ = null;
 
-  public WorldParser(World world) {
-    context_.put(WORLD, world);
+  public LoadWorldParser(World world) {
+    contexts_.put(WORLD, world);
   }
 
   private World getWorld() {
-    return (World) context_.get(WORLD);
+    return (World) contexts_.get(WORLD);
   }
 
   @Override
diff --git a/src/main/java/de/tudresden/inf/st/mg/RobotParser.java b/src/main/java/de/tudresden/inf/st/mg/RobotParser.java
index 6b227c6c957ddabf41c86690e284740f4788bfcb..b21339f2ff102ecd5f97a691cf9146bed6f473e4 100644
--- a/src/main/java/de/tudresden/inf/st/mg/RobotParser.java
+++ b/src/main/java/de/tudresden/inf/st/mg/RobotParser.java
@@ -11,11 +11,11 @@ public final class RobotParser extends MotionGrammarParser<Tidy> {
   private ObjectAtWrongPlace peekedObjectAtWrongPlace_ = null;
 
   public RobotParser(World world) {
-    context_.put(WORLD, world);
+    contexts_.put(WORLD, world);
   }
 
   private World getWorld() {
-    return (World) context_.get(WORLD);
+    return (World) contexts_.get(WORLD);
   }
 
 
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 483ed0e8f7f4d8a67244fcc0fe3fb5c525a55d0b..0a1dfa9e352c92c77dd0097a432b0ab65a5e0f95 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
@@ -2,7 +2,10 @@ package de.tudresden.inf.st.mg.common;
 
 import de.tudresden.inf.st.jastadd.dumpAst.ast.Dumper;
 import de.tudresden.inf.st.jastadd.dumpAst.ast.SkinParamBooleanSetting;
-import de.tudresden.inf.st.mg.jastadd.model.*;
+import de.tudresden.inf.st.mg.jastadd.model.ASTNode;
+import de.tudresden.inf.st.mg.jastadd.model.MotionGrammarElement;
+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;
@@ -13,7 +16,7 @@ import java.util.stream.Collectors;
 
 public abstract class MotionGrammarParser<T extends MotionGrammarElement> {
 
-  protected final Map<String, ASTNode<?>> context_ = new HashMap<>();
+  protected final Map<String, ASTNode<?>> contexts_ = new HashMap<>();
   protected ASTNode<T> rootContainer_;
   private int timeStep_;
   protected Path astDiagramDir_;
@@ -41,7 +44,7 @@ public abstract class MotionGrammarParser<T extends MotionGrammarElement> {
 
     try {
 
-      for (var contextEntry : context_.entrySet()) {
+      for (var contextEntry : contexts_.entrySet()) {
         Dumper.read(contextEntry.getValue())
                 .setNameMethod(o -> o == null ? "null" : o.getClass().getSimpleName())
                 .dumpAsPNG(astDiagramDir_.resolve("Context-" + contextEntry.getKey() + "-" + String.format("%03d", timeStep_) + "-" + step + ".png"));
@@ -63,7 +66,7 @@ public abstract class MotionGrammarParser<T extends MotionGrammarElement> {
 
   public static class ParseException extends Exception {
     public ParseException(String ruleName, TokenType... expectedTokens) {
-      super("Unable to parse nonterminal " + ruleName + ". Expected tokens " + Arrays.stream(expectedTokens).map(Enum::toString).collect(Collectors.joining(", ")) + ".");
+      super("Unable to parse nonterminal " + ruleName + ". Expected tokens " + Arrays.stream(expectedTokens).map(Object::toString).collect(Collectors.joining(", ")) + ".");
     }
 
     public ParseException(TokenType expectedToken) {
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 6dce66723a520209f852728c1b0b1fc8840059a6..82ec1beda7cb1ed0b8745da301f8c75074f21e1c 100644
--- a/src/test/java/de/tudresden/inf/st/mg/ParserTest.java
+++ b/src/test/java/de/tudresden/inf/st/mg/ParserTest.java
@@ -44,7 +44,7 @@ public class ParserTest {
     // for some reason, the best random seed value here is 1 and not 0???
     Container containerWorld = Container.initialWorld(new Random(1));
 
-    WorldParser parser = new WorldParser(containerWorld);
+    LoadWorldParser parser = new LoadWorldParser(containerWorld);
     parser.setDebugDiagramDir(LOAD_AST_DIAGRAM_DIR);
 
     var result = parser.parse();