diff --git a/eraser-base/src/main/jastadd/Group.jrag b/eraser-base/src/main/jastadd/Group.jrag
deleted file mode 100644
index 2c973535da71974718c84cef24eb436ea7b6a280..0000000000000000000000000000000000000000
--- a/eraser-base/src/main/jastadd/Group.jrag
+++ /dev/null
@@ -1,5 +0,0 @@
-aspect Group {
-    eq Group.getItem().getEnclosingGroup() = this;
-    eq Group.getGroup().getEnclosingGroup() = this;
-    eq SmartHomeEntityModel.getGroup().getEnclosingGroup() = null;
-}
\ No newline at end of file
diff --git a/eraser-base/src/main/jastadd/Item.jrag b/eraser-base/src/main/jastadd/Item.jrag
index 0ded5474bca071a4ba360e2491b8c633ba91df11..0ff309b6723e9c7ddfd15e7442cbaf25403ca417 100644
--- a/eraser-base/src/main/jastadd/Item.jrag
+++ b/eraser-base/src/main/jastadd/Item.jrag
@@ -21,7 +21,7 @@ aspect ItemHandling {
   eq ItemWithDoubleState.getStateAsString() = Double.toString(getState());
   eq ItemWithStringState.getStateAsString() = getState();
 
-  syn StateData Item.getStateData() = new StateData();
+  syn LastChanged Item.getLastChanged() = new LastChanged();
 
   //--- getStateAsDouble ---
   syn double Item.getStateAsDouble();
@@ -305,8 +305,8 @@ aspect ItemHandling {
         logger.catching(e);
       }
     }
-    if (this.getStateData().checkStateProcessingTime(relevantItemPerformance())) {
-      this.getStateData().afterStateChangeProcessed();
+    if (this.getLastChanged().checkStateProcessingTime(relevantItemPerformance())) {
+      this.getLastChanged().afterStateChangeProcessed();
       getItemObserver().apply();
     }
   }
diff --git a/eraser-base/src/main/jastadd/StateData.jrag b/eraser-base/src/main/jastadd/LastChanged.jrag
similarity index 55%
rename from eraser-base/src/main/jastadd/StateData.jrag
rename to eraser-base/src/main/jastadd/LastChanged.jrag
index e7d32a8af08a2edb9a4cfa29c2136aac19ff58fe..1650747439d0e15cc8a8d52d1db27437d802c2fd 100644
--- a/eraser-base/src/main/jastadd/StateData.jrag
+++ b/eraser-base/src/main/jastadd/LastChanged.jrag
@@ -1,14 +1,14 @@
-aspect StateData {
-    public void StateData.afterStateChangeProcessed() {
-        this.setLastChangeDate(Instant.now());
+aspect LastChanged {
+    public void LastChanged.afterStateChangeProcessed() {
+        this.setValue(Instant.now());
     }
 
-    public boolean StateData.checkStateProcessingTime(ItemPerformance itemPerformance) {
+    public boolean LastChanged.checkStateProcessingTime(ItemPerformance itemPerformance) {
         if (itemPerformance==null) {
             return true;
         }
         double frequency = itemPerformance.getEventProcessingFrequency();
-        Instant lastStateChange = this.getLastChangeDate();
+        Instant lastStateChange = this.getValue();
         if (lastStateChange==null) {
             return true;
         }
diff --git a/eraser-base/src/main/jastadd/Navigation.jrag b/eraser-base/src/main/jastadd/Navigation.jrag
index 42fd1bf89ed8a972d68af4ab1e7ac1b5c956ef56..d12dc50b01de4ffec0b76dbf28a9f25d937896dd 100644
--- a/eraser-base/src/main/jastadd/Navigation.jrag
+++ b/eraser-base/src/main/jastadd/Navigation.jrag
@@ -11,6 +11,10 @@ aspect Navigation {
     return result;
   }
 
+  eq Group.getItem().enclosingGroup() = this;
+  eq Group.getGroup().enclosingGroup() = this;
+  eq SmartHomeEntityModel.getGroup().enclosingGroup() = null;
+
   inh ItemPerformance Item.relevantItemPerformance();
   inh ItemPerformance Group.relevantItemPerformance();
   eq Group.getItem(int index).relevantItemPerformance() {
@@ -24,7 +28,7 @@ aspect Navigation {
       return this.getItemPerformance();
     }
     // recursively use enclosing group and use value from there, if any
-    Group parent = getEnclosingGroup();
+    Group parent = enclosingGroup();
     if (parent != null) {
       return parent.relevantItemPerformance();
     }
@@ -32,8 +36,8 @@ aspect Navigation {
     return null;
   }
 
-  inh Group Group.getEnclosingGroup();
-  inh Group Item.getEnclosingGroup();
+  inh Group Group.enclosingGroup();
+  inh Group Item.enclosingGroup();
 
   private void SmartHomeEntityModel.addItems(java.util.List<Item> result, JastAddList<Group> groups) {
     groups.forEach(group -> group.getItemList().forEach(item -> result.add(item)));
diff --git a/eraser-base/src/main/jastadd/shem.relast b/eraser-base/src/main/jastadd/shem.relast
index 250c5714daf2a79e6846b7f51bb8a4dfb662f332..0361ff590dcfe06193665503a71ffde82c307c1d 100644
--- a/eraser-base/src/main/jastadd/shem.relast
+++ b/eraser-base/src/main/jastadd/shem.relast
@@ -26,7 +26,7 @@ rel Channel.LinkedItem* <-> Item.Channel? ;
 Parameter : DescribableModelElement ::= <Type:ParameterValueType> [DefaultValue:ParameterDefaultValue] <Context:String> <Required:boolean> ;
 ParameterDefaultValue ::= <Value:String> ;
 
-abstract Item : LabelledModelElement ::= <_fetched_data:boolean> MetaData:ItemMetaData* /ItemObserver/ /StateData/;
+abstract Item : LabelledModelElement ::= <_fetched_data:boolean> MetaData:ItemMetaData* /ItemObserver/ /LastChanged/;
 rel Item.Category? -> ItemCategory ;
 rel Item.ItemPerformance? -> ItemPerformance ;
 
@@ -51,7 +51,7 @@ ItemMetaData ::= <Key:String> <Value:String> ;
 
 ItemCategory ::= <Name:String> ;
 
-StateData ::= <LastChangeDate:Instant> ;
+LastChanged ::= <Value:Instant> ;
 
 
 Group : LabelledModelElement ::= Group* Item* [AggregationFunction:GroupAggregationFunction] ;
diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/parser/EraserParserHelper.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/parser/EraserParserHelper.java
index f5eeee1dac81c08d7f4bd4f7e686ca098b4726b2..372cdb969f601f8940518efc5f6042046ee1433c 100644
--- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/parser/EraserParserHelper.java
+++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/parser/EraserParserHelper.java
@@ -35,7 +35,7 @@ public class EraserParserHelper {
 
   private Map<Thing, Iterable<String>> missingChannelListMap = new HashMap<>();
   private Map<Channel, Iterable<String>> missingItemLinkListMap = new HashMap<>();
-  private Map<Item, Iterable<String>> missingControllingListMap = new HashMap<>();
+
   private Map<Group, Iterable<String>> missingSubGroupListMap = new HashMap<>();
   private Map<Group, Iterable<String>> missingItemListMap = new HashMap<>();
   private Map<ThingType, Iterable<String>> missingChannelTypeListMap = new HashMap<>();
@@ -98,7 +98,7 @@ public class EraserParserHelper {
     resolveList(itemMap, missingItemListMap, this::addItemToGroup);
     resolveList(channelTypeMap, missingChannelTypeListMap, ThingType::addChannelType);
     resolveList(parameterMap, missingParameterListMap, ThingType::addParameter);
-    resolveList(itemMap, missingControllingListMap, Item::addControlling);
+
 
     createUnknownGroupIfNecessary();
     createChannelCategories();
@@ -109,6 +109,7 @@ public class EraserParserHelper {
     }
 
     this.root.treeResolveAll();
+    this.root.doFullTraversal();
   }
 
   private void addItemToGroup(Group group, Item item) {
@@ -321,7 +322,6 @@ public class EraserParserHelper {
     }
 
     moveMissingForRetype(itemWithCorrectType, prototype, missingTopicMap);
-    moveMissingForRetype(itemWithCorrectType, prototype, missingControllingListMap);
     moveMissingForRetype(itemWithCorrectType, prototype, missingItemCategoryMap);
 
     itemMap.put(prototype.getID(), itemWithCorrectType);