diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SReference.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SReference.scala
index f61cc1bf57f1c09c3ab5c7ebf09af842beb6b43b..275337162cae16c2847db9a45f4f149db661e895 100644
--- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SReference.scala
+++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SReference.scala
@@ -31,6 +31,22 @@ case class SReference(_name: String, /*val stype: STypedElement,*/ _ttype: SType
     }    
     this
   }
+  
+  def getMinimalConnection: SReference = {
+    if (lowerBound == 0 && upperBound == 1) {
+      return this
+    }
+    if (hasOpposite && oppositeRef.lowerBound == 0 && oppositeRef.upperBound == 1) {
+      return oppositeRef
+    }
+    if (lowerBound == 1 && upperBound == 1) {
+      return this
+    }
+    if (hasOpposite && oppositeRef.lowerBound == 1 && oppositeRef.upperBound == 1) {
+      return oppositeRef
+    }
+    return null
+  }
 
   override def accept(visitor: SModelVisitor): Unit = visitor.visit(this)
 
diff --git a/src/main/scala/org/rosi_project/model_sync/generator/sync/SumModelReadingVisitor.scala b/src/main/scala/org/rosi_project/model_sync/generator/sync/SumModelReadingVisitor.scala
index 7131f58ea53021ad678e219f7438b148a019ac03..18c6ae53effbad8c796e3833fea71362ee7065bd 100644
--- a/src/main/scala/org/rosi_project/model_sync/generator/sync/SumModelReadingVisitor.scala
+++ b/src/main/scala/org/rosi_project/model_sync/generator/sync/SumModelReadingVisitor.scala
@@ -61,6 +61,7 @@ class SumModelReadingVisitor(config: GeneratorConfig) extends SModelVisitor {
       result = PredefTypes.Unit,
       params = Seq(SMethodParameter("obj", PredefEcoreTypes.EcoreObject), SMethodParameter("creator", creatorInterface)),
       implementation = Seq.empty)
+    createObj.setVisibility(MethodVisibility.privateVis)
     var createObjImpl = Seq(SMethodStatement(content = s"var objName = obj.eClass.getName"),
       SMethodStatement(content = s"objName match {"))
 
@@ -69,9 +70,9 @@ class SumModelReadingVisitor(config: GeneratorConfig) extends SModelVisitor {
       result = PredefTypes.Unit,
       params = Seq(SMethodParameter("o1", PredefEcoreTypes.EcoreObject), SMethodParameter("creator", creatorInterface)),
       implementation = Seq.empty)
-    var createRefImpl = Seq(SMethodStatement(content = s"o1.eClass().getEAllReferences.forEach(sf => {"),
-      SMethodStatement(content = s"val sfName = sf.getName"),
-      SMethodStatement(content = s"val o2 = o1.eGet(sf).asInstanceOf[EObject]"),
+    createRef.setVisibility(MethodVisibility.privateVis)
+    var stringList: Set[String] = Set.empty
+    var createRefImpl = Seq(SMethodStatement(content = s"val o2 = o1.eGet(sf).asInstanceOf[EObject]"),
       SMethodStatement(content = s"val o1Name = o1.eClass().getName"),
       SMethodStatement(content = s"val o2Name = o2.eClass().getName"))
 
@@ -103,7 +104,7 @@ class SumModelReadingVisitor(config: GeneratorConfig) extends SModelVisitor {
         result = PredefTypes.Unit,
         params = c.getAttributeConstructorParameters :+ SMethodParameter("id", PredefEcoreTypes.EcoreObject),
         implementation = Seq(
-          SMethodStatement(content = s"mapping += (id -> new ${c.getName}(${c.getAllConstructorParameters.map(m => if(m.getType.isInstanceOf[GenericSequence]) "Set.empty" else if (m.getType.isInstanceOf[SClass]) "null" else m.getName).mkString(", ")}))", usedTypes = Set(c))), //TODO
+          SMethodStatement(content = s"mapping += (id -> new ${c.getName}(${c.getAllConstructorParameters.map(m => if (m.getType.isInstanceOf[GenericSequence]) "Set.empty" else if (m.getType.isInstanceOf[SClass]) "null" else m.getName).mkString(", ")}))", usedTypes = Set(c))), //TODO
         overrides = true)
       creatorSync.addMethod(methodSync)
 
@@ -145,7 +146,7 @@ class SumModelReadingVisitor(config: GeneratorConfig) extends SModelVisitor {
         params = Seq(SMethodParameter("s", PredefEcoreTypes.EcoreObject), SMethodParameter("t", PredefEcoreTypes.EcoreObject)),
         implementation = Seq.empty,
         overrides = true)
-      var implMethodSync = Seq(SMethodStatement(content = s"val s1 = mapping.get(s).get.asInstanceOf[${rc.sClass.getName}]", usedTypes = Set(rc, rc.sClass, rc.tClass)),
+      var implMethodSync = Seq(SMethodStatement(content = s"val s1 = mapping.get(s).get.asInstanceOf[${rc.sClass.getName}]", usedTypes = Set(rc.sClass, rc.tClass)),
         SMethodStatement(content = s"val t1 = mapping.get(t).get.asInstanceOf[${rc.tClass.getName}]"))
       if (rc.connectedRef.getTypeElement.isInstanceOf[GenericSequence]) {
         //add -> add method
@@ -166,17 +167,31 @@ class SumModelReadingVisitor(config: GeneratorConfig) extends SModelVisitor {
       methodSync.implementation = implMethodSync
       creatorSync.addMethod(methodSync)
 
-      createRefImpl = createRefImpl :+ SMethodStatement(content = s"""if (o1Name.contains("${rc.sClass.getName}") && sfName == "${rc.connectedRef.getName}" && o2Name.contains("${rc.tClass.getName}")) {""")
-      createRefImpl = createRefImpl :+ SMethodStatement(content = s"creator.create${rc.getName}(o1, o2)")
-      createRefImpl = createRefImpl :+ SMethodStatement(content = "}")
+      //TODO: anpassen
+      val reference = rc.connectedRef.getMinimalConnection
+      if (reference != null) {
+        if (reference == rc.connectedRef) {
+          createRefImpl = createRefImpl :+ SMethodStatement(content = s"""if (o1Name.contains("${rc.sClass.getName}") && sfName == "${reference.getName}" && o2Name.contains("${rc.tClass.getName}")) {""")
+          createRefImpl = createRefImpl :+ SMethodStatement(content = s"creator.create${rc.getName}(o1, o2)")
+          createRefImpl = createRefImpl :+ SMethodStatement(content = "}")
+        } else {
+          createRefImpl = createRefImpl :+ SMethodStatement(content = s"""if (o1Name.contains("${rc.tClass.getName}") && sfName == "${reference.getName}" && o2Name.contains("${rc.sClass.getName}")) {""")
+          createRefImpl = createRefImpl :+ SMethodStatement(content = s"creator.create${rc.getName}(o2, o1)")
+          createRefImpl = createRefImpl :+ SMethodStatement(content = "}")
+        }
+        stringList += reference.getName
+      }
     })
 
     createObjImpl = createObjImpl :+ SMethodStatement(content = "case _ =>")
     createObjImpl = createObjImpl :+ SMethodStatement(content = "}")
     createObj.implementation = createObjImpl
-    loader.addMethod(createObj)
+    loader.addMethod(createObj)    
 
-    createRefImpl = createRefImpl :+ SMethodStatement(content = "})")
+    createRefImpl = createRefImpl :+ SMethodStatement(content = "}})")
+    createRefImpl = Seq(SMethodStatement(content = s"o1.eClass().getEAllReferences.forEach(sf => {"),
+      SMethodStatement(content = s"val sfName = sf.getName"),
+      SMethodStatement(content = s"""if(${stringList.map(str => s"""sfName == "${str}" """).mkString(" || ")}) {""")) ++ createRefImpl
     createRef.implementation = createRefImpl
     loader.addMethod(createRef)
 
diff --git a/src/main/scala/org/rosi_project/model_sync/generator/test/ApplicationTest.scala b/src/main/scala/org/rosi_project/model_sync/generator/test/ApplicationTest.scala
index e9c860d7a22f5409264aed688e780ca5a8b430b7..e83db03ca0e43e14eafaa8484475e403d38634b9 100644
--- a/src/main/scala/org/rosi_project/model_sync/generator/test/ApplicationTest.scala
+++ b/src/main/scala/org/rosi_project/model_sync/generator/test/ApplicationTest.scala
@@ -13,8 +13,8 @@ object ApplicationTest extends App {
   //runTestAML(Creation.rolesum)
   
   //TTC Case examples
-  //runTTC2019(Creation.rolecomb)
-  runTTC2019(Creation.rolesync)  
+  runTTC2019(Creation.rolecomb)
+  //runTTC2019(Creation.rolesync)  
   //runTTCLive2019(Creation.rolesync)
 
   //Run all tests