diff --git a/src/main/java/tmltranslator/dsez3engine/InputInstance.java b/src/main/java/tmltranslator/dsez3engine/InputInstance.java
index a9ff393cdf914acd5cc53d0ae8170ec4e4456a4d..3962e94e5da7f40a1f2b28a041f1debcb203f0b8 100644
--- a/src/main/java/tmltranslator/dsez3engine/InputInstance.java
+++ b/src/main/java/tmltranslator/dsez3engine/InputInstance.java
@@ -2,6 +2,7 @@ package tmltranslator.dsez3engine;
 
 import myutil.TraceManager;
 import tmltranslator.*;
+import ui.TGComponent;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -10,9 +11,9 @@ import java.util.List;
 public class InputInstance {
 
     private TMLArchitecture architecture;
-    private TMLModeling modeling;
+    private TMLModeling<TGComponent> modeling;
 
-    public InputInstance(TMLArchitecture architecture, TMLModeling modeling) {
+    public InputInstance(TMLArchitecture architecture, TMLModeling<TGComponent> modeling) {
         this.architecture = architecture;
         this.modeling = modeling;
     }
@@ -25,8 +26,7 @@ public class InputInstance {
         for (HwNode hwNode : architecture.getHwNodes()) {
             if (hwNode instanceof HwExecutionNode) {
 
-                if ((((HwExecutionNode) hwNode).supportOperation(tmlTask.getOperation()) == true) || (((HwExecutionNode) hwNode).getOperation() ==
-                        " "))
+                if ((((HwExecutionNode) hwNode).supportOperation(tmlTask.getOperation()) ) || (((HwExecutionNode) hwNode).getOperation().equals(" ")))
                     feasibleCPUs.add((HwExecutionNode) hwNode);
 
             }
@@ -113,7 +113,7 @@ public class InputInstance {
         return architecture;
     }
 
-    public TMLModeling getModeling() {
+    public TMLModeling<TGComponent> getModeling() {
         return modeling;
     }
 }
\ No newline at end of file
diff --git a/src/main/java/tmltranslator/dsez3engine/OptimizationModel.java b/src/main/java/tmltranslator/dsez3engine/OptimizationModel.java
index 38d962133c002a233be67b816547ea995bf3278f..45641eafa1a12c18dee224c929047e1dd8e3e655 100644
--- a/src/main/java/tmltranslator/dsez3engine/OptimizationModel.java
+++ b/src/main/java/tmltranslator/dsez3engine/OptimizationModel.java
@@ -3,6 +3,7 @@ package tmltranslator.dsez3engine;
 import com.microsoft.z3.*;
 import myutil.TraceManager;
 import tmltranslator.*;
+import ui.TGComponent;
 
 import javax.swing.*;
 import java.lang.reflect.Array;
@@ -17,6 +18,15 @@ public class OptimizationModel {
     private Map<String, Integer> optimizedSolutionX = new HashMap<String, Integer>();
     private Map<String, Integer> optimizedSolutionStart = new HashMap<String, Integer>();
     private InputInstance inputInstance;
+    private TMLMapping<TGComponent> tmlMapping;
+
+    public TMLMapping getTmlMapping() {
+        return tmlMapping;
+    }
+
+    public void setTmlMapping(TMLMapping<TGComponent> tmlMapping) {
+        this.tmlMapping = tmlMapping;
+    }
 
     public OptimizationModel(InputInstance inputInstance) {
         this.inputInstance = inputInstance;
@@ -774,6 +784,8 @@ public class OptimizationModel {
             Expr[][] optimized_result_X = new Expr[inputInstance.getModeling().getTasks().size()][inputInstance.getArchitecture().getCPUs().size()];
             Expr[] optimized_result_start = new Expr[inputInstance.getModeling().getTasks().size()];
 
+            tmlMapping = new TMLMapping<TGComponent>( inputInstance.getModeling(), inputInstance.getArchitecture(),false);
+
             outputToDisplay ="The optimal mapping solution is:\n\n";
 
             for ( Object task : inputInstance.getModeling().getTasks()) {
@@ -787,7 +799,18 @@ public class OptimizationModel {
                     TMLTask taskCast = (TMLTask)task;
 
                     if(Integer.parseInt(optimized_result_X[t][p].toString()) == 1){
+                        //mapping of task on hwExecutionNode
+                        tmlMapping.addTaskToHwExecutionNode(taskCast,(HwExecutionNode) hwNode);
+
+                        //mapping of R/W channels on local memory of hwExecutionNode TODO get(0)
+                        if(!taskCast.getReadChannels().isEmpty())
+                            tmlMapping.addCommToHwCommNode(taskCast.getReadChannels().get(0),inputInstance.getLocalMemoryOfHwExecutionNode(hwNode));
+
+                        if(!taskCast.getWriteChannels().isEmpty())
+                            tmlMapping.addCommToHwCommNode(taskCast.getWriteChannels().get(0),inputInstance.getLocalMemoryOfHwExecutionNode(hwNode));
+
                         outputToDisplay = outputToDisplay + "\n" + taskCast.getName() + " --> " + hwNode.getName();
+
                     }
 
                     optimizedSolutionX.put("X[" + taskCast.getName() + "][" + hwNode.getName() + "] = ", Integer.parseInt
diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java
index bdc3901673141daa6b91eb2cd213f01416ef460b..ae04ecf6a90df11743a74b17ccafd8f1cab2de27 100644
--- a/src/main/java/ui/MainGUI.java
+++ b/src/main/java/ui/MainGUI.java
@@ -4834,7 +4834,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Per
             return;
         }
 
-        TMLMapping map = gtm.getTMLMapping();
+        TMLMapping<TGComponent> map = gtm.getTMLMapping();
 
         if (map == null) {
             return;
diff --git a/src/main/java/ui/window/JDialogDSEZ3.java b/src/main/java/ui/window/JDialogDSEZ3.java
index 5f560569c84262e19a817404d465b03162a87499..09394d97e948c0300ac104ea82e8531d875ecc3f 100644
--- a/src/main/java/ui/window/JDialogDSEZ3.java
+++ b/src/main/java/ui/window/JDialogDSEZ3.java
@@ -52,6 +52,7 @@ import tmltranslator.TMLModeling;
 import tmltranslator.dsez3engine.InputInstance;
 import tmltranslator.dsez3engine.OptimizationModel;
 import tmltranslator.dsez3engine.OptimizationResult;
+import ui.TGComponent;
 import ui.util.IconManager;
 import ui.MainGUI;
 
@@ -113,7 +114,7 @@ public class JDialogDSEZ3 extends JDialog implements ActionListener, ListSelecti
 
     protected RshClient rshc;
 
-    private TMLMapping map;
+    private TMLMapping<TGComponent> map;
     private InputInstance inputInstance;
     private OptimizationModel optimizationModel;
 
@@ -121,7 +122,7 @@ public class JDialogDSEZ3 extends JDialog implements ActionListener, ListSelecti
     /*
      * Creates new form
      */
-    public JDialogDSEZ3(Frame f, MainGUI _mgui, String title, TMLMapping map, String dir) {
+    public JDialogDSEZ3(Frame f, MainGUI _mgui, String title, TMLMapping<TGComponent> map, String dir) {
         super(f, title, true);
 
         mgui = _mgui;
@@ -310,7 +311,7 @@ public class JDialogDSEZ3 extends JDialog implements ActionListener, ListSelecti
          outputText.append("\nPreparing input model for Z3\n");
         //   File testFile;
         TMLArchitecture tmla = map.getTMLArchitecture();
-        TMLModeling tmlm = map.getTMLModeling();
+        TMLModeling<TGComponent> tmlm = map.getTMLModeling();
 
         /*
         for(Object task : tmlm.getTasks()){
diff --git a/ttool/src/test/java/tmltranslator/dsez3engine/InputInstanceTest.java b/ttool/src/test/java/tmltranslator/dsez3engine/InputInstanceTest.java
index 1c806ac34f2df3d7ccf6efc356c5df182b334b14..3a4701c381fea1e983f0054b67541370ccb3ff90 100644
--- a/ttool/src/test/java/tmltranslator/dsez3engine/InputInstanceTest.java
+++ b/ttool/src/test/java/tmltranslator/dsez3engine/InputInstanceTest.java
@@ -11,13 +11,14 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import myutil.TraceManager;
+import ui.TGComponent;
 
 import static org.junit.Assert.*;
 
 public class InputInstanceTest {
 
   private TMLArchitecture tmla;
-  private TMLModeling tmlm;
+  private TMLModeling<TGComponent> tmlm;
   private InputInstance inputInstance;
   private OptimizationModel optimizationModel;
 
@@ -31,9 +32,9 @@ public class InputInstanceTest {
     optimizationModel = new OptimizationModel(inputInstance);
   }
 
-  private TMLModeling setUpTMLModeling() {
+  private TMLModeling<TGComponent> setUpTMLModeling() {
 
-    tmlm = new TMLModeling();
+    tmlm = new TMLModeling<TGComponent>();
 
 
     TMLTask taskA = new TMLTask("task__A", null, null);
@@ -267,7 +268,7 @@ public class InputInstanceTest {
     expectedList.add(inputInstance.getArchitecture().getHwCPUByName("MainCPU"));
     expectedList.add(inputInstance.getArchitecture().getHwCPUByName("dsp"));
 
-    TMLTask tempTask = (TMLTask) inputInstance.getModeling().getTasks().get(2);
+    TMLTask tempTask =  inputInstance.getModeling().getTasks().get(2);
 
 
     List<HwExecutionNode> actualList = new ArrayList<>();
@@ -289,7 +290,7 @@ public class InputInstanceTest {
 
     List<TMLTask> tempTasks = new ArrayList<>();
     for (int i = 0; i < inputInstance.getModeling().getTasks().size(); i++) {
-      tempTasks.add((TMLTask) inputInstance.getModeling().getTasks().get(i));
+      tempTasks.add( inputInstance.getModeling().getTasks().get(i));
     }
 
     assertEquals(inputInstance.getBufferIn( tempTasks.get(0)), 0);
@@ -304,7 +305,7 @@ public class InputInstanceTest {
   public void getBufferOut() {
     List<TMLTask> tempTasks = new ArrayList<>();
     for (int i = 0; i < inputInstance.getModeling().getTasks().size(); i++) {
-      tempTasks.add((TMLTask) inputInstance.getModeling().getTasks().get(i));
+      tempTasks.add(inputInstance.getModeling().getTasks().get(i));
     }
 
     assertEquals(inputInstance.getBufferOut( tempTasks.get(0)), 4);
@@ -332,7 +333,7 @@ public class InputInstanceTest {
     //a temporary list of the tasks
     List<TMLTask> tempTasks = new ArrayList<>();
     for (int i = 0; i < inputInstance.getModeling().getTasks().size(); i++) {
-      tempTasks.add((TMLTask) inputInstance.getModeling().getTasks().get(i));
+      tempTasks.add( inputInstance.getModeling().getTasks().get(i));
     }
     int expectedWcetA_CPU = 300;
     int expectedWcetA_dsp = 150;