diff --git a/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java b/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java
index fe9f1c62800299980ec01d0028c24f8cf5dd70ef..c7b6b1b23c9bf1a261aecac722d5adcf164d4d24 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java
@@ -41,6 +41,7 @@ package tmltranslator.tonetwork;
 
 import tmltranslator.*;
 
+import java.util.List;
 import java.util.Vector;
 
 
@@ -52,16 +53,14 @@ import java.util.Vector;
  * @version 1.0 11/03/2019
  */
 public class TaskMUXAppDispatch extends TMLTask {
-    protected int nbOfApps;
 
     public TaskMUXAppDispatch(String name, Object referenceToClass, Object referenceToActivityDiagram) {
         super(name, referenceToClass, referenceToActivityDiagram);
     }
 
     // Output Channels are given in the order of VCs
-    public void generate(int nbOfApps,   Vector<TMLEvent> inputEvents, TMLEvent outputEvent) {
+    public void generate(List<TMLEvent> inputEvents, TMLEvent outputEvent) {
 
-        this.nbOfApps = nbOfApps;
 
         // Attributes
         TMLAttribute pktlen = new TMLAttribute("pktlen", "pktlen", new TMLType(TMLType.NATURAL), "0");
@@ -95,7 +94,7 @@ public class TaskMUXAppDispatch extends TMLTask {
 
         // Branch for each app
 
-         for(int i=0; i<nbOfApps; i++) {
+         for(int i=0; i< inputEvents.size(); i++) {
              TMLWaitEvent waitEvt = new TMLWaitEvent("PacketEvent" + i, referenceObject);
             waitEvt.setEvent(inputEvents.get(i));
             waitEvt.addParam("pktlen");
diff --git a/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java b/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java
index 275658098c5aedd51834076a1b81e48cc8a5804b..8efb1edb02eb775c3db19ac46714ed89ceedd851 100644
--- a/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java
+++ b/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java
@@ -39,9 +39,11 @@
 
 package tmltranslator.tonetwork;
 
+import myutil.TraceManager;
 import tmltranslator.*;
 import ui.TGComponent;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Vector;
 
@@ -96,6 +98,78 @@ public class TranslatedRouter<E>  {
         String nameOfExecNode = noc.getHwExecutionNode(xPos, yPos);
         HwExecutionNode execNode = tmlmap.getTMLArchitecture().getHwExecutionNodeByName(nameOfExecNode);
 
+        if (nameOfExecNode == null) {
+            nameOfExecNode = "fakeCPU_" + xPos + "_" + yPos;
+        }
+
+
+        if (execNode == null) {
+            TraceManager.addDev("Could NOT find an exec node for (" + xPos + "," + yPos + ")");
+        } else {
+            TraceManager.addDev("Found an exec node for (" + xPos + "," + yPos + "): " + execNode.getName());
+        }
+
+        // Then, we need to find the channels starting from/arriving to a task mapped on this execNode
+        Vector<TMLChannel> inputChannels = new Vector<>();
+        Vector<TMLChannel> outputChannels = new Vector<>();
+        if (execNode != null) {
+            for(TMLChannel ch: channelsViaNoc) {
+                TMLTask origin = ch.getOriginTask();
+                TMLTask destination = ch.getDestinationTask();
+
+                if (origin != null) {
+                    // find on which CPU is mapped this task
+                    HwNode cpuOfOrigin = tmlmap.getHwNodeOf(origin);
+                    if (cpuOfOrigin == execNode) {
+                        TraceManager.addDev("Found an output channel:" + ch.getName());
+                        outputChannels.add(ch);
+                    }
+                }
+
+                if (destination != null) {
+                    // find on which CPU is mapped this task
+                    HwNode cpuOfDestination = tmlmap.getHwNodeOf(destination);
+                    if (cpuOfDestination == execNode) {
+                        TraceManager.addDev("Found an input channel:" + ch.getName());
+                        inputChannels.add(ch);
+                    }
+                }
+            }
+        }
+
+        // Now that we know all channels, we can generate the MUX tasks
+        // We need one event par outputChannel
+        HashMap<TMLChannel, TMLEvent> mapOfOutputChannels = new HashMap<>();
+        Vector<TMLEvent> inputEventsOfMUX = new Vector<>();
+        for(TMLChannel chan: outputChannels) {
+            TMLEvent outputEventOfMux = new TMLEvent("EventMUXof" + chan.getName(), null, 8,
+                    true);
+            mapOfOutputChannels.put(chan, outputEventOfMux);
+            inputEventsOfMUX.add(outputEventOfMux);
+            tmlm.addEvent(outputEventOfMux);
+        }
+
+        // We also need an output event for MUX / NI_IN
+        TMLEvent eventForMUX_and_NI_IN = new TMLEvent("EventBetweenMUXandNI_IN_for_" + nameOfExecNode,
+                null, 8, true);
+        tmlm.addEvent(eventForMUX_and_NI_IN);
+
+        // We can create the MUX task
+        TaskMUXAppDispatch muxTask = new TaskMUXAppDispatch("MUXof" + nameOfExecNode, null, null);
+        tmlm.addTask(muxTask);
+        muxTask.generate(inputEventsOfMUX, eventForMUX_and_NI_IN);
+
+
+        // Finally, we need to modify the src apps with the new event, and modifying the channel as well to write in the local memory
+
+
+        // All done for MUX
+
+
+
+
+
+
 
         // VC DISPATCHERS
         // One dispatcher per port