diff --git a/eraser-base/src/main/jastadd/MachineLearning.jrag b/eraser-base/src/main/jastadd/MachineLearning.jrag
index e584d8f2f6b9f1b2b0ce140a46c005b32887e1dd..26dd3fbb319a535fcc9b5350a944754c104159c9 100644
--- a/eraser-base/src/main/jastadd/MachineLearning.jrag
+++ b/eraser-base/src/main/jastadd/MachineLearning.jrag
@@ -22,7 +22,7 @@ aspect MachineLearning {
 
   //--- currentActivity ---
   syn java.util.Optional<Activity> Root.currentActivity() {
-    return resolveActivity((int) getOpenHAB2Model().getActivityItem().getState());
+    return resolveActivity((int) getSmartHomeEntityModel().getActivityItem().getState());
   }
   private int Root.extractActivityIdentifier(List<ItemPreference> preferences) {
     if (preferences.isEmpty()) {
@@ -72,7 +72,7 @@ aspect MachineLearning {
   public void DummyMachineLearningModel.connectItems(List<String> itemNames) {
     logger.info("Storing items to connect");
     for (String itemName : itemNames) {
-      JavaUtils.ifPresentOrElse(getRoot().getOpenHAB2Model().resolveItem(itemName),
+      JavaUtils.ifPresentOrElse(getRoot().getSmartHomeEntityModel().resolveItem(itemName),
           this::addItem,
           () -> logger.warn("Could not resolve item '{}'", itemName));
     }
diff --git a/eraser-base/src/main/jastadd/ModelStatistics.jrag b/eraser-base/src/main/jastadd/ModelStatistics.jrag
index 443635f1e2f3ceb71785e5977d43ba27f55c2b6c..9ed07bd1947dd5c83792f7371d2c209e88ea3329 100644
--- a/eraser-base/src/main/jastadd/ModelStatistics.jrag
+++ b/eraser-base/src/main/jastadd/ModelStatistics.jrag
@@ -1,7 +1,7 @@
 aspect ModelStatistics {
 
   //--- numChannels ---
-  syn int OpenHAB2Model.numChannels() {
+  syn int SmartHomeEntityModel.numChannels() {
     int sum = 0;
     for (Thing thing : getThingList()) {
       sum += thing.getNumChannel();
@@ -10,7 +10,7 @@ aspect ModelStatistics {
   }
 
   //--- description ---
-  syn String OpenHAB2Model.description() = "["
+  syn String SmartHomeEntityModel.description() = "["
     + this.getNumThingType() + " thing type(s), "
     + this.getNumChannelType() + " channel type(s), "
     + this.numChannels() + " channel(s), "
diff --git a/eraser-base/src/main/jastadd/Navigation.jrag b/eraser-base/src/main/jastadd/Navigation.jrag
index 69592c1bf0b980b6287cb28d10b7b131bd4383ef..12f520c3077f50291f1781072b4f4e187d4efc00 100644
--- a/eraser-base/src/main/jastadd/Navigation.jrag
+++ b/eraser-base/src/main/jastadd/Navigation.jrag
@@ -1,36 +1,36 @@
 aspect Navigation {
 
-  syn Comparator<ModelElement> OpenHAB2Model.modelElementComparator() {
+  syn Comparator<ModelElement> SmartHomeEntityModel.modelElementComparator() {
     return (e1, e2) -> (e1.getID().compareTo(e2.getID()));
   }
 
   //--- items ---
-  syn java.util.List<Item> OpenHAB2Model.items() {
+  syn java.util.List<Item> SmartHomeEntityModel.items() {
     java.util.List<Item> result = new java.util.ArrayList<>();
     addItems(result, getGroupList());
     return result;
   }
 
-  private void OpenHAB2Model.addItems(java.util.List<Item> result, JastAddList<Group> groups) {
+  private void SmartHomeEntityModel.addItems(java.util.List<Item> result, JastAddList<Group> groups) {
     groups.forEach(group -> group.getItemList().forEach(item -> result.add(item)));
   }
 
   //--- parameters ---
-  syn java.util.Set<Parameter> OpenHAB2Model.parameters() {
+  syn java.util.Set<Parameter> SmartHomeEntityModel.parameters() {
     java.util.Set<Parameter> result = new java.util.TreeSet<>(modelElementComparator());
     getThingTypeList().forEach(tt -> tt.getParameterList().forEach(parameter -> result.add(parameter)));
     return result;
   }
 
   //--- channels ---
-  syn java.util.Set<Channel> OpenHAB2Model.channels() {
+  syn java.util.Set<Channel> SmartHomeEntityModel.channels() {
     java.util.Set<Channel> result = new java.util.TreeSet<>(modelElementComparator());
     getThingList().forEach(thing -> thing.getChannelList().forEach(channel -> result.add(channel)));
     return result;
   }
 
   //--- resolveThingType ---
-  syn java.util.Optional<ThingType> OpenHAB2Model.resolveThingType(String thingTypeId) {
+  syn java.util.Optional<ThingType> SmartHomeEntityModel.resolveThingType(String thingTypeId) {
     for (ThingType thingType : this.getThingTypeList()) {
       if (thingType.getID().equals(thingTypeId)) {
         return java.util.Optional.of(thingType);
@@ -40,7 +40,7 @@ aspect Navigation {
   }
 
   //--- resolveChannel ---
-  syn java.util.Optional<Channel> OpenHAB2Model.resolveChannel(String channelId) {
+  syn java.util.Optional<Channel> SmartHomeEntityModel.resolveChannel(String channelId) {
     for (Thing thing : this.getThingList()) {
       for (Channel channel : thing.getChannelList()) {
         if (channel.getID().equals(channelId)) {
@@ -52,7 +52,7 @@ aspect Navigation {
   }
 
   //--- resolveChannelType ---
-  syn java.util.Optional<ChannelType> OpenHAB2Model.resolveChannelType(String channelTypeId) {
+  syn java.util.Optional<ChannelType> SmartHomeEntityModel.resolveChannelType(String channelTypeId) {
     for (ChannelType channelType : this.getChannelTypeList()) {
       if (channelType.getID().equals(channelTypeId)) {
         return java.util.Optional.of(channelType);
@@ -62,7 +62,7 @@ aspect Navigation {
   }
 
   //--- resolveItem ---
-  syn java.util.Optional<Item> OpenHAB2Model.resolveItem(String itemId) {
+  syn java.util.Optional<Item> SmartHomeEntityModel.resolveItem(String itemId) {
     if ("activity".equals(itemId)) {
       return Optional.of(getActivityItem());
     }
@@ -75,7 +75,7 @@ aspect Navigation {
   }
 
   //--- resolveGroup ---
-  syn java.util.Optional<Group> OpenHAB2Model.resolveGroup(String groupId) {
+  syn java.util.Optional<Group> SmartHomeEntityModel.resolveGroup(String groupId) {
     for (Group group : this.getGroupList()) {
       if (group.getID().equals(groupId)) {
         return java.util.Optional.of(group);
@@ -90,7 +90,7 @@ aspect Navigation {
   }
 
   //--- resolveItemCategory ---
-  syn java.util.Optional<ItemCategory> OpenHAB2Model.resolveItemCategory(String categoryName) {
+  syn java.util.Optional<ItemCategory> SmartHomeEntityModel.resolveItemCategory(String categoryName) {
     for (ItemCategory category : getItemCategoryList()) {
       if (category.getName().equals(categoryName)) {
         return java.util.Optional.of(category);
@@ -139,7 +139,7 @@ aspect Navigation {
 
   //--- getRoot ---
   inh Root ASTNode.getRoot();
-  eq Root.getOpenHAB2Model().getRoot() = this;
+  eq Root.getSmartHomeEntityModel().getRoot() = this;
   eq Root.getMqttRoot().getRoot() = this;
   eq Root.getInfluxRoot().getRoot() = this;
   eq Root.getMachineLearningRoot().getRoot() = this;
diff --git a/eraser-base/src/main/jastadd/NeuralNetwork.jrag b/eraser-base/src/main/jastadd/NeuralNetwork.jrag
index e673b69a1ea95c386320630fae1c8152cfe9cf78..999031dd8ad2260fff1db1cdfa2ec69579a706a2 100644
--- a/eraser-base/src/main/jastadd/NeuralNetwork.jrag
+++ b/eraser-base/src/main/jastadd/NeuralNetwork.jrag
@@ -100,7 +100,7 @@ aspect NeuralNetwork {
       }
       String itemName = itemNames.get(i);
       InputNeuron neuron = getInputNeuron(i);
-      JavaUtils.ifPresentOrElse(getRoot().getOpenHAB2Model().resolveItem(itemName),
+      JavaUtils.ifPresentOrElse(getRoot().getSmartHomeEntityModel().resolveItem(itemName),
           neuron::setItem,
           () -> logger.warn("Could not resolve item '{}'", itemName));
     }
diff --git a/eraser-base/src/main/jastadd/Printing.jrag b/eraser-base/src/main/jastadd/Printing.jrag
index 7402973f563eb21924f1f54a54ae8dc6d2bea848..fec6c4abfb0a9761e4970d3881adeead29a9464a 100644
--- a/eraser-base/src/main/jastadd/Printing.jrag
+++ b/eraser-base/src/main/jastadd/Printing.jrag
@@ -5,15 +5,15 @@ aspect Printing {
 
   syn String Root.prettyPrint() {
     StringBuilder sb = new StringBuilder();
-    sb.append(getOpenHAB2Model().prettyPrint());
+    sb.append(getSmartHomeEntityModel().prettyPrint());
     sb.append(getMqttRoot().prettyPrint());
     sb.append(getInfluxRoot().prettyPrint());
     sb.append(getMachineLearningRoot().prettyPrint());
     return sb.toString();
   }
 
-//--- OpenHAB2Model.prettyPrint() ---
-  syn String OpenHAB2Model.prettyPrint() {
+//--- SmartHomeEntityModel.prettyPrint() ---
+  syn String SmartHomeEntityModel.prettyPrint() {
     StringBuilder sb = new StringBuilder();
     for (Thing t : getThingList()) {
       sb.append(t.prettyPrint());
diff --git a/eraser-base/src/main/jastadd/Util.jrag b/eraser-base/src/main/jastadd/Util.jrag
index b038ca0dfae51d7bbea748086965b78e40f0c3e6..de0dfb9ef17a41f46885ca2432ced96dd5b5c449 100644
--- a/eraser-base/src/main/jastadd/Util.jrag
+++ b/eraser-base/src/main/jastadd/Util.jrag
@@ -28,7 +28,7 @@ aspect Util {
 
   public static Root Root.createEmptyRoot() {
     Root model = new Root();
-    model.setOpenHAB2Model(new OpenHAB2Model());
+    model.setSmartHomeEntityModel(new SmartHomeEntityModel());
     model.setMqttRoot(new MqttRoot());
     model.setInfluxRoot(InfluxRoot.createDefault());
     model.setMachineLearningRoot(new MachineLearningRoot());
diff --git a/eraser-base/src/main/jastadd/eraser.parser b/eraser-base/src/main/jastadd/eraser.parser
index 9934302f129072e5165966d34a4300281312fdbd..0cc98445f2d2ad28c4288ed20435c5e1dea6acc4 100644
--- a/eraser-base/src/main/jastadd/eraser.parser
+++ b/eraser-base/src/main/jastadd/eraser.parser
@@ -28,12 +28,12 @@ import java.util.HashMap;
 %goal logical_expression;
 
 Root goal =
-     thing.t goal.r                     {: insertZero(r.getOpenHAB2Model().getThingList(), t); return r; :}
+     thing.t goal.r                     {: insertZero(r.getSmartHomeEntityModel().getThingList(), t); return r; :}
   |  item.i goal.r                      {: return r; :}
-  |  group.g goal.r                     {: insertZero(r.getOpenHAB2Model().getGroupList(), g); return r; :}
-  |  thing_type.tt goal.r               {: insertZero(r.getOpenHAB2Model().getThingTypeList(), tt); return r; :}
+  |  group.g goal.r                     {: insertZero(r.getSmartHomeEntityModel().getGroupList(), g); return r; :}
+  |  thing_type.tt goal.r               {: insertZero(r.getSmartHomeEntityModel().getThingTypeList(), tt); return r; :}
   |  parameter goal.r                   {: return r; :}
-  |  channel_type.ct goal.r             {: insertZero(r.getOpenHAB2Model().getChannelTypeList(), ct); return r; :}
+  |  channel_type.ct goal.r             {: insertZero(r.getSmartHomeEntityModel().getChannelTypeList(), ct); return r; :}
   |  channel.c goal.r                   {: return r; :}
   |  mqtt_root.mr goal.r                {: r.setMqttRoot(mr); return r; :}
   |  influx_root.ir goal.r              {: r.setInfluxRoot(ir); return r; :}
diff --git a/eraser-base/src/main/jastadd/main.relast b/eraser-base/src/main/jastadd/main.relast
index 066ffbbc6f4eeb18930c645d246cb57112a2c8a9..b9fd3e6ca271b94dd0a59c1f596c3e4cad241d58 100644
--- a/eraser-base/src/main/jastadd/main.relast
+++ b/eraser-base/src/main/jastadd/main.relast
@@ -1,5 +1,5 @@
 // ----------------    Main    ------------------------------
-Root ::= OpenHAB2Model User* MqttRoot InfluxRoot MachineLearningRoot Rule* Location* ;
+Root ::= SmartHomeEntityModel User* MqttRoot InfluxRoot MachineLearningRoot Rule* Location* ;
 
 // ----------------    Users   ------------------------------
 User : LabelledModelElement ;
diff --git a/eraser-base/src/main/jastadd/mqtt.jrag b/eraser-base/src/main/jastadd/mqtt.jrag
index b3f9c2a24a0a62ccc1f360fdadaad4cd7bafe3b5..2d3f6fceefc39d47b1fae782aa4d2f2fbba94b88 100644
--- a/eraser-base/src/main/jastadd/mqtt.jrag
+++ b/eraser-base/src/main/jastadd/mqtt.jrag
@@ -74,7 +74,7 @@ aspect MQTT {
     getMqttRoot().getMqttSender().publish(getOutgoingTopic(), message);
   }
 
-  refine OpenHAB2 public void OpenHAB2Model.addNewItem(Item item) {
+  refine SmartHomeEntityModel public void SmartHomeEntityModel.addNewItem(Item item) {
     refined(item);
     // update mqtt-topic to new mqtt-root
     JavaUtils.ifPresentOrElse(
diff --git a/eraser-base/src/main/jastadd/openhab.jrag b/eraser-base/src/main/jastadd/shem.jrag
similarity index 67%
rename from eraser-base/src/main/jastadd/openhab.jrag
rename to eraser-base/src/main/jastadd/shem.jrag
index 56aa89f36ac62aa817352f45a639ae7c4aa62206..4cdc35da0e05c77be4ea4ab58d0f5699f87ae100 100644
--- a/eraser-base/src/main/jastadd/openhab.jrag
+++ b/eraser-base/src/main/jastadd/shem.jrag
@@ -1,9 +1,9 @@
-aspect OpenHAB2 {
-  syn ActivityItem OpenHAB2Model.getActivityItem() {
+aspect SmartHomeEntityModel {
+  syn ActivityItem SmartHomeEntityModel.getActivityItem() {
     return new ActivityItem();
   }
 
-  public void OpenHAB2Model.addNewItem(Item item) {
+  public void SmartHomeEntityModel.addNewItem(Item item) {
     JavaUtils.ifPresentOrElse(
         resolveGroup(de.tudresden.inf.st.eraser.util.ParserUtils.UNKNOWN_GROUP_NAME),
         group -> group.addItem(item),
diff --git a/eraser-base/src/main/jastadd/openhab.relast b/eraser-base/src/main/jastadd/shem.relast
similarity index 95%
rename from eraser-base/src/main/jastadd/openhab.relast
rename to eraser-base/src/main/jastadd/shem.relast
index 575f875734994ee52ba5259e5cfe570aa488c139..34ad05feba959e8f1b39449ec56ba96e3dc7a14f 100644
--- a/eraser-base/src/main/jastadd/openhab.relast
+++ b/eraser-base/src/main/jastadd/shem.relast
@@ -1,5 +1,5 @@
 // ----------------    openHAB    ------------------------------
-OpenHAB2Model ::= Thing* Group* ThingType* ChannelType* ChannelCategory* ItemCategory* /ActivityItem:Item/ ;
+SmartHomeEntityModel ::= Thing* Group* ThingType* ChannelType* ChannelCategory* ItemCategory* /ActivityItem:Item/ ;
 
 abstract ModelElement ::= <ID:String> ;
 abstract LabelledModelElement : ModelElement ::= <Label:String> ;
diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/Main.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/Main.java
index 9b9aaba5b25e860177545415c5ca1c088a3e7165..b73226fa34a99422f316579b8fea591478b97c5a 100644
--- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/Main.java
+++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/Main.java
@@ -39,7 +39,7 @@ public class Main {
 
   private static void testPrinterWith(Root model) {
     model.flushTreeCache();
-    System.out.println("Got model: " + model.getOpenHAB2Model().description());
+    System.out.println("Got model: " + model.getSmartHomeEntityModel().description());
     System.out.println("PrettyPrinted:");
     System.out.println(model.prettyPrint());
   }
@@ -48,7 +48,7 @@ public class Main {
     Root model;
 //    model = importFromOpenHab();
     model = importFromFile();
-    System.out.println("Got model: " + model.getOpenHAB2Model().description());
+    System.out.println("Got model: " + model.getSmartHomeEntityModel().description());
 //    JsonSerializer.write(model, "openhab2-data.json");
     testUpdaterWith(model);
   }
diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/deserializer/ASTNodeDeserializer.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/deserializer/ASTNodeDeserializer.java
index d349331de9e8e43b7513001c659f94e61cc94ae8..ce62a6efa1d1bb40d7a9e05cd618938fdcebfa9d 100644
--- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/deserializer/ASTNodeDeserializer.java
+++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/deserializer/ASTNodeDeserializer.java
@@ -48,17 +48,17 @@ public class ASTNodeDeserializer extends StdDeserializer<ASTNode> {
     r.put(c.getName(), ((node, model) -> f.apply(model, termValue(node, terminalName))));
   }
 
-  private void addResolverForOpenHAB2Model(Map<String, ResolveAstNodeForOpenHAB2Model> r, Class<?> c, BiFunction<OpenHAB2Model, String, Optional<? extends ASTNode>> f, String terminalName) {
+  private void addResolverForSmartHomeEntityModel(Map<String, ResolveAstNodeForSmartHomeEntityModel> r, Class<?> c, BiFunction<SmartHomeEntityModel, String, Optional<? extends ASTNode>> f, String terminalName) {
     r.put(c.getName(), ((node, model) -> f.apply(model, termValue(node, terminalName))));
   }
 
   private Map<String, ResolveAstNode> resolvers = new HashMap<>();
-  private Map<String, ResolveAstNodeForOpenHAB2Model> resolversForOpenHAB2Model = new HashMap<>();
+  private Map<String, ResolveAstNodeForSmartHomeEntityModel> resolversForSmartHomeEntityModel = new HashMap<>();
 
   private void initResolvers() {
-    addResolverForOpenHAB2Model(resolversForOpenHAB2Model, ThingType.class, OpenHAB2Model::resolveThingType, "ID");
-    addResolverForOpenHAB2Model(resolversForOpenHAB2Model, ChannelType.class, OpenHAB2Model::resolveChannelType, "ID");
-    addResolverForOpenHAB2Model(resolversForOpenHAB2Model, Item.class, OpenHAB2Model::resolveItem, "ID");
+    addResolverForSmartHomeEntityModel(resolversForSmartHomeEntityModel, ThingType.class, SmartHomeEntityModel::resolveThingType, "ID");
+    addResolverForSmartHomeEntityModel(resolversForSmartHomeEntityModel, ChannelType.class, SmartHomeEntityModel::resolveChannelType, "ID");
+    addResolverForSmartHomeEntityModel(resolversForSmartHomeEntityModel, Item.class, SmartHomeEntityModel::resolveItem, "ID");
     addResolver(resolvers, MqttTopic.class, Root::resolveMqttTopic, "IncomingTopic");
   }
 
@@ -373,8 +373,8 @@ interface ResolveAstNode {
 }
 
 
-interface ResolveAstNodeForOpenHAB2Model {
-  Optional<? extends ASTNode> resolve(JsonNode node, OpenHAB2Model model) throws IOException;
+interface ResolveAstNodeForSmartHomeEntityModel {
+  Optional<? extends ASTNode> resolve(JsonNode node, SmartHomeEntityModel model) throws IOException;
 }
 
 class ResolveLater {
diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/openhab2/OpenHab2Importer.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/openhab2/OpenHab2Importer.java
index 4e1742c7f48b31e040cc70866e8ecd5070622172..d3fcaefa4cf16a7114406ac69f399dc029e1c7a7 100644
--- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/openhab2/OpenHab2Importer.java
+++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/openhab2/OpenHab2Importer.java
@@ -42,7 +42,7 @@ public class OpenHab2Importer {
     nonDefaultChannelCategories = new HashSet<>();
   }
 
-  public OpenHAB2Model importFrom(String host, int port) {
+  public SmartHomeEntityModel importFrom(String host, int port) {
     /*
     Plan:
     - requesting: thing-types, channel-types, things, items, links
@@ -59,7 +59,7 @@ public class OpenHab2Importer {
 
     try {
       Root root = Root.createEmptyRoot();
-      OpenHAB2Model model = root.getOpenHAB2Model();
+      SmartHomeEntityModel model = root.getSmartHomeEntityModel();
       ThingTypeData[] thingTypeList = mapper.readValue(makeURL(thingTypesUrl, hostAndPort), ThingTypeData[].class);
       logger.info("Read a total of {} thing type(s).", thingTypeList.length);
       update(model, thingTypeList);
@@ -100,7 +100,7 @@ public class OpenHab2Importer {
     return URI.create(String.format(formatUrlString, hostAndPort, id)).toURL();
   }
 
-  private void update(OpenHAB2Model model, ThingTypeData[] thingTypeList) {
+  private void update(SmartHomeEntityModel model, ThingTypeData[] thingTypeList) {
     for (ThingTypeData thingTypeData : thingTypeList) {
       ThingType thingType = new ThingType();
       thingType.setID(thingTypeData.UID);
@@ -110,7 +110,7 @@ public class OpenHab2Importer {
     }
   }
 
-  private void update(OpenHAB2Model model, ChannelTypeData[] channelTypeList) {
+  private void update(SmartHomeEntityModel model, ChannelTypeData[] channelTypeList) {
     for (ChannelTypeData channelTypeData : channelTypeList) {
       ChannelType channelType = new ChannelType();
       channelType.setID(channelTypeData.UID);
@@ -163,7 +163,7 @@ public class OpenHab2Importer {
     }
   }
 
-  private void update(OpenHAB2Model model, ThingData[] thingList) {
+  private void update(SmartHomeEntityModel model, ThingData[] thingList) {
     for (ThingData thingData : thingList) {
       Thing thing = new Thing();
       thing.setID(thingData.UID);
@@ -182,7 +182,7 @@ public class OpenHab2Importer {
     }
   }
 
-  private void update(OpenHAB2Model model, AbstractItemData[] itemList) {
+  private void update(SmartHomeEntityModel model, AbstractItemData[] itemList) {
     List<Tuple<Group, GroupItemData>> groupsWithMembers = new ArrayList<>();
     List<Tuple<Group, GroupItemData>> groupsInGroups = new ArrayList<>();
     List<Tuple<Item, AbstractItemData>> itemsInGroups = new ArrayList<>();
@@ -299,7 +299,7 @@ public class OpenHab2Importer {
     }
   }
 
-  private void update(OpenHAB2Model model, LinkData[] linkList) {
+  private void update(SmartHomeEntityModel model, LinkData[] linkList) {
     for (LinkData linkData : linkList) {
       ifPresent(model.resolveChannel(linkData.channelUID), "Channel", linkData,
           channel -> ifPresent(model.resolveItem(linkData.itemName), "Item", linkData, channel::addLinkedItem));
@@ -341,7 +341,7 @@ public class OpenHab2Importer {
     }
   }
 
-  public OpenHAB2Model importFrom(URL baseUrl) {
+  public SmartHomeEntityModel importFrom(URL baseUrl) {
     return importFrom(baseUrl.getHost(),
         baseUrl.getPort() == -1 ? baseUrl.getDefaultPort() : baseUrl.getPort());
   }
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 5d1b1af27c4bf36e15768bd12facc02ca3a1e773..795d469bc786cfde73b12f8329956cbb79bb953a 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
@@ -80,7 +80,7 @@ public class EraserParserHelper {
     resolve(channelTypeMap, missingChannelTypeMap, Channel::setType);
     if (itemMap == null || itemMap.isEmpty()) {
       missingItemForDesignator.forEach((designator, itemName) ->
-          JavaUtils.ifPresentOrElse(root.getOpenHAB2Model().resolveItem(itemName),
+          JavaUtils.ifPresentOrElse(root.getSmartHomeEntityModel().resolveItem(itemName),
               designator::setItem,
               () -> logger.warn("Could not resolve item {} for {}", itemName, designator)));
     } else {
@@ -132,13 +132,13 @@ public class EraserParserHelper {
           sortedDanglingItems.add(item);
         }
       }
-      ParserUtils.createUnknownGroup(this.root.getOpenHAB2Model(), sortedDanglingItems);
+      ParserUtils.createUnknownGroup(this.root.getSmartHomeEntityModel(), sortedDanglingItems);
     }
   }
 
   private void createChannelCategories() {
     channelCategoryMap.values().stream().sorted(Comparator.comparing(this::ident)).forEach(
-        cc -> root.getOpenHAB2Model().addChannelCategory(cc));
+        cc -> root.getSmartHomeEntityModel().addChannelCategory(cc));
     channelCategoryMap.clear();
   }
 
@@ -146,7 +146,7 @@ public class EraserParserHelper {
     Map<String, ItemCategory> newCategories = new HashMap<>();
     missingItemCategoryMap.forEach((item, category) ->
         item.setCategory(newCategories.computeIfAbsent(category, ItemCategory::new)));
-    newCategories.values().forEach(node -> root.getOpenHAB2Model().addItemCategory(node));
+    newCategories.values().forEach(node -> root.getSmartHomeEntityModel().addItemCategory(node));
   }
 
   private void checkUnusedElements() {
@@ -425,25 +425,25 @@ public class EraserParserHelper {
 
   public Root createRoot(Thing t) {
     Root result = createRoot();
-    result.getOpenHAB2Model().addThing(t);
+    result.getSmartHomeEntityModel().addThing(t);
     return result;
   }
 
   public Root createRoot(Group g) {
     Root result = createRoot();
-    result.getOpenHAB2Model().addGroup(g);
+    result.getSmartHomeEntityModel().addGroup(g);
     return result;
   }
 
   public Root createRoot(ThingType tt) {
     Root result = createRoot();
-    result.getOpenHAB2Model().addThingType(tt);
+    result.getSmartHomeEntityModel().addThingType(tt);
     return result;
   }
 
   public Root createRoot(ChannelType ct) {
     Root result = createRoot();
-    result.getOpenHAB2Model().addChannelType(ct);
+    result.getSmartHomeEntityModel().addChannelType(ct);
     return result;
   }
 
diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/util/ParserUtils.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/util/ParserUtils.java
index 716f63f9caa9462665b8819c9347aef466637a76..9970a680fe141f7ce0f1ad3cb0d4a836fd1caf95 100644
--- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/util/ParserUtils.java
+++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/util/ParserUtils.java
@@ -171,7 +171,7 @@ public class ParserUtils {
    * @param model         The model to operate on
    * @param danglingItems A list of items to add to the new group
    */
-  public static void createUnknownGroup(OpenHAB2Model model, Collection<Item> danglingItems) {
+  public static void createUnknownGroup(SmartHomeEntityModel model, Collection<Item> danglingItems) {
     Group unknownGroup = new Group();
     unknownGroup.setID(UNKNOWN_GROUP_NAME);
     model.addGroup(unknownGroup);
@@ -243,14 +243,14 @@ public class ParserUtils {
     Root root = (Root) parser.parse(scanner);
     parser.resolveReferences();
     reader.close();
-    int size = root.getOpenHAB2Model().items().size();
+    int size = root.getSmartHomeEntityModel().items().size();
     if (size == 0) {
       throw new IllegalArgumentException("Model does not contain any items!");
     }
     if (size > 1) {
       logger.warn("Model does contain {} items, ignoring all but the first.", size);
     }
-    return root.getOpenHAB2Model().items().get(0);
+    return root.getSmartHomeEntityModel().items().get(0);
   }
 
 }
diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/util/TestUtils.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/util/TestUtils.java
index 5f07ec7c576829975db82121e42e142497b49586..fd6024bdfd45e2652eb4eaa118eada3dbfc75f23 100644
--- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/util/TestUtils.java
+++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/util/TestUtils.java
@@ -10,9 +10,9 @@ import de.tudresden.inf.st.eraser.jastadd.model.*;
 public class TestUtils {
 
   public static class ModelAndItem {
-    public OpenHAB2Model model;
+    public SmartHomeEntityModel model;
     public NumberItem item;
-    static ModelAndItem of(OpenHAB2Model model, NumberItem item) {
+    static ModelAndItem of(SmartHomeEntityModel model, NumberItem item) {
       ModelAndItem result = new ModelAndItem();
       result.model = model;
       result.item = item;
@@ -27,19 +27,19 @@ public class TestUtils {
   public static ModelAndItem createModelAndItem(double initialValue, boolean useUpdatingItem) {
     Root root = Root.createEmptyRoot();
     Group g = new Group();
-    root.getOpenHAB2Model().addGroup(g);
+    root.getSmartHomeEntityModel().addGroup(g);
     g.setID("group1");
 
     NumberItem item = addItemTo(g, initialValue, useUpdatingItem);
 
-    return ModelAndItem.of(root.getOpenHAB2Model(), item);
+    return ModelAndItem.of(root.getSmartHomeEntityModel(), item);
   }
 
-  public static NumberItem addItemTo(OpenHAB2Model model, double initialValue) {
+  public static NumberItem addItemTo(SmartHomeEntityModel model, double initialValue) {
     return addItemTo(model, initialValue, false);
   }
 
-  public static NumberItem addItemTo(OpenHAB2Model model, double initialValue, boolean useUpdatingItem) {
+  public static NumberItem addItemTo(SmartHomeEntityModel model, double initialValue, boolean useUpdatingItem) {
     return addItemTo(getDefaultGroup(model), initialValue, useUpdatingItem);
   }
 
@@ -56,7 +56,7 @@ public class TestUtils {
     return item;
   }
 
-  public static Group getDefaultGroup(OpenHAB2Model model) {
+  public static Group getDefaultGroup(SmartHomeEntityModel model) {
     // use first found group
     return model.getGroup(0);
   }
diff --git a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/ControllingItemTest.java b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/ControllingItemTest.java
index edc98e72719ef63ffa63f0cb19aac9b7106ab879..40d7a97d5575269136f92293c7f2f7317dcc7cbe 100644
--- a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/ControllingItemTest.java
+++ b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/ControllingItemTest.java
@@ -58,7 +58,7 @@ public class ControllingItemTest {
   @Test
   public void testManyToOneColor() {
     ModelAndItem mai = TestUtils.createModelAndItem(0);
-    OpenHAB2Model model = mai.model;
+    SmartHomeEntityModel model = mai.model;
     NumberItem numberItem = mai.item;
 
     Group g = TestUtils.getDefaultGroup(model);
diff --git a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/MqttTests.java b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/MqttTests.java
index 28a8d664cd88f53495a7049b065f7ef206230e39..24a4f0b29b03fa7d20144b409ad989703b9b16cc 100644
--- a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/MqttTests.java
+++ b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/MqttTests.java
@@ -163,7 +163,7 @@ public class MqttTests {
 
   private ModelItemAndTwoTopics createAB() {
     TestUtils.ModelAndItem mai = TestUtils.createModelAndItem(0, true);
-    OpenHAB2Model model = mai.model;
+    SmartHomeEntityModel model = mai.model;
     MqttRoot mqttRoot = new MqttRoot();
     mqttRoot.setIncomingPrefix("inc");
     mqttRoot.setOutgoingPrefix(outgoingPrefix);
@@ -183,11 +183,11 @@ public class MqttTests {
   }
 
   static class ModelItemAndTwoTopics {
-    OpenHAB2Model model;
+    SmartHomeEntityModel model;
     NumberItem item;
     MqttTopic firstTopic;
     MqttTopic secondTopic;
-    static ModelItemAndTwoTopics of(OpenHAB2Model model, NumberItem item, MqttTopic firstTopic, MqttTopic secondTopic) {
+    static ModelItemAndTwoTopics of(SmartHomeEntityModel model, NumberItem item, MqttTopic firstTopic, MqttTopic secondTopic) {
       ModelItemAndTwoTopics result = new ModelItemAndTwoTopics();
       result.model = model;
       result.item = item;
diff --git a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/OpenHabImporterTest.java b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/OpenHabImporterTest.java
index 8c109638fea74d074cfc72168303d68a5d2e69a7..ba45dfa3d2381c7a4778eea8314074401df25c93 100644
--- a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/OpenHabImporterTest.java
+++ b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/OpenHabImporterTest.java
@@ -1,6 +1,6 @@
 package de.tudresden.inf.st.eraser;
 
-import de.tudresden.inf.st.eraser.jastadd.model.OpenHAB2Model;
+import de.tudresden.inf.st.eraser.jastadd.model.SmartHomeEntityModel;
 import de.tudresden.inf.st.eraser.jastadd.model.Root;
 import de.tudresden.inf.st.eraser.jastadd_test.core.*;
 import de.tudresden.inf.st.eraser.openhab2.OpenHab2Importer;
@@ -71,7 +71,7 @@ public class OpenHabImporterTest {
 
       // call the modified importer, with the static host name, and an arbitrary chosen port
       // port will not be used during the test
-      OpenHAB2Model model = importer.importFrom(HOST, 80);
+      SmartHomeEntityModel model = importer.importFrom(HOST, 80);
 
       if (model == null) {
         if (expected == Result.PARSE_FAILED) return;
diff --git a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/RulesTest.java b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/RulesTest.java
index 13f5a493652ee42cdc70fc31ae64649de4b23987..fc01bb76bb022cfa0a5ff25113d9fc2957c0c3c0 100644
--- a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/RulesTest.java
+++ b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/RulesTest.java
@@ -137,7 +137,7 @@ public class RulesTest {
     TestUtils.ModelAndItem modelAndItem = createModelAndItem(4);
     Root root = modelAndItem.model.getRoot();
     NumberItem item1 = modelAndItem.item;
-    NumberItem item2 = TestUtils.addItemTo(root.getOpenHAB2Model(), 4, useUpdatingItem);
+    NumberItem item2 = TestUtils.addItemTo(root.getSmartHomeEntityModel(), 4, useUpdatingItem);
 
     Rule rule = new Rule();
     CountingAction counter = new CountingAction();
@@ -280,7 +280,7 @@ public class RulesTest {
     TestUtils.ModelAndItem modelAndItem = createModelAndItem(2);
     Root root = modelAndItem.model.getRoot();
     NumberItem item = modelAndItem.item;
-    NumberItem item2 = TestUtils.addItemTo(root.getOpenHAB2Model(), 4, useUpdatingItem);
+    NumberItem item2 = TestUtils.addItemTo(root.getSmartHomeEntityModel(), 4, useUpdatingItem);
 
     Rule ruleA = new Rule();
     CountingAction counter1 = new CountingAction();
@@ -323,7 +323,7 @@ public class RulesTest {
     TestUtils.ModelAndItem modelAndItem = createModelAndItem(3);
     Root root = modelAndItem.model.getRoot();
     NumberItem item = modelAndItem.item;
-    NumberItem item2 = TestUtils.addItemTo(root.getOpenHAB2Model(), 4, useUpdatingItem);
+    NumberItem item2 = TestUtils.addItemTo(root.getSmartHomeEntityModel(), 4, useUpdatingItem);
 
     Rule rule = new Rule();
     rule.addAction(new SetStateFromConstantStringAction(item2, "5"));
@@ -355,7 +355,7 @@ public class RulesTest {
     TestUtils.ModelAndItem modelAndItem = createModelAndItem(0);
     Root root = modelAndItem.model.getRoot();
     NumberItem item = modelAndItem.item;
-    NumberItem item2 = TestUtils.addItemTo(root.getOpenHAB2Model(), 3, useUpdatingItem);
+    NumberItem item2 = TestUtils.addItemTo(root.getSmartHomeEntityModel(), 3, useUpdatingItem);
 
     Rule rule = new Rule();
     rule.addAction(new SetStateFromLambdaAction(item2, provider));
@@ -397,7 +397,7 @@ public class RulesTest {
     TestUtils.ModelAndItem modelAndItem = createModelAndItem(3);
     Root root = modelAndItem.model.getRoot();
     NumberItem item = modelAndItem.item;
-    StringItem item2 = addStringItem(root.getOpenHAB2Model(), "0");
+    StringItem item2 = addStringItem(root.getSmartHomeEntityModel(), "0");
 
     Rule rule = new Rule();
     CountingAction counter = new CountingAction();
@@ -427,8 +427,8 @@ public class RulesTest {
     TestUtils.ModelAndItem modelAndItem = createModelAndItem(3);
     Root root = modelAndItem.model.getRoot();
     NumberItem item = modelAndItem.item;
-    NumberItem item2 = TestUtils.addItemTo(root.getOpenHAB2Model(), 4, useUpdatingItem);
-    StringItem affectedItem = addStringItem(root.getOpenHAB2Model(), "1");
+    NumberItem item2 = TestUtils.addItemTo(root.getSmartHomeEntityModel(), 4, useUpdatingItem);
+    StringItem affectedItem = addStringItem(root.getSmartHomeEntityModel(), "1");
 
     Rule rule = new Rule();
     SetStateFromItemsAction action = new SetStateFromItemsAction(items ->
@@ -473,7 +473,7 @@ public class RulesTest {
         "12", affectedItem.getState());
 
     // add new item to sum
-    NumberItem item3 = TestUtils.addItemTo(root.getOpenHAB2Model(), -4, useUpdatingItem);
+    NumberItem item3 = TestUtils.addItemTo(root.getSmartHomeEntityModel(), -4, useUpdatingItem);
     action.addSourceItem(item3);
 
     // still 7 + 5 = 12, as rule should not trigger
@@ -494,7 +494,7 @@ public class RulesTest {
     TestUtils.ModelAndItem modelAndItem = createModelAndItem(3);
     Root root = modelAndItem.model.getRoot();
     NumberItem item = modelAndItem.item;
-    NumberItem affectedItem = TestUtils.addItemTo(root.getOpenHAB2Model(), 4, useUpdatingItem);
+    NumberItem affectedItem = TestUtils.addItemTo(root.getSmartHomeEntityModel(), 4, useUpdatingItem);
 
     Rule rule = new Rule();
     rule.addAction(new AddDoubleToStateAction(affectedItem, 2));
@@ -531,7 +531,7 @@ public class RulesTest {
     TestUtils.ModelAndItem modelAndItem = createModelAndItem(3);
     Root root = modelAndItem.model.getRoot();
     NumberItem item = modelAndItem.item;
-    NumberItem affectedItem = TestUtils.addItemTo(root.getOpenHAB2Model(), 4, useUpdatingItem);
+    NumberItem affectedItem = TestUtils.addItemTo(root.getSmartHomeEntityModel(), 4, useUpdatingItem);
 
     Rule rule = new Rule();
     rule.addAction(new MultiplyDoubleToStateAction(affectedItem, 2));
@@ -568,8 +568,8 @@ public class RulesTest {
     TestUtils.ModelAndItem modelAndItem = createModelAndItem(3);
     Root root = modelAndItem.model.getRoot();
     NumberItem item1 = modelAndItem.item;
-    NumberItem item2 = TestUtils.addItemTo(root.getOpenHAB2Model(), 4, useUpdatingItem);
-    NumberItem affectedItem = TestUtils.addItemTo(root.getOpenHAB2Model(), 5, useUpdatingItem);
+    NumberItem item2 = TestUtils.addItemTo(root.getSmartHomeEntityModel(), 4, useUpdatingItem);
+    NumberItem affectedItem = TestUtils.addItemTo(root.getSmartHomeEntityModel(), 5, useUpdatingItem);
 
     Rule ruleA = new Rule();
     ruleA.addAction(new AddDoubleToStateAction(affectedItem, 2));
@@ -623,8 +623,8 @@ public class RulesTest {
     TestUtils.ModelAndItem modelAndItem = createModelAndItem(3);
     Root root = modelAndItem.model.getRoot();
     NumberItem item1 = modelAndItem.item;
-    NumberItem item2 = TestUtils.addItemTo(root.getOpenHAB2Model(), 4, useUpdatingItem);
-    NumberItem affectedItem = TestUtils.addItemTo(root.getOpenHAB2Model(), 5, useUpdatingItem);
+    NumberItem item2 = TestUtils.addItemTo(root.getSmartHomeEntityModel(), 4, useUpdatingItem);
+    NumberItem affectedItem = TestUtils.addItemTo(root.getSmartHomeEntityModel(), 5, useUpdatingItem);
 
     Rule rule = new Rule();
     SetStateFromExpression action = new SetStateFromExpression();
@@ -710,7 +710,7 @@ public class RulesTest {
     return message + " (Using " + name + ")";
   }
 
-  private StringItem addStringItem(OpenHAB2Model model, String initialValue) {
+  private StringItem addStringItem(SmartHomeEntityModel model, String initialValue) {
     StringItem item = new StringItem();
     Group group = TestUtils.getDefaultGroup(model);
     item.setID("item" + group.getNumItem());
diff --git a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/jastadd_test/core/TestRunner.java b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/jastadd_test/core/TestRunner.java
index 6978df5cafeee586a7025fc1855d88b1b240a49b..1b4ba7616039ba915162919f5717a593a44972f6 100644
--- a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/jastadd_test/core/TestRunner.java
+++ b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/jastadd_test/core/TestRunner.java
@@ -30,7 +30,7 @@
 package de.tudresden.inf.st.eraser.jastadd_test.core;
 
 import beaver.Parser;
-import de.tudresden.inf.st.eraser.jastadd.model.OpenHAB2Model;
+import de.tudresden.inf.st.eraser.jastadd.model.SmartHomeEntityModel;
 import de.tudresden.inf.st.eraser.jastadd.model.Root;
 import de.tudresden.inf.st.eraser.util.ParserUtils;
 
diff --git a/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/Application.java b/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/Application.java
index 4d8df7dfaa448fe34c6cef1ed51a30d4dd2bc1ae..f79a2df3d49fbc0fe882a356526e63eb6aa23c52 100644
--- a/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/Application.java
+++ b/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/Application.java
@@ -106,15 +106,15 @@ public class Application {
 
         //--- GET /model/items ---
         Spark.get("",
-            (request, response) -> wrapItemList(root.getOpenHAB2Model().items()),
+            (request, response) -> wrapItemList(root.getSmartHomeEntityModel().items()),
             mapper::writeValueAsString);
         Spark.path("/:identifier", () -> {
 
           Spark.put("", (request, response) -> {
-            OpenHAB2Model openHAB2Model = root.getOpenHAB2Model();
+            SmartHomeEntityModel SmartHomeEntityModel = root.getSmartHomeEntityModel();
             Item item = ParserUtils.parseItem(request.body());
-            if (!openHAB2Model.resolveItem(item.getID()).isPresent()) {
-              root.getOpenHAB2Model().addNewItem(item);
+            if (!SmartHomeEntityModel.resolveItem(item.getID()).isPresent()) {
+              root.getSmartHomeEntityModel().addNewItem(item);
               response.status(201);
               return "OK";
             } else {
@@ -165,7 +165,7 @@ public class Application {
   }
 
   private Object safeItemRoute(Request request, Response response, Function<Item, String> action) {
-    return JavaUtils.ifPresentOrElseReturn(root.getOpenHAB2Model().resolveItem(request.params("identifier")), action,
+    return JavaUtils.ifPresentOrElseReturn(root.getSmartHomeEntityModel().resolveItem(request.params("identifier")), action,
         () -> makeError(response, 404, "Item '" + request.params("identifier") + "' not found"));
   }
 
diff --git a/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/DummyDataCreator.java b/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/DummyDataCreator.java
index 65885823f7960465adadf30bbda4f82744c54903..4e2184f5d017eba94b4b22dfcddfd6a3679612f2 100644
--- a/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/DummyDataCreator.java
+++ b/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/DummyDataCreator.java
@@ -44,7 +44,7 @@ class DummyDataCreator {
   }
 
   private Item getOrCreateColorItem(String name, String label) {
-    return root.getOpenHAB2Model().resolveItem(name).orElseGet(() -> {
+    return root.getSmartHomeEntityModel().resolveItem(name).orElseGet(() -> {
       ColorItem result = new ColorItem();
       result.setID(name);
       result.setLabel(label);
diff --git a/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/EraserStarter.java b/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/EraserStarter.java
index acc4b93a471d0b3a02676d37cb0314c85756ed1c..4d171f8b53d707cca9c07d12721a6586fbfaaf66 100644
--- a/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/EraserStarter.java
+++ b/eraser.starter/src/main/java/de/tudresden/inf/st/eraser/starter/EraserStarter.java
@@ -82,7 +82,7 @@ public class EraserStarter {
     boolean startRest = settings.rest.use;
 
     Root root;
-    OpenHAB2Model model;
+    SmartHomeEntityModel model;
     switch (settings.initModelWith) {
       case openhab:
         OpenHab2Importer importer = new OpenHab2Importer();
@@ -101,7 +101,7 @@ public class EraserStarter {
       default:
         try {
           root = ParserUtils.load(settings.load.realURL());
-          model = root.getOpenHAB2Model();
+          model = root.getSmartHomeEntityModel();
         } catch (IOException | Parser.Exception e) {
           logger.error("Problems parsing the given file {}", settings.load.file);
           logger.catching(e);
diff --git a/feedbackloop.execute/src/main/java/de/tudresden/inf/st/eraser/feedbackloop/execute/ExecuteImpl.java b/feedbackloop.execute/src/main/java/de/tudresden/inf/st/eraser/feedbackloop/execute/ExecuteImpl.java
index 80d2346312445914306e6c224d1f9de1b766cf6d..489956ca9807110328b740b77fe4412e0f00fda3 100644
--- a/feedbackloop.execute/src/main/java/de/tudresden/inf/st/eraser/feedbackloop/execute/ExecuteImpl.java
+++ b/feedbackloop.execute/src/main/java/de/tudresden/inf/st/eraser/feedbackloop/execute/ExecuteImpl.java
@@ -61,7 +61,7 @@ public class ExecuteImpl implements Execute {
   }
 
   private void resolveOrLogError(String itemId, Consumer<? super Item> consumer) {
-    Optional<Item> optionalItem = knowledgeBase.getOpenHAB2Model().resolveItem(itemId);
+    Optional<Item> optionalItem = knowledgeBase.getSmartHomeEntityModel().resolveItem(itemId);
     if (!optionalItem.isPresent()) {
       logger.warn("Could not resolve '{}' as an item.", itemId);
     }
diff --git a/feedbackloop.execute/src/test/java/de/tudresden/inf/st/eraser/feedbackloop/execute/ExecuteImplTest.java b/feedbackloop.execute/src/test/java/de/tudresden/inf/st/eraser/feedbackloop/execute/ExecuteImplTest.java
index f3f79ac72847b1c8c251c96a6d011014479f7115..ff915252454a236e885f504858afe7914f30aec5 100644
--- a/feedbackloop.execute/src/test/java/de/tudresden/inf/st/eraser/feedbackloop/execute/ExecuteImplTest.java
+++ b/feedbackloop.execute/src/test/java/de/tudresden/inf/st/eraser/feedbackloop/execute/ExecuteImplTest.java
@@ -21,7 +21,7 @@ public class ExecuteImplTest {
   @Test
   public void testColorControlledByOneNumber() {
     ModelAndItem mai = TestUtils.createModelAndItem(0);
-    OpenHAB2Model model = mai.model;
+    SmartHomeEntityModel model = mai.model;
     NumberItem numberItem = mai.item;
 
     ColorItem lamp = new ColorItem();
@@ -47,7 +47,7 @@ public class ExecuteImplTest {
 
   @Test
   public void testColorControlledByOneBoolean() {
-    OpenHAB2Model model = TestUtils.createModelAndItem(0).model;
+    SmartHomeEntityModel model = TestUtils.createModelAndItem(0).model;
 
     ItemWithBooleanState button = new SwitchItem();
     button.setID("button");
@@ -79,7 +79,7 @@ public class ExecuteImplTest {
   @Test
   public void testColorControlledByMany() {
     ModelAndItem mai = TestUtils.createModelAndItem(0);
-    OpenHAB2Model model = mai.model;
+    SmartHomeEntityModel model = mai.model;
     NumberItem numberItem = mai.item;
 
     Group g = TestUtils.getDefaultGroup(model);
diff --git a/feedbackloop.learner/src/main/java/de/tudresden/inf/st/eraser/feedbackloop/learner/Main.java b/feedbackloop.learner/src/main/java/de/tudresden/inf/st/eraser/feedbackloop/learner/Main.java
index 0f82201e8bcffb278656fb821d6efb3e55008791..0d4983c47112462224aa5595942aa23cf738ad8b 100644
--- a/feedbackloop.learner/src/main/java/de/tudresden/inf/st/eraser/feedbackloop/learner/Main.java
+++ b/feedbackloop.learner/src/main/java/de/tudresden/inf/st/eraser/feedbackloop/learner/Main.java
@@ -89,7 +89,7 @@ public class Main {
 		Root root = Root.createEmptyRoot();
 		Group group = new Group();
 		group.setID("Group1");
-		root.getOpenHAB2Model().addGroup(group);
+		root.getSmartHomeEntityModel().addGroup(group);
 
 		NumberItem monthItem = new NumberItem();
 		monthItem.setState(normalizedInputs.get(0));
@@ -131,7 +131,7 @@ public class Main {
 	private static void createBrightnessNetwork(ArrayList<Double> all_weights, int inputBiasNumber, int hiddenlayernumber,
 												int hiddenlayerbias, ArrayList<Double> normalizedInputsandOutput) {
 		Root root = createModel(normalizedInputsandOutput, inputBiasNumber);
-		OpenHAB2Model model = root.getOpenHAB2Model();
+		SmartHomeEntityModel model = root.getSmartHomeEntityModel();
 		Item monthItem = model.resolveItem("month").orElseThrow(
 				() -> new RuntimeException("Month not found"));
 		Item dayItem = model.resolveItem("day").orElseThrow(
diff --git a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningImpl.java b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningImpl.java
index dc16aa2353ea216a49d2d1e75d8cfcff4d36abbc..f2540105d7dd6dbf3f037fa19868ff1c8d2749a8 100644
--- a/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningImpl.java
+++ b/feedbackloop.learner_backup/src/main/java/de/tudresden/inf/st/eraser/feedbackloop.learner_backup/MachineLearningImpl.java
@@ -39,7 +39,7 @@ public class MachineLearningImpl implements MachineLearningDecoder, MachineLearn
   }
 
   private void updateItems() {
-    OpenHAB2Model model = root.getOpenHAB2Model();
+    SmartHomeEntityModel model = root.getSmartHomeEntityModel();
     List<String> targetItemNames, relevantItemNames;
     switch (this.goal) {
       case GOAL_ACTIVITY_PHONE_AND_WATCH:
@@ -81,7 +81,7 @@ public class MachineLearningImpl implements MachineLearningDecoder, MachineLearn
         .collect(Collectors.toList());
   }
 
-  private Item resolve(OpenHAB2Model model, String id) {
+  private Item resolve(SmartHomeEntityModel model, String id) {
     Optional<Item> maybeItem = model.resolveItem(id);
     if (maybeItem.isPresent()) {
       return maybeItem.get();
@@ -97,8 +97,8 @@ public class MachineLearningImpl implements MachineLearningDecoder, MachineLearn
      if(topic.equals("oh2/samsung/items1")){
      new_data[0]=changedItems.get(0).influxMeasurementName();
      }
-     model.getOpenHAB2Model().items();
-     Item iris_item=model.getOpenHAB2Model().resolveItem("iris_item").get();
+     model.getSmartHomeEntityModel().items();
+     Item iris_item=model.getSmartHomeEntityModel().resolveItem("iris_item").get();
      iris_item.getStateAsString();*/
     /* FIXME either save state of unchanged items here (if only changed items are reported) <- pull model
              or let knowledge base pass all relevant items <- push model
@@ -122,7 +122,7 @@ public class MachineLearningImpl implements MachineLearningDecoder, MachineLearn
     }else if(this.goal==GOAL_PREFERENCE_BRIGHTNESS_IRIS){
       String[] new_data = new String[2];
       for(Item item: changedItems){
-        if(root.getOpenHAB2Model().getActivityItem().equals(item))
+        if(root.getSmartHomeEntityModel().getActivityItem().equals(item))
         {
           String test=item.getStateAsString();
           int index = Math.round(Float.valueOf(test));
@@ -161,7 +161,7 @@ public class MachineLearningImpl implements MachineLearningDecoder, MachineLearn
     switch (this.goal) {
       case GOAL_ACTIVITY_PHONE_AND_WATCH:
         String activityStringValue = activity_result;
-        Item activityItem = resolve(this.root.getOpenHAB2Model(), "activity");
+        Item activityItem = resolve(this.root.getSmartHomeEntityModel(), "activity");
         //activityItem.setStateFromString(activityStringValue);
         // FIXME how to translate activityStringValue to a number? or should activity item state better be a String?
         for (int i=0; i< activites.length;i++){
@@ -175,7 +175,7 @@ public class MachineLearningImpl implements MachineLearningDecoder, MachineLearn
       case GOAL_PREFERENCE_BRIGHTNESS_IRIS:
 //        String[] preference = {result[1], result[2]};
         // FIXME what is the meaning of result[1] and result[2]
-        Item iris1 = resolve(this.root.getOpenHAB2Model(), "iris1_item");
+        Item iris1 = resolve(this.root.getSmartHomeEntityModel(), "iris1_item");
         int color = 0;
         int brightness = 0;
         if (preference_result != null){
diff --git a/integration/src/main/java/de/tudresden/inf/st/eraser/integration/IntegrationMain.java b/integration/src/main/java/de/tudresden/inf/st/eraser/integration/IntegrationMain.java
index 3418238f3572595c4a9640369767a1d34d037920..05884c80d68bf27980465038960da9d5fe7adf66 100644
--- a/integration/src/main/java/de/tudresden/inf/st/eraser/integration/IntegrationMain.java
+++ b/integration/src/main/java/de/tudresden/inf/st/eraser/integration/IntegrationMain.java
@@ -79,14 +79,14 @@ public class IntegrationMain {
       logger.info("Start!");
       Root model = Main.importFromFile();
 //      Root model = importFromLocalFile();
-      logger.debug("Got model: {}", model.getOpenHAB2Model().description());
+      logger.debug("Got model: {}", model.getSmartHomeEntityModel().description());
       MqttRoot mqttRoot = new MqttRoot();
       mqttRoot.setHostByName("localhost");
       mqttRoot.setIncomingPrefix("oh2/out/");
       MqttTopic irisStateTopic = new MqttTopic();
       irisStateTopic.setTopicString("iris1_item/state");
       Item iris = null;
-      for (Item item : model.getOpenHAB2Model().items()) {
+      for (Item item : model.getSmartHomeEntityModel().items()) {
         if (item.getID().equals("iris1_item")) {
           iris = item;
           break;
diff --git a/ml_test/src/main/java/de/tudresden/inf/st/eraser/ml_test/Main.java b/ml_test/src/main/java/de/tudresden/inf/st/eraser/ml_test/Main.java
index 59c156853782b8e58010d24393e7c14c73ffefb8..75fd6d205d96cfe43bdd27176c21ac7e7155473a 100644
--- a/ml_test/src/main/java/de/tudresden/inf/st/eraser/ml_test/Main.java
+++ b/ml_test/src/main/java/de/tudresden/inf/st/eraser/ml_test/Main.java
@@ -26,7 +26,7 @@ public class Main {
     Root root = Root.createEmptyRoot();
     Group group = new Group();
     group.setID("Group1");
-    root.getOpenHAB2Model().addGroup(group);
+    root.getSmartHomeEntityModel().addGroup(group);
     Item activityItem = newItem("activity", "Recognized activity", false, 8);
     Item brightnessItem = newItem("brightness", "Measured brightness", false, 5);
     group.addItem(activityItem);
@@ -99,9 +99,9 @@ public class Main {
 
   private static PreparationResult prepareNetwork() {
     Root root = createModel();
-    Item activityItem = root.getOpenHAB2Model().resolveItem("activity").orElseThrow(
+    Item activityItem = root.getSmartHomeEntityModel().resolveItem("activity").orElseThrow(
         () -> new RuntimeException("Activity not found"));
-    Item brightnessItem = root.getOpenHAB2Model().resolveItem("brightness").orElseThrow(
+    Item brightnessItem = root.getSmartHomeEntityModel().resolveItem("brightness").orElseThrow(
         () -> new RuntimeException("Brightness not found"));
     NeuralNetworkRoot nn = new NeuralNetworkRoot();
 
diff --git a/skywriter-hue-integration/src/main/java/de/tudresden/inf/st/eraser/skywriter_hue_integration/Main.java b/skywriter-hue-integration/src/main/java/de/tudresden/inf/st/eraser/skywriter_hue_integration/Main.java
index 3f64c8cdd3c530d8a287a0d3ce0d140f449c5921..43e229c16c23e88440e693f1cc7a62f871d08fdb 100644
--- a/skywriter-hue-integration/src/main/java/de/tudresden/inf/st/eraser/skywriter_hue_integration/Main.java
+++ b/skywriter-hue-integration/src/main/java/de/tudresden/inf/st/eraser/skywriter_hue_integration/Main.java
@@ -37,7 +37,7 @@ public class Main {
   public static void main(String[] args) throws IOException, Parser.Exception {
     // use openHAB-eraser-connection to update hue (automatically done)
     Root root = ParserUtils.load("skywriter-hue.eraser", Main.class);
-    OpenHAB2Model model = root.getOpenHAB2Model();
+    SmartHomeEntityModel model = root.getSmartHomeEntityModel();
     Item irisItem = model.resolveItem("iris1_item").orElseThrow(() ->
         new NoSuchElementException("Iris1_item not found"));
     Item skywriter1_x = model.resolveItem("skywriter1_x").orElseThrow(() ->