diff --git a/eraser-base/src/main/jastadd/Item.jrag b/eraser-base/src/main/jastadd/Item.jrag
index 87d45fa2e45bd59de85bbdf8a04dac716b5ae1b0..6ccdfb4997be0f0301f4ac1e8a9f07ce00671c12 100644
--- a/eraser-base/src/main/jastadd/Item.jrag
+++ b/eraser-base/src/main/jastadd/Item.jrag
@@ -1,10 +1,5 @@
 aspect ItemHandling {
 
-  protected boolean Item.isFrozen = false;
-  public void Item.freeze() { isFrozen = true; }
-  public void Item.unfreeze() { isFrozen = false; }
-  public final boolean Item.isFrozen() { return isFrozen; }
-
   protected boolean Item.sendState = true;
   public void Item.disableSendState() { sendState = false; }
   public void Item.enableSendState() { sendState = true; }
@@ -142,6 +137,9 @@ aspect ItemHandling {
   //--- setStateFromBoolean ---
   public abstract void Item.setStateFromBoolean(boolean value);
   public void ColorItem.setStateFromBoolean(boolean value) {
+    if (getState()!=null && getState().getBrightness()!=0 && value) {
+     return;
+    }
     setBrightness(value ? 100 : 0);
   }
   public void DateTimeItem.setStateFromBoolean(boolean value) {
@@ -254,31 +252,31 @@ aspect ItemHandling {
 
   //--- setState(value,shouldSendState) ---
   public void ItemWithBooleanState.setState(boolean value, boolean shouldSendState) {
-    if (isFrozen || stateEquals(value)) { return; }
+    if (stateEquals(value)) { return; }
     set_state(value);
     stateUpdated(shouldSendState);
   }
 
   public void ItemWithStringState.setState(String value, boolean shouldSendState) {
-    if (isFrozen || stateEquals(value)) { return; }
+    if (stateEquals(value)) { return; }
     set_state(value);
     stateUpdated(shouldSendState);
   }
 
   public void ItemWithDoubleState.setState(double value, boolean shouldSendState) {
-    if (isFrozen || stateEquals(value)) { return; }
+    if (stateEquals(value)) { return; }
     set_state(value);
     stateUpdated(shouldSendState);
   }
 
   public void ColorItem.setState(TupleHSB value, boolean shouldSendState) {
-    if (isFrozen || stateEquals(value)) { return; }
+    if (stateEquals(value)) { return; }
     set_state(value);
     stateUpdated(shouldSendState);
   }
 
   public void DateTimeItem.setState(Instant value, boolean shouldSendState) {
-    if (isFrozen || stateEquals(value)) { return; }
+    if (stateEquals(value)) { return; }
     set_state(value);
     stateUpdated(shouldSendState);
   }
@@ -290,7 +288,6 @@ aspect ItemHandling {
    *   <li>Send the new state via MQTT</li>
    *   <li>Send the new state to Influx DB</li>
    *   <li>Notify the attached {@link ItemObserver}, if any</li>
-   *   <li>Update state of controlled items</li>
    * </ul>
    * @param shouldSendState whether to send the new state (currently affects MQTT and Influx)
    */
@@ -306,9 +303,6 @@ aspect ItemHandling {
     if (hasItemObserver()) {
       getItemObserver().apply();
     }
-    for (Item controlled : getControllingList()) {
-      doUpdateFor(controlled);
-    }
   }
 
   //--- sendState ---
@@ -388,22 +382,56 @@ aspect ItemHandling {
   syn DateTimeItem Item.asDateTimeItem() = (DateTimeItem) this;
   syn DateTimeItem DateTimeItem.asDateTimeItem() = this;
 
-  //--- doUpdateFor ---
-  protected abstract void Item.doUpdateFor(Item controlling);
-  protected void ItemWithBooleanState.doUpdateFor(Item controlling) {
-    controlling.setStateFromBoolean(this.getState());
+
+  //--- State Copy ---
+  public void Item.addControlling(Item controlledItem) { 
+    getRoot().addRule(createControllerRule(this,controlledItem));
   }
-  protected void ItemWithStringState.doUpdateFor(Item controlling) {
-    controlling.setStateFromString(this.getState());
+
+  public void Item.addControlledBy(Item controllerItem) { 
+    getRoot().addRule(createControllerRule(controllerItem,this));
   }
-  protected void ItemWithDoubleState.doUpdateFor(Item controlling) {
-    controlling.setStateFromDouble(this.getState());
+
+  public void Item.synchronizeWith(Item item) {
+    addControlledBy(item);
+    addControlling(item);
   }
-  protected void ColorItem.doUpdateFor(Item controlling) {
-    controlling.setStateFromColor(this.getState());
+
+
+  
+  private Rule Item.createControllerRule(Item controllerItem, Item controlledItem) {
+    Rule rule = new Rule();
+
+    ItemStateChangeCondition condition = new ItemStateChangeCondition();
+    condition.setItem(controllerItem);
+    rule.addCondition(condition);
+
+    SetStateFromTriggeringItemAction action = new SetStateFromTriggeringItemAction();
+    action.setAffectedItem(controlledItem);
+    rule.addAction(action);
+    rule.activateFor(controllerItem);
+    
+    return rule;
+    
+  }
+  
+
+  //--- copyStateTo ---
+  protected abstract void Item.copyStateTo(Item stateReceiver);
+  protected void ItemWithBooleanState.copyStateTo(Item stateReceiver) {
+    stateReceiver.setStateFromBoolean(this.getState());
+  }
+  protected void ItemWithStringState.copyStateTo(Item stateReceiver) {
+    stateReceiver.setStateFromString(this.getState());
   }
-  protected void DateTimeItem.doUpdateFor(Item controlling) {
-    controlling.setStateFromInstant(this.getState());
+  protected void ItemWithDoubleState.copyStateTo(Item stateReceiver) {
+    stateReceiver.setStateFromDouble(this.getState());
+  }
+  protected void ColorItem.copyStateTo(Item stateReceiver) {
+    stateReceiver.setStateFromColor(this.getState());
+  }
+  protected void DateTimeItem.copyStateTo(Item stateReceiver) {
+    stateReceiver.setStateFromInstant(this.getState());
   }
 
   private void ColorItem.setBrightness(int value) {
@@ -414,20 +442,10 @@ aspect ItemHandling {
   public abstract void ItemUpdate.apply();
   public void ItemUpdateColor.apply() {
     getItem().setStateFromColor(getNewHSB());
-    getItem().freeze();
-    for (Item controller : getItem().getControlledByList()) {
-      controller.setStateFromColor(getNewHSB());
-    }
-    getItem().unfreeze();
   }
   //--- ItemUpdate.apply ---
   public void ItemUpdateDouble.apply() {
     getItem().setStateFromDouble(getNewValue());
-    getItem().freeze();
-    for (Item controller : getItem().getControlledByList()) {
-      controller.setStateFromDouble(getNewValue());
-    }
-    getItem().unfreeze();
   }
 
   //--- ItemUpdate.describe ---
diff --git a/eraser-base/src/main/jastadd/Printing.jrag b/eraser-base/src/main/jastadd/Printing.jrag
index fec6c4abfb0a9761e4970d3881adeead29a9464a..0b454039a9b84c02c68f2cef4593c0a334b99b37 100644
--- a/eraser-base/src/main/jastadd/Printing.jrag
+++ b/eraser-base/src/main/jastadd/Printing.jrag
@@ -49,7 +49,7 @@ aspect Printing {
         .build();
   }
 
-//ITEM_TYPE Item: id="" label="" state="" category="" topic="" controls=["ITEM_ID", "ITEM_ID"];
+//ITEM_TYPE Item: id="" label="" state="" category="" topic="";
   syn String Item.prettyPrint() {
     return new MemberPrinter(prettyPrintType())
         .addRequired("id", getID())
@@ -57,7 +57,6 @@ aspect Printing {
         .addRequired("state", getStateAsString())
         .addOptional("category", hasCategory(), () -> getCategory().getName())
         .addOptional("topic", hasTopic(), () -> getTopic().getTopicString())
-        .addIds("controls", getControllingList())
         .addNodes("metaData", getNumMetaData(), getMetaDataList(),
                   md -> "\"" + md.getKey() + "\":\"" + md.getValue() + "\"",
                   MemberPrinter.ListBracketType.CURLY)
@@ -86,7 +85,6 @@ aspect Printing {
         .addNonDefault("label", getLabel())
         .addOptional("category", hasCategory(), () -> getCategory().getName())
         .addOptional("topic", hasTopic(), () -> getTopic().getTopicString())
-        .addIds("controls", getControllingList())
         .addNodes("metaData", getNumMetaData(), getMetaDataList(),
                   md -> "\"" + md.getKey() + "\":\"" + md.getValue() + "\"",
                   MemberPrinter.ListBracketType.CURLY)
diff --git a/eraser-base/src/main/jastadd/Rules.jrag b/eraser-base/src/main/jastadd/Rules.jrag
index e1e0db7c7248016dd6db7bea0d6579994548cee9..464b3d3d2f132797e712573805158a507c694c6a 100644
--- a/eraser-base/src/main/jastadd/Rules.jrag
+++ b/eraser-base/src/main/jastadd/Rules.jrag
@@ -79,6 +79,7 @@ aspect Rules {
   syn boolean Condition.holdsFor(Item item);
   eq ItemStateCheckCondition.holdsFor(Item item) = getItemStateCheck().holdsFor(item);
   eq ExpressionCondition.holdsFor(Item item) = getLogicalExpression().eval();
+  eq ItemStateChangeCondition.holdsFor(Item item) = getItem() == item;
 
   // --- Action.applyFor ---
   public abstract void Action.applyFor(Item item);
@@ -101,7 +102,7 @@ aspect Rules {
     getAffectedItem().setStateFromString(getNewStateProvider().get());
   }
   public void SetStateFromTriggeringItemAction.applyFor(Item item) {
-    item.doUpdateFor(getAffectedItem());
+    item.copyStateTo(getAffectedItem());
   }
   public void SetStateFromItemsAction.applyFor(Item item) {
     getAffectedItem().setStateFromString(getCombinator().apply(getSourceItems()));
diff --git a/eraser-base/src/main/jastadd/Rules.relast b/eraser-base/src/main/jastadd/Rules.relast
index 3385858454a006cda3c052dbc41028684cb17d23..25a0fd2b41f3f1051e03d06ace4f41b6907030e6 100644
--- a/eraser-base/src/main/jastadd/Rules.relast
+++ b/eraser-base/src/main/jastadd/Rules.relast
@@ -2,6 +2,7 @@
 Rule ::= Condition* Action* ;
 abstract Condition ;
 ItemStateCheckCondition : Condition ::= ItemStateCheck ;
+ItemStateChangeCondition : Condition ::= Item;
 ExpressionCondition : Condition ::= LogicalExpression ;
 abstract Action ;
 NoopAction : Action ;
diff --git a/eraser-base/src/main/jastadd/eraser.flex b/eraser-base/src/main/jastadd/eraser.flex
index bc9b3e8d9a41c9bd4cc51d1879f081b32538f103..5f70414fa4005ad1baf1b0623459ce7c5f2f69f2 100644
--- a/eraser-base/src/main/jastadd/eraser.flex
+++ b/eraser-base/src/main/jastadd/eraser.flex
@@ -77,7 +77,6 @@ Comment = "//" [^\n\r]+
 "channels"     { return sym(Terminals.CHANNELS); }
 "channelTypes" { return sym(Terminals.CHANNEL_TYPES); }
 "context"      { return sym(Terminals.CONTEXT); }
-"controls"     { return sym(Terminals.CONTROLS); }
 "dbName"       { return sym(Terminals.DB_NAME); }
 "default"      { return sym(Terminals.DEFAULT); }
 "description"  { return sym(Terminals.DESCRIPTION); }
diff --git a/eraser-base/src/main/jastadd/eraser.parser b/eraser-base/src/main/jastadd/eraser.parser
index 5c275fa8c16d8a694608581b08640ae8a9db5451..68967a5655bf12cab2e2127db29e1f0ac5ebd808 100644
--- a/eraser-base/src/main/jastadd/eraser.parser
+++ b/eraser-base/src/main/jastadd/eraser.parser
@@ -125,15 +125,13 @@ Item item =
   |  ITEM COLON item_body.ib SEMICOLON                {: return eph.retype(new DefaultItem(), ib); :}
   ;
 
-// ITEM_TYPE Item: id="" label="" state="" category="" topic="" controls=["ITEM_ID"] metaData={"key":"value"} ;
+// ITEM_TYPE Item: id="" label="" state="" category="" topic="" metaData={"key":"value"} ;
 Item item_body =
      ID EQUALS TEXT.n item_body.i       {: return eph.setID(i, n); :}
   |  LABEL EQUALS TEXT.n item_body.i    {: i.setLabel(n); return i; :}
   |  STATE EQUALS TEXT.n item_body.i    {: i.setStateFromString(n); return i; :}
   |  TOPIC EQUALS TEXT.n item_body.i    {: return eph.setTopic(i, n); :}
   |  CATEGORY EQUALS TEXT.n item_body.i {: return eph.setCategory(i, n); :}
-  |  CONTROLS EQUALS string_list.controlling item_body.i
-    {: return eph.setControlling(i, controlling); :}
   |  META_DATA EQUALS string_map.md item_body.i
     {: return eph.setMetaData(i, md); :}
   |                                     {: return eph.createItem(); :}
diff --git a/eraser-base/src/main/jastadd/shem.relast b/eraser-base/src/main/jastadd/shem.relast
index 34ad05feba959e8f1b39449ec56ba96e3dc7a14f..ca1878ac6d2722a3e2a1671e066b19c5175c7be6 100644
--- a/eraser-base/src/main/jastadd/shem.relast
+++ b/eraser-base/src/main/jastadd/shem.relast
@@ -27,7 +27,6 @@ ParameterDefaultValue ::= <Value:String> ;
 
 abstract Item : LabelledModelElement ::= <_fetched_data:boolean> MetaData:ItemMetaData* [ItemObserver] ;
 rel Item.Category? -> ItemCategory ;
-rel Item.Controlling* <-> Item.ControlledBy* ;
 
 abstract ItemWithBooleanState : Item ::= <_state:boolean> ;
 abstract ItemWithStringState : Item ::= <_state:String> ;
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 b25642533f1bd893fffc0605f8080fddfcdbbf29..289ee0eccd58cd6ebc695842c49d4de4f8ee48a5 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
@@ -102,10 +102,10 @@ public class ControllingItemTest {
     assertEquals("30,20,10", stringItem.getState());
     assertEquals(TupleHSB.of(30, 20, 10), target.getState(), "Item was not controlled correctly");
 
-    // boolean true -> set brightness to full (100)
+    // boolean true -> brightness should still be 10 because it's already turned on
     booleanItem.setState(true);
     assertTrue(booleanItem.getState());
-    assertEquals(TupleHSB.of(30, 20, 100), target.getState(), "Item was not controlled correctly");
+    assertEquals(TupleHSB.of(30, 20, 10), target.getState(), "Item was not controlled correctly");
 
     // color (33,33,33) -> set brightness to (33,33,33)
     colorItem.setState(TupleHSB.of(33, 33, 33));
@@ -125,4 +125,25 @@ public class ControllingItemTest {
     item.enableSendState();
     return item;
   }
+
+
+  @Test
+  public void testCircularControlling() {
+    ModelAndItem mai = TestUtils.createModelAndItem(0, true);
+    NumberItem item1 = mai.item;
+    NumberItem item2 = TestUtils.addItemTo(mai.model, 4, true);
+    item1.addControlling(item2);
+    item2.addControlling(item1);
+
+    assertEquals(0, item1.getState(), DELTA);
+    assertEquals(4, item2.getState(), DELTA);
+
+    item1.setState(5);
+    assertEquals(5, item1.getState(), DELTA, "Item was not controlled correctly");
+    assertEquals(5, item2.getState(), DELTA, "Item was not controlled correctly");
+
+    item2.setState(3);
+    assertEquals(3, item1.getState(), DELTA, "Item was not controlled correctly");
+    assertEquals(3, item2.getState(), DELTA, "Item was not controlled correctly");
+  }
 }
diff --git a/eraser-base/src/test/resources/tests/ppc4/input.eraser b/eraser-base/src/test/resources/tests/ppc4/input.eraser
index 8687f881951aa3bc8766e209a87432a235e2a72a..5d7c299b5b794316c4dce44e97f242e5a3435388 100644
--- a/eraser-base/src/test/resources/tests/ppc4/input.eraser
+++ b/eraser-base/src/test/resources/tests/ppc4/input.eraser
@@ -9,14 +9,14 @@ Group: id="my-empty-group" ;
 Color Item : id="color1" label="a Color Item" state="1,2,3" topic="item/hsb/color1/state";
 DateTime Item : id="datetime1" label="a DateTime Item" state="1543415826" topic="item/date/datetime1/state";
 Contact Item : id="contact1" label="a Contact Item" state="CLOSED" topic="item/bool/contact1/state";
-Dimmer Item : id="dimmer1" label="a Dimmer Item" state="123" topic="item/double/dimmer1/state" controls=["color1", "datetime1"];
-Image Item : id="image1" label="an Image Item" state="def" topic="item/str/image1/state" controls=[];
+Dimmer Item : id="dimmer1" label="a Dimmer Item" state="123" topic="item/double/dimmer1/state";
+Image Item : id="image1" label="an Image Item" state="def" topic="item/str/image1/state" ;
 Location Item : id="location1" label="a Location Item" state="ghi" topic="item/str/location1/state";
-Number Item : id="number1" label="a Number Item" state="456" topic="item/double/number1/state" controls=["string1"];
+Number Item : id="number1" label="a Number Item" state="456" topic="item/double/number1/state" ;
 Player Item : id="player1" label="a Player Item" state="jkl" topic="item/str/player1/state";
 RollerShutter Item : id="rollerShutter1" label="a RollerShutter Item" state="0" topic="item/str/rs1/state";
 Activity Item: id="activity";
 String Item : id="string1" label="a String Item" state="mno" topic="item/str/string1/state";
-Switch Item : id="switch1" label="a Switch Item" state="true" topic="item/bool/switch1/state" controls=["rollerShutter1"];
+Switch Item : id="switch1" label="a Switch Item" state="true" topic="item/bool/switch1/state";
 Item : id="default1" label="a Default Item" state="pqr" topic="item/str/default1/state";
 Influx: host="localhost" ;
diff --git a/eraser-base/src/test/resources/tests/ppc4/output.eraser b/eraser-base/src/test/resources/tests/ppc4/output.eraser
index d4934300c2f7e3c0c8be65bf4f4932bbc4b7be52..4f22e2e26a56180066d1370a6dda13d695d16b3e 100644
--- a/eraser-base/src/test/resources/tests/ppc4/output.eraser
+++ b/eraser-base/src/test/resources/tests/ppc4/output.eraser
@@ -4,13 +4,13 @@ Image Item: id="image1" label="an Image Item" state="def" topic="item/str/image1
 Location Item: id="location1" label="a Location Item" state="ghi" topic="item/str/location1/state" ;
 DateTime Item: id="datetime1" label="a DateTime Item" state="1970-01-18T20:43:35.826Z" topic="item/date/datetime1/state" ;
 Item: id="default1" label="a Default Item" state="pqr" topic="item/str/default1/state" ;
-Dimmer Item: id="dimmer1" label="a Dimmer Item" state="123.0" topic="item/double/dimmer1/state" controls=["color1", "datetime1"] ;
+Dimmer Item: id="dimmer1" label="a Dimmer Item" state="123.0" topic="item/double/dimmer1/state" ;
 Player Item: id="player1" label="a Player Item" state="jkl" topic="item/str/player1/state" ;
-Number Item: id="number1" label="a Number Item" state="456.0" topic="item/double/number1/state" controls=["string1"] ;
+Number Item: id="number1" label="a Number Item" state="456.0" topic="item/double/number1/state" ;
 RollerShutter Item: id="rollerShutter1" label="a RollerShutter Item" state="0.0" topic="item/str/rs1/state" ;
 Activity Item: id="activity" ;
 String Item: id="string1" label="a String Item" state="mno" topic="item/str/string1/state" ;
-Switch Item: id="switch1" label="a Switch Item" state="ON" topic="item/bool/switch1/state" controls=["rollerShutter1"] ;
+Switch Item: id="switch1" label="a Switch Item" state="ON" topic="item/bool/switch1/state" ;
 Group: id="my-first-group" items=["color1", "contact1", "image1", "location1"] aggregation="AND" ("ON", "OFF") ;
 Group: id="my-second-group" items=["datetime1", "default1"] ;
 Group: id="my-third-group" items=["dimmer1", "player1"] ;
diff --git a/eraser-base/src/test/resources/tests/ppc5/input.eraser b/eraser-base/src/test/resources/tests/ppc5/input.eraser
index 21cc14bc796965aae71d2bca119f60b0cdf640c5..194cc284c08bf3c0f8c44a50dec9d22d8d3aedc5 100644
--- a/eraser-base/src/test/resources/tests/ppc5/input.eraser
+++ b/eraser-base/src/test/resources/tests/ppc5/input.eraser
@@ -11,7 +11,7 @@ Group: items=["min-item", "max-item"] id="max-group" groups=["min-group"] aggreg
 
 Number Item: id="min-item" ; // state will be set to default value
 Switch Item: topic="items/max"
- controls=["min-item"] id="max-item" state="true" label="Item with all members set" category="not used"
+ id="max-item" state="true" label="Item with all members set" category="not used"
  metaData={"one":"true", "zero":"false"} ;
 
 // Parameters will get sorted alphabetically in output
diff --git a/eraser-base/src/test/resources/tests/ppc5/output.eraser b/eraser-base/src/test/resources/tests/ppc5/output.eraser
index 5498db37c271084736a1be692b318f92ab2c5b5e..82738395874c5951e61078f4fb386998d1d86829 100644
--- a/eraser-base/src/test/resources/tests/ppc5/output.eraser
+++ b/eraser-base/src/test/resources/tests/ppc5/output.eraser
@@ -1,7 +1,7 @@
 Thing: id="min-thing" type="min-thing-type" ;
 Thing: id="max-thing" label="Max Thing" type="max-thing-type" channels=["min-channel", "max-channel"] ;
 Number Item: id="min-item" state="0.0" ;
-Switch Item: id="max-item" label="Item with all members set" state="ON" category="not used" topic="items/max" controls=["min-item"] metaData={"one":"true", "zero":"false"} ;
+Switch Item: id="max-item" label="Item with all members set" state="ON" category="not used" topic="items/max" metaData={"one":"true", "zero":"false"} ;
 Group: id="min-group" ;
 Group: id="max-group" groups=["min-group"] items=["min-item", "max-item"] aggregation="AND" ("one", "two") ;
 ThingType: id="min-thing-type" ;
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 c646b0e5fe74e09998894767e12f249158f6fbd4..3427804342d059baa96f933f9781d7bdf356501a 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
@@ -241,9 +241,7 @@ public class Application {
     return SimpleItem.of(item.getID(),
         item.getLabel(),
         item.getTopic() != null ? item.getTopic().getTopicString() : null,
-        item.isFrozen(),
         item.isSendState(),
-        item.getControllingList().stream().map(Item::getID).collect(Collectors.toList()),
         wrapMetaData(item.getMetaDataList()));
   }
 
diff --git a/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/SimpleItem.java b/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/SimpleItem.java
index 2eac624367215c547ef4cfe0058fdcce337062fa..dd55f9b4dee0710b98865e2109d17ffbc48bcc37 100644
--- a/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/SimpleItem.java
+++ b/eraser.spark/src/main/java/de/tudresden/inf/st/eraser/spark/SimpleItem.java
@@ -15,8 +15,6 @@ public class SimpleItem {
   public final String ID;
   public final String label;
   public final String topic;
-  public final boolean frozen;
   public final boolean sendState;
-  public final List<String> controlling;
   public final Map<String, String> metaData;
 }
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 1ea42c30dbce19cb979dfa4d19f8c52ae5cbf16e..3b0501e31c1f7fa4ca849ff3b087aa9361f4666e 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
@@ -31,7 +31,7 @@ public class ExecuteImplTest {
     lamp.enableSendState();
     TestUtils.getDefaultGroup(model).addItem(lamp);
 
-    numberItem.addControlling(lamp);
+    numberItem.synchronizeWith(lamp);
 
     Execute execute = new ExecuteImpl();
     execute.setKnowledgeBase(model.getRoot());
@@ -62,7 +62,7 @@ public class ExecuteImplTest {
     lamp.enableSendState();
     TestUtils.getDefaultGroup(model).addItem(lamp);
 
-    button.addControlling(lamp);
+    button.synchronizeWith(lamp);
 
     Execute execute = new ExecuteImpl();
     execute.setKnowledgeBase(model.getRoot());
@@ -103,10 +103,10 @@ public class ExecuteImplTest {
     lamp.enableSendState();
     TestUtils.getDefaultGroup(model).addItem(lamp);
 
-    lamp.addControlledBy(numberItem);
-    lamp.addControlledBy(stringItem);
-    lamp.addControlledBy(booleanItem);
-    lamp.addControlledBy(colorItem);
+    lamp.synchronizeWith(numberItem);
+    lamp.synchronizeWith(stringItem);
+    lamp.synchronizeWith(booleanItem);
+    lamp.synchronizeWith(colorItem);
 
     Execute execute = new ExecuteImpl();
     execute.setKnowledgeBase(model.getRoot());