diff --git a/solutions/RSync/src/main/scala/creation/CreationTTSync.scala b/solutions/RSync/src/main/scala/creation/CreationTTSync.scala
new file mode 100644
index 0000000000000000000000000000000000000000..7e79af7e12972cf721020a8a0feb5e17365e1258
--- /dev/null
+++ b/solutions/RSync/src/main/scala/creation/CreationTTSync.scala
@@ -0,0 +1,80 @@
+package creation
+
+import sync.tt.Row
+import sync.tt.Port
+import sync.tt.InputPort
+import sync.tt.TruthTable
+import org.eclipse.emf.ecore.EObject
+import sync.tt.LocatedElement
+import sync.tt.OutputPort
+import sync.tt.Cell
+
+/**
+ * This file is automatically generated from the code generator
+ * for the role-based model management framework.
+ */
+class CreationTTSync extends ICreationTT {
+
+  var mapping: Map[EObject, Object] = Map.empty
+
+  override def createLocatedElement(location: String, id: EObject): Unit = {
+    mapping += (id -> new LocatedElement(location))
+  }
+
+  override def createInputPort(name: String, location: String, id: EObject): Unit = {
+    mapping += (id -> new InputPort(name, Set.empty, null, location))
+  }
+
+  override def createOutputPort(name: String, location: String, id: EObject): Unit = {
+    mapping += (id -> new OutputPort(name, Set.empty, null, location))
+  }
+
+  override def createTruthTable(name: String, location: String, id: EObject): Unit = {
+    mapping += (id -> new TruthTable(name, Set.empty, Set.empty, location))
+  }
+
+  override def createRow(location: String, id: EObject): Unit = {
+    mapping += (id -> new Row(Set.empty, null, location))
+  }
+
+  override def createCell(value: Boolean, location: String, id: EObject): Unit = {
+    mapping += (id -> new Cell(value, null, null, location))
+  }
+
+  override def createTruthTableRowsRow(s: EObject, t: EObject): Unit = {
+    val s1 = mapping.get(s).get.asInstanceOf[TruthTable]
+    val t1 = mapping.get(t).get.asInstanceOf[Row]
+    s1.addRows(t1)
+    t1.setOwner(s1)
+  }
+
+  override def createTruthTablePortsPort(s: EObject, t: EObject): Unit = {
+    val s1 = mapping.get(s).get.asInstanceOf[TruthTable]
+    val t1 = mapping.get(t).get.asInstanceOf[Port]
+    s1.addPorts(t1)
+    t1.setOwner(s1)
+  }
+
+  override def createRowCellsCell(s: EObject, t: EObject): Unit = {
+    val s1 = mapping.get(s).get.asInstanceOf[Row]
+    val t1 = mapping.get(t).get.asInstanceOf[Cell]
+    s1.addCells(t1)
+    t1.setOwner(s1)
+  }
+
+  override def createCellPortPort(s: EObject, t: EObject): Unit = {
+    val s1 = mapping.get(s).get.asInstanceOf[Cell]
+    val t1 = mapping.get(t).get.asInstanceOf[Port]
+    s1.setPort(t1)
+    t1.addCells(s1)
+  }
+
+  override def toString(): String = {
+    "CreationTTSync:"
+  }
+
+}
+
+
+
+    
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/creation/ICreationTT.scala b/solutions/RSync/src/main/scala/creation/ICreationTT.scala
new file mode 100644
index 0000000000000000000000000000000000000000..cb7d8c27c5c5979dfd01b12625e0ca7d1a266aaf
--- /dev/null
+++ b/solutions/RSync/src/main/scala/creation/ICreationTT.scala
@@ -0,0 +1,39 @@
+package creation
+
+import org.eclipse.emf.ecore.EObject
+
+/**
+ * This file is automatically generated from the code generator
+ * for the role-based model management framework.
+ */
+trait ICreationTT {
+
+  def createTruthTable(name: String, location: String, id: EObject): Unit
+  
+  def createLocatedElement(location: String, id: EObject): Unit
+  
+  def createCell(value: Boolean, location: String, id: EObject): Unit
+  
+  def createOutputPort(name: String, location: String, id: EObject): Unit
+  
+  def createInputPort(name: String, location: String, id: EObject): Unit
+  
+  def createRow(location: String, id: EObject): Unit
+  
+  def createTruthTableRowsRow(s: EObject, t: EObject): Unit
+  
+  def createTruthTablePortsPort(s: EObject, t: EObject): Unit
+  
+  def createCellPortPort(s: EObject, t: EObject): Unit
+  
+  def createRowCellsCell(s: EObject, t: EObject): Unit
+  
+  override def toString(): String = {
+    "ICreationTT:"
+  }
+
+}
+
+
+
+    
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/creation/LoaderTT.scala b/solutions/RSync/src/main/scala/creation/LoaderTT.scala
new file mode 100644
index 0000000000000000000000000000000000000000..c4ca5d6150ef38446b8600e6394bd07dd724974a
--- /dev/null
+++ b/solutions/RSync/src/main/scala/creation/LoaderTT.scala
@@ -0,0 +1,92 @@
+package creation
+
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl
+import org.eclipse.emf.ecore.resource.Resource
+import org.eclipse.emf.ecore.EObject
+import org.eclipse.emf.common.util.URI
+import scala.collection.JavaConverters._
+import ttc2019.metamodels.tt.TruthTable
+import ttc2019.metamodels.tt.InputPort
+import ttc2019.metamodels.create.LoadEObject
+
+/**
+ * This file is automatically generated from the code generator
+ * for the role-based model management framework.
+ */
+class LoaderTT {
+
+  def loadEcore(pathMeta: String, pathInstance: String): EObject = {
+    require(null != pathMeta && pathMeta.nonEmpty && null != pathInstance && pathInstance.nonEmpty)
+    val resourceSet = new ResourceSetImpl()
+    resourceSet.getResourceFactoryRegistry.getExtensionToFactoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl())
+    val ressourceMeta = resourceSet.getResource(URI.createFileURI(pathMeta), true)
+    val packageMeta = ressourceMeta.getContents().get(0)
+    require(null != ressourceMeta)
+    require(!ressourceMeta.getContents.isEmpty)
+    resourceSet.getPackageRegistry().put("https://www.transformation-tool-contest.eu/2019/tt", packageMeta);
+    val ressourceModel = resourceSet.getResource(URI.createURI(pathInstance), true);
+    return ressourceModel.getContents().get(0)
+  }
+
+  def createTTInstance(obj: EObject, creator: ICreationTT): Unit = {
+    createObj(obj, creator)
+    obj.eAllContents().asScala.foreach(o => {
+      createObj(o, creator)
+    })
+    createRef(obj, creator)
+    obj.eAllContents().asScala.foreach(o => {
+      createRef(o, creator)
+    })
+  }
+
+  private def createObj(obj: EObject, creator: ICreationTT): Unit = {
+    var objName = obj.eClass.getName
+    var locatedString: String = null
+    var locatedElement = obj.eGet(obj.eClass().getEStructuralFeature("location"))
+    if (locatedElement != null) {
+      locatedString = locatedElement.toString()
+    }
+    objName match {
+      case "InputPort"      => creator.createInputPort(obj.eGet(obj.eClass().getEStructuralFeature("name")).toString(), locatedString, obj)
+      case "OutputPort"     => creator.createOutputPort(obj.eGet(obj.eClass().getEStructuralFeature("name")).toString(), locatedString, obj)
+      case "TruthTable"     => creator.createTruthTable(obj.eGet(obj.eClass().getEStructuralFeature("name")).toString(), locatedString, obj)
+      case "Row"            => creator.createRow(locatedString, obj)
+      case "Cell"           => creator.createCell(obj.eGet(obj.eClass().getEStructuralFeature("value")).asInstanceOf[Boolean], locatedString, obj)
+      case "LocatedElement" => creator.createLocatedElement(locatedString, obj)
+      case _                =>
+    }
+  }
+
+  private def createRef(o1: EObject, creator: ICreationTT): Unit = {
+    o1.eClass().getEAllReferences.forEach(sf => {
+      val sfName = sf.getName
+      if (sfName == "owner" || sfName == "port") {
+        val o2 = o1.eGet(sf).asInstanceOf[EObject]
+        val o1Name = o1.eClass().getName
+        val o2Name = o2.eClass().getName
+        if (o1Name.contains("Row") && sfName == "owner" && o2Name.contains("TruthTable")) {
+          creator.createTruthTableRowsRow(o2, o1)
+        }
+        if (o1Name.contains("Port") && sfName == "owner" && o2Name.contains("TruthTable")) {
+          creator.createTruthTablePortsPort(o2, o1)
+        }
+        if (o1Name.contains("Cell") && sfName == "owner" && o2Name.contains("Row")) {
+          creator.createRowCellsCell(o2, o1)
+        }
+        if (o1Name.contains("Cell") && sfName == "port" && o2Name.contains("Port")) {
+          creator.createCellPortPort(o1, o2)
+        }
+      }
+    })
+  }
+
+  override def toString(): String = {
+    "LoaderTT:"
+  }
+
+}
+
+
+
+    
\ No newline at end of file
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/ConsistencyManagement.scala
similarity index 70%
rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/core/SynchronizationCompartment.scala
rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/core/ConsistencyManagement.scala
index bd5886a849df8b2eb41a3a3e1842b13ac7d024b3..ee95fcf55561c2d283e47ce22986ea96045cf829 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/ConsistencyManagement.scala
@@ -9,19 +9,19 @@ import org.rosi_project.model_management.sync._
 import org.rosi_project.model_management.sync.roles._
 import org.rosi_project.model_management.sync.compartments._
 
-object SynchronizationCompartment extends ISynchronizationCompartment {
+object ConsistencyManagement extends ISynchronizationCompartment {
 
-  def createRoleManager(): IRoleManager = new RoleManager()
+  def createRoleManager(): ISyncManagerRole = new SyncManager()
 
   private var activeConstructionCompartment: IConstructionCompartment = null //object
   private var activeDestructionCompartment: IDestructionCompartment = null //object
-  private var activeSyncCompartmentInstances = Set.empty[ISyncCompartment] //classes
-  private var activeExtensionCompartments = Set.empty[IExtenstionCompartment] //objects
+  private var activeModificationCompartmentInstances = Set.empty[IModificationCompartment] //classes
+  private var activeExtensionCompartments = Set.empty[IExtensionCompartment] //objects
 
-  private var availableExtensionCompartments: List[IExtenstionCompartment] = List[IExtenstionCompartment]()
+  private var availableExtensionCompartments: List[IExtensionCompartment] = List[IExtensionCompartment]()
   private var availableConstructionCompartments: List[IConstructionCompartment] = List[IConstructionCompartment]()
   private var availableDestructionCompartments: List[IDestructionCompartment] = List[IDestructionCompartment]()
-  private var availableSyncCompartments: List[ISyncCompartment] = List[ISyncCompartment]()
+  private var availableModificationCompartments: List[IModificationCompartment] = List[IModificationCompartment]()
 
   changeConstructionRule(SuppressingConstructionCompartment)
   changeDestructionRule(GeneralDestructor)
@@ -30,17 +30,17 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
 
   def getDestructionRule(): IDestructionCompartment = activeDestructionCompartment
 
-  def getSyncRules(): Set[ISyncCompartment] = activeSyncCompartmentInstances
+  def getModificationRules(): Set[IModificationCompartment] = activeModificationCompartmentInstances
 
-  def getExtensions(): Set[IExtenstionCompartment] = activeExtensionCompartments
+  def getExtensions(): Set[IExtensionCompartment] = activeExtensionCompartments
 
   def getAvailableConstructionRule(): List[IConstructionCompartment] = availableConstructionCompartments
 
   def getAvailableDestructionRule(): List[IDestructionCompartment] = availableDestructionCompartments
 
-  def getAvailableSyncRules(): List[ISyncCompartment] = availableSyncCompartments
+  def getAvailableModificationRules(): List[IModificationCompartment] = availableModificationCompartments
 
-  def getAvailableExtensions(): List[IExtenstionCompartment] = availableExtensionCompartments
+  def getAvailableExtensions(): List[IExtensionCompartment] = availableExtensionCompartments
 
   /**
    * Method for Debug Output.
@@ -61,9 +61,9 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
     println("")
     val nodes = this.allPlayers
     nodes.foreach {
-      case n: ISyncRole =>
-        val role: ISyncRole = n.asInstanceOf[ISyncRole]
-        val compart: ISyncCompartment = role.getOuterCompartment
+      case n: IModificationRole =>
+        val role: IModificationRole = n.asInstanceOf[IModificationRole]
+        val compart: IModificationCompartment = role.getOuterCompartment
         println("Output N: " + n + " Player: " + n.player + " Comp: " + compart + " RN: " + compart.getRuleName)
       case _ =>
     }
@@ -84,7 +84,7 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
     println("")
   }
 
-  def registerConstructionCompartment(compartment: IConstructionCompartment): Unit = {
+  def registerConstructionRule(compartment: IConstructionCompartment): Unit = {
     if (compartment == null)
       return
     if (!availableConstructionCompartments.contains(compartment)) {
@@ -93,7 +93,7 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
     }
   }
 
-  def registerDestructionCompartment(compartment: IDestructionCompartment): Unit = {
+  def registerDestructionRule(compartment: IDestructionCompartment): Unit = {
     if (compartment == null)
       return
     if (!availableDestructionCompartments.contains(compartment)) {
@@ -102,15 +102,15 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
     }
   }
 
-  def registerSyncRule(compartment: ISyncCompartment): Unit = {
+  def registerModificationRule(compartment: IModificationCompartment): Unit = {
     if (compartment == null)
       return
-    if (!availableSyncCompartments.contains(compartment)) {
-      availableSyncCompartments = availableSyncCompartments :+ compartment
+    if (!availableModificationCompartments.contains(compartment)) {
+      availableModificationCompartments = availableModificationCompartments :+ compartment
     }
   }
 
-  def registerExtensionCompartment(compartment: IExtenstionCompartment): Unit = {
+  def registerExtension(compartment: IExtensionCompartment): Unit = {
     if (compartment == null)
       return
     if (!availableExtensionCompartments.contains(compartment)) {
@@ -119,14 +119,14 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
     }
   }
 
-  def activateExtensionCompartment(compartment: IExtenstionCompartment): Unit = {
+  def activateExtension(compartment: IExtensionCompartment): Unit = {
     if (compartment == null)
       return
     activeExtensionCompartments += compartment
-    registerExtensionCompartment(compartment)
+    registerExtension(compartment)
   }
 
-  def deactivateExtensionCompartment(compartment: IExtenstionCompartment): Unit = {
+  def deactivateExtension(compartment: IExtensionCompartment): Unit = {
     if (compartment == null)
       return
     activeExtensionCompartments -= compartment
@@ -140,7 +140,7 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
       return
     }
     activeConstructionCompartment = construct
-    registerConstructionCompartment(construct)
+    registerConstructionRule(construct)
   }
 
   /**
@@ -153,21 +153,21 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
     }
     if (activeDestructionCompartment == null) {
       activeDestructionCompartment = destruct
-      registerDestructionCompartment(destruct)
+      registerDestructionRule(destruct)
       return
     }
     //debugCompleteRoleGraphOutput()
     var nodes = this.allPlayers; //get all nodes
     //delete all destruction roles
     nodes.foreach { n =>
-      if (n.isInstanceOf[IDestructor])
+      if (n.isInstanceOf[IDestructionRole])
         n.remove()
     }
     //debugCompleteRoleGraphOutput()
     //add all new ones
     nodes = this.allPlayers
     nodes.foreach {
-      case n: IRoleManager =>
+      case n: ISyncManagerRole =>
         //add new role here
         val player = n.player
         if (player.isRight) {
@@ -180,23 +180,23 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
     //debugCompleteRoleGraphOutput()
     activeDestructionCompartment = destruct
 
-    registerDestructionCompartment(destruct)
+    registerDestructionRule(destruct)
   }
 
   /**
-   * Integration of a new Model with an integration compartment.
+   * Transformation of a new Model with an transformation compartment.
    */
-  def integrateNewModel(integrationRule: IIntegrationCompartment): Unit = {
-    this combine integrationRule
+  def transformModel(transformationRule: ITransformationCompartment): Unit = {
+    this combine transformationRule
     val nodes = this.allPlayers
     nodes.foreach {
       case player: PlayerSync =>
-        val role = integrationRule.getIntegratorForClassName(player)
+        val role = transformationRule.getTransformation(player)
         //println("RM: " + n + " Role: " + role)
         if (role != null) {
           player play role
           underConstruction = true;
-          (+player).integrate(player)
+          (+player).transform(player)
           underConstruction = false;
           role.remove()
         }
@@ -204,33 +204,33 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
     }
     nodes.foreach {
       case player: PlayerSync =>
-        val role = integrationRule.getRelationalIntegratorsForClassName(player)
+        val role = transformationRule.getRelationTransformation(player)
         //println("RM: " + n + " Role: " + role)
         if (role != null) {
           player play role
           underConstruction = true;
-          (+player).integrate(player)
+          (+player).transform(player)
           underConstruction = false;
           role.remove()
         }
       case _ =>
     }
-    integrationRule.finalEditFunction()
+    transformationRule.finishFunction()
   }
 
   /**
    * Add a new synchronization rule to the synchronization process.
    */
-  def addSynchronizationRule(newRule: ISyncCompartment): Unit = {
+  def addModificationRule(newRule: IModificationCompartment): Unit = {
     if (newRule == null) {
       return
     }
     //if the rule is in the list stop
-    activeSyncCompartmentInstances.foreach { s =>
+    activeModificationCompartmentInstances.foreach { s =>
       if (s.getRuleName == newRule.getRuleName)
         return
     }
-    activeSyncCompartmentInstances += newRule
+    activeModificationCompartmentInstances += newRule
 
     var running = true
     var nodes = Seq[AnyRef]()
@@ -240,7 +240,7 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
         running = false
         nodes = this.allPlayers; //get all nodes
         nodes.foreach {
-          case n: RoleManager =>
+          case n: ISyncManagerRole =>
             //proof if the role manager does not play this rule
             var proof = true
             val player = n.player
@@ -249,8 +249,8 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
               val relatedRoles = n.roles()
               //println(realPlayer + "-----" + relatedRoles)
               relatedRoles.foreach {
-                case syncRole: ISyncRole =>
-                  val syncComp: ISyncCompartment = syncRole.getOuterCompartment
+                case syncRole: IModificationRole =>
+                  val syncComp: IModificationCompartment = syncRole.getOuterCompartment
                   if (syncComp.getRuleName == newRule.getRuleName || !newRule.isFirstIntegration(realPlayer))
                     proof = false
                 case _ =>
@@ -260,7 +260,7 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
               if (proof) {
                 //add new role to the player
                 //the new compartment
-                val newComp: ISyncCompartment = newRule.getNewInstance
+                val newComp: IModificationCompartment = newRule.getNewInstance
                 val newRole = newComp.getNextIntegrationRole(realPlayer)
                 //println("**" + newComp + " " + newRole + " " + n + " " + realPlayer)
                 if (newRole != null)
@@ -293,25 +293,25 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
       }
     }
 
-    registerSyncRule(newRule)
+    registerModificationRule(newRule)
     //debugPlayerRolesOutput()
     //debugSyncRoleGraphOutput()
   }
 
-  def hasSynchronizationRule(ruleName: String): Boolean = {
-    activeSyncCompartmentInstances.map(_.getRuleName).contains(ruleName)
+  def hasModificationRule(ruleName: String): Boolean = {
+    activeModificationCompartmentInstances.map(_.getRuleName).contains(ruleName)
   }
 
   /**
    * Delete all rules with this name.
    */
-  def deleteRule(ruleName: String): Unit = {
+  def deleteModificationRule(ruleName: String): Unit = {
     val nodes = this.allPlayers //get all nodes
     nodes.foreach {
-      case n: ISyncRole =>
-        val role: ISyncRole = n.asInstanceOf[ISyncRole]
-        val compart: ISyncCompartment = role.getOuterCompartment
-        //println("Destruct1: " + n.isInstanceOf[ISyncRole] + " N: " + n + " Player: " + n.player + " Comp: " + compart + " RN: " + compart.getRuleName() + " From: " + from)
+      case n: IModificationRole =>
+        val role: IModificationRole = n.asInstanceOf[IModificationRole]
+        val compart: IModificationCompartment = role.getOuterCompartment
+        //println("Destruct1: " + n.isInstanceOf[IModificationRole] + " N: " + n + " Player: " + n.player + " Comp: " + compart + " RN: " + compart.getRuleName() + " From: " + from)
         if (compart.getRuleName == ruleName) {
           compart.clearSyncer()
           n.remove()
@@ -322,9 +322,9 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
 
     // rule names should be unique (in theory)
     // but we're better save than sorry
-    val ruleCompartments = activeSyncCompartmentInstances.filter(_.getRuleName == ruleName)
+    val ruleCompartments = activeModificationCompartmentInstances.filter(_.getRuleName == ruleName)
     for (comp <- ruleCompartments) {
-      activeSyncCompartmentInstances -= comp
+      activeModificationCompartmentInstances -= comp
     }
 
     //debugCompleteRoleGraphOutput()
@@ -333,7 +333,7 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
   /**
    * Change rule with this name to new rule.
    */
-  def changeRuleFromTo(from: String, to: ISyncCompartment): Unit = {
+  def changeModificationRule(from: String, to: IModificationCompartment): Unit = {
     var running = true
     var nodes = Seq[AnyRef]()
     while (running) {
@@ -341,16 +341,16 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
         running = false
         nodes = this.allPlayers //get all nodes
         nodes.foreach {
-          case role: ISyncRole =>
-            val compart: ISyncCompartment = role.getOuterCompartment
-            //println("Destruct1: " + n.isInstanceOf[ISyncRole] + " N: " + n + " Player: " + n.player + " Comp: " + compart + " RN: " + compart.getRuleName() + " From: " + from)
+          case role: IModificationRole =>
+            val compart: IModificationCompartment = role.getOuterCompartment
+            //println("Destruct1: " + n.isInstanceOf[IModificationRole] + " N: " + n + " Player: " + n.player + " Comp: " + compart + " RN: " + compart.getRuleName() + " From: " + from)
             if (compart.getRuleName == from) {
               //exchange this with a new compartment
-              val newComp: ISyncCompartment = to.getNewInstance
+              val newComp: IModificationCompartment = to.getNewInstance
               compart.getSyncer.foreach { r =>
                 val manager = (+r).getManager()
                 if (manager.isRight) {
-                  val realManager: RoleManager = manager.right.get(0).right.get
+                  val realManager: ISyncManagerRole = manager.right.get(0).right.get
                   val player = r.player
                   if (player.isRight) {
                     val realPlayer = player.right.get
@@ -375,19 +375,19 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
 
     // rule names should be unique (in theory)
     // but we're better save than sorry
-    val oldRuleCompartments = activeSyncCompartmentInstances.filter(_.getRuleName == from)
+    val oldRuleCompartments = activeModificationCompartmentInstances.filter(_.getRuleName == from)
     for (comp <- oldRuleCompartments) {
-      activeSyncCompartmentInstances -= comp
+      activeModificationCompartmentInstances -= comp
     }
-    activeSyncCompartmentInstances += to
+    activeModificationCompartmentInstances += to
 
-    registerSyncRule(to)
+    registerModificationRule(to)
     //debugSyncRoleGraphOutput()
   }
 
-  class RoleManager() extends IRoleManager {
+  class SyncManager() extends ISyncManagerRole {
 
-    def getRelatedClassFromName(name: String): PlayerSync = {
+    def getRelatedObject(name: String): PlayerSync = {
       getRelatedManager.foreach(rm => {
         val realPlayer = rm.player.right.get
         //TODO: look on more superclasses
@@ -452,7 +452,7 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
     }
 
     /**
-     * Create a relation between two IRoleManager and RoleManager of other PlayerSync instances.
+     * Create a relation between two ISyncManagerRole 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/core/PlayerSync.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/PlayerSync.scala
index 2f0cbbef6e916ef942ea7cea173d42973f396013..e9119dd3cb43bcbc2ddfe251f01c68481291e80d 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/PlayerSync.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/PlayerSync.scala
@@ -12,12 +12,12 @@ trait PlayerSync extends MultiCompartment {
 
   def buildClass(): Unit = {
     //println("Create New Class")
-    if (!SynchronizationCompartment.isUnderConstruction()) {
-      SynchronizationCompartment combine this
-      val mani = SynchronizationCompartment.createRoleManager()
+    if (!ConsistencyManagement.isUnderConstruction()) {
+      ConsistencyManagement combine this
+      val mani = ConsistencyManagement.createRoleManager()
       this play mani
       mani.manage(this)
-      //this play SynchronizationCompartment.createRoleManager()
+      //this play ConsistencyManagement.createRoleManager()
       //+this manage this
     }
   }
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/RsumCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/RsumManagement.scala
similarity index 89%
rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/core/RsumCompartment.scala
rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/core/RsumManagement.scala
index b0835796ce78a1fa3e968481793b6fc52ac93c18..a62ae3dd0dc3aad335969647328a2ac733e1961a 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/RsumCompartment.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/RsumManagement.scala
@@ -7,7 +7,7 @@ import org.rosi_project.model_management.sum.roles._
 import org.rosi_project.model_management.sum.join._
 import org.rosi_project.model_management.sum.compartments.IRelationCompartment
 
-object RsumCompartment extends MultiCompartment {
+object RsumManagement extends MultiCompartment {
 
   //all active extensions
   private var activeExtensions = ListBuffer[IExtensionCompartment]()
@@ -34,8 +34,8 @@ object RsumCompartment extends MultiCompartment {
     }
     joinInfos += joinInfo
     
-    val bases = RsumCompartment.getNaturals().filter(joinInfo.isInstanceBaseModel(_))
-    val others = RsumCompartment.getNaturals().filter(joinInfo.isInstanceOtherModel(_))
+    val bases = getNaturals().filter(joinInfo.isInstanceBaseModel(_))
+    val others = getNaturals().filter(joinInfo.isInstanceOtherModel(_))
     //b can only match with one o TODO: uses last one if more than one matches
     //TODO: also iterate over joins to allow deep joins
     bases.foreach(b => {
@@ -83,8 +83,8 @@ object RsumCompartment extends MultiCompartment {
   
   def addViewTypeInfo(view: IViewTypeInfo): IViewTypeInfo = {
     //look if there is a view with this name
-    viewInfos.filter(_.getViewName() == view.getViewName()).foreach(v => {
-      println("View with name " + v.getViewName() + " is already known!")
+    viewInfos.filter(_.getViewName == view.getViewName).foreach(v => {
+      println("View with name " + v.getViewName + " is already known!")
       return v
     })
     viewInfos = viewInfos :+ view
@@ -94,7 +94,7 @@ object RsumCompartment extends MultiCompartment {
   
   def createActiveViewFromName(name: String): IViewCompartment = {
     //look if there is a view with this name
-    viewInfos.filter(_.getViewName() == name).foreach(
+    viewInfos.filter(_.getViewName == name).foreach(
         v => return this.createView(v))
     println("View with name %s is not known!", name)
     return null
@@ -118,7 +118,7 @@ object RsumCompartment extends MultiCompartment {
   
   private[model_management] def addActiveView(view: IViewCompartment): IViewCompartment = {
     //look if the view is registered
-    if (viewInfos.filter(_.getViewName() == view.getViewName()).isEmpty) {
+    if (viewInfos.filter(_.getViewName == view.getViewName()).isEmpty) {
       return null
     }
     //look if their exists a view with the same name
@@ -178,17 +178,17 @@ object RsumCompartment extends MultiCompartment {
       var newJoin: IJoinCompartment = null
       if (joinInfo.isInstanceBaseModel(obj)) {
         //can be a new base instance, should not be possible that is is connect with one that is already connected
-        RsumCompartment.getNaturals().filter(n => joinInfo.isInstanceOtherModel(n) && joinInfo.matchTwoObjects(obj, n) && !joinInfo.containsObject(n)).foreach(other = _)
+        getNaturals().filter(n => joinInfo.isInstanceOtherModel(n) && joinInfo.matchTwoObjects(obj, n) && !joinInfo.containsObject(n)).foreach(other = _)
         if (other != null || joinInfo.getJoinType() == RsumJoinType.outer) {
           newJoin = joinInfo.getNewInstance(obj, other)
         }
       } else {
         if (joinInfo.getJoinType() == RsumJoinType.outer) {
           //search alle join instances from this join for a base model without connection that mathes to this obj
-          RsumCompartment.getJoins().filter(j => j.hasEmptyOther() && j.getJoinInfo().isInstanceOtherModel(obj) && j.getJoinInfo().matchTwoObjects(j.baseObj, obj)).foreach(_.addOther(obj))
+          getJoins().filter(j => j.hasEmptyOther() && j.getJoinInfo().isInstanceOtherModel(obj) && j.getJoinInfo().matchTwoObjects(j.baseObj, obj)).foreach(_.addOther(obj))
         } else {
           //if its no outer join search for all naturals if one match that is currently not in the join
-          RsumCompartment.getNaturals().filter(n => joinInfo.isInstanceBaseModel(n) && joinInfo.matchTwoObjects(n, obj) && !joinInfo.containsObject(n)).foreach(other = _)
+          getNaturals().filter(n => joinInfo.isInstanceBaseModel(n) && joinInfo.matchTwoObjects(n, obj) && !joinInfo.containsObject(n)).foreach(other = _)
           if (other != null) {
             newJoin = joinInfo.getNewInstance(other, obj)
           }
@@ -213,7 +213,7 @@ object RsumCompartment extends MultiCompartment {
       incommingPlayer match {
         case r: IRelationCompartment =>
           r.initialize()
-          RsumCompartment.this combine r
+          RsumManagement.this combine r
           //add to list with relations
           relations = relations :+ r
         case j: IJoinCompartment =>
@@ -237,7 +237,6 @@ object RsumCompartment extends MultiCompartment {
       val playerObj = this.player.right.get
       
       ModelElementLists.removeElement(playerObj)
-      
       val roles = playerObj.roles()
       //iterate over all roles and call remove methods
       //remove methods from the rule also remove the role from the graph      
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IExtensionCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IExtensionCompartment.scala
index 99197114e85985096c8f054bad5b0703cd56ecb0..f844540866c10411db0512102c22c8d6c00766d9 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IExtensionCompartment.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IExtensionCompartment.scala
@@ -3,7 +3,7 @@ package org.rosi_project.model_management.sum
 import scroll.internal.Compartment
 import scala.collection.mutable.ListBuffer
 import org.rosi_project.model_management.sum.roles.IExtensionRole
-import org.rosi_project.model_management.core.RsumCompartment
+import org.rosi_project.model_management.core.RsumManagement
 
 trait IExtensionCompartment extends Compartment {
   
@@ -29,7 +29,7 @@ trait IExtensionCompartment extends Compartment {
    * Get a new extension role for the object. Adds automatically the play relation.
    */
   private[model_management] def getExtensionRole(classname: Object) : IExtensionRole = {
-    if (!RsumCompartment.isActiveExtension(this)) {
+    if (!RsumManagement.isActiveExtension(this)) {
       return null
     }
     
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IViewCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IViewCompartment.scala
index 84c3746c1cefa1ba6cf7468338ecca4f5f26a21e..6c7104f3d40a5d41508f171257347f391f9a60ad 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IViewCompartment.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IViewCompartment.scala
@@ -3,8 +3,8 @@ package org.rosi_project.model_management.sum
 import scroll.internal.Compartment
 import scala.collection.mutable.ListBuffer
 import scala.collection.mutable.Set
-import org.rosi_project.model_management.core.RsumCompartment
-import org.rosi_project.model_management.core.RsumCompartment.RsumManager
+import org.rosi_project.model_management.core.RsumManagement
+import org.rosi_project.model_management.core.RsumManagement.RsumManager
 import org.rosi_project.model_management.sum.compartments.IRelationCompartment
 import org.rosi_project.model_management.sum.roles.IViewRole
 import org.rosi_project.model_management.sum.join.IJoinCompartment
@@ -30,6 +30,10 @@ trait IViewCompartment extends Compartment {
     })
     result
   }
+  
+  def getPlayerFromViewRole(viewRole: Object) = {
+    viewRole.player.right.get
+  }
 
   /**
    * Get all elements with the specific simple name.
@@ -61,7 +65,7 @@ trait IViewCompartment extends Compartment {
    * Get a new view role for the object. Adds automatically the play relation.
    */
   private[model_management] def getViewRole(classname: Object): IViewRole = {
-    if (!RsumCompartment.isActiveView(this)) {
+    if (!RsumManagement.isActiveView(this)) {
       return null
     }
 
@@ -150,7 +154,10 @@ trait IViewCompartment extends Compartment {
 
   def containsRole(role: AViewRole): Boolean = naturalRoles.contains(role)
 
-  def getViewName(): String
+  /**
+   * Return on default the simple name of the class.
+   */
+  def getViewName(): String = this.getClass.getSimpleName
 
   private[model_management] def deleteAllRoles(): Unit = {
     naturalRoles.foreach { r =>
@@ -170,7 +177,7 @@ trait IViewCompartment extends Compartment {
 
   private def initElement(element: Object, relational: Boolean, role: AViewRole): Unit = {
     //proof if the actual view is in
-    if (!RsumCompartment.isActiveView(this)) {
+    if (!RsumManagement.isActiveView(this)) {
       return
     }
     if (relational)
@@ -187,7 +194,7 @@ trait IViewCompartment extends Compartment {
     }
   }
 
-  private def isActive(): Boolean = RsumCompartment.isActiveView(this)
+  private def isActive(): Boolean = RsumManagement.isActiveView(this)
 
   abstract class AViewRole extends IViewRole {
 
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IViewTypeInfo.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IViewTypeInfo.scala
index 0539b46c189c20bbd4f9c112c3a37c989b87f2d3..699d73b0566c709ca4dde8e1b4e95a39ec7189ec 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IViewTypeInfo.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IViewTypeInfo.scala
@@ -1,17 +1,20 @@
 package org.rosi_project.model_management.sum
 
 import org.rosi_project.model_management.sum.join.IJoinInfo
-import org.rosi_project.model_management.core.RsumCompartment
+import org.rosi_project.model_management.core.RsumManagement
 
 trait IViewTypeInfo {
   
-  def getViewName(): String
+  /**
+   * Return on default the simple name of the class.
+   */
+  def getViewName: String = this.getClass.getSimpleName
   
   protected def getNewViewTypeInstance(): IViewCompartment = {
-    RsumCompartment.addViewTypeInfo(this)
-    var view = RsumCompartment.getActiveViewFromName(this.getViewName())
+    RsumManagement.addViewTypeInfo(this)
+    var view = RsumManagement.getActiveViewFromName(this.getViewName)
     if (view == null) {
-      return RsumCompartment.addActiveView(this.getNewInstance())
+      return RsumManagement.addActiveView(this.getNewInstance())
     }
     else {
       return view
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/compartments/IRelationCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/compartments/IRelationCompartment.scala
index 4af7d9cf596504156178eeac736c6f807fedfee2..4151412bdd0ef8f16701c88adcddfc1f33a46f31 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/compartments/IRelationCompartment.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/compartments/IRelationCompartment.scala
@@ -16,6 +16,10 @@ trait IRelationCompartment extends PlayerSync {
   
   def getSource(): ISource = source
   
+  def getSourceIns(): Object
+
+  def getTargetIns(): Object
+  
   def initialize(): Unit = {
     if (source == null && target == null)
       internalInitialize()
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/join/IJoinCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/join/IJoinCompartment.scala
index 821db0aeb63427ebdd662bd6f13f56958eaad7cf..f80d4e00edfb5f0ecba8ac6db7698460da71d648 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/join/IJoinCompartment.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/join/IJoinCompartment.scala
@@ -2,8 +2,8 @@ package org.rosi_project.model_management.sum.join
 
 import scroll.internal.Compartment
 import org.rosi_project.model_management.sum.roles.IRsumRole
-import org.rosi_project.model_management.core.RsumCompartment.RsumManager
-import org.rosi_project.model_management.core.RsumCompartment
+import org.rosi_project.model_management.core.RsumManagement.RsumManager
+import org.rosi_project.model_management.core.RsumManagement
 
 trait IJoinCompartment extends Compartment {
   var baseObj: Object = null
@@ -83,22 +83,22 @@ trait IJoinCompartment extends Compartment {
   }
   
   protected def initialize(base: Object, other: Object): Unit = {
-    RsumCompartment.combine(this)
+    RsumManagement.combine(this)
     var rsumManager: RsumManager = null
     if (base != null) {
       getJoinInfo.addObject(base)
       baseObj = base
+      base play baseRole
       rsumManager = new RsumManager()
       base play rsumManager
-      base play baseRole
       rsumManager.manageRsum(base)
     }
     if (other != null) {
       getJoinInfo.addObject(other)
       otherObj = other
+      other play otherRole
       rsumManager = new RsumManager()
       other play rsumManager
-      other play otherRole
       rsumManager.manageRsum(other)      
     }
   } 
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/AQuery.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/AQuery.scala
deleted file mode 100644
index 580fbbb9f9bf46c8a316dcc33b58ed47601819a1..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/AQuery.scala
+++ /dev/null
@@ -1,97 +0,0 @@
-package org.rosi_project.model_management.sum.query
-
-import scroll.internal.Compartment
-
-/**
- * Describes the abstract query compartment with the roles that each query must implement.
- */
-abstract class AQuery(val name: String) extends Compartment {
-  
-  def deleteQueryResults(): Unit
-  def deleteQueryObjects(): Unit
-  
-  /**
-   * Add a query role to the underlying object.
-   */
-  def addQueryRole(obj: Object): AQuery#QueryObject
-  
-  /**
-   * Remove a query role from the query.
-   */
-  def removeQueryRole(role: AQuery#QueryObject): Unit
-  
-  /**
-   * Proof if the query has a correct form.
-   * Not more than one connection island.
-   */
-  def isQueryCorrect(): Boolean
-  
-  /**
-   * Running the query and getting a set of sets of result objects.
-   */
-  def runQuery(): Set[Set[Object]]
-  
-  /**
-   * Abstract query object to create the query from example.
-   */
-  abstract class QueryObject() {
-    
-    /**
-     * Label to identify a query object.
-     */
-    var label: String = ""
-    
-    /**
-     * Describes is necessary to be in the results or to be not.
-     */
-    var negated: Boolean = false
-    
-    /**
-     * Important to describe if a transitive closure should be created.
-     */
-    var transitive: Boolean = false
-    
-    /**
-     * Describes how often a connection must exists.
-     */
-    var multi: Int = 1
-    
-    /**
-     * Describes if the elements should be returned in the results or not.
-     */
-    var returned: Boolean = true
-    
-    private var attributeFilters: Set[AttributeFilter] = Set.empty
-      
-    /**
-  	 * Create and add an attribute filter object to a query object.
-   	 */        
-    def addAttributeFilter(attributeName: String, value: String, bigger: CheckingOption.Value): Boolean = {
-      if (attributeName == null || attributeName == "" ||
-        bigger == null || value == null || value == "") {
-        return false
-      }
-      attributeFilters += new AttributeFilter(attributeName, value, bigger)
-      return true
-    }
-    
-    def getAttributeFilters(): Set[AttributeFilter] = attributeFilters
-    
-    def overallConnectionUnit(): Int
-    
-    override def toString(): String = "QO: " + label
-  }  
-  
-  /**
-   * Abstract query results that each element which matches the query gets.
-   */
-  abstract class QueryResult(val matchedQueryObject: QueryObject) {
-    
-    override def toString(): String = "QR: (" + this.player.right.get.toString() + " " + matchedQueryObject + ")"
-  }
-  
-  /**
-   * Should collect information about the attributes a query element must have
-   */
-  class AttributeFilter(val attributeName: String, val value: String, val checking: CheckingOption.Value) {}
-}
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/CheckingOption.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/CheckingOption.scala
deleted file mode 100644
index 9d6ceffdbde34775bfb192b2607c44e582d23b77..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/CheckingOption.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.rosi_project.model_management.sum.query
-
-object CheckingOption extends Enumeration {
-  val equalsCheck, biggerThan, smallerThan = Value
-}
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/IQueryViewCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/IQueryViewCompartment.scala
deleted file mode 100644
index 462693e2d5ad7b0d5cfb71ac15647523fed0130c..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/IQueryViewCompartment.scala
+++ /dev/null
@@ -1,138 +0,0 @@
-package org.rosi_project.model_management.sum.query
-
-import scroll.internal.Compartment
-import scala.collection.mutable.ListBuffer
-import scala.collection.mutable.Set
-import org.rosi_project.model_management.core.RsumCompartment
-import org.rosi_project.model_management.sum.compartments.IRelationCompartment
-
-trait IQueryViewCompartment extends Compartment {
-  
-  private var name: String = ""
-  private var query: Query = null
-  
-  RsumCompartment.combine(this)
-  
-  protected def init(n: String): Unit = {
-    name = n
-    query = new Query(n)
-  }
-  
-  private var naturalRoles = Set[AQueryViewRole]()
-  private var relationalRoles = Set[AQueryViewRole]()
-  
-  def getName(): String = name
-  
-  def getQuery(): Query = query
-  
-  /**
-   * Get a map with the simple names of all elements 
-   * and the connected elements in the view.
-   */
-  def getMapOfElements(): Map[String, Set[AQueryViewRole]] = {
-    var result: Map[String, Set[AQueryViewRole]] = Map.empty
-    naturalRoles.foreach(n => {
-      if (result.contains(n.getClass.getSimpleName)) {
-        result(n.getClass.getSimpleName) += n
-      } else {
-        result = result + (n.getClass.getSimpleName -> Set(n))
-      }
-    })
-    result
-  }
-  
-  /**
-   * Get all elements with the specific simple name.
-   */
-  def getElementsWithClassName(s: String): Set[AQueryViewRole] = {
-    var result: Set[AQueryViewRole] = Set.empty
-    naturalRoles.foreach(n => {
-      if (n.getClass.getSimpleName == s) {
-        result += n
-      }
-    })
-    result
-  }  
-  
-  /**
-   * Get all elements with the same type from the view.
-   */
-  def getElementsWithExample[A <: AQueryViewRole](a: A): Set[A] = {
-    var result: Set[A] = Set.empty
-    naturalRoles.foreach(n => {
-      if (n.getClass.getName == a.getClass.getName) {
-        result += n.asInstanceOf[A]
-      }
-    })
-    result
-  }
-  
-  protected def getRoleFromList(classname: Object): AQueryViewRole = {
-    relationalRoles.foreach { r =>
-      if (+r == +classname) {
-        return r
-      }
-    }
-    naturalRoles.foreach { r =>
-      if (+r == +classname) {
-        return r
-      }
-    }
-    return null
-  }
-
-  def printViewRoles(): Unit = {
-    println("-------------------------------------------------------------------")
-    println("QueryView: " + name + " #Roles: " + naturalRoles.size)
-    naturalRoles.foreach { r =>
-      var player = r.player.right.get
-      var playerRoles = player.roles()
-      println("* Player: " + player + " - Role: " + r + " - Size: " + playerRoles.size)
-    }
-    relationalRoles.foreach { r =>
-      var player = r.player.right.get
-      var playerRoles = player.roles()
-      println("# Player: " + player + " - Role: " + r + " - Size: " + playerRoles.size)
-    }
-    println("-------------------------------------------------------------------")
-  }
-  
-  def getAllViewElements(): Set[AQueryViewRole] = naturalRoles
-  
-  def containsRole(role: AQueryViewRole): Boolean = naturalRoles.contains(role)
-  
-  abstract class AQueryViewRole {  
-    
-    protected var connected: AQuery#QueryObject = null 
-    
-    initializeElement()
-    
-    protected def isRelational(): Boolean
-    
-    protected def getCreationObject(): Object
-    
-    def getQueryObject: AQuery#QueryObject = connected  
-
-    private def initializeElement(): Unit = {
-      val obj = getCreationObject
-      if (isRelational) {
-        relationalRoles += this
-        val rel = obj.asInstanceOf[IRelationCompartment]
-        RsumCompartment.combine(rel)
-        rel.internalInitialize()
-      } else {
-        naturalRoles += this
-      }
-      connected = query.addQueryRole(obj)
-      obj play this
-    }      
-  
-    protected def deleteElement(): Unit = {
-      if (isRelational) {
-        +this deleteCompartment()
-      }
-      this.remove()
-      query.removeQueryRole(connected)
-    }
-  }
-}
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/Query.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/Query.scala
deleted file mode 100644
index 060531618e337f28318e49d8477e3573e18596ac..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/Query.scala
+++ /dev/null
@@ -1,576 +0,0 @@
-package org.rosi_project.model_management.sum.query
-
-import scroll.internal.Compartment
-import org.rosi_project.model_management.core.RsumCompartment
-import org.rosi_project.model_management.sum.compartments.IRelationCompartment
-import org.rosi_project.model_management.sum.roles.IRelationRole
-
-/**
- * Special query implementation for the query interface that works on the RSUM.
- */
-class Query(_name: String) extends AQuery(_name) {
-  
-  RsumCompartment.combine(this)
-  
-  private var queryRelRoles: Set[QueryRelObject] = Set.empty
-  private var queryNatRoles: Set[QueryNatObject] = Set.empty
-  
-  private var queryRelResults: Set[QueryRelResult] = Set.empty
-  private var queryNatResults: Set[QueryNatResult] = Set.empty
-    
-  private def getQueryNatRole(obj: Object): QueryNatObject = {
-    //queryNatRoles.filter(+_ == +obj).foreach(return _)
-    queryNatRoles.foreach(q => {
-      if (+obj == +q) {
-        return q
-      }
-    })
-    return null
-  }
-    
-  private def getQueryRelRole(obj: Object): QueryRelObject = {
-    //queryRelRoles.filter(+_ == +obj).foreach(return _)
-    queryRelRoles.foreach(q => {
-      if (+obj == +q) {
-        return q
-      }
-    })
-    return null
-  }
-  
-  private def getNatResultRole(player: Object, queryObject: QueryNatObject): QueryNatResult = {
-    //queryNatResults.filter(r => r.connectedQueryObject == queryObject && +player == +r).foreach(return _)
-    queryNatResults.foreach(r => {
-      if (r.connectedQueryObject == queryObject && +player == +r) {
-        return r
-      }
-    })
-    return null
-  }
-  
-  def deleteQueryResults(): Unit = {
-    queryRelResults.foreach(_.remove())
-    queryRelResults = Set.empty
-    queryNatResults.foreach(_.remove())
-    queryNatResults = Set.empty
-  }  
-    
-  def deleteQueryObjects(): Unit = {
-    queryRelRoles.foreach(_.remove())
-    queryRelRoles = Set.empty
-    queryNatRoles.foreach(_.remove())
-    queryNatRoles = Set.empty
-  }
-  
-  def isQueryCorrect(): Boolean = {
-    //check if the query is correct and does not contain more close islands
-    queryRelRoles.foreach(qo => {
-      return qo.overallConnectionUnit() == (queryRelRoles.size + queryNatRoles.size)
-    })
-    queryNatRoles.foreach(qo => {
-      return qo.overallConnectionUnit() == (queryRelRoles.size + queryNatRoles.size)
-    })
-    return true
-  }
-  
-  def removeQueryRole(role: AQuery#QueryObject): Unit = {
-    if (role.isInstanceOf[QueryNatObject]) {
-      queryNatRoles -= role.asInstanceOf[QueryNatObject]
-    }
-    if (role.isInstanceOf[QueryRelObject]) {
-      queryRelRoles -= role.asInstanceOf[QueryRelObject]
-    }
-  }
-  
-  def addQueryRole(obj: Object): AQuery#QueryObject = {
-    val relResult = getQueryRelRole(obj)
-    if (relResult != null) return relResult
-    val natResult = getQueryNatRole(obj)
-    if (natResult != null) return natResult
-    //get player
-    val playerObj = obj.player.getOrElse(obj)
-    //difference between relation and natural
-    if (playerObj.isInstanceOf[IRelationCompartment]) {
-      val refComp = playerObj.asInstanceOf[IRelationCompartment]
-      this.combine(refComp)
-      val sourceRole: QueryNatObject = getQueryNatRole(refComp.getSource())
-      val targetRole: QueryNatObject = getQueryNatRole(refComp.getTarget())
-      if (sourceRole == null || targetRole == null) {
-        println("--- Error: Relational compartment can only be added if source and target are added before")
-        return null
-      }
-      val newRole = new QueryRelObject(sourceRole, targetRole)
-      queryRelRoles += newRole    
-      playerObj play newRole
-      return newRole
-    } else {
-      val newRole = new QueryNatObject()
-      queryNatRoles += newRole    
-      playerObj play newRole
-      return newRole
-    }  
-  }  
-  
-  def runQuery(): Set[Set[Object]] = {
-    //delete at the end
-    var forDeletionQueryResults: Set[QueryNatResult] = Set.empty
-    //immediate values
-    var deleteNatResults: Set[QueryNatResult] = Set.empty   
-    var doSomething = true
-    //output value
-    var result: Set[Set[Object]] = Set.empty
-    
-    //###add query results to all elements that can be results because of connection properties
-    //...iterate over non negated query relations and add result roles if necessary 
-    queryRelRoles.filter(!_.isNegated()).foreach(queryRel => {
-      val playerQueryRel: IRelationCompartment = queryRel.player.right.get.asInstanceOf[IRelationCompartment]
-      RsumCompartment.getRelations().foreach(rsumRel => {
-        if (playerQueryRel.getClass.isInstance(rsumRel)) {
-          //search if their are existing results if not create new ones
-          val rsumNatSource: Object = rsumRel.getSource().player.right.get
-          val rsumNatTarget: Object = rsumRel.getTarget().player.right.get
-          var queryNatResultSource: QueryNatResult = getNatResultRole(rsumNatSource, queryRel.source)
-          if (queryNatResultSource == null) {
-            queryNatResultSource = new QueryNatResult(queryRel.source)  
-            rsumNatSource play queryNatResultSource
-            queryNatResults += queryNatResultSource
-          }          
-          var queryNatResultTarget: QueryNatResult = getNatResultRole(rsumNatTarget, queryRel.target)
-          if (queryNatResultTarget == null) {
-            queryNatResultTarget = new QueryNatResult(queryRel.target)  
-            rsumNatTarget play queryNatResultTarget
-            queryNatResults += queryNatResultTarget
-          }
-          //connect them in a new relation result
-          val queryRelResult: QueryRelResult = new QueryRelResult(queryRel, queryNatResultSource, queryNatResultTarget, false) 
-          rsumRel play queryRelResult     
-          queryRelResults += queryRelResult
-          
-          //if transitive add new relation to separate list to add them at the end
-          if (queryRel.isTransitive) {
-            //set only source new because target must be old one, transitive query means always target same
-            queryNatResultSource = getNatResultRole(rsumNatSource, queryRel.target)
-            if (queryNatResultSource == null) {
-              queryNatResultSource = new QueryNatResult(queryRel.target)  
-              rsumNatSource play queryNatResultSource
-              queryNatResults += queryNatResultSource
-            }
-            val transitiveQueryRelResult: QueryRelResult = new QueryRelResult(queryRel, queryNatResultSource, queryNatResultTarget, true) 
-            rsumRel play transitiveQueryRelResult     
-            queryRelResults += transitiveQueryRelResult
-          }
-        }
-      })      
-    })
-    
-    //...iterate over negated related roles and search all opposite naturals that do not implement this rel
-    queryRelRoles.filter(_.isNegated()).foreach(queryRel => {
-      val playerQueryRel: IRelationCompartment = queryRel.player.right.get.asInstanceOf[IRelationCompartment]
-      var playerQueryNat: Object = null
-      if (queryRel.source.negated) {
-        playerQueryNat = playerQueryRel.getSource.player.right.get 
-      } else {
-        playerQueryNat = playerQueryRel.getTarget.player.right.get 
-      }
-      //source or target negated, search for negated class
-      RsumCompartment.getNaturals().foreach(rsumNat => {
-        if (playerQueryNat.getClass.isInstance(rsumNat))
-        {
-          var goodElement: Boolean = true;
-          //filtered roles of the natural type
-          var roles: Set[IRelationRole] = Set.empty 
-          if (queryRel.source.negated) {
-            roles = rsumNat.roles().filter(_.isInstanceOf[IRelationCompartment#ITarget]).toSet.asInstanceOf[Set[IRelationRole]] 
-          } else {
-            roles = rsumNat.roles().filter(_.isInstanceOf[IRelationCompartment#ISource]).toSet.asInstanceOf[Set[IRelationRole]] 
-          }
-          //if we find a role that works than we can not add this natural to the results
-          roles.foreach(r => {            
-            val outerRelComp = r.getOuterCompartment()
-            //println("COMP: " + outerRelComp + " " + playerQueryRel + " " + playerQueryRel.getClass.isInstance(outerRelComp))
-            if (playerQueryRel.getClass.isInstance(outerRelComp)) {
-              //we can not use this element
-              goodElement = false
-            }
-          })
-          //if we do not find a compatible element in this natural role we can add it
-          if (goodElement) {
-            var queryNatRole: QueryNatObject = null
-            if (queryRel.source.negated) {
-              queryNatRole = queryRel.target            
-            } else {
-              queryNatRole = queryRel.source
-            }
-            var queryNatResult: QueryNatResult = getNatResultRole(rsumNat, queryNatRole)
-            if (queryNatResult == null) {
-              queryNatResult = new QueryNatResult(queryNatRole) 
-              rsumNat play queryNatResult
-              queryNatResults += queryNatResult
-            }
-            if (queryRel.source.negated) {
-              queryNatResult.increaseTargetNegated()
-            } else {
-              queryNatResult.increaseSourceNegated()
-            }          
-          }
-        }
-      })
-    })    
-    
-    //...iterate over all query naturals without a connection and add result roles if necessary
-    queryNatRoles.filter(_.connectionSize == 0).foreach(queryNat => {
-      //connected one are visited in the part before
-      val playerQueryNat: Object = queryNat.player.right.get
-      RsumCompartment.getNaturals().foreach(rsumNat => {
-        if (playerQueryNat.isInstanceOf[QueryHelper]) {
-          if (playerQueryNat.equals(rsumNat)) {
-            var queryNatResult: QueryNatResult = getNatResultRole(rsumNat, queryNat)
-            if (queryNatResult == null) {
-              queryNatResult = new QueryNatResult(queryNat)  
-              rsumNat play queryNatResult
-              queryNatResults += queryNatResult
-            }
-          }
-        } else {
-          if (playerQueryNat.getClass.isInstance(rsumNat)) {
-            var queryNatResult: QueryNatResult = getNatResultRole(rsumNat, queryNat)
-            if (queryNatResult == null) {
-              queryNatResult = new QueryNatResult(queryNat)  
-              rsumNat play queryNatResult
-              queryNatResults += queryNatResult
-            }
-          }
-        }        
-      })
-    })
-    
-    //###proof correctness of results
-    //...proof attribute correctness once
-    queryNatResults.filter(!_.proofAttributes).foreach(deleteNatResults += _)
-    //delete them
-    deleteNatResults.foreach(queryResultNat => {
-      queryNatResults -= queryResultNat
-      forDeletionQueryResults += queryResultNat
-      queryResultNat.removeConnections()
-    })
-    
-    //...proof the correctness of the query results and delete non correct ones
-    while (doSomething) {
-      deleteNatResults = Set.empty      
-      //proof the connection correctness
-      queryNatResults.filter(!_.proofConnections).foreach(deleteNatResults += _)
-      
-      //do as long as everything is correct
-      doSomething = !deleteNatResults.isEmpty
-      //delete them
-      deleteNatResults.foreach(queryResultNat => {
-        queryNatResults -= queryResultNat
-        forDeletionQueryResults += queryResultNat
-        queryResultNat.removeConnections()   
-      })
-    }
-    
-    //###make good outputs from the current query results
-    //...only correct elements should now play result roles and are in the list    
-    var combinedResult: Set[QueryCombinedResult] = queryRelResults.filter(!_.transitive).map(_.createCombinedResult())
-    
-    //...combine the result elements to good output units
-    doSomething = true
-    while (doSomething) {
-      doSomething = false
-      combinedResult.foreach(combined => {
-        queryRelResults.foreach(rel => {
-          if (rel.source == combined.target && !combined.contains(rel.target)) {
-            //add in the back
-            combined.addBack(rel.target)
-            doSomething = true
-          } else {
-            if (rel.target == combined.source && !combined.contains(rel.source)) {
-              //add in the front
-              combined.addFront(rel.source)
-              doSomething = true
-            }            
-          }
-        })    
-      })  
-      //delete duplicated elements
-      combinedResult = combinedResult.groupBy(_.getBetween).map(_._2.head).toSet
-      //combinedResult.distinct
-    }
-    
-    //create only results with tuples
-    /*queryRelResults.foreach(rel => {
-      var rSet: Set[Object] = Set.empty
-      if (rel.source.connectedQueryObject.returned) {
-        rSet += rel.source.player.right.get
-      }
-      if (rel.target.connectedQueryObject.returned) {
-        rSet += rel.target.player.right.get
-      }
-      result += rSet
-    })*/
-    
-    //...bring the output format to the reals one
-    combinedResult.foreach(combined => {
-      var rSet: Set[Object] = Set.empty
-      combined.getBetween.foreach(queryNat => {
-        if (queryNat.connectedQueryObject.returned) {
-          rSet += queryNat.player.right.get
-        }
-      })
-      result += rSet
-    })
-    
-    //...add also single results
-    queryNatResults.foreach(queryResultNat => {
-      if (!queryResultNat.isConnected() && queryResultNat.connectedQueryObject.returned) {
-        result += Set(queryResultNat.player.right.get)
-      }
-    })
-    
-    //...delete now really all not needed result roles 
-    forDeletionQueryResults.foreach(_.remove())
-    
-    return result
-  }
-  
-  override def toString(): String = name + ": " + isQueryCorrect + " Rs: " + queryNatRoles + " " + queryRelRoles
-  
-  /**
-   * Query object specialized for naturals in the RSUM.
-   */
-  class QueryNatObject() extends QueryObject() {
-    private var sourceRelations: Set[QueryRelObject] = Set.empty
-    private var targetRelations: Set[QueryRelObject] = Set.empty    
-    
-    def addSourceRelation(rel: QueryRelObject): Unit = {
-      sourceRelations += rel
-    }    
-    
-    def removeSourceRelation(rel: QueryRelObject): Unit = {
-      sourceRelations -= rel
-    }
-    
-    def getSourceRelationsSize(): Int = sourceRelations.filter(!_.isNegated()).map(_.multiTarget).sum //sum up multi value not use size
-    def getNegatedSourceRelationsSize(): Int = sourceRelations.filter(_.isNegated()).size
-    
-    def addTargetRelation(rel: QueryRelObject): Unit = {
-      targetRelations += rel
-    }
-    
-    def removeTargetRelation(rel: QueryRelObject): Unit = {
-      targetRelations -= rel
-    }
-    
-    def getTargetRelationsSize(): Int = targetRelations.filter(!_.isNegated()).map(_.multiSource).sum
-    def getNegatedTargetRelationsSize(): Int = targetRelations.filter(_.isNegated()).size
-    
-    def connectionSize(): Int = targetRelations.size + sourceRelations.size
-    
-    def overallConnectionUnit(): Int = {
-      var visitedRel: Set[QueryRelObject] = Set.empty
-      var visitedNat: Set[QueryNatObject] = Set(this)
-      var unVisitedRel: Set[QueryRelObject] = targetRelations ++ sourceRelations
-      var unVisitedNat: Set[QueryNatObject] = Set.empty
-      while (!unVisitedRel.isEmpty || !unVisitedNat.isEmpty) {
-        //run over all unvisited relations 
-        unVisitedRel.foreach(rel => {
-          if (!visitedNat.contains(rel.source))
-            unVisitedNat += rel.source 
-          if (!visitedNat.contains(rel.target))
-            unVisitedNat += rel.target
-        })
-        visitedRel ++= unVisitedRel
-        unVisitedRel = Set.empty
-        //run over all unvisited naturals 
-        unVisitedNat.foreach(nat => {
-          nat.sourceRelations.filter(!visitedRel.contains(_)).foreach(unVisitedRel += _)
-          nat.targetRelations.filter(!visitedRel.contains(_)).foreach(unVisitedRel += _)
-        })
-        visitedNat ++= unVisitedNat
-        unVisitedNat = Set.empty        
-      }
-      return visitedRel.size + visitedNat.size
-    }
-    
-    override def toString: String = "QON: " + label + " C: " + connectionSize
-  }
-    
-  /**
-   * Query object specialized for relational compartments in the RSUM.
-   */
-  class QueryRelObject(val source: QueryNatObject, val target: QueryNatObject) extends QueryObject() {
-
-    def isNegated(): Boolean = source.negated || target.negated
-    def isTransitive(): Boolean = target.transitive
-    def multiTarget(): Int = target.multi
-    def multiSource(): Int = source.multi
-    
-    source.addSourceRelation(this)
-    target.addTargetRelation(this)
-    
-    def overallConnectionUnit(): Int = source.overallConnectionUnit()
-    
-    override def toString: String = "QOR: " + source.label + "-" + target.label
-  }
-    
-  /**
-   * Query result roles for natural query roles.
-   */
-  class QueryNatResult(val connectedQueryObject: QueryNatObject) extends QueryResult(connectedQueryObject) {
-    private var sourceRelations: Set[QueryRelResult] = Set.empty
-    private var targetRelations: Set[QueryRelResult] = Set.empty
-    
-    private var negatedSources: Int = 0
-    private var negatedTargets: Int = 0
-    
-    def increaseSourceNegated(): Unit = { negatedSources += 1 }
-    def decreaseSourceNegated(): Unit = { negatedSources -= 1 }
-    
-    def increaseTargetNegated(): Unit = { negatedTargets += 1 }
-    def decreaseTargetNegated(): Unit = { negatedTargets -= 1 }
-    
-    /**
-     * Proof if the player has all the necessary attributes with its values.
-     */
-    def proofAttributes(): Boolean = {
-      val player: Object = this.player.right.get   
-      var returnValue = true 
-      connectedQueryObject.getAttributeFilters.foreach(a => {
-        try {
-          //player.getClass.getMethods.foreach(f => println(f.toString))
-          //println(player.getClass.getMethod("name").getReturnType) //getName
-          val met = player.getClass.getMethod(a.attributeName)        
-          val result: String = met.invoke(player).asInstanceOf[String]
-          a.checking match {
-            case CheckingOption.equalsCheck => if (result != a.value) returnValue = false
-            case CheckingOption.biggerThan => if (result <= a.value) returnValue = false
-            case CheckingOption.smallerThan => if (result >= a.value) returnValue = false
-            case _ =>
-          }
-        } catch {
-          case _: Throwable => { 
-            println("!!! No attribute with this name!!!") 
-            return false
-          }
-        }
-      })
-      return returnValue
-    }
-    
-    /**
-     * Proof if the number of connections is equals to the related query object.
-     */
-    def proofConnections(): Boolean = {
-      //TODO: proof also the number of types and not only the numbers
-      //println("S: " + _connectedQueryObject.getSourceRelationsSize() + " T: " + _connectedQueryObject.getTargetRelationsSize() + " NS: " + _connectedQueryObject.getNegatedSourceRelationsSize() + " NT: " + _connectedQueryObject.getNegatedTargetRelationsSize() + " Con: " + _connectedQueryObject)
-      //println("S: " + getSourceRelationsSize() + " T: " + getTargetRelationsSize() + " NS: " + negatedSources + " NT: " + negatedTargets + " This: " + this)
-      if (getSourceRelationsSize >= connectedQueryObject.getSourceRelationsSize() 
-          && getTargetRelationsSize >= connectedQueryObject.getTargetRelationsSize()
-          && negatedSources >= connectedQueryObject.getNegatedSourceRelationsSize()
-          && negatedTargets >= connectedQueryObject.getNegatedTargetRelationsSize()) {
-        return true
-      }
-      return false
-    }
-    
-    def addSourceRelation(rel: QueryRelResult): Unit = {
-      sourceRelations += rel
-    }
-    
-    def removeSourceRelation(rel: QueryRelResult): Unit = {
-      sourceRelations -= rel
-    }
-    
-    def getSourceRelationsSize(): Int = sourceRelations.size
-    
-    def addTargetRelation(rel: QueryRelResult): Unit = {
-      targetRelations += rel
-    }
-    
-    def removeTargetRelation(rel: QueryRelResult): Unit = {
-      targetRelations -= rel
-    }
-    
-    def getTargetRelationsSize(): Int = targetRelations.size
-        
-    def isConnected(): Boolean = (targetRelations.size + sourceRelations.size) > 0
-    
-    def removeConnections(): Unit = {
-      sourceRelations.foreach(rel => {        
-        rel.target.removeTargetRelation(rel)
-        queryRelResults -= rel
-        rel.remove()
-      })      
-      targetRelations.foreach(rel => {        
-        rel.source.removeSourceRelation(rel)
-        queryRelResults -= rel
-        rel.remove()
-      })
-      sourceRelations = Set.empty
-      targetRelations = Set.empty    
-      negatedSources = 0
-      negatedTargets = 0
-    }
-  }
-  
-  /**
-   * Query result roles for relation query roles.
-   */
-  class QueryRelResult(val connectedQueryObject: QueryRelObject, val source: QueryNatResult, val target: QueryNatResult, val transitive: Boolean) extends QueryResult(connectedQueryObject) {
-    //only add this relation to the connect results if it is not transitive
-    if (!transitive) {
-      source.addSourceRelation(this)
-      target.addTargetRelation(this)
-    }
-    
-    /**
-     * Create a new combined result which is a copy of this one.
-     */
-    def createCombinedResult(): QueryCombinedResult = new QueryCombinedResult(source, target)
-  }
-  
-  /**
-   * Helper class to connect the results to a chain.
-   */
-  class QueryCombinedResult(var source: QueryNatResult, var target: QueryNatResult) {
-    
-    //list of all query results that are connected
-    private var between: Seq[QueryNatResult] = Seq(source, target)
-    
-    def getBetween(): Seq[QueryNatResult] = between
-    
-    def addFront(newIn: QueryNatResult): Unit = {
-      between = newIn +: between
-      source = newIn
-    }
-    
-    def addBack(newIn: QueryNatResult): Unit = {
-      between = between :+ newIn
-      target = newIn
-    }
-    
-    def contains(result: QueryNatResult): Boolean = ( between.contains(result) )
-    
-    private def getSize(): Int = between.size    
-    
-    protected def canEqual(other: Any): Boolean = other.isInstanceOf[QueryCombinedResult]
-    
-    override def equals(other: Any): Boolean = other match {
-      case that: QueryCombinedResult => {
-        if (that canEqual this) {
-          between.foreach(b => {
-            if (!that.contains(b))
-              return false
-          })
-          return that.getSize == this.getSize()
-        } else {
-          return false
-        }
-      }
-      case _ => return false
-    }
-    
-    override def toString(): String = "QCR: (" + between + ")"
-  }  
-}
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/QueryHelper.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/QueryHelper.scala
deleted file mode 100644
index 496be488f8cdb4f49d0f80379621ff42d2a5f11f..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/QueryHelper.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.rosi_project.model_management.sum.query
-
-trait QueryHelper {
-  
-}
\ No newline at end of file
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 9fd3371b4dd9d92a12b6bf21bd05a8131488757f..83d652ed499a2b2554920f4e10579438c89ac2f2 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
@@ -4,7 +4,8 @@ import scroll.internal.Compartment
 
 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
+import org.rosi_project.model_management.sync.roles.IConstructionRole
+import org.rosi_project.model_management.sync.roles.ISyncManagerRole
 
 /**
  * Interface for each construction rule.
@@ -14,14 +15,17 @@ trait IConstructionCompartment extends Compartment {
   /**
    * Return a role instance that handles the construction process for the object.
    */
-  def getConstructorForClassName(classname: Object): IConstructor
+  def getConstructorForClassName(classname: Object): IConstructionRole
 
-  def getRuleName: String
+  /**
+   * Return on default the simple name of the class.
+   */
+  def getRuleName: String = this.getClass.getSimpleName
 
   private def addExtensionRoles(containers: Set[ConstructionContainer]): Unit = {
     containers.foreach { cc =>
       if (cc.isConstructed) {
-        SynchronizationCompartment.getExtensions().foreach { e =>
+        ConsistencyManagement.getExtensions().foreach { e =>
           var role = e.getExtensionForClassName(cc.getPlayerInstance())
           if (role != null) {
             cc.getManagerInstance() play role
@@ -32,7 +36,7 @@ trait IConstructionCompartment extends Compartment {
   }
 
   private def notifyExtensionRoles(containers: Set[ConstructionContainer]): Unit = {
-    if (!SynchronizationCompartment.getExtensions().isEmpty) {
+    if (!ConsistencyManagement.getExtensions().isEmpty) {
       containers.foreach { cc =>
         if (cc.isConstructed) {
           var playerInstance = cc.getPlayerInstance()
@@ -59,7 +63,7 @@ trait IConstructionCompartment extends Compartment {
   protected def addDeleteRoles(containers: Set[ConstructionContainer]): Unit = {
     containers.foreach { cc =>
       if (cc.isConstructed) {
-        cc.getManagerInstance() play SynchronizationCompartment.getDestructionRule().getDestructorForClassName(cc.getPlayerInstance())
+        cc.getManagerInstance() play ConsistencyManagement.getDestructionRule().getDestructorForClassName(cc.getPlayerInstance())
       }
     }
   }
@@ -76,12 +80,12 @@ trait IConstructionCompartment extends Compartment {
   }
 
   /**
-   * Combine the SynchronizationCompartment with all Players from the ConstructionContainers.
+   * Combine the ConsistencyManagement with all Players from the ConstructionContainers.
    */
   protected def synchronizeCompartments(containers: Set[ConstructionContainer]): Unit = {
     containers.foreach { cc =>
       if (cc.isConstructed() && !cc.isStartElement()) {
-        SynchronizationCompartment combine cc.getPlayerInstance
+        ConsistencyManagement combine cc.getPlayerInstance
       }
     }
   }
@@ -90,8 +94,8 @@ trait IConstructionCompartment extends Compartment {
    * Create the Synchronization mechanisms for the elements in the ConstructionContainers.
    */
   protected def bindSynchronizationRules(containers: Set[ConstructionContainer]): Unit = {
-    SynchronizationCompartment.getSyncRules().foreach { s =>
-      var sync: ISyncCompartment = null
+    ConsistencyManagement.getModificationRules().foreach { s =>
+      var sync: IModificationCompartment = null
       //Proof all container for integration
       containers.foreach { cc =>
         if (s.isNextIntegration(cc.getPlayerInstance)) {
@@ -104,7 +108,7 @@ trait IConstructionCompartment extends Compartment {
         }
       }
       if (sync != null)
-        SynchronizationCompartment combine sync
+        ConsistencyManagement combine sync
     }
   }
 
@@ -118,6 +122,20 @@ trait IConstructionCompartment extends Compartment {
   }
 
   protected def makeCompleteConstructionProcess(containers: Set[ConstructionContainer]): Unit = {
+    
+    containers.foreach { cc =>
+      if (cc.isConstructed && !cc.isStartElement) {
+        cc.setManagerInstance(ConsistencyManagement.createRoleManager())
+      } else {
+        val manager: ISyncManagerRole = +(cc.getPlayerInstance()) getManager ()
+        if (manager != null) {
+          cc.setManagerInstance(manager)
+        } else {
+          cc.setManagerInstance(ConsistencyManagement.createRoleManager())
+        }
+      }
+    }
+    
     //first synchronize new compartments
     //var t1 = System.nanoTime()
     this.synchronizeCompartments(containers)
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IDestructionCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IDestructionCompartment.scala
index 4034957981624c1ca7c25538e458ffb2d26cfa97..82b13aa113b2744fd100b8b554b2a56370194406 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IDestructionCompartment.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IDestructionCompartment.scala
@@ -1,6 +1,6 @@
 package org.rosi_project.model_management.sync
 
-import org.rosi_project.model_management.sync.roles.IDestructor
+import org.rosi_project.model_management.sync.roles.IDestructionRole
 import scroll.internal.Compartment
 
 /**
@@ -11,8 +11,11 @@ trait IDestructionCompartment extends Compartment {
   /**
     * Return a role instance that handles the destruction process for the object.
     */
-  def getDestructorForClassName(classname: Object) : IDestructor
+  def getDestructorForClassName(classname: Object) : IDestructionRole
   
-  def getRuleName: String
+  /**
+   * Return on default the simple name of the class.
+   */
+  def getRuleName: String = this.getClass.getSimpleName
   
 }
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IExtensionCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IExtensionCompartment.scala
new file mode 100644
index 0000000000000000000000000000000000000000..ba94eb59b79f9206ce5f6a0a13b6bdece176c4bf
--- /dev/null
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IExtensionCompartment.scala
@@ -0,0 +1,20 @@
+package org.rosi_project.model_management.sync
+
+import org.rosi_project.model_management.sync.roles.IExtensionRole
+import scroll.internal.Compartment
+
+/**
+  * Interface for each extension rule.
+  */
+trait IExtensionCompartment extends Compartment {
+  
+  /**
+    * Return a role instance that handles the extension process for the object.
+    */
+  def getExtensionForClassName(classname: Object) : IExtensionRole
+  
+  /**
+   * Return on default the simple name of the class.
+   */
+  def getExtensionName() : String = this.getClass.getSimpleName
+}
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IExtenstionCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IExtenstionCompartment.scala
deleted file mode 100644
index ffa94fa6e36d2ebf305cf2d9eee928a56d2667b8..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IExtenstionCompartment.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.rosi_project.model_management.sync
-
-import org.rosi_project.model_management.sync.roles.IExtension
-import scroll.internal.Compartment
-
-/**
-  * Interface for each extension rule.
-  */
-trait IExtenstionCompartment extends Compartment {
-  
-  /**
-    * Return a role instance that handles the extension process for the object.
-    */
-  def getExtensionForClassName(classname: Object) : IExtension
-  
-  /**
-   * Return a unique name that describes this extension.
-   */
-  def getExtensionName() : String
-}
\ No newline at end of file
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/IModificationCompartment.scala
similarity index 64%
rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ISyncCompartment.scala
rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IModificationCompartment.scala
index 4b50e08618dcc668fb9c5f44e45c05ef1e7a02c4..8dac5b2bd4b62a9eaa660d62be7923ffaaf0353f 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/IModificationCompartment.scala
@@ -1,6 +1,6 @@
 package org.rosi_project.model_management.sync
 
-import org.rosi_project.model_management.sync.roles.ISyncRole
+import org.rosi_project.model_management.sync.roles.IModificationRole
 import scroll.internal.Compartment
 
 import scala.collection.immutable.Set
@@ -8,7 +8,7 @@ import scala.collection.immutable.Set
 /**
   * Interface for each synchronization rule.
   */
-trait ISyncCompartment extends Compartment {
+trait IModificationCompartment extends Compartment {
 
   /**
     * Variable to proof if he is actual in a sync process.
@@ -17,19 +17,19 @@ trait ISyncCompartment extends Compartment {
   /**
     * All sync roles of this synchronization rule.
     */
-  private var syncer: Set[ISyncRole] = Set.empty
+  private var syncer: Set[IModificationRole] = Set.empty
 
   /**
     * Get roles for all integration classes.
     */
-  protected def getNextRole(classname: Object) : ISyncRole = {
+  protected def getNextRole(classname: Object) : IModificationRole = {
     getFirstRole(classname)
   }
   
   /**
     * Get roles for integration classes. Should give less roles than getNextRole.
     */
-  protected def getFirstRole(classname: Object) : ISyncRole
+  protected def getFirstRole(classname: Object) : IModificationRole
   
   def containsSyncer(value: Object): Boolean = {
     syncer.foreach { s =>
@@ -41,14 +41,14 @@ trait ISyncCompartment extends Compartment {
     return false
   }
 
-  def addSyncer(sync: ISyncRole): Unit = {
+  def addSyncer(sync: IModificationRole): Unit = {
     syncer += sync
   }
 
   /**
     * Get the list of all sync roles.
     */
-  def getSyncer(): Set[ISyncRole] = syncer
+  def getSyncer(): Set[IModificationRole] = syncer
 
   /**
     * Clear the list of all sync roles.
@@ -60,8 +60,8 @@ trait ISyncCompartment extends Compartment {
   /**
     * Get roles for integration classes. Should give less roles than getNextRole.
     */
-  def getFirstIntegrationRole(classname: Object) : ISyncRole = {
-    val role: ISyncRole = this.getFirstRole(classname)
+  def getFirstIntegrationRole(classname: Object) : IModificationRole = {
+    val role: IModificationRole = this.getFirstRole(classname)
     if (role != null)
       this.addSyncer(role)
     role
@@ -70,8 +70,8 @@ trait ISyncCompartment extends Compartment {
   /**
     * Get all roles for integration classes.
     */
-  def getNextIntegrationRole(classname: Object) : ISyncRole = {
-    val role: ISyncRole = this.getNextRole(classname)
+  def getNextIntegrationRole(classname: Object) : IModificationRole = {
+    val role: IModificationRole = this.getNextRole(classname)
     if (role != null)
       this.addSyncer(role)
     role
@@ -92,10 +92,10 @@ trait ISyncCompartment extends Compartment {
   /**
     * Create a new instance of this class.
     */
-  def getNewInstance: ISyncCompartment
+  def getNewInstance: IModificationCompartment
 
   /**
-    * Get the name of this rule.
-    */
-  def getRuleName: String
+   * Return on default the simple name of the class.
+   */
+  def getRuleName: String = this.getClass.getSimpleName
 }
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ISynchronizationCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ISynchronizationCompartment.scala
index 367abacef32a54bb1a13688529a628f6f81a8dad..7423231d638f45400223ca9e8f44a43c811025f7 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ISynchronizationCompartment.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ISynchronizationCompartment.scala
@@ -1,6 +1,6 @@
 package org.rosi_project.model_management.sync
 
-import org.rosi_project.model_management.sync.roles.IRoleManager
+import org.rosi_project.model_management.sync.roles.ISyncManagerRole
 import scroll.internal.MultiCompartment
 
 /**
@@ -18,5 +18,5 @@ trait ISynchronizationCompartment extends MultiCompartment {
   /**
     * Get a new RoleManager instance.
     */
-  def createRoleManager(): IRoleManager
+  def createRoleManager(): ISyncManagerRole
 }
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/ITransformationCompartment.scala
similarity index 57%
rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IIntegrationCompartment.scala
rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ITransformationCompartment.scala
index 6ab5927310221b277d402980651b563829795b52..5d2b054ac0e16922481a89890a7a153177c6b33a 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/ITransformationCompartment.scala
@@ -1,50 +1,59 @@
 package org.rosi_project.model_management.sync
 
 import scroll.internal.Compartment
-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
+import org.rosi_project.model_management.sync.roles.IModificationRole
+import org.rosi_project.model_management.sync.roles.ITransformationRole
+import org.rosi_project.model_management.sync.helper.TransformationContainer
 import org.rosi_project.model_management.core._
-import org.rosi_project.model_management.sync.roles.IRoleManager
+import org.rosi_project.model_management.sync.roles.ISyncManagerRole
 
 /**
- * Interface for each integration rule.
+ * Interface for each transformation rule.
  */
-trait IIntegrationCompartment extends Compartment {
+trait ITransformationCompartment extends Compartment {
 
   /**
-   * Return a role instance that handles the integration process for a new model to this instance.
+   * Return a role instance that handles the transformation process for a new model to this instance.
    */
-  def getIntegratorForClassName(classname: Object): IIntegrator
+  def getTransformation(classname: Object): ITransformationRole
 
   /**
-   * Return a role instance that handles the integration process for a new relational compartment.
+   * Return a role instance that handles the transformation process for a new relational compartment.
    */
-  def getRelationalIntegratorsForClassName(classname: Object): IIntegrator
+  def getRelationTransformation(classname: Object): ITransformationRole = null
+  
+  /**
+   * Return a role instance that handles the transformation process for a new model to this instance.
+   * Can only be called in this transformation acts as sub transformation.
+   */
+  protected def getSubTransformation(classname: Object): ITransformationRole = null
 
-  def finalEditFunction(): Unit
+  /**
+   * Function to create special connection add the end of the transformation.
+   */
+  def finishFunction(): Unit
 
-  protected def connectTargetElementWithSourceElementes(target: PlayerSync, sourceList: Set[PlayerSync]): Unit = {
-    var containers: Set[IntegrationContainer] = Set.empty
+  protected def connectTargetElementWithSourceElements(target: PlayerSync, sourceList: Set[PlayerSync]): Unit = {
+    var containers: Set[TransformationContainer] = Set.empty
     //Create Containers
     sourceList.foreach(e => {
-      containers += new IntegrationContainer(target, e)
+      containers += new TransformationContainer(target, e)
     })
     //Finish Creation
     makeCompleteIntegrationProcess(containers)
   }
 
-  protected def connectTargetElementWithSourceElemente(target: PlayerSync, source: PlayerSync): Unit = {
-    var containers: Set[IntegrationContainer] = Set.empty
+  protected def connectTargetElementWithSourceElement(target: PlayerSync, source: PlayerSync): Unit = {
+    var containers: Set[TransformationContainer] = Set.empty
     //Create Container
-    containers += new IntegrationContainer(target, source)
+    containers += new TransformationContainer(target, source)
     //Finish Creation
     makeCompleteIntegrationProcess(containers)
   }
 
-  private def addExtensionRoles(containers: Set[IntegrationContainer]): Unit = {
+  private def addExtensionRoles(containers: Set[TransformationContainer]): Unit = {
     containers.filter(_.newManagerConnection).foreach { cc =>
-      SynchronizationCompartment.getExtensions().foreach { e =>
+      ConsistencyManagement.getExtensions().foreach { e =>
         var role = e.getExtensionForClassName(cc.getNewPlayerInstance())
         if (role != null) {
           cc.getNewManagerInstance() play role
@@ -53,8 +62,8 @@ trait IIntegrationCompartment extends Compartment {
     }
   }
 
-  private def notifyExtensionRoles(containers: Set[IntegrationContainer]): Unit = {
-    if (!SynchronizationCompartment.getExtensions().isEmpty) {
+  private def notifyExtensionRoles(containers: Set[TransformationContainer]): Unit = {
+    if (!ConsistencyManagement.getExtensions().isEmpty) {
       containers.filter(_.newManagerConnection).foreach { cc =>
         var playerInstance = cc.getNewPlayerInstance()
         +playerInstance insertNotification ()
@@ -65,34 +74,34 @@ trait IIntegrationCompartment extends Compartment {
   /**
    * Add Manager roles to all constructed elements.
    */
-  private def addManagerRoles(containers: Set[IntegrationContainer]): Unit = {
+  private def addManagerRoles(containers: Set[TransformationContainer]): Unit = {
     containers.filter(_.newManagerConnection).foreach { cc =>
       cc.getNewPlayerInstance() play cc.getNewManagerInstance()
     }
   }
 
   /**
-   * Add the delete roles for the elements in the IntegrationContainer.
+   * Add the delete roles for the elements in the TransformationContainer.
    */
-  private def addDeleteRoles(containers: Set[IntegrationContainer]): Unit = {
+  private def addDeleteRoles(containers: Set[TransformationContainer]): Unit = {
     containers.filter(_.newManagerConnection).foreach { cc =>
-      cc.getNewManagerInstance() play SynchronizationCompartment.getDestructionRule().getDestructorForClassName(cc.getNewPlayerInstance())
+      cc.getNewManagerInstance() play ConsistencyManagement.getDestructionRule().getDestructorForClassName(cc.getNewPlayerInstance())
     }
   }
 
   /**
-   * Add the related RoleManagers for the elements in the IntegrationContainer.
+   * Add the related RoleManagers for the elements in the TransformationContainer.
    */
-  private def addRelatedRoleManager(containers: Set[IntegrationContainer]): Unit = {
+  private def addRelatedRoleManager(containers: Set[TransformationContainer]): Unit = {
     containers.foreach { cc =>
       val oldPlayer = cc.getOldPlayerInstance()
       if (cc.simpleRelatedManagerConnection) {
-        val manager: IRoleManager = +oldPlayer getManager ()
+        val manager: ISyncManagerRole = +oldPlayer getManager ()
         if (manager != null) {
           manager.makeRelated(cc.getNewManagerInstance())
         }
       } else {
-        val allManager: Set[IRoleManager] = +oldPlayer getAllManager ()
+        val allManager: Set[ISyncManagerRole] = +oldPlayer getAllManager ()
         if (allManager != null) {
           allManager.foreach { r =>
             r.makeRelated(cc.getNewManagerInstance())
@@ -103,29 +112,29 @@ trait IIntegrationCompartment extends Compartment {
   }
 
   /**
-   * Combine the SynchronizationCompartment with all Players from the IntegrationContainer.
+   * Combine the ConsistencyManagement with all Players from the TransformationContainer.
    */
-  private def synchronizeCompartments(containers: Set[IntegrationContainer]): Unit = {
+  private def synchronizeCompartments(containers: Set[TransformationContainer]): Unit = {
     containers.filter(_.newManagerConnection).foreach { cc =>
-      SynchronizationCompartment combine cc.getNewPlayerInstance()
+      ConsistencyManagement combine cc.getNewPlayerInstance()
     }
   }
 
   /**
-   * Create the Synchronization mechanisms for the elements in the IntegrationContainer.
+   * Create the Synchronization mechanisms for the elements in the TransformationContainer.
    */
-  private def bindSynchronizationRules(containers: Set[IntegrationContainer]): Unit = {
+  private def bindSynchronizationRules(containers: Set[TransformationContainer]): Unit = {
     containers.filter(_.newManagerConnection).foreach { cc =>
       val oldPlayer = cc.getOldPlayerInstance()
-      val allManager: Set[IRoleManager] = +oldPlayer getAllManager ()
+      val allManager: Set[ISyncManagerRole] = +oldPlayer getAllManager ()
       if (allManager != null) {
         allManager.foreach { rm =>
           val roles = rm.roles()
           //println("Player: " + rm.player + "Roles: " + roles)
           roles.foreach { r =>
-            if (r.isInstanceOf[ISyncRole]) {
-              val syncRole: ISyncRole = r.asInstanceOf[ISyncRole]
-              val syncComp: ISyncCompartment = syncRole.getOuterCompartment
+            if (r.isInstanceOf[IModificationRole]) {
+              val syncRole: IModificationRole = r.asInstanceOf[IModificationRole]
+              val syncComp: IModificationCompartment = syncRole.getOuterCompartment
               //println("+~~~Sync: " + syncRole + " " + syncComp)
               if (!syncComp.containsSyncer(cc.getNewPlayerInstance()) && syncComp.isFirstIntegration(r.player.right.get)) {
                 val newRole = syncComp.getNextIntegrationRole(cc.getNewPlayerInstance())
@@ -150,9 +159,9 @@ trait IIntegrationCompartment extends Compartment {
   }
 
   /**
-   * Fill the test lists with all Players from the IntegrationContainer.
+   * Fill the test lists with all Players from the TransformationContainer.
    */
-  private def fillTestLists(containers: Set[IntegrationContainer]): Unit = {
+  private def fillTestLists(containers: Set[TransformationContainer]): Unit = {
     containers.filter(_.newManagerConnection).foreach { cc =>
       ModelElementLists.addElement(cc.getNewPlayerInstance())
     }
@@ -161,7 +170,7 @@ trait IIntegrationCompartment extends Compartment {
   /**
    * Do the integration process automatically.
    */
-  protected def makeCompleteIntegrationProcess(containers: Set[IntegrationContainer]): Unit = {
+  private def makeCompleteIntegrationProcess(containers: Set[TransformationContainer]): Unit = {
     containers.foreach(cc => {
       if (cc.getNewManagerInstance() == null) {
         val newPlayer = cc.getNewPlayerInstance()
@@ -171,7 +180,7 @@ trait IIntegrationCompartment extends Compartment {
           cc.newManagerInstance = manager.right.get
         } else {
           cc.newManagerConnection = true
-          cc.newManagerInstance = SynchronizationCompartment.createRoleManager()
+          cc.newManagerInstance = ConsistencyManagement.createRoleManager()
         }
       }
     })
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 b9a0db9ee0ea770967801e613c4cdf0afd018d15..5dff5726233ee79120fc1d40048d20a34288d340 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
@@ -2,7 +2,7 @@ package org.rosi_project.model_management.sync.compartments
 
 import org.rosi_project.model_management.core.PlayerSync
 import org.rosi_project.model_management.sync.IDestructionCompartment
-import org.rosi_project.model_management.sync.roles.{ IDestructor, IRoleManager }
+import org.rosi_project.model_management.sync.roles.{ IDestructionRole, ISyncManagerRole }
 
 import scala.collection.mutable.ListBuffer
 import org.rosi_project.model_management.core.ModelElementLists
@@ -12,11 +12,9 @@ import org.rosi_project.model_management.core.ModelElementLists
  */
 object GeneralDestructor extends IDestructionCompartment {
 
-  override def getDestructorForClassName(classname: Object): IDestructor = new DeleteRole
-
-  override def getRuleName: String = "GeneralDestructor"
+  override def getDestructorForClassName(classname: Object): IDestructionRole = new DeleteRole
   
-  class DeleteRole() extends IDestructor {
+  class DeleteRole() extends IDestructionRole {
 
     def deleteRoleFunction(): Unit = {
       //remove this manager from all related ones
@@ -39,11 +37,11 @@ object GeneralDestructor extends IDestructionCompartment {
     }
   }
 
-  class DeleteRoleAndConnections() extends IDestructor {
+  class DeleteRoleAndConnections() extends IDestructionRole {
 
     def deleteRoleFunction(): Unit = {
       //get the list of related manager
-      var relatedManagers: Set[IRoleManager] = (+this).getRelatedManager()
+      var relatedManagers: Set[ISyncManagerRole] = (+this).getRelatedManager()
       
       //clear all lists from the related managers
       (+this).clearListsOfRelatedManager()
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/ModelElementsListGCExtension.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/ModelElementsListGCExtension.scala
index 1bba7d49201855d065369e2bf1d2fbc3433e16ba..c185f9135c3f63896c9060c7f59affaf5cc74728 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/ModelElementsListGCExtension.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/ModelElementsListGCExtension.scala
@@ -1,8 +1,8 @@
 package org.rosi_project.model_management.sync.compartments
 
 import org.rosi_project.model_management.core.ModelElementLists
-import org.rosi_project.model_management.sync.IExtenstionCompartment
-import org.rosi_project.model_management.sync.roles.IExtension
+import org.rosi_project.model_management.sync.IExtensionCompartment
+import org.rosi_project.model_management.sync.roles.IExtensionRole
 import scroll.internal.errors.SCROLLErrors.TypeError
 
 /** Extension to delete instances which are removed from the synchronization context from the
@@ -11,21 +11,16 @@ import scroll.internal.errors.SCROLLErrors.TypeError
   *
   * @author Rico Bergmann
   */
-object ModelElementsListGCExtension extends IExtenstionCompartment {
+object ModelElementsListGCExtension extends IExtensionCompartment {
 
   /**
     * Return a role instance that handles the extension process for the object.
     */
-  override def getExtensionForClassName(classname: Object): IExtension = new GarbageCollector
-
-  /**
-    * Return a unique name that describes this extension.
-    */
-  override def getExtensionName(): String = "ModelElementsList GarbageCollector"
+  override def getExtensionForClassName(classname: Object): IExtensionRole = new GarbageCollector
 
   /** The actual extension.
     */
-  class GarbageCollector extends IExtension {
+  class GarbageCollector extends IExtensionRole {
 
     /**
       * Function to react on insertion behavior.
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 987002f50668715d97792f84bc04a3a80b65d562..992227b7c8d8ac0875dd55ddf662241172c911f1 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
@@ -1,8 +1,8 @@
 package org.rosi_project.model_management.sync.compartments
 
-import org.rosi_project.model_management.core.{PlayerSync, SynchronizationCompartment}
+import org.rosi_project.model_management.core.PlayerSync
 import org.rosi_project.model_management.sync.IConstructionCompartment
-import org.rosi_project.model_management.sync.roles.{IConstructor, IRoleManager}
+import org.rosi_project.model_management.sync.roles.{IConstructionRole, ISyncManagerRole}
 
 /** An [[IConstructionCompartment]] which will not create any related instances in other models
   *
@@ -10,18 +10,16 @@ import org.rosi_project.model_management.sync.roles.{IConstructor, IRoleManager}
   */
 object SuppressingConstructionCompartment extends IConstructionCompartment {
 
-  override def getConstructorForClassName(classname: Object): IConstructor = new Suppressor
-
-  override def getRuleName: String = "SuppressingConstructionCompartment"
+  override def getConstructorForClassName(classname: Object): IConstructionRole = new Suppressor
   
   /** The constructor will only create the necessary `plays` relationships with the synchronization
     * services
     */
-  class Suppressor extends IConstructor {
+  class Suppressor extends IConstructionRole {
 
-    override def construct(comp: PlayerSync, man: IRoleManager): Unit = {
+    override def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = {
       // just set up the player
-      createContainerElement(start=true, con=true, comp, man)
+      createContainerElement(start=true, con=true, comp)
       makeCompleteConstructionProcess(containers)
     }
 
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/ConstructionContainer.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/ConstructionContainer.scala
index 55ebd19993d5e750b7fd730c1d5588c1761b9e0f..df111912e46a61bd2c1802176f2552808ec0a397 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/ConstructionContainer.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/ConstructionContainer.scala
@@ -1,12 +1,19 @@
 package org.rosi_project.model_management.sync.helper
 
-import org.rosi_project.model_management.sync.roles.IRoleManager
+import org.rosi_project.model_management.sync.roles.ISyncManagerRole
 import org.rosi_project.model_management.core.PlayerSync
 
 /**
   * Helper class for all construction processes to manage standard work loads.
   */
-class ConstructionContainer(val startElement: Boolean, val constructed: Boolean, val player: PlayerSync, val manager: IRoleManager) {
+class ConstructionContainer(val startElement: Boolean, val constructed: Boolean, val player: PlayerSync) {
+  
+  var m: ISyncManagerRole = null
+  
+  def setManagerInstance(manager: ISyncManagerRole): Unit = {
+    m = manager
+  }
+  
   /**
     * Returns true if it is the start construction element.
     */
@@ -25,5 +32,5 @@ class ConstructionContainer(val startElement: Boolean, val constructed: Boolean,
   /**
     * Get the RoleManager instance of this element
     */
-  def getManagerInstance(): IRoleManager = manager
+  def getManagerInstance(): ISyncManagerRole = m
 }
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/IntegrationContainer.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/TransformationContainer.scala
similarity index 68%
rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/IntegrationContainer.scala
rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/TransformationContainer.scala
index 3237c18ee625f81f5ad8a830871bb5ab3a82c484..18b68a5d0fee3e007b23c90f079347c5f1c61b95 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/IntegrationContainer.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/TransformationContainer.scala
@@ -1,16 +1,16 @@
 package org.rosi_project.model_management.sync.helper
 
-import org.rosi_project.model_management.sync.roles.IRoleManager
+import org.rosi_project.model_management.sync.roles.ISyncManagerRole
 import org.rosi_project.model_management.core.PlayerSync
 
 /**
   * Helper class for all integration processes to manage standard work loads.
   */
-class IntegrationContainer (val newPlayerInstance: PlayerSync, val oldPlayerInstance: PlayerSync) {
+class TransformationContainer (val newPlayerInstance: PlayerSync, val oldPlayerInstance: PlayerSync) {
   
   var simpleRelatedManagerConnection: Boolean = true
   var newManagerConnection: Boolean = true
-  var newManagerInstance: IRoleManager = null
+  var newManagerInstance: ISyncManagerRole = null
   
   /**
    * Get the new PlayerSync instance of this element.
@@ -20,7 +20,7 @@ class IntegrationContainer (val newPlayerInstance: PlayerSync, val oldPlayerInst
   /**
    * Get the new RoleManager instance of this element
    */
-  def getNewManagerInstance(): IRoleManager = newManagerInstance
+  def getNewManagerInstance(): ISyncManagerRole = newManagerInstance
   
   /**
    * Get the old PlayerSync instance of this element.
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/IConstructionRole.scala
similarity index 71%
rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IConstructor.scala
rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IConstructionRole.scala
index dcfacf14b08c5ab1ef88f8fea30729b9f2a0c615..59bd351c20611e874a3b062e231e39ce057c2f75 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/IConstructionRole.scala
@@ -6,7 +6,7 @@ import org.rosi_project.model_management.sync.helper.ConstructionContainer
 /**
   * Interface for the constructor roles.
   */
-trait IConstructor {
+trait IConstructionRole {
 
   /**
     * Container list for the construction process.
@@ -16,14 +16,13 @@ trait IConstructor {
   /**
     * Create a container element with the incoming configuration.
     */
-  protected def createContainerElement(start: Boolean, con: Boolean, play: PlayerSync, man: IRoleManager): Unit = {
-    if (play == null)
-      return
-    containers += new ConstructionContainer(start, con, play, man)
+  protected def createContainerElement(start: Boolean, con: Boolean, play: PlayerSync): Unit = {
+    require(play != null)
+    containers += new ConstructionContainer(start, con, play)
   }
 
   /**
     * General construction function for external call.
     */
-  def construct(comp: PlayerSync, man: IRoleManager): Unit
+  def construct(comp: PlayerSync, man: ISyncManagerRole): Unit
 }
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IDestructor.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IDestructionRole.scala
similarity index 89%
rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IDestructor.scala
rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IDestructionRole.scala
index dd979c8b6567c578921d73cd4c48b6ea2e30ed8b..5384e167eed3df32e8d753682d3a4aa5db6d7eb1 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IDestructor.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IDestructionRole.scala
@@ -3,7 +3,7 @@ package org.rosi_project.model_management.sync.roles
 /**
   * Interface for the destructor roles.
   */
-trait IDestructor {
+trait IDestructionRole {
   
   /**
     * General destruction function for external call.
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IExtension.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IExtensionRole.scala
similarity index 94%
rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IExtension.scala
rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IExtensionRole.scala
index 95363b572821c77015eeeb2b259dd02b23e461ac..a3fdf614a4d5f039b7cf35fc9367341be0380cf3 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IExtension.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IExtensionRole.scala
@@ -3,7 +3,7 @@ package org.rosi_project.model_management.sync.roles
 /**
   * Interface for the extension roles.
   */
-trait IExtension {
+trait IExtensionRole {
   
   /**
    * Function to react on insertion behavior.
diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/ISyncRole.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IModificationRole.scala
similarity index 57%
rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/ISyncRole.scala
rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IModificationRole.scala
index 7682043b230fb2bf9cb26f0efa101bc95d89e71f..ef69e7f4272ee6e14369af0558e38238f8f2ecb4 100644
--- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/ISyncRole.scala
+++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IModificationRole.scala
@@ -1,14 +1,14 @@
 package org.rosi_project.model_management.sync.roles
 
-import org.rosi_project.model_management.sync.ISyncCompartment
+import org.rosi_project.model_management.sync.IModificationCompartment
 
 /**
   * Interface for the synchronization roles.
   */
-trait ISyncRole {
+trait IModificationRole {
   
   /**
     * Function to get the synchronization compartment from a role instance.
     */
-  def getOuterCompartment: ISyncCompartment
+  def getOuterCompartment: IModificationCompartment
 }
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/ISyncManagerRole.scala
similarity index 71%
rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IRoleManager.scala
rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/ISyncManagerRole.scala
index fa466ee7c73b030fbd9dbfaea7e58b53c49518d6..371be286b620a2abbdabc3a55df8c4cd49d114d0 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/ISyncManagerRole.scala
@@ -7,14 +7,14 @@ import scala.collection.mutable.ListBuffer
 /**
  * Interface for the manager roles.
  */
-trait IRoleManager {
+trait ISyncManagerRole {
 
-  private var relatedManager: Set[IRoleManager] = Set.empty
+  private var relatedManager: Set[ISyncManagerRole] = Set.empty
 
   /**
    * Add a related manager to the list.
    */
-  def addRelatedManager(related: IRoleManager): Unit = {
+  def addRelatedManager(related: ISyncManagerRole): Unit = {
     if (related == null || related.equals(this))
       return
     relatedManager += related
@@ -23,22 +23,22 @@ trait IRoleManager {
   /**
    * Get the list of related managers.
    */
-  def getRelatedManager(): Set[IRoleManager] = relatedManager
+  def getRelatedManager(): Set[ISyncManagerRole] = relatedManager
 
   /**
    * Get this manager.
    */
-  def getManager(): IRoleManager = this
+  def getManager(): ISyncManagerRole = this
 
   /**
    * Get this manager plus related manager.
    */
-  def getAllManager(): Set[IRoleManager] = relatedManager + this
+  def getAllManager(): Set[ISyncManagerRole] = relatedManager + this
 
   /**
    * Remove a related manager from the list.
    */
-  def removeRelatedManager(related: IRoleManager): Unit = {
+  def removeRelatedManager(related: ISyncManagerRole): Unit = {
     if (related != null)
       relatedManager -= related
   }
@@ -69,9 +69,9 @@ trait IRoleManager {
   }
 
   /**
-   * Create a relation between two IRoleManager instances.
+   * Create a relation between two ISyncManagerRole instances.
    */
-  def makeRelated(relate: IRoleManager): Unit = {
+  def makeRelated(relate: ISyncManagerRole): Unit = {
     this.addRelatedManager(relate)
     relate.addRelatedManager(this)
   }
@@ -89,10 +89,10 @@ trait IRoleManager {
   /**
    * Get related PlayerSync with the specific name.
    */
-  def getRelatedClassFromName(name: String): PlayerSync
+  def getRelatedObject(name: String): PlayerSync
 
   /**
-   * Create a relation between two IRoleManager and RoleManager of other PlayerSync instances.
+   * Create a relation between two ISyncManagerRole and RoleManager of other PlayerSync instances.
    */
   def makePlayerSyncRelated(playerSync: PlayerSync): Unit
 
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/ITransformationRole.scala
similarity index 60%
rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IIntegrator.scala
rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/ITransformationRole.scala
index 33336c02a0847116fa16386734b58c23364ff44e..5114cb8aab39df3f44af49ab09926fca6ad69e88 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/ITransformationRole.scala
@@ -1,18 +1,17 @@
 package org.rosi_project.model_management.sync.roles
 
-import org.rosi_project.model_management.sync.helper.IntegrationContainer
+import org.rosi_project.model_management.sync.helper.TransformationContainer
 import org.rosi_project.model_management.core.PlayerSync
-import org.rosi_project.model_management.core.SynchronizationCompartment
 
 /**
   * Interface for the integration roles.
   */
-trait IIntegrator {
+trait ITransformationRole {
 
   /**
    * Container list for the integration process.
    */
-  protected var containers: Set[IntegrationContainer] = Set.empty
+  protected var containers: Set[TransformationContainer] = Set.empty
 
   /**
    * Create a container element with the incoming configuration.
@@ -20,11 +19,11 @@ trait IIntegrator {
   protected def createContainerElement(newPlayer: PlayerSync, oldPlayer: PlayerSync): Unit = {
     if (newPlayer == null || oldPlayer == null)
       return
-    containers += new IntegrationContainer(newPlayer, oldPlayer)
+    containers += new TransformationContainer(newPlayer, oldPlayer)
   }
   
   /**
    * General integration function for external call.
    */
-  def integrate(comp: PlayerSync) : PlayerSync
+  def transform(comp: PlayerSync) : PlayerSync
 }
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/ttc2019/CompleteTTCProcess.scala b/solutions/RSync/src/main/scala/ttc2019/CompleteTTCProcess.scala
index 7d99c74c9b6b22876630d00e9e9ea03727997281..f013c14813e4c91717ff200e7095214b268b27cd 100644
--- a/solutions/RSync/src/main/scala/ttc2019/CompleteTTCProcess.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/CompleteTTCProcess.scala
@@ -1,12 +1,14 @@
 package ttc2019
 
-import org.rosi_project.model_management.core.SynchronizationCompartment
-import org.rosi_project.model_management.core.RsumCompartment
 import org.rosi_project.model_management.core.ModelElementLists
-import org.rosi_project.model_management.sync.IIntegrationCompartment
 import ttc2019.worksync._
 import ttc2019.metamodels.create.Launcher
 import sync.tt._
+import org.rosi_project.model_management.core.ConsistencyManagement
+import org.rosi_project.model_management.core.RsumManagement
+import creation.ICreationTT
+import org.rosi_project.model_management.sync.ITransformationCompartment
+import creation.CreationTTSync
 
 /**
  * The `CompleteTTCProcess` executes the entire transformation workflow. Its methods are inspired
@@ -14,10 +16,10 @@ import sync.tt._
  */
 object CompleteTTCProcess extends App {
 
-  SynchronizationCompartment combine RsumCompartment
+  ConsistencyManagement combine RsumManagement
 
-  var ctts: ICreateTruthTable = _
-  var integrate: IIntegrationCompartment = _
+  var ctts: ICreationTT = _
+  var integrate: ITransformationCompartment = _
   var writeOut: IWriteOutputModel = _
   var loader: TTCLoader = _
   var validator: Launcher = _
@@ -36,20 +38,20 @@ object CompleteTTCProcess extends App {
     sync = processConfig.processMode == ProcessMode.SYNC
     loader = new TTCLoader
     validator = new Launcher
-    ctts = new CreateTruthTableSync()
+    ctts = new CreationTTSync()
     if (sync) {
-      SynchronizationCompartment.changeConstructionRule(TTandBDTandBDDSyncConstruction)
-      SynchronizationCompartment.addSynchronizationRule(new SyncHeadNamesSync)
-      SynchronizationCompartment.addSynchronizationRule(new SyncPortNamesSync)
-      SynchronizationCompartment.addSynchronizationRule(new SyncChangesTruthTableSync)
-      SynchronizationCompartment.addSynchronizationRule(new SyncChangesCellSync)
+      ConsistencyManagement.changeConstructionRule(TtBdtBddConstruction)
+      ConsistencyManagement.addModificationRule(new SyncNames)
+      ConsistencyManagement.addModificationRule(new SyncPortNames)
+      ConsistencyManagement.addModificationRule(new SyncTruthTableModifications)
+      ConsistencyManagement.addModificationRule(new SyncCellModifications)
       writeOut = WriteSyncBdtOutput
     } else {
       if (bdt) {
-        integrate = if (processConfig.processMode == ProcessMode.BDT) BdtSyncIntegration else BdtSyncIntegrationWithoutOrder
+        integrate = if (processConfig.processMode == ProcessMode.BDT) BdtTransformation else BdtTransformationPortOrder
         writeOut = WriteSyncBdtOutput
       } else {
-        integrate = if (processConfig.processMode == ProcessMode.BDD) BddSyncIntegration else BddSyncIntegrationWithoutOrder
+        integrate = if (processConfig.processMode == ProcessMode.BDD) BddTransformation else BddTransformationPortOrder
         writeOut = WriteSyncBddOutput
       }
     }
@@ -67,7 +69,7 @@ object CompleteTTCProcess extends App {
    */
   def run(): Unit = {
     if (!sync) {
-      SynchronizationCompartment.integrateNewModel(integrate)
+      ConsistencyManagement.transformModel(integrate)
     }
   }
 
@@ -148,6 +150,10 @@ object CompleteTTCProcess extends App {
 
   override def main(args: Array[String]): Unit = {
     val processConfig = TTCProcessConfiguration(ttFileName = "TT.ttmodel", bddFileName = "Generated.bddmodel", processMode = ProcessMode.SYNC)
+    //val processConfig = TTCProcessConfiguration(ttFileName = "TT.ttmodel", bddFileName = "Generated.bddmodel", processMode = ProcessMode.BDT)
+    //val processConfig = TTCProcessConfiguration(ttFileName = "TT.ttmodel", bddFileName = "Generated.bddmodel", processMode = ProcessMode.BDTU)
+    //val processConfig = TTCProcessConfiguration(ttFileName = "TT.ttmodel", bddFileName = "Generated.bddmodel", processMode = ProcessMode.BDD)
+    //val processConfig = TTCProcessConfiguration(ttFileName = "TT.ttmodel", bddFileName = "Generated.bddmodel", processMode = ProcessMode.BDDU)
     executeEntireProcess(processConfig)
     showSyncFunctionalityByExample()
   }
diff --git a/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableDirectSync.scala b/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableDirectSync.scala
deleted file mode 100644
index f5f33619ef1e54301f7e07a6658fb350782c1d9b..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableDirectSync.scala
+++ /dev/null
@@ -1,63 +0,0 @@
-package ttc2019
-
-import sync.tt._
-import org.eclipse.emf.ecore.EObject
-
-/**
- * Create the instances of the truth table in Scala. 
- * 
- * @author Christopher Werner
- */
-class CreateTruthTableDirectSync extends ICreateTruthTable {
-  
-  var truthttable: TruthTable = null
-  var rows: java.util.Map[EObject, Row] = new java.util.HashMap()
-  var cells: java.util.Map[EObject, Cell] = new java.util.HashMap()
-  var ports: java.util.Map[EObject, Port] = new java.util.HashMap()
-  
-  def createTruthTable(name: String, id: EObject): Unit = {
-    truthttable = new TruthTable(name, Set.empty, Set.empty, null)
-  }
-  
-  def createInputPort(name: String, id: EObject): Unit = {
-    ports.put(id, new InputPort(name, Set.empty, null, null))
-  }
-  
-  def createOutputPort(name: String, id: EObject): Unit = {
-    ports.put(id, new OutputPort(name, Set.empty, null, null))
-  }
-  
-  def createRow(id: EObject): Unit = {
-    rows.put(id, new Row(Set.empty, null, null))
-  }
-  
-  def createCell(value: Boolean, id: EObject): Unit = {
-    cells.put(id, new Cell(value, null, null, null))
-  }
-  
-  def createTruthTableRowsRow(tt: EObject, row: EObject): Unit = {
-    val r = rows.get(row)
-    truthttable.addRows(r)
-    r.setOwner(truthttable)
-  }
-  
-  def createTruthTablePortsPort(tt: EObject, port: EObject): Unit = {
-    val p = ports.get(port)
-    truthttable.addPorts(p)
-    p.setOwner(truthttable)
-  }
-  
-  def createRowCellsCell(row: EObject, cell: EObject): Unit = {
-    val c = cells.get(cell)
-    val r = rows.get(row)
-    c.setOwner(r)
-    r.addCells(c)
-  }
-  
-  def createCellPortPort(cell: EObject, port: EObject): Unit = {
-    val c = cells.get(cell)
-    val p = ports.get(port)
-    c.setPort(p)
-    p.addCells(c)
-  }
-}
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableSync.scala b/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableSync.scala
deleted file mode 100644
index 73c11cef68aab86a88dc256d7917fad7201c519c..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableSync.scala
+++ /dev/null
@@ -1,61 +0,0 @@
-package ttc2019
-
-import _root_.sync.tt._
-import org.eclipse.emf.ecore.EObject
-
-class CreateTruthTableSync extends ICreateTruthTable {
-  
-  var mapping: Map[EObject, Object] = Map.empty 
-  
-  def createTruthTable(name: String, id: EObject): Unit = {
-    mapping += (id -> new TruthTable(name, Set.empty, Set.empty, null))
-  }
-  
-  def createInputPort(name: String, id: EObject): Unit = {
-    mapping += (id -> new InputPort(name, Set.empty, null, null))
-  }
-  
-  def createOutputPort(name: String, id: EObject): Unit = {
-    mapping += (id -> new OutputPort(name, Set.empty, null, null))
-  }
-  
-  def createRow(id: EObject): Unit = {
-    mapping += (id -> new Row(Set.empty, null, null))
-  }
-  
-  def createCell(value: Boolean, id: EObject): Unit = {
-    mapping += (id -> new Cell(value, null, null, null))
-  }
-  
-  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)
-    r.setOwner(t)
-  }
-  
-  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)
-    p.setOwner(t)
-  }
-  
-  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)
-    r.addCells(c)
-  }
-  
-  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)
-    p.addCells(c)
-  }
-}
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/ttc2019/ICreateTruthTable.scala b/solutions/RSync/src/main/scala/ttc2019/ICreateTruthTable.scala
deleted file mode 100644
index c81b99267db43fc60c76cb05417025c03730ede0..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/scala/ttc2019/ICreateTruthTable.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-package ttc2019
-
-import org.eclipse.emf.ecore.EObject
-
-/**
- * Interface for creating a truth Table.
- */
-trait ICreateTruthTable {
-  
-  def createTruthTable(name: String, id: EObject): Unit
-  
-  def createInputPort(name: String, id: EObject): Unit
-  
-  def createOutputPort(name: String, id: EObject): Unit
-  
-  def createRow(id: EObject): Unit
-  
-  def createCell(value: Boolean, id: EObject): Unit
-  
-  def createTruthTableRowsRow(tt: EObject, row: EObject): Unit
-  
-  def createTruthTablePortsPort(tt: EObject, port: EObject): Unit
-  
-  def createRowCellsCell(row: EObject, cell: EObject): Unit
-  
-  def createCellPortPort(cell: EObject, port: EObject): Unit
-}
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/ttc2019/TTCLoader.scala b/solutions/RSync/src/main/scala/ttc2019/TTCLoader.scala
index b9c67a894887c2edb382c789abfa4ece35a66a33..7d83c6f69a6f6b0c296574484de27d13cf1b17c4 100644
--- a/solutions/RSync/src/main/scala/ttc2019/TTCLoader.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/TTCLoader.scala
@@ -12,6 +12,7 @@ import java.io.File
 import org.eclipse.emf.ecore.EStructuralFeature
 import ttc2019.metamodels.create._
 import ttc2019.metamodels.tt._
+import creation.ICreationTT
 
 /**
  * Simple service to load an ECORE meta and instance model from a file.
@@ -62,77 +63,27 @@ class TTCLoader {
 
     return ressourceModel.getContents().get(0)
   }
-
-  private def createObj(obj: EObject, ctts: ICreateTruthTable): Unit = {
-    var objName = obj.eClass.getName
-
-    //println(objName)
-    objName match {
-      case "TruthTable" => ctts.createTruthTable(obj.eGet(obj.eClass().getEStructuralFeature("name")).toString(), obj)
-      case "InputPort"  => ctts.createInputPort(obj.eGet(obj.eClass().getEStructuralFeature("name")).toString(), obj)
-      case "OutputPort" => ctts.createOutputPort(obj.eGet(obj.eClass().getEStructuralFeature("name")).toString(), obj)
-      case "Row"        => ctts.createRow(obj)
-      case "Cell"       => ctts.createCell(obj.eGet(obj.eClass().getEStructuralFeature("value")).asInstanceOf[Boolean], obj)
-      case _            =>
-    }
-  }
-
-  private def createReferences(o1: EObject, ctts: ICreateTruthTable): Unit = {
-    o1.eClass().getEAllReferences.forEach(sf => {
-      if (sf.getName == "port" || sf.getName == "owner") {
-        val o2 = o1.eGet(sf).asInstanceOf[EObject]
-        //println("++ " + o1.eClass().getName + " " + sf.getName + " " + o2.eClass().getName)
-        if (o1.eClass().getName == "Cell" && sf.getName == "port" && o2.eClass().getName.contains("Port")) {
-          ctts.createCellPortPort(o1, o2)
-        } else if (o1.eClass().getName == "Cell" && sf.getName == "owner" && o2.eClass().getName == "Row") {
-          ctts.createRowCellsCell(o2, o1)
-        } else if (o1.eClass().getName.contains("Port") && sf.getName == "owner" && o2.eClass().getName == "TruthTable") {
-          ctts.createTruthTablePortsPort(o2, o1)
-        } else if (o1.eClass().getName == "Row" && sf.getName == "owner" && o2.eClass().getName == "TruthTable") {
-          ctts.createTruthTableRowsRow(o2, o1)
-        }
-      }
-    })
-  }
-
-  /**
-   * Create the input TruthTable instance from the *.ttmodel file.
-   */
-  def createTruthTableInstance(obj: EObject, ctts: ICreateTruthTable): Unit = {
-    createObj(obj, ctts)
-    obj.eAllContents().asScala.foreach(o => {
-      createObj(o, ctts)
-    })
-
-    //add values for instances
-    createReferences(obj, ctts)
-    obj.eAllContents().asScala.foreach(o1 => {
-      createReferences(o1, ctts)
-    })
-  }
   
-  def createTruthTableRSYNCInstance(tt: TruthTable, ctts: ICreateTruthTable): Unit = {
-    ctts.createTruthTable(tt.getName, tt)
+  def createTruthTableRSYNCInstance(tt: TruthTable, ctts: ICreationTT): Unit = {
+    ctts.createTruthTable(tt.getName, null, tt)
     
     tt.getPorts.forEach(p => {
       if (p.isInstanceOf[InputPort]) {
-        ctts.createInputPort(p.getName, p)
+        ctts.createInputPort(p.getName, null, p)
       } else {
-        ctts.createOutputPort(p.getName, p)
+        ctts.createOutputPort(p.getName, null, p)
       }
       ctts.createTruthTablePortsPort(tt, p)      
     })
     
     tt.getRows.forEach(r => {
-      ctts.createRow(r)
+      ctts.createRow(null, r)
       r.getCells.forEach(c => {
-        //print("(" + c.getPort.getName + "|" + (if (c.isValue()) "1" else "0") + ") ")
-        ctts.createCell(c.isValue(), c)
+        ctts.createCell(c.isValue(), null, 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/BddTransformation.scala
similarity index 77%
rename from solutions/RSync/src/main/scala/ttc2019/worksync/BddSyncIntegration.scala
rename to solutions/RSync/src/main/scala/ttc2019/worksync/BddTransformation.scala
index dcd8bfe349954d2f5ebd39a0b88b9dee7cb9f0eb..5358e7823ecc6a53c40bc409f64742d73ef18ac9 100644
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/BddSyncIntegration.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/BddTransformation.scala
@@ -1,37 +1,22 @@
 package ttc2019.worksync
 
 import org.rosi_project.model_management.core.PlayerSync
-import org.rosi_project.model_management.core.SynchronizationCompartment
-import org.rosi_project.model_management.sync.IIntegrationCompartment
-import org.rosi_project.model_management.sync.roles.IIntegrator
-import org.rosi_project.model_management.sync.roles.IRoleManager
+import org.rosi_project.model_management.sync.ITransformationCompartment
+import org.rosi_project.model_management.sync.roles.ITransformationRole
+import org.rosi_project.model_management.sync.roles.ISyncManagerRole
 
-import org.rosi_project.model_management.sync.helper.IntegrationContainer
-import scala.collection.mutable.ListBuffer
-import org.rosi_project.model_management.core.ModelElementLists
-
-object BddSyncIntegration extends IIntegrationCompartment {
+object BddTransformation extends ITransformationCompartment {
 
   private var leafNodes: Map[Set[String], sync.bddg.Leaf] = Map.empty
   private var createdBdds: Set[sync.bddg.BDD] = Set.empty
 
-  def printManager(): Unit = {
-    ModelElementLists.getElementsFromType("sync.bddg.Leaf").asInstanceOf[List[sync.bddg.Leaf]].foreach(obj => {
-      +obj printAllManager ()
-    })
-  }
-
-  def getRelationalIntegratorsForClassName(classname: Object): IIntegrator = {
-    return null
-  }
-
-  def getIntegratorForClassName(classname: Object): IIntegrator = {
+  def getTransformation(classname: Object): ITransformationRole = {
     if (classname.isInstanceOf[sync.tt.TruthTable])
       return new TruthTableConstruct()
     return null
   }
 
-  def getNextIntegratorForClassName(classname: Object): IIntegrator = {
+  override def getSubTransformation(classname: Object): ITransformationRole = {
     if (classname.isInstanceOf[sync.tt.OutputPort])
       return new OutputPortConstruct()
     if (classname.isInstanceOf[sync.tt.InputPort])
@@ -39,11 +24,11 @@ object BddSyncIntegration extends IIntegrationCompartment {
     return null
   }
 
-  def finalEditFunction(): Unit = {
+  def finishFunction(): Unit = {
     var ttNode: sync.tt.TruthTable = null
     
     createdBdds.foreach(bddNode => {
-      val oppBDD: PlayerSync = +bddNode getRelatedClassFromName ("TruthTable")
+      val oppBDD: PlayerSync = +bddNode getRelatedObject ("TruthTable")
       if (oppBDD != null) {
         ttNode = oppBDD.asInstanceOf[sync.tt.TruthTable]
       }
@@ -51,10 +36,8 @@ object BddSyncIntegration extends IIntegrationCompartment {
 
       val tree = createOutputLookSubtree(bddNode, ttNode, rows, Set.empty)
       bddNode.setRoot(tree)
-      connectTargetElementWithSourceElementes(tree, rows.asInstanceOf[Set[PlayerSync]])
+      connectTargetElementWithSourceElements(tree, rows.asInstanceOf[Set[PlayerSync]])
     })
-
-    //printManager()
   }
 
   def createOutputLookSubtree(bdd: sync.bddg.BDD, truthTable: sync.tt.TruthTable, rows: Set[sync.tt.Row], finishPorts: Set[sync.tt.Port]): sync.bddg.Tree = {
@@ -99,8 +82,9 @@ object BddSyncIntegration extends IIntegrationCompartment {
       }
     })
 
+    //println("Used Port: " + portTT)
     var portBDD: sync.bddg.InputPort = null
-    val oppo: PlayerSync = +portTT getRelatedClassFromName ("InputPort")
+    val oppo: PlayerSync = +portTT getRelatedObject ("InputPort")
     if (oppo != null) {
       portBDD = oppo.asInstanceOf[sync.bddg.InputPort]
     }
@@ -112,6 +96,7 @@ object BddSyncIntegration extends IIntegrationCompartment {
 
     val rowsOne = cellis.filter(_.getValue()).map(_.getOwner())
     val rowsZero = cellis.filter(!_.getValue()).map(_.getOwner())
+    //println("Rows (1) " + rowsOne.size + " (2) " + rowsZero.size)
 
     var treeZero: sync.bddg.Tree = null
     var treeOne: sync.bddg.Tree = null
@@ -133,12 +118,12 @@ object BddSyncIntegration extends IIntegrationCompartment {
     treeOne.addOwnerSubtreeForOne(subtree)
     subtree.setTreeForOne(treeOne)
     //connect to rows
-    connectTargetElementWithSourceElementes(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]])
+    connectTargetElementWithSourceElements(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]])
 
     treeZero.addOwnerSubtreeForZero(subtree)
     subtree.setTreeForZero(treeZero)
     //connect to rows
-    connectTargetElementWithSourceElementes(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]])
+    connectTargetElementWithSourceElements(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]])
 
     subtree
   }
@@ -163,8 +148,9 @@ object BddSyncIntegration extends IIntegrationCompartment {
         }
       }
     })
+    //println("Used Port: " + portTT)
     var portBDD: sync.bddg.InputPort = null
-    val oppo: PlayerSync = +portTT getRelatedClassFromName ("InputPort")
+    val oppo: PlayerSync = +portTT getRelatedObject ("InputPort")
     if (oppo != null) {
       portBDD = oppo.asInstanceOf[sync.bddg.InputPort]
     }    
@@ -176,6 +162,7 @@ object BddSyncIntegration extends IIntegrationCompartment {
 
     val rowsOne = cellis.filter(_.getValue()).map(_.getOwner())
     val rowsZero = cellis.filter(!_.getValue()).map(_.getOwner())
+    //println("Rows (1) " + rowsOne.size + " (2) " + rowsZero.size)
 
     var treeZero: sync.bddg.Tree = null
     var treeOne: sync.bddg.Tree = null
@@ -196,12 +183,12 @@ object BddSyncIntegration extends IIntegrationCompartment {
     treeOne.addOwnerSubtreeForOne(subtree)
     subtree.setTreeForOne(treeOne)
     //connect to rows
-    connectTargetElementWithSourceElementes(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]])
+    connectTargetElementWithSourceElements(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]])
 
     treeZero.addOwnerSubtreeForZero(subtree)
     subtree.setTreeForZero(treeZero)
     //connect to rows
-    connectTargetElementWithSourceElementes(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]])
+    connectTargetElementWithSourceElements(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]])
 
     subtree
   }
@@ -225,7 +212,7 @@ object BddSyncIntegration extends IIntegrationCompartment {
         assignment.setOwner(leaf)
         leaf.addAssignments(assignment)
 
-        val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("OutputPort")
+        val ttport: PlayerSync = +(cellout.getPort()) getRelatedObject ("OutputPort")
         if (ttport != null) {
           val o_port = ttport.asInstanceOf[sync.bddg.OutputPort]
           o_port.addAssignments(assignment)
@@ -239,14 +226,14 @@ object BddSyncIntegration extends IIntegrationCompartment {
       val cellList = rows.map(_.getCells().filter(_.getPort().getName() == a.getPort().getName()).head)
 
       //connect them
-      connectTargetElementWithSourceElementes(a, cellList.asInstanceOf[Set[PlayerSync]])
+      connectTargetElementWithSourceElements(a, cellList.asInstanceOf[Set[PlayerSync]])
     })
     leaf
   }
 
-  class OutputPortConstruct() extends IIntegrator {
+  class OutputPortConstruct() extends ITransformationRole {
 
-    def integrate(comp: PlayerSync): PlayerSync = {
+    def transform(comp: PlayerSync): PlayerSync = {
       //Step 1: Get construction values
       val name: String = +this getName ()
 
@@ -254,15 +241,15 @@ object BddSyncIntegration extends IIntegrationCompartment {
       val o_port = new sync.bddg.OutputPort(Set.empty, name, null)
 
       //Step 3: Make Connection
-      connectTargetElementWithSourceElemente(o_port, comp)
+      connectTargetElementWithSourceElement(o_port, comp)
 
       o_port
     }
   }
 
-  class InputPortConstruct() extends IIntegrator {
+  class InputPortConstruct() extends ITransformationRole {
 
-    def integrate(comp: PlayerSync): PlayerSync = {
+    def transform(comp: PlayerSync): PlayerSync = {
       //Step 1: Get construction values
       val name: String = +this getName ()
 
@@ -270,15 +257,15 @@ object BddSyncIntegration extends IIntegrationCompartment {
       val i_port = new sync.bddg.InputPort(Set.empty, name, null)
 
       //Step 3: Make Connection
-      connectTargetElementWithSourceElemente(i_port, comp)
+      connectTargetElementWithSourceElement(i_port, comp)
 
       i_port
     }
   }
 
-  class TruthTableConstruct() extends IIntegrator {
+  class TruthTableConstruct() extends ITransformationRole {
 
-    def integrate(comp: PlayerSync): PlayerSync = {
+    def transform(comp: PlayerSync): PlayerSync = {
       //Step 1: Get construction values
       val name: String = +this getName ()
       val ports: Set[sync.tt.Port] = +this getPorts ()
@@ -287,15 +274,15 @@ object BddSyncIntegration extends IIntegrationCompartment {
       val bdd = new sync.bddg.BDD(name, Set.empty, null, Set.empty)
 
       //Step 3: Make Connection
-      connectTargetElementWithSourceElemente(bdd, comp)
+      connectTargetElementWithSourceElement(bdd, comp)
 
       ports.foreach(p => {
-        val integrator = getNextIntegratorForClassName(p)
-        val manager: IRoleManager = +p getManager ()
+        val subRule = getSubTransformation(p)
+        val manager: ISyncManagerRole = +p getManager ()
         if (manager != null) {
-          manager play integrator
-          val obj = integrator.integrate(p).asInstanceOf[sync.bddg.Port]
-          integrator.remove()
+          manager play subRule
+          val obj = subRule.transform(p).asInstanceOf[sync.bddg.Port]
+          subRule.remove()
           obj.setOwner(bdd)
           bdd.addPorts(obj)
         }
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/BddSyncIntegrationWithoutOrder.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/BddTransformationPortOrder.scala
similarity index 74%
rename from solutions/RSync/src/main/scala/ttc2019/worksync/BddSyncIntegrationWithoutOrder.scala
rename to solutions/RSync/src/main/scala/ttc2019/worksync/BddTransformationPortOrder.scala
index 39a916e931202ca47ac15342a8475d111c6faa14..59b8612d7215248253c09ce1caff636155791956 100644
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/BddSyncIntegrationWithoutOrder.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/BddTransformationPortOrder.scala
@@ -1,32 +1,24 @@
 package ttc2019.worksync
 
 import org.rosi_project.model_management.core.PlayerSync
-import org.rosi_project.model_management.core.SynchronizationCompartment
-import org.rosi_project.model_management.sync.IIntegrationCompartment
-import org.rosi_project.model_management.sync.roles.IIntegrator
-import org.rosi_project.model_management.sync.roles.IRoleManager
-
-import org.rosi_project.model_management.sync.helper.IntegrationContainer
-import scala.collection.mutable.ListBuffer
-import org.rosi_project.model_management.core.ModelElementLists
+import org.rosi_project.model_management.sync.ITransformationCompartment
+import org.rosi_project.model_management.sync.roles.ITransformationRole
+import org.rosi_project.model_management.sync.roles.ISyncManagerRole
+
 import util.control.Breaks._
 
-object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment {
+object BddTransformationPortOrder extends ITransformationCompartment {
 
   private var leafNodes: Map[Set[String], sync.bddg.Leaf] = Map.empty
   private var createdBdds: Set[sync.bddg.BDD] = Set.empty
 
-  def getRelationalIntegratorsForClassName(classname: Object): IIntegrator = {
-    return null
-  }
-
-  def getIntegratorForClassName(classname: Object): IIntegrator = {
+  def getTransformation(classname: Object): ITransformationRole = {
     if (classname.isInstanceOf[sync.tt.TruthTable])
       return new TruthTableConstruct()
     return null
   }
 
-  def getNextIntegratorForClassName(classname: Object): IIntegrator = {
+  override def getSubTransformation(classname: Object): ITransformationRole = {
     if (classname.isInstanceOf[sync.tt.OutputPort])
       return new OutputPortConstruct()
     if (classname.isInstanceOf[sync.tt.InputPort])
@@ -34,11 +26,11 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment {
     return null
   }
 
-  def finalEditFunction(): Unit = {
+  def finishFunction(): Unit = {
     var ttNode: sync.tt.TruthTable = null
 
     createdBdds.foreach(bddNode => {
-      val oppBDD: PlayerSync = +bddNode getRelatedClassFromName ("TruthTable")
+      val oppBDD: PlayerSync = +bddNode getRelatedObject ("TruthTable")
       if (oppBDD != null) {
         ttNode = oppBDD.asInstanceOf[sync.tt.TruthTable]
       }
@@ -46,7 +38,7 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment {
 
       val tree = createOutputLookSubtree(bddNode, ttNode, rows, Set.empty)
       bddNode.setRoot(tree)
-      connectTargetElementWithSourceElementes(tree, rows.asInstanceOf[Set[PlayerSync]])
+      connectTargetElementWithSourceElements(tree, rows.asInstanceOf[Set[PlayerSync]])
     })
   }
 
@@ -85,8 +77,9 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment {
       })
     }
 
+    //println("Used Port: " + portTT)
     var portBDD: sync.bddg.InputPort = null
-    val oppo: PlayerSync = +portTT getRelatedClassFromName ("InputPort")
+    val oppo: PlayerSync = +portTT getRelatedObject ("InputPort")
     if (oppo != null) {
       portBDD = oppo.asInstanceOf[sync.bddg.InputPort]
     }
@@ -119,12 +112,12 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment {
     treeOne.addOwnerSubtreeForOne(subtree)
     subtree.setTreeForOne(treeOne)
     //connect to rows
-    connectTargetElementWithSourceElementes(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]])
+    connectTargetElementWithSourceElements(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]])
 
     treeZero.addOwnerSubtreeForZero(subtree)
     subtree.setTreeForZero(treeZero)
     //connect to rows
-    connectTargetElementWithSourceElementes(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]])
+    connectTargetElementWithSourceElements(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]])
 
     subtree
   }
@@ -148,7 +141,7 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment {
         assignment.setOwner(leaf)
         leaf.addAssignments(assignment)
 
-        val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("OutputPort")
+        val ttport: PlayerSync = +(cellout.getPort()) getRelatedObject ("OutputPort")
         if (ttport != null) {
           val o_port = ttport.asInstanceOf[sync.bddg.OutputPort]
           o_port.addAssignments(assignment)
@@ -162,14 +155,14 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment {
       val cellList = rows.map(_.getCells().filter(_.getPort().getName() == a.getPort().getName()).head)
 
       //connect them
-      connectTargetElementWithSourceElementes(a, cellList.asInstanceOf[Set[PlayerSync]])
+      connectTargetElementWithSourceElements(a, cellList.asInstanceOf[Set[PlayerSync]])
     })
     leaf
   }
 
-  class OutputPortConstruct() extends IIntegrator {
+  class OutputPortConstruct() extends ITransformationRole {
 
-    def integrate(comp: PlayerSync): PlayerSync = {
+    def transform(comp: PlayerSync): PlayerSync = {
       //Step 1: Get construction values
       val name: String = +this getName ()
 
@@ -177,15 +170,15 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment {
       val o_port = new sync.bddg.OutputPort(Set.empty, name, null)
 
       //Step 3: Make Connection
-      connectTargetElementWithSourceElemente(o_port, comp)
+      connectTargetElementWithSourceElement(o_port, comp)
 
       o_port
     }
   }
 
-  class InputPortConstruct() extends IIntegrator {
+  class InputPortConstruct() extends ITransformationRole {
 
-    def integrate(comp: PlayerSync): PlayerSync = {
+    def transform(comp: PlayerSync): PlayerSync = {
       //Step 1: Get construction values
       val name: String = +this getName ()
 
@@ -193,15 +186,15 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment {
       val i_port = new sync.bddg.InputPort(Set.empty, name, null)
 
       //Step 3: Make Connection
-      connectTargetElementWithSourceElemente(i_port, comp)
+      connectTargetElementWithSourceElement(i_port, comp)
 
       i_port
     }
   }
 
-  class TruthTableConstruct() extends IIntegrator {
+  class TruthTableConstruct() extends ITransformationRole {
 
-    def integrate(comp: PlayerSync): PlayerSync = {
+    def transform(comp: PlayerSync): PlayerSync = {
       //Step 1: Get construction values
       val name: String = +this getName ()
       val ports: Set[sync.tt.Port] = +this getPorts ()
@@ -210,15 +203,15 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment {
       val bdd = new sync.bddg.BDD(name, Set.empty, null, Set.empty)
 
       //Step 3: Make Connection
-      connectTargetElementWithSourceElemente(bdd, comp)
+      connectTargetElementWithSourceElement(bdd, comp)
 
       ports.foreach(p => {
-        val integrator = getNextIntegratorForClassName(p)
-        val manager: IRoleManager = +p getManager ()
+        val subRule = getSubTransformation(p)
+        val manager: ISyncManagerRole = +p getManager ()
         if (manager != null) {
-          manager play integrator
-          val obj = integrator.integrate(p).asInstanceOf[sync.bddg.Port]
-          integrator.remove()
+          manager play subRule
+          val obj = subRule.transform(p).asInstanceOf[sync.bddg.Port]
+          subRule.remove()
           obj.setOwner(bdd)
           bdd.addPorts(obj)
         }
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/BdtAndBddSyncIntegration.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/BdtAndBddSyncIntegration.scala
deleted file mode 100644
index a49943b099eabc7925b8fc37961cfa31b594dfad..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/BdtAndBddSyncIntegration.scala
+++ /dev/null
@@ -1,262 +0,0 @@
-package ttc2019.worksync
-
-import org.rosi_project.model_management.core.PlayerSync
-import org.rosi_project.model_management.core.SynchronizationCompartment
-import org.rosi_project.model_management.sync.IIntegrationCompartment
-import org.rosi_project.model_management.sync.roles.IIntegrator
-import org.rosi_project.model_management.sync.roles.IRoleManager
-
-import org.rosi_project.model_management.sync.helper.IntegrationContainer
-import scala.collection.mutable.ListBuffer
-import org.rosi_project.model_management.core.ModelElementLists
-
-object BdtAndBddSyncIntegration extends IIntegrationCompartment {
-
-  //private var createdObjects: Set[PlayerSync] = Set.empty
-  private var leafNodes: Map[Set[String], sync.bddg.Leaf] = Map.empty
-  private var createdBdds: Set[sync.bddg.BDD] = Set.empty
-  private var createdBdts: Set[sync.bdd.BDD] = Set.empty
-
-  def printManager(): Unit = {
-    ModelElementLists.getElementsFromType("sync.bddg.Leaf").asInstanceOf[List[sync.bddg.Leaf]].foreach(obj => {
-      +obj printAllManager ()
-    })
-    ModelElementLists.getElementsFromType("sync.bdd.Leaf").asInstanceOf[List[sync.bdd.Leaf]].foreach(obj => {
-      +obj printAllManager ()
-    })
-  }
-
-  def getRelationalIntegratorsForClassName(classname: Object): IIntegrator = {
-    return null
-  }
-
-  def getIntegratorForClassName(classname: Object): IIntegrator = {
-    if (classname.isInstanceOf[sync.tt.TruthTable])
-      return new TruthTableConstruct()
-    return null
-  }
-
-  def getNextIntegratorForClassName(classname: Object): IIntegrator = {
-    if (classname.isInstanceOf[sync.tt.OutputPort])
-      return new OutputPortConstruct()
-    if (classname.isInstanceOf[sync.tt.InputPort])
-      return new InputPortConstruct()
-    return null
-  }
-
-  def finalEditFunction(): Unit = {
-    var ttNode: sync.tt.TruthTable = null
-    
-    createdBdds.foreach(bddNode => {
-      val oppBDD: PlayerSync = +bddNode getRelatedClassFromName ("TruthTable")
-      if (oppBDD != null) {
-        ttNode = oppBDD.asInstanceOf[sync.tt.TruthTable]
-      }
-      val rows = ttNode.getRows()
-
-      val tree = createOutputLookSubtree(bddNode, ttNode, rows, Set.empty)
-      bddNode.setRoot(tree)
-      connectTargetElementWithSourceElementes(tree, rows.asInstanceOf[Set[PlayerSync]])
-    })
-
-    //printManager()
-  }
-
-  def createOutputLookSubtree(bdd: sync.bddg.BDD, truthTable: sync.tt.TruthTable, rows: Set[sync.tt.Row], finishPorts: Set[sync.tt.Port]): sync.bddg.Tree = {
-    var numberTrue = -1
-    var numberFalse = -1
-    var max = 0
-    var portTT: sync.tt.Port = null
-    var cellis: Set[sync.tt.Cell] = Set.empty
-
-    //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
-        newCells.foreach(cell => {
-          if (cell.getValue()) {
-            var setPortValue: Set[String] = Set.empty
-            cell.getOwner().getCells().filter(_.getPort().isInstanceOf[sync.tt.OutputPort]).foreach(ocell => {
-              setPortValue += s"${ocell.getPort().getName()} ${ocell.getValue()}"
-            })
-            setTrue += setPortValue
-          } else {
-            var setPortValue: Set[String] = Set.empty
-            cell.getOwner().getCells().filter(_.getPort().isInstanceOf[sync.tt.OutputPort]).foreach(ocell => {
-              setPortValue += s"${ocell.getPort().getName()} ${ocell.getValue()}"
-            })
-            setFalse += setPortValue
-          }
-        })
-        val p1 = setTrue.size
-        val p2 = setFalse.size
-        if (p1 + p2 < numberFalse + numberTrue && p1 > 0 && p2 > 0 || numberTrue < 0) {
-          numberTrue = p1
-          numberFalse = p2
-          cellis = newCells
-          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) {
-      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 (numberFalse == 1) {
-      //create leaf from rows
-      treeZero = createLeafFromRows(bdd, rowsZero)
-    } else {
-      //create new subtree from rows
-      treeZero = createOutputLookSubtree(bdd, truthTable, rowsZero, newPorts)
-    }
-    if (numberTrue == 1) {
-      //create leaf from rows
-      treeOne = createLeafFromRows(bdd, rowsOne)
-    } else {
-      //create new subtree from rows
-      treeOne = createOutputLookSubtree(bdd, truthTable, rowsOne, newPorts)
-    }
-
-    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()}")
-
-    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)
-
-      rows.head.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 cellList = rows.map(_.getCells().filter(_.getPort().getName() == a.getPort().getName()).head)
-
-      //connect them
-      connectTargetElementWithSourceElementes(a, cellList.asInstanceOf[Set[PlayerSync]])
-    })
-    leaf
-  }
-
-  class OutputPortConstruct() extends IIntegrator {
-
-    def integrate(comp: PlayerSync): PlayerSync = {
-      //Step 1: Get construction values
-      val name: String = +this getName ()
-
-      //Step 2: Create the object in the other models
-      val oD_port = new sync.bddg.OutputPort(Set.empty, name, null)
-      val oT_port = new sync.bdd.OutputPort(Set.empty, name, null)
-
-      //Step 3: Make Connection
-      connectTargetElementWithSourceElemente(oD_port, comp)
-      connectTargetElementWithSourceElemente(oT_port, comp)
-      connectTargetElementWithSourceElemente(oD_port, oT_port)
-
-      oD_port
-    }
-  }
-
-  class InputPortConstruct() extends IIntegrator {
-
-    def integrate(comp: PlayerSync): PlayerSync = {
-      //Step 1: Get construction values
-      val name: String = +this getName ()
-
-      //Step 2: Create the object in the other models
-      val iD_port = new sync.bddg.InputPort(Set.empty, name, null)
-      val iT_port = new sync.bdd.InputPort(Set.empty, name, null)
-
-      //Step 3: Make Connection
-      connectTargetElementWithSourceElemente(iD_port, comp)
-      connectTargetElementWithSourceElemente(iT_port, comp)
-      connectTargetElementWithSourceElemente(iD_port, iT_port)
-
-      iD_port
-    }
-  }
-
-  class TruthTableConstruct() extends IIntegrator {
-
-    def integrate(comp: PlayerSync): PlayerSync = {
-      //Step 1: Get construction values
-      val name: String = +this getName ()
-      val ports: Set[sync.tt.Port] = +this getPorts ()
-
-      //Step 2: Create the object in the other models
-      val bdd = new sync.bddg.BDD(name, Set.empty, null, Set.empty)
-      val bdt = new sync.bdd.BDD(name, null, Set.empty)
-
-      //Step 3: Make Connection
-      connectTargetElementWithSourceElemente(bdt, comp)
-      connectTargetElementWithSourceElemente(bdd, comp)
-      connectTargetElementWithSourceElemente(bdd, bdt)
-
-      ports.foreach(p => {
-        val integrator = getNextIntegratorForClassName(p)
-        val manager: IRoleManager = +p getManager ()
-        if (manager != null) {
-          manager play integrator
-          val obj = integrator.integrate(p).asInstanceOf[sync.bddg.Port]
-          integrator.remove()
-          obj.setOwner(bdd)
-          bdd.addPorts(obj)
-        }
-      })
-
-      createdBdds += bdd
-
-      bdd
-    }
-  }
-
-}
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/BdtSyncIntegration.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/BdtTransformation.scala
similarity index 72%
rename from solutions/RSync/src/main/scala/ttc2019/worksync/BdtSyncIntegration.scala
rename to solutions/RSync/src/main/scala/ttc2019/worksync/BdtTransformation.scala
index 1f7ad2b6c5e289c8cb236cb39d6151be9e103f0a..44f86c5bcb6567ff5acd2a8e04e2051e48a420e8 100644
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/BdtSyncIntegration.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/BdtTransformation.scala
@@ -1,30 +1,21 @@
 package ttc2019.worksync
 
 import org.rosi_project.model_management.core.PlayerSync
-import org.rosi_project.model_management.core.SynchronizationCompartment
-import org.rosi_project.model_management.sync.IIntegrationCompartment
-import org.rosi_project.model_management.sync.roles.IIntegrator
-import org.rosi_project.model_management.sync.roles.IRoleManager
+import org.rosi_project.model_management.sync.ITransformationCompartment
+import org.rosi_project.model_management.sync.roles.ITransformationRole
+import org.rosi_project.model_management.sync.roles.ISyncManagerRole
 
-import org.rosi_project.model_management.sync.helper.IntegrationContainer
-import scala.collection.mutable.ListBuffer
-import org.rosi_project.model_management.core.ModelElementLists
-
-object BdtSyncIntegration extends IIntegrationCompartment {
+object BdtTransformation extends ITransformationCompartment {
 
   private var createdBdds: Set[sync.bdd.BDD] = Set.empty
 
-  def getRelationalIntegratorsForClassName(classname: Object): IIntegrator = {
-    return null
-  }
-
-  def getIntegratorForClassName(classname: Object): IIntegrator = {
+  def getTransformation(classname: Object): ITransformationRole = {
     if (classname.isInstanceOf[sync.tt.TruthTable])
       return new TruthTableConstruct()
     return null
   }
 
-  def getNextIntegratorForClassName(classname: Object): IIntegrator = {
+  override def getSubTransformation(classname: Object): ITransformationRole = {
     if (classname.isInstanceOf[sync.tt.OutputPort])
       return new OutputPortConstruct()
     if (classname.isInstanceOf[sync.tt.InputPort])
@@ -32,11 +23,11 @@ object BdtSyncIntegration extends IIntegrationCompartment {
     return null
   }
 
-  def finalEditFunction(): Unit = {
+  def finishFunction(): Unit = {
     var ttNode: sync.tt.TruthTable = null
 
     createdBdds.foreach(bddNode => {
-      val oppBDD: PlayerSync = +bddNode getRelatedClassFromName ("TruthTable")
+      val oppBDD: PlayerSync = +bddNode getRelatedObject ("TruthTable")
       if (oppBDD != null) {
         ttNode = oppBDD.asInstanceOf[sync.tt.TruthTable]
       }
@@ -45,7 +36,7 @@ object BdtSyncIntegration extends IIntegrationCompartment {
       val tree = createOutputLookSubtree(bddNode, ttNode, rows, Set.empty)
       tree.setOwnerBDD(bddNode)
       bddNode.setTree(tree)
-      connectTargetElementWithSourceElementes(tree, rows.asInstanceOf[Set[PlayerSync]])
+      connectTargetElementWithSourceElements(tree, rows.asInstanceOf[Set[PlayerSync]])
     })
   }
 
@@ -90,8 +81,9 @@ object BdtSyncIntegration extends IIntegrationCompartment {
       }
     })
 
+    //println("Used Port: " + portTT)
     var portBDD: sync.bdd.InputPort = null
-    val oppo: PlayerSync = +portTT getRelatedClassFromName ("InputPort")
+    val oppo: PlayerSync = +portTT getRelatedObject ("InputPort")
     if (oppo != null) {
       portBDD = oppo.asInstanceOf[sync.bdd.InputPort]
     }
@@ -123,12 +115,12 @@ object BdtSyncIntegration extends IIntegrationCompartment {
     treeOne.setOwnerSubtreeForOne(subtree)
     subtree.setTreeForOne(treeOne)
     //connect to rows
-    connectTargetElementWithSourceElementes(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]])
+    connectTargetElementWithSourceElements(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]])
 
     treeZero.setOwnerSubtreeForZero(subtree)
     subtree.setTreeForZero(treeZero)
     //connect to rows
-    connectTargetElementWithSourceElementes(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]])
+    connectTargetElementWithSourceElements(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]])
 
     subtree
   }
@@ -144,7 +136,7 @@ object BdtSyncIntegration extends IIntegrationCompartment {
       assignment.setOwner(leaf)
       leaf.addAssignments(assignment)
 
-      val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("OutputPort")
+      val ttport: PlayerSync = +(cellout.getPort()) getRelatedObject ("OutputPort")
       if (ttport != null) {
         val o_port = ttport.asInstanceOf[sync.bdd.OutputPort]
         o_port.addAssignments(assignment)
@@ -152,14 +144,14 @@ object BdtSyncIntegration extends IIntegrationCompartment {
       }
 
       //connect them
-      connectTargetElementWithSourceElementes(assignment, cellList.asInstanceOf[Set[PlayerSync]])
+      connectTargetElementWithSourceElements(assignment, cellList.asInstanceOf[Set[PlayerSync]])
     })
     leaf
   }
 
-  class OutputPortConstruct() extends IIntegrator {
+  class OutputPortConstruct() extends ITransformationRole {
 
-    def integrate(comp: PlayerSync): PlayerSync = {
+    def transform(comp: PlayerSync): PlayerSync = {
       //Step 1: Get construction values
       val name: String = +this getName ()
 
@@ -167,15 +159,15 @@ object BdtSyncIntegration extends IIntegrationCompartment {
       val o_port = new sync.bdd.OutputPort(Set.empty, name, null)
 
       //Step 3: Make Connection
-      connectTargetElementWithSourceElemente(o_port, comp)
+      connectTargetElementWithSourceElement(o_port, comp)
 
       o_port
     }
   }
 
-  class InputPortConstruct() extends IIntegrator {
+  class InputPortConstruct() extends ITransformationRole {
 
-    def integrate(comp: PlayerSync): PlayerSync = {
+    def transform(comp: PlayerSync): PlayerSync = {
       //Step 1: Get construction values
       val name: String = +this getName ()
 
@@ -183,15 +175,15 @@ object BdtSyncIntegration extends IIntegrationCompartment {
       val i_port = new sync.bdd.InputPort(Set.empty, name, null)
 
       //Step 3: Make Connection
-      connectTargetElementWithSourceElemente(i_port, comp)
+      connectTargetElementWithSourceElement(i_port, comp)
 
       i_port
     }
   }
 
-  class TruthTableConstruct() extends IIntegrator {
+  class TruthTableConstruct() extends ITransformationRole {
 
-    def integrate(comp: PlayerSync): PlayerSync = {
+    def transform(comp: PlayerSync): PlayerSync = {
       //Step 1: Get construction values
       val name: String = +this getName ()
       val ports: Set[sync.tt.Port] = +this getPorts ()
@@ -200,15 +192,15 @@ object BdtSyncIntegration extends IIntegrationCompartment {
       val bdt = new sync.bdd.BDD(name, null, Set.empty)
 
       //Step 3: Make Connection
-      connectTargetElementWithSourceElemente(bdt, comp)
+      connectTargetElementWithSourceElement(bdt, comp)
 
       ports.foreach(p => {
-        val integrator = getNextIntegratorForClassName(p)
-        val manager: IRoleManager = +p getManager ()
+        val subRule = getSubTransformation(p)
+        val manager: ISyncManagerRole = +p getManager ()
         if (manager != null) {
-          manager play integrator
-          val obj = integrator.integrate(p).asInstanceOf[sync.bdd.Port]
-          integrator.remove()
+          manager play subRule
+          val obj = subRule.transform(p).asInstanceOf[sync.bdd.Port]
+          subRule.remove()
           obj.setOwner(bdt)
           bdt.addPorts(obj)
         }
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/BdtSyncIntegrationWithoutOrder.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/BdtTransformationPortOrder.scala
similarity index 71%
rename from solutions/RSync/src/main/scala/ttc2019/worksync/BdtSyncIntegrationWithoutOrder.scala
rename to solutions/RSync/src/main/scala/ttc2019/worksync/BdtTransformationPortOrder.scala
index a9558ddbf10f8bca3061aadb021b2f716c21d1d3..a1a4535ca956cff960b50d17c34412e8a1623827 100644
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/BdtSyncIntegrationWithoutOrder.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/BdtTransformationPortOrder.scala
@@ -1,31 +1,23 @@
 package ttc2019.worksync
 
 import org.rosi_project.model_management.core.PlayerSync
-import org.rosi_project.model_management.core.SynchronizationCompartment
-import org.rosi_project.model_management.sync.IIntegrationCompartment
-import org.rosi_project.model_management.sync.roles.IIntegrator
-import org.rosi_project.model_management.sync.roles.IRoleManager
-
-import org.rosi_project.model_management.sync.helper.IntegrationContainer
-import scala.collection.mutable.ListBuffer
-import org.rosi_project.model_management.core.ModelElementLists
+import org.rosi_project.model_management.sync.ITransformationCompartment
+import org.rosi_project.model_management.sync.roles.ITransformationRole
+import org.rosi_project.model_management.sync.roles.ISyncManagerRole
+
 import util.control.Breaks._
 
-object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment {
+object BdtTransformationPortOrder extends ITransformationCompartment {
 
   private var createdBdds: Set[sync.bdd.BDD] = Set.empty
 
-  def getRelationalIntegratorsForClassName(classname: Object): IIntegrator = {
-    return null
-  }
-
-  def getIntegratorForClassName(classname: Object): IIntegrator = {
+  def getTransformation(classname: Object): ITransformationRole = {
     if (classname.isInstanceOf[sync.tt.TruthTable])
       return new TruthTableConstruct()
     return null
   }
 
-  def getNextIntegratorForClassName(classname: Object): IIntegrator = {
+  override def getSubTransformation(classname: Object): ITransformationRole = {
     if (classname.isInstanceOf[sync.tt.OutputPort])
       return new OutputPortConstruct()
     if (classname.isInstanceOf[sync.tt.InputPort])
@@ -33,11 +25,11 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment {
     return null
   }
 
-  def finalEditFunction(): Unit = {
+  def finishFunction(): Unit = {    
     var ttNode: sync.tt.TruthTable = null
 
     createdBdds.foreach(bddNode => {
-      val oppBDD: PlayerSync = +bddNode getRelatedClassFromName ("TruthTable")
+      val oppBDD: PlayerSync = +bddNode getRelatedObject ("TruthTable")
       if (oppBDD != null) {
         ttNode = oppBDD.asInstanceOf[sync.tt.TruthTable]
       }
@@ -46,7 +38,7 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment {
       val tree = createOutputLookSubtree(bddNode, ttNode, rows, Set.empty)
       tree.setOwnerBDD(bddNode)
       bddNode.setTree(tree)
-      connectTargetElementWithSourceElementes(tree, rows.asInstanceOf[Set[PlayerSync]])
+      connectTargetElementWithSourceElements(tree, rows.asInstanceOf[Set[PlayerSync]])
     })
   }
 
@@ -85,7 +77,7 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment {
     }
 
     var portBDD: sync.bdd.InputPort = null
-    val oppo: PlayerSync = +portTT getRelatedClassFromName ("InputPort")
+    val oppo: PlayerSync = +portTT getRelatedObject ("InputPort")
     if (oppo != null) {
       portBDD = oppo.asInstanceOf[sync.bdd.InputPort]
     }
@@ -96,6 +88,7 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment {
 
     val rowsOne = cellis.filter(_.getValue()).map(_.getOwner())
     val rowsZero = cellis.filter(!_.getValue()).map(_.getOwner())
+    //println("Rows (1) " + rowsOne.size + " (2) " + rowsZero.size)
 
     var treeZero: sync.bdd.Tree = null
     var treeOne: sync.bdd.Tree = null
@@ -117,12 +110,12 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment {
     treeOne.setOwnerSubtreeForOne(subtree)
     subtree.setTreeForOne(treeOne)
     //connect to rows
-    connectTargetElementWithSourceElementes(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]])
+    connectTargetElementWithSourceElements(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]])
 
     treeZero.setOwnerSubtreeForZero(subtree)
     subtree.setTreeForZero(treeZero)
     //connect to rows
-    connectTargetElementWithSourceElementes(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]])
+    connectTargetElementWithSourceElements(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]])
 
     subtree
   }
@@ -138,7 +131,7 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment {
       assignment.setOwner(leaf)
       leaf.addAssignments(assignment)
 
-      val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("OutputPort")
+      val ttport: PlayerSync = +(cellout.getPort()) getRelatedObject ("OutputPort")
       if (ttport != null) {
         val o_port = ttport.asInstanceOf[sync.bdd.OutputPort]
         o_port.addAssignments(assignment)
@@ -146,14 +139,14 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment {
       }
 
       //connect them
-      connectTargetElementWithSourceElementes(assignment, cellList.asInstanceOf[Set[PlayerSync]])
+      connectTargetElementWithSourceElements(assignment, cellList.asInstanceOf[Set[PlayerSync]])
     })
     leaf
   }
 
-  class OutputPortConstruct() extends IIntegrator {
+  class OutputPortConstruct() extends ITransformationRole {
 
-    def integrate(comp: PlayerSync): PlayerSync = {
+    def transform(comp: PlayerSync): PlayerSync = {
       //Step 1: Get construction values
       val name: String = +this getName ()
 
@@ -161,15 +154,15 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment {
       val o_port = new sync.bdd.OutputPort(Set.empty, name, null)
 
       //Step 3: Make Connection
-      connectTargetElementWithSourceElemente(o_port, comp)
+      connectTargetElementWithSourceElement(o_port, comp)
 
       o_port
     }
   }
 
-  class InputPortConstruct() extends IIntegrator {
+  class InputPortConstruct() extends ITransformationRole {
 
-    def integrate(comp: PlayerSync): PlayerSync = {
+    def transform(comp: PlayerSync): PlayerSync = {
       //Step 1: Get construction values
       val name: String = +this getName ()
 
@@ -177,15 +170,15 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment {
       val i_port = new sync.bdd.InputPort(Set.empty, name, null)
 
       //Step 3: Make Connection
-      connectTargetElementWithSourceElemente(i_port, comp)
+      connectTargetElementWithSourceElement(i_port, comp)
 
       i_port
     }
   }
 
-  class TruthTableConstruct() extends IIntegrator {
+  class TruthTableConstruct() extends ITransformationRole {
 
-    def integrate(comp: PlayerSync): PlayerSync = {
+    def transform(comp: PlayerSync): PlayerSync = {      
       //Step 1: Get construction values
       val name: String = +this getName ()
       val ports: Set[sync.tt.Port] = +this getPorts ()
@@ -194,15 +187,15 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment {
       val bdt = new sync.bdd.BDD(name, null, Set.empty)
 
       //Step 3: Make Connection
-      connectTargetElementWithSourceElemente(bdt, comp)
+      connectTargetElementWithSourceElement(bdt, comp)
 
       ports.foreach(p => {
-        val integrator = getNextIntegratorForClassName(p)
-        val manager: IRoleManager = +p getManager ()
+        val subRule = getSubTransformation(p)
+        val manager: ISyncManagerRole = +p getManager ()
         if (manager != null) {
-          manager play integrator
-          val obj = integrator.integrate(p).asInstanceOf[sync.bdd.Port]
-          integrator.remove()
+          manager play subRule
+          val obj = subRule.transform(p).asInstanceOf[sync.bdd.Port]
+          subRule.remove()
           obj.setOwner(bdt)
           bdt.addPorts(obj)
         }
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesCellSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncCellModifications.scala
similarity index 73%
rename from solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesCellSync.scala
rename to solutions/RSync/src/main/scala/ttc2019/worksync/SyncCellModifications.scala
index 77fe3c75ee40a2b4f7f95a74b6380125f1bdaa50..d7d32ee41e7e39380edacd7cf2ae5dd92c9c57ae 100644
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesCellSync.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncCellModifications.scala
@@ -1,12 +1,12 @@
 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.sync.IModificationCompartment
+import org.rosi_project.model_management.sync.roles.IModificationRole
 import org.rosi_project.model_management.core.PlayerSync
 
-class SyncChangesCellSync() extends ISyncCompartment {
+class SyncCellModifications() extends IModificationCompartment {
 
-  def getFirstRole(classname: Object): ISyncRole = {
+  def getFirstRole(classname: Object): IModificationRole = {
     if (classname.isInstanceOf[sync.tt.Cell])
       return new Sync()
     return null
@@ -18,13 +18,11 @@ class SyncChangesCellSync() extends ISyncCompartment {
     return false
   }
 
-  def getNewInstance(): ISyncCompartment = new SyncChangesCellSync
+  def getNewInstance(): IModificationCompartment = new SyncCellModifications
 
-  def getRuleName(): String = "SyncChangesCellSync"
+  class Sync() extends IModificationRole {
 
-  class Sync() extends ISyncRole {
-
-    def getOuterCompartment(): ISyncCompartment = SyncChangesCellSync.this
+    def getOuterCompartment(): IModificationCompartment = SyncCellModifications.this
 
     /**
      * Rule which add ports to its root in each model.
@@ -37,8 +35,8 @@ class SyncChangesCellSync() extends ISyncCompartment {
         //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")
+        val opTreePort: PlayerSync = +port getRelatedObject ("sync.bdd.Port")
+        //val opDiaPort: PlayerSync = +port getRelatedObject ("sync.bddg.Port")
         //create assignments
         if (opTreePort != null) {
           val o_port = opTreePort.asInstanceOf[sync.bdd.OutputPort]
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncInputPortNamesSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncInputPortNamesSync.scala
deleted file mode 100644
index ccc04f1246117c9fd0e11f9d082fd5658334fad8..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncInputPortNamesSync.scala
+++ /dev/null
@@ -1,57 +0,0 @@
-package ttc2019.worksync
-
-import org.rosi_project.model_management.sync.ISyncCompartment
-import org.rosi_project.model_management.sync.roles.ISyncRole
-
-/**
-  * Synchronization compartment for input port names.
-  */
-class SyncInputPortNamesSync() extends ISyncCompartment {
-
-  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.tt.InputPort])
-      return new Sync()
-    return null
-  }
-
-  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.tt.InputPort])
-      return true
-    return false
-  }
-
-  def getNewInstance(): ISyncCompartment = new SyncInputPortNamesSync
-
-  def getRuleName(): String = "SyncInputPortNamesSync"
-
-  class Sync() extends ISyncRole {
-
-    def getOuterCompartment(): ISyncCompartment = SyncInputPortNamesSync.this
-
-    def syncSetName(): 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/SyncNames.scala
similarity index 67%
rename from solutions/RSync/src/main/scala/ttc2019/worksync/SyncHeadNamesSync.scala
rename to solutions/RSync/src/main/scala/ttc2019/worksync/SyncNames.scala
index a6812e97f8981efc8b86f4becad349c94b41456c..cb32fc30d8ab193a5d8e79645ba6849a8c49f228 100644
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncHeadNamesSync.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncNames.scala
@@ -1,20 +1,20 @@
 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.sync.IModificationCompartment
+import org.rosi_project.model_management.sync.roles.IModificationRole
 
 /**
   * Synchronization compartment for full name split with space.
   */
-class SyncHeadNamesSync() extends ISyncCompartment {
+class SyncNames() extends IModificationCompartment {
 
-  override def getNextRole(classname: Object): ISyncRole = {
+  override def getNextRole(classname: Object): IModificationRole = {
     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 = {
+  def getFirstRole(classname: Object): IModificationRole = {
     if (classname.isInstanceOf[sync.tt.TruthTable])
       return new Sync()
     return null
@@ -32,13 +32,11 @@ class SyncHeadNamesSync() extends ISyncCompartment {
     return false
   }
 
-  def getNewInstance(): ISyncCompartment = new SyncHeadNamesSync
+  def getNewInstance(): IModificationCompartment = new SyncNames
 
-  def getRuleName(): String = "SyncHeadNamesSync"
+  class Sync() extends IModificationRole {
 
-  class Sync() extends ISyncRole {
-
-    def getOuterCompartment(): ISyncCompartment = SyncHeadNamesSync.this
+    def getOuterCompartment(): IModificationCompartment = SyncNames.this
 
     def syncSetName(): Unit = {
       if (!doSync) {
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncOutputPortNamesSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncOutputPortNamesSync.scala
deleted file mode 100644
index 2723c6dfb17f0136c4bd331e3d0163453df6281e..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncOutputPortNamesSync.scala
+++ /dev/null
@@ -1,57 +0,0 @@
-package ttc2019.worksync
-
-import org.rosi_project.model_management.sync.ISyncCompartment
-import org.rosi_project.model_management.sync.roles.ISyncRole
-
-/**
-  * Synchronization compartment for output port names.
-  */
-class SyncOutputPortNamesSync() extends ISyncCompartment {
-
-  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.tt.OutputPort])
-      return new Sync()
-    return null
-  }
-
-  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.tt.OutputPort])
-      return true
-    return false
-  }
-
-  def getNewInstance(): ISyncCompartment = new SyncOutputPortNamesSync
-
-  def getRuleName(): String = "SyncOutputPortNamesSync"
-
-  class Sync() extends ISyncRole {
-
-    def getOuterCompartment(): ISyncCompartment = SyncOutputPortNamesSync.this
-
-    def syncSetName(): 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/SyncPortNamesSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncPortNames.scala
similarity index 66%
rename from solutions/RSync/src/main/scala/ttc2019/worksync/SyncPortNamesSync.scala
rename to solutions/RSync/src/main/scala/ttc2019/worksync/SyncPortNames.scala
index 6599721c8a81f1433851d9f45df6f4634f7ddae5..32e81ccc5aa891d8499ee2554caa987554388dc9 100644
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncPortNamesSync.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncPortNames.scala
@@ -1,20 +1,20 @@
 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.sync.IModificationCompartment
+import org.rosi_project.model_management.sync.roles.IModificationRole
 
 /**
   * Synchronization compartment for port names.
   */
-class SyncPortNamesSync extends ISyncCompartment {
+class SyncPortNames extends IModificationCompartment {
 
-  override def getNextRole(classname: Object): ISyncRole = {
+  override def getNextRole(classname: Object): IModificationRole = {
     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 = {
+  def getFirstRole(classname: Object): IModificationRole = {
     if (classname.isInstanceOf[sync.tt.Port])
       return new Sync()
     return null
@@ -32,13 +32,11 @@ class SyncPortNamesSync extends ISyncCompartment {
     return false
   }
 
-  def getNewInstance(): ISyncCompartment = new SyncPortNamesSync
+  def getNewInstance(): IModificationCompartment = new SyncPortNames
 
-  def getRuleName(): String = "SyncPortNamesSync"
+  class Sync() extends IModificationRole {
 
-  class Sync() extends ISyncRole {
-
-    def getOuterCompartment(): ISyncCompartment = SyncPortNamesSync.this
+    def getOuterCompartment(): IModificationCompartment = SyncPortNames.this
 
     def syncSetName(): Unit = {
       if (!doSync) {
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesTruthTableSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncTruthTableModifications.scala
similarity index 89%
rename from solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesTruthTableSync.scala
rename to solutions/RSync/src/main/scala/ttc2019/worksync/SyncTruthTableModifications.scala
index 896c7cc47fc6f80454660db82476b6ea5a345993..78f6081d68a48c4414026dbabf901f3b3abdb627 100644
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesTruthTableSync.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncTruthTableModifications.scala
@@ -1,18 +1,18 @@
 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.sync.IModificationCompartment
+import org.rosi_project.model_management.sync.roles.IModificationRole
 import org.rosi_project.model_management.core.PlayerSync
-import org.rosi_project.model_management.sync.roles.IRoleManager
+import org.rosi_project.model_management.sync.roles.ISyncManagerRole
 
 /**
  * Synchronization compartment between truth table and BDD to react on changing (adding or removing) a row.
  */
-class SyncChangesTruthTableSync() extends ISyncCompartment {
+class SyncTruthTableModifications() extends IModificationCompartment {
 
   private var leafNodes: Map[Set[String], sync.bddg.Leaf] = Map.empty
 
-  def getFirstRole(classname: Object): ISyncRole = {
+  def getFirstRole(classname: Object): IModificationRole = {
     if (classname.isInstanceOf[sync.tt.TruthTable])
       return new Sync()
     return null
@@ -24,13 +24,11 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
     return false
   }
 
-  def getNewInstance(): ISyncCompartment = new SyncChangesTruthTableSync
+  def getNewInstance(): IModificationCompartment = new SyncTruthTableModifications
 
-  def getRuleName(): String = "SyncChangesTruthTableSync"
+  class Sync() extends IModificationRole {
 
-  class Sync() extends ISyncRole {
-
-    def getOuterCompartment(): ISyncCompartment = SyncChangesTruthTableSync.this
+    def getOuterCompartment(): IModificationCompartment = SyncTruthTableModifications.this
 
     /**
      * Rule which add ports to its root in each model.
@@ -41,8 +39,8 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
         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")
+        val opTreeBDD: PlayerSync = +this getRelatedObject ("sync.bdd.BDD")
+        val opTreePort: PlayerSync = +port getRelatedObject ("sync.bdd.Port")
         if (opTreeBDD != null && opTreePort != null) {
           val reTreeBdd = opTreeBDD.asInstanceOf[sync.bdd.BDD]
           val reTreePort = opTreePort.asInstanceOf[sync.bdd.Port]
@@ -50,8 +48,8 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
           reTreePort.setOwner(reTreeBdd)
         }
 
-        val opDiaBDD: PlayerSync = +this getRelatedClassFromName ("sync.bddg.BDD")
-        val opDiaPort: PlayerSync = +port getRelatedClassFromName ("sync.bddg.Port")
+        val opDiaBDD: PlayerSync = +this getRelatedObject ("sync.bddg.BDD")
+        val opDiaPort: PlayerSync = +port getRelatedObject ("sync.bddg.Port")
         if (opDiaBDD != null && opDiaPort != null) {
           val reDiaBdd = opDiaBDD.asInstanceOf[sync.bddg.BDD]
           val reDiaPort = opDiaPort.asInstanceOf[sync.bddg.Port]
@@ -59,8 +57,8 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
           reDiaPort.setOwner(reDiaBdd)
         }
 
-        val opTtBDD: PlayerSync = +this getRelatedClassFromName ("sync.tt.TruthTable")
-        val opTtPort: PlayerSync = +port getRelatedClassFromName ("sync.tt.Port")
+        val opTtBDD: PlayerSync = +this getRelatedObject ("sync.tt.TruthTable")
+        val opTtPort: PlayerSync = +port getRelatedObject ("sync.tt.Port")
         if (opTtBDD != null && opTtPort != null) {
           val reTtBdd = opTtBDD.asInstanceOf[sync.tt.TruthTable]
           val reTtPort = opTtPort.asInstanceOf[sync.tt.Port]
@@ -80,12 +78,12 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
       //println("In Sync Remove Row")
       if (!doSync) {
         doSync = true
-        val opTreLeaf: PlayerSync = +row getRelatedClassFromName ("sync.bdd.Leaf")
-        //val opDiaLeaf: PlayerSync = +row getRelatedClassFromName ("sync.bddg.Leaf")
+        val opTreLeaf: PlayerSync = +row getRelatedObject ("sync.bdd.Leaf")
+        //val opDiaLeaf: PlayerSync = +row getRelatedObject ("sync.bddg.Leaf")
         if (opTreLeaf != null) {
           //exists connected BDT
           val reTreLeaf = opTreLeaf.asInstanceOf[sync.bdd.Leaf]
-          val relManagerLeaf: Set[IRoleManager] = +reTreLeaf getRelatedManager ()
+          val relManagerLeaf: Set[ISyncManagerRole] = +reTreLeaf getRelatedManager ()
           //do something if there is only one related manager than minimize the tree 
           if (relManagerLeaf.size == 1) {
             if (reTreLeaf.getOwnerBDD() != null) {
@@ -148,8 +146,8 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
       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")
+        val opTreeBDD: PlayerSync = +this getRelatedObject ("sync.bdd.BDD")
+        //val opDiaBDD: PlayerSync = +this getRelatedObject ("sync.bddg.BDD")
         if (opTreeBDD != null) {
           val reBdd = opTreeBDD.asInstanceOf[sync.bdd.BDD]
           addNewRowCompleteTree(reBdd, row)
@@ -195,7 +193,7 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
 
       //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")
+        val opTreePort: PlayerSync = +(c.getPort()) getRelatedObject ("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)
@@ -238,7 +236,7 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
           assignment.setOwner(leaf)
           leaf.addAssignments(assignment)
 
-          val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("OutputPort")
+          val ttport: PlayerSync = +(cellout.getPort()) getRelatedObject ("OutputPort")
           if (ttport != null) {
             val o_port = ttport.asInstanceOf[sync.bddg.OutputPort]
             o_port.addAssignments(assignment)
@@ -302,12 +300,12 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
         if (newTree.isInstanceOf[sync.bdd.Leaf]) {
           val leaf = newTree.asInstanceOf[sync.bdd.Leaf]
           //Search connected assignement from cell
-          val oppRow: PlayerSync = +leaf getRelatedClassFromName ("sync.tt.Row")
+          val oppRow: PlayerSync = +leaf getRelatedObject ("sync.tt.Row")
           if (oppRow != null) {
             val otherRow = oppRow.asInstanceOf[sync.tt.Row]
             row.getCells().filter(c => !portList.contains(c.getPort()) && c.getPort().isInstanceOf[sync.tt.InputPort]).foreach(c => {
               otherRow.getCells().filter(cell => cell.getPort() == c.getPort() && cell.getValue() != c.getValue()).foreach(cell => {
-                val opTreePort: PlayerSync = +(c.getPort()) getRelatedClassFromName ("sync.bdd.InputPort")
+                val opTreePort: PlayerSync = +(c.getPort()) getRelatedObject ("sync.bdd.InputPort")
                 if (opTreePort != null) {
                   val inputPort = opTreePort.asInstanceOf[sync.bdd.InputPort]
                   val subtree = new sync.bdd.Subtree(null, null, inputPort, null, null, null)
@@ -346,7 +344,7 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
       } else {
         //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")
+          val opTreePort: PlayerSync = +(c.getPort()) getRelatedObject ("sync.bdd.InputPort")
           if (opTreePort != null) {
             val inputPort = opTreePort.asInstanceOf[sync.bdd.InputPort]
             val subtree = new sync.bdd.Subtree(null, null, inputPort, null, null, null)
@@ -374,7 +372,7 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
       val newLeaf = 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")
+        val oppAssign: PlayerSync = +cellout getRelatedObject ("sync.bdd.Assignment")
         if (oppAssign != null) {
           val assignment = oppAssign.asInstanceOf[sync.bdd.Assignment]
           assignment.setOwner(newLeaf)
@@ -386,7 +384,7 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
         assignment.setOwner(leaf)
         leaf.addAssignments(assignment)
 
-        val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("sync.bdd.OutputPort")
+        val ttport: PlayerSync = +(cellout.getPort()) getRelatedObject ("sync.bdd.OutputPort")
         if (ttport != null) {
           val o_port = ttport.asInstanceOf[sync.bdd.OutputPort]
           o_port.addAssignments(assignment)
@@ -432,7 +430,7 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
         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")
+          val opRowTT: PlayerSync = +this getRelatedObject ("sync.tt.Row")
           if (opRowTT != null) {
             val reRowTT = opRowTT.asInstanceOf[sync.tt.Row]
             //compare opponent row with this row
@@ -448,7 +446,7 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
                     assignment.setOwner(newLeaf)
                     newLeaf.addAssignments(assignment)
 
-                    val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("OutputPort")
+                    val ttport: PlayerSync = +(cellout.getPort()) getRelatedObject ("OutputPort")
                     if (ttport != null) {
                       val o_port = ttport.asInstanceOf[sync.bdd.OutputPort]
                       o_port.addAssignments(assignment)
@@ -459,7 +457,7 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
                     +cellout makePlayerSyncRelated (assignment)
                   })
 
-                  val bdtInputPort: PlayerSync = +(cO.getPort()) getRelatedClassFromName ("InputPort")
+                  val bdtInputPort: PlayerSync = +(cO.getPort()) getRelatedObject ("InputPort")
                   if (bdtInputPort != null) {
                     val i_port = bdtInputPort.asInstanceOf[sync.bdd.InputPort]
                     var subtree: sync.bdd.Subtree = null
@@ -490,8 +488,8 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
             })
           }
         } else {
-          val rmSubtree: IRoleManager = +oldLeaf getManager ()
-          val rmRow: IRoleManager = +row getManager ()
+          val rmSubtree: ISyncManagerRole = +oldLeaf getManager ()
+          val rmRow: ISyncManagerRole = +row getManager ()
           if (rmSubtree != null && rmRow != null) {
             rmSubtree.makeRelated(rmRow)
           }
@@ -507,8 +505,8 @@ class SyncChangesTruthTableSync() extends ISyncCompartment {
             value = c.getValue()
           }
         })
-        val rmSubtree: IRoleManager = +subtree getManager ()
-        val rmRow: IRoleManager = +row getManager ()
+        val rmSubtree: ISyncManagerRole = +subtree getManager ()
+        val rmRow: ISyncManagerRole = +row getManager ()
         if (rmSubtree != null && rmRow != null) {
           rmSubtree.makeRelated(rmRow)
         }
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/TTandBDTandBDDSyncConstruction.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/TTandBDTandBDDSyncConstruction.scala
deleted file mode 100644
index c1d40e911f6213a99337890dc2065e85cda0357a..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/scala/ttc2019/worksync/TTandBDTandBDDSyncConstruction.scala
+++ /dev/null
@@ -1,253 +0,0 @@
-package ttc2019.worksync
-
-import org.rosi_project.model_management.sync.IConstructionCompartment
-import org.rosi_project.model_management.sync.roles.IConstructor
-import org.rosi_project.model_management.core.PlayerSync
-import org.rosi_project.model_management.sync.roles.IRoleManager
-import org.rosi_project.model_management.core.SynchronizationCompartment
-
-/**
-  * Construction Process for Model  BDD and TT.
-  */
-object TTandBDTandBDDSyncConstruction extends IConstructionCompartment {
-
-  def getConstructorForClassName(classname: Object): IConstructor = {
-    if (classname.isInstanceOf[sync.tt.TruthTable])
-      return new TTTruthTableConstruct()
-    if (classname.isInstanceOf[sync.bddg.BDD])
-      return new BDDBddConstruct()
-    if (classname.isInstanceOf[sync.bdd.BDD])
-      return new BDTBddConstruct()
-    if (classname.isInstanceOf[sync.tt.InputPort])
-      return new TTInputPortConstruct()
-    if (classname.isInstanceOf[sync.bddg.InputPort])
-      return new BDDInputPortConstruct()
-    if (classname.isInstanceOf[sync.bdd.InputPort])
-      return new BDTInputPortConstruct()
-    if (classname.isInstanceOf[sync.tt.OutputPort])
-      return new TTOutputPortConstruct()
-    if (classname.isInstanceOf[sync.bddg.OutputPort])
-      return new BDDOutputPortConstruct()
-    if (classname.isInstanceOf[sync.bdd.OutputPort])
-      return new BDTOutputPortConstruct()
-    //if (classname.isInstanceOf[sync.tt.Cell])
-    //  return new CellConstruct()
-    return new Suppressor
-  }
-  
-  def getRuleName: String = "TTandBDTandBDDSyncConstruction"
-
-  class TTTruthTableConstruct() extends IConstructor {
-
-    def construct(comp: PlayerSync, man: IRoleManager): Unit = {
-      //Step 1: Get construction values
-      val name: String = +this getName()
-
-      //Step 2: Create the object in the other models
-      val dBdd = new sync.bddg.BDD(name, Set.empty, null, Set.empty)
-      val tBdd = new sync.bdd.BDD(name, null, Set.empty)
-
-      //Step 3: Create Containers 
-      createContainerElement(true, true, comp, man)
-      createContainerElement(false, true, dBdd, SynchronizationCompartment.createRoleManager())
-      createContainerElement(false, true, tBdd, SynchronizationCompartment.createRoleManager())
-
-      //Step 4: Finish Creation
-      makeCompleteConstructionProcess(containers)
-    }
-  }
-  
-  class BDDBddConstruct() extends IConstructor {
-
-    def construct(comp: PlayerSync, man: IRoleManager): Unit = {
-      //Step 1: Get construction values
-      val name: String = +this getName()
-
-      //Step 2: Create the object in the other models
-      val tt = new sync.tt.TruthTable(name, Set.empty, Set.empty, null)
-      val tBdd = new sync.bdd.BDD(name, null, Set.empty)
-
-      //Step 3: Create Containers 
-      createContainerElement(true, true, comp, man)
-      createContainerElement(false, true, tt, SynchronizationCompartment.createRoleManager())
-      createContainerElement(false, true, tBdd, SynchronizationCompartment.createRoleManager())
-
-      //Step 4: Finish Creation
-      makeCompleteConstructionProcess(containers)
-    }
-  }
-  
-  class BDTBddConstruct() extends IConstructor {
-
-    def construct(comp: PlayerSync, man: IRoleManager): Unit = {
-      //Step 1: Get construction values
-      val name: String = +this getName()
-
-      //Step 2: Create the object in the other models
-      val dBdd = new sync.bddg.BDD(name, Set.empty, null, Set.empty)
-      val tt = new sync.tt.TruthTable(name, Set.empty, Set.empty, null)
-
-      //Step 3: Create Containers 
-      createContainerElement(true, true, comp, man)
-      createContainerElement(false, true, dBdd, SynchronizationCompartment.createRoleManager())
-      createContainerElement(false, true, tt, SynchronizationCompartment.createRoleManager())
-
-      //Step 4: Finish Creation
-      makeCompleteConstructionProcess(containers)
-    }
-  }
-  
-  class TTInputPortConstruct() extends IConstructor {
-
-    def construct(comp: PlayerSync, man: IRoleManager): Unit = {
-      //Step 1: Get construction values
-      val name: String = +this getName()
-
-      //Step 2: Create the object in the other models
-      val dIn = new sync.bddg.InputPort(Set.empty, name, null)
-      val tIn = new sync.bdd.InputPort(Set.empty, name, null)
-
-      //Step 3: Create Containers 
-      createContainerElement(true, true, comp, man)
-      createContainerElement(false, true, dIn, SynchronizationCompartment.createRoleManager())
-      createContainerElement(false, true, tIn, SynchronizationCompartment.createRoleManager())
-
-      //Step 4: Finish Creation
-      makeCompleteConstructionProcess(containers)
-    }
-  }
-  
-  class BDDInputPortConstruct() extends IConstructor {
-
-    def construct(comp: PlayerSync, man: IRoleManager): Unit = {
-      //Step 1: Get construction values
-      val name: String = +this getName()
-
-      //Step 2: Create the object in the other models
-      val ttIn = new sync.tt.InputPort(name, Set.empty, null, null)
-      val tIn = new sync.bdd.InputPort(Set.empty, name, null)
-
-      //Step 3: Create Containers 
-      createContainerElement(true, true, comp, man)
-      createContainerElement(false, true, ttIn, SynchronizationCompartment.createRoleManager())
-      createContainerElement(false, true, tIn, SynchronizationCompartment.createRoleManager())
-
-      //Step 4: Finish Creation
-      makeCompleteConstructionProcess(containers)
-    }
-  }
-  
-  class BDTInputPortConstruct() extends IConstructor {
-
-    def construct(comp: PlayerSync, man: IRoleManager): Unit = {
-      //Step 1: Get construction values
-      val name: String = +this getName()
-
-      //Step 2: Create the object in the other models
-      val dIn = new sync.bddg.InputPort(Set.empty, name, null)
-      val ttIn = new sync.tt.InputPort(name, Set.empty, null, null)
-
-      //Step 3: Create Containers 
-      createContainerElement(true, true, comp, man)
-      createContainerElement(false, true, dIn, SynchronizationCompartment.createRoleManager())
-      createContainerElement(false, true, ttIn, SynchronizationCompartment.createRoleManager())
-
-      //Step 4: Finish Creation
-      makeCompleteConstructionProcess(containers)
-    }
-  }
-  
-  class TTOutputPortConstruct() extends IConstructor {
-
-    def construct(comp: PlayerSync, man: IRoleManager): Unit = {
-      //Step 1: Get construction values
-      val name: String = +this getName()
-
-      //Step 2: Create the object in the other models
-      val dOut = new sync.bddg.OutputPort(Set.empty, name, null)
-      val tOut = new sync.bdd.OutputPort(Set.empty, name, null)
-
-      //Step 3: Create Containers 
-      createContainerElement(true, true, comp, man)
-      createContainerElement(false, true, dOut, SynchronizationCompartment.createRoleManager())
-      createContainerElement(false, true, tOut, SynchronizationCompartment.createRoleManager())
-
-      //Step 4: Finish Creation
-      makeCompleteConstructionProcess(containers)
-    }
-  }
-  
-  class BDDOutputPortConstruct() extends IConstructor {
-
-    def construct(comp: PlayerSync, man: IRoleManager): Unit = {
-      //Step 1: Get construction values
-      val name: String = +this getName()
-
-      //Step 2: Create the object in the other models
-      val ttOut = new sync.tt.OutputPort(name, Set.empty, null, null)
-      val tOut = new sync.bdd.OutputPort(Set.empty, name, null)
-
-      //Step 3: Create Containers 
-      createContainerElement(true, true, comp, man)
-      createContainerElement(false, true, ttOut, SynchronizationCompartment.createRoleManager())
-      createContainerElement(false, true, tOut, SynchronizationCompartment.createRoleManager())
-
-      //Step 4: Finish Creation
-      makeCompleteConstructionProcess(containers)
-    }
-  }
-  
-  class BDTOutputPortConstruct() extends IConstructor {
-
-    def construct(comp: PlayerSync, man: IRoleManager): Unit = {
-      //Step 1: Get construction values
-      val name: String = +this getName()
-
-      //Step 2: Create the object in the other models
-      val dOut = new sync.bddg.OutputPort(Set.empty, name, null)
-      val ttOut = new sync.tt.OutputPort(name, Set.empty, null, null)
-
-      //Step 3: Create Containers 
-      createContainerElement(true, true, comp, man)
-      createContainerElement(false, true, dOut, SynchronizationCompartment.createRoleManager())
-      createContainerElement(false, true, ttOut, SynchronizationCompartment.createRoleManager())
-
-      //Step 4: Finish Creation
-      makeCompleteConstructionProcess(containers)
-    }
-  }
-  
-  /*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()
-
-      //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)
-    }
-  }
-
-}
\ No newline at end of file
diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/TtBdtBddConstruction.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/TtBdtBddConstruction.scala
new file mode 100644
index 0000000000000000000000000000000000000000..c3d0f664ab93e5432f95db882f0817f37aa2b4a9
--- /dev/null
+++ b/solutions/RSync/src/main/scala/ttc2019/worksync/TtBdtBddConstruction.scala
@@ -0,0 +1,224 @@
+package ttc2019.worksync
+
+import org.rosi_project.model_management.core.PlayerSync
+import org.rosi_project.model_management.sync.IConstructionCompartment
+import org.rosi_project.model_management.sync.roles.IConstructionRole
+import org.rosi_project.model_management.sync.roles.ISyncManagerRole
+
+/**
+  * Construction Process for Model  BDD and TT.
+  */
+object TtBdtBddConstruction extends IConstructionCompartment {
+
+  def getConstructorForClassName(classname: Object): IConstructionRole = {
+    if (classname.isInstanceOf[sync.tt.TruthTable])
+      return new TTTruthTableConstruct()
+    if (classname.isInstanceOf[sync.bddg.BDD])
+      return new BDDBddConstruct()
+    if (classname.isInstanceOf[sync.bdd.BDD])
+      return new BDTBddConstruct()
+    if (classname.isInstanceOf[sync.tt.InputPort])
+      return new TTInputPortConstruct()
+    if (classname.isInstanceOf[sync.bddg.InputPort])
+      return new BDDInputPortConstruct()
+    if (classname.isInstanceOf[sync.bdd.InputPort])
+      return new BDTInputPortConstruct()
+    if (classname.isInstanceOf[sync.tt.OutputPort])
+      return new TTOutputPortConstruct()
+    if (classname.isInstanceOf[sync.bddg.OutputPort])
+      return new BDDOutputPortConstruct()
+    if (classname.isInstanceOf[sync.bdd.OutputPort])
+      return new BDTOutputPortConstruct()
+    return new Suppressor
+  }
+
+  class TTTruthTableConstruct() extends IConstructionRole {
+
+    def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = {
+      //Step 1: Get construction values
+      val name: String = +this getName()
+
+      //Step 2: Create the object in the other models
+      val dBdd = new sync.bddg.BDD(name, Set.empty, null, Set.empty)
+      val tBdd = new sync.bdd.BDD(name, null, Set.empty)
+
+      //Step 3: Create Containers 
+      createContainerElement(true, true, comp)
+      createContainerElement(false, true, dBdd)
+      createContainerElement(false, true, tBdd)
+
+      //Step 4: Finish Creation
+      makeCompleteConstructionProcess(containers)
+    }
+  }
+  
+  class BDDBddConstruct() extends IConstructionRole {
+
+    def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = {
+      //Step 1: Get construction values
+      val name: String = +this getName()
+
+      //Step 2: Create the object in the other models
+      val tt = new sync.tt.TruthTable(name, Set.empty, Set.empty, null)
+      val tBdd = new sync.bdd.BDD(name, null, Set.empty)
+
+      //Step 3: Create Containers 
+      createContainerElement(true, true, comp)
+      createContainerElement(false, true, tt)
+      createContainerElement(false, true, tBdd)
+
+      //Step 4: Finish Creation
+      makeCompleteConstructionProcess(containers)
+    }
+  }
+  
+  class BDTBddConstruct() extends IConstructionRole {
+
+    def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = {
+      //Step 1: Get construction values
+      val name: String = +this getName()
+
+      //Step 2: Create the object in the other models
+      val dBdd = new sync.bddg.BDD(name, Set.empty, null, Set.empty)
+      val tt = new sync.tt.TruthTable(name, Set.empty, Set.empty, null)
+
+      //Step 3: Create Containers 
+      createContainerElement(true, true, comp)
+      createContainerElement(false, true, dBdd)
+      createContainerElement(false, true, tt)
+
+      //Step 4: Finish Creation
+      makeCompleteConstructionProcess(containers)
+    }
+  }
+  
+  class TTInputPortConstruct() extends IConstructionRole {
+
+    def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = {
+      //Step 1: Get construction values
+      val name: String = +this getName()
+
+      //Step 2: Create the object in the other models
+      val dIn = new sync.bddg.InputPort(Set.empty, name, null)
+      val tIn = new sync.bdd.InputPort(Set.empty, name, null)
+
+      //Step 3: Create Containers 
+      createContainerElement(true, true, comp)
+      createContainerElement(false, true, dIn)
+      createContainerElement(false, true, tIn)
+
+      //Step 4: Finish Creation
+      makeCompleteConstructionProcess(containers)
+    }
+  }
+  
+  class BDDInputPortConstruct() extends IConstructionRole {
+
+    def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = {
+      //Step 1: Get construction values
+      val name: String = +this getName()
+
+      //Step 2: Create the object in the other models
+      val ttIn = new sync.tt.InputPort(name, Set.empty, null, null)
+      val tIn = new sync.bdd.InputPort(Set.empty, name, null)
+
+      //Step 3: Create Containers 
+      createContainerElement(true, true, comp)
+      createContainerElement(false, true, ttIn)
+      createContainerElement(false, true, tIn)
+
+      //Step 4: Finish Creation
+      makeCompleteConstructionProcess(containers)
+    }
+  }
+  
+  class BDTInputPortConstruct() extends IConstructionRole {
+
+    def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = {
+      //Step 1: Get construction values
+      val name: String = +this getName()
+
+      //Step 2: Create the object in the other models
+      val dIn = new sync.bddg.InputPort(Set.empty, name, null)
+      val ttIn = new sync.tt.InputPort(name, Set.empty, null, null)
+
+      //Step 3: Create Containers 
+      createContainerElement(true, true, comp)
+      createContainerElement(false, true, dIn)
+      createContainerElement(false, true, ttIn)
+
+      //Step 4: Finish Creation
+      makeCompleteConstructionProcess(containers)
+    }
+  }
+  
+  class TTOutputPortConstruct() extends IConstructionRole {
+
+    def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = {
+      //Step 1: Get construction values
+      val name: String = +this getName()
+
+      //Step 2: Create the object in the other models
+      val dOut = new sync.bddg.OutputPort(Set.empty, name, null)
+      val tOut = new sync.bdd.OutputPort(Set.empty, name, null)
+
+      //Step 3: Create Containers 
+      createContainerElement(true, true, comp)
+      createContainerElement(false, true, dOut)
+      createContainerElement(false, true, tOut)
+
+      //Step 4: Finish Creation
+      makeCompleteConstructionProcess(containers)
+    }
+  }
+  
+  class BDDOutputPortConstruct() extends IConstructionRole {
+
+    def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = {
+      //Step 1: Get construction values
+      val name: String = +this getName()
+
+      //Step 2: Create the object in the other models
+      val ttOut = new sync.tt.OutputPort(name, Set.empty, null, null)
+      val tOut = new sync.bdd.OutputPort(Set.empty, name, null)
+
+      //Step 3: Create Containers 
+      createContainerElement(true, true, comp)
+      createContainerElement(false, true, ttOut)
+      createContainerElement(false, true, tOut)
+
+      //Step 4: Finish Creation
+      makeCompleteConstructionProcess(containers)
+    }
+  }
+  
+  class BDTOutputPortConstruct() extends IConstructionRole {
+
+    def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = {
+      //Step 1: Get construction values
+      val name: String = +this getName()
+
+      //Step 2: Create the object in the other models
+      val dOut = new sync.bddg.OutputPort(Set.empty, name, null)
+      val ttOut = new sync.tt.OutputPort(name, Set.empty, null, null)
+
+      //Step 3: Create Containers 
+      createContainerElement(true, true, comp)
+      createContainerElement(false, true, dOut)
+      createContainerElement(false, true, ttOut)
+
+      //Step 4: Finish Creation
+      makeCompleteConstructionProcess(containers)
+    }
+  }
+  
+  class Suppressor extends IConstructionRole {
+
+    override def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = {
+      // just set up the player
+      createContainerElement(start=true, con=true, comp)
+      makeCompleteConstructionProcess(containers)
+    }
+  }
+
+}
\ No newline at end of file