diff --git a/solutions/RSync/src/main/java/ttc2019/metamodels/create/CreateTTinJava.java b/solutions/RSync/src/main/java/ttc2019/metamodels/create/CreateTTinJava.java
index 1fc5b8c7f326c023c185d3ac2bca1b20047deb9c..654cf1e9db4f1b1024c17697810ed1859531b6cd 100644
--- a/solutions/RSync/src/main/java/ttc2019/metamodels/create/CreateTTinJava.java
+++ b/solutions/RSync/src/main/java/ttc2019/metamodels/create/CreateTTinJava.java
@@ -17,50 +17,40 @@ public class CreateTTinJava {
 	private Map<EObject, Row> rows = new HashMap<EObject, Row>();
 	private Map<EObject, Port> ports = new HashMap<EObject, Port>();
 	private Map<EObject, Cell> cells = new HashMap<EObject, Cell>();
-
+	
 	public void createTruthTable(String name, EObject id) {
 	    truthttable = TTFactory.getTruthTable(name);
 	  }
 
 	public void createInputPort(String name, EObject id) {
-	    //mapping += (id -> new InputPort(name, Set.empty, null, null))
 	    ports.put(id, TTFactory.getInputPort(name));
 	  }
 
 	public void createOutputPort(String name, EObject id) {
-	    //mapping += (id -> new OutputPort(name, Set.empty, null, null))
 	    ports.put(id, TTFactory.getOutputPort(name));
 	  }
 
 	public void createRow(EObject id) {
-	    //mapping += (id -> new Row(Set.empty, null, null))
 	    rows.put(id, TTFactory.getRow());
 	  }
 
 	public void createCell(Boolean value, EObject id) {
-	    //mapping += (id -> new Cell(value, null, null, null))
 	    cells.put(id, TTFactory.getCell(value));
 	  }
 
 	public void createTruthTableRowsRow(EObject tt, EObject row) {
-	    //val t = mapping.get(tt).get.asInstanceOf[TruthTable]
-	    //val r = mapping.get(row).get.asInstanceOf[Row]
 	    Row r = rows.get(row);
 	    truthttable.addRows(r);
 	    r.setOwner(truthttable);
 	  }
 
 	public void createTruthTablePortsPort(EObject tt, EObject port) {
-	    //val t = mapping.get(tt).get.asInstanceOf[TruthTable]
-	    //val p = mapping.get(port).get.asInstanceOf[Port]
 	    Port p = ports.get(port);
 	    truthttable.addPorts(p);
 	    p.setOwner(truthttable);
 	  }
 
 	public void createRowCellsCell(EObject row, EObject cell) {
-	    //val c = mapping.get(cell).get.asInstanceOf[Cell]
-	    //val r = mapping.get(row).get.asInstanceOf[Row]
 	    Cell c = cells.get(cell);
 	    Row r = rows.get(row);
 	    c.setOwner(r);
@@ -68,8 +58,6 @@ public class CreateTTinJava {
 	  }
 
 	public void createCellPortPort(EObject cell, EObject port) {
-	    //val c = mapping.get(cell).get.asInstanceOf[Cell]
-	    //val p = mapping.get(port).get.asInstanceOf[Port]
 	    Cell c = cells.get(cell);
 	    Port p = ports.get(port);
 	    c.setPort(p);
diff --git a/solutions/RSync/src/main/java/ttc2019/metamodels/create/CreationHelper.java b/solutions/RSync/src/main/java/ttc2019/metamodels/create/CreationHelper.java
deleted file mode 100644
index 9dd84491ed2cf8da07e49be01d08936b04ed65a0..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/java/ttc2019/metamodels/create/CreationHelper.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package ttc2019.metamodels.create;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Map;
-import java.util.HashMap;
-
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
-
-import ttc2019.metamodels.bdd.Assignment;
-import ttc2019.metamodels.bdd.BDD;
-import ttc2019.metamodels.bdd.BDDFactory;
-import ttc2019.metamodels.bdd.InputPort;
-import ttc2019.metamodels.bdd.Leaf;
-import ttc2019.metamodels.bdd.OutputPort;
-import ttc2019.metamodels.bdd.Port;
-import ttc2019.metamodels.bdd.Subtree;
-import ttc2019.metamodels.bdd.Tree;
-
-public class CreationHelper {
-	
-	private BDD bdd;
-	private Map<Object, Object> mapping = new HashMap<Object, Object>();
-	
-	public void generate(String fileName) throws IOException {
-		File file = new File(fileName);
-		final ResourceSet rs = new ResourceSetImpl();
-		rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl());
-		final Resource rImpl = rs.createResource(URI.createFileURI(file.getCanonicalPath()));
-		rImpl.getContents().add(bdd);
-		rImpl.save(null);
-	}
-	
-	public void addLeafAssignmentConnection(Object leafScObj, Object assScObj) {
-		Leaf l = (Leaf)mapping.get(leafScObj);
-		Assignment a = (Assignment)mapping.get(assScObj);
-		a.setOwner(l);
-		l.getAssignments().add(a);
-	}
-	
-	public void addOutputAssignmentConnection(Object outScObj, Object assScObj) {
-		OutputPort o = (OutputPort)mapping.get(outScObj);
-		Assignment a = (Assignment)mapping.get(assScObj);
-		o.getAssignments().add(a);
-		a.setPort(o);
-	}
-	
-	public void addInputSubtreeConnection(Object inScObj, Object subScObj) {
-		InputPort i = (InputPort)mapping.get(inScObj);
-		Subtree s = (Subtree)mapping.get(subScObj);
-		s.setPort(i);
-		i.getSubtrees().add(s);
-	}
-	
-	public void addSubtreeZeroTreeConnection(Object treeScObj, Object subScObj) {
-		Tree t = (Tree)mapping.get(treeScObj);
-		Subtree s = (Subtree)mapping.get(subScObj);
-		t.setOwnerSubtreeForZero(s);
-		s.setTreeForZero(t);
-	}
-	
-	public void addSubtreeOneTreeConnection(Object treeScObj, Object subScObj) {
-		Tree t = (Tree)mapping.get(treeScObj);
-		Subtree s = (Subtree)mapping.get(subScObj);
-		t.setOwnerSubtreeForOne(s);
-		s.setTreeForOne(t);
-	}	
-	
-	public void addBDDPortConnection(Object portScObj) {
-		Port p = (Port)mapping.get(portScObj);
-		p.setOwner(bdd);		
-		bdd.getPorts().add(p);
-	}
-	
-	public void addBDDTreeConnection(Object treeScObj) {
-		Tree t = (Tree)mapping.get(treeScObj);
-		t.setOwnerBDD(bdd);		
-		bdd.setTree(t);
-	}
-	
-	public void createOutputPort(Object scalaObj, String name) {
-		OutputPort o = BDDFactory.eINSTANCE.createOutputPort();
-		o.setName(name);
-		mapping.put(scalaObj, o);
-	}
-	
-	public void createInputPort(Object scalaObj, String name) {
-		InputPort i = BDDFactory.eINSTANCE.createInputPort();
-		i.setName(name);
-		mapping.put(scalaObj, i);
-	}
-	
-	public void createAssignment(Object scalaObj, boolean value) {
-		Assignment a = BDDFactory.eINSTANCE.createAssignment();
-		a.setValue(value);
-		mapping.put(scalaObj, a);
-	}
-	
-	public void createSubtree(Object scalaObj) {
-		Subtree sub = BDDFactory.eINSTANCE.createSubtree();
-		mapping.put(scalaObj, sub);
-	}
-	
-	public void createLeaf(Object scalaObj) {
-		Leaf l = BDDFactory.eINSTANCE.createLeaf();
-		mapping.put(scalaObj, l);
-	}
-
-	public void createBDD(Object scalaObj, String name) {		
-		bdd = BDDFactory.eINSTANCE.createBDD();
-		bdd.setName(name);
-		mapping.put(scalaObj, bdd);
-	}
-}
diff --git a/solutions/RSync/src/main/java/ttc2019/metamodels/create/LoadEObject.java b/solutions/RSync/src/main/java/ttc2019/metamodels/create/LoadEObject.java
index 6c3d8e64eb14fa81882733ae8aa3a342c35a218b..f575bb5cc31edfb32bc63bedcdd50aabf687bb95 100644
--- a/solutions/RSync/src/main/java/ttc2019/metamodels/create/LoadEObject.java
+++ b/solutions/RSync/src/main/java/ttc2019/metamodels/create/LoadEObject.java
@@ -32,13 +32,10 @@ public class LoadEObject {
 		return ressourceModel.getContents().get(0);
 	}
 
-	public EObject load(String pathMeta, String pathInstance) throws IOException {
+	public EObject loadOptimized(String pathMeta, String pathInstance) throws IOException {
 		ResourceSet resourceSet = new ResourceSetImpl();
 		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore", new EcoreResourceFactoryImpl());
 		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ttmodel", new IntrinsicIDXMIResourceFactoryImpl());
-		//resourceSet.getResourceFactoryRegistry.getExtensionToFactoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl());
-
-		//resourceSet.getLoadOptions().put(XMIResource.OPTION_DEFER_IDREF_RESOLUTION, true);
 			    
 		Resource ressourceMeta = resourceSet.getResource(URI.createFileURI(pathMeta), true);
 		EObject packageMeta = ressourceMeta.getContents().get(0);
@@ -54,10 +51,9 @@ public class LoadEObject {
 		return ressourceModel.getContents().get(0);
 	}
 	
-	public TruthTable loadTT(String pathMeta, String pathInstance) throws IOException {
+	public TruthTable loadOptimizedTruthTable(String pathMeta, String pathInstance) throws IOException {
 		TTPackage.eINSTANCE.getName();
 		ResourceSet rs = new ResourceSetImpl();
-		//rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl());
 		rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new IntrinsicIDXMIResourceFactoryImpl());
 		rs.getLoadOptions().put(XMIResource.OPTION_DEFER_IDREF_RESOLUTION, true);
 		Resource rTT = rs.getResource(URI.createFileURI(pathInstance), true);
@@ -69,26 +65,5 @@ public class LoadEObject {
 
 		TruthTable tt = (TruthTable) rTT.getContents().get(0);
 		return tt;
-		
-		
-		/*ResourceSet resourceSet = new ResourceSetImpl();
-		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore", new EcoreResourceFactoryImpl());
-		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ttmodel", new IntrinsicIDXMIResourceFactoryImpl());
-		//resourceSet.getResourceFactoryRegistry.getExtensionToFactoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl());
-
-		//resourceSet.getLoadOptions().put(XMIResource.OPTION_DEFER_IDREF_RESOLUTION, true);
-			    
-		Resource ressourceMeta = resourceSet.getResource(URI.createFileURI(pathMeta), true);
-		EObject packageMeta = ressourceMeta.getContents().get(0);
-			    
-		resourceSet.getPackageRegistry().put("https://www.transformation-tool-contest.eu/2019/tt", packageMeta);
-		Resource ressourceModel = resourceSet.getResource(URI.createURI(pathInstance), true);
-		
-		Map<String, Object> loadOptions = new HashMap<>();
-		loadOptions.put(XMIResource.OPTION_DEFER_IDREF_RESOLUTION, true);
-	    loadOptions.put(XMIResource.OPTION_USE_PARSER_POOL, new XMLParserPoolImpl());
-	    loadOptions.put(XMIResource.OPTION_USE_XML_NAME_TO_FEATURE_MAP, new HashMap<>());
-	    ressourceModel.load(loadOptions);
-		return (TruthTable)ressourceModel.getContents().get(0);*/
 	}
 }
diff --git a/solutions/RSync/src/main/java/ttc2019/metamodels/create/Validator.java b/solutions/RSync/src/main/java/ttc2019/metamodels/create/Validator.java
deleted file mode 100644
index dca87508d20803aa1faf242a4053af522571dec4..0000000000000000000000000000000000000000
--- a/solutions/RSync/src/main/java/ttc2019/metamodels/create/Validator.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package ttc2019.metamodels.create;
-
-import java.io.File;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
-
-import ttc2019.metamodels.bdd.Assignment;
-import ttc2019.metamodels.bdd.BDD;
-import ttc2019.metamodels.bdd.BDDPackage;
-import ttc2019.metamodels.bdd.InputPort;
-import ttc2019.metamodels.bdd.Leaf;
-import ttc2019.metamodels.bdd.Subtree;
-import ttc2019.metamodels.bdd.Tree;
-import ttc2019.metamodels.tt.Cell;
-import ttc2019.metamodels.tt.Row;
-import ttc2019.metamodels.tt.TTPackage;
-import ttc2019.metamodels.tt.TruthTable;
-
-/**
- * Validates that a given BDD model corresponds to a given truth table: it gives
- * the same outputs for the same inputs. We essentially "run" the BDD on the same
- * inputs as the row, and we check that assignments match those of the TT.
- */
-public class Validator {
-
-	private boolean validate(TruthTable tt, BDD bdd) {
-		if (tt.getPorts().size() != bdd.getPorts().size()) {
-			System.err.println(String.format(
-				"TT and BDD have different number of ports (TT = %d, BDD = %d)",
-				tt.getPorts().size(), bdd.getPorts().size()));
-			return false;
-		}
-
-		int iRow = 0;
-		for (Row ttRow : tt.getRows()) {
-			if (!validate(iRow, ttRow, bdd.getTree())) {
-				return false;
-			}
-			iRow++;
-		}
-		return true;
-	}
-
-	private boolean validate(int iRow, Row ttRow, Tree tree) {
-		final List<Assignment> assignments = findAssignments(ttRow, tree); 
-
-		for (Assignment a : assignments) {
-			final String oPortName = a.getPort().getName();
-			final boolean expectedResult = getExpectedResult(ttRow, oPortName);
-			if (expectedResult != a.isValue()) {
-				System.err.println(String.format("Row %d of TT produces unexpected result %s in BDD", iRow, a.isValue()));
-				return false;
-			}
-		}
-
-		// No mismatches found!
-		return true;
-	}
-
-	private boolean getExpectedResult(Row ttRow, String oPortName) {
-		for (Cell c : ttRow.getCells()) {
-			if (c.getPort() instanceof ttc2019.metamodels.tt.OutputPort && c.getPort().getName().equals(oPortName)) {
-				return c.isValue();
-			}
-		}
-		throw new NoSuchElementException("Could not find output port " + oPortName + " in the cells of the truth table");
-	}
-
-	private List<Assignment> findAssignments(Row ttRow, Tree tree) {
-		if (tree instanceof Leaf) {
-			Leaf leaf = (Leaf) tree;
-			return leaf.getAssignments();
-		} else if (tree instanceof Subtree) {
-			Subtree sb = (Subtree) tree;
-			InputPort sbInputPort = sb.getPort();
-			for (Cell c : ttRow.getCells()) {
-				// Port must be an input and have the same name
-				if (c.getPort() instanceof ttc2019.metamodels.tt.InputPort && c.getPort().getName().equals(sbInputPort.getName())) {
-					return findAssignments(ttRow, c.isValue() ? sb.getTreeForOne() : sb.getTreeForZero());
-				}
-			}
-			throw new NoSuchElementException("Could not find input port " + sbInputPort.getName() + " in the cells of the truth table");
-		} else {
-			throw new IllegalArgumentException("Tree must be a subtree or a leaf");
-		}
-	}
-
-	public void validate(String ttName, String bddName) {
-		final File fInputTT = new File(ttName);
-		final File fOutputBDD = new File(bddName);
-
-		try {
-			// We only need to get these two metamodels loaded
-			TTPackage.eINSTANCE.getName();
-			BDDPackage.eINSTANCE.getName();
-			
-			ResourceSet rs = new ResourceSetImpl();
-			rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl());
-			Resource rTT = rs.getResource(URI.createFileURI(fInputTT.getCanonicalPath()), true);
-			Resource rBDD = rs.getResource(URI.createFileURI(fOutputBDD.getCanonicalPath()), true);
-
-			TruthTable tt = (TruthTable) rTT.getContents().get(0);
-			BDD bdd = (BDD) rBDD.getContents().get(0);
-
-			final boolean valid = new Validator().validate(tt, bdd);
-			if (valid) {
-				System.out.println(String.format("BDD %2$s matches TT %1$s: all OK", fInputTT.getName(), fOutputBDD.getName()));
-			} else {
-				System.err.println(String.format("BDD %2$s does not match TT %1$s: see issues above", fInputTT.getName(), fOutputBDD.getName()));
-				System.exit(2);
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-			System.exit(255);
-		}
-	}
-}
diff --git a/solutions/RSync/src/main/scala/ttc2019/CompleteTTCProcess.scala b/solutions/RSync/src/main/scala/ttc2019/CompleteTTCProcess.scala
index 8225475f2e68705a3d8babc024078240084128b3..82dfc485c70b9d16361e10c6c52906a8cc3de072 100644
--- a/solutions/RSync/src/main/scala/ttc2019/CompleteTTCProcess.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/CompleteTTCProcess.scala
@@ -1,6 +1,5 @@
 package ttc2019
 
-import ttc2019.metamodels.create.Validator
 import org.rosi_project.model_management.core.SynchronizationCompartment
 import org.rosi_project.model_management.core.RsumCompartment
 import org.rosi_project.model_management.core.ModelElementLists
@@ -8,10 +7,12 @@ import org.rosi_project.model_management.sync.IIntegrationCompartment
 import ttc2019.metamodels.tt.TruthTable
 import ttc2019.worksync._
 import ttc2019.worksum._
+import ttc2019.metamodels.create.Launcher
 
-/** The `CompleteTTCProcess` executes the entire transformation workflow. Its methods are inspired
-  * by the different phases that the benchmark is expecting.
-  */
+/**
+ * The `CompleteTTCProcess` executes the entire transformation workflow. Its methods are inspired
+ * by the different phases that the benchmark is expecting.
+ */
 object CompleteTTCProcess extends App {
 
   SynchronizationCompartment combine RsumCompartment
@@ -20,60 +21,73 @@ object CompleteTTCProcess extends App {
   var integrate: IIntegrationCompartment = _
   var writeOut: IWriteOutputModel = _
   var loader: TTCLoader = _
-  var validator: Validator = _
+  var validator: Launcher = _
   var saver: TruthTable = _
   var processConfig: TTCProcessConfiguration = _
 
-  /** Performs necessary setup instructions such as loading the ecore meta-model.
-    *
-    * @param processConfig contains the necessary file locations
-    */
+  /**
+   * Performs necessary setup instructions such as loading the ecore meta-model.
+   *
+   * @param processConfig contains the necessary file locations
+   */
   def initialize(processConfig: TTCProcessConfiguration): Unit = {
     val sync = true
+    val bdt = false
     loader = new TTCLoader
-    validator = new Validator
+    validator = new Launcher
     if (sync) {
       ctts = new CreateTruthTableSync()
-      integrate = BdtSyncIntegration
-      writeOut = WriteSyncBdtOutput
+      if (bdt) {
+        integrate = BdtSyncIntegration
+        writeOut = WriteSyncBdtOutput
+      } else {
+        integrate = BddSyncIntegration
+        writeOut = WriteSyncBddOutput
+      }
     } else {
       ctts = new CreateTruthTableSum()
       integrate = BdtSumIntegration
       writeOut = WriteSumBdtOutput
     }
     this.processConfig = processConfig
-    saver = loader.javaTTfromEcore(processConfig.ttEcoreName, processConfig.ttFileName)
+    saver = loader.javaOptimizedTTJavaEcore(processConfig.ttEcoreName, processConfig.ttFileName)
   }
 
-  /** Loads the truth table.
-    */
+  /**
+   * Loads the truth table.
+   */
   def load(): Unit = loader.createTruthTableRSYNCInstance(saver, ctts)
 
-  /** Transforms the truth table instance to a binary decision diagram.
-    */
+  /**
+   * Transforms the truth table instance to a binary decision diagram.
+   */
   def run(): Unit = SynchronizationCompartment.integrateNewModel(integrate)
 
-  /** Shows all created TT and BDD elements '''after transformation'''.
-    */
+  /**
+   * Shows all created TT and BDD elements '''after transformation'''.
+   */
   def printModelElements(): Unit = ModelElementLists.printFromPackage("sync.bdd.BDD")
 
-  /** Persists the BDD in the File system (according to the
-    * [[TTCProcessConfiguration process configuration]] specified during
-    * [[initialize() initialization]] '''after transformation'''.
-    */
+  /**
+   * Persists the BDD in the File system (according to the
+   * [[TTCProcessConfiguration process configuration]] specified during
+   * [[initialize() initialization]] '''after transformation'''.
+   */
   def writeBdd(): Unit = writeOut.generateEverything(processConfig.bddFileName)
 
-  /** Checks, whether the generated BDD and the original TT work as expected (after
-    * transformation!).
-    */
-  def validateModelEquality(): Unit = validator.validate(processConfig.ttFileName, processConfig.bddFileName)
+  /**
+   * Checks, whether the generated BDD and the original TT work as expected (after
+   * transformation!).
+   */
+  def validateModelEquality(): Unit = validator.launch(processConfig.ttFileName, processConfig.bddFileName)
 
-  /** Runs the entire transformation process at once.
-    *
-    * That is initialization, loading and running as the core part, as well as printing the model,
-    * writing the generated BDD and validating as extensions of the minimal workflow will be
-    * executed.
-    */
+  /**
+   * Runs the entire transformation process at once.
+   *
+   * That is initialization, loading and running as the core part, as well as printing the model,
+   * writing the generated BDD and validating as extensions of the minimal workflow will be
+   * executed.
+   */
   def executeEntireProcess(processConfig: TTCProcessConfiguration): Unit = {
     initialize(processConfig)
     load()
diff --git a/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableDirectSync.scala b/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableDirectSync.scala
index 4278ac96194287d1427203526e1332916e873e54..79615f6f1308fe26724d2ae1bc27fef9b46d79ba 100644
--- a/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableDirectSync.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableDirectSync.scala
@@ -5,7 +5,6 @@ import org.eclipse.emf.ecore.EObject
 
 class CreateTruthTableDirectSync extends ICreateTruthTable {
   
-  //var mapping: Map[EObject, Object] = Map.empty
   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()
@@ -16,44 +15,34 @@ class CreateTruthTableDirectSync extends ICreateTruthTable {
   }
   
   def createInputPort(name: String, id: EObject): Unit = {
-    //mapping += (id -> new InputPort(name, Set.empty, null, null))
     ports.put(id, new InputPort(name, Set.empty, null, null))
   }
   
   def createOutputPort(name: String, id: EObject): Unit = {
-    //mapping += (id -> new OutputPort(name, Set.empty, null, null))
     ports.put(id, new OutputPort(name, Set.empty, null, null))
   }
   
   def createRow(id: EObject): Unit = {
-    //mapping += (id -> new Row(Set.empty, null, null))
     rows.put(id, new Row(Set.empty, null, null))
   }
   
   def createCell(value: Boolean, id: EObject): Unit = {
-    //mapping += (id -> new Cell(value, null, null, null))
     cells.put(id, new Cell(value, null, null, null))
   }
   
   def createTruthTableRowsRow(tt: EObject, row: EObject): Unit = {
-    //val t = mapping.get(tt).get.asInstanceOf[TruthTable]
-    //val r = mapping.get(row).get.asInstanceOf[Row]
     val r = rows.get(row)
     truthttable.addRows(r)
     r.setOwner(truthttable)
   }
   
   def createTruthTablePortsPort(tt: EObject, port: EObject): Unit = {
-    //val t = mapping.get(tt).get.asInstanceOf[TruthTable]
-    //val p = mapping.get(port).get.asInstanceOf[Port]
     val p = ports.get(port)
     truthttable.addPorts(p)
     p.setOwner(truthttable)
   }
   
   def createRowCellsCell(row: EObject, cell: EObject): Unit = {
-    //val c = mapping.get(cell).get.asInstanceOf[Cell]
-    //val r = mapping.get(row).get.asInstanceOf[Row]
     val c = cells.get(cell)
     val r = rows.get(row)
     c.setOwner(r)
@@ -61,8 +50,6 @@ class CreateTruthTableDirectSync extends ICreateTruthTable {
   }
   
   def createCellPortPort(cell: EObject, port: EObject): Unit = {
-    //val c = mapping.get(cell).get.asInstanceOf[Cell]
-    //val p = mapping.get(port).get.asInstanceOf[Port]
     val c = cells.get(cell)
     val p = ports.get(port)
     c.setPort(p)
diff --git a/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableSync.scala b/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableSync.scala
index c0f4371c734f563778e0d9a9fb4fd4cb13cc6b2d..12bd89f545c8e34d62b3da8d6f6d03bc46755123 100644
--- a/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableSync.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableSync.scala
@@ -2,70 +2,55 @@ package ttc2019
 
 import sync.tt._
 import org.eclipse.emf.ecore.EObject
-//import scala.collection.mutable.Map
 
 class CreateTruthTableSync extends ICreateTruthTable {
   
-  //var mapping: Map[EObject, Object] = Map.empty 
-  var mapping: java.util.Map[EObject, Object] = new java.util.HashMap()
+  var mapping: Map[EObject, Object] = Map.empty 
   
   def createTruthTable(name: String, id: EObject): Unit = {
-    //mapping += (id -> new TruthTable(name, Set.empty, Set.empty, null))
-    mapping.put(id, new TruthTable(name, Set.empty, Set.empty, null))
+    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))
-    mapping.put(id, new InputPort(name, Set.empty, null, null))
+    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))
-    mapping.put(id, new OutputPort(name, Set.empty, null, null))
+    mapping += (id -> new OutputPort(name, Set.empty, null, null))
   }
   
   def createRow(id: EObject): Unit = {
-    //mapping += (id -> new Row(Set.empty, null, null))
-    mapping.put(id, new Row(Set.empty, null, null))
+    mapping += (id -> new Row(Set.empty, null, null))
   }
   
   def createCell(value: Boolean, id: EObject): Unit = {
-    //mapping += (id -> new Cell(value, null, null, null))
-    mapping.put(id, new Cell(value, null, null, null))
+    mapping += (id -> new Cell(value, null, null, null))
   }
   
   def createTruthTableRowsRow(tt: EObject, row: EObject): Unit = {
-    //val t = mapping.get(tt).get.asInstanceOf[TruthTable]
-    //val r = mapping.get(row).get.asInstanceOf[Row]
-    val t = mapping.get(tt).asInstanceOf[TruthTable]
-    val r = mapping.get(row).asInstanceOf[Row]
+    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 = {
-    //val t = mapping.get(tt).get.asInstanceOf[TruthTable]
-    //val p = mapping.get(port).get.asInstanceOf[Port]
-    val t = mapping.get(tt).asInstanceOf[TruthTable]
-    val p = mapping.get(port).asInstanceOf[Port]
+    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 = {
-    //val c = mapping.get(cell).get.asInstanceOf[Cell]
-    //val r = mapping.get(row).get.asInstanceOf[Row]
-    val c = mapping.get(cell).asInstanceOf[Cell]
-    val r = mapping.get(row).asInstanceOf[Row]
+    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 = {
-    //val c = mapping.get(cell).get.asInstanceOf[Cell]
-    //val p = mapping.get(port).get.asInstanceOf[Port]
-    val c = mapping.get(cell).asInstanceOf[Cell]
-    val p = mapping.get(port).asInstanceOf[Port]
+    val c = mapping.get(cell).get.asInstanceOf[Cell]
+    val p = mapping.get(port).get.asInstanceOf[Port]
     c.setPort(p)
     p.addCells(c)
   }
diff --git a/solutions/RSync/src/main/scala/ttc2019/TTCLoader.scala b/solutions/RSync/src/main/scala/ttc2019/TTCLoader.scala
index 8934cb238531cbfd2124f642db4a717f043d4940..0bbeea80660292ec433334107933bff2fc17e3c3 100644
--- a/solutions/RSync/src/main/scala/ttc2019/TTCLoader.scala
+++ b/solutions/RSync/src/main/scala/ttc2019/TTCLoader.scala
@@ -25,37 +25,29 @@ class TTCLoader {
    *
    * @param path where to find the model
    * @return the model described by the XML
-   */
-  def javaLoadEcore(pathMeta: String, pathInstance: String): EObject = {
+   */  
+  def javaOptimizedTTJavaEcore(pathMeta: String, pathInstance: String): TruthTable = {
     require(null != pathMeta && pathMeta.nonEmpty && null != pathInstance && pathInstance.nonEmpty)
-
     val loader = new LoadEObject
-    return loader.load(pathMeta, pathInstance)
+    return loader.loadOptimizedTruthTable(pathMeta, pathInstance)
   }
   
-  def javaSimpleLoadEcore(pathMeta: String, pathInstance: String): EObject = {
+  def loadOptimizedJavaEcore(pathMeta: String, pathInstance: String): EObject = {
     require(null != pathMeta && pathMeta.nonEmpty && null != pathInstance && pathInstance.nonEmpty)
-
     val loader = new LoadEObject
-    return loader.loadSimple(pathMeta, pathInstance)
+    return loader.loadOptimized(pathMeta, pathInstance)
   }
   
-  def javaTTfromEcore(pathMeta: String, pathInstance: String): TruthTable = {
+  def loadSimpleJavaEcore(pathMeta: String, pathInstance: String): EObject = {
     require(null != pathMeta && pathMeta.nonEmpty && null != pathInstance && pathInstance.nonEmpty)
-
     val loader = new LoadEObject
-    return loader.loadTT(pathMeta, pathInstance)
+    return loader.loadSimple(pathMeta, pathInstance)
   }
   
-  def scalaLoadEcore(pathMeta: String, pathInstance: String): EObject = {
+  def loadScalaEcore(pathMeta: String, pathInstance: String): EObject = {
     require(null != pathMeta && pathMeta.nonEmpty && null != pathInstance && pathInstance.nonEmpty)
 
     val resourceSet = new ResourceSetImpl();
-    /*resourceSet.getLoadOptions().put(XMLResource.OPTION_DEFER_ATTACHMENT, true.asInstanceOf[Object]);
-		resourceSet.getLoadOptions().put(XMLResource.OPTION_USE_DEPRECATED_METHODS, true.asInstanceOf[Object]);
-    resourceSet.getLoadOptions().put(XMLResource.OPTION_DEFER_IDREF_RESOLUTION, true.asInstanceOf[Object])
-  	resourceSet.getResourceFactoryRegistry.getExtensionToFactoryMap.put("ecore", new EcoreResourceFactoryImpl())
-    resourceSet.getResourceFactoryRegistry.getExtensionToFactoryMap.put("ttmodel", new IntrinsicIDXMIResourceFactoryImpl())*/
     resourceSet.getResourceFactoryRegistry.getExtensionToFactoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl())