diff --git a/trainbenchmark-tool-jastadd-base/libs/jastadd2.jar b/trainbenchmark-tool-jastadd-base/libs/jastadd2.jar
index fc22eaaf211d9e6f1e912a7f23303c2ced7c0a87..586cb20c7d1d5a80ca2b62878a93e7db31bffee5 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 d7056b768b2deea400f5fab201c5b84a4f58b2e5..8843e2009fdb754a8847529e0c732db3d4343943 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
@@ -214,29 +216,25 @@ aspect TreeNavigation {
     return getTarget().asSwitch();
   }
 
-  syn Collection<Sensor> TrackElement.monitoringSensors() {
-    return getRoot().monitoringSensorsMap().get(this.id());
-  }
+  coll ArrayList<Sensor> TrackElement.monitoringSensors() [new ArrayList()] with add;
 
-  syn Map<Integer,Set<Sensor>> RailwayContainer.monitoringSensorsMap() {
-    Map<Integer,Set<Sensor>> sensorMap = new java.util.HashMap<Integer,Set<Sensor>>();
+  Sensor contributes this
+    to TrackElement.monitoringSensors()
+    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.monitoringSensors();
 
-    // update the values
-    for (Sensor sensor : sensors()) {
-      for (Ref teRef : sensor.getMonitoredElementList()) {
-        sensorMap.get(teRef.getValue()).add(sensor);
-      }
-    }
+  Region contributes {
+    // Explicitly traverses sensors, skips elements.
+    getSensorList().collectContributions();
+  } to TrackElement.monitoringSensors();
 
-    return sensorMap;
-  }
+  Sensor contributes {
+    // Stop at sensor, only contains refs.
+  } to TrackElement.monitoringSensors();
 
   syn Collection<Route> Sensor.requiringRoutes() {
     return getRoot().requiringRoutesMap().get(this.id());