diff --git a/src/main/java/tmltranslator/TMLModeling.java b/src/main/java/tmltranslator/TMLModeling.java
index 59b987ddc942840c93979dff1253bd8d401d1d77..49a9a81230e9d7df01737e9ae6d34b628bf1ff71 100755
--- a/src/main/java/tmltranslator/TMLModeling.java
+++ b/src/main/java/tmltranslator/TMLModeling.java
@@ -697,6 +697,37 @@ public class TMLModeling<E> {
         return null;
     }
 
+
+    public List<TMLElement> getAllElementsWithName(String name) {
+        Vector<TMLElement> elts = new Vector<>();
+
+        for(TMLTask task: tasks) {
+            if (task.getName().compareTo(name) == 0) {
+                elts.add(task);
+            }
+        }
+
+        for(TMLChannel ch: channels) {
+            if (ch.getName().compareTo(name) == 0) {
+                elts.add(ch);
+            }
+        }
+
+        for(TMLEvent evt: events) {
+            if (evt.getName().compareTo(name) == 0) {
+                elts.add(evt);
+            }
+        }
+
+        for(TMLRequest req: requests) {
+            if (req.getName().compareTo(name) == 0) {
+                elts.add(req);
+            }
+        }
+
+        return elts;
+    }
+
     public List<TMLTask> getTasks() {
         return tasks;
     }
@@ -753,7 +784,7 @@ public class TMLModeling<E> {
                 list.add(ch);
             }
             for (TMLTask task: ch.getOriginTasks()){
-            	if (task ==t){
+            	if (task == t){
             		list.add(ch);
             	}
             }
diff --git a/src/main/java/tmltranslator/TMLSyntaxChecking.java b/src/main/java/tmltranslator/TMLSyntaxChecking.java
index 23236b9df5f47e58457e5da8828a3ea5c38e2ee4..3f935dfef75c002f787cb4027d5f29d141e78695 100755
--- a/src/main/java/tmltranslator/TMLSyntaxChecking.java
+++ b/src/main/java/tmltranslator/TMLSyntaxChecking.java
@@ -48,10 +48,7 @@ import myutil.TraceManager;
 import tmltranslator.tomappingsystemc2.DiploSimulatorCodeGenerator;
 
 import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
 
 
 /**
@@ -78,6 +75,7 @@ public class TMLSyntaxChecking {
     private final String NO_NEXT_OPERATOR_ERROR = "No next operator";
     private final String SAME_PORT_NAME = "Two ports have the same name";
     private final String WRONG_PARAMS = "The number of params is not compatible";
+    private final String DUPLICATE_NAMES = "Two elements have the same name";
 
     private final String TOO_MANY_MEMORIES = "Channel is mapped on more than one memory";
     private final String INVALID_CHANNEL_PATH = "Channel path is invalid";
@@ -118,6 +116,7 @@ public class TMLSyntaxChecking {
 
         TraceManager.addDev("Checking syntax of TML Mapping/ Modeling");
         if (!syntaxCheckForMappingOnly) {
+            checkDuplicateNames();
 
             checkReadAndWriteInChannelsEventsAndRequests();
 
@@ -208,6 +207,41 @@ public class TMLSyntaxChecking {
         }
     }
 
+
+    public void checkDuplicateNames() {
+        List<TMLElement> elts;
+
+        for(TMLTask task: tmlm.getTasks()) {
+            elts = tmlm.getAllElementsWithName(task.getName());
+            if (elts.size() > 1) {
+                addError(null, null, DUPLICATE_NAMES + ": invalid task name " + task.getName(), TMLError.ERROR_STRUCTURE);
+            }
+        }
+
+        for(TMLChannel ch: tmlm.getChannels()) {
+            elts = tmlm.getAllElementsWithName(ch.getName());
+            if (elts.size() > 1) {
+                addError(null, null, DUPLICATE_NAMES + ": invalid channel name " + ch.getName(), TMLError.ERROR_STRUCTURE);
+            }
+        }
+
+        for(TMLEvent evt: tmlm.getEvents()) {
+            elts = tmlm.getAllElementsWithName(evt.getName());
+            if (elts.size() > 1) {
+                addError(null, null, DUPLICATE_NAMES + ": invalid event name " + evt.getName(), TMLError.ERROR_STRUCTURE);
+            }
+        }
+
+        for(TMLRequest req: tmlm.getRequests()) {
+            elts = tmlm.getAllElementsWithName(req.getName());
+            if (elts.size() > 1) {
+                addError(null, null, DUPLICATE_NAMES + ": invalid request name " + req.getName(), TMLError.ERROR_STRUCTURE);
+            }
+        }
+
+
+    }
+
     //added by minh hiep
     public void checkAValidPortName() {
         List<TMLChannel> tmlChannels = tmlm.getChannels();
diff --git a/src/main/java/tmltranslator/TMLTask.java b/src/main/java/tmltranslator/TMLTask.java
index 63eac9b8fe5a1503d04a830d134cb898242fd769..aed8f53460e78f0640902f589b9781867baef02b 100755
--- a/src/main/java/tmltranslator/TMLTask.java
+++ b/src/main/java/tmltranslator/TMLTask.java
@@ -389,9 +389,9 @@ public class TMLTask extends TMLElement {
         writeTMLChannelsList.add(_ch);
     }
 
-    public List<TMLChannel> getTMLChannels() {
+    /*public List<TMLChannel> getTMLChannels() {
         return new ArrayList<TMLChannel>(channelsList);
-    }
+    }*/
 
     public List<TMLChannel> getReadTMLChannels() {
         return new ArrayList<TMLChannel>(readTMLChannelsList);
diff --git a/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java b/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
index 60e391a4fcf9315fb2745b85dad826234e624b04..847d25b3aa8d861a07604dc66a7e9b7b47dc34be 100644
--- a/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
+++ b/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
@@ -244,9 +244,11 @@ public class MappedSystemCTask {
             constSig = reference + "(ID iID, Priority iPriority, std::string iName, FPGA** iCPUs, unsigned int iNumOfCPUs" + CR;
         }
 
+        TraceManager.addDev("\n***** Task name:" + task.getName());
 
 
         for (TMLChannel ch : channels) {
+            TraceManager.addDev("Adding ch " + ch.getExtendedName());
             constSig += ", TMLChannel* " + ch.getExtendedName() + CR;
         }
         for (TMLEvent evt : events) {
diff --git a/src/main/java/tmltranslator/tonetwork/Link.java b/src/main/java/tmltranslator/tonetwork/Link.java
index 1784f6ec90b3b029b55ae234194697d0aaff1939..9f402ea684f73f64b22fc188a7e999b84b13c06f 100644
--- a/src/main/java/tmltranslator/tonetwork/Link.java
+++ b/src/main/java/tmltranslator/tonetwork/Link.java
@@ -132,7 +132,7 @@ public class Link {
 
         feedbackPerVC = new TMLEvent[nbOfVCs];
         for(int i=0; i<nbOfVCs; i++) {
-            feedbackPerVC[i] = new TMLEvent("Feedback__" + getNaming(),
+            feedbackPerVC[i] = new TMLEvent("Feedback__" + getNaming() + "_" + i,
                     null, 8, true);
             tmlm.addEvent(feedbackPerVC[i]);
         }
diff --git a/src/main/java/tmltranslator/tonetwork/TMAP2Network.java b/src/main/java/tmltranslator/tonetwork/TMAP2Network.java
index 51573d8786b9730bfad92f2fbff70d6e68319eb9..6cbb7ce3571f010abdde47bc85df856c2a20945a 100644
--- a/src/main/java/tmltranslator/tonetwork/TMAP2Network.java
+++ b/src/main/java/tmltranslator/tonetwork/TMAP2Network.java
@@ -56,8 +56,7 @@ import java.util.List;
  */
 public class TMAP2Network<E>  {
 
-    private TMLModeling<?> tmlmodeling;
-    private TMLArchitecture tmlarchi;
+
     private TMLMapping<?> tmlmapping;
 
     private boolean debug;
@@ -224,7 +223,8 @@ public class TMAP2Network<E>  {
         for(HwNode node: tmla.getHwNodes()) {
             if (node instanceof HwExecutionNode) {
                 nbOfHwExecutionNode ++;
-                newList.add(node);
+                //newList.add(node);
+
                 HwBus bus = new HwBus(node.getName() + "__bus");
                 HwMemory mem = new HwMemory(node.getName() + "__mem");
                 newList.add(bus);
@@ -239,6 +239,7 @@ public class TMAP2Network<E>  {
                 tmla.addHwLink(memToBus);
             }
         }
+
         for(HwNode node: newList) {
             tmla.addHwNode(node);
         }
@@ -317,8 +318,8 @@ public class TMAP2Network<E>  {
         }
 
         // Create routers around
-        tmlmodeling = tmlmapping.getTMLModeling();
-        tmlarchi = tmlmapping.getTMLArchitecture();
+        //tmlmodeling = tmlmapping.getTMLModeling();
+        //tmlarchi = tmlmapping.getTMLArchitecture();
 
         // *** Create links and update routers accordingly
         // For each router, I consider all routers that are around the considered one
@@ -331,7 +332,7 @@ public class TMAP2Network<E>  {
                         // There is a north router
                         // link to next
                         if (routers[i][j].playingTheRoleOfPrevious[k] == null) {
-                            Link to = new Link(tmlarchi, tmlmodeling, routers[i][j], routers[i-1][j], nbOfVCs);
+                            Link to = new Link(tmla, tmlm, routers[i][j], routers[i-1][j], nbOfVCs);
                             routers[i][j].playingTheRoleOfPrevious[k] = to;
                             routers[i-1][j].playingTheRoleOfNext[getFrom(k)] = to;
                         }
@@ -343,7 +344,7 @@ public class TMAP2Network<E>  {
                         // There is a south router
                         // link to next
                         if (routers[i][j].playingTheRoleOfPrevious[k] == null) {
-                            Link to = new Link(tmlarchi, tmlmodeling, routers[i][j], routers[i+1][j], nbOfVCs);
+                            Link to = new Link(tmla, tmlm, routers[i][j], routers[i+1][j], nbOfVCs);
                             routers[i][j].playingTheRoleOfPrevious[k] = to;
                             routers[i+1][j].playingTheRoleOfNext[getFrom(k)] = to;
                         }
@@ -354,7 +355,7 @@ public class TMAP2Network<E>  {
                         // There is an east router
                         // link to next
                         if (routers[i][j].playingTheRoleOfPrevious[k] == null) {
-                            Link to = new Link(tmlarchi, tmlmodeling, routers[i][j], routers[i][j+1], nbOfVCs);
+                            Link to = new Link(tmla, tmlm, routers[i][j], routers[i][j+1], nbOfVCs);
                             routers[i][j].playingTheRoleOfPrevious[k] = to;
                             routers[i][j+1].playingTheRoleOfNext[getFrom(k)] = to;
                         }
@@ -366,7 +367,7 @@ public class TMAP2Network<E>  {
                         // There is an east router
                         // link to next
                         if (routers[i][j].playingTheRoleOfPrevious[k] == null) {
-                            Link to = new Link(tmlarchi, tmlmodeling, routers[i][j], routers[i][j-1], nbOfVCs);
+                            Link to = new Link(tmla, tmlm, routers[i][j], routers[i][j-1], nbOfVCs);
                             routers[i][j].playingTheRoleOfPrevious[k] = to;
                             routers[i][j-1].playingTheRoleOfNext[getFrom(k)] = to;
                         }
@@ -382,7 +383,7 @@ public class TMAP2Network<E>  {
         // Associate an id to all channels
         int id = 0;
         IDsOfChannels = new HashMap<>();
-        for(TMLChannel ch: tmlmodeling.getChannels()) {
+        for(TMLChannel ch: tmlm.getChannels()) {
             IDsOfChannels.put(ch, "" + id);
         }
 
diff --git a/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java b/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java
index 7aa9303fac518739dccac74adee938518ba36987..bcd16f905f7aa515e7367358861d8e613065475b 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java
@@ -64,8 +64,9 @@ public class TaskINForDispatch extends TMLTask {
 
         this.nbOfVCs = nbOfVCs;
 
-        inputEvent.setDestinationTask(this);
-        inputChannel.setDestinationTask(this);
+        //inputEvent.setDestinationTask(this);
+        //inputChannel.setDestinationTask(this);
+
         for(TMLEvent evt: outputEvents) {
             evt.setOriginTask(this);
         }
@@ -90,6 +91,7 @@ public class TaskINForDispatch extends TMLTask {
         for(TMLEvent evt: outputEvents) {
             addTMLEvent(evt);
         }
+
         addReadTMLChannel(inputChannel);
         for(TMLChannel ch: outputChannels) {
             addWriteTMLChannel(ch);
diff --git a/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java b/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java
index 075c7d00803ca1ca75fb098318fa0984ff0bb50d..13def8b803a3d3066a18e23c3d4c5c07be69c300 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java
@@ -104,6 +104,14 @@ public class TaskMUXAppDispatch extends TMLTask {
         activity.addElement(loop);
         start.addNext(loop);
 
+
+        if (inputEvents.size() == 0) {
+            TMLStopState stopNoEvent = new TMLStopState("StopNoEvent", referenceObject);
+            activity.addElement(stopNoEvent);
+            loop.addNext(stopNoEvent);
+            return;
+        }
+
         TMLSelectEvt selectEvt = new TMLSelectEvt("selectEvent", referenceObject);
         activity.addElement(selectEvt);
         loop.addNext(selectEvt);
diff --git a/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java b/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java
index 7634d62656c1e86699dae73bfcb9363da1169036..31c12c293b3356e938e482525f18a41bcf50c87d 100644
--- a/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java
+++ b/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java
@@ -214,7 +214,7 @@ public class TranslatedRouter<E> {
             // We need one event par outputChannel
             Vector<TMLEvent> inputEventsOfMUX = new Vector<>();
             for (TMLChannel chan : outputChannels) {
-                TraceManager.addDev("Output Channel:" + chan.getName() + " VC=" + chan.getVC());
+                //TraceManager.addDev("Output Channel:" + chan.getName() + " VC=" + chan.getVC());
                 if (chan.getVC() == i) {
                     TMLEvent outputEventOfMux = new TMLEvent("EventMUXof__" + chan.getName(), null, 8,
                             true);
@@ -234,7 +234,7 @@ public class TranslatedRouter<E> {
             }
 
             // We also need an output event for MUX / NI_IN
-            TMLEvent eventForMUX_and_NI_IN = new TMLEvent("EventBetweenMUXandNI_IN_for_" + nameOfExecNode,
+            TMLEvent eventForMUX_and_NI_IN = new TMLEvent("EventBetweenMUXandNI_IN_for_" + nameOfExecNode + "_" + i,
                     null, 8, true);
             tmlm.addEvent(eventForMUX_and_NI_IN);
             eventForMUX_and_NI_IN.addParam(new TMLType(TMLType.NATURAL));
@@ -288,7 +288,8 @@ public class TranslatedRouter<E> {
         dispatchIns = new HashMap<>();
         for (int portNb = 0; portNb < NB_OF_PORTS; portNb++) {
             if (playingTheRoleOfNext[portNb] != null) {
-                TaskINForDispatch inDispatch = new TaskINForDispatch("IN_" + nameOfExecNode + "_" + portNb, null,
+                TaskINForDispatch inDispatch = new TaskINForDispatch("IN_" + nameOfExecNode + "_" + portNb +
+                        "_x" + xPos + "_y" + yPos, null,
                         null);
                 tmlm.addTask(inDispatch);
                 Vector<TMLEvent> listOfOutEvents = new Vector<TMLEvent>();
@@ -313,8 +314,10 @@ public class TranslatedRouter<E> {
                     // We have to use events / channels coming from another router
                     TMLEvent toInEvt = playingTheRoleOfNext[portNb].packetOut;
                     toInEvt.setDestinationTask(inDispatch);
+                    //tmlm.addEvent(toInEvt);
                     TMLChannel toInCh = playingTheRoleOfNext[portNb].chOutToIN;
                     toInCh.setDestinationTask(inDispatch);
+                    tmlm.addChannel(toInCh);
 
                     inDispatch.generate(nbOfVCs, toInEvt, toInCh, listOfOutEvents,
                             listOfOutChannels);
@@ -574,7 +577,7 @@ public class TranslatedRouter<E> {
     }
 
     public String getPositionNaming() {
-        return "_" + xPos + "_" + yPos;
+        return "_x" + xPos + "_y" + yPos;
     }
 
     public String toString() {
@@ -618,7 +621,7 @@ public class TranslatedRouter<E> {
             TraceManager.addDev("NULL bus");
         }
 
-        HwBridge mainBridge = new HwBridge("BridgeIntennal" + getPositionNaming());
+        HwBridge mainBridge = new HwBridge("BridgeInternal_" + getPositionNaming());
         tmla.addHwNode(mainBridge);
         tmla.makeHwLink(busToInternalDomain, mainBridge);
 
@@ -692,7 +695,7 @@ public class TranslatedRouter<E> {
                     HwMemory memINVC = new HwMemory("memINVC" + portNb + "_" + i + getPositionNaming());
                     tmla.addHwNode(memINVC);
                     tmlmap.addCommToHwCommNode(pktInChsVCs[portNb][i], memINVC);
-                    HwBus busINVC = new HwBus("busINVC" + portNb + "_" + i + getPositionNaming());
+                    HwBus busINVC = new HwBus("busINVC_p" + portNb + "_vc" + i + getPositionNaming());
                     tmla.addHwNode(busINVC);
                     tmla.makeHwLink(busINVC, cpuINVC);
                     tmla.makeHwLink(busINVC, memINVC);
@@ -707,7 +710,7 @@ public class TranslatedRouter<E> {
         // OUTVC and OUT
         for (int portNb = 0; portNb < NB_OF_PORTS; portNb++) {
             if (playingTheRoleOfPrevious[portNb] != null) {
-                // We have an IN on that port. Connects on the bus of the correcponding link
+                // We have an IN on that port. Connects on the bus of the corresponding link
                 HwCPU cpuOUT = new HwCPU("cpuOUT_" + portNb + getPositionNaming());
                 tmla.addHwNode(cpuOUT);
                 tmlmap.addTaskToHwExecutionNode(dispatchOuts.get(portNb), cpuOUT);
@@ -904,7 +907,7 @@ public class TranslatedRouter<E> {
                     // Once the sample has been sent, an event is sent to the input task of the router
                     // For a receiver, the event is first waited for, and then the read in the new channel is performed
 
-                    TMLChannel newChannel = new TMLChannel(ch.getName() + "__origin", ch.getReferenceObject());
+                    TMLChannel newChannel = new TMLChannel(ch.getName() + "__destination", ch.getReferenceObject());
                     newChannel.setType(TMLChannel.NBRNBW);
                     newChannel.setOriginTask(t);
                     newChannel.setDestinationTask(t);