diff --git a/libs/jastadd2.jar b/libs/jastadd2.jar
new file mode 100644
index 0000000000000000000000000000000000000000..d615b895453d660f0e7397fffad58a05029169fd
Binary files /dev/null and b/libs/jastadd2.jar differ
diff --git a/libs/ragconnect-0.3.1.jar b/libs/ragconnect-0.3.1.jar
index faabd7a763be13599c78fd851038b6ec69dbb79d..da8df316201d4ddede05a35e14d01f757df33582 100644
Binary files a/libs/ragconnect-0.3.1.jar and b/libs/ragconnect-0.3.1.jar differ
diff --git a/ros3rag.common/src/main/resources/jastadd/types.jadd b/ros3rag.common/src/main/resources/jastadd/types.jadd
index ed44d6ae3c01d9886b549ad1652ee2430b7a4043..cc6d247bbfb5e25c316616634860747e2e685cf0 100644
--- a/ros3rag.common/src/main/resources/jastadd/types.jadd
+++ b/ros3rag.common/src/main/resources/jastadd/types.jadd
@@ -134,24 +134,38 @@ aspect Printing {
       sb.append(" no locations\n");
     } else {
       for (var location : getDropOffLocationList()) {
-        sb.append(" location ").append(location).append("\n");
+        sb.append(" location ").append(location.prettyPrint()).append("\n");
       }
     }
     if (getNumMovableObject() == 0) {
       sb.append(" no objects\n");
     } else {
       for (var obj : getMovableObjectList()) {
-        sb.append(" obj ").append(obj).append("\n");
+        sb.append(" obj ").append(obj.prettyPrint()).append("\n");
       }
     }
     return sb.toString();
   }
 
-  syn String MovableObject.toString() = "<obj " + getName() + getPosition() + getOrientation() + getSize() + "@" + Integer.toHexString(hashCode()) + ">";
-  syn String DropOffLocation.toString() = "{loc " + getName() + getPosition() + getOrientation() + getSize() + "@" + Integer.toHexString(hashCode()) + "}";
-  syn String Position.toString() = " pos=(" + getX() + "," + getY() + "," + getZ() + ")";
-  syn String Orientation.toString() = " orient=(" + getX() + "," + getY() + "," + getZ() + "," + getW() + ")";
-  syn String Size.toString() = " size=(" + getLength() + "," + getWidth() + "," + getHeight() + ")";
+  syn String MovableObject.prettyPrint() {
+    return "<obj " + getName() + getPosition().prettyPrint() + getOrientation().prettyPrint() + getSize().prettyPrint() + "@" + Integer.toHexString(hashCode()) + ">";
+  }
+
+  syn String DropOffLocation.prettyPrint() {
+    return "{loc " + getName() + getPosition().prettyPrint() + getOrientation().prettyPrint() + getSize().prettyPrint() + "@" + Integer.toHexString(hashCode()) + "}";
+  }
+
+  syn String Position.prettyPrint() {
+    return " pos=(" + getX() + "," + getY() + "," + getZ() + ")";
+  }
+
+  syn String Orientation.prettyPrint() {
+    return " orient=(" + getX() + "," + getY() + "," + getZ() + "," + getW() + ")";
+  }
+
+  syn String Size.prettyPrint() {
+    return " size=(" + getLength() + "," + getWidth() + "," + getHeight() + ")";
+  }
 
   syn String LogicalScene.prettyPrint() {
     StringBuilder sb = new StringBuilder();
@@ -159,7 +173,7 @@ aspect Printing {
       sb.append(" no locations\n");
     } else {
       for (var location : getLogicalDropOffLocationList()) {
-        sb.append(" location ").append(location);
+        sb.append(" location ").append(location.prettyPrint());
         if (!location.getContainedObjectList().isEmpty()) {
           sb.append(" (objects: ").append(location.getContainedObjectList()).append(")");
         }
@@ -170,7 +184,7 @@ aspect Printing {
       sb.append(" no objects\n");
     } else {
       for (var obj : getLogicalMovableObjectList()) {
-        sb.append(" obj ").append(obj);
+        sb.append(" obj ").append(obj.prettyPrint());
         if (obj.hasLocatedAt()) {
           sb.append(" (locatedAt: ").append(obj.getLocatedAt()).append(")");
         }
@@ -180,8 +194,12 @@ aspect Printing {
     return sb.toString();
   }
 
-  syn String LogicalMovableObject.toString() = "<obj " + getName() + "@" + Integer.toHexString(hashCode()) + ">";
-  syn String LogicalDropOffLocation.toString() = "{loc " + getName() + "@" + Integer.toHexString(hashCode()) + "}";
+  syn String LogicalMovableObject.prettyPrint() {
+    return  "<obj " + getName() + "@" + Integer.toHexString(hashCode()) + ">";
+  }
+  syn String LogicalDropOffLocation.prettyPrint() {
+    return "{loc " + getName() + "@" + Integer.toHexString(hashCode()) + "}";
+  }
 }
 
 aspect ConvenienceMethods {
diff --git a/ros3rag.common/src/main/resources/tasks.gradle b/ros3rag.common/src/main/resources/tasks.gradle
index 7b7c51f49605ed3cfb0eaa059031c06ca15fb4f4..79b3eab1860edfbace31eb2fda88a3dd09f262e0 100644
--- a/ros3rag.common/src/main/resources/tasks.gradle
+++ b/ros3rag.common/src/main/resources/tasks.gradle
@@ -2,7 +2,8 @@
 apply plugin: 'jastadd'
 
 dependencies {
-    jastadd2 "org.jastadd:jastadd:2.3.5"
+//    jastadd2 "org.jastadd:jastadd:2.3.5"
+    jastadd2 fileTree(include: ['jastadd2.jar'], dir: '../libs')
     api group: 'org.fusesource.mqtt-client', name: 'mqtt-client', version: '1.15'
 
 }
@@ -27,7 +28,7 @@ task ragConnect(type: JavaExec) {
             '--logWrites',
 //            '--verbose',
             '--rootNode=' + project.ext.ragConnectRootNode,
-            '--incremental=param,debug',
+            '--incremental=param',
             "--tracing=cache,flush"
     ])
 
@@ -119,7 +120,7 @@ jastadd {
             '--lineColumnNumbers',
             '--List=JastAddList',
             '--cache=all',
-            "--flush=full",
+            "--flush=api",
             "--incremental=param,debug",
             "--tracing=cache,flush",
     ]
diff --git a/ros3rag.placeA/src/main/java/de/tudresden/inf/st/placeA/MainA.java b/ros3rag.placeA/src/main/java/de/tudresden/inf/st/placeA/MainA.java
index 920de2346e4f68a7b904f91a5379cdad261e8415..c7cb57e9ec52e0574fad1f98e9afd71bd6c5dad7 100644
--- a/ros3rag.placeA/src/main/java/de/tudresden/inf/st/placeA/MainA.java
+++ b/ros3rag.placeA/src/main/java/de/tudresden/inf/st/placeA/MainA.java
@@ -1,6 +1,9 @@
 package de.tudresden.inf.st.placeA;
 
-import de.tudresden.inf.st.placeA.ast.*;
+import de.tudresden.inf.st.placeA.ast.MqttHandler;
+import de.tudresden.inf.st.placeA.ast.Robot;
+import de.tudresden.inf.st.placeA.ast.Scene;
+import de.tudresden.inf.st.placeA.ast.WorldModelA;
 import de.tudresden.inf.st.ros3rag.common.Util;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -55,12 +58,12 @@ public class MainA {
     mainHandler.newConnection(TOPIC_EXIT, bytes -> exitCondition.countDown());
     mainHandler.newConnection(TOPIC_MODEL, bytes -> logStatus(new String(bytes)));
 
-    mainHandler.newConnection(TOPIC_DEMO_MOVE_objectRed1_BLUE, bytes -> {
-      updatePositionOfObjectToLocation("objectRed1", "binBlue");
-    });
-    mainHandler.newConnection(TOPIC_DEMO_MOVE_objectRed1_RED, bytes -> {
-      updatePositionOfObjectToLocation("objectRed1", "binRed");
-    });
+    mainHandler.newConnection(TOPIC_DEMO_MOVE_objectRed1_BLUE, bytes ->
+        UtilA.updatePositionOfObjectToLocation(model.getScene(), "objectRed1", "binBlue")
+    );
+    mainHandler.newConnection(TOPIC_DEMO_MOVE_objectRed1_RED, bytes ->
+      UtilA.updatePositionOfObjectToLocation(model.getScene(), "objectRed1", "binRed")
+    );
 
     /// Reading scene and robot
     de.tudresden.inf.st.ceti.Scene scene = readScene(
@@ -93,25 +96,6 @@ public class MainA {
     exitCondition.await();
   }
 
-  private void updatePositionOfObjectToLocation(String objName, String locationName) {
-    ObjectOfInterest obj = model.getScene().resolveObjectOfInterest(objName);
-    ObjectOfInterest location = model.getScene().resolveObjectOfInterest(locationName);
-    if (obj != null && location != null) {
-      // move objectRed1 to binBlue
-      logger.info("Got " + obj + " and location " + location);
-      logger.debug("before to {} at {}\n{}", locationName, location.getPosition(),
-          model.getScene().prettyPrint());
-
-      obj.setPosition(Position.of(location.getPosition().getX(),
-          location.getPosition().getY(),
-          location.getPosition().getZ()));
-
-      logger.debug("after\n{}", model.getScene().prettyPrint());
-    } else {
-      logger.error("Obj (" + obj + ") or location (" + location + ") are null");
-    }
-  }
-
   private void setRobot(String name) {
     if (model.getRobot() != null) {
       logger.error("Robot already set. Overriding with newly found name.");
diff --git a/ros3rag.placeA/src/main/java/de/tudresden/inf/st/placeA/UtilA.java b/ros3rag.placeA/src/main/java/de/tudresden/inf/st/placeA/UtilA.java
index 25721619b0b5aad42ac6bc0fd57600df56e11ea2..623867a147fbdef4627fdf5de7707de8690d26a2 100644
--- a/ros3rag.placeA/src/main/java/de/tudresden/inf/st/placeA/UtilA.java
+++ b/ros3rag.placeA/src/main/java/de/tudresden/inf/st/placeA/UtilA.java
@@ -1,8 +1,6 @@
 package de.tudresden.inf.st.placeA;
 
-import de.tudresden.inf.st.placeA.ast.ASTNode;
-import de.tudresden.inf.st.placeA.ast.Scene;
-import de.tudresden.inf.st.placeA.ast.WorldModelA;
+import de.tudresden.inf.st.placeA.ast.*;
 import de.tudresden.inf.st.ros3rag.common.Util;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -25,6 +23,25 @@ public class UtilA {
     return new ExposingASTNode().exposed_apply_ConvertScene(scene);
   }
 
+  static void updatePositionOfObjectToLocation(Scene scene, String objName, String locationName) {
+    ObjectOfInterest obj = scene.resolveObjectOfInterest(objName);
+    ObjectOfInterest location = scene.resolveObjectOfInterest(locationName);
+    if (obj != null && location != null) {
+      // move objectRed1 to binBlue
+      logger.info("Got " + obj + " and location " + location);
+      logger.debug("before to {} at {}\n{}", locationName, location.getPosition(),
+          scene.prettyPrint());
+
+      obj.setPosition(Position.of(location.getPosition().getX(),
+          location.getPosition().getY(),
+          location.getPosition().getZ()));
+
+      logger.debug("after\n{}", scene.prettyPrint());
+    } else {
+      logger.error("Obj (" + obj + ") or location (" + location + ") are null");
+    }
+  }
+
   public static String getModelInfos(WorldModelA model, boolean detailed) {
     StringBuilder sb = new StringBuilder();
     sb.append("myRobot: ")
diff --git a/ros3rag.placeB/build.gradle b/ros3rag.placeB/build.gradle
index 95d2d16ba73432095be516bff69b187c4fcd047f..1f16b72742b27666e4d19100b60d9eced53233a2 100644
--- a/ros3rag.placeB/build.gradle
+++ b/ros3rag.placeB/build.gradle
@@ -17,7 +17,6 @@ task simpleRun(type: JavaExec) {
     group 'application'
     classpath sourceSets.main.runtimeClasspath
     main = "de.tudresden.inf.st.placeB.SimpleMainB"
-
 }
 
 dependencies {
diff --git a/ros3rag.placeB/src/main/jastadd/WorldModelB.connect b/ros3rag.placeB/src/main/jastadd/WorldModelB.connect
index f77374792f0d58550ceb3515913b5a5a6f802752..3da080fb1a8643e37b1244231e7a5e92ca29d257 100644
--- a/ros3rag.placeB/src/main/jastadd/WorldModelB.connect
+++ b/ros3rag.placeB/src/main/jastadd/WorldModelB.connect
@@ -7,5 +7,9 @@ receive tree Robot.CanReachObjectOfInterestWrapper using ParseReachability, Conv
 send tree WorldModelB.NextOperation using PrintOperation ;
 
 PrintOperation maps Operation op to byte[] {:
-  return op.toMergedSelection().toByteArray();
+  var result = op.toMergedSelection();
+  if (result == null) {
+    reject();
+  }
+  return result.toByteArray();
 :}
diff --git a/ros3rag.placeB/src/main/jastadd/WorldModelB.jadd b/ros3rag.placeB/src/main/jastadd/WorldModelB.jadd
index 047ade07f567ab5e163fb7f04bace5daad17057b..0a63106de789c89b84ed8b808322c620287f67ae 100644
--- a/ros3rag.placeB/src/main/jastadd/WorldModelB.jadd
+++ b/ros3rag.placeB/src/main/jastadd/WorldModelB.jadd
@@ -1,4 +1,5 @@
 aspect Computation {
+  syn nta LogicalDropOffLocation WorldModelB.unspecifiedLocation() = new LogicalDropOffLocation().setName("<unspecified>");
   syn nta JastAddList<Difference> WorldModelB.diffScenes() {
     var result = new JastAddList<Difference>();
     if (!hasMyScene() || !hasOtherScene()) {
@@ -15,18 +16,29 @@ aspect Computation {
       LogicalMovableObject myObject = myGenericObject.asLogicalMovableObject();
       if (myObject == null) {
         // new object, currently not handled
-        result.add(new DifferenceNewObject());
+        var diff = new DifferenceNewObject();
+        diff.setObject(otherObject);
+        result.add(diff);
         continue;
       }
-      if (!myObject.getLocatedAt().getName().equals(otherObject.getLocatedAt().getName())) {
-        // object at different locations
-        var difference = new DifferenceObjectAtWrongPlace();
-        difference.setObject(myObject);
-        difference.setPreviousLocation(myObject.getLocatedAt());
-        difference.setNewLocation(otherObject.getLocatedAt());
-        result.add(difference);
+      if (myObject.hasLocatedAt()) {
+        if (!otherObject.hasLocatedAt()) {
+          var diff = new DifferenceObjectMisplaced();
+          diff.setObject(myObject);
+          diff.setPreviousLocation(myObject.getLocatedAt());
+          result.add(diff);
+          continue;
+        }
+        if (!myObject.getLocatedAt().getName().equals(otherObject.getLocatedAt().getName())) {
+          // object at different locations
+          var difference = new DifferenceObjectAtWrongPlace();
+          difference.setObject(myObject);
+          difference.setPreviousLocation(myObject.getLocatedAt());
+          difference.setNewLocation(otherObject.getLocatedAt());
+          result.add(difference);
+        }
       }
-      // other difference not handled yet, e.g. object deleted
+      // other difference not handled yet, e.g. object deleted, or objects having no locations
     }
     return result;
   }
@@ -93,6 +105,10 @@ aspect Computation {
     // FIXME. stub, may be implemented later
     return Collections.emptyList();
   }
+  eq DifferenceObjectMisplaced.computeOperations() {
+    // FIXME. stub, may be implemented later
+    return Collections.emptyList();
+  }
 
   private static Operation DifferenceObjectAtWrongPlace.createPickAndPlace(Robot robot, LogicalMovableObject obj, LogicalDropOffLocation target) {
     var result = new PickAndPlace();
@@ -131,7 +147,8 @@ aspect Computation {
 aspect AttributeMappings {
   syn de.tudresden.inf.st.ceti.MergedSelection Operation.toMergedSelection();
   eq ErrorOperation.toMergedSelection() {
-    throw new RuntimeException(getErrorMessage());
+    System.err.println(getErrorMessage());
+    return null;
   }
   eq Pick.toMergedSelection() {
     throw new RuntimeException("Separate Pick operation not supported yet!");
@@ -157,15 +174,26 @@ aspect GlueForShared {
 }
 
 aspect Printing {
-  syn String Robot.toString() = "~Robot " + getName() + "~";
+  syn String Robot.prettyPrint() = "~Robot " + getName() + "~";
 
-  syn String DifferenceObjectAtWrongPlace.toString() {
-    return "+DifferenceObjectAtWrongPlace of " + getObject() + ": " + getPreviousLocation() + " -> " + getNewLocation() + "+";
+  syn String Difference.prettyPrint();
+  eq DifferenceObjectAtWrongPlace.prettyPrint() {
+    return "+DifferenceObjectAtWrongPlace of " + getObject().prettyPrint() + ": " + getPreviousLocation().prettyPrint() + " -> " + getNewLocation().prettyPrint() + "+";
+  }
+  eq DifferenceNewObject.prettyPrint() {
+    return "+DifferenceNewObject of " + getObject().prettyPrint() + "+";
   }
-  syn String PickAndPlace.toString() {
-    return "+PickAndPlace by " + getRobotToExecute() + " of " + getObjectToPick() + " -> " + getTargetLocation() + "+";
+  eq DifferenceObjectMisplaced.prettyPrint() {
+    return "+DifferenceObjectMisplaced of " + getObject().prettyPrint() + ": " + getPreviousLocation().prettyPrint() + "+";
+  }
+
+  syn String Operation.prettyPrint();
+  eq PickAndPlace.prettyPrint() {
+    return "+PickAndPlace by " + getRobotToExecute().prettyPrint() + " of " + getObjectToPick().prettyPrint() + " -> " + getTargetLocation().prettyPrint() + "+";
   }
-  syn String ErrorOperation.toString() {
+  eq Pick.prettyPrint() = "+Pick not implemented+";
+  eq Place.prettyPrint() = "+Place not implemented+";
+  eq ErrorOperation.prettyPrint() {
     return "+Error: " + getErrorMessage() + "+";
   }
 }
diff --git a/ros3rag.placeB/src/main/jastadd/WorldModelB.relast b/ros3rag.placeB/src/main/jastadd/WorldModelB.relast
index 6955828c67b6111c63c6d310571b6360a18d3ba2..dbb21249db70b8a3a05ded34b61b5d0cb94a06b6 100644
--- a/ros3rag.placeB/src/main/jastadd/WorldModelB.relast
+++ b/ros3rag.placeB/src/main/jastadd/WorldModelB.relast
@@ -3,11 +3,13 @@ WorldModelB ::= Robot* [MyScene:Scene] [OtherScene:LogicalScene] /NextOperation:
 Robot ::= <Name:String> CanReachObjectOfInterestWrapper ;
 
 abstract Difference ;
+rel Difference.Object -> LogicalMovableObject ;
 DifferenceObjectAtWrongPlace : Difference ;
-rel DifferenceObjectAtWrongPlace.Object -> LogicalMovableObject ;
 rel DifferenceObjectAtWrongPlace.PreviousLocation -> LogicalDropOffLocation ;
 rel DifferenceObjectAtWrongPlace.NewLocation -> LogicalDropOffLocation ;
 DifferenceNewObject : Difference ;
+DifferenceObjectMisplaced : Difference ;
+rel DifferenceObjectMisplaced.PreviousLocation -> LogicalDropOffLocation ;
 
 abstract Operation ;
 rel Operation.RobotToExecute? -> Robot ;
diff --git a/ros3rag.placeB/src/main/java/de/tudresden/inf/st/placeB/MainB.java b/ros3rag.placeB/src/main/java/de/tudresden/inf/st/placeB/MainB.java
index 03c3b07382239c72dc27368404abaecc017df30c..f41e113a0cc5102bd0b91b351aec4a54aa2fc119 100644
--- a/ros3rag.placeB/src/main/java/de/tudresden/inf/st/placeB/MainB.java
+++ b/ros3rag.placeB/src/main/java/de/tudresden/inf/st/placeB/MainB.java
@@ -7,7 +7,6 @@ import de.tudresden.inf.st.ros3rag.common.Util;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import java.io.File;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -23,7 +22,7 @@ import static de.tudresden.inf.st.ros3rag.common.Util.readScene;
  * @author rschoene - Initial contribution
  */
 public class MainB {
-  private static final Logger logger = LogManager.getLogger(SimpleMainB.class);
+  private static final Logger logger = LogManager.getLogger(MainB.class);
 
   private final static String TOPIC_MODEL = "place-b/model";
   private final static String TOPIC_STATUS = "place-b/status";
@@ -35,7 +34,7 @@ public class MainB {
 
   private final static String TOPIC_OTHER_SCENE_UPDATE_FROM_PLACE_A = "place-a/logical/update";
 
-  private final static String TOPIC_DEMO_MOVE_objectRed1_RED = "place-a/demo/move/objectRed1/red";
+  private final static String TOPIC_DEMO_MOVE_objectRed1_RED = "place-b/demo/move/objectRed1/red";
 
   private MqttHandler mainHandler;
   private WorldModelB model;
@@ -60,13 +59,9 @@ public class MainB {
     mainHandler.newConnection(TOPIC_EXIT, bytes -> exitCondition.countDown());
     mainHandler.newConnection(TOPIC_MODEL, bytes -> logStatus(new String(bytes)));
 
-    mainHandler.newConnection(TOPIC_DEMO_MOVE_objectRed1_RED, bytes -> {
-      ObjectOfInterest obj = model.getMyScene().resolveObjectOfInterest("objectRed1");
-      if (obj != null) {
-        // move objectRed1 to binRed
-        obj.setPosition(Position.of(0.06f, 0.49f, 0.8325f));
-      }
-    });
+    mainHandler.newConnection(TOPIC_DEMO_MOVE_objectRed1_RED, bytes ->
+        UtilB.updatePositionOfObjectToLocation(model.getMyScene(), "objectRed1", "binRed")
+    );
 
     /// Reading scene and robots
     de.tudresden.inf.st.ceti.Scene scene = readScene(
diff --git a/ros3rag.placeB/src/main/java/de/tudresden/inf/st/placeB/SimpleMainB.java b/ros3rag.placeB/src/main/java/de/tudresden/inf/st/placeB/SimpleMainB.java
index 20b29d23ca5e2cb583a4e6ae15616304d26507c4..9e55144a3e662ba84e7eb7805cfdf0ac5facca01 100644
--- a/ros3rag.placeB/src/main/java/de/tudresden/inf/st/placeB/SimpleMainB.java
+++ b/ros3rag.placeB/src/main/java/de/tudresden/inf/st/placeB/SimpleMainB.java
@@ -3,6 +3,7 @@ package de.tudresden.inf.st.placeB;
 import com.google.protobuf.util.JsonFormat;
 import de.tudresden.inf.st.ceti.Reachability;
 import de.tudresden.inf.st.placeB.ast.*;
+import de.tudresden.inf.st.ros3rag.common.Configuration;
 import de.tudresden.inf.st.ros3rag.common.Util;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -12,6 +13,9 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.concurrent.TimeUnit;
+
+import static de.tudresden.inf.st.ros3rag.common.Util.mqttUri;
 
 /**
  * Testing features for placeB.
@@ -30,7 +34,56 @@ public class SimpleMainB {
   private void run(String[] args) throws Exception {
 //    testBuildModelB();
 //    testReceivingModelB();
-    testReachability();
+//    testReachability();
+    testWeirdBehaviour();
+  }
+
+  private void testWeirdBehaviour() throws IOException {
+    WorldModelB model = new WorldModelB();
+    Scene scene = new Scene();
+
+    MovableObject obj1 = new MovableObject();
+    obj1.setPosition(Position.of(1, 1, 1));
+    obj1.setOrientation(Orientation.of(0, 0, 0, 0));
+    obj1.setSize(Size.of(1, 1, 1));
+    scene.addMovableObject(obj1);
+
+    DropOffLocation loc = new DropOffLocation();
+    loc.setPosition(Position.of(1, 1, 1));
+    loc.setOrientation(Orientation.of(0, 0, 0, 0));
+    loc.setSize(Size.of(1, 1, 1));
+    scene.addDropOffLocation(loc);
+
+    model.setMyScene(scene);
+
+    Configuration config = new Configuration();
+    config.mqttHost = "localhost";
+    /// Setup model connection
+    model.ragconnectCheckIncremental();
+    model.ragconnectSetupMqttWaitUntilReady(2, TimeUnit.SECONDS);
+
+    /// Connect endpoints
+    model.connectMyScene(mqttUri("TOPIC_MY_SCENE_UPDATE_FROM_ROS", config));
+    model.connectOtherScene(mqttUri("TOPIC_OTHER_SCENE_UPDATE_FROM_PLACE_A", config));
+    model.connectNextOperation(mqttUri("TOPIC_COMMANDS", config), false);
+
+    System.out.println("before");
+    System.out.println(scene.prettyPrint());
+
+    obj1.dumpDependencies();
+
+    Position evilPosition = Position.of(99, 99, 99);
+    obj1.setPosition(evilPosition);
+
+    System.out.println("after");
+    obj1.dumpDependencies();
+
+    System.out.println(scene.prettyPrint());
+    System.out.println(scene.prettyPrint());
+
+    obj1.dumpDependencies();
+
+    model.ragconnectCloseConnections();
   }
 
   private void testReachability() throws Exception {
diff --git a/ros3rag.placeB/src/main/java/de/tudresden/inf/st/placeB/UtilB.java b/ros3rag.placeB/src/main/java/de/tudresden/inf/st/placeB/UtilB.java
index d8fda0b01a1ccc92f57fabcc56ea6ecd9bcc80fa..b837ab3c1a4572d2a7a88ee249e73fc71049498a 100644
--- a/ros3rag.placeB/src/main/java/de/tudresden/inf/st/placeB/UtilB.java
+++ b/ros3rag.placeB/src/main/java/de/tudresden/inf/st/placeB/UtilB.java
@@ -1,7 +1,6 @@
 package de.tudresden.inf.st.placeB;
 
 import com.google.protobuf.util.JsonFormat;
-import de.tudresden.inf.st.ceti.Object;
 import de.tudresden.inf.st.ceti.Reachability;
 import de.tudresden.inf.st.placeB.ast.*;
 import de.tudresden.inf.st.ros3rag.common.Util;
@@ -9,12 +8,8 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 import java.io.IOException;
-import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.List;
 
 /**
  * Static utility methods used only for place B.
@@ -47,6 +42,40 @@ public class UtilB {
     return result;
   }
 
+  static void updatePositionOfObjectToLocation(Scene scene, String objName, String locationName) {
+    ObjectOfInterest obj = scene.resolveObjectOfInterest(objName);
+    ObjectOfInterest location = scene.resolveObjectOfInterest(locationName);
+    if (obj != null && location != null) {
+      // move objectRed1 to binBlue
+      logger.info("Got " + obj + " and location " + location);
+      logger.debug("before to {} at {}\n{}", locationName, location.getPosition(),
+          scene.prettyPrint());
+      logger.debug("X={}, pos.prettyPrint={}, obj.prettyPrint={}",
+          obj.getPosition().getX(),
+          obj.getPosition().prettyPrint(),
+          ((MovableObject) obj).prettyPrint());
+
+      obj.dumpDependencies();
+
+      obj.setPosition(Position.of(location.getPosition().getX(),
+          location.getPosition().getY(),
+          location.getPosition().getZ()));
+
+      logger.debug("after");
+      obj.dumpDependencies();
+
+      logger.debug(scene.prettyPrint());
+      logger.debug("X={}, pos.prettyPrint={}, obj.prettyPrint={}",
+          obj.getPosition().getX(),
+          obj.getPosition().prettyPrint(),
+          ((MovableObject) obj).prettyPrint());
+
+      obj.dumpDependencies();
+    } else {
+      logger.error("Obj (" + obj + ") or location (" + location + ") are null");
+    }
+  }
+
   private static String resolveObjName(WorldModelB model, String objName) {
     if (!model.hasMyScene()) {
       return "\"" + objName + "\"";
@@ -92,9 +121,9 @@ public class UtilB {
     } else {
       sb.append(" (unset)\n");
     }
-    sb.append("Diff: ").append(model.diffScenes().prettyPrint()).append("\n");
-    sb.append("Operations: ").append(model.diffToOperations().prettyPrint()).append("\n");
-    sb.append("Next operation: ").append(model.getNextOperation()).append("\n");
+    sb.append("Diff: ").append(model.diffScenes().prettyPrint(Difference::prettyPrint)).append("\n");
+    sb.append("Operations: ").append(model.diffToOperations().prettyPrint(Operation::prettyPrint)).append("\n");
+    sb.append("Next operation: ").append(model.getNextOperation().prettyPrint()).append("\n");
     return sb.toString();
   }