diff --git a/src/main/java/tmltranslator/TMLChoice.java b/src/main/java/tmltranslator/TMLChoice.java
index 9a2f7aa31caeb755effb7fcc1dc08faf3de9560e..5b321e82fa3bc972b229c9c097056d7954c2310d 100755
--- a/src/main/java/tmltranslator/TMLChoice.java
+++ b/src/main/java/tmltranslator/TMLChoice.java
@@ -58,7 +58,14 @@ public class TMLChoice extends TMLActivityElement{
     }
 
     public void addGuard(String _g) {
-        guards.add(_g);
+        String g = _g.trim();
+        if(!(g.startsWith("["))) {
+            g = "[" + g;
+        }
+        if(!(g.endsWith("["))) {
+            g = g + "]";
+        }
+        guards.add(g);
     }
 
     public int getNbGuard() {
diff --git a/src/main/java/tmltranslator/TMLError.java b/src/main/java/tmltranslator/TMLError.java
index e839315cca2f3190977b3dad040a71b9a9969383..50f7c42a2714647f65e21264fb7aa3f683546605 100755
--- a/src/main/java/tmltranslator/TMLError.java
+++ b/src/main/java/tmltranslator/TMLError.java
@@ -68,4 +68,22 @@ public class TMLError {
     public TMLError(int _type) {
         type = _type;
     }
+
+    public String toString() {
+        String ret = "";
+        ret += message + ".";
+        if (task != null) {
+            ret += " Task: " + task.getName();
+        }
+        if (element != null) {
+            ret += " Activity element: " + element.getName();
+        }
+        if (referenceObject != null) {
+            ret += " Reference: " + referenceObject.toString();
+        }
+
+        return ret;
+    }
+
+
 }
\ No newline at end of file
diff --git a/src/main/java/tmltranslator/TMLMapping.java b/src/main/java/tmltranslator/TMLMapping.java
index 9ed708160bb39b0a605a2b3c3bd854141357a497..a586ba0b187f46f669c1e6d2efc57b1c4aa7adfb 100755
--- a/src/main/java/tmltranslator/TMLMapping.java
+++ b/src/main/java/tmltranslator/TMLMapping.java
@@ -855,7 +855,7 @@ public class TMLMapping<E> {
                     TraceManager.addDev("\n\nFORKTASK is  mapped: " + task.getName());
                 }
             } else {
-                TraceManager.addDev("Non fork task found: " + task.getName());
+                //TraceManager.addDev("Non fork task found: " + task.getName());
             }
             if (task.getName().startsWith("JOINTASK_")) {
                 if (!isTaskMapped(task)) {
diff --git a/src/main/java/tmltranslator/TMLSyntaxChecking.java b/src/main/java/tmltranslator/TMLSyntaxChecking.java
index 6d01fbb7b1dd4c49455234dcd870fd126bbb91f2..03e8ffca276ed0db5ff8e62151a1c3d3842abba2 100755
--- a/src/main/java/tmltranslator/TMLSyntaxChecking.java
+++ b/src/main/java/tmltranslator/TMLSyntaxChecking.java
@@ -77,6 +77,7 @@ public class TMLSyntaxChecking {
     private final String TIME_UNIT_ERROR = "unknown time unit";
     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 TOO_MANY_MEMORIES = "Channel is mapped on more than one memory";
     private final String INVALID_CHANNEL_PATH = "Channel path is invalid";
@@ -452,14 +453,22 @@ public class TMLSyntaxChecking {
                 } else if (elt instanceof TMLSendEvent) {
                     tmlase = (TMLSendEvent) elt;
                     evt = tmlase.getEvent();
-                    for (j = 0; j < tmlase.getNbOfParams(); j++) {
-                        action = tmlase.getParam(j);
-                        if ((action != null) && (action.length() > 0)) {
-                            type = evt.getType(j);
-                            if ((type == null) || (type.getType() == TMLType.NATURAL)) {
-                                parsing(t, elt, "actionnat", action);
-                            } else {
-                                parsing(t, elt, "actionbool", action);
+
+                    if (tmlase.getNbOfParams() != evt.getNbOfParams()) {
+                        addError(t, elt, WRONG_PARAMS + " between event " + evt.getName() +
+                                " (nb:" + evt.getNbOfParams() +
+                                ") and send event (nb:" + tmlase.getNbOfParams() + ") in task " + t.getTaskName(), TMLError.ERROR_BEHAVIOR);
+                    } else {
+
+                        for (j = 0; j < tmlase.getNbOfParams(); j++) {
+                            action = tmlase.getParam(j);
+                            if ((action != null) && (action.length() > 0)) {
+                                type = evt.getType(j);
+                                if ((type == null) || (type.getType() == TMLType.NATURAL)) {
+                                    parsing(t, elt, "actionnat", action);
+                                } else {
+                                    parsing(t, elt, "actionbool", action);
+                                }
                             }
                         }
                     }
@@ -467,26 +476,35 @@ public class TMLSyntaxChecking {
                 } else if (elt instanceof TMLWaitEvent) {
                     tmlwe = (TMLWaitEvent) elt;
                     evt = tmlwe.getEvent();
-                    //TraceManager.addDev("Nb of params of wait event:" + tmlwe.getNbOfParams());
-                    for (j = 0; j < tmlwe.getNbOfParams(); j++) {
-                        action = tmlwe.getParam(j).trim();
-                        if ((action != null) && (action.length() > 0)) {
-                            if (!(Conversion.isId(action))) {
-                                addError(t, elt, SYNTAX_ERROR_VARIABLE_EXPECTED + " in expression " + action, TMLError.ERROR_BEHAVIOR);
-                            } else {
-                                // Declared variable?
-                                attr = t.getAttributeByName(action);
-                                if (attr == null) {
-                                    addError(t, elt, UNDECLARED_VARIABLE + ": " + action + " in expression " + action, TMLError.ERROR_BEHAVIOR);
-                                    TraceManager.addDev("1 In task: " + t.getName() + " extended name:" + t.getNameExtension());
+                    //TraceManager.addDev("Nb of params of wait event:" + tmlwe.getNbOfParams() + " task=" + t.getTaskName());
+
+
+                    if (tmlwe.getNbOfParams() != evt.getNbOfParams()) {
+                        addError(t, elt, WRONG_PARAMS + " between event " + evt.getName() +
+                                " (nb:" + evt.getNbOfParams() +
+                                ") and wait event (nb:" + tmlwe.getNbOfParams() + ") in task " + t.getTaskName(), TMLError.ERROR_BEHAVIOR);
+                    } else {
+
+                        for (j = 0; j < tmlwe.getNbOfParams(); j++) {
+                            action = tmlwe.getParam(j).trim();
+                            if ((action != null) && (action.length() > 0)) {
+                                if (!(Conversion.isId(action))) {
+                                    addError(t, elt, SYNTAX_ERROR_VARIABLE_EXPECTED + " in expression " + action, TMLError.ERROR_BEHAVIOR);
                                 } else {
-                                    //TraceManager.addDev("Nb of params:" + tmlwe.getEvent().getNbOfParams() + " j:" + j);
-                                    if (tmlwe.getEvent().getType(j).getType() == 0) {
-                                        TraceManager.addDev("0");
-                                    }
-                                    if (attr.getType().getType() != tmlwe.getEvent().getType(j).getType()) {
-                                        TraceManager.addDev("Type0:" + attr.getType().getType() + " type1:" + tmlwe.getEvent().getType(j).getType());
-                                        addError(t, elt, VARIABLE_ERROR + " :" + action + " in expression " + action, TMLError.ERROR_BEHAVIOR);
+                                    // Declared variable?
+                                    attr = t.getAttributeByName(action);
+                                    if (attr == null) {
+                                        addError(t, elt, UNDECLARED_VARIABLE + ": " + action + " in expression " + action, TMLError.ERROR_BEHAVIOR);
+                                        TraceManager.addDev("1 In task: " + t.getName() + " extended name:" + t.getNameExtension());
+                                    } else {
+                                        //TraceManager.addDev("Nb of params:" + tmlwe.getEvent().getNbOfParams() + " j:" + j);
+                                        if (tmlwe.getEvent().getType(j).getType() == 0) {
+                                            TraceManager.addDev("0");
+                                        }
+                                        if (attr.getType().getType() != tmlwe.getEvent().getType(j).getType()) {
+                                            TraceManager.addDev("Type0:" + attr.getType().getType() + " type1:" + tmlwe.getEvent().getType(j).getType());
+                                            addError(t, elt, VARIABLE_ERROR + " :" + action + " in expression " + action, TMLError.ERROR_BEHAVIOR);
+                                        }
                                     }
                                 }
                             }
diff --git a/src/main/java/tmltranslator/TMLTask.java b/src/main/java/tmltranslator/TMLTask.java
index bb9240e9a11e8fb18690106d801ce52762e82823..63eac9b8fe5a1503d04a830d134cb898242fd769 100755
--- a/src/main/java/tmltranslator/TMLTask.java
+++ b/src/main/java/tmltranslator/TMLTask.java
@@ -113,6 +113,16 @@ public class TMLTask extends TMLElement {
         attributes.add(_tmla);
     }
 
+
+    public void addAttributeIfApplicable(TMLAttribute _tmla) {
+        for(TMLAttribute att: attributes) {
+            if (att.getName().compareTo(_tmla.getName()) == 0) {
+                return;
+            }
+        }
+        attributes.add(_tmla);
+    }
+
     public List<TMLAttribute> getAttributes() {
         return attributes;
     }
diff --git a/src/main/java/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java b/src/main/java/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java
index fba3e2257a2cbea5e623291b7fa32f8a8ec34e7b..9503391ce5f079731be73462270fccbbdb918c75 100644
--- a/src/main/java/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java
+++ b/src/main/java/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java
@@ -657,6 +657,8 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator
             final List<TMLEvent> events = new ArrayList<TMLEvent>(tmlmodeling.getEvents(task));
             final List<TMLRequest> requests = new ArrayList<TMLRequest>(tmlmodeling.getRequests(task));
 
+            //TraceManager.addDev("Handling task=" + task.getTaskName());
+
             final MappedSystemCTask mst = new MappedSystemCTask(task, channels, events, requests, tmlmapping, mappedChannels, mappedOnCPU);
             tasks.add(mst);
 
@@ -731,14 +733,14 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator
         for(HwCommunicationNode nodeS: path){
             pathS += nodeS.getName() + " ";
         }
-        TraceManager.addDev("Path=" + pathS);
+        //TraceManager.addDev("Path=" + pathS);
 
         if (reverseIn) {
             slaves.str += ",static_cast<Slave*>(0)";
         } else {
             //firstPart=startNode.getName() + "0";
             firstNode = startNode;
-            TraceManager.addDev("1. First node=" + firstNode);
+            //TraceManager.addDev("1. First node=" + firstNode);
         }
 
         for (final HwCommunicationNode commElem : path) {
@@ -747,14 +749,14 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator
                 final String memoryInstName = namesGen.memoryInstanceName((HwMemory) commElem);
                 slaves.str += ",static_cast<Slave*>(" + memoryInstName + "),static_cast<Slave*>(" + memoryInstName + ")";
                 firstNode = null;
-                TraceManager.addDev("2. First node=" + firstNode);
+                //TraceManager.addDev("2. First node=" + firstNode);
                 // firstPart = "";
             } else {
                 if (reverse) {
                     if (firstNode == null) {
                         //                    if ( firstPart.length()==0 ){
                         firstNode = commElem;
-                        TraceManager.addDev("3. First node=" + firstNode);
+                        //TraceManager.addDev("3. First node=" + firstNode);
                         //                        firstPart=commElem.getName();
                     } else {
                         masters.str += "," + namesGen.busMasterInstanceName(commElem, 0, (HwBus) firstNode);
@@ -762,14 +764,14 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator
                         masterCount++;
                         slaves.str += ",static_cast<Slave*>(" + namesGen.communicationNodeInstanceName(commElem, 0) + ")";
                         firstNode = null;
-                        TraceManager.addDev("4. First node=" + firstNode);
+                        //TraceManager.addDev("4. First node=" + firstNode);
                         //firstPart="";
                     }
                 } else {
                     if (firstNode == null) {
                         //                  if ( firstPart.length()==0 ){
                         firstNode = commElem;
-                        TraceManager.addDev("5. First node=" + firstNode);
+                        //TraceManager.addDev("5. First node=" + firstNode);
                         slaves.str += ",static_cast<Slave*>(" + namesGen.communicationNodeInstanceName(commElem, 0) + ")";
                         //                        firstPart = commElem.getName();
                         //                        slaves.str+= ",static_cast<Slave*>(" + firstPart + ")";
@@ -778,7 +780,7 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator
                         //                        masters.str+= "," + firstPart + "_" + commElem.getName() + "_Master";
                         masterCount++;
                         firstNode = null;
-                        TraceManager.addDev("6. First node=" + firstNode);
+                        //TraceManager.addDev("6. First node=" + firstNode);
                         //                        firstPart="";
                     }
                 }
@@ -786,7 +788,7 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator
         }
 
         if (reverse) {
-            TraceManager.addDev("REVERSE. First node=" + firstNode);
+            //TraceManager.addDev("REVERSE. First node=" + firstNode);
             masters.str += "," + namesGen.busMasterInstanceName(destNode, 0, (HwBus) firstNode);
             //            masters.str+= "," + destNode.getName() + "0_" + firstPart + "_Master";
 
@@ -799,7 +801,7 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator
     }
 
     public String determineRouting(HwNode startNode, HwNode destNode, TMLElement commElemToRoute) {
-        if (startNode == null) {
+        /*if (startNode == null) {
             TraceManager.addDev( "Null start node");
         } else {
             TraceManager.addDev( "Start node:" + startNode.getName());
@@ -812,7 +814,7 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator
         }
 
         TraceManager.addDev( "******** -------> ROUTING ROUTING ROUTING\nDetermine routing from " + startNode.getName() + " to " + destNode.getName
-                () );
+                () );*/
         StrWrap masters = new StrWrap();
         StrWrap slaves = new StrWrap();
 
@@ -839,8 +841,11 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator
         } else {
             final List<HwCommunicationNode> commNodes2 = new LinkedList<HwCommunicationNode>(commNodes);
 
+            //TraceManager.addDev("Explore bus from " + startNode.getName() + " to memory " + memory.getName());
+
+
             if (!exploreBuses(0, commNodes, path, startNode, memory, commElemToRoute)) {
-                TraceManager.addDev("NO route to " + memory.getName() + "found!!!!!!!!!!!!!!!!!!!!!!!!!!");
+                TraceManager.addDev("NO route to " + memory.getName() + " found!!!!!!!!!!!!!!!!!!!!!!!!!!");
             }
 
             path.add(memory);
@@ -854,21 +859,21 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator
             hopNum = extractPath(path, masters, slaves, destNode, destNode, true) - hopNum;
         }
 
-        TraceManager.addDev(commElemToRoute.getName() + " is mapped on:");
+        /*TraceManager.addDev(commElemToRoute.getName() + " is mapped on:");
 
         for (HwCommunicationNode commElem : path) {
             TraceManager.addDev(commElem.getName());
-        }
+        }*/
 
-        TraceManager.addDev("number of elements: " + hopNum);
-        TraceManager.addDev("masters: " + masters.str);
-        TraceManager.addDev("slaves: " + slaves.str);
+        //TraceManager.addDev("number of elements: " + hopNum);
+        //TraceManager.addDev("masters: " + masters.str);
+        //TraceManager.addDev("slaves: " + slaves.str);
 
         if (masters.str.length() == 0) {
             return null;
         }
 
-        TraceManager.addDev("Going to return:" + hopNum + ",array(" + hopNum + masters.str + "),array(" + hopNum + slaves.str + ")");
+        //TraceManager.addDev("Going to return:" + hopNum + ",array(" + hopNum + masters.str + "),array(" + hopNum + slaves.str + ")");
 
         return hopNum + ",array(" + hopNum + masters.str + "),array(" + hopNum + slaves.str + ")";
     }
diff --git a/src/main/java/tmltranslator/tomappingsystemc2/NamesGenerationHelper.java b/src/main/java/tmltranslator/tomappingsystemc2/NamesGenerationHelper.java
index e447f5c98ba62cae870f4f64b013ae5534fe44f3..b7e0855c0821e4c14ca2e22379edcaa973e2553a 100644
--- a/src/main/java/tmltranslator/tomappingsystemc2/NamesGenerationHelper.java
+++ b/src/main/java/tmltranslator/tomappingsystemc2/NamesGenerationHelper.java
@@ -391,7 +391,7 @@ public class NamesGenerationHelper {
     String busMasterInstanceName(final HwNode element,
                                  final int indexCore,
                                  final HwBus linkBus) {
-        if (element == null) {
+        /*if (element == null) {
             TraceManager.addDev("NULL Hw element");
         } else {
             TraceManager.addDev("Hw element=" + element.getName());
@@ -401,7 +401,7 @@ public class NamesGenerationHelper {
             TraceManager.addDev("NULL linkBus element");
         } else {
             TraceManager.addDev("linkBus element=" + linkBus.getName());
-        }
+        }*/
 
         return normalize(busMasterName(element, indexCore, linkBus));
     }
diff --git a/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java b/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java
index 147cd7af7154f2173fb977f676602cbb9c4350f8..7aa9303fac518739dccac74adee938518ba36987 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java
@@ -111,11 +111,10 @@ public class TaskINForDispatch extends TMLTask {
         waitEvt.addParam("vc");
         waitEvt.addParam("eop");
         waitEvt.addParam("chid");
-        activity.addElement(waitEvt);
-        loop.addNext(waitEvt);
+        activity.addLinkElement(loop, waitEvt);
 
         TMLChoice choice = new TMLChoice("MainChoice", referenceObject);
-        activity.addElement(choice);
+        activity.addLinkElement(waitEvt, choice);
 
         for(int i=0; i<nbOfVCs; i++) {
             TMLSendEvent sendEvt = new TMLSendEvent("SendEvtToVC" + i, referenceObject);
@@ -124,7 +123,7 @@ public class TaskINForDispatch extends TMLTask {
             sendEvt.addParam("dst");
             sendEvt.addParam("vc");
             sendEvt.addParam("eop");
-            waitEvt.addParam("chid");
+            sendEvt.addParam("chid");
             activity.addElement(sendEvt);
             choice.addNext(sendEvt);
             choice.addGuard("vc == " + i);
diff --git a/src/main/java/tmltranslator/tonetwork/TaskINForVC.java b/src/main/java/tmltranslator/tonetwork/TaskINForVC.java
index 8d4534881c788c1357f25ab7461e99fcf6225f4c..2cb9a74ab68e268e187075d804c600089a6170b2 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskINForVC.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskINForVC.java
@@ -146,15 +146,16 @@ public class TaskINForVC extends TMLTask {
         // Second activity after sequence
         TMLForLoop loop2 = new TMLForLoop("mainLoop", referenceObject);
         loop2.setInfinite(true);
-        activity.addElement(loop2);
-        seq.addNext(loop2);
+        activity.addLinkElement(seq, loop2);
 
-        TMLWaitEvent waitEvt = new TMLWaitEvent("PacketEvent", referenceObject);
+
+        TMLWaitEvent waitEvt = new TMLWaitEvent("PacketEventBeforeSecondSeq", referenceObject);
         waitEvt.setEvent(inPacketEvent);
         waitEvt.addParam("pktlen");
         waitEvt.addParam("dst");
         waitEvt.addParam("vc");
         waitEvt.addParam("eop");
+        waitEvt.addParam("chid");
         activity.addLinkElement(loop2, waitEvt);
 
         TMLSequence secondSeq = new TMLSequence("SecondSeq", referenceObject);
@@ -174,20 +175,39 @@ public class TaskINForVC extends TMLTask {
         activity.addLinkElement(computexd, firstRoutingChoice);
 
         TMLActionState requested3 = new TMLActionState("requested3", referenceObject);
-        requested3.setAction("requested_output = 3");
+        requested3.setAction("requestedOutput = 3");
         activity.addLinkElement(firstRoutingChoice, requested3);
-        firstRoutingChoice.addGuard("xd > x");
+        firstRoutingChoice.addGuard("xd>x");
         activity.addLinkElement(requested3, new TMLStopState("stopOfRequest3", referenceObject));
 
         TMLActionState requested2 = new TMLActionState("requested2", referenceObject);
-        requested2.setAction("requested_output = 2");
+        requested2.setAction("requestedOutput = 2");
         activity.addLinkElement(firstRoutingChoice, requested2);
-        firstRoutingChoice.addGuard("xd < x");
+        firstRoutingChoice.addGuard("xd<x");
         activity.addLinkElement(requested2, new TMLStopState("stopOfRequest2", referenceObject));
 
         TMLChoice secondRoutingChoice = new TMLChoice("secondRoutingChoice", referenceObject);
         activity.addLinkElement(firstRoutingChoice, secondRoutingChoice);
-        firstRoutingChoice.addGuard("xd == x");
+        firstRoutingChoice.addGuard("xd==x");
+
+        TMLActionState requested0 = new TMLActionState("requested0", referenceObject);
+        requested0.setAction("requestedOutput = 0");
+        activity.addLinkElement(secondRoutingChoice, requested0);
+        firstRoutingChoice.addGuard("yd<y");
+        activity.addLinkElement(requested0, new TMLStopState("stopOfRequest0", referenceObject));
+
+        TMLActionState requested4 = new TMLActionState("requested4", referenceObject);
+        requested4.setAction("requestedOutput = 4");
+        activity.addLinkElement(secondRoutingChoice, requested4);
+        firstRoutingChoice.addGuard("yd==y");
+        activity.addLinkElement(requested4, new TMLStopState("stopOfRequest4", referenceObject));
+
+        TMLActionState requested1 = new TMLActionState("requested1", referenceObject);
+        requested1.setAction("requestedOutput = 4");
+        activity.addLinkElement(secondRoutingChoice, requested1);
+        firstRoutingChoice.addGuard("yd<y");
+        activity.addLinkElement(requested1, new TMLStopState("stopOfRequest1", referenceObject));
+
 
 
 
@@ -265,7 +285,7 @@ public class TaskINForVC extends TMLTask {
             activity.addLinkElement(sendEvt, read);
 
             stop = new TMLStopState("StopStateOutLoop", referenceObject);
-            activity.addLinkElement(waitEvt, stop);
+            activity.addLinkElement(read, stop);
 
         }
 
diff --git a/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java b/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java
index cdd9708d2e0fe1a0fa09af494387dc0ab87fc547..075c7d00803ca1ca75fb098318fa0984ff0bb50d 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java
@@ -86,7 +86,7 @@ public class TaskMUXAppDispatch extends TMLTask {
         TMLAttribute eop = new TMLAttribute("eop", "eop", new TMLType(TMLType.NATURAL), "0");
         this.addAttribute(eop);
         TMLAttribute chid = new TMLAttribute("chid", "chid", new TMLType(TMLType.NATURAL), "0");
-        this.addAttribute(eop);
+        this.addAttribute(chid);
 
         // Events and channels
         for(TMLEvent evt: inputEvents) {
@@ -108,6 +108,12 @@ public class TaskMUXAppDispatch extends TMLTask {
         activity.addElement(selectEvt);
         loop.addNext(selectEvt);
 
+        if (inputEvents.size() == 0) {
+            activity.addLinkElement(selectEvt, new TMLStopState("StopNoEvent", referenceObject));
+            return ;
+        }
+
+
         // Branch for each app
 
          for(int i=0; i< inputEvents.size(); i++) {
diff --git a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java
index fb3dcc3962b3ee781d03933977bf1e8128060fe0..a7851af199aae27de7ad95865493c768c7331e3b 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java
@@ -137,7 +137,7 @@ public class TaskNetworkInterface extends TMLTask {
         addElement(start, loop);
 
         TMLActionState state = new TMLActionState("LoopExitSetting", referenceObject);
-        state.setAction("loopexit = 2");
+        state.setAction("loopExit = 2");
         addElement(loop, state);
 
         TMLSequence mainSequence = new TMLSequence("mainSequence", referenceObject);
@@ -146,14 +146,14 @@ public class TaskNetworkInterface extends TMLTask {
         for(i=0; i<nbOfVCs; i++) {
             TMLChoice testOnLoopExit = null;
             if (i>0) {
-                //Test on loopexit
+                //Test on loop exit
                 testOnLoopExit = new TMLChoice("testOnLoopExit", referenceObject);
                 addElement(mainSequence, testOnLoopExit);
 
                 // Right branch
                 TMLStopState endOfLoopExit = new TMLStopState("endOfLoopExit", referenceObject);
                 addElement(testOnLoopExit, endOfLoopExit);
-                testOnLoopExit.addGuard("loopexit == 1");
+                testOnLoopExit.addGuard("loopExit == 1");
 
             } else {
                 testOnLoopExit = null;
@@ -166,7 +166,7 @@ public class TaskNetworkInterface extends TMLTask {
                 addElement(mainSequence, notifiedEvent);
             } else {
                 addElement(testOnLoopExit, notifiedEvent);
-                testOnLoopExit.addGuard("loopexit == 2");
+                testOnLoopExit.addGuard("loopExit == 2");
             }
 
             TMLChoice testingEvt = new TMLChoice("testingEvtVC", referenceObject);
@@ -196,10 +196,10 @@ public class TaskNetworkInterface extends TMLTask {
             waitingForStartPacket.addParam("eop");
             waitingForStartPacket.addParam("chid" + i);
             addElement(ispktChoice, waitingForStartPacket);
-            ispktChoice.addGuard("ispkt == 0");
+            ispktChoice.addGuard("ispkt" + i + " == 0");
 
             TMLActionState ispktSetting = new TMLActionState("ispktSetting", referenceObject);
-            ispktSetting.setAction("ispkt = 1");
+            ispktSetting.setAction("ispkt" + i + " = 1");
             addElement(waitingForStartPacket, ispktSetting);
 
             TMLActionState iSetting = new TMLActionState("iSetting", referenceObject);
@@ -211,9 +211,9 @@ public class TaskNetworkInterface extends TMLTask {
 
             // Right branch of intermediate seq
             TMLForLoop loopOfRightBranch = new TMLForLoop("LoopOfRightBranch", referenceObject);
-            loopOfRightBranch.setInit("loopexit = 0");
-            loopOfRightBranch.setCondition("loopexit < 1");
-            loopOfRightBranch.setIncrement("loopexit = loopexit");
+            loopOfRightBranch.setInit("loopExit = 0");
+            loopOfRightBranch.setCondition("loopExit < 1");
+            loopOfRightBranch.setIncrement("loopExit = loopExit");
             addElement(intermediateSeq, loopOfRightBranch);
 
             TMLNotifiedEvent feedbackNotified = new TMLNotifiedEvent("WaitingForFeedback", referenceObject);
@@ -231,7 +231,7 @@ public class TaskNetworkInterface extends TMLTask {
 
             // No feedback
             TMLActionState noFeedbackAction = new TMLActionState("noFeedbackAction", referenceObject);
-            noFeedbackAction.setAction("loopexit = 2");
+            noFeedbackAction.setAction("loopExit = 2");
             addElement(testOnFeedback, noFeedbackAction);
             testOnFeedback.addGuard("else");
 
@@ -269,7 +269,7 @@ public class TaskNetworkInterface extends TMLTask {
                 packetLengthChoice.addGuard("i" + i + " < pktlen" + i + " - 1");
 
                 TMLActionState asOnI = new TMLActionState("ActionstateOnI", referenceObject);
-                asOnI.setAction("i" + i + " = i" + i + " 1");
+                asOnI.setAction("i" + i + " = i" + i + " + 1");
                 addElement(sendEvtpktin, asOnI);
 
                 TMLStopState endOfLB = new TMLStopState("EndOfLB", referenceObject);
@@ -277,7 +277,7 @@ public class TaskNetworkInterface extends TMLTask {
 
                 // Middle branch
                 TMLActionState loopExitMB = new TMLActionState("loopExitMB", referenceObject);
-                loopExitMB.setAction("loopexit = 1");
+                loopExitMB.setAction("loopExit = 1");
                 addElement(packetLengthChoice, loopExitMB);
                 packetLengthChoice.addGuard("i" + i + " == pktlen" + i);
 
@@ -301,7 +301,7 @@ public class TaskNetworkInterface extends TMLTask {
                 packetLengthChoice.addGuard("i" + i + " == pktlen" + i + " - 1");
 
                 TMLActionState asOnIRB = new TMLActionState("asOnIRB", referenceObject);
-                asOnIRB.setAction("i" + i + " = i" + i + " 1");
+                asOnIRB.setAction("i" + i + " = i" + i + "+ 1");
                 addElement(sendEvtpktinRB, asOnIRB);
 
                 TMLStopState endOfRB = new TMLStopState("endOfRB", referenceObject);
@@ -312,9 +312,9 @@ public class TaskNetworkInterface extends TMLTask {
 
                 // Right branch
                 TMLActionState loopexitTo1= new TMLActionState("loopexitTo1", referenceObject);
-                loopexitTo1.setAction("loopexit = 1");
+                loopexitTo1.setAction("loopExit = 1");
                 addElement(packetLengthChoice1, loopexitTo1);
-                packetLengthChoice1.addGuard("i" + i + " = pktlen" + i);
+                packetLengthChoice1.addGuard("i" + i + " == pktlen" + i);
 
 
                 TMLActionState ispktResetAction = new TMLActionState("ispktResetAction", referenceObject);
@@ -344,7 +344,7 @@ public class TaskNetworkInterface extends TMLTask {
                 choiceLBSeq.addGuard("i" + i + " < pktlen" + i + " - 1");
 
                 TMLActionState asOnI1 = new TMLActionState("ActionstateOnI1", referenceObject);
-                asOnI1.setAction("i" + i + " = i" + i + " 1");
+                asOnI1.setAction("i" + i + " = i" + i + " + 1");
                 addElement(sendEvtpktin1, asOnI1);
 
                 TMLStopState endOfLB1 = new TMLStopState("endOfLB1", referenceObject);
@@ -361,7 +361,7 @@ public class TaskNetworkInterface extends TMLTask {
                 choiceLBSeq.addGuard("i" + i + " == pktlen" + i + " - 1");
 
                 TMLActionState asOnIRB1 = new TMLActionState("asOnIRB1", referenceObject);
-                asOnIRB1.setAction("i" + i + " = i" + i + " 1");
+                asOnIRB1.setAction("i" + i + " = i" + i + "+ 1");
                 addElement(sendEvtpktinRB1, asOnIRB1);
 
                 TMLStopState endOfRB1SEQ = new TMLStopState("endOfRB1SEQ", referenceObject);
@@ -370,21 +370,21 @@ public class TaskNetworkInterface extends TMLTask {
                 // Right branch of seq
                 TMLNotifiedEvent notifiedEventPrio = new TMLNotifiedEvent("notifiedEventPrio", referenceObject);
                 notifiedEventPrio.setEvent(inputEventsFromMUX.get(i-1));
-                notifiedEventPrio.setVariable("higher_prio");
+                notifiedEventPrio.setVariable("higherPrio");
                 addElement(seqLB, notifiedEventPrio);
 
                 TMLChoice testPrio = new TMLChoice("testPrio", referenceObject);
                 addElement(notifiedEventPrio, testPrio);
 
                 TMLActionState loopexitPrio= new TMLActionState("loopexitPrio", referenceObject);
-                loopexitPrio.setAction("loopexit = 1");
+                loopexitPrio.setAction("loopExit = 1");
                 addElement(testPrio, loopexitPrio);
-                testPrio.addGuard("higher_prio > 0");
+                testPrio.addGuard("higherPrio > 0");
 
                 addElement(loopexitPrio, new TMLStopState("EndOfHigherPrio", referenceObject));
 
                 addElement(testPrio, new TMLStopState("NoHigherPrio", referenceObject));
-                testPrio.addGuard("higher_prio == 0");
+                testPrio.addGuard("higherPrio == 0");
 
             }
 
diff --git a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java
index 160dbf4911e24fc6da4a31ad80122faa04b1ecc6..f1e3e66204038c3b6e85b24f2ba9b4fac2dcca82 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java
@@ -128,6 +128,7 @@ public class TaskNetworkInterfaceOUT extends TMLTask {
         waitingForPacketFromOUT.addParam("dst");
         waitingForPacketFromOUT.addParam("vc");
         waitingForPacketFromOUT.addParam("eop");
+        waitingForPacketFromOUT.addParam("chid");
         addElement(loop, waitingForPacketFromOUT);
 
         // Reading on channel
diff --git a/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java b/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java
index d4e020e13a5ea2c3d2062af4eb7ea7f57a4e07b0..dfbd8602d5b45fc514e9ec24f6e3b7caf40e9897 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java
@@ -39,6 +39,7 @@
 
 package tmltranslator.tonetwork;
 
+import myutil.TraceManager;
 import tmltranslator.*;
 
 import java.util.Vector;
@@ -132,7 +133,7 @@ public class TaskOUTForDispatch extends TMLTask {
                 mainChoice.addGuard("nEvt > 0");
 
                 TMLNotifiedEvent notifiedFeedback = new TMLNotifiedEvent("FeedbackNotifiedEvt"+i, referenceObject);
-                notifiedFeedback.setEvent(outSelectEvents.get(i));
+                notifiedFeedback.setEvent(feedbackEvents.get(i));
                 notifiedFeedback.setVariable("feedback");
                 activity.addLinkElement(loopInside, notifiedFeedback);
 
@@ -140,12 +141,13 @@ public class TaskOUTForDispatch extends TMLTask {
                 activity.addLinkElement(notifiedFeedback, internalChoice);
 
                 // Left branch of internal choice
-                sendEvt = new TMLSendEvent("feedbackUpEvent", referenceObject);
+                sendEvt = new TMLSendEvent("SelectEvent", referenceObject);
                 sendEvt.setEvent(outSelectEvents.get(i));
                 activity.addLinkElement(internalChoice, sendEvt);
                 internalChoice.addGuard("feedback > 0");
 
                 waitEvt = new TMLWaitEvent("PacketEventInLoop", referenceObject);
+                TraceManager.addDev("Nb Of params of " + inPacketEvents.get(i).getName() + " = " + inPacketEvents.get(i).getNbOfParams());
                 waitEvt.setEvent(inPacketEvents.get(i));
                 waitEvt.addParam("pktlen");
                 waitEvt.addParam("dst");
@@ -164,7 +166,7 @@ public class TaskOUTForDispatch extends TMLTask {
                 sendEvt.addParam("dst");
                 sendEvt.addParam("vc");
                 sendEvt.addParam("eop");
-                waitEvt.addParam("chid");
+                sendEvt.addParam("chid");
                 activity.addLinkElement(reqOut, sendEvt);
 
                 TMLWriteChannel write = new TMLWriteChannel("WriteChannel" + i, referenceObject);
diff --git a/src/main/java/tmltranslator/tonetwork/TaskOUTForVC.java b/src/main/java/tmltranslator/tonetwork/TaskOUTForVC.java
index 53d93acaa40276b610fc1bde4a07ff75d3ad0dff..da58b789f734c0fbcd8a6c67a5c41ad60cb5d5a0 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskOUTForVC.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskOUTForVC.java
@@ -124,7 +124,7 @@ public class TaskOUTForVC extends TMLTask {
             sendEvt.addParam("dst");
             sendEvt.addParam("vc");
             sendEvt.addParam("eop");
-            waitEvt.addParam("chid");
+            sendEvt.addParam("chid");
             activity.addLinkElement(packetLoop, sendEvt);
 
             waitEvt = new TMLWaitEvent("ReturnFromVC", referenceObject);
@@ -145,6 +145,7 @@ public class TaskOUTForVC extends TMLTask {
             waitEvt.addParam("dst");
             waitEvt.addParam("vc");
             waitEvt.addParam("eop");
+            waitEvt.addParam("chid");
             activity.addLinkElement(choice, waitEvt);
             choice.addGuard("eop == 0");
 
diff --git a/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java b/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java
index 5cfc08b49e1275e249385d0ca16712128d9e9bf9..4187a53c567aabfdc4a4643ae3b67bb19846d4a8 100644
--- a/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java
+++ b/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java
@@ -479,8 +479,6 @@ public class TranslatedRouter<E> {
         TMLEvent pktoutFromOut = playingTheRoleOfPrevious[NB_OF_PORTS-1].packetOut;
         pktoutFromOut.setDestinationTask(tniOut);
 
-
-
         tniOut.generate(nbOfVCs, feedbackPerVC, pktoutFromOut, chOfOut);
 
     }
@@ -652,7 +650,7 @@ public class TranslatedRouter<E> {
 
         HwMemory memNIIN = new HwMemory("MemNetworkInterfaceIN" + getPositionNaming());
         tmla.addHwNode(memNIIN);
-        tmlmap.addCommToHwCommNode(playingTheRoleOfPrevious[NB_OF_PORTS - 1].chOutToIN, memNIIN);
+        tmlmap.addCommToHwCommNode(playingTheRoleOfNext[NB_OF_PORTS - 1].chOutToIN, memNIIN);
 
         HwBridge bridgeNIIN = new HwBridge("BridgeNetworkInterfaceIN" + getPositionNaming());
         tmla.addHwNode(bridgeNIIN);
@@ -750,15 +748,16 @@ public class TranslatedRouter<E> {
         // Basically connects to the main bridge
 
         // NIOUT bus
-        HwBus busNIOUT = new HwBus("BusNetworkiInterfaceOUT" + getPositionNaming());
+        HwBus busNIOUT = new HwBus("BusNetworkInterfaceOUT" + getPositionNaming());
         tmla.addHwNode(busNIOUT);
 
-        HwCPU cpuNIOUT = new HwCPU("CPUNetworkiInterfaceOUT" + getPositionNaming());
+        HwCPU cpuNIOUT = new HwCPU("CPUNetworkInterfaceOUT" + getPositionNaming());
         tmla.addHwNode(cpuNIOUT);
         tmlmap.addTaskToHwExecutionNode(tniOut, cpuNIOUT);
 
-        HwMemory memNIOUT = new HwMemory("MemNetworkiInterfaceOUT" + getPositionNaming());
+        HwMemory memNIOUT = new HwMemory("MemNetworkInterfaceOUT" + getPositionNaming());
         tmla.addHwNode(memNIOUT);
+        tmlmap.addCommToHwCommNode(playingTheRoleOfPrevious[NB_OF_PORTS-1].chOutToIN, memNIOUT);
 
         tmla.makeHwLink(busNIOUT, outForExit);
         tmla.makeHwLink(busNIOUT, cpuNIOUT);
@@ -819,16 +818,16 @@ public class TranslatedRouter<E> {
 
                 // Must now modify the source app
                 TMLAttribute pktlen = new TMLAttribute("pktlen", "pktlen", new TMLType(TMLType.NATURAL), "0");
-                t.addAttribute(pktlen);
+                t.addAttributeIfApplicable(pktlen);
                 TMLAttribute dst = new TMLAttribute("dst", "dst", new TMLType(TMLType.NATURAL), "0");
-                t.addAttribute(dst);
+                t.addAttributeIfApplicable(dst);
                 TMLAttribute vc = new TMLAttribute("vc", "vc", new TMLType(TMLType.NATURAL), "0");
-                t.addAttribute(vc);
+                t.addAttributeIfApplicable(vc);
                 TMLAttribute eop = new TMLAttribute("eop", "eop", new TMLType(TMLType.NATURAL), "1");
-                t.addAttribute(eop);
+                t.addAttributeIfApplicable(eop);
                 TMLAttribute chid = new TMLAttribute("chid", "chid", new TMLType(TMLType.NATURAL),
                         ""+main.getChannelID(ch));
-                t.addAttribute(chid);
+                t.addAttributeIfApplicable(chid);
 
                 TMLActivity activity = t.getActivityDiagram();
                 Vector<TMLActivityElement> newElements = new Vector<>();
@@ -911,15 +910,15 @@ public class TranslatedRouter<E> {
 
                     // Must now modify the dest app
                     TMLAttribute pktlen = new TMLAttribute("pktlen", "pktlen", new TMLType(TMLType.NATURAL), "0");
-                    t.addAttribute(pktlen);
+                    t.addAttributeIfApplicable(pktlen);
                     TMLAttribute dst = new TMLAttribute("dst", "dst", new TMLType(TMLType.NATURAL), "0");
-                    t.addAttribute(dst);
+                    t.addAttributeIfApplicable(dst);
                     TMLAttribute vc = new TMLAttribute("vc", "vc", new TMLType(TMLType.NATURAL), "0");
-                    t.addAttribute(vc);
+                    t.addAttributeIfApplicable(vc);
                     TMLAttribute eop = new TMLAttribute("eop", "eop", new TMLType(TMLType.NATURAL), "1");
-                    t.addAttribute(eop);
+                    t.addAttributeIfApplicable(eop);
                     TMLAttribute chid = new TMLAttribute("chid", "chid", new TMLType(TMLType.NATURAL), "0");
-                    t.addAttribute(chid);
+                    t.addAttributeIfApplicable(chid);
 
                     TMLActivity activity = t.getActivityDiagram();
                     Vector<TMLActivityElement> newElements = new Vector<>();
@@ -928,7 +927,9 @@ public class TranslatedRouter<E> {
                         if (elt instanceof TMLReadChannel) {
                             trc = (TMLReadChannel) elt;
                             if (trc.getChannel(0) == ch) {
-                                TraceManager.addDev("Modifying write ch of task " + t.getTaskName());
+                                TraceManager.addDev("Modifying read ch of task " + t.getTaskName() + " for channel " + ch.getName());
+                                // TODO TODO
+                                //trc.replaceChannelWith(ch, );
                                 TMLWaitEvent twe = new TMLWaitEvent("EvtForReceiving__" + ch.getName(), ch.getReferenceObject());
                                 newElements.add(twe);
                                 twe.setEvent(mapOfAllInputChannels.get(ch));
diff --git a/src/main/java/ui/GTMLModeling.java b/src/main/java/ui/GTMLModeling.java
index 71a75222d0b4270cd054cc8583c976aba8f2f8d4..510f643acdb3f5be69dc059849ab59e3d3fe47b3 100644
--- a/src/main/java/ui/GTMLModeling.java
+++ b/src/main/java/ui/GTMLModeling.java
@@ -816,7 +816,7 @@ public class GTMLModeling {
                             tmltt = new TMLType(request.getType(j).getType());
                             tmlattr = new TMLAttribute(attname, tmltt);
                             tmlattr.initialValue = tmlattr.getDefaultInitialValue();
-                            TraceManager.addDev("Adding " + tmlattr.getName() + " to " + task.getName() + "with value =" + tmlattr.initialValue);
+                            //TraceManager.addDev("Adding " + tmlattr.getName() + " to " + task.getName() + "with value =" + tmlattr.initialValue);
                             task.addAttribute(tmlattr);
                         }
                     }
@@ -1522,7 +1522,7 @@ public class GTMLModeling {
                             tmltt = new TMLType(request.getType(j).getType());
                             tmlattr = new TMLAttribute(attname, tmltt);
                             tmlattr.initialValue = tmlattr.getDefaultInitialValue();
-                            //TraceManager.addDev("Adding " + tmlattr.getName() + " to " + tt1.getName() + "with value =" + tmlattr.initialValue);
+                            TraceManager.addDev("Adding " + tmlattr.getName() + " to " + tt1.getName() + "with value =" + tmlattr.initialValue);
                             tt1.addAttribute(tmlattr);
                         }
                     }
diff --git a/src/main/java/ui/window/JDialogNoCManagement.java b/src/main/java/ui/window/JDialogNoCManagement.java
index f9a4e809ce9d6da3d9c51d5ffcea7d56eef215f1..a8431922201e6cdabee6b89d5694c6ca13f89222 100644
--- a/src/main/java/ui/window/JDialogNoCManagement.java
+++ b/src/main/java/ui/window/JDialogNoCManagement.java
@@ -352,6 +352,24 @@ public class JDialogNoCManagement extends JDialog implements ActionListener, Lis
 
         outputText.append("\nSpecification generated in " + dir + "\n");
 
+        outputText.append("\nChecking syntax of the specification\n");
+
+        TMLSyntaxChecking tmlsc = new TMLSyntaxChecking(mapping);
+        tmlsc.checkSyntax();
+
+        outputText.append("\n" + tmlsc.hasErrors() + " errrors, " + tmlsc.hasWarnings() + "  warnings:\n");
+        if (tmlsc.hasErrors() > 0) {
+            for (TMLError err :tmlsc.getErrors()) {
+                outputText.append("Error:" + err.toString() + "\n");
+            }
+        }
+        if (tmlsc.hasWarnings() > 0) {
+            for (TMLError err :tmlsc.getWarnings()) {
+                outputText.append("Warning:" + err.toString() + "\n");
+            }
+        }
+
+
         outputText.append("\nAll done\n");
 
         stopProcess();