diff --git a/solutions/RSync/src/main/scala/org/rosi_project/example/ExampleAml.scala b/solutions/RSync/src/main/scala/org/rosi_project/example/ExampleAml.scala
deleted file mode 100644
index e8918e397022392b726fa06c9c2b20eacfe6e4b0..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/scala/org/rosi_project/example/ExampleAml.scala
+++ /dev/null
@@ -1,421 +0,0 @@
-package org.rosi_project.example
-
-
-object ExampleAml extends App {
-  
-  /*val amlView = AmlanguageView.getNewView()
-  
-  //Prototypes
-  val sucStack = amlView.createSystemUnitClass("Stack", "9")
-  val sucCrane = amlView.createSystemUnitClass("Crane", "10")
-  val sucRamp = amlView.createSystemUnitClass("Rampe", "11")
-  
-  //System model
-  val ihPpu = amlView.createInstanceHierarchy("PPU", "1")
-  val ieStack1 = amlView.createInternalElement("Stack1", "2")
-  val ieCrane2 = amlView.createInternalElement("Crane2", "7")
-  val ieRamp3 = amlView.createInternalElement("Ramp3", "8")
-  val ieConveyor1 = amlView.createInternalElement("Conveyor1", "4")
-  val ieStore1 = amlView.createInternalElement("Store1", "5")
-  val ieSensor1 = amlView.createInternalElement("Sensor1", "6")
-  val attWeigth = amlView.createAttribute("50", "weigth", "3")
-  
-  ihPpu.addInternalElements(ieStack1)
-  ihPpu.addInternalElements(ieCrane2)
-  ihPpu.addInternalElements(ieRamp3)  
-  ieStack1.addInternalElements(ieConveyor1)
-  ieStack1.addInternalElements(ieStore1)
-  ieStack1.addAttributes(attWeigth)  
-  ieStore1.addInternalElements(ieSensor1)
-  
-  //connect prototyp and system model
-  ieStack1.setBaseSystemUnit(sucStack)
-  ieCrane2.setBaseSystemUnit(sucCrane)
-  ieRamp3.setBaseSystemUnit(sucRamp)
-    
-  //amlView.printViewRoles()
-  
-  //val ieSensor2 = amlView.createInternalElement("Sensor2", "12")
-  //ieStack1.addInternalElements(ieSensor2)
-  
-  //runAllQueries()
-  runAllViewQueries()
-  
-  def runAllViewQueries() {
-    //Query testing
-    query_1()
-    query_2()
-    query_3()
-    query_4()
-    query_5()
-    query_6()
-    query_7()
-    query_8()
-  }
-  
-  def runAllQueries() {
-    //Query testing
-    query1()
-    query2()
-    query3()
-    query4()
-    query5()
-    query6()
-    query7()
-    query8()
-  }
-  
-  /**
-   * Search for all objects that inherit from the CAEXObject.
-   */
-  def query1(): Unit = {
-    //Query Objects
-    val q1 = new Query("Q1")
-    val co = new HelperCAEXObject("", "") //laufe über alle naturals im RSUM und suche, die die davon instanzen sind
-    
-    //Query Roles & Settings
-    val r0 = q1.addQueryRole(co)
-    r0.label = "CO"
-    
-    println(q1)
-    println(q1.runQuery())
-  }
-  
-  def query1Dot1(): Unit = {
-    //Query Objects
-    val q11 = new Query("Q1.1")
-    val suc = new SystemUnitClass("SUC", "13")
-    
-    //Query Roles & Settings
-    val r0 = q11.addQueryRole(suc)
-    r0.label = "SUC"    
-    
-    println(q11)
-    println(q11.runQuery())
-  }
-  
-  /**
-   * Search for internal elements with special attribute properties.
-   */
-  def query2(): Unit = {
-    //Query Objects
-    val q2 = new Query("Q2")
-    val ie = new InternalElement("", "")
-    val att = new Attribute("50", "weigth", "")
-    val ieRatt = new SystemUnitClassAttributesAttribute(ie, att)
-    ieRatt.internalInitialize()
-    
-    //Query Roles & Settings
-    val r0 = q2.addQueryRole(ie)
-    r0.label = "IE"
-    val r1 = q2.addQueryRole(att)
-    r1.addAttributeFilter("name", "weigth", CheckingOption.equalsCheck)
-    r1.addAttributeFilter("value", "49", CheckingOption.biggerThan)
-    r1.label = "ATT"
-    val r2 = q2.addQueryRole(ieRatt)
-    
-    println(q2)
-    println(q2.runQuery())
-  }
-  
-  /**
-   * Searches for all childs of the "PPU" element
-   */
-  def query3(): Unit = {
-    //Query Objects
-    val q3 = new Query("Q3")
-    val ih = new InstanceHierarchy("PPU","")
-    val ie = new InternalElement("", "")
-    val ihRie = new InstanceHierarchyInternalElementsInternalElement(ih, ie)
-    ihRie.internalInitialize()
-    
-    //Query Roles & Settings
-    val r0 = q3.addQueryRole(ie)
-    r0.label = "IE"
-    val r1 = q3.addQueryRole(ih)
-    r1.addAttributeFilter("name", "PPU", CheckingOption.equalsCheck)
-    r1.label = "IH"
-    r1.returned = false
-    val r2 = q3.addQueryRole(ihRie)
-    
-    println(q3)
-    println(q3.runQuery())
-  }  
-  
-  /**
-   * Searches all "PPU" elements with 2 deep childs.
-   */
-  def query4(): Unit = {
-    //Query Objects
-    val q4 = new Query("Q4")
-    val ih = new InstanceHierarchy("PPU","") //wie kann ich auf die eigenschaften und werte prüfen
-    val ie1 = new InternalElement("", "")
-    val ie2 = new InternalElement("", "")
-    val ihRie = new InstanceHierarchyInternalElementsInternalElement(ih, ie1)
-    val ieRie = new SystemUnitClassInternalElementsInternalElement(ie1, ie2)
-    ihRie.internalInitialize()
-    ieRie.internalInitialize()
-    
-    //Query Roles & Settings
-    val r0 = q4.addQueryRole(ie1)
-    r0.label = "IE1"
-    val r1 = q4.addQueryRole(ie2)
-    r1.label = "IE2"
-    val r2 = q4.addQueryRole(ih)
-    r2.addAttributeFilter("name", "PPU", CheckingOption.equalsCheck)
-    r2.label = "IH"
-    r2.returned = false
-    val r3 = q4.addQueryRole(ihRie)
-    val r4 = q4.addQueryRole(ieRie)
-    
-    println(q4)
-    println(q4.runQuery())
-  }
-  
-  /**
-   * Searches for all internal elements of the
-   * PPU instance hierarchy. Make transitive closure.
-   */
-  def query5(): Unit = {
-    //Query Objects
-    val q5 = new Query("Q5")
-    val ih = new InstanceHierarchy("PPU","") //wie kann ich auf die eigenschaften und werte prüfen
-    val ie1 = new InternalElement("", "")
-    val ie2 = new InternalElement("", "")
-    val ihRie = new InstanceHierarchyInternalElementsInternalElement(ih, ie1)
-    val ieRie = new SystemUnitClassInternalElementsInternalElement(ie1, ie2)
-    ihRie.internalInitialize()
-    ieRie.internalInitialize()
-    
-    //Query Roles & Settings
-    val r0 = q5.addQueryRole(ie1)
-    r0.label = "IE1"
-    val r1 = q5.addQueryRole(ie2)
-    r1.label = "IE2"
-    r1.transitive = true
-    val r2 = q5.addQueryRole(ih)
-    r2.addAttributeFilter("name", "PPU", CheckingOption.equalsCheck)
-    r2.label = "IH"
-    r2.returned = false
-    val r3 = q5.addQueryRole(ihRie)
-    val r4 = q5.addQueryRole(ieRie)
-    
-    println(q5)
-    println(q5.runQuery())
-  }
-  
-  /**
-   * Get all leave nodes.
-   */
-  def query6(): Unit = {
-    //Query Objects
-    val q6 = new Query("Q6")
-    val ie1 = new InternalElement("", "")
-    val ie2 = new InternalElement("", "")
-    val ieRie = new SystemUnitClassInternalElementsInternalElement(ie1, ie2)
-    ieRie.internalInitialize()
-    
-    //Query Roles & Settings
-    val r0 = q6.addQueryRole(ie1)
-    r0.label = "IE1"
-    val r1 = q6.addQueryRole(ie2)
-    r1.label = "IE2"
-    r1.negated = true
-    val r2 = q6.addQueryRole(ieRie)
-    
-    println(q6)
-    println(q6.runQuery())
-  }
-  
-  /**
-   * Selects all internal elements that refer 
-   * to a system unit class (SUC) named “Stack”.
-   */
-  def query7(): Unit = {
-    //Query Objects
-    val q7 = new Query("Q7")
-    val suc = new SystemUnitClass("Stack", "")
-    val ie = new InternalElement("", "")
-    val ieRsuc = new  InternalElementBaseSystemUnitSystemUnitClass(ie, suc)
-    ieRsuc.internalInitialize()
-    
-    //Query Roles & Settings
-    val r0 = q7.addQueryRole(ie)
-    r0.label = "IE"
-    val r1 = q7.addQueryRole(suc)
-    r1.addAttributeFilter("name", "Stack", CheckingOption.equalsCheck)
-    r1.label = "SUC"
-    r1.returned = false
-    val r2 = q7.addQueryRole(ieRsuc)
-    
-    println(q7)
-    println(q7.runQuery())
-  }
-  
-  /**
-   * Searches for all internal elements, 
-   * which have more than two internal element as direct child
-   */
-  def query8(): Unit = {
-    //Query Objects
-    val q8 = new Query("Q8")
-    val ie1 = new InternalElement("", "")
-    val ie2 = new InternalElement("", "")
-    val ieRie = new SystemUnitClassInternalElementsInternalElement(ie1, ie2)
-    ieRie.internalInitialize()
-    
-    //Query Roles & Settings
-    val r0 = q8.addQueryRole(ie1)
-    r0.label = "IE1"
-    val r1 = q8.addQueryRole(ie2)
-    r1.label = "IE2"
-    r1.multi = 3 //means >= 3
-    val r2 = q8.addQueryRole(ieRie)
-    
-    println(q8)
-    println(q8.runQuery())
-  }
-  
-  def query_1(): Unit = {
-    //Query Objects
-    val q = new AmlanguageQuery
-    val co = q.createCAEXObject()
-    
-    //Settings
-    co.getQueryObject.label = "CO"    
-        
-    println(q.getQuery())
-    println(q.getQuery().runQuery())
-  }
-  
-  def query_2(): Unit = {
-    //Query Objects
-    val q = new AmlanguageQuery
-    val ie = q.createInternalElement()
-    val att = q.createAttribute()
-    ie.addAttributes(att)
-    
-    //Settings
-    ie.getQueryObject.label = "IE"
-    att.getQueryObject.label = "ATT"
-    att.setValueView("49", CheckingOption.biggerThan)
-    att.setNameView("weigth", CheckingOption.equalsCheck)
-    //att.getQueryObject().addAttributeFilter("name", "weigth", CheckingOption.equalsCheck)
-    //att.getQueryObject().addAttributeFilter("value", "49", CheckingOption.biggerThan)
-    
-    println(q.getQuery())
-    println(q.getQuery().runQuery())
-  }
-  
-  def query_3(): Unit = {
-    //Query Objects
-    val q = new AmlanguageQuery
-    val ih = q.createInstanceHierarchy()
-    val ie = q.createInternalElement()
-    ih.addInternalElements(ie)
-    
-    //Settings
-    ie.getQueryObject.label = "IE"
-    ih.getQueryObject.label = "IH"
-    ih.setNameView("PPU", CheckingOption.equalsCheck)
-    //ih.getQueryObject().addAttributeFilter("name", "PPU", CheckingOption.equalsCheck)
-    ih.getQueryObject.returned = false
-    
-    println(q.getQuery())
-    println(q.getQuery().runQuery())
-  }  
-  
-  def query_4(): Unit = {
-    //Query Objects
-    val q = new AmlanguageQuery
-    val ih = q.createInstanceHierarchy()
-    val ie1 = q.createInternalElement()
-    val ie2 = q.createInternalElement()
-    ih.addInternalElements(ie1)
-    ie1.addInternalElements(ie2)
-    
-    //Settings
-    ie1.getQueryObject.label = "IE1"
-    ie2.getQueryObject.label = "IE2"
-    ih.getQueryObject.label = "IH"
-    ih.setNameView("PPU", CheckingOption.equalsCheck)
-    //ih.getQueryObject().addAttributeFilter("name", "PPU", CheckingOption.equalsCheck)
-    ih.getQueryObject.returned = false
-    
-    println(q.getQuery())
-    println(q.getQuery().runQuery())
-  }
-  
-  def query_5(): Unit = {
-    //Query Objects
-    val q = new AmlanguageQuery
-    val ih = q.createInstanceHierarchy()
-    val ie1 = q.createInternalElement()
-    val ie2 = q.createInternalElement()
-    ih.addInternalElements(ie1)
-    ie1.addInternalElements(ie2)
-    
-    //Settings
-    ie1.getQueryObject.label = "IE1"
-    ie2.getQueryObject.label = "IE2"
-    ie2.getQueryObject.transitive = true
-    ih.getQueryObject.label = "IH"
-    ih.setNameView("PPU", CheckingOption.equalsCheck)
-    //ih.getQueryObject().addAttributeFilter("name", "PPU", CheckingOption.equalsCheck)
-    ih.getQueryObject.returned = false
-    
-    println(q.getQuery())
-    println(q.getQuery().runQuery())
-  }
-  
-  def query_6(): Unit = {
-    //Query Objects
-    val q = new AmlanguageQuery
-    val ie1 = q.createInternalElement()
-    val ie2 = q.createInternalElement()
-    ie1.addInternalElements(ie2)
-    
-    //Settings
-    ie1.getQueryObject.label = "IE1"
-    ie2.getQueryObject.label = "IE2"
-    ie2.getQueryObject.negated = true
-    
-    println(q.getQuery())
-    println(q.getQuery().runQuery())
-  }
-  
-  def query_7(): Unit = {
-    //Query Objects
-    val q = new AmlanguageQuery
-    val suc = q.createSystemUnitClass()
-    val ie = q.createInternalElement()
-    ie.setBaseSystemUnit(suc)
-    
-    //Settings
-    ie.getQueryObject.label = "IE"
-    suc.getQueryObject.label = "SUC"
-    suc.setNameView("Stack", CheckingOption.equalsCheck)
-    //suc.getQueryObject().addAttributeFilter("name", "Stack", CheckingOption.equalsCheck)
-    suc.getQueryObject.returned = false
-    
-    println(q.getQuery())
-    println(q.getQuery().runQuery())
-  }
-  
-  def query_8(): Unit = {
-    //Query Objects
-    val q = new AmlanguageQuery
-    val ie1 = q.createInternalElement()
-    val ie2 = q.createInternalElement()
-    ie1.addInternalElements(ie2)
-    
-    //Settings
-    ie1.getQueryObject.label = "IE1"
-    ie2.getQueryObject.label = "IE2"
-    ie2.getQueryObject.multi = 3 //means >= 3
-    
-    println(q.getQuery())
-    println(q.getQuery().runQuery())
-  }*/
-  
-}
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/example/ExampleRSUM.scala b/solutions/RSync/src/main/scala/org/rosi_project/example/ExampleRSUM.scala
deleted file mode 100644
index 1eb865f5dcfd315a496ccb7cac81242c1b0ecd29..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/scala/org/rosi_project/example/ExampleRSUM.scala
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.rosi_project.example
-
-object ExampleRSUM extends App {
-  
-  /*var generatedView: LibraryView = LibraryView.getNewView()
-  var libi = generatedView.createLibrary("City Library")
-  generatedView.printViewRoles()
-  println(libi.getNameView())
-  
-  println("%%%%%%%%%%%%%%%%%%%%%% Add views to lists %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-    
-  //RsumCompartment.addViewTypeInfo(CompleteView)
-  //RsumCompartment.addViewTypeInfo(EmployeesManagerView)
-  //RsumCompartment.addViewTypeInfo(LibrariesEmployeesView)
-    
-  println("%%%%%%%%%%%%%%%%%%%%%% Create a view with all data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-
-  var view: CompleteView = CompleteView.getNewView()
-    
-  println("%%%%%%%%%%%%%%%%%%%%%% Create elements in the view %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-
-  var libRole = view.createLibrary("City Library")
-  var empRole = view.createEmployee("Bill", "Smith", 45000)
-  var manRole = view.createEmployee("Bob", "Jones", 60000)
-  libRole.addEmployee(empRole)
-  empRole.setManager(manRole)
-  
-  println(libRole.getNameView())
-  
-  view.printViewRoles()
-    
-  var list = view.getAllViewElements
-    
-  println("Test1 " + view.getElementsWithClassName("LibraryRole"))
-  println("Test2 " + view.getElementsWithExample(empRole))
-  println("Test3 " + view.getMapOfElements())
-        
-  //view.printViewRoles()
-
-  println("%%%%%%%%%%%%%%%%%%%%%% Activate other views %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-
-  var view2: EmployeesManagerView = EmployeesManagerView.getNewView()
-  var view3: LibrariesEmployeesView = LibrariesEmployeesView.getNewView()
-
-  view.printViewRoles()
-  view2.printViewRoles()
-  view3.printViewRoles()
-
-  println("%%%%%%%%%%%%%%%%%%%%%% Create a new relation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-
-  libRole.addEmployee(manRole)
-
-  println("%%%%%%%%%%%%%%%%%%%%%% Change the name of an employee in a view %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-
-  empRole.setFirstNameView("Max")
-
-  view.printViewRoles()
-  view2.printViewRoles()
-  view3.printViewRoles()
-
-  //println("%%%%%%%%%%%%%%%%%%%%%% Print status %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-  //RsumCompartment.printStatus()
-
-  println("%%%%%%%%%%%%%%%%%%%%%% Remove an employee %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-
-  //libRole.deleteElement()
-  empRole.deleteElement()
-  //manRole.deleteElement()
-  //hasMan.deleteElement()
-  //hasEmp2.deleteElement()
-
-  //println("%%%%%%%%%%%%%%%%%%%%%% Print status %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-  //RsumCompartment.printStatus()
-
-  view.printViewRoles()
-  view2.printViewRoles()
-  view3.printViewRoles()*/
-}
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/example/ModelJoinExample.scala b/solutions/RSync/src/main/scala/org/rosi_project/example/ModelJoinExample.scala
deleted file mode 100644
index ddfca7f6488e233a7ab8f58af85b5d3309748c7c..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/scala/org/rosi_project/example/ModelJoinExample.scala
+++ /dev/null
@@ -1,124 +0,0 @@
-package org.rosi_project.example
-
-object ModelJoinExample extends App {
-    
-  /*println("%%%%%%%%%%%%%%%%%%%%%% Create new views %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-  
-  var eclipseView = EclipselibraryView.getNewView()
-  var imdbView = ImdbdatabaseView.getNewView()
-  
-  println("%%%%%%%%%%%%%%%%%%%%%% Add joinable filmes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-  
-  var avaFilmRole = imdbView.createFilm(2013, "Avatar Aufbruch nach Pandory")
-  var avaVideoRole = eclipseView.createVideoCassette(false, 230, "Avatar Aufbruch nach Pandory", new Date())
-  var dwFilmRole = imdbView.createFilm(2018, "Death Wish")
-  var asterViedeoRole = eclipseView.createVideoCassette(false, 90, "Asterix erobert Rom", new Date())
-  
-  println(avaVideoRole.getTitleView())
-  
-  eclipseView.printViewRoles()
-  imdbView.printViewRoles()
-  RsumCompartment.printStatus
-  
-  println("%%%%%%%%%%%%%%%%%%%%%% Add the join view %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-  
-  var joinView = JoinEclipseImdbView.getNewView()
-    
-  eclipseView.printViewRoles()
-  imdbView.printViewRoles()
-  joinView.printViewRoles()
-  RsumCompartment.printStatus
-  
-  println("%%%%%%%%%%%%%%%%%%%%%% Test Println Options for variables %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-  joinView.getElementsWithClassName("JoinMovieRole").foreach(r => {
-    val movie = r.asInstanceOf[JoinEclipseImdbView#JoinMovieRole]
-    println(movie.getTitleView())
-    println(movie.getDamagedView())
-    println(movie.getMinutesLengthView())
-  })
-  
-  println("%%%%%%%%%%%%%%%%%%%%%% Remove Avatar in the Join View %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-  
-  joinView.getElementsWithClassName("JoinMovieRole").foreach(r => {
-    val movie = r.asInstanceOf[JoinEclipseImdbView#JoinMovieRole]
-    if (movie.getTitleView() == "Avatar Aufbruch nach Pandory") {
-      movie.deleteElement()
-    }
-  })
-  
-  eclipseView.printViewRoles()
-  imdbView.printViewRoles()
-  joinView.printViewRoles()
-  RsumCompartment.printStatus
-  
-  println("%%%%%%%%%%%%%%%%%%%%%% Add Death Wish in video view %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-  
-  var dwVideoRole = eclipseView.createVideoCassette(true, 98, "Death Wish", new Date())
-  
-  eclipseView.printViewRoles()
-  imdbView.printViewRoles()
-  joinView.printViewRoles()
-  RsumCompartment.printStatus  
-    
-  println("%%%%%%%%%%%%%%%%%%%%%% Create elements in the view %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-
-  var movieRole = joinView.createMovie(1979, "Star Trek I", false, 132, new Date())
-  //var movie2Role = joinView.createMovie(1996, "Star Trek VIII", false, 111, new Date())
-  var filmRole = imdbView.createFilm(1994, "Star Trek VII")
-  
-  println("Year: " + movieRole.getYearView())
-  println("Minutes: " + movieRole.getMinutesLengthView())
-  println("Title: " + movieRole.getTitleView())
-  
-  var list = joinView.getAllViewElements
-        
-  eclipseView.printViewRoles()
-  imdbView.printViewRoles()
-  joinView.printViewRoles()
-  RsumCompartment.printStatus
-
-  println("%%%%%%%%%%%%%%%%%%%%%% Add also video cassette from Star Trek VII %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-
-  var videoRole = eclipseView.createVideoCassette(false, 130, "Star Trek VII", new Date())
-  
-  eclipseView.printViewRoles()
-  joinView.printViewRoles()
-  RsumCompartment.printStatus
-  
-  println("%%%%%%%%%%%%%%%%%%%%%% Add Relations in Film view and show results in other views %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-  
-  var imdbRole = imdbView.createIMDB()
-  imdbRole.addFilms(filmRole)
-  
-  imdbView.printViewRoles()
-  joinView.printViewRoles()
-  RsumCompartment.printStatus
-  
-  println("%%%%%%%%%%%%%%%%%%%%%% Add Relations in join view and show results in other views %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-  
-  var voteRole = joinView.createVote(6)
-  movieRole.addVotes(voteRole)
-  
-  eclipseView.printViewRoles()
-  imdbView.printViewRoles()
-  joinView.printViewRoles()
-  RsumCompartment.printStatus
-
-  println("%%%%%%%%%%%%%%%%%%%%%% Change the name of Star Trek I in a view %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-
-  movieRole.setTitleView("Star Trek I The Beginning")
-
-  eclipseView.printViewRoles()
-  imdbView.printViewRoles()
-  joinView.printViewRoles()
-  RsumCompartment.printStatus
-
-  println("%%%%%%%%%%%%%%%%%%%%%% Remove the movie Start Trek I %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
-
-  movieRole.deleteElement()
-  
-  eclipseView.printViewRoles()
-  imdbView.printViewRoles()
-  joinView.printViewRoles()
-  RsumCompartment.printStatus*/
-}
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/ModelElementLists.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/ModelElementLists.scala
index 790b4f1bee16ada9d1a5d9f9a03bd69e70b78a5b..3d73de3d39ea1765cd7ad0d8304d2ecfd3647273 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/ModelElementLists.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/ModelElementLists.scala
@@ -27,7 +27,8 @@ object ModelElementLists {
     if (elementsWithClass.isEmpty) {
       elements += (obj.getClass -> Set(obj))
     } else {
-      elements += (obj.getClass -> (elementsWithClass.get ++ Set(obj)))
+      //var seti = (elementsWithClass.get ++ Set(obj))
+      elements += (obj.getClass -> (elementsWithClass.get + obj))
     }
   }
 
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/SynchronizationCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/SynchronizationCompartment.scala
index f5df559b9672dcccca4d8e8b195b4456aaa8d6fa..bd5886a849df8b2eb41a3a3e1842b13ac7d024b3 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/SynchronizationCompartment.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/SynchronizationCompartment.scala
@@ -256,7 +256,7 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
                 case _ =>
               }
 
-              //if role manager was not integrated before then integrate now
+              //if synchronization compartment was not integrated before then integrate now
               if (proof) {
                 //add new role to the player
                 //the new compartment
@@ -275,8 +275,10 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
                     val player = r.player
                     if (player.isRight) {
                       val realPlayer = player.right.get
-                      val newRole = newComp.getNextIntegrationRole(realPlayer)
-                      r play newRole
+                      if (newComp.isNextIntegration(realPlayer)) {
+                        val newRole = newComp.getNextIntegrationRole(realPlayer)
+                        r play newRole
+                      }
                     }
                   }
                   this combine newComp
@@ -397,6 +399,17 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
       null
     }
 
+    def getSetRelatedClassesFromName(name: String): Set[PlayerSync] = {
+      var resultSet: Set[PlayerSync] = Set.empty
+      getRelatedManager.foreach(rm => {
+        val realPlayer = rm.player.right.get
+        if (realPlayer.getClass.getName.contains(name) || realPlayer.getClass.getSuperclass.getName.contains(name)) {
+          resultSet += realPlayer.asInstanceOf[PlayerSync]
+        }
+      })
+      resultSet
+    }
+
     def insertNotification(): Unit = {
       //println("Insert Notification")
       +this notifyInsertion ()
@@ -418,12 +431,12 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
         println("-- Ma => Pl: " + m + " | " + m.player.right.get)
       })
     }
-    
+
     def deleteManage(value: PlayerSync): Unit = {
       val delete = activeDestructionCompartment.getDestructorForClassName(value)
       if (delete != null) {
         this play delete
-        +this deleteRoleFunction()
+        +this deleteRoleFunction ()
       }
     }
 
@@ -432,11 +445,18 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
       if (construct != null) {
         this play construct
         underConstruction = true;
-        var list = +this construct (value, this)
+        val _ = +this construct (value, this)
         underConstruction = false;
         construct.remove()
       }
     }
+
+    /**
+     * Create a relation between two IRoleManager and RoleManager of other PlayerSync instances.
+     */
+    def makePlayerSyncRelated(playerSync: PlayerSync): Unit = {
+      +playerSync makeRelated (this)
+    }
   }
 
 }
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IConstructionCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IConstructionCompartment.scala
index 9c51ea7175373c7e94dce7485b45ba91357b4d1a..9fd3371b4dd9d92a12b6bf21bd05a8131488757f 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IConstructionCompartment.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IConstructionCompartment.scala
@@ -2,25 +2,23 @@ package org.rosi_project.model_management.sync
 
 import scroll.internal.Compartment
 
-import scala.collection.mutable.ListBuffer
 import org.rosi_project.model_management.core._
 import org.rosi_project.model_management.sync.helper.ConstructionContainer
 import org.rosi_project.model_management.sync.roles.IConstructor
 
-
 /**
-  * Interface for each construction rule.
-  */
+ * Interface for each construction rule.
+ */
 trait IConstructionCompartment extends Compartment {
 
   /**
-    * Return a role instance that handles the construction process for the object.
-    */
+   * Return a role instance that handles the construction process for the object.
+   */
   def getConstructorForClassName(classname: Object): IConstructor
 
   def getRuleName: String
 
-  private def addExtensionRoles(containers: ListBuffer[ConstructionContainer]): Unit = {
+  private def addExtensionRoles(containers: Set[ConstructionContainer]): Unit = {
     containers.foreach { cc =>
       if (cc.isConstructed) {
         SynchronizationCompartment.getExtensions().foreach { e =>
@@ -33,11 +31,13 @@ trait IConstructionCompartment extends Compartment {
     }
   }
 
-  private def notifyExtensionRoles(containers: ListBuffer[ConstructionContainer]): Unit = {
-    containers.foreach { cc =>
-      if (cc.isConstructed) {
-        var playerInstance = cc.getPlayerInstance()
-        +playerInstance insertNotification()
+  private def notifyExtensionRoles(containers: Set[ConstructionContainer]): Unit = {
+    if (!SynchronizationCompartment.getExtensions().isEmpty) {
+      containers.foreach { cc =>
+        if (cc.isConstructed) {
+          var playerInstance = cc.getPlayerInstance()
+          +playerInstance insertNotification ()
+        }
       }
     }
   }
@@ -45,7 +45,7 @@ trait IConstructionCompartment extends Compartment {
   /**
    * Add the RoleManager roles from the synchronization compartment if necessary
    */
-  protected def addManagerRoles(containers: ListBuffer[ConstructionContainer]): Unit = {
+  protected def addManagerRoles(containers: Set[ConstructionContainer]): Unit = {
     containers.foreach { cc =>
       if (cc.isConstructed && !cc.isStartElement) {
         cc.getPlayerInstance play cc.getManagerInstance
@@ -56,7 +56,7 @@ trait IConstructionCompartment extends Compartment {
   /**
    * Add the delete roles for the elements in the ConstructionContainers.
    */
-  protected def addDeleteRoles(containers: ListBuffer[ConstructionContainer]): Unit = {
+  protected def addDeleteRoles(containers: Set[ConstructionContainer]): Unit = {
     containers.foreach { cc =>
       if (cc.isConstructed) {
         cc.getManagerInstance() play SynchronizationCompartment.getDestructionRule().getDestructorForClassName(cc.getPlayerInstance())
@@ -67,7 +67,7 @@ trait IConstructionCompartment extends Compartment {
   /**
    * Add the related RoleManagers for the elements in the ConstructionContainers.
    */
-  protected def addRelatedRoleManager(containers: ListBuffer[ConstructionContainer]): Unit = {
+  protected def addRelatedRoleManager(containers: Set[ConstructionContainer]): Unit = {
     containers.foreach { cc =>
       containers.foreach { inner =>
         cc.getManagerInstance.addRelatedManager(inner.getManagerInstance)
@@ -78,9 +78,9 @@ trait IConstructionCompartment extends Compartment {
   /**
    * Combine the SynchronizationCompartment with all Players from the ConstructionContainers.
    */
-  protected def synchronizeCompartments(containers: ListBuffer[ConstructionContainer]): Unit = {
+  protected def synchronizeCompartments(containers: Set[ConstructionContainer]): Unit = {
     containers.foreach { cc =>
-      if (cc.isConstructed() && !cc.isStartElement()) {        
+      if (cc.isConstructed() && !cc.isStartElement()) {
         SynchronizationCompartment combine cc.getPlayerInstance
       }
     }
@@ -89,7 +89,7 @@ trait IConstructionCompartment extends Compartment {
   /**
    * Create the Synchronization mechanisms for the elements in the ConstructionContainers.
    */
-  protected def bindSynchronizationRules(containers: ListBuffer[ConstructionContainer]): Unit = {
+  protected def bindSynchronizationRules(containers: Set[ConstructionContainer]): Unit = {
     SynchronizationCompartment.getSyncRules().foreach { s =>
       var sync: ISyncCompartment = null
       //Proof all container for integration
@@ -111,35 +111,35 @@ trait IConstructionCompartment extends Compartment {
   /**
    * Fill the test lists with all Players from the ConstructionContainers.
    */
-  protected def fillTestLists(containers: ListBuffer[ConstructionContainer]): Unit = {
+  protected def fillTestLists(containers: Set[ConstructionContainer]): Unit = {
     containers.foreach { cc =>
       ModelElementLists.addElement(cc.getPlayerInstance)
     }
   }
 
-  protected def makeCompleteConstructionProcess(containers: ListBuffer[ConstructionContainer]): Unit = {
+  protected def makeCompleteConstructionProcess(containers: Set[ConstructionContainer]): Unit = {
     //first synchronize new compartments
     //var t1 = System.nanoTime()
     this.synchronizeCompartments(containers)
     //var t2 = System.nanoTime()
-    
+
     //add role manager and relations
     this.addManagerRoles(containers)
     //var t3 = System.nanoTime()
-    this.addRelatedRoleManager(containers)    
+    this.addRelatedRoleManager(containers)
     //var t4 = System.nanoTime()
-    
+
     //binding of roles
     //this.addDeleteRoles(containers)
     this.bindSynchronizationRules(containers)
     //var t5 = System.nanoTime()
     this.addExtensionRoles(containers)
     //var t6 = System.nanoTime()
-    
+
     //notify extensions
     this.notifyExtensionRoles(containers)
     //var t7 = System.nanoTime()
-    
+
     //fill test list
     this.fillTestLists(containers)
     /*var t8 = System.nanoTime()
@@ -150,7 +150,7 @@ trait IConstructionCompartment extends Compartment {
     println("5: " + (t6 - t5))
     println("6: " + (t7 - t6))
     println("7: " + (t8 - t7))*/
-    
+
     /*println("Construction ++++++++++++++++++++++++++++++++++++++++++++------------------------++++++++++++++++++++++++++++++++++++++++++++++++++++")
     containers.foreach { cc =>
       println((cc.getPlayerInstance).roles())
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IIntegrationCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IIntegrationCompartment.scala
index 60af2c560c3459aeda870bc864827cf1d3910e3e..6ab5927310221b277d402980651b563829795b52 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IIntegrationCompartment.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IIntegrationCompartment.scala
@@ -1,7 +1,6 @@
 package org.rosi_project.model_management.sync
 
 import scroll.internal.Compartment
-import scala.collection.mutable.ListBuffer
 import org.rosi_project.model_management.sync.roles.ISyncRole
 import org.rosi_project.model_management.sync.roles.IIntegrator
 import org.rosi_project.model_management.sync.helper.IntegrationContainer
@@ -24,9 +23,9 @@ trait IIntegrationCompartment extends Compartment {
   def getRelationalIntegratorsForClassName(classname: Object): IIntegrator
 
   def finalEditFunction(): Unit
-  
+
   protected def connectTargetElementWithSourceElementes(target: PlayerSync, sourceList: Set[PlayerSync]): Unit = {
-    var containers: ListBuffer[IntegrationContainer] = ListBuffer.empty
+    var containers: Set[IntegrationContainer] = Set.empty
     //Create Containers
     sourceList.foreach(e => {
       containers += new IntegrationContainer(target, e)
@@ -34,16 +33,16 @@ trait IIntegrationCompartment extends Compartment {
     //Finish Creation
     makeCompleteIntegrationProcess(containers)
   }
-  
+
   protected def connectTargetElementWithSourceElemente(target: PlayerSync, source: PlayerSync): Unit = {
-    var containers: ListBuffer[IntegrationContainer] = ListBuffer.empty
+    var containers: Set[IntegrationContainer] = Set.empty
     //Create Container
-    containers += new IntegrationContainer(target, source)    
+    containers += new IntegrationContainer(target, source)
     //Finish Creation
     makeCompleteIntegrationProcess(containers)
   }
 
-  private def addExtensionRoles(containers: ListBuffer[IntegrationContainer]): Unit = {
+  private def addExtensionRoles(containers: Set[IntegrationContainer]): Unit = {
     containers.filter(_.newManagerConnection).foreach { cc =>
       SynchronizationCompartment.getExtensions().foreach { e =>
         var role = e.getExtensionForClassName(cc.getNewPlayerInstance())
@@ -54,17 +53,19 @@ trait IIntegrationCompartment extends Compartment {
     }
   }
 
-  private def notifyExtensionRoles(containers: ListBuffer[IntegrationContainer]): Unit = {
-    containers.filter(_.newManagerConnection).foreach { cc =>
-      var playerInstance = cc.getNewPlayerInstance()
-      +playerInstance insertNotification ()
+  private def notifyExtensionRoles(containers: Set[IntegrationContainer]): Unit = {
+    if (!SynchronizationCompartment.getExtensions().isEmpty) {
+      containers.filter(_.newManagerConnection).foreach { cc =>
+        var playerInstance = cc.getNewPlayerInstance()
+        +playerInstance insertNotification ()
+      }
     }
   }
 
   /**
    * Add Manager roles to all constructed elements.
    */
-  private def addManagerRoles(containers: ListBuffer[IntegrationContainer]): Unit = {
+  private def addManagerRoles(containers: Set[IntegrationContainer]): Unit = {
     containers.filter(_.newManagerConnection).foreach { cc =>
       cc.getNewPlayerInstance() play cc.getNewManagerInstance()
     }
@@ -73,7 +74,7 @@ trait IIntegrationCompartment extends Compartment {
   /**
    * Add the delete roles for the elements in the IntegrationContainer.
    */
-  private def addDeleteRoles(containers: ListBuffer[IntegrationContainer]): Unit = {
+  private def addDeleteRoles(containers: Set[IntegrationContainer]): Unit = {
     containers.filter(_.newManagerConnection).foreach { cc =>
       cc.getNewManagerInstance() play SynchronizationCompartment.getDestructionRule().getDestructorForClassName(cc.getNewPlayerInstance())
     }
@@ -82,22 +83,19 @@ trait IIntegrationCompartment extends Compartment {
   /**
    * Add the related RoleManagers for the elements in the IntegrationContainer.
    */
-  private def addRelatedRoleManager(containers: ListBuffer[IntegrationContainer]): Unit = {
+  private def addRelatedRoleManager(containers: Set[IntegrationContainer]): Unit = {
     containers.foreach { cc =>
+      val oldPlayer = cc.getOldPlayerInstance()
       if (cc.simpleRelatedManagerConnection) {
-        val oldPlayer = cc.getOldPlayerInstance()
         val manager: IRoleManager = +oldPlayer getManager ()
         if (manager != null) {
-          manager.addRelatedManager(cc.getNewManagerInstance())
-          cc.getNewManagerInstance().addRelatedManager(manager)
+          manager.makeRelated(cc.getNewManagerInstance())
         }
       } else {
-        val oldPlayer = cc.getOldPlayerInstance()
         val allManager: Set[IRoleManager] = +oldPlayer getAllManager ()
         if (allManager != null) {
           allManager.foreach { r =>
-            r.addRelatedManager(cc.getNewManagerInstance())
-            cc.getNewManagerInstance().addRelatedManager(r)
+            r.makeRelated(cc.getNewManagerInstance())
           }
         }
       }
@@ -107,7 +105,7 @@ trait IIntegrationCompartment extends Compartment {
   /**
    * Combine the SynchronizationCompartment with all Players from the IntegrationContainer.
    */
-  private def synchronizeCompartments(containers: ListBuffer[IntegrationContainer]): Unit = {
+  private def synchronizeCompartments(containers: Set[IntegrationContainer]): Unit = {
     containers.filter(_.newManagerConnection).foreach { cc =>
       SynchronizationCompartment combine cc.getNewPlayerInstance()
     }
@@ -116,7 +114,7 @@ trait IIntegrationCompartment extends Compartment {
   /**
    * Create the Synchronization mechanisms for the elements in the IntegrationContainer.
    */
-  private def bindSynchronizationRules(containers: ListBuffer[IntegrationContainer]): Unit = {
+  private def bindSynchronizationRules(containers: Set[IntegrationContainer]): Unit = {
     containers.filter(_.newManagerConnection).foreach { cc =>
       val oldPlayer = cc.getOldPlayerInstance()
       val allManager: Set[IRoleManager] = +oldPlayer getAllManager ()
@@ -154,7 +152,7 @@ trait IIntegrationCompartment extends Compartment {
   /**
    * Fill the test lists with all Players from the IntegrationContainer.
    */
-  private def fillTestLists(containers: ListBuffer[IntegrationContainer]): Unit = {
+  private def fillTestLists(containers: Set[IntegrationContainer]): Unit = {
     containers.filter(_.newManagerConnection).foreach { cc =>
       ModelElementLists.addElement(cc.getNewPlayerInstance())
     }
@@ -163,7 +161,7 @@ trait IIntegrationCompartment extends Compartment {
   /**
    * Do the integration process automatically.
    */
-  protected def makeCompleteIntegrationProcess(containers: ListBuffer[IntegrationContainer]): Unit = {
+  protected def makeCompleteIntegrationProcess(containers: Set[IntegrationContainer]): Unit = {
     containers.foreach(cc => {
       if (cc.getNewManagerInstance() == null) {
         val newPlayer = cc.getNewPlayerInstance()
@@ -180,7 +178,7 @@ trait IIntegrationCompartment extends Compartment {
 
     //add new role managers to the new players
     this.addManagerRoles(containers)
-    this.addDeleteRoles(containers)
+    //this.addDeleteRoles(containers)
     this.addRelatedRoleManager(containers)
     //combines the new compartments with the existing ones
     this.synchronizeCompartments(containers)
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ISyncCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ISyncCompartment.scala
index eb50d0772ddb30a5d6cc13af4d2c37936f5dad62..4b50e08618dcc668fb9c5f44e45c05ef1e7a02c4 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ISyncCompartment.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ISyncCompartment.scala
@@ -17,12 +17,15 @@ trait ISyncCompartment extends Compartment {
   /**
     * All sync roles of this synchronization rule.
     */
-  protected var syncer = Set.empty[ISyncRole]
+  private var syncer: Set[ISyncRole] = Set.empty
 
   /**
     * Get roles for all integration classes.
     */
-  protected def getNextRole(classname: Object) : ISyncRole
+  protected def getNextRole(classname: Object) : ISyncRole = {
+    getFirstRole(classname)
+  }
+  
   /**
     * Get roles for integration classes. Should give less roles than getNextRole.
     */
@@ -30,13 +33,10 @@ trait ISyncCompartment extends Compartment {
   
   def containsSyncer(value: Object): Boolean = {
     syncer.foreach { s =>
-      //println("Equals: " + s.player + " " + value.player)
-      //TODO: das hier muss cleaner werden
-      if (s.player.equals(value.player)) {
-        //println("++Equals true")
+      if (+s == +value) {
+      //if (s.player.equals(value.player)) {
         return true;
       }
-      //println("++Equals false")
     }
     return false
   }
@@ -54,7 +54,7 @@ trait ISyncCompartment extends Compartment {
     * Clear the list of all sync roles.
     */
   def clearSyncer(): Unit = {
-    syncer = Set.empty[ISyncRole]
+    syncer = Set.empty
   }
 
   /**
@@ -85,7 +85,9 @@ trait ISyncCompartment extends Compartment {
   /**
     * Get boolean if next integration
     */
-  def isNextIntegration(classname: Object): Boolean
+  def isNextIntegration(classname: Object): Boolean = {
+    isFirstIntegration(classname)
+  }
 
   /**
     * Create a new instance of this class.
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/GeneralDestructor.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/GeneralDestructor.scala
index 68e051af58a24827a55e381624326d5cd8b9fea4..b9a0db9ee0ea770967801e613c4cdf0afd018d15 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/GeneralDestructor.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/GeneralDestructor.scala
@@ -15,19 +15,45 @@ object GeneralDestructor extends IDestructionCompartment {
   override def getDestructorForClassName(classname: Object): IDestructor = new DeleteRole
 
   override def getRuleName: String = "GeneralDestructor"
-
+  
   class DeleteRole() extends IDestructor {
 
     def deleteRoleFunction(): Unit = {
-      //println("##Delete roles and related from Player: " + this.player)
+      //remove this manager from all related ones
+      +this removeThisManager()
+      //clear list of related manager
+      +this clearRelatedManager()
+      //send notification about deletion
+      +this deletionNotification()
+
+      //delete all roles this element has
+      val player = this.player
+      if (player.isRight) {
+        val test: PlayerSync = player.right.get.asInstanceOf[PlayerSync]
+        ModelElementLists.removeElement(test)
+        val roles = test.roles()
+        roles.foreach { r =>
+          r.remove()
+        }
+      }
+    }
+  }
 
+  class DeleteRoleAndConnections() extends IDestructor {
+
+    def deleteRoleFunction(): Unit = {
+      //get the list of related manager
       var relatedManagers: Set[IRoleManager] = (+this).getRelatedManager()
+      
+      //clear all lists from the related managers
       (+this).clearListsOfRelatedManager()
 
+      //delete also all related elements
       relatedManagers.foreach { m =>
         (+m).deleteObjectFromSynchro()
       }
 
+      //send notification about deletion
       (+this).deletionNotification()
 
       //clear now the related manager list
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/SuppressingConstructionCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/SuppressingConstructionCompartment.scala
index caa0df04652e27b4bce8530d1f40f7036817fc20..987002f50668715d97792f84bc04a3a80b65d562 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/SuppressingConstructionCompartment.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/SuppressingConstructionCompartment.scala
@@ -22,7 +22,7 @@ object SuppressingConstructionCompartment extends IConstructionCompartment {
     override def construct(comp: PlayerSync, man: IRoleManager): Unit = {
       // just set up the player
       createContainerElement(start=true, con=true, comp, man)
-      SuppressingConstructionCompartment.this.makeCompleteConstructionProcess(containers)
+      makeCompleteConstructionProcess(containers)
     }
 
   }
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IConstructor.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IConstructor.scala
index 9f3725007b57b2d47c1ba79b1722fefd13c7667f..dcfacf14b08c5ab1ef88f8fea30729b9f2a0c615 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IConstructor.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IConstructor.scala
@@ -2,7 +2,6 @@ package org.rosi_project.model_management.sync.roles
 
 import org.rosi_project.model_management.core.PlayerSync
 import org.rosi_project.model_management.sync.helper.ConstructionContainer
-import scala.collection.mutable.ListBuffer
 
 /**
   * Interface for the constructor roles.
@@ -12,7 +11,7 @@ trait IConstructor {
   /**
     * Container list for the construction process.
     */
-  protected var containers: ListBuffer[ConstructionContainer] = ListBuffer[ConstructionContainer]()
+  protected var containers: Set[ConstructionContainer] = Set.empty
 
   /**
     * Create a container element with the incoming configuration.
@@ -20,8 +19,7 @@ trait IConstructor {
   protected def createContainerElement(start: Boolean, con: Boolean, play: PlayerSync, man: IRoleManager): Unit = {
     if (play == null)
       return
-    var cc = new ConstructionContainer(start, con, play, man)
-    containers += cc
+    containers += new ConstructionContainer(start, con, play, man)
   }
 
   /**
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IIntegrator.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IIntegrator.scala
index 4431f99e9c3fdf5aae998338640e596830fa72a9..33336c02a0847116fa16386734b58c23364ff44e 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IIntegrator.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IIntegrator.scala
@@ -1,6 +1,5 @@
 package org.rosi_project.model_management.sync.roles
 
-import scala.collection.mutable.ListBuffer
 import org.rosi_project.model_management.sync.helper.IntegrationContainer
 import org.rosi_project.model_management.core.PlayerSync
 import org.rosi_project.model_management.core.SynchronizationCompartment
@@ -13,16 +12,15 @@ trait IIntegrator {
   /**
    * Container list for the integration process.
    */
-  protected var containers = ListBuffer[IntegrationContainer]()
+  protected var containers: Set[IntegrationContainer] = Set.empty
 
   /**
    * Create a container element with the incoming configuration.
    */
   protected def createContainerElement(newPlayer: PlayerSync, oldPlayer: PlayerSync): Unit = {
-    if (oldPlayer == null || oldPlayer == null)
+    if (newPlayer == null || oldPlayer == null)
       return
-    var cc = new IntegrationContainer(newPlayer, oldPlayer)
-    containers += cc
+    containers += new IntegrationContainer(newPlayer, oldPlayer)
   }
   
   /**
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IRoleManager.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IRoleManager.scala
index eb173748eebf6b31c854c7f93a9ff432da94ecfb..fa466ee7c73b030fbd9dbfaea7e58b53c49518d6 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IRoleManager.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IRoleManager.scala
@@ -5,47 +5,47 @@ import org.rosi_project.model_management.core.PlayerSync
 import scala.collection.mutable.ListBuffer
 
 /**
-  * Interface for the manager roles.
-  */
+ * Interface for the manager roles.
+ */
 trait IRoleManager {
-  
+
   private var relatedManager: Set[IRoleManager] = Set.empty
 
-   /**
-    * Add a related manager to the list.
-    */
+  /**
+   * Add a related manager to the list.
+   */
   def addRelatedManager(related: IRoleManager): Unit = {
-    if (related == null || related.equals(this) || relatedManager.contains(related))
+    if (related == null || related.equals(this))
       return
     relatedManager += related
   }
 
   /**
-    * Get the list of related managers.
-    */
+   * Get the list of related managers.
+   */
   def getRelatedManager(): Set[IRoleManager] = relatedManager
-  
+
   /**
-    * Get this manager.
-    */
+   * Get this manager.
+   */
   def getManager(): IRoleManager = this
-  
+
   /**
-    * Get this manager plus related manager.
-    */
+   * Get this manager plus related manager.
+   */
   def getAllManager(): Set[IRoleManager] = relatedManager + this
 
   /**
-    * Remove a related manager from the list.
-    */
+   * Remove a related manager from the list.
+   */
   def removeRelatedManager(related: IRoleManager): Unit = {
     if (related != null)
       relatedManager -= related
   }
 
   /**
-    * Remove this manager from the lists of all related managers.
-    */
+   * Remove this manager from the lists of all related managers.
+   */
   def removeThisManager(): Unit = {
     relatedManager.foreach { m =>
       m.removeRelatedManager(this)
@@ -53,8 +53,8 @@ trait IRoleManager {
   }
 
   /**
-    * Clear the lists of all related managers,
-    */
+   * Clear the lists of all related managers,
+   */
   def clearListsOfRelatedManager(): Unit = {
     relatedManager.foreach { m =>
       m.clearRelatedManager()
@@ -62,34 +62,42 @@ trait IRoleManager {
   }
 
   /**
-    * Clear the list of this role manager.
-    */
+   * Clear the list of this role manager.
+   */
   def clearRelatedManager(): Unit = {
     relatedManager = Set.empty
-  }  
+  }
 
   /**
-    * General manage function for external call.
-    */
+   * Create a relation between two IRoleManager instances.
+   */
+  def makeRelated(relate: IRoleManager): Unit = {
+    this.addRelatedManager(relate)
+    relate.addRelatedManager(this)
+  }
+
+  /**
+   * General manage function for external call.
+   */
   def manage(value: PlayerSync): Unit
-  
+
   /**
    * Function to manage the deletion.
    */
   def deleteManage(value: PlayerSync): Unit
-  
+
   /**
    * Get related PlayerSync with the specific name.
    */
   def getRelatedClassFromName(name: String): PlayerSync
-  
-  def printAllManager(): Unit
-  
+
   /**
-   * Create a relation between two IRoleManager instances.
+   * Create a relation between two IRoleManager and RoleManager of other PlayerSync instances.
    */
-  def makeRelated(relate: IRoleManager): Unit = {
-    this.addRelatedManager(relate)
-    relate.addRelatedManager(this)
-  }
+  def makePlayerSyncRelated(playerSync: PlayerSync): Unit
+
+  /**
+   * Print all Manager only for debug.
+   */
+  def printAllManager(): Unit
 }
diff --git a/solutions/RSync/src/main/scala/sync/bdd/Assignment.scala b/solutions/RSync/src/main/scala/sync/bdd/Assignment.scala
index b08405c8b10eb2cc413c904afa75388b38181d09..ea9259639ef977b936f3d010cf2c16a2dc3f40e3 100644
--- a/solutions/RSync/src/main/scala/sync/bdd/Assignment.scala
+++ b/solutions/RSync/src/main/scala/sync/bdd/Assignment.scala
@@ -18,6 +18,7 @@ class Assignment(protected var value: Boolean, protected var owner: Leaf, protec
   }
 
   def setOwner(o: Leaf): Unit = {
+    require(o != null)
     owner = o
     +this syncSetOwner ()
   }
@@ -27,6 +28,7 @@ class Assignment(protected var value: Boolean, protected var owner: Leaf, protec
   }
 
   def setPort(p: OutputPort): Unit = {
+    require(p != null)
     port = p
     +this syncSetPort ()
   }
diff --git a/solutions/RSync/src/main/scala/sync/bdd/BDD.scala b/solutions/RSync/src/main/scala/sync/bdd/BDD.scala
index 671c46fd7c9adc2d20f04e34558107ed491aae68..5a41712bcc13f9c0ace1e9b0689a733972b3caa3 100644
--- a/solutions/RSync/src/main/scala/sync/bdd/BDD.scala
+++ b/solutions/RSync/src/main/scala/sync/bdd/BDD.scala
@@ -9,6 +9,7 @@ class BDD(protected var name: String, protected var tree: Tree, protected var po
   }
 
   def setName(n: String): Unit = {
+    require(n != null)
     name = n
     +this syncSetName ()
   }
@@ -18,6 +19,7 @@ class BDD(protected var name: String, protected var tree: Tree, protected var po
   }
 
   def setTree(t: Tree): Unit = {
+    require(t != null)
     tree = t
     +this syncSetTree ()
   }
@@ -27,11 +29,15 @@ class BDD(protected var name: String, protected var tree: Tree, protected var po
   }
 
   def addPorts(p: Port): Unit = {
+    require(p != null)
+    require(!ports.contains(p))
     ports += p
     +this syncAddPorts (p)
   }
 
   def removePorts(p: Port): Unit = {
+    require(p != null)
+    require(ports.contains(p))
     ports -= p
     +this syncRemovePorts (p)
   }
diff --git a/solutions/RSync/src/main/scala/sync/bdd/InputPort.scala b/solutions/RSync/src/main/scala/sync/bdd/InputPort.scala
index 30412c321b2a5bc4be1d45cb057f717005f732a4..62e1b2c07bdf44215f9db0dda230687cb104d1c0 100644
--- a/solutions/RSync/src/main/scala/sync/bdd/InputPort.scala
+++ b/solutions/RSync/src/main/scala/sync/bdd/InputPort.scala
@@ -7,11 +7,15 @@ class InputPort(protected var subtrees: Set[Subtree], p_Name: String, p_Owner: B
   }
 
   def addSubtrees(s: Subtree): Unit = {
+    require(s != null)
+    require(!subtrees.contains(s))
     subtrees += s
     +this syncAddSubtrees (s)
   }
 
   def removeSubtrees(s: Subtree): Unit = {
+    require(s != null)
+    require(subtrees.contains(s))
     subtrees -= s
     +this syncRemoveSubtrees (s)
   }
diff --git a/solutions/RSync/src/main/scala/sync/bdd/Leaf.scala b/solutions/RSync/src/main/scala/sync/bdd/Leaf.scala
index 4098c87025e9ebe99ab60ff938154db311532962..41ab5e4102c0692a5dd57a417d84beb99fc67fe7 100644
--- a/solutions/RSync/src/main/scala/sync/bdd/Leaf.scala
+++ b/solutions/RSync/src/main/scala/sync/bdd/Leaf.scala
@@ -7,11 +7,15 @@ class Leaf(protected var assignments: Set[Assignment], t_OwnerSubtreeForOne: Sub
   }
 
   def addAssignments(a: Assignment): Unit = {
+    require(a != null)
+    require(!assignments.contains(a))
     assignments += a
     +this syncAddAssignments (a)
   }
 
   def removeAssignments(a: Assignment): Unit = {
+    require(a != null)
+    require(assignments.contains(a))
     assignments -= a
     +this syncRemoveAssignments (a)
   }
diff --git a/solutions/RSync/src/main/scala/sync/bdd/OutputPort.scala b/solutions/RSync/src/main/scala/sync/bdd/OutputPort.scala
index 2ac3801ad3df2f9bc2249b5ecaeda866ce17f27b..83e2315b160608238c0ed28626e5ff7e45ee1806 100644
--- a/solutions/RSync/src/main/scala/sync/bdd/OutputPort.scala
+++ b/solutions/RSync/src/main/scala/sync/bdd/OutputPort.scala
@@ -7,11 +7,15 @@ class OutputPort(protected var assignments: Set[Assignment], p_Name: String, p_O
   }
 
   def addAssignments(a: Assignment): Unit = {
+    require(a != null)
+    require(!assignments.contains(a))
     assignments += a
     +this syncAddAssignments (a)
   }
 
   def removeAssignments(a: Assignment): Unit = {
+    require(a != null)
+    require(assignments.contains(a))
     assignments -= a
     +this syncRemoveAssignments (a)
   }
diff --git a/solutions/RSync/src/main/scala/sync/bdd/Port.scala b/solutions/RSync/src/main/scala/sync/bdd/Port.scala
index 9c812081fb672e13d1054c4738d055acebeb5595..9ac8cfc7cad9a942329ac097fceb85bb5bafc9e1 100644
--- a/solutions/RSync/src/main/scala/sync/bdd/Port.scala
+++ b/solutions/RSync/src/main/scala/sync/bdd/Port.scala
@@ -9,6 +9,7 @@ abstract class Port(protected var name: String, protected var owner: BDD) extend
   }
 
   def setName(n: String): Unit = {
+    require(n != null)
     name = n
     +this syncSetName ()
   }
@@ -18,6 +19,7 @@ abstract class Port(protected var name: String, protected var owner: BDD) extend
   }
 
   def setOwner(o: BDD): Unit = {
+    require(o != null)
     owner = o
     +this syncSetOwner ()
   }
diff --git a/solutions/RSync/src/main/scala/sync/bdd/Subtree.scala b/solutions/RSync/src/main/scala/sync/bdd/Subtree.scala
index d5e69347be8a1b7d55c9ae4ec0ae439e554d7aa2..af904736a2c93bafd6e54c6214aba9d49fc23c39 100644
--- a/solutions/RSync/src/main/scala/sync/bdd/Subtree.scala
+++ b/solutions/RSync/src/main/scala/sync/bdd/Subtree.scala
@@ -7,6 +7,7 @@ class Subtree(protected var treeForOne: Tree, protected var treeForZero: Tree, p
   }
 
   def setTreeForOne(t: Tree): Unit = {
+    require(t != null)
     treeForOne = t
     +this syncSetTreeForOne ()
   }
@@ -16,6 +17,7 @@ class Subtree(protected var treeForOne: Tree, protected var treeForZero: Tree, p
   }
 
   def setTreeForZero(t: Tree): Unit = {
+    require(t != null)
     treeForZero = t
     +this syncSetTreeForZero ()
   }
@@ -25,6 +27,7 @@ class Subtree(protected var treeForOne: Tree, protected var treeForZero: Tree, p
   }
 
   def setPort(p: InputPort): Unit = {
+    require(p != null)
     port = p
     +this syncSetPort ()
   }
@@ -32,7 +35,7 @@ class Subtree(protected var treeForOne: Tree, protected var treeForZero: Tree, p
   override def toString(): String = {
     "Subtree:"
   }
-
+  
   override def getAvgPath(): Double = {
     return 0.5 * (treeForOne.getAvgPath() + treeForZero.getAvgPath()) + 1
   }
diff --git a/solutions/RSync/src/main/scala/sync/bdd/Tree.scala b/solutions/RSync/src/main/scala/sync/bdd/Tree.scala
index 9a6faeaae3dd21cfd833ff5f93fa3c292d3fe267..0e6128b70b8780235aeca8cf6504114019fde413 100644
--- a/solutions/RSync/src/main/scala/sync/bdd/Tree.scala
+++ b/solutions/RSync/src/main/scala/sync/bdd/Tree.scala
@@ -9,6 +9,7 @@ abstract class Tree(protected var ownerSubtreeForOne: Subtree, protected var own
   }
 
   def setOwnerSubtreeForOne(o: Subtree): Unit = {
+    require(o != null)
     ownerSubtreeForOne = o
     +this syncSetOwnerSubtreeForOne ()
   }
@@ -18,6 +19,7 @@ abstract class Tree(protected var ownerSubtreeForOne: Subtree, protected var own
   }
 
   def setOwnerSubtreeForZero(o: Subtree): Unit = {
+    require(o != null)
     ownerSubtreeForZero = o
     +this syncSetOwnerSubtreeForZero ()
   }
@@ -27,6 +29,7 @@ abstract class Tree(protected var ownerSubtreeForOne: Subtree, protected var own
   }
 
   def setOwnerBDD(o: BDD): Unit = {
+    require(o != null)
     ownerBDD = o
     +this syncSetOwnerBDD ()
   }
diff --git a/solutions/RSync/src/main/scala/sync/bddg/Assignment.scala b/solutions/RSync/src/main/scala/sync/bddg/Assignment.scala
index 4008da2917d153283b8c0fe1e104592f57eef359..1aae664876c206def13ee3645d9b8aa0d4b8e01d 100644
--- a/solutions/RSync/src/main/scala/sync/bddg/Assignment.scala
+++ b/solutions/RSync/src/main/scala/sync/bddg/Assignment.scala
@@ -18,6 +18,7 @@ class Assignment(protected var value: Boolean, protected var owner: Leaf, protec
   }
 
   def setOwner(o: Leaf): Unit = {
+    require(o != null)
     owner = o
     +this syncSetOwner ()
   }
@@ -27,6 +28,7 @@ class Assignment(protected var value: Boolean, protected var owner: Leaf, protec
   }
 
   def setPort(p: OutputPort): Unit = {
+    require(p != null)
     port = p
     +this syncSetPort ()
   }
diff --git a/solutions/RSync/src/main/scala/sync/bddg/BDD.scala b/solutions/RSync/src/main/scala/sync/bddg/BDD.scala
index db65c99d9617e77f5bc8900ba6406cb7de306775..6f7277dfe05444b258e99c1f0e733cb2766ce40a 100644
--- a/solutions/RSync/src/main/scala/sync/bddg/BDD.scala
+++ b/solutions/RSync/src/main/scala/sync/bddg/BDD.scala
@@ -9,6 +9,7 @@ class BDD(protected var name: String, protected var trees: Set[Tree], protected
   }
 
   def setName(n: String): Unit = {
+    require(n != null)
     name = n
     +this syncSetName ()
   }
@@ -18,11 +19,15 @@ class BDD(protected var name: String, protected var trees: Set[Tree], protected
   }
 
   def addTrees(t: Tree): Unit = {
+    require(t != null)
+    require(!trees.contains(t))
     trees += t
     +this syncAddTrees (t)
   }
 
   def removeTrees(t: Tree): Unit = {
+    require(t != null)
+    require(trees.contains(t))
     trees -= t
     +this syncRemoveTrees (t)
   }
@@ -32,6 +37,7 @@ class BDD(protected var name: String, protected var trees: Set[Tree], protected
   }
 
   def setRoot(r: Tree): Unit = {
+    require(r != null)
     root = r
     +this syncSetRoot ()
   }
@@ -41,11 +47,15 @@ class BDD(protected var name: String, protected var trees: Set[Tree], protected
   }
 
   def addPorts(p: Port): Unit = {
+    require(p != null)
+    require(!ports.contains(p))
     ports += p
     +this syncAddPorts (p)
   }
 
   def removePorts(p: Port): Unit = {
+    require(p != null)
+    require(ports.contains(p))
     ports -= p
     +this syncRemovePorts (p)
   }
diff --git a/solutions/RSync/src/main/scala/sync/bddg/InputPort.scala b/solutions/RSync/src/main/scala/sync/bddg/InputPort.scala
index 26772fe2ee5ed0578e86417b683e59d3ec146cb4..33173ab20fe4d5de663403386cc57c74e782277c 100644
--- a/solutions/RSync/src/main/scala/sync/bddg/InputPort.scala
+++ b/solutions/RSync/src/main/scala/sync/bddg/InputPort.scala
@@ -7,11 +7,15 @@ class InputPort(protected var subtrees: Set[Subtree], p_Name: String, p_Owner: B
   }
 
   def addSubtrees(s: Subtree): Unit = {
+    require(s != null)
+    require(!subtrees.contains(s))
     subtrees += s
     +this syncAddSubtrees (s)
   }
 
   def removeSubtrees(s: Subtree): Unit = {
+    require(s != null)
+    require(subtrees.contains(s))
     subtrees -= s
     +this syncRemoveSubtrees (s)
   }
diff --git a/solutions/RSync/src/main/scala/sync/bddg/Leaf.scala b/solutions/RSync/src/main/scala/sync/bddg/Leaf.scala
index 4295556d6ca60c46ead25cfe7ed53cd53d97d4c7..0a1426b9e65484aec6b1a22b5f37b75afa2d15f6 100644
--- a/solutions/RSync/src/main/scala/sync/bddg/Leaf.scala
+++ b/solutions/RSync/src/main/scala/sync/bddg/Leaf.scala
@@ -7,11 +7,15 @@ class Leaf(protected var assignments: Set[Assignment], t_OwnerSubtreeForOne: Set
   }
 
   def addAssignments(a: Assignment): Unit = {
+    require(a != null)
+    require(!assignments.contains(a))
     assignments += a
     +this syncAddAssignments (a)
   }
 
   def removeAssignments(a: Assignment): Unit = {
+    require(a != null)
+    require(assignments.contains(a))
     assignments -= a
     +this syncRemoveAssignments (a)
   }
diff --git a/solutions/RSync/src/main/scala/sync/bddg/OutputPort.scala b/solutions/RSync/src/main/scala/sync/bddg/OutputPort.scala
index 3b12cc76e9beefada508fe4e8cf70bdfcfc3270f..2b5f75ba3b2894c152e7203f09a0189f02d76414 100644
--- a/solutions/RSync/src/main/scala/sync/bddg/OutputPort.scala
+++ b/solutions/RSync/src/main/scala/sync/bddg/OutputPort.scala
@@ -7,11 +7,15 @@ class OutputPort(protected var assignments: Set[Assignment], p_Name: String, p_O
   }
 
   def addAssignments(a: Assignment): Unit = {
+    require(a != null)
+    require(!assignments.contains(a))
     assignments += a
     +this syncAddAssignments (a)
   }
 
   def removeAssignments(a: Assignment): Unit = {
+    require(a != null)
+    require(assignments.contains(a))
     assignments -= a
     +this syncRemoveAssignments (a)
   }
diff --git a/solutions/RSync/src/main/scala/sync/bddg/Port.scala b/solutions/RSync/src/main/scala/sync/bddg/Port.scala
index 70a5205580b967e468ffb7e4e3684b683095fce5..87d9283c84e07c34f79c60c1669eae09e29ce787 100644
--- a/solutions/RSync/src/main/scala/sync/bddg/Port.scala
+++ b/solutions/RSync/src/main/scala/sync/bddg/Port.scala
@@ -9,6 +9,7 @@ abstract class Port(protected var name: String, protected var owner: BDD) extend
   }
 
   def setName(n: String): Unit = {
+    require(n != null)
     name = n
     +this syncSetName ()
   }
@@ -18,6 +19,7 @@ abstract class Port(protected var name: String, protected var owner: BDD) extend
   }
 
   def setOwner(o: BDD): Unit = {
+    require(o != null)
     owner = o
     +this syncSetOwner ()
   }
diff --git a/solutions/RSync/src/main/scala/sync/bddg/Subtree.scala b/solutions/RSync/src/main/scala/sync/bddg/Subtree.scala
index c83d3ed7179aaf9298c0d3f2920069e1bc059925..d98218a4bd7fddd2a6cd0cb332c472c6103ae616 100644
--- a/solutions/RSync/src/main/scala/sync/bddg/Subtree.scala
+++ b/solutions/RSync/src/main/scala/sync/bddg/Subtree.scala
@@ -7,6 +7,7 @@ class Subtree(protected var treeForOne: Tree, protected var treeForZero: Tree, p
   }
 
   def setTreeForOne(t: Tree): Unit = {
+    require(t != null)
     treeForOne = t
     +this syncSetTreeForOne ()
   }
@@ -16,6 +17,7 @@ class Subtree(protected var treeForOne: Tree, protected var treeForZero: Tree, p
   }
 
   def setTreeForZero(t: Tree): Unit = {
+    require(t != null)
     treeForZero = t
     +this syncSetTreeForZero ()
   }
@@ -25,6 +27,7 @@ class Subtree(protected var treeForOne: Tree, protected var treeForZero: Tree, p
   }
 
   def setPort(p: InputPort): Unit = {
+    require(p != null)
     port = p
     +this syncSetPort ()
   }
diff --git a/solutions/RSync/src/main/scala/sync/bddg/Tree.scala b/solutions/RSync/src/main/scala/sync/bddg/Tree.scala
index a022da7a9420c63e010df2502d603c12da737757..83496443ed1d5ae6c6c43b8a49c04b81b2666abd 100644
--- a/solutions/RSync/src/main/scala/sync/bddg/Tree.scala
+++ b/solutions/RSync/src/main/scala/sync/bddg/Tree.scala
@@ -9,11 +9,15 @@ abstract class Tree(protected var ownerSubtreeForOne: Set[Subtree], protected va
   }
 
   def addOwnerSubtreeForOne(o: Subtree): Unit = {
+    require(o != null)
+    require(!ownerSubtreeForOne.contains(o))
     ownerSubtreeForOne += o
     +this syncAddOwnerSubtreeForOne (o)
   }
 
   def removeOwnerSubtreeForOne(o: Subtree): Unit = {
+    require(o != null)
+    require(ownerSubtreeForOne.contains(o))
     ownerSubtreeForOne -= o
     +this syncRemoveOwnerSubtreeForOne (o)
   }
@@ -23,11 +27,15 @@ abstract class Tree(protected var ownerSubtreeForOne: Set[Subtree], protected va
   }
 
   def addOwnerSubtreeForZero(o: Subtree): Unit = {
+    require(o != null)
+    require(!ownerSubtreeForZero.contains(o))
     ownerSubtreeForZero += o
     +this syncAddOwnerSubtreeForZero (o)
   }
 
   def removeOwnerSubtreeForZero(o: Subtree): Unit = {
+    require(o != null)
+    require(ownerSubtreeForZero.contains(o))
     ownerSubtreeForZero -= o
     +this syncRemoveOwnerSubtreeForZero (o)
   }
@@ -37,6 +45,7 @@ abstract class Tree(protected var ownerSubtreeForOne: Set[Subtree], protected va
   }
 
   def setOwnerBDD(o: BDD): Unit = {
+    require(o != null)
     ownerBDD = o
     +this syncSetOwnerBDD ()
   }
@@ -44,7 +53,7 @@ abstract class Tree(protected var ownerSubtreeForOne: Set[Subtree], protected va
   override def toString(): String = {
     "Tree:"
   }
-
+  
   def getAvgPath(): Double = 0.0
 
   def getMinPath(): Int = 0
diff --git a/solutions/RSync/src/main/scala/sync/tt/Cell.scala b/solutions/RSync/src/main/scala/sync/tt/Cell.scala
index 2898978d962c5ebb3d04d0cd2e3955d6fa093c77..ae132ebdfff23540a7c4ab5dbc6687c23a077269 100644
--- a/solutions/RSync/src/main/scala/sync/tt/Cell.scala
+++ b/solutions/RSync/src/main/scala/sync/tt/Cell.scala
@@ -16,6 +16,7 @@ class Cell(protected var value: Boolean, protected var port: Port, protected var
   }
 
   def setPort(p: Port): Unit = {
+    require(p != null)
     port = p
     +this syncSetPort ()
   }
@@ -25,6 +26,7 @@ class Cell(protected var value: Boolean, protected var port: Port, protected var
   }
 
   def setOwner(o: Row): Unit = {
+    require(o != null)
     owner = o
     +this syncSetOwner ()
   }
diff --git a/solutions/RSync/src/main/scala/sync/tt/LocatedElement.scala b/solutions/RSync/src/main/scala/sync/tt/LocatedElement.scala
index ab22829d0b5e3eb69e53991c0ffdca668ec712c1..2abcdbede2adaaf327abeb4ac895d921ad08fbf3 100644
--- a/solutions/RSync/src/main/scala/sync/tt/LocatedElement.scala
+++ b/solutions/RSync/src/main/scala/sync/tt/LocatedElement.scala
@@ -9,6 +9,7 @@ class LocatedElement(protected var location: String) extends PlayerSync {
   }
 
   def setLocation(l: String): Unit = {
+    require(l != null)
     location = l
     +this syncSetLocation ()
   }
diff --git a/solutions/RSync/src/main/scala/sync/tt/Port.scala b/solutions/RSync/src/main/scala/sync/tt/Port.scala
index 89522cf07b961e0fdd2745670b00be7b0f2efbe0..b53e6088b25577c282c835b453f269ae98a71758 100644
--- a/solutions/RSync/src/main/scala/sync/tt/Port.scala
+++ b/solutions/RSync/src/main/scala/sync/tt/Port.scala
@@ -7,6 +7,7 @@ abstract class Port(protected var name: String, protected var cells: Set[Cell],
   }
 
   def setName(n: String): Unit = {
+    require(n != null)
     name = n
     +this syncSetName ()
   }
@@ -16,11 +17,15 @@ abstract class Port(protected var name: String, protected var cells: Set[Cell],
   }
 
   def addCells(c: Cell): Unit = {
+    require(c != null)
+    require(!cells.contains(c))
     cells += c
     +this syncAddCells (c)
   }
 
   def removeCells(c: Cell): Unit = {
+    require(c != null)
+    require(cells.contains(c))
     cells -= c
     +this syncRemoveCells (c)
   }
@@ -30,6 +35,7 @@ abstract class Port(protected var name: String, protected var cells: Set[Cell],
   }
 
   def setOwner(o: TruthTable): Unit = {
+    require(o != null)
     owner = o
     +this syncSetOwner ()
   }
diff --git a/solutions/RSync/src/main/scala/sync/tt/Row.scala b/solutions/RSync/src/main/scala/sync/tt/Row.scala
index 517b5a0324fffc9514278d1f315bebd220093887..c63aa16ff881d78836af3b5588abac15754e383d 100644
--- a/solutions/RSync/src/main/scala/sync/tt/Row.scala
+++ b/solutions/RSync/src/main/scala/sync/tt/Row.scala
@@ -7,11 +7,15 @@ class Row(protected var cells: Set[Cell], protected var owner: TruthTable, l_Loc
   }
 
   def addCells(c: Cell): Unit = {
+    require(c != null)
+    require(!cells.contains(c))
     cells += c
     +this syncAddCells (c)
   }
 
   def removeCells(c: Cell): Unit = {
+    require(c != null)
+    require(cells.contains(c))
     cells -= c
     +this syncRemoveCells (c)
   }
@@ -21,6 +25,7 @@ class Row(protected var cells: Set[Cell], protected var owner: TruthTable, l_Loc
   }
 
   def setOwner(o: TruthTable): Unit = {
+    require(o != null)
     owner = o
     +this syncSetOwner ()
   }
diff --git a/solutions/RSync/src/main/scala/sync/tt/TruthTable.scala b/solutions/RSync/src/main/scala/sync/tt/TruthTable.scala
index 4ebdec512e45a21b9f04d2a3b15aa7688d1394bb..237160739d9715b0e5978417828a5ea26c210430 100644
--- a/solutions/RSync/src/main/scala/sync/tt/TruthTable.scala
+++ b/solutions/RSync/src/main/scala/sync/tt/TruthTable.scala
@@ -7,6 +7,7 @@ class TruthTable(protected var name: String, protected var rows: Set[Row], prote
   }
 
   def setName(n: String): Unit = {
+    require(n != null)
     name = n
     +this syncSetName ()
   }
@@ -16,11 +17,15 @@ class TruthTable(protected var name: String, protected var rows: Set[Row], prote
   }
 
   def addRows(r: Row): Unit = {
+    require(r != null)
+    require(!rows.contains(r))
     rows += r
     +this syncAddRows (r)
   }
 
   def removeRows(r: Row): Unit = {
+    require(r != null)
+    require(rows.contains(r))
     rows -= r
     +this syncRemoveRows (r)
   }
@@ -30,11 +35,15 @@ class TruthTable(protected var name: String, protected var rows: Set[Row], prote
   }
 
   def addPorts(p: Port): Unit = {
+    require(p != null)
+    require(!ports.contains(p))
     ports += p
     +this syncAddPorts (p)
   }
 
   def removePorts(p: Port): Unit = {
+    require(p != null)
+    require(ports.contains(p))
     ports -= p
     +this syncRemovePorts (p)
   }
diff --git a/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableSync.scala b/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableSync.scala
index a4cfd2d66ce77a40799b1d7fac43f75f2ac6aea5..73c11cef68aab86a88dc256d7917fad7201c519c 100644
--- a/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableSync.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableSync.scala
@@ -1,13 +1,8 @@
 package ttc2019
 
-import sync.tt._
+import _root_.sync.tt._
 import org.eclipse.emf.ecore.EObject
 
-/**
- * Create the instances of the truth table in Scala. 
- * 
- * @author Christopher Werner
- */
 class CreateTruthTableSync extends ICreateTruthTable {
   
   var mapping: Map[EObject, Object] = Map.empty 
@@ -33,6 +28,7 @@ class CreateTruthTableSync extends ICreateTruthTable {
   }
   
   def createTruthTableRowsRow(tt: EObject, row: EObject): Unit = {
+    //println("addRow")
     val t = mapping.get(tt).get.asInstanceOf[TruthTable]
     val r = mapping.get(row).get.asInstanceOf[Row]
     t.addRows(r)
@@ -40,6 +36,7 @@ class CreateTruthTableSync extends ICreateTruthTable {
   }
   
   def createTruthTablePortsPort(tt: EObject, port: EObject): Unit = {
+    //println("addPort")
     val t = mapping.get(tt).get.asInstanceOf[TruthTable]
     val p = mapping.get(port).get.asInstanceOf[Port]
     t.addPorts(p)
@@ -47,6 +44,7 @@ class CreateTruthTableSync extends ICreateTruthTable {
   }
   
   def createRowCellsCell(row: EObject, cell: EObject): Unit = {
+    //println("addCellInRow")
     val c = mapping.get(cell).get.asInstanceOf[Cell]
     val r = mapping.get(row).get.asInstanceOf[Row]
     c.setOwner(r)
@@ -54,6 +52,7 @@ class CreateTruthTableSync extends ICreateTruthTable {
   }
   
   def createCellPortPort(cell: EObject, port: EObject): Unit = {
+    //println("addCellInPort")
     val c = mapping.get(cell).get.asInstanceOf[Cell]
     val p = mapping.get(port).get.asInstanceOf[Port]
     c.setPort(p)
diff --git a/solutions/RSync/src/main/scala/ttc2019/TTCLoader.scala b/solutions/RSync/src/main/scala/ttc2019/TTCLoader.scala
index 1126ef9c2952a9e5592260155fcc155f8bbbfb23..b9c67a894887c2edb382c789abfa4ece35a66a33 100644
--- a/solutions/RSync/src/main/scala/ttc2019/TTCLoader.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/TTCLoader.scala
@@ -21,10 +21,10 @@ import ttc2019.metamodels.tt._
 class TTCLoader {
 
   /**
-   * Fetches an ecore model from XMI directly converted into a truth table.
+   * Fetches an ecore model from XML.
    *
-   * @param path where to find the (meta-)model
-   * @return the truth table instance from the model
+   * @param path where to find the model
+   * @return the model described by the XML
    */  
   def javaOptimizedTTJavaEcore(pathMeta: String, pathInstance: String): TruthTable = {
     require(null != pathMeta && pathMeta.nonEmpty && null != pathInstance && pathInstance.nonEmpty)
@@ -32,36 +32,18 @@ class TTCLoader {
     return loader.loadOptimizedTruthTable(pathMeta, pathInstance)
   }
   
-  /**
-   * Fetches an ecore model from XMI as EObject.
-   *
-   * @param path where to find the (meta-)model
-   * @return the EObject instance from the model
-   */ 
   def loadOptimizedJavaEcore(pathMeta: String, pathInstance: String): EObject = {
     require(null != pathMeta && pathMeta.nonEmpty && null != pathInstance && pathInstance.nonEmpty)
     val loader = new LoadEObject
     return loader.loadOptimized(pathMeta, pathInstance)
   }
   
-  /**
-   * Fetches an ecore model from XMI as EObject.
-   *
-   * @param path where to find the (meta-)model
-   * @return the EObject instance from the model
-   */ 
   def loadSimpleJavaEcore(pathMeta: String, pathInstance: String): EObject = {
     require(null != pathMeta && pathMeta.nonEmpty && null != pathInstance && pathInstance.nonEmpty)
     val loader = new LoadEObject
     return loader.loadSimple(pathMeta, pathInstance)
   }
   
-  /**
-   * Fetches an ecore model from XMI as EObject.
-   *
-   * @param path where to find the (meta-)model
-   * @return the EObject instance from the model
-   */ 
   def loadScalaEcore(pathMeta: String, pathInstance: String): EObject = {
     require(null != pathMeta && pathMeta.nonEmpty && null != pathInstance && pathInstance.nonEmpty)
 
@@ -81,9 +63,6 @@ class TTCLoader {
     return ressourceModel.getContents().get(0)
   }
 
-  /**
-   * Create a new object from the incoming element.
-   */
   private def createObj(obj: EObject, ctts: ICreateTruthTable): Unit = {
     var objName = obj.eClass.getName
 
@@ -98,9 +77,6 @@ class TTCLoader {
     }
   }
 
-  /**
-   * Create references between the created objects.
-   */
   private def createReferences(o1: EObject, ctts: ICreateTruthTable): Unit = {
     o1.eClass().getEAllReferences.forEach(sf => {
       if (sf.getName == "port" || sf.getName == "owner") {
@@ -135,10 +111,7 @@ class TTCLoader {
     })
   }
   
-  /**
-   * Create the input TruthTable instance from the *.ttmodel file.
-   */
-  def createTruthTableRSYNCInstance(tt: TruthTable, ctts: ICreateTruthTable): Unit = { 
+  def createTruthTableRSYNCInstance(tt: TruthTable, ctts: ICreateTruthTable): Unit = {
     ctts.createTruthTable(tt.getName, tt)
     
     tt.getPorts.forEach(p => {
@@ -152,12 +125,14 @@ class TTCLoader {
     
     tt.getRows.forEach(r => {
       ctts.createRow(r)
-      ctts.createTruthTableRowsRow(tt, r)
       r.getCells.forEach(c => {
+        //print("(" + c.getPort.getName + "|" + (if (c.isValue()) "1" else "0") + ") ")
         ctts.createCell(c.isValue(), c)
-        ctts.createRowCellsCell(r, c)
         ctts.createCellPortPort(c, c.getPort)
+        ctts.createRowCellsCell(r, c)
       })
+      ctts.createTruthTableRowsRow(tt, r)
+      //println("")
     })
   }
 
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/BddSyncIntegration.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/BddSyncIntegration.scala
index c53602aeb17bc4791e141ed0270ebf2dcedea671..dcd8bfe349954d2f5ebd39a0b88b9dee7cb9f0eb 100644
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/BddSyncIntegration.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/BddSyncIntegration.scala
@@ -15,11 +15,11 @@ object BddSyncIntegration extends IIntegrationCompartment {
   private var leafNodes: Map[Set[String], sync.bddg.Leaf] = Map.empty
   private var createdBdds: Set[sync.bddg.BDD] = Set.empty
 
-  /*def printManager(): Unit = {
+  def printManager(): Unit = {
     ModelElementLists.getElementsFromType("sync.bddg.Leaf").asInstanceOf[List[sync.bddg.Leaf]].foreach(obj => {
       +obj printAllManager ()
     })
-  }*/
+  }
 
   def getRelationalIntegratorsForClassName(classname: Object): IIntegrator = {
     return null
@@ -67,6 +67,7 @@ object BddSyncIntegration extends IIntegrationCompartment {
     //find next inputport for subtree
     truthTable.getPorts().filter(p => p.isInstanceOf[sync.tt.InputPort] && !finishPorts.contains(p)).foreach(ttip => {
       val newCells = ttip.getCells().filter(c => rows.contains(c.getOwner()))
+      //println("Looking Port: " + ttip.getName() + " S: " + newCells.size)
       if (newCells.size >= max) {
         var setTrue: Set[Set[String]] = Set.empty
         var setFalse: Set[Set[String]] = Set.empty
@@ -94,6 +95,7 @@ object BddSyncIntegration extends IIntegrationCompartment {
           portTT = ttip
           max = newCells.size
         }
+        //println("############################## " + newCells.size + " || T: " + p1 + " F: " + p2)
       }
     })
 
@@ -140,6 +142,69 @@ object BddSyncIntegration extends IIntegrationCompartment {
 
     subtree
   }
+  
+  def createInputLookSubtree(bdd: sync.bddg.BDD, truthTable: sync.tt.TruthTable, rows: Set[sync.tt.Row], finishPorts: Set[sync.tt.Port]): sync.bddg.Tree = {
+    var max = 0
+    var portTT: sync.tt.Port = null
+    var cellis: Set[sync.tt.Cell] = Set.empty
+
+    truthTable.getPorts().filter(p => p.isInstanceOf[sync.tt.InputPort] && !finishPorts.contains(p)).foreach(ttip => {
+      val newCells = ttip.getCells().filter(c => rows.contains(c.getOwner()))
+      if (newCells.size > max) {
+        max = newCells.size
+        portTT = ttip
+        cellis = newCells
+      } else if (newCells.size == max) {
+        val p1 = newCells.count(_.getValue())
+        val p2 = newCells.count(!_.getValue())
+        if (Math.abs(max / 2 - p1) > Math.abs(max / 2 - p2)) {
+          portTT = ttip
+          cellis = newCells
+        }
+      }
+    })
+    var portBDD: sync.bddg.InputPort = null
+    val oppo: PlayerSync = +portTT getRelatedClassFromName ("InputPort")
+    if (oppo != null) {
+      portBDD = oppo.asInstanceOf[sync.bddg.InputPort]
+    }    
+
+    val newPorts = finishPorts + portTT
+    val subtree = new sync.bddg.Subtree(null, null, portBDD, Set.empty, Set.empty, bdd)
+    bdd.addTrees(subtree)
+    portBDD.addSubtrees(subtree)
+
+    val rowsOne = cellis.filter(_.getValue()).map(_.getOwner())
+    val rowsZero = cellis.filter(!_.getValue()).map(_.getOwner())
+
+    var treeZero: sync.bddg.Tree = null
+    var treeOne: sync.bddg.Tree = null
+    if (rowsZero.size == 1) {
+      //create leaf from rows
+      treeZero = createLeafFromRows(bdd, rowsZero)
+    } else {
+      treeZero = createInputLookSubtree(bdd, truthTable, rowsZero, newPorts)
+    }
+    if (rowsOne.size == 1) {
+      //create leaf from rows
+      treeOne = createLeafFromRows(bdd, rowsOne)
+    } else {
+      treeOne = createInputLookSubtree(bdd, truthTable, rowsOne, newPorts)
+    }
+    //TODO: Assignment what to do for more than one output cell
+
+    treeOne.addOwnerSubtreeForOne(subtree)
+    subtree.setTreeForOne(treeOne)
+    //connect to rows
+    connectTargetElementWithSourceElementes(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]])
+
+    treeZero.addOwnerSubtreeForZero(subtree)
+    subtree.setTreeForZero(treeZero)
+    //connect to rows
+    connectTargetElementWithSourceElementes(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]])
+
+    subtree
+  }
 
   def createLeafFromRows(bdd: sync.bddg.BDD, rows: Set[sync.tt.Row]): sync.bddg.Leaf = {
     val mapping = rows.head.getCells().filter(c => c.getPort().isInstanceOf[sync.tt.OutputPort]).map(c => s"${c.getPort().getName()} ${c.getValue()}")
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/BdtAndBddSyncIntegration.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/BdtAndBddSyncIntegration.scala
index 692771e1572bfb889ad5e84ca94a005b0d8fc424..a49943b099eabc7925b8fc37961cfa31b594dfad 100644
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/BdtAndBddSyncIntegration.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/BdtAndBddSyncIntegration.scala
@@ -72,6 +72,7 @@ object BdtAndBddSyncIntegration extends IIntegrationCompartment {
     //find next inputport for subtree
     truthTable.getPorts().filter(p => p.isInstanceOf[sync.tt.InputPort] && !finishPorts.contains(p)).foreach(ttip => {
       val newCells = ttip.getCells().filter(c => rows.contains(c.getOwner()))
+      //println("Looking Port: " + ttip.getName() + " S: " + newCells.size)
       if (newCells.size >= max) {
         var setTrue: Set[Set[String]] = Set.empty
         var setFalse: Set[Set[String]] = Set.empty
@@ -99,9 +100,11 @@ object BdtAndBddSyncIntegration extends IIntegrationCompartment {
           portTT = ttip
           max = newCells.size
         }
+        //println("############################## " + newCells.size + " || T: " + p1 + " F: " + p2)
       }
     })
 
+    //println("Used Port: " + portTT)
     var portBDD: sync.bddg.InputPort = null
     val oppo: PlayerSync = +portTT getRelatedClassFromName ("InputPort")
     if (oppo != null) {
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/BdtSyncIntegration.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/BdtSyncIntegration.scala
index 058d6dd89b7094d2aae296ddff7721ec7adebbc9..1f7ad2b6c5e289c8cb236cb39d6151be9e103f0a 100644
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/BdtSyncIntegration.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/BdtSyncIntegration.scala
@@ -58,6 +58,7 @@ object BdtSyncIntegration extends IIntegrationCompartment {
 
     truthTable.getPorts().filter(p => p.isInstanceOf[sync.tt.InputPort] && !finishPorts.contains(p)).foreach(ttip => {
       val newCells = ttip.getCells().filter(c => rows.contains(c.getOwner()))
+      //println("Looking Port: " + ttip.getName() + " S: " + newCells.size)
       if (newCells.size >= max) {
         var setTrue: Set[Set[String]] = Set.empty
         var setFalse: Set[Set[String]] = Set.empty
@@ -85,6 +86,7 @@ object BdtSyncIntegration extends IIntegrationCompartment {
           portTT = ttip
           max = newCells.size
         }
+        //println("############################## " + newCells.size + " || T: " + p1 + " F: " + p2)
       }
     })
 
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesCellSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesCellSync.scala
new file mode 100644
index 0000000000000000000000000000000000000000..7ccfc1b82c3db63ef958e2bd7119c88c33712488
--- /dev/null
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesCellSync.scala
@@ -0,0 +1,78 @@
+package ttc2019.worksync
+
+import org.rosi_project.model_management.sync.ISyncCompartment
+import org.rosi_project.model_management.sync.roles.ISyncRole
+import org.rosi_project.model_management.core.PlayerSync
+
+class SyncChangesCellSync() extends ISyncCompartment {
+
+  def getFirstRole(classname: Object): ISyncRole = {
+    if (classname.isInstanceOf[sync.tt.Cell])
+      return new Sync()
+    return null
+  }
+
+  def isFirstIntegration(classname: Object): Boolean = {
+    if (classname.isInstanceOf[sync.tt.Cell])
+      return true
+    return false
+  }
+
+  def getNewInstance(): ISyncCompartment = new SyncChangesCellSync
+
+  def getRuleName(): String = "SyncChangesCellSync"
+
+  class Sync() extends ISyncRole {
+
+    def getOuterCompartment(): ISyncCompartment = SyncChangesCellSync.this
+
+    /**
+     * Rule which add ports to its root in each model.
+     */
+    def syncSetPort(): Unit = {
+      val port: sync.tt.Port = +this getPort ()
+      if (port.isInstanceOf[sync.tt.OutputPort] && !doSync) {
+        doSync = true;
+        //get value from cell
+        val value: Boolean = +this getValue ()
+        //get needed ports
+        val opTreePort: PlayerSync = +port getRelatedClassFromName ("sync.bdd.Port")
+        //val opDiaPort: PlayerSync = +port getRelatedClassFromName ("sync.bddg.Port")
+        //create assignments
+        if (opTreePort != null) {
+          val o_port = opTreePort.asInstanceOf[sync.bdd.OutputPort]
+          val assignment = new sync.bdd.Assignment(value, null, null)
+
+          o_port.addAssignments(assignment)
+          assignment.setPort(o_port)
+          //trace link
+          +this makePlayerSyncRelated (assignment)
+        }
+        /*if (opDiaPort != null) {
+          val o_port = opDiaPort.asInstanceOf[sync.bddg.OutputPort]
+          val assignment = new sync.bddg.Assignment(value, null, null)
+
+          o_port.addAssignments(assignment)
+          assignment.setPort(o_port)
+          //trace link
+          +this makePlayerSyncRelated (assignment)
+        }*/
+        doSync = false;
+      }
+    }
+    
+    /*def syncSetValue(): Unit = {
+      if (!doSync) {
+        doSync = true;
+        var value: Boolean = +this getValue ();
+        syncer.foreach { a =>
+          if (!a.equals(this)) {
+            (+a).setValue(value);
+          }
+        }
+        doSync = false;
+      }
+    }*/
+  }
+
+}
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesTruthTableSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesTruthTableSync.scala
new file mode 100644
index 0000000000000000000000000000000000000000..c0e1c986ba46bb405610668d07c725be73c49751
--- /dev/null
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesTruthTableSync.scala
@@ -0,0 +1,490 @@
+package ttc2019.worksync
+
+import org.rosi_project.model_management.sync.ISyncCompartment
+import org.rosi_project.model_management.sync.roles.ISyncRole
+import org.rosi_project.model_management.core.PlayerSync
+import org.rosi_project.model_management.sync.roles.IRoleManager
+
+/**
+ * Synchronization compartment between truth table and BDD to react on changing (adding or removing) a row.
+ */
+class SyncChangesTruthTableSync() extends ISyncCompartment {
+
+  private var leafNodes: Map[Set[String], sync.bddg.Leaf] = Map.empty
+
+  def getFirstRole(classname: Object): ISyncRole = {
+    if (classname.isInstanceOf[sync.tt.TruthTable])
+      return new Sync()
+    return null
+  }
+
+  def isFirstIntegration(classname: Object): Boolean = {
+    if (classname.isInstanceOf[sync.tt.TruthTable])
+      return true
+    return false
+  }
+
+  def getNewInstance(): ISyncCompartment = new SyncChangesTruthTableSync
+
+  def getRuleName(): String = "SyncChangesTruthTableSync"
+
+  class Sync() extends ISyncRole {
+
+    def getOuterCompartment(): ISyncCompartment = SyncChangesTruthTableSync.this
+
+    /**
+     * Rule which add ports to its root in each model.
+     */
+    def syncAddPorts(port: PlayerSync): Unit = {
+      if (!doSync) {
+        doSync = true;
+        //get connected bdds & tt & ports
+        //add the ports to the bdds or tts
+        val opTreeBDD: PlayerSync = +this getRelatedClassFromName ("sync.bdd.BDD")
+        val opTreePort: PlayerSync = +port getRelatedClassFromName ("sync.bdd.Port")
+        if (opTreeBDD != null && opTreePort != null) {
+          val reTreeBdd = opTreeBDD.asInstanceOf[sync.bdd.BDD]
+          val reTreePort = opTreePort.asInstanceOf[sync.bdd.Port]
+          reTreeBdd.addPorts(reTreePort)
+          reTreePort.setOwner(reTreeBdd)
+        }
+
+        val opDiaBDD: PlayerSync = +this getRelatedClassFromName ("sync.bddg.BDD")
+        val opDiaPort: PlayerSync = +port getRelatedClassFromName ("sync.bddg.Port")
+        if (opDiaBDD != null && opDiaPort != null) {
+          val reDiaBdd = opDiaBDD.asInstanceOf[sync.bddg.BDD]
+          val reDiaPort = opDiaPort.asInstanceOf[sync.bddg.Port]
+          reDiaBdd.addPorts(reDiaPort)
+          reDiaPort.setOwner(reDiaBdd)
+        }
+
+        val opTtBDD: PlayerSync = +this getRelatedClassFromName ("sync.tt.TruthTable")
+        val opTtPort: PlayerSync = +port getRelatedClassFromName ("sync.tt.Port")
+        if (opTtBDD != null && opTtPort != null) {
+          val reTtBdd = opTtBDD.asInstanceOf[sync.tt.TruthTable]
+          val reTtPort = opTtPort.asInstanceOf[sync.tt.Port]
+          reTtBdd.addPorts(reTtPort)
+          reTtPort.setOwner(reTtBdd)
+        }
+
+        doSync = false;
+      }
+    }
+
+    /**
+     * Removes a row from the truth table and from the other the leafs and subtrees.
+     */
+    def syncRemoveRows(rowPS: PlayerSync): Unit = {
+      val row = rowPS.asInstanceOf[sync.tt.Row]
+      if (!doSync) {
+        doSync = true
+        val opTreLeaf: PlayerSync = +row getRelatedClassFromName ("sync.bdd.Leaf")
+        val opDiaLeaf: PlayerSync = +row getRelatedClassFromName ("sync.bddg.Leaf")
+
+        if (opTreLeaf != null) {
+          //exists connected BDT
+          val reTreLeaf = opTreLeaf.asInstanceOf[sync.bdd.Leaf]
+          var relManagerLeaf: Set[IRoleManager] = +reTreLeaf getRelatedManager ()
+          //println(relManagerLeaf)
+
+          //do something if there is only one related manager than minimize the tree 
+          if (relManagerLeaf.size == 1) {
+            if (reTreLeaf.getOwnerBDD() != null) {
+              reTreLeaf.getOwnerBDD().setTree(null)
+            } else {
+              var parent: sync.bdd.Subtree = null
+              var otherChild: sync.bdd.Tree = null
+              if (reTreLeaf.getOwnerSubtreeForOne() == null) {
+                parent = reTreLeaf.getOwnerSubtreeForZero()
+                otherChild = parent.getTreeForOne()
+              } else {
+                parent = reTreLeaf.getOwnerSubtreeForOne()
+                otherChild = parent.getTreeForZero()
+              }
+              if (parent.getOwnerBDD() != null) {
+                parent.getOwnerBDD().setTree(otherChild)
+                otherChild.setOwnerBDD(parent.getOwnerBDD())
+                otherChild.setOwnerSubtreeForOne(null)
+                otherChild.setOwnerSubtreeForZero(null)
+              } else {
+                if (parent.getOwnerSubtreeForOne() != null) {
+                  parent.getOwnerSubtreeForOne().setTreeForOne(otherChild)
+                  otherChild.setOwnerSubtreeForOne(parent.getOwnerSubtreeForOne())
+                  otherChild.setOwnerSubtreeForZero(null)
+                } else {
+                  parent.getOwnerSubtreeForZero().setTreeForZero(otherChild)
+                  otherChild.setOwnerSubtreeForZero(parent.getOwnerSubtreeForZero())
+                  otherChild.setOwnerSubtreeForOne(null)
+                }
+              }
+              //delete parent from synchro
+              parent.deleteObjectFromSynchro()
+            }
+
+            //delete leaf
+            reTreLeaf.deleteObjectFromSynchro()
+            reTreLeaf.getAssignments().foreach(a => {
+              a.deleteObjectFromSynchro()
+            })
+
+          }
+          row.deleteObjectFromSynchro()
+          row.setOwner(null)
+          row.getCells().foreach(c => {
+            c.getPort().removeCells(c)
+            c.setPort(null)
+            c.setOwner(null)
+            c.deleteObjectFromSynchro()
+          })
+          //TODO: row remove all cells
+        }
+        doSync = false;
+      }
+    }
+
+    /**
+     * Rule which add rows to the truth table and create subtrees and leafs in other models.
+     */
+    def syncAddRows(rowPS: PlayerSync): Unit = {
+      //println("In Sync Add Row")
+      val row = rowPS.asInstanceOf[sync.tt.Row]
+      if (!doSync) {
+        doSync = true;
+        val opTreeBDD: PlayerSync = +this getRelatedClassFromName ("sync.bdd.BDD")
+        val opDiaBDD: PlayerSync = +this getRelatedClassFromName ("sync.bddg.BDD")
+        if (opTreeBDD != null) {
+          val reBdd = opTreeBDD.asInstanceOf[sync.bdd.BDD]
+          addNewRowCompleteTree(reBdd, row)
+          //addNewRow(reTreeBdd.getTree(), Set.empty, row)
+        }
+        if (opDiaBDD != null) {
+          val reBdd = opDiaBDD.asInstanceOf[sync.bddg.BDD]
+          addNewRowCompleteTree(reBdd, row)
+        }
+        doSync = false;
+      }
+    }
+
+    /**
+     * Function to add a new row for the sync.bddg model.
+     */
+    private def addNewRowCompleteTree(bdd: sync.bddg.BDD, row: sync.tt.Row): Unit = {
+      var portList: Set[sync.tt.Port] = Set.empty
+      var oldValue = false
+      var lastSubtree: sync.bddg.Subtree = null
+      var newTree: sync.bddg.Tree = bdd.getRoot()
+
+      //iterate over tree to find next empty subtree
+      while (newTree != null) {
+        if (newTree.isInstanceOf[sync.bddg.Subtree]) {
+          lastSubtree = newTree.asInstanceOf[sync.bddg.Subtree]
+          row.getCells().foreach(c => {
+            if (c.getPort().getName() == lastSubtree.getPort().getName()) {
+              //goto next subtree
+              if (c.getValue()) {
+                newTree = lastSubtree.getTreeForOne()
+              } else {
+                newTree = lastSubtree.getTreeForZero()
+              }
+              portList += c.getPort()
+              oldValue = c.getValue()
+              //trace link
+              +row makePlayerSyncRelated (lastSubtree)
+            }
+          })
+        }
+      }
+
+      //add subtrees for all missing cells with input ports
+      row.getCells().filter(c => !portList.contains(c.getPort()) && c.getPort().isInstanceOf[sync.tt.InputPort]).foreach(c => {
+        val opTreePort: PlayerSync = +(c.getPort()) getRelatedClassFromName ("sync.bddg.InputPort")
+        if (opTreePort != null) {
+          val inputPort = opTreePort.asInstanceOf[sync.bddg.InputPort]
+          var subtree = new sync.bddg.Subtree(null, null, inputPort, Set.empty, Set.empty, null)
+          bdd.addTrees(subtree)
+          subtree.setOwnerBDD(bdd)
+          if (lastSubtree == null) {
+            bdd.setRoot(subtree)
+          } else {
+            if (oldValue) {
+              lastSubtree.setTreeForOne(subtree)
+              subtree.addOwnerSubtreeForOne(lastSubtree)
+            } else {
+              lastSubtree.setTreeForZero(subtree)
+              subtree.addOwnerSubtreeForZero(lastSubtree)
+            }
+          }
+          oldValue = c.getValue()
+          lastSubtree = subtree
+          //trace link
+          +row makePlayerSyncRelated (lastSubtree)
+        }
+      })
+
+      //Create new assignment and search all cells for it
+      val mapping = row.getCells().filter(c => c.getPort().isInstanceOf[sync.tt.OutputPort]).map(c => s"${c.getPort().getName()} ${c.getValue()}")
+
+      val mapped = leafNodes.get(mapping)
+      var leaf: sync.bddg.Leaf = null
+
+      if (!mapped.isEmpty) {
+        leaf = mapped.get
+      } else {
+        leaf = new sync.bddg.Leaf(Set.empty, Set.empty, Set.empty, bdd)
+        bdd.addTrees(leaf)
+        leafNodes += (mapping -> leaf)
+
+        row.getCells().filter(c => c.getPort().isInstanceOf[sync.tt.OutputPort]).foreach(cellout => {
+          //Create new assignment and search all cells for it
+          val assignment = new sync.bddg.Assignment(cellout.getValue(), null, null)
+          assignment.setOwner(leaf)
+          leaf.addAssignments(assignment)
+
+          val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("OutputPort")
+          if (ttport != null) {
+            val o_port = ttport.asInstanceOf[sync.bddg.OutputPort]
+            o_port.addAssignments(assignment)
+            assignment.setPort(o_port)
+          }
+        })
+      }
+
+      //connect assignments to cells
+      leaf.getAssignments().foreach(a => {
+        val cell = row.getCells().filter(_.getPort().getName() == a.getPort().getName()).head
+
+        //trace link
+        +cell makePlayerSyncRelated (a)
+      })
+
+      if (oldValue) {
+        lastSubtree.setTreeForOne(leaf)
+        leaf.addOwnerSubtreeForOne(lastSubtree)
+      } else {
+        lastSubtree.setTreeForZero(leaf)
+        leaf.addOwnerSubtreeForZero(lastSubtree)
+      }
+      //trace link
+      +row makePlayerSyncRelated (leaf)
+
+      //+row printAllManager ()
+    }
+
+    /**
+     * Function to add a new row for the sync.bdd model.
+     */
+    private def addNewRowCompleteTree(bdd: sync.bdd.BDD, row: sync.tt.Row): Unit = {
+      var portList: Set[sync.tt.Port] = Set.empty
+      var oldValue = false
+      var lastSubtree: sync.bdd.Subtree = null
+      var newTree: sync.bdd.Tree = bdd.getTree()
+
+      //iterate over tree to find next empty subtree
+      while (newTree != null) {
+        if (newTree.isInstanceOf[sync.bdd.Subtree]) {
+          lastSubtree = newTree.asInstanceOf[sync.bdd.Subtree]
+          row.getCells().foreach(c => {
+            if (c.getPort().getName() == lastSubtree.getPort().getName()) {
+              //goto next subtree
+              if (c.getValue()) {
+                newTree = lastSubtree.getTreeForOne()
+              } else {
+                newTree = lastSubtree.getTreeForZero()
+              }
+              portList += c.getPort()
+              oldValue = c.getValue()
+              //trace link
+              +row makePlayerSyncRelated (lastSubtree)
+            }
+          })
+        }
+      }
+
+      //add subtrees for all missing cells with input ports
+      row.getCells().filter(c => !portList.contains(c.getPort()) && c.getPort().isInstanceOf[sync.tt.InputPort]).foreach(c => {
+        val opTreePort: PlayerSync = +(c.getPort()) getRelatedClassFromName ("sync.bdd.InputPort")
+        if (opTreePort != null) {
+          val inputPort = opTreePort.asInstanceOf[sync.bdd.InputPort]
+          var subtree = new sync.bdd.Subtree(null, null, inputPort, null, null, null)
+          if (lastSubtree == null) {
+            bdd.setTree(subtree)
+            subtree.setOwnerBDD(bdd)
+          } else {
+            if (oldValue) {
+              lastSubtree.setTreeForOne(subtree)
+              subtree.setOwnerSubtreeForOne(lastSubtree)
+            } else {
+              lastSubtree.setTreeForZero(subtree)
+              subtree.setOwnerSubtreeForZero(lastSubtree)
+            }
+          }
+          oldValue = c.getValue()
+          lastSubtree = subtree
+          //trace link
+          +row makePlayerSyncRelated (lastSubtree)
+        }
+      })
+
+      //add leaf for each row with cells with output ports
+      val leaf = new sync.bdd.Leaf(Set.empty, null, null, null)
+      row.getCells().filter(c => c.getPort().isInstanceOf[sync.tt.OutputPort]).foreach(cellout => {
+        //Search connected assignement from cell
+        val oppAssign: PlayerSync = +cellout getRelatedClassFromName ("sync.bdd.Assignment")
+        if (oppAssign != null) {
+          val assignment = oppAssign.asInstanceOf[sync.bdd.Assignment]
+          assignment.setOwner(leaf)
+          leaf.addAssignments(assignment)
+        }
+
+        /*//Create new assignment and search all cells for it
+        val assignment = new sync.bdd.Assignment(cellout.getValue(), null, null)
+        assignment.setOwner(leaf)
+        leaf.addAssignments(assignment)
+
+        val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("sync.bdd.OutputPort")
+        if (ttport != null) {
+          val o_port = ttport.asInstanceOf[sync.bdd.OutputPort]
+          o_port.addAssignments(assignment)
+          assignment.setPort(o_port)
+        }
+        //trace link
+        +cellout makePlayerSyncRelated(assignment) 
+        
+        +cellout printAllManager()*/
+      })
+
+      if (oldValue) {
+        lastSubtree.setTreeForOne(leaf)
+        leaf.setOwnerSubtreeForOne(lastSubtree)
+      } else {
+        lastSubtree.setTreeForZero(leaf)
+        leaf.setOwnerSubtreeForZero(lastSubtree)
+      }
+      //trace link
+      +row makePlayerSyncRelated (leaf)
+    }
+
+    /**
+     * Old Method to complex because of special tree structure.
+     */
+    private def addNewRow(tree: sync.bdd.Tree, portList: Set[sync.tt.Port], row: sync.tt.Row): Unit = {
+      if (tree.isInstanceOf[sync.bdd.Leaf]) {
+        val oldLeaf = tree.asInstanceOf[sync.bdd.Leaf]
+        var cellValue: Set[String] = Set.empty
+        //proof if assignments are correct to the ones of the new row
+        row.getCells().filter(_.getPort().isInstanceOf[sync.tt.OutputPort]).foreach(c => {
+          cellValue += s"${c.getPort().getName()} ${c.getValue()}"
+        })
+        val firstCount = cellValue.size
+        oldLeaf.getAssignments().foreach(a => {
+          cellValue += s"${a.getPort().getName()} ${a.getValue()}"
+        })
+        if (firstCount < cellValue.size) {
+          //you must split and add new stuff 
+          //TODO problem with more than one connected row
+          val opRowTT: PlayerSync = +this getRelatedClassFromName ("sync.tt.Row")
+          if (opRowTT != null) {
+            val reRowTT = opRowTT.asInstanceOf[sync.tt.Row]
+            //compare opponent row with this row
+            reRowTT.getCells().filter(c => !portList.contains(c.getPort())).foreach(cO => {
+              row.getCells().filter(_.getPort() == cO.getPort()).foreach(cN => {
+                if (cN.getValue() != cO.getValue()) {
+                  //use this port for new one and create now all stuff
+                  val newLeaf = new sync.bdd.Leaf(Set.empty, null, null, null)
+
+                  row.getCells().filter(cl => cl.getPort().isInstanceOf[sync.tt.OutputPort]).foreach(cellout => {
+                    //Create new assignment and search all cells for it
+                    val assignment = new sync.bdd.Assignment(cellout.getValue(), null, null)
+                    assignment.setOwner(newLeaf)
+                    newLeaf.addAssignments(assignment)
+
+                    val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("OutputPort")
+                    if (ttport != null) {
+                      val o_port = ttport.asInstanceOf[sync.bdd.OutputPort]
+                      o_port.addAssignments(assignment)
+                      assignment.setPort(o_port)
+                    }
+
+                    //trace link
+                    +cellout makePlayerSyncRelated (assignment)
+                  })
+
+                  val bdtInputPort: PlayerSync = +(cO.getPort()) getRelatedClassFromName ("InputPort")
+                  if (bdtInputPort != null) {
+                    val i_port = bdtInputPort.asInstanceOf[sync.bdd.InputPort]
+                    var subtree: sync.bdd.Subtree = null
+                    if (oldLeaf.getOwnerSubtreeForOne() != null) {
+                      subtree = new sync.bdd.Subtree(null, null, i_port, oldLeaf.getOwnerSubtreeForOne(), null, null)
+                      oldLeaf.getOwnerSubtreeForOne().setTreeForOne(subtree)
+                    } else {
+                      subtree = new sync.bdd.Subtree(null, null, i_port, null, oldLeaf.getOwnerSubtreeForZero(), null)
+                      oldLeaf.getOwnerSubtreeForZero().setTreeForZero(subtree)
+                    }
+                    i_port.addSubtrees(subtree)
+                    if (cN.getValue()) {
+                      subtree.setTreeForOne(newLeaf)
+                      newLeaf.setOwnerSubtreeForOne(subtree)
+                      subtree.setTreeForZero(oldLeaf)
+                      oldLeaf.setOwnerSubtreeForOne(null)
+                      oldLeaf.setOwnerSubtreeForZero(subtree)
+                    } else {
+                      subtree.setTreeForOne(oldLeaf)
+                      oldLeaf.setOwnerSubtreeForOne(subtree)
+                      oldLeaf.setOwnerSubtreeForZero(null)
+                      subtree.setTreeForZero(newLeaf)
+                      newLeaf.setOwnerSubtreeForZero(subtree)
+                    }
+                  }
+                }
+              })
+            })
+          }
+        } else {
+          val rmSubtree: IRoleManager = +oldLeaf getManager ()
+          val rmRow: IRoleManager = +row getManager ()
+          if (rmSubtree != null && rmRow != null) {
+            rmSubtree.makeRelated(rmRow)
+          }
+        }
+      } else {
+        //is instance of subtree
+        val subtree = tree.asInstanceOf[sync.bdd.Subtree]
+        var port: sync.tt.Port = null
+        var value = false
+        row.getCells().foreach(c => {
+          if (c.getPort().getName() == subtree.getPort().getName()) {
+            port = c.getPort()
+            value = c.getValue()
+          }
+        })
+        val rmSubtree: IRoleManager = +subtree getManager ()
+        val rmRow: IRoleManager = +row getManager ()
+        if (rmSubtree != null && rmRow != null) {
+          rmSubtree.makeRelated(rmRow)
+        }
+        if (value) {
+          addNewRow(subtree.getTreeForOne(), portList + port, row)
+        } else {
+          addNewRow(subtree.getTreeForZero(), portList + port, row)
+        }
+      }
+    }
+
+    /**
+     * Change the names of TruthTable and BDDs.
+     */
+    def changeName(): Unit = {
+      if (!doSync) {
+        doSync = true;
+        var name: String = +this getName ();
+        getSyncer().foreach { a =>
+          if (!a.equals(this)) {
+            (+a).setName(name);
+          }
+        }
+        doSync = false;
+      }
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncHeadNamesSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncHeadNamesSync.scala
index ad02e8d5606680ad70dc72356c62aa39cc3e3f7c..c3f5e7afd340aebd259d2a082986aa64f17d1912 100644
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncHeadNamesSync.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncHeadNamesSync.scala
@@ -8,26 +8,26 @@ import org.rosi_project.model_management.sync.roles.ISyncRole
   */
 class SyncHeadNamesSync() extends ISyncCompartment {
 
-  def getNextRole(classname: Object): ISyncRole = {
+  override def getNextRole(classname: Object): ISyncRole = {
     if (classname.isInstanceOf[sync.bdd.BDD] || classname.isInstanceOf[sync.bddg.BDD] || classname.isInstanceOf[sync.tt.TruthTable])
       return new Sync()
     return null
   }
 
   def getFirstRole(classname: Object): ISyncRole = {
-    if (classname.isInstanceOf[sync.bdd.BDD] || classname.isInstanceOf[sync.bddg.BDD] || classname.isInstanceOf[sync.tt.TruthTable])
+    if (classname.isInstanceOf[sync.tt.TruthTable])
       return new Sync()
     return null
   }
 
-  def isNextIntegration(classname: Object): Boolean = {
+  override def isNextIntegration(classname: Object): Boolean = {
     if (classname.isInstanceOf[sync.bdd.BDD] || classname.isInstanceOf[sync.bddg.BDD] || classname.isInstanceOf[sync.tt.TruthTable])
       return true
     return false
   }
 
   def isFirstIntegration(classname: Object): Boolean = {
-    if (classname.isInstanceOf[sync.bdd.BDD] || classname.isInstanceOf[sync.bddg.BDD] || classname.isInstanceOf[sync.tt.TruthTable])
+    if (classname.isInstanceOf[sync.tt.TruthTable])
       return true
     return false
   }
@@ -44,7 +44,7 @@ class SyncHeadNamesSync() extends ISyncCompartment {
       if (!doSync) {
         doSync = true;
         var name: String = +this getName();
-        syncer.foreach { a =>
+        getSyncer().foreach { a =>
           if (!a.equals(this)) {
             (+a).setName(name);
           }
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncInputPortNamesSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncInputPortNamesSync.scala
index a7b3e34b7663b98e0d60eab1b3c80d3154ef672d..677e47b80df07153204acbebfcfb8ada62f584d5 100644
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncInputPortNamesSync.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncInputPortNamesSync.scala
@@ -4,30 +4,30 @@ import org.rosi_project.model_management.sync.ISyncCompartment
 import org.rosi_project.model_management.sync.roles.ISyncRole
 
 /**
-  * Synchronization compartment for full name split with space.
+  * Synchronization compartment for input port names.
   */
 class SyncInputPortNamesSync() extends ISyncCompartment {
 
-  def getNextRole(classname: Object): ISyncRole = {
+  override def getNextRole(classname: Object): ISyncRole = {
     if (classname.isInstanceOf[sync.bdd.InputPort] || classname.isInstanceOf[sync.bddg.InputPort] || classname.isInstanceOf[sync.tt.InputPort])
       return new Sync()
     return null
   }
 
   def getFirstRole(classname: Object): ISyncRole = {
-    if (classname.isInstanceOf[sync.bdd.InputPort] || classname.isInstanceOf[sync.bddg.InputPort] || classname.isInstanceOf[sync.tt.InputPort])
+    if (classname.isInstanceOf[sync.tt.InputPort])
       return new Sync()
     return null
   }
 
-  def isNextIntegration(classname: Object): Boolean = {
+  override def isNextIntegration(classname: Object): Boolean = {
     if (classname.isInstanceOf[sync.bdd.InputPort] || classname.isInstanceOf[sync.bddg.InputPort] || classname.isInstanceOf[sync.tt.InputPort])
       return true
     return false
   }
 
   def isFirstIntegration(classname: Object): Boolean = {
-    if (classname.isInstanceOf[sync.bdd.InputPort] || classname.isInstanceOf[sync.bddg.InputPort] || classname.isInstanceOf[sync.tt.InputPort])
+    if (classname.isInstanceOf[sync.tt.InputPort])
       return true
     return false
   }
@@ -44,7 +44,7 @@ class SyncInputPortNamesSync() extends ISyncCompartment {
       if (!doSync) {
         doSync = true;
         var name: String = +this getName();
-        syncer.foreach { a =>
+        getSyncer().foreach { a =>
           if (!a.equals(this)) {
             (+a).setName(name);
           }
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncOutputPortNamesSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncOutputPortNamesSync.scala
index 75fb40a844be12adde208c821092007964c8dc29..3a67d3dd7dbc33b28bcbfc909cc705f17a916f67 100644
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncOutputPortNamesSync.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncOutputPortNamesSync.scala
@@ -4,30 +4,30 @@ import org.rosi_project.model_management.sync.ISyncCompartment
 import org.rosi_project.model_management.sync.roles.ISyncRole
 
 /**
-  * Synchronization compartment for full name split with space.
+  * Synchronization compartment for output port names.
   */
 class SyncOutputPortNamesSync() extends ISyncCompartment {
 
-  def getNextRole(classname: Object): ISyncRole = {
+  override def getNextRole(classname: Object): ISyncRole = {
     if (classname.isInstanceOf[sync.bdd.OutputPort] || classname.isInstanceOf[sync.bddg.OutputPort] || classname.isInstanceOf[sync.tt.OutputPort])
       return new Sync()
     return null
   }
 
   def getFirstRole(classname: Object): ISyncRole = {
-    if (classname.isInstanceOf[sync.bdd.OutputPort] || classname.isInstanceOf[sync.bddg.OutputPort] || classname.isInstanceOf[sync.tt.OutputPort])
+    if (classname.isInstanceOf[sync.tt.OutputPort])
       return new Sync()
     return null
   }
 
-  def isNextIntegration(classname: Object): Boolean = {
+  override def isNextIntegration(classname: Object): Boolean = {
     if (classname.isInstanceOf[sync.bdd.OutputPort] || classname.isInstanceOf[sync.bddg.OutputPort] || classname.isInstanceOf[sync.tt.OutputPort])
       return true
     return false
   }
 
   def isFirstIntegration(classname: Object): Boolean = {
-    if (classname.isInstanceOf[sync.bdd.OutputPort] || classname.isInstanceOf[sync.bddg.OutputPort] || classname.isInstanceOf[sync.tt.OutputPort])
+    if (classname.isInstanceOf[sync.tt.OutputPort])
       return true
     return false
   }
@@ -44,7 +44,7 @@ class SyncOutputPortNamesSync() extends ISyncCompartment {
       if (!doSync) {
         doSync = true;
         var name: String = +this getName();
-        syncer.foreach { a =>
+        getSyncer().foreach { a =>
           if (!a.equals(this)) {
             (+a).setName(name);
           }
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncPortNamesSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncPortNamesSync.scala
new file mode 100644
index 0000000000000000000000000000000000000000..ff789f84c1db664ea9c0ad1bba63fb34ea9de310
--- /dev/null
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncPortNamesSync.scala
@@ -0,0 +1,57 @@
+package ttc2019.worksync
+
+import org.rosi_project.model_management.sync.ISyncCompartment
+import org.rosi_project.model_management.sync.roles.ISyncRole
+
+/**
+  * Synchronization compartment for port names.
+  */
+class SyncPortNamesSync extends ISyncCompartment {
+
+  override def getNextRole(classname: Object): ISyncRole = {
+    if (classname.isInstanceOf[sync.bdd.Port] || classname.isInstanceOf[sync.bddg.Port] || classname.isInstanceOf[sync.tt.Port])
+      return new Sync()
+    return null
+  }
+
+  def getFirstRole(classname: Object): ISyncRole = {
+    if (classname.isInstanceOf[sync.tt.Port])
+      return new Sync()
+    return null
+  }
+
+  override def isNextIntegration(classname: Object): Boolean = {
+    if (classname.isInstanceOf[sync.bdd.Port] || classname.isInstanceOf[sync.bddg.Port] || classname.isInstanceOf[sync.tt.Port])
+      return true
+    return false
+  }
+
+  def isFirstIntegration(classname: Object): Boolean = {
+    if (classname.isInstanceOf[sync.tt.Port])
+      return true
+    return false
+  }
+
+  def getNewInstance(): ISyncCompartment = new SyncPortNamesSync
+
+  def getRuleName(): String = "SyncPortNamesSync"
+
+  class Sync() extends ISyncRole {
+
+    def getOuterCompartment(): ISyncCompartment = SyncPortNamesSync.this
+
+    def changeName(): Unit = {
+      if (!doSync) {
+        doSync = true;
+        var name: String = +this getName();
+        getSyncer().foreach { a =>
+          if (!a.equals(this)) {
+            (+a).setName(name);
+          }
+        }
+        doSync = false;
+      }
+    }    
+  }
+
+}
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/TTandBDTandBDDSyncConstruction.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/TTandBDTandBDDSyncConstruction.scala
index 93fca644cadd4dd2d4c576615a9c7dcb829ea9bf..c1d40e911f6213a99337890dc2065e85cda0357a 100644
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/TTandBDTandBDDSyncConstruction.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/TTandBDTandBDDSyncConstruction.scala
@@ -30,7 +30,9 @@ object TTandBDTandBDDSyncConstruction extends IConstructionCompartment {
       return new BDDOutputPortConstruct()
     if (classname.isInstanceOf[sync.bdd.OutputPort])
       return new BDTOutputPortConstruct()
-    return null
+    //if (classname.isInstanceOf[sync.tt.Cell])
+    //  return new CellConstruct()
+    return new Suppressor
   }
   
   def getRuleName: String = "TTandBDTandBDDSyncConstruction"
@@ -215,11 +217,36 @@ object TTandBDTandBDDSyncConstruction extends IConstructionCompartment {
     }
   }
   
-  class TTRowConstruct() extends IConstructor {
+  /*class CellConstruct extends IConstructor {
+    //TODO: should only be for output cells
+    override def construct(comp: PlayerSync, man: IRoleManager): Unit = {
+      //Step 1: Get construction values
+      val value: Boolean = +this getValue()
 
-    def construct(comp: PlayerSync, man: IRoleManager): Unit = {
-      //TODO: modify the whole tree
-      //TODO: Cell construct does not make sense directly
+      //Step 2: Create the object in the other models
+      val dAll = new sync.bddg.Assignment(value, null, null)
+      val tAll = new sync.bdd.Assignment(value, null, null)
+
+      //Step 3: Create Containers 
+      createContainerElement(true, true, comp, man)
+      createContainerElement(false, true, dAll, SynchronizationCompartment.createRoleManager())
+      createContainerElement(false, true, tAll, SynchronizationCompartment.createRoleManager())
+
+      //Step 4: Finish Creation
+      makeCompleteConstructionProcess(containers)      
+      
+      /*// just set up the player
+      createContainerElement(start=true, con=true, comp, man)
+      makeCompleteConstructionProcess(containers)*/
+    }
+  }*/
+  
+  class Suppressor extends IConstructor {
+
+    override def construct(comp: PlayerSync, man: IRoleManager): Unit = {
+      // just set up the player
+      createContainerElement(start=true, con=true, comp, man)
+      makeCompleteConstructionProcess(containers)
     }
   }