diff --git a/trainbenchmark-tool-jastadd-base/libs/jastadd2.jar b/trainbenchmark-tool-jastadd-base/libs/jastadd2.jar
index fc22eaaf211d9e6f1e912a7f23303c2ced7c0a87..798daf04d03aa19cc356290eb7259bc51945a4e6 100644
Binary files a/trainbenchmark-tool-jastadd-base/libs/jastadd2.jar and b/trainbenchmark-tool-jastadd-base/libs/jastadd2.jar differ
diff --git a/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/TreeNavigation.jrag b/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/TreeNavigation.jrag
index 98f2240d55a8d0ec2714149151e02ca6930a653c..6cb544888869d39635447756027d24020ba28bda 100644
--- a/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/TreeNavigation.jrag
+++ b/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/TreeNavigation.jrag
@@ -1,3 +1,5 @@
+import java.util.HashSet;
+
 aspect TreeNavigation {
 
   // collections of things
@@ -215,29 +217,25 @@ aspect TreeNavigation {
     return getTarget().getSwitch();
   }
 
-  syn Collection<Sensor> TrackElement.monitoredBy() {
-    return getRoot().monitoredByMap().get(this.id());
-  }
+  coll ArrayList<Sensor> TrackElement.monitoredBy() [new ArrayList()] with add;
 
-  syn Map<Integer,Set<Sensor>> RailwayContainer.monitoredByMap() {
-    Map<Integer,Set<Sensor>> sensorMap = new java.util.HashMap<>();
+  Sensor contributes this
+    to TrackElement.monitoredBy()
+    for each monitoredElements();
 
-    // fill the keys
-    for (Region region: getRegionList()) {
-      for (TrackElement trackElement: region.getTrackElementList()) {
-        sensorMap.put(trackElement.id(), new java.util.HashSet<>());
-      }
-    }
+  RailwayContainer contributes {
+    // Explicitly traverses regions, skips routes.
+    getRegionList().collectContributions();
+  } to TrackElement.monitoredBy();
 
-    // update the values
-    for (Sensor sensor : sensors()) {
-      for (TrackElementRef trackElementRef : sensor.getMonitoredElementList()) {
-        sensorMap.get(trackElementRef.getValue()).add(sensor);
-      }
-    }
+  Region contributes {
+    // Explicitly traverses sensors, skips elements.
+    getSensorList().collectContributions();
+  } to TrackElement.monitoredBy();
 
-    return sensorMap;
-  }
+  Sensor contributes {
+    // Stop at sensor, only contains refs.
+  } to TrackElement.monitoredBy();
 
   syn Collection<Route> Sensor.requiringRoutes() {
     return getRoot().requiringRoutesMap().get(this.id());