diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/ComplexSModel.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/ComplexSModel.scala
index bfe109fbb0bece19534a58e3b70e2c879002f1fa..5b7bb51b584ba1e68c7b28fafe03bee83d87779d 100644
--- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/ComplexSModel.scala
+++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/ComplexSModel.scala
@@ -7,7 +7,7 @@ import org.rosi_project.model_sync.generator.support.Assert
  *
  * @author Christopher Werner
  */
-class ComplexSModel(name: String, sourceName: String) extends SModel(name, sourceName) {
+class ComplexSModel(name: String, sourceName: String, nsUri: String) extends SModel(name, sourceName, nsUri) {
 
   private var modelClasses: Set[SClass] = Set.empty
   private var providerClasses: Set[SClass] = Set.empty
diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SModel.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SModel.scala
index 398817bcbea6be355a62c799f45e488579806482..f014f0c2580c424a3e0d6de49b15dabc8a32cd19 100644
--- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SModel.scala
+++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SModel.scala
@@ -5,7 +5,10 @@ package org.rosi_project.model_sync.generator.acr_model
   *
   * @author Rico Bergmann
   */
-abstract class SModel(private val name: String, private val sourceName: String) extends SModelElement {
+abstract class SModel(private val name: String, private val sourceName: String, private val nsUri: String) extends SModelElement {
+  
+  /** Get NsURI from the model. */
+  def getNsURI: String = nsUri
   
   /** Get source name from the model. */
   def getSourceName: String = sourceName
diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SimpleSModel.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SimpleSModel.scala
index 1fd5cd6250aa83788a87390f7958e4759cfba808..d27217e72bd0ebd03b441b1d90a6e344c774f7ea 100644
--- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SimpleSModel.scala
+++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SimpleSModel.scala
@@ -6,7 +6,7 @@ import org.rosi_project.model_sync.generator.support.Assert
   *
   * @author Rico Bergmann
   */
-class SimpleSModel(name: String, sourceName: String) extends SModel(name, sourceName) {
+class SimpleSModel(name: String, sourceName: String, nsUri: String) extends SModel(name, sourceName, nsUri) {
   
   private var sClasses: Set[SClass] = Set.empty
   private var sEnums: Set[SEnum] = Set.empty
diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/types/PredefEcoreTypes.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/types/PredefEcoreTypes.scala
index 0bee4f51a323edb096c1cd01e9ce60453d92a493..34aff0138b75dc363d457eb8b449639770b01f60 100644
--- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/types/PredefEcoreTypes.scala
+++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/types/PredefEcoreTypes.scala
@@ -11,6 +11,15 @@ import org.rosi_project.model_sync.generator.acr_model.SType
   */
 object PredefEcoreTypes {
   
+  /**  `org.eclipse.emf.common.util.URI` */
+  val URI = SType("URI", "org.eclipse.emf.common.util")
+  
+  /**  `org.eclipse.emf.ecore.resource.Resource` */
+  val Resource = SType("Resource", "org.eclipse.emf.ecore.resource")
+  
+  /**  `org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl` */
+  val XMIResourceFactoryImpl = SType("XMIResourceFactoryImpl", "org.eclipse.emf.ecore.xmi.impl")
+  
   /**  `org.eclipse.emf.ecore.EObject` */
   val EcoreObject = SType("EObject", "org.eclipse.emf.ecore")
   
@@ -19,4 +28,6 @@ object PredefEcoreTypes {
   
   /**  `org.eclipse.emf.ecore.EOperation` */
   val EcoreOperation = SType("EOperation", "org.eclipse.emf.ecore")
+  
+  val ResourceSetImpl = SType("ResourceSetImpl", "org.eclipse.emf.ecore.resource.impl")
 }
\ No newline at end of file
diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/types/PredefTypes.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/types/PredefTypes.scala
index 9671ae744434661a5f2abe42971ace812318cdce..08cf1c007fe95beda2933b6fd0e1396b64abde48 100644
--- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/types/PredefTypes.scala
+++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/types/PredefTypes.scala
@@ -11,6 +11,9 @@ import org.rosi_project.model_sync.generator.acr_model.{GenericSType, SType, STy
   */
 object PredefTypes {
   
+  /** `Convert Java list to Scala listApp` */
+  val ScalaConverter = SType("_", "scala.collection.JavaConverters")
+  
   /** `App` */
   val App = SType("App")
   
diff --git a/src/main/scala/org/rosi_project/model_sync/generator/conversion/SModelGenerator.scala b/src/main/scala/org/rosi_project/model_sync/generator/conversion/SModelGenerator.scala
index 48794b5ee4d4def4d39f025e2e3fb61d06f5a4b2..b2e108e5f7f7929dcba9aadf6ea02d51c8d9c240 100644
--- a/src/main/scala/org/rosi_project/model_sync/generator/conversion/SModelGenerator.scala
+++ b/src/main/scala/org/rosi_project/model_sync/generator/conversion/SModelGenerator.scala
@@ -17,7 +17,8 @@ class SModelGenerator extends Converter[EPackage, SModel] {
   override def convert(source: EPackage, sourceName: String): SModel = {
     //val packageName = if (source.getName != null) source.getName else ""
     var contents = source.eAllContents().asScala
-    val model = new ComplexSModel(source.getName, sourceName)
+    val model = new ComplexSModel(source.getName, sourceName, source.getNsURI)
+    
 
     println("... Converting ecore model")    
     println("First run creates all classes, important for abstract and interface relations")
diff --git a/src/main/scala/org/rosi_project/model_sync/generator/sync/QueryMethods.scala b/src/main/scala/org/rosi_project/model_sync/generator/sync/QueryMethods.scala
index 4251a5fdbf145f2864f3d3591d7e774731775675..ff6d5ecf37b6d444369568c6494cca2cfac4e45e 100644
--- a/src/main/scala/org/rosi_project/model_sync/generator/sync/QueryMethods.scala
+++ b/src/main/scala/org/rosi_project/model_sync/generator/sync/QueryMethods.scala
@@ -36,7 +36,7 @@ object QueryMethods  {
       result = PredefTypes.Object,
       params = Seq.empty,
       implementation = Seq(SMethodStatement(content = s"return new $helper${nat.sumSource.getName}(" + 
-          s"${nat.sumSource.getAllConstructorParameters.map(HelperFunctions.classEmptyConstructorParameterCreation(_)).mkString(", ")})", usedTypes = Set.empty)), 
+          s"${nat.sumSource.getAllConstructorParameters.map(HelperFunctions.classEmptyConstructorParameterCreation(_)).mkString(", ")})")), 
       true)    
     method.setVisibility(MethodVisibility.protectedVis)
     method
@@ -50,13 +50,13 @@ object QueryMethods  {
       name = "getCreationObject",
       result = PredefTypes.Object,
       params = Seq.empty,
-      implementation = Seq(SMethodStatement(content = "return", usedTypes = Set.empty)), 
+      implementation = Seq(SMethodStatement(content = "return")), 
       true)
     var statements: Seq[SMethodStatement] = Seq.empty
     if (ref.sumSource.connectedRef.hasOpposite) {
-      statements = Seq(SMethodStatement(content = s"target.set${ref.sumSource.connectedRef.oppositeRef.getName.capitalize}Intern(this)", usedTypes = Set.empty))
+      statements = Seq(SMethodStatement(content = s"target.set${ref.sumSource.connectedRef.oppositeRef.getName.capitalize}Intern(this)"))
     }
-    statements = statements ++ Seq(SMethodStatement(content = s"source.set${ref.sumSource.connectedRef.getName.capitalize}Intern(this)", usedTypes = Set.empty),
+    statements = statements ++ Seq(SMethodStatement(content = s"source.set${ref.sumSource.connectedRef.getName.capitalize}Intern(this)"),
         SMethodStatement(content = s"val sp: ${ref.viewSource.sumSource.getName} = source.player.right.get.asInstanceOf[${ref.viewSource.sumSource.getName}]",
             usedTypes = Set(ref.viewSource.sumSource)),
         SMethodStatement(content = s"val tp: ${ref.viewTarget.sumSource.getName} = target.player.right.get.asInstanceOf[${ref.viewTarget.sumSource.getName}]",
@@ -79,7 +79,7 @@ object QueryMethods  {
       result = PredefTypes.Unit,
       params = Seq(SMethodParameter(struc.getName.toLowerCase(), struc.getTypeElement), SMethodParameter("check", PredefRsumTypes.CHECKING_OPTION_STYPE)),
       implementation = Seq(SMethodStatement(content = s"+this set${struc.getName.firstLetterToUpperCase}(${struc.getName.toLowerCase()})", usedTypes = Set(struc.getTypeElement)), 
-          SMethodStatement(content = s"""connected.addAttributeFilter("${struc.getName}", ${struc.getName.toLowerCase()}.toString(), check)""", usedTypes = Set.empty)))
+          SMethodStatement(content = s"""connected.addAttributeFilter("${struc.getName}", ${struc.getName.toLowerCase()}.toString(), check)""")))
   }
   
   def createAllReferenceLinks(refClass: SInnerViewRelationalClass): Unit = {
@@ -112,14 +112,14 @@ object QueryMethods  {
         name = s"remove${realRef.getName.capitalize}Intern",
         result = PredefTypes.Unit,
         params = Seq(SMethodParameter("v", refClass)), //TODO: remove this then each remove internal method has different input parameters
-        implementation = Seq(SMethodStatement(content = s"${realRef.getName} = null", usedTypes = Set.empty)))
+        implementation = Seq(SMethodStatement(content = s"${realRef.getName} = null")))
       removeMethodInternal.setVisibility(MethodVisibility.privateExternalClass)
       sourceClass.addMethod(removeMethodInternal)
       val setMethodInternal = new SMethod(
         name = s"set${realRef.getName.capitalize}Intern",
         result = PredefTypes.Unit,
         params = Seq(SMethodParameter("v", refClass)),
-        implementation = Seq(SMethodStatement(content = s"${realRef.getName} = v", usedTypes = Set.empty)))
+        implementation = Seq(SMethodStatement(content = s"${realRef.getName} = v")))
       setMethodInternal.setVisibility(MethodVisibility.privateExternalClass)
       sourceClass.addMethod(setMethodInternal)
       //external variables
@@ -127,19 +127,19 @@ object QueryMethods  {
         name = s"get${realRef.getName.capitalize}",
         result = targetClass,
         params = Seq.empty,
-        implementation = Seq(SMethodStatement(content = s"return ${realRef.getName}.${getStatement}()", usedTypes = Set.empty))))
+        implementation = Seq(SMethodStatement(content = s"return ${realRef.getName}.${getStatement}()"))))
       sourceClass.addMethod(new SMethod(
         name = s"set${realRef.getName.capitalize}",
         result = PredefTypes.Boolean,
         params = Seq(SMethodParameter("v", targetClass)),
-        implementation = Seq(SMethodStatement(content = "if (v == null) return false", usedTypes = Set.empty),
-            SMethodStatement(content = s"if (!containsRole(v.asInstanceOf[${PredefRsumTypes.AQUERY_VIEW_ROLE_STYPE.getName}])) return false", usedTypes = Set.empty),
-            SMethodStatement(content = s"if (${realRef.getName} != null) {", usedTypes = Set.empty),
-            SMethodStatement(content = s"if (${realRef.getName}.${getStatement}() == v) return false", usedTypes = Set.empty),
-            SMethodStatement(content = s"${realRef.getName}.deleteElement()", usedTypes = Set.empty),
-            SMethodStatement(content = "}", usedTypes = Set.empty),
-            SMethodStatement(content = s"new ${refClass.getName}${thisStatement}", usedTypes = Set.empty),
-            SMethodStatement(content = "return true", usedTypes = Set.empty))))
+        implementation = Seq(SMethodStatement(content = "if (v == null) return false"),
+            SMethodStatement(content = s"if (!containsRole(v.asInstanceOf[${PredefRsumTypes.AQUERY_VIEW_ROLE_STYPE.getName}])) return false"),
+            SMethodStatement(content = s"if (${realRef.getName} != null) {"),
+            SMethodStatement(content = s"if (${realRef.getName}.${getStatement}() == v) return false"),
+            SMethodStatement(content = s"${realRef.getName}.deleteElement()"),
+            SMethodStatement(content = "}"),
+            SMethodStatement(content = s"new ${refClass.getName}${thisStatement}"),
+            SMethodStatement(content = "return true"))))
     } else {
       //add delete role for attributes
       sourceClass.getMethods.foreach(m => {
@@ -156,14 +156,14 @@ object QueryMethods  {
         name = s"remove${realRef.getName.capitalize}Intern",
         result = PredefTypes.Unit,
         params = Seq(SMethodParameter("v", refClass)),
-        implementation = Seq(SMethodStatement(content = s"${realRef.getName} -= v", usedTypes = Set.empty)))
+        implementation = Seq(SMethodStatement(content = s"${realRef.getName} -= v")))
       removeMethodInternal.setVisibility(MethodVisibility.privateExternalClass)
       sourceClass.addMethod(removeMethodInternal)
       val setMethodInternal = new SMethod(
         name = s"set${realRef.getName.capitalize}Intern",
         result = PredefTypes.Unit,
         params = Seq(SMethodParameter("v", refClass)),
-        implementation = Seq(SMethodStatement(content = s"${realRef.getName} += v", usedTypes = Set.empty)))
+        implementation = Seq(SMethodStatement(content = s"${realRef.getName} += v")))
       setMethodInternal.setVisibility(MethodVisibility.privateExternalClass)
       sourceClass.addMethod(setMethodInternal)
       //external variables
@@ -171,32 +171,32 @@ object QueryMethods  {
         name = s"get${realRef.getName.capitalize}",
         result = SSet(targetClass),
         params = Seq.empty,
-        implementation = Seq(SMethodStatement(content = s"var vs: Set[${targetClass.getDeepName}] = Set.empty", usedTypes = Set.empty), 
-            SMethodStatement(content = s"${realRef.getName}.foreach{ v => vs += v.${getStatement}()}", usedTypes = Set.empty), 
-            SMethodStatement(content = "return vs", usedTypes = Set.empty))))
+        implementation = Seq(SMethodStatement(content = s"var vs: Set[${targetClass.getDeepName}] = Set.empty"), 
+            SMethodStatement(content = s"${realRef.getName}.foreach{ v => vs += v.${getStatement}()}"), 
+            SMethodStatement(content = "return vs"))))
       sourceClass.addMethod(new SMethod(
         name = s"has${realRef.getName.capitalize}",
         result = PredefTypes.Boolean,
         params = Seq(SMethodParameter("v", targetClass)),
-        implementation = Seq(SMethodStatement(content = s"return get${realRef.getName.capitalize}.contains(v)", usedTypes = Set.empty))))
+        implementation = Seq(SMethodStatement(content = s"return get${realRef.getName.capitalize}.contains(v)"))))
       sourceClass.addMethod(new SMethod(
         name = s"add${realRef.getName.capitalize}",
         result = PredefTypes.Boolean,
         params = Seq(SMethodParameter("v", targetClass)),
-        implementation = Seq(SMethodStatement(content = s"if (has${realRef.getName.capitalize}(v) || !containsRole(v.asInstanceOf[${PredefRsumTypes.AQUERY_VIEW_ROLE_STYPE.getName}])) return false", usedTypes = Set.empty),
-            SMethodStatement(content = s"new ${refClass.getName}${thisStatement}", usedTypes = Set.empty),
-            SMethodStatement(content = "return true", usedTypes = Set.empty))))
+        implementation = Seq(SMethodStatement(content = s"if (has${realRef.getName.capitalize}(v) || !containsRole(v.asInstanceOf[${PredefRsumTypes.AQUERY_VIEW_ROLE_STYPE.getName}])) return false"),
+            SMethodStatement(content = s"new ${refClass.getName}${thisStatement}"),
+            SMethodStatement(content = "return true"))))
       sourceClass.addMethod(new SMethod(
         name = s"remove${realRef.getName.capitalize}",
         result = PredefTypes.Boolean,
         params = Seq(SMethodParameter("v", targetClass)),
-        implementation = Seq(SMethodStatement(content = s"if (!has${realRef.getName.capitalize}(v)) return false", usedTypes = Set.empty),
-            SMethodStatement(content = s"${realRef.getName}.foreach{ h =>", usedTypes = Set.empty),
-            SMethodStatement(content = s"if (h.${getStatement}() == v) {", usedTypes = Set.empty),
-            SMethodStatement(content = "h.deleteElement()", usedTypes = Set.empty),
-            SMethodStatement(content = "return true", usedTypes = Set.empty),
-            SMethodStatement(content = "}}", usedTypes = Set.empty),
-            SMethodStatement(content = "return true", usedTypes = Set.empty))))
+        implementation = Seq(SMethodStatement(content = s"if (!has${realRef.getName.capitalize}(v)) return false"),
+            SMethodStatement(content = s"${realRef.getName}.foreach{ h =>"),
+            SMethodStatement(content = s"if (h.${getStatement}() == v) {"),
+            SMethodStatement(content = "h.deleteElement()"),
+            SMethodStatement(content = "return true"),
+            SMethodStatement(content = "}}"),
+            SMethodStatement(content = "return true"))))
     }
   }
 }
\ No newline at end of file
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 9e9822c9da268296f219c47b2082bab8cae73648..8afc83f974852c771ba77158d271648634f9e732 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
@@ -7,87 +7,116 @@ import org.rosi_project.model_sync.generator.acr_model.types.PredefTypes
 
 /**
  * Read EMF and Ecore models.
- * 
+ *
  * @author Christopher Werner
  */
 class SumModelReadingVisitor() extends SModelVisitor {
 
   override def visit(sModel: SModel): Unit = {
     //println("++++++++++++++++++++++++++++++++++++++++++++++")
-    val example = new SClass("Creation" + sModel.getName, PackageNames.creationPkgName)
-    example.augmentConstructor(SMethodStatement(content = s"var mapping: Map[EObject, Object] = Map.empty", usedTypes = Set(PredefEcoreTypes.EcoreObject)))
-    
-    sModel.getAllClasses.filter(c => !c.isAbstract && !c.isInterface).foreach(c => {
-      
-      val metod = new SMethod(
+    val creator = new SClass("Creation" + sModel.getName, PackageNames.creationPkgName)
+    val loader = new SClass("Loader" + sModel.getName, PackageNames.creationPkgName)
+
+    val loadEcore = new SMethod(
+      name = "loadEcore",
+      result = PredefEcoreTypes.EcoreObject,
+      params = Seq(SMethodParameter("pathMeta", PredefTypes.String), SMethodParameter("pathInstance", PredefTypes.String)),
+      implementation = Seq(
+        SMethodStatement(content = s"require(null != pathMeta && pathMeta.nonEmpty && null != pathInstance && pathInstance.nonEmpty)"),
+        SMethodStatement(content = s"val resourceSet = new ResourceSetImpl()", usedTypes = Set(PredefEcoreTypes.ResourceSetImpl)),
+        SMethodStatement(content = s"resourceSet.getResourceFactoryRegistry.getExtensionToFactoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl())", usedTypes = Set(PredefEcoreTypes.XMIResourceFactoryImpl, PredefEcoreTypes.Resource)),
+        SMethodStatement(content = s"val ressourceMeta = resourceSet.getResource(URI.createFileURI(pathMeta), true)", usedTypes = Set(PredefEcoreTypes.URI)),
+        SMethodStatement(content = s"val packageMeta = ressourceMeta.getContents().get(0)"),
+        SMethodStatement(content = s"require(null != ressourceMeta)"),
+        SMethodStatement(content = s"require(!ressourceMeta.getContents.isEmpty)"),
+        SMethodStatement(content = s"""resourceSet.getPackageRegistry().put("${sModel.getNsURI}", packageMeta);"""),
+        SMethodStatement(content = s"val ressourceModel = resourceSet.getResource(URI.createURI(pathInstance), true);"),
+        SMethodStatement(content = s"return ressourceModel.getContents().get(0)")))
+    loader.addMethod(loadEcore)
+
+    val createModelInstance = new SMethod(
+      name = s"create${sModel.getName}Instance",
+      result = PredefTypes.Unit,
+      params = Seq(SMethodParameter("obj", PredefEcoreTypes.EcoreObject), SMethodParameter("creator", creator)),
+      implementation = Seq(
+        SMethodStatement(content = s"createObj(obj, creator)"),
+        SMethodStatement(content = s"obj.eAllContents().asScala.foreach(o => {", usedTypes = Set(PredefTypes.ScalaConverter)),
+        SMethodStatement(content = s"createObj(o, creator)"),
+        SMethodStatement(content = s"})"),
+        SMethodStatement(content = s"createRef(obj, creator)"),
+        SMethodStatement(content = s"obj.eAllContents().asScala.foreach(o => {"),
+        SMethodStatement(content = s"createRef(o, creator)"),
+        SMethodStatement(content = s"})")))
+    loader.addMethod(createModelInstance)
+
+    val createObj = new SMethod(
+      name = "createObj",
+      result = PredefTypes.Unit,
+      params = Seq(SMethodParameter("obj", PredefEcoreTypes.EcoreObject), SMethodParameter("creator", creator)),
+      implementation = Seq.empty)
+    var createObjImpl = Seq(SMethodStatement(content = s"var objName = obj.eClass.getName"),
+      SMethodStatement(content = s"objName match {"))
+
+    val createRef = new SMethod(
+      name = "createRef",
+      result = PredefTypes.Unit,
+      params = Seq(SMethodParameter("o1", PredefEcoreTypes.EcoreObject), SMethodParameter("creator", creator)),
+      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]"),
+      SMethodStatement(content = s"val o1Name = o1.eClass().getName"),
+      SMethodStatement(content = s"val o2Name = o2.eClass().getName"))
+
+    creator.augmentConstructor(SMethodStatement(content = s"var mapping: Map[EObject, Object] = Map.empty", usedTypes = Set(PredefEcoreTypes.EcoreObject)))
+
+    sModel.getModelClasses.filter(c => !c.isAbstract && !c.isInterface).foreach(c => {
+      val method = new SMethod(
         name = s"create${c.getName}",
         result = PredefTypes.Unit,
-        params = c.getAllConstructorParameters :+ SMethodParameter("id", PredefEcoreTypes.EcoreObject),
+        params = c.getAttributeConstructorParameters :+ SMethodParameter("id", PredefEcoreTypes.EcoreObject),
         implementation = Seq(
-            SMethodStatement(content = s"mapping += (id -> new ${c.getName}(name, Set.empty, Set.empty, null))", usedTypes = Set.empty)))
+          SMethodStatement(content = s"mapping += (id -> new ${c.getName}(${c.getAttributeConstructorParameters.map(m => m.getName).mkString(", ")}))", usedTypes = Set(c))))
+      creator.addMethod(method)
+
+      var s = c.getAttributeConstructorParameters.map(m => s"""obj.eGet(obj.eClass().getEStructuralFeature("${m.getName}"))${if(m.getTypeName == "Boolean") ".asInstanceOf[Boolean]" else ".toString()"} """).mkString(", ")
+      if (s.isEmpty()) {
+        s = "obj"
+      } else {
+        s = s + ", obj" 
+      }
+      createObjImpl = createObjImpl :+ SMethodStatement(content = s"""case "${c.getName}" => creator.create${c.getName}(${s})""")
     })
-    
+
     sModel.getRelationalCompartments.foreach(r => {
       var rc = r.asInstanceOf[SRelationalCompartmentClass]
-      val metod = new SMethod(
+      val method = new SMethod(
         name = s"create${r.getName}",
         result = PredefTypes.Unit,
         params = Seq(SMethodParameter("s", PredefEcoreTypes.EcoreObject), SMethodParameter("t", PredefEcoreTypes.EcoreObject)),
         implementation = Seq(
-            SMethodStatement(content = s"val s1 = mapping.get(s).get.asInstanceOf[${rc.sClass.getName}]"),
-            SMethodStatement(content = s"val t1 = mapping.get(t).get.asInstanceOf[${rc.tClass.getName}]"),
-            SMethodStatement(content = s"(new ${rc.getName}(s1, t1)).initialize()")))
+          SMethodStatement(content = s"val s1 = mapping.get(s).get.asInstanceOf[${rc.sClass.getName}]"),
+          SMethodStatement(content = s"val t1 = mapping.get(t).get.asInstanceOf[${rc.tClass.getName}]"),
+          SMethodStatement(content = s"(new ${rc.getName}(s1, t1)).initialize()", usedTypes = Set(rc, rc.sClass, rc.tClass))))
+      creator.addMethod(method)
+
+      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 = "}")
     })
-         
-    //add values for instances    
-    /*lines.foreach(l => {
-      l.usedType.getAllConstructorParameters.foreach(cp => {
-        if (!STypeRegistry.isDefaultType(cp.getType.getName)) {
-          val structs: Seq[EStructuralFeature] = l.obj.eClass().getEAllStructuralFeatures.asScala
-          structs.foreach(att => {
-            if (att.getName == cp.getName) {
-              val obj = l.obj.eGet(att)
-              if (obj.isInstanceOf[EObject]) {
-                lines.foreach(lnow => {
-                  if (lnow.obj == obj.asInstanceOf[EObject]) {
-                    //println("Found: " + lnow.counter) .filter(_.isInstanceOf[SRelationalCompartmentClass])
-                    sModel.getRelationalCompartments.foreach(rc => {
-                      val realRc = rc.asInstanceOf[SRelationalCompartmentClass]
-                      //println(" AN: " + att.getName + " l1: " + l.usedType.getName + " l2: " + lnow.usedType.getName + " RC: " + realRc.connectedRef.getName + " SN: " + realRc.sClass.getName + " TN: " + realRc.tClass.getName)
-                      if (realRc.connectedRef.getName == att.getName && l.usedType.proofHierarchicalEquality(realRc.sClass) && lnow.usedType.proofHierarchicalEquality(realRc.tClass)) {
-                        val s = s"(new ${realRc.getName}(${l.getName()}, ${lnow.getName()})).initialize()"
-                        generationLines = generationLines :+ new InstanceLine(0, null, realRc, s)
-                      }
-                    })
-                  }
-                })
-              } else {
-                val listi: List[EObject] = EMFUtilForGenerator.getList(obj)
-                val liste = listi.asScala
-                liste.foreach(eo => {
-                  lines.foreach(lnow => {
-                    if (lnow.obj == eo) {
-                      sModel.getRelationalCompartments.foreach(rc => {
-                        val realRc = rc.asInstanceOf[SRelationalCompartmentClass]
-                        //println(" AN: " + att.getName + " l1: " + l.usedType.getName + " l2: " + lnow.usedType.getName + " RC: " + realRc.connectedRef.getName + " SN: " + realRc.sClass.getName + " TN: " + realRc.tClass.getName)
-                        if (realRc.connectedRef.getName == att.getName && l.usedType.proofHierarchicalEquality(realRc.sClass) && lnow.usedType.proofHierarchicalEquality(realRc.tClass)) {
-                          val s = s"(new ${realRc.getName}(${l.getName()}, ${lnow.getName()})).initialize()"
-                          generationLines = generationLines :+ new InstanceLine(0, null, realRc, s)
-                        }
-                      })
-                    }
-                  })
-                })
-              }
-            }
-          })
-        }
-      })
-    })*/
+
+    createObjImpl = createObjImpl :+ SMethodStatement(content = "case _ =>")
+    createObjImpl = createObjImpl :+ SMethodStatement(content = "}")
+    createObj.implementation = createObjImpl
+    loader.addMethod(createObj)
     
-    sModel.addModelClass(example)
-    // pass
+    createRefImpl = createRefImpl :+ SMethodStatement(content = "})")
+    createRef.implementation = createRefImpl
+    loader.addMethod(createRef)
 
+    //add the new classes as model classes
+    sModel.addModelClass(creator)
+    sModel.addModelClass(loader)
   }
 
   override def visit(sClass: SClass): Unit = {
diff --git a/src/main/scala/org/rosi_project/model_sync/generator/sync/ViewMethods.scala b/src/main/scala/org/rosi_project/model_sync/generator/sync/ViewMethods.scala
index 7c07d1cdd8a5407a8515adfc63fb53de6ccb099e..4485fc089caf9170280c8a02b62aa1bb127aa131 100644
--- a/src/main/scala/org/rosi_project/model_sync/generator/sync/ViewMethods.scala
+++ b/src/main/scala/org/rosi_project/model_sync/generator/sync/ViewMethods.scala
@@ -41,12 +41,12 @@ object ViewMethods {
       name = "getSource",
       result = ref.viewSource,
       params = Seq.empty,
-      implementation = Seq(SMethodStatement("source", usedTypes = Set.empty))) ++
+      implementation = Seq(SMethodStatement("source"))) ++
     new SMethod(
       name = "getTarget",
       result = ref.viewTarget,
       params = Seq.empty,
-      implementation = Seq(SMethodStatement("target", usedTypes = Set.empty))))
+      implementation = Seq(SMethodStatement("target"))))
   }
   
   def getCreateNaturalRoleMethods(naturalRoles: Set[SInnerViewNaturalClass]): Seq[SMethod] = {
@@ -57,7 +57,7 @@ object ViewMethods {
             name = s"create${nr.sumSource.getName}",
             result = nr,
             params = nr.getAllConstructorParameters,
-            implementation = Seq(SMethodStatement(content = s"return new ${nr.getName}(${nr.getAllConstructorParameters.map(m => m.getName).mkString(", ")})", usedTypes = Set.empty)))
+            implementation = Seq(SMethodStatement(content = s"return new ${nr.getName}(${nr.getAllConstructorParameters.map(m => m.getName).mkString(", ")})")))
         methods = methods :+ method
       }
     })
@@ -69,7 +69,7 @@ object ViewMethods {
       name = "isRelational",
       result = PredefTypes.Boolean,
       params = Seq.empty,
-      implementation = Seq(SMethodStatement(content = s"return ${relational}", usedTypes = Set.empty)), 
+      implementation = Seq(SMethodStatement(content = s"return ${relational}")), 
       true)    
     method.setVisibility(MethodVisibility.protectedVis)
     method
@@ -89,7 +89,7 @@ object ViewMethods {
           s"${jcls.other.getAllConstructorParameters.map(HelperFunctions.initialAttributeDoing(_, nat.getDeepStructuralFeatures)).mkString(", ")}))", usedTypes = Set(jcls.other, jcls.base)))
     } else {      
       method.implementation = Seq(SMethodStatement(content = s"return new ${nat.sumSource.getName}(" + 
-          s"${nat.sumSource.getAllConstructorParameters.map(HelperFunctions.initialAttributeDoing(_, nat.getDeepStructuralFeatures)).mkString(", ")})", usedTypes = Set.empty))
+          s"${nat.sumSource.getAllConstructorParameters.map(HelperFunctions.initialAttributeDoing(_, nat.getDeepStructuralFeatures)).mkString(", ")})"))
     }
     method.setVisibility(MethodVisibility.protectedVis)
     method
@@ -100,14 +100,14 @@ object ViewMethods {
       name = "getCreationObject",
       result = PredefTypes.Object,
       params = Seq.empty,
-      implementation = Seq(SMethodStatement(content = "return", usedTypes = Set.empty)), 
+      implementation = Seq(SMethodStatement(content = "return")), 
       true)
     var statements: Seq[SMethodStatement] = Seq.empty
     if (ref.sumSource.connectedRef.hasOpposite && createOpposite) {
-      statements = Seq(SMethodStatement(content = s"target.set${ref.sumSource.connectedRef.oppositeRef.getName.capitalize}Intern(this)", usedTypes = Set.empty))
+      statements = Seq(SMethodStatement(content = s"target.set${ref.sumSource.connectedRef.oppositeRef.getName.capitalize}Intern(this)"))
     }
     if (createNormal) {
-      statements = statements ++ SMethodStatement(content = s"source.set${ref.sumSource.connectedRef.getName.capitalize}Intern(this)", usedTypes = Set.empty)
+      statements = statements ++ SMethodStatement(content = s"source.set${ref.sumSource.connectedRef.getName.capitalize}Intern(this)")
     }
     statements = statements ++ Seq(SMethodStatement(content = s"""val sp: ${ref.sumSource.sClass.getName} = getPlayerOfType(source, "${ref.sumSource.sClass.getName}").asInstanceOf[${ref.sumSource.sClass.getName}]""",
             usedTypes = Set(ref.viewSource.sumSource)),
@@ -115,8 +115,7 @@ object ViewMethods {
             usedTypes = Set(ref.viewTarget.sumSource)),
         SMethodStatement(content = s"val v: ${ref.sumSource.getName} = new ${ref.sumSource.getName}(sp, tp)",
             usedTypes = Set(ref.sumSource)),
-        SMethodStatement(content = s"return v",
-            usedTypes = Set.empty))    
+        SMethodStatement(content = s"return v"))    
     method.implementation = statements
     method.setVisibility(MethodVisibility.protectedVis)
     method
@@ -136,7 +135,7 @@ object ViewMethods {
         statements = statements :+ SMethodStatement(content = statement, usedTypes = Set(t))
       }
     })
-    statements = statements :+ SMethodStatement(content = "return null", usedTypes = Set.empty)
+    statements = statements :+ SMethodStatement(content = "return null")
     method.implementation = statements
     method.setVisibility(MethodVisibility.protectedVis)
     method
@@ -155,7 +154,7 @@ object ViewMethods {
         s"${t.getName}(sourceRole.asInstanceOf[${t.viewSource.getName}], targetRole.asInstanceOf[${t.viewTarget.getName}])"
       statements = statements :+ SMethodStatement(content = statement, usedTypes = Set(t))
     })
-    statements = statements :+ SMethodStatement(content = "return null", usedTypes = Set.empty)
+    statements = statements :+ SMethodStatement(content = "return null")
     method.implementation = statements    
     method.setVisibility(MethodVisibility.protectedVis)
     method
@@ -204,7 +203,7 @@ object ViewMethods {
       result = PredefTypes.Unit,
       params = Seq(SMethodParameter(struc.getName.toLowerCase(), struc.getTypeElement)),
       implementation = Seq(SMethodStatement(content = s"+this set${struc.getName.firstLetterToUpperCase}(${struc.getName.toLowerCase()})", usedTypes = Set(struc.getTypeElement)), 
-          SMethodStatement(content = s"+this changeSomething()", usedTypes = Set.empty)))
+          SMethodStatement(content = s"+this changeSomething()")))
   }
   
   def createAllReferenceLinks(refClass: SInnerViewRelationalClass, createNormal: Boolean, createOpposite: Boolean): Unit = {
@@ -234,14 +233,14 @@ object ViewMethods {
         name = s"remove${realRef.getName.capitalize}Intern",
         result = PredefTypes.Unit,
         params = Seq(SMethodParameter("v", refClass)), //TODO: remove this then each remove internal method has different input parameters
-        implementation = Seq(SMethodStatement(content = s"${realRef.getName} = null", usedTypes = Set.empty)))
+        implementation = Seq(SMethodStatement(content = s"${realRef.getName} = null")))
       removeMethodInternal.setVisibility(MethodVisibility.privateExternalClass)
       sourceClass.addMethod(removeMethodInternal)
       val setMethodInternal = new SMethod(
         name = s"set${realRef.getName.capitalize}Intern",
         result = PredefTypes.Unit,
         params = Seq(SMethodParameter("v", refClass)),
-        implementation = Seq(SMethodStatement(content = s"${realRef.getName} = v", usedTypes = Set.empty)))
+        implementation = Seq(SMethodStatement(content = s"${realRef.getName} = v")))
       setMethodInternal.setVisibility(MethodVisibility.privateExternalClass)
       sourceClass.addMethod(setMethodInternal)
       //external variables
@@ -249,19 +248,19 @@ object ViewMethods {
         name = s"get${realRef.getName.capitalize}",
         result = targetClass,
         params = Seq.empty,
-        implementation = Seq(SMethodStatement(content = s"return ${realRef.getName}.${getStatement}()", usedTypes = Set.empty))))
+        implementation = Seq(SMethodStatement(content = s"return ${realRef.getName}.${getStatement}()"))))
       sourceClass.addMethod(new SMethod(
         name = s"set${realRef.getName.capitalize}",
         result = PredefTypes.Boolean,
         params = Seq(SMethodParameter("v", targetClass)),
-        implementation = Seq(SMethodStatement(content = "if (v == null) return false", usedTypes = Set.empty),
-          SMethodStatement(content = "if (!containsRole(v.asInstanceOf[AViewRole])) return false", usedTypes = Set.empty),
-          SMethodStatement(content = s"if (${realRef.getName} != null) {", usedTypes = Set.empty),
-          SMethodStatement(content = s"if (${realRef.getName}.${getStatement}() == v) return false", usedTypes = Set.empty),
-          SMethodStatement(content = s"${realRef.getName}.deleteElement()", usedTypes = Set.empty),
-          SMethodStatement(content = "}", usedTypes = Set.empty),
-          SMethodStatement(content = s"new ${refClass.getName}${thisStatement}", usedTypes = Set.empty),
-          SMethodStatement(content = "return true", usedTypes = Set.empty))))
+        implementation = Seq(SMethodStatement(content = "if (v == null) return false"),
+          SMethodStatement(content = "if (!containsRole(v.asInstanceOf[AViewRole])) return false"),
+          SMethodStatement(content = s"if (${realRef.getName} != null) {"),
+          SMethodStatement(content = s"if (${realRef.getName}.${getStatement}() == v) return false"),
+          SMethodStatement(content = s"${realRef.getName}.deleteElement()"),
+          SMethodStatement(content = "}"),
+          SMethodStatement(content = s"new ${refClass.getName}${thisStatement}"),
+          SMethodStatement(content = "return true"))))
     } else {
       //upper Bound = endless
       //variable settings
@@ -271,14 +270,14 @@ object ViewMethods {
         name = s"remove${realRef.getName.capitalize}Intern",
         result = PredefTypes.Unit,
         params = Seq(SMethodParameter("v", refClass)),
-        implementation = Seq(SMethodStatement(content = s"${realRef.getName} -= v", usedTypes = Set.empty)))
+        implementation = Seq(SMethodStatement(content = s"${realRef.getName} -= v")))
       removeMethodInternal.setVisibility(MethodVisibility.privateExternalClass)
       sourceClass.addMethod(removeMethodInternal)
       val setMethodInternal = new SMethod(
         name = s"set${realRef.getName.capitalize}Intern",
         result = PredefTypes.Unit,
         params = Seq(SMethodParameter("v", refClass)),
-        implementation = Seq(SMethodStatement(content = s"${realRef.getName} += v", usedTypes = Set.empty)))
+        implementation = Seq(SMethodStatement(content = s"${realRef.getName} += v")))
       setMethodInternal.setVisibility(MethodVisibility.privateExternalClass)
       sourceClass.addMethod(setMethodInternal)
       //external variables
@@ -286,32 +285,32 @@ object ViewMethods {
         name = s"get${realRef.getName.capitalize}",
         result = SSet(targetClass),
         params = Seq.empty,
-        implementation = Seq(SMethodStatement(content = s"var vs: Set[${targetClass.getDeepName}] = Set.empty", usedTypes = Set.empty),
-          SMethodStatement(content = s"${realRef.getName}.foreach{ v => vs += v.${getStatement}()}", usedTypes = Set.empty),
-          SMethodStatement(content = "return vs", usedTypes = Set.empty))))
+        implementation = Seq(SMethodStatement(content = s"var vs: Set[${targetClass.getDeepName}] = Set.empty"),
+          SMethodStatement(content = s"${realRef.getName}.foreach{ v => vs += v.${getStatement}()}"),
+          SMethodStatement(content = "return vs"))))
       sourceClass.addMethod(new SMethod(
         name = s"has${realRef.getName.capitalize}",
         result = PredefTypes.Boolean,
         params = Seq(SMethodParameter("v", targetClass)),
-        implementation = Seq(SMethodStatement(content = s"return get${realRef.getName.capitalize}.contains(v)", usedTypes = Set.empty))))
+        implementation = Seq(SMethodStatement(content = s"return get${realRef.getName.capitalize}.contains(v)"))))
       sourceClass.addMethod(new SMethod(
         name = s"add${realRef.getName.capitalize}",
         result = PredefTypes.Boolean,
         params = Seq(SMethodParameter("v", targetClass)),
-        implementation = Seq(SMethodStatement(content = s"if (has${realRef.getName.capitalize}(v) || !containsRole(v.asInstanceOf[AViewRole])) return false", usedTypes = Set.empty),
-          SMethodStatement(content = s"new ${refClass.getName}${thisStatement}", usedTypes = Set.empty),
-          SMethodStatement(content = "return true", usedTypes = Set.empty))))
+        implementation = Seq(SMethodStatement(content = s"if (has${realRef.getName.capitalize}(v) || !containsRole(v.asInstanceOf[AViewRole])) return false"),
+          SMethodStatement(content = s"new ${refClass.getName}${thisStatement}"),
+          SMethodStatement(content = "return true"))))
       sourceClass.addMethod(new SMethod(
         name = s"remove${realRef.getName.capitalize}",
         result = PredefTypes.Boolean,
         params = Seq(SMethodParameter("v", targetClass)),
-        implementation = Seq(SMethodStatement(content = s"if (!has${realRef.getName.capitalize}(v)) return false", usedTypes = Set.empty),
-          SMethodStatement(content = s"${realRef.getName}.foreach{ h =>", usedTypes = Set.empty),
-          SMethodStatement(content = s"if (h.${getStatement}() == v) {", usedTypes = Set.empty),
-          SMethodStatement(content = "h.deleteElement()", usedTypes = Set.empty),
-          SMethodStatement(content = "return true", usedTypes = Set.empty),
-          SMethodStatement(content = "}}", usedTypes = Set.empty),
-          SMethodStatement(content = "return true", usedTypes = Set.empty))))
+        implementation = Seq(SMethodStatement(content = s"if (!has${realRef.getName.capitalize}(v)) return false"),
+          SMethodStatement(content = s"${realRef.getName}.foreach{ h =>"),
+          SMethodStatement(content = s"if (h.${getStatement}() == v) {"),
+          SMethodStatement(content = "h.deleteElement()"),
+          SMethodStatement(content = "return true"),
+          SMethodStatement(content = "}}"),
+          SMethodStatement(content = "return true"))))
     }
   }
 }
\ No newline at end of file
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 ebabed59bf3321ddfbae841d97536b36a773dd36..c0a9dfcfa204a016f11616cec69f11cf6c0bd96b 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
diff --git a/src/main/scala/org/rosi_project/model_sync/generator/test/SModelFSWriterTest.scala b/src/main/scala/org/rosi_project/model_sync/generator/test/SModelFSWriterTest.scala
index 8f2d0f2ee16b3405753002d6c8677ff7f5a2e6b0..6f6a3c3711bbba1215657464f505b75ebffbaf9e 100644
--- a/src/main/scala/org/rosi_project/model_sync/generator/test/SModelFSWriterTest.scala
+++ b/src/main/scala/org/rosi_project/model_sync/generator/test/SModelFSWriterTest.scala
@@ -8,7 +8,7 @@ import scala.collection.Seq
   */
 object SModelFSWriterTest/* extends App */{
 
-  val model = new SimpleSModel("Foo", "source")
+  val model = new SimpleSModel("Foo", "source", "http.//test.test")
 
   val stringType = SType("String")