diff --git a/cloc/.clocignore b/cloc/.clocignore
new file mode 100644
index 0000000000000000000000000000000000000000..cca2aefc7a03f3e3a09ae1eed7a10bd582781262
--- /dev/null
+++ b/cloc/.clocignore
@@ -0,0 +1,7 @@
+../ros3rag.common/src/main/java/de/tudresden/inf/st/ros3rag/common/ConfigurationScaling.java
+../ros3rag.placeA/src/main/java/de/tudresden/inf/st/placeA/SimpleMainA.java
+../ros3rag.placeA/src/gen/workaround/merged.connect
+../ros3rag.placeA/src/gen/workaround/merged.relast
+../ros3rag.placeB/src/main/java/de/tudresden/inf/st/placeB/SimpleMainB.java
+../ros3rag.placeB/src/gen/workaround/merged.connect
+../ros3rag.placeB/src/gen/workaround/merged.relast
diff --git a/cloc/.gitignore b/cloc/.gitignore
index 94a635291ffb675001e680c7785f8ba6f2a3e4b0..99a072bc7252a0f5e35890837e4d5d0d0def435a 100644
--- a/cloc/.gitignore
+++ b/cloc/.gitignore
@@ -6,3 +6,4 @@ trainbenchmark.file
 trainbenchmark.lang
 cats.txt
 ignored.txt
+!.clocignore
diff --git a/cloc/run-diff-to-old.py b/cloc/run-diff-to-old.py
new file mode 100755
index 0000000000000000000000000000000000000000..495d19dd9650917dae4eefaf5adf2a638d3e29bb
--- /dev/null
+++ b/cloc/run-diff-to-old.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python3
+import difflib
+import sys
+import os
+
+
+filesA = [
+    ('WorldModelA.connect', 'OldWorldModelA.connect'),
+    ('WorldModelA.jadd', 'OldWorldModelA.jadd'),
+    ('WorldModelA.relast', 'OldWorldModelA.relast'),
+]
+currentDirA = 'ros3rag.placeA/src/main/jastadd'
+oldDirA = 'ros3rag.old.a/src/main/jastadd'
+
+filesB = [
+    ('RobotReachabilityToBFS.jrag', 'OldRobotReachabilityToBFS.jrag'),
+    ('RobotReachabilityToBFS.relast', 'OldRobotReachabilityToBFS.relast'),
+    ('WorldModelB.connect', 'OldWorldModelB.connect'),
+    ('WorldModelB.jadd', 'OldWorldModelB.jadd'),
+    ('WorldModelB.relast', 'OldWorldModelB.relast'),
+]
+currentDirB = 'ros3rag.placeB/src/main/jastadd'
+oldDirB = 'ros3rag.old.b/src/main/jastadd'
+
+filesShared = [
+    ('types.connect', 'types.connect'),
+    ('types.jadd', 'types.jadd'),
+    ('types.relast', 'types.relast')
+]
+currentDirShared = 'ros3rag.common/src/main/resources/jastadd'
+oldDirShared = 'ros3rag.common/src/main/resources/old-jastadd'
+
+comparing = [
+    (currentDirA, oldDirA, filesA),
+    (currentDirB, oldDirB, filesB),
+    (currentDirShared, oldDirShared, filesShared),
+]
+
+
+def main():
+    total_changed = 0
+    seen = set()
+
+    for currentDir, oldDir, files in comparing:
+        print(currentDir, oldDir)
+        for currentFilename, oldFilename in files:
+            print(' ', currentFilename, oldFilename, end=': ')
+            with open(os.path.join('..', currentDir, currentFilename)) as fdr:
+                a = fdr.readlines()
+            with open(os.path.join('..', oldDir, oldFilename)) as fdr:
+                b = fdr.readlines()
+            diff = difflib.unified_diff(a, b, lineterm='')
+            changed_lines = [line for index, line in enumerate(diff) if index > 2 and line.startswith('+')]
+            changed = len(changed_lines)
+            print(changed)
+
+            # put changed_lines into a file for later cloc call
+            merged_filename = 'merged.' + currentFilename.rsplit('.', 2)[1]
+            is_new_file = not merged_filename in seen
+            print(f'>>{merged_filename} {is_new_file}')
+            with open(merged_filename, 'w' if is_new_file else 'a') as fdr:
+                fdr.writelines(changed_lines)
+            seen.add(merged_filename)
+
+            total_changed += changed
+
+    print(f'total: {total_changed}')
+    os.system(f'cloc-ag merged.*')
+
+
+if __name__ == '__main__':
+    main()
diff --git a/ros3rag.common/src/main/resources/jastadd/types.relast b/ros3rag.common/src/main/resources/jastadd/types.relast
index c5585b92ce2e51aa1930e25d63cbe1bc114764e7..267010328bdd5a235a6d48ec0e0c4cf7377a3086 100644
--- a/ros3rag.common/src/main/resources/jastadd/types.relast
+++ b/ros3rag.common/src/main/resources/jastadd/types.relast
@@ -5,14 +5,14 @@ Orientation ::= <X:double> <Y:double> <Z:double> <W:double> ;
 // Regions cannot be contained in scene, but must be retrieved via attribute
 Scene ::= DropOffLocation* MovableObject* RobotObject* /LogicalScene/ ;
 
-ObjectOfInterest ::= <Name:String> Position Size Orientation ;
+abstract ObjectOfInterest ::= <Name:String> Position Size Orientation ;
 
 DropOffLocation : ObjectOfInterest ;
 MovableObject : ObjectOfInterest ;
 RobotObject : ObjectOfInterest ::= <State:de.tudresden.inf.st.ceti.Object.State> ;
 
 LogicalScene ::= LogicalRegion* LogicalMovableObject* ;
-LogicalObjectOfInterest ::= <Name:String> ;
+abstract LogicalObjectOfInterest ::= <Name:String> ;
 LogicalRegion : LogicalObjectOfInterest ;
 LogicalMovableObject : LogicalObjectOfInterest ::= <NameOfMyLocation> ;
 rel LogicalRegion.ContainedObject* <-> LogicalMovableObject.LocatedAt* ;
diff --git a/ros3rag.placeA/src/main/resources/config-a-placeworld.yaml b/ros3rag.placeA/src/main/resources/config-a-placeworld.yaml
index a9f039b27a6ff0e890fca5e5b595f6aa171c3053..32c3502e03b077ca3548d705ede80b8052bcc691 100644
--- a/ros3rag.placeA/src/main/resources/config-a-placeworld.yaml
+++ b/ros3rag.placeA/src/main/resources/config-a-placeworld.yaml
@@ -1,5 +1,5 @@
-mqttHost: "192.168.0.122"
-#mqttHost: "localhost"
+#mqttHost: "192.168.0.122"
+mqttHost: "localhost"
 filenameRegions: "src/main/resources/regions-a-placeworld.json"
 forA:
   filenameInitialScene: "src/main/resources/config-scene-a-placeworld.json"
diff --git a/ros3rag.placeB/src/main/resources/config-b-placeworld.yaml b/ros3rag.placeB/src/main/resources/config-b-placeworld.yaml
index 8045cd0feee0a59d265b557caefcbcd6436a1fde..dd86c6e9a13e2fa6eab3ec51969cd411f2af0127 100644
--- a/ros3rag.placeB/src/main/resources/config-b-placeworld.yaml
+++ b/ros3rag.placeB/src/main/resources/config-b-placeworld.yaml
@@ -1,5 +1,5 @@
-mqttHost: "192.168.0.122"
-#mqttHost: "localhost"
+#mqttHost: "192.168.0.122"
+mqttHost: "localhost"
 filenameRegions: "src/main/resources/regions-b-placeworld.json"
 forB:
   topicsSceneUpdate: