diff --git a/src/main/java/tmltranslator/TMLActivity.java b/src/main/java/tmltranslator/TMLActivity.java
index 03594e919a5a9ddb4f88ac548bfaf0e4f3a57b95..2c291a1fa8521488b66b8c507a9ba747938ab488 100755
--- a/src/main/java/tmltranslator/TMLActivity.java
+++ b/src/main/java/tmltranslator/TMLActivity.java
@@ -149,7 +149,7 @@ public class TMLActivity extends TMLElement {
         return found;
     }
 
-    private void replaceAllNext(TMLActivityElement _oldE, TMLActivityElement _newE) {
+    public void replaceAllNext(TMLActivityElement _oldE, TMLActivityElement _newE) {
         TMLActivityElement tmlae;
         for (int i = 0; i < elements.size(); i++) {
             tmlae = elements.elementAt(i);
diff --git a/src/main/java/tmltranslator/TMLActivityElement.java b/src/main/java/tmltranslator/TMLActivityElement.java
index a223aab70097113122d13aec1f2fadb77c10cc08..a0511572ad70fc96d572a2d6bf45e96f2e043b68 100755
--- a/src/main/java/tmltranslator/TMLActivityElement.java
+++ b/src/main/java/tmltranslator/TMLActivityElement.java
@@ -50,7 +50,7 @@ import java.util.Vector;
    * @version 1.0 23/11/2005
    * @author Ludovic APVRILLE
  */
-public abstract class TMLActivityElement extends TMLElement{
+public abstract class TMLActivityElement extends TMLElement {
     protected Vector<TMLActivityElement> nexts;
     public SecurityPattern securityPattern;
     private String value="";
diff --git a/src/main/java/tmltranslator/TMLChannel.java b/src/main/java/tmltranslator/TMLChannel.java
index 9fbfa817c0dfc703dae014d020969828dbdd01d6..b4d32565ee4af6ad5a79f9747bcdf9d5678ab828 100755
--- a/src/main/java/tmltranslator/TMLChannel.java
+++ b/src/main/java/tmltranslator/TMLChannel.java
@@ -84,7 +84,7 @@ public class TMLChannel extends TMLCommunicationElement {
     private String SP = " ";
     private int priority;
 
-    private int vc = -1;
+    private int vc = 0;
     
     public ArrayList<TMLTask> originalOriginTasks = new ArrayList<TMLTask>(); 
     public ArrayList<TMLTask> originalDestinationTasks = new ArrayList<TMLTask>(); 
@@ -191,6 +191,7 @@ public class TMLChannel extends TMLCommunicationElement {
     public int getNumberOfSamples() { return nbOfSamples;}
 
     public void setVC(int vc) {
+        TraceManager.addDev("Setting VC to " + vc + " for channel " + getName());
         this.vc = vc;
     }
 
diff --git a/src/main/java/tmltranslator/TMLTextSpecification.java b/src/main/java/tmltranslator/TMLTextSpecification.java
index 299508698f43bbd7bf2d16e38470c19ca1e667c2..b3dcb6ba4459e5a8462207175027a605f3c25ee2 100755
--- a/src/main/java/tmltranslator/TMLTextSpecification.java
+++ b/src/main/java/tmltranslator/TMLTextSpecification.java
@@ -353,6 +353,9 @@ public class TMLTextSpecification<E> {
         String sb = "";
         sb += "//Local variables" + CR;
 
+        TraceManager.addDev("Making activity of task:" + task.getTaskName());
+
+
         for (TMLAttribute attr : task.getAttributes()) {
             sb += TMLType.getStringType(attr.getType().getType()) + SP + attr.getName();
             if ((attr.getInitialValue() != null) && (attr.getInitialValue().length() > 0)) {
diff --git a/src/main/java/tmltranslator/tonetwork/Link.java b/src/main/java/tmltranslator/tonetwork/Link.java
index 3b5b2624489f346b03d3d2730bd89e386c923b44..1784f6ec90b3b029b55ae234194697d0aaff1939 100644
--- a/src/main/java/tmltranslator/tonetwork/Link.java
+++ b/src/main/java/tmltranslator/tonetwork/Link.java
@@ -121,6 +121,7 @@ public class Link {
         packetOut.addParam(new TMLType(TMLType.NATURAL));
         packetOut.addParam(new TMLType(TMLType.NATURAL));
         packetOut.addParam(new TMLType(TMLType.NATURAL));
+        packetOut.addParam(new TMLType(TMLType.NATURAL));
         tmlm.addEvent(packetOut);
 
         chOutToIN = new TMLChannel("channelBetweenOUTToIN__" + getNaming(),
diff --git a/src/main/java/tmltranslator/tonetwork/TMAP2Network.java b/src/main/java/tmltranslator/tonetwork/TMAP2Network.java
index d805b16f948a21c08b90b48276292878b81d8aac..633aa3dd7a3bbd4fdb6932dd2f567b3d29281ac9 100644
--- a/src/main/java/tmltranslator/tonetwork/TMAP2Network.java
+++ b/src/main/java/tmltranslator/tonetwork/TMAP2Network.java
@@ -75,6 +75,9 @@ public class TMAP2Network<E>  {
 
     public final static String[] PORT_NAME = {"North", "South", "West", "East", "Internal"};
 
+    private HashMap<TMLChannel, String> IDsOfChannels;
+
+
 
     public TMAP2Network(TMLMapping<?> _tmlmapping, int nocSize) {
         tmlmapping = _tmlmapping;
@@ -82,6 +85,14 @@ public class TMAP2Network<E>  {
         this.nocSize = nocSize;
     }
 
+    public String getChannelID(TMLChannel ch) {
+        return IDsOfChannels.get(ch);
+    }
+
+    public void putTMLChannelID(TMLChannel ch, String id) {
+        IDsOfChannels.put(ch, "" + id);
+    }
+
     public TMLMapping<?> getTMLMapping() {
         return tmlmapping;
     }
@@ -369,6 +380,12 @@ public class TMAP2Network<E>  {
 
 
 
+        // Associate an id to all channels
+        int id = 0;
+        IDsOfChannels = new HashMap<>();
+        for(TMLChannel ch: tmlmodeling.getChannels()) {
+            IDsOfChannels.put(ch, "" + id);
+        }
 
         // Make internal channels & events of routers
         for(i=0; i<nocSize; i++) {
@@ -388,8 +405,6 @@ public class TMAP2Network<E>  {
 
 
 
-
-
         // Integrate into the TMLMapping
         for(i=0; i<nocSize; i++) {
             for(j=0; j<nocSize; j++) {
@@ -419,24 +434,38 @@ public class TMAP2Network<E>  {
             }
         }
 
+        // Handling origin channels
+        for(i=0; i<nocSize; i++) {
+            for(j=0; j<nocSize; j++) {
+                routers[i][j].makeOriginChannels();
+            }
+        }
 
-
-        // Printing routers
+        // Handling destination channels
         for(i=0; i<nocSize; i++) {
             for(j=0; j<nocSize; j++) {
-                TraceManager.addDev(routers[i][j].toString() + "\n");
+                routers[i][j].makeDestinationChannels();
             }
         }
 
+        // Post processing of routers
+        for(i=0; i<nocSize; i++) {
+            for(j=0; j<nocSize; j++) {
+                routers[i][j].postProcessing();
+            }
+        }
 
 
 
-        // Connect channels to the NoC
-        // A bridge is put with the same position as the router as to allow classical paths not
-        // to use the router
+        // Printing routers
+        for(i=0; i<nocSize; i++) {
+            for(j=0; j<nocSize; j++) {
+                //TraceManager.addDev(routers[i][j].toString() + "\n");
+            }
+        }
 
 
-        return null; // all ok
+        return null; // That's all folks!
     }
 
 }
diff --git a/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java b/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java
index b992fa8215fc2fb1326b2e1b6efa060a889f7fff..147cd7af7154f2173fb977f676602cbb9c4350f8 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java
@@ -82,6 +82,8 @@ public class TaskINForDispatch extends TMLTask {
         this.addAttribute(vc);
         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(chid);
 
         // Events and channels
         addTMLEvent(inputEvent);
@@ -108,6 +110,7 @@ public class TaskINForDispatch extends TMLTask {
         waitEvt.addParam("dst");
         waitEvt.addParam("vc");
         waitEvt.addParam("eop");
+        waitEvt.addParam("chid");
         activity.addElement(waitEvt);
         loop.addNext(waitEvt);
 
@@ -121,6 +124,7 @@ public class TaskINForDispatch extends TMLTask {
             sendEvt.addParam("dst");
             sendEvt.addParam("vc");
             sendEvt.addParam("eop");
+            waitEvt.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 1ce233a3a49a403d4fc35e2a6a8961ab37d9205f..8d4534881c788c1357f25ab7461e99fcf6225f4c 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskINForVC.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskINForVC.java
@@ -74,6 +74,8 @@ public class TaskINForVC extends TMLTask {
         this.addAttribute(vc);
         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(chid);
         TMLAttribute feedbackDownstr = new TMLAttribute("feedbackDownstr", "feedbackDownstr", new TMLType(TMLType.NATURAL), "0");
         this.addAttribute(feedbackDownstr);
         TMLAttribute bufferSize = new TMLAttribute("bufferSize", "bufferSize", new TMLType(TMLType.NATURAL), "2");
@@ -191,10 +193,6 @@ public class TaskINForVC extends TMLTask {
 
 
 
-
-
-
-
         // Main choice : second branch of secondSeq
         TMLChoice mainChoice = new TMLChoice("mainChoice", referenceObject);
         activity.addLinkElement(secondSeq, mainChoice);
@@ -215,6 +213,7 @@ public class TaskINForVC extends TMLTask {
             sendEvt.addParam("dst");
             sendEvt.addParam("vc");
             sendEvt.addParam("eop");
+            sendEvt.addParam("chid");
             activity.addLinkElement(packetLoop, sendEvt);
 
             waitEvt = new TMLWaitEvent("FeedbackDownEvent", referenceObject);
@@ -236,6 +235,7 @@ public class TaskINForVC extends TMLTask {
             waitEvt.addParam("dst");
             waitEvt.addParam("vc");
             waitEvt.addParam("eop");
+            waitEvt.addParam("chid");
             activity.addLinkElement(read, waitEvt);
 
             stop = new TMLStopState("StopStateInLoop", referenceObject);
@@ -248,6 +248,7 @@ public class TaskINForVC extends TMLTask {
             sendEvt.addParam("dst");
             sendEvt.addParam("vc");
             sendEvt.addParam("eop");
+            sendEvt.addParam("chid");
             activity.addLinkElement(loop, sendEvt);
 
             waitEvt = new TMLWaitEvent("FeedbackDownEventO", referenceObject);
diff --git a/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java b/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java
index 5a67f0699b8ff8a00808b7827c38b330c700e60f..cdd9708d2e0fe1a0fa09af494387dc0ab87fc547 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java
@@ -85,6 +85,8 @@ public class TaskMUXAppDispatch extends TMLTask {
         this.addAttribute(vc);
         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);
 
         // Events and channels
         for(TMLEvent evt: inputEvents) {
@@ -115,6 +117,7 @@ public class TaskMUXAppDispatch extends TMLTask {
             waitEvt.addParam("dst");
             waitEvt.addParam("vc");
             waitEvt.addParam("eop");
+             waitEvt.addParam("chid");
             activity.addElement(waitEvt);
              selectEvt.addNext(waitEvt);
 
@@ -124,6 +127,7 @@ public class TaskMUXAppDispatch extends TMLTask {
              sendEvt.addParam("dst");
              sendEvt.addParam("vc");
              sendEvt.addParam("eop");
+             sendEvt.addParam("chid");
              activity.addElement(sendEvt);
             waitEvt.addNext(sendEvt);
 
diff --git a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java
index c1dc504514f8251f66d23aaf8107938a98460ebe..fb3dcc3962b3ee781d03933977bf1e8128060fe0 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java
@@ -111,6 +111,8 @@ public class TaskNetworkInterface extends TMLTask {
             this.addAttribute(dst);
             TMLAttribute vci = new TMLAttribute("vc"+i, "vc"+i, new TMLType(TMLType.NATURAL), ""+i);
             this.addAttribute(vci);
+            TMLAttribute chid = new TMLAttribute("chid"+i, "chid"+i, new TMLType(TMLType.NATURAL), ""+i);
+            this.addAttribute(chid);
         }
 
 
@@ -192,6 +194,7 @@ public class TaskNetworkInterface extends TMLTask {
             waitingForStartPacket.addParam("dst" + i);
             waitingForStartPacket.addParam("vc");
             waitingForStartPacket.addParam("eop");
+            waitingForStartPacket.addParam("chid" + i);
             addElement(ispktChoice, waitingForStartPacket);
             ispktChoice.addGuard("ispkt == 0");
 
@@ -261,6 +264,7 @@ public class TaskNetworkInterface extends TMLTask {
                 sendEvtpktin.addParam("dst" + i);
                 sendEvtpktin.addParam("vc" + i);
                 sendEvtpktin.addParam("0");
+                sendEvtpktin.addParam("chid"+i);
                 addElement(packetLengthChoice, sendEvtpktin);
                 packetLengthChoice.addGuard("i" + i + " < pktlen" + i + " - 1");
 
@@ -292,6 +296,7 @@ public class TaskNetworkInterface extends TMLTask {
                 sendEvtpktinRB.addParam("dst" + i);
                 sendEvtpktinRB.addParam("vc" + i);
                 sendEvtpktinRB.addParam("1");
+                sendEvtpktinRB.addParam("chid"+i);
                 addElement(packetLengthChoice, sendEvtpktinRB);
                 packetLengthChoice.addGuard("i" + i + " == pktlen" + i + " - 1");
 
@@ -334,6 +339,7 @@ public class TaskNetworkInterface extends TMLTask {
                 sendEvtpktin1.addParam("dst" + i);
                 sendEvtpktin1.addParam("vc" + i);
                 sendEvtpktin1.addParam("0");
+                sendEvtpktin1.addParam("chid"+i);
                 addElement(choiceLBSeq, sendEvtpktin1);
                 choiceLBSeq.addGuard("i" + i + " < pktlen" + i + " - 1");
 
@@ -350,6 +356,7 @@ public class TaskNetworkInterface extends TMLTask {
                 sendEvtpktinRB1.addParam("dst" + i);
                 sendEvtpktinRB1.addParam("vc" + i);
                 sendEvtpktinRB1.addParam("1");
+                sendEvtpktinRB1.addParam("chid"+i);
                 addElement(choiceLBSeq, sendEvtpktinRB1);
                 choiceLBSeq.addGuard("i" + i + " == pktlen" + i + " - 1");
 
diff --git a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java
index 449388782e0c36c4c3bf1161b727a0f01a7631a7..160dbf4911e24fc6da4a31ad80122faa04b1ecc6 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java
@@ -53,6 +53,7 @@ import java.util.Vector;
  */
 public class TaskNetworkInterfaceOUT extends TMLTask {
     protected int nbOfVCs;
+    private TMLChoice packetChoice;
 
     public TaskNetworkInterfaceOUT(String name, Object referenceToClass, Object referenceToActivityDiagram) {
         super(name, referenceToClass, referenceToActivityDiagram);
@@ -62,7 +63,7 @@ public class TaskNetworkInterfaceOUT extends TMLTask {
     // inputEvt, channels: one per task
     // outputChannel, output event: only one, common: this is a network interface, only one exit!
     public void generate(int nbOfVCs, Vector<TMLEvent> outputFeedbackEvents, TMLEvent packetOutFromOUT,
-                         TMLEvent packetAvailable, TMLChannel outputChannelFromOUT) {
+                        TMLChannel outputChannelFromOUT) {
         int i;
 
         this.nbOfVCs = nbOfVCs;
@@ -76,6 +77,8 @@ public class TaskNetworkInterfaceOUT extends TMLTask {
         this.addAttribute(vc);
         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(chid);
         TMLAttribute memSpace = new TMLAttribute("memSpace", "memSpace", new TMLType(TMLType.NATURAL), "4096");
         this.addAttribute(memSpace);
 
@@ -85,7 +88,7 @@ public class TaskNetworkInterfaceOUT extends TMLTask {
             addTMLEvent(evt);
         }
         addTMLEvent(packetOutFromOUT);
-        addTMLEvent(packetAvailable);
+
 
         addReadTMLChannel(outputChannelFromOUT);
 
@@ -142,17 +145,14 @@ public class TaskNetworkInterfaceOUT extends TMLTask {
         addElement(internalSeq, testingEOP);
 
         // Left branch of choice: eop==1
-        TMLSendEvent sendEvtPktAvailable = new TMLSendEvent("sendEvtPktAvailable", referenceObject);
-        sendEvtPktAvailable.setEvent(packetAvailable);
-        sendEvtPktAvailable.addParam("pktlen");
-        sendEvtPktAvailable.addParam("dst");
-        sendEvtPktAvailable.addParam("vc");
-        sendEvtPktAvailable.addParam("eop");
-        addElement(testingEOP, sendEvtPktAvailable);
+        //New choice on all possible destination depending on chid
+        packetChoice = new TMLChoice("testingPacket", referenceObject);
+        addElement(testingEOP, packetChoice);
         testingEOP.addGuard("eop == 1");
 
-        TMLStopState stopOfLeftBranchOfChoice = new TMLStopState("stopOfLeftBranchOfChoice", referenceObject);
-        addElement(sendEvtPktAvailable, stopOfLeftBranchOfChoice);
+
+
+
 
         // Right branch of choice
         TMLStopState stopOfRightBranchOfChoice = new TMLStopState("stopOfRightBranchOfChoice", referenceObject);
@@ -175,7 +175,37 @@ public class TaskNetworkInterfaceOUT extends TMLTask {
         }
 
 
+    }
+
 
+    public void postProcessing(Vector<TMLEvent> packetsAvailable, Vector<String> channelIDs) {
+        if (packetsAvailable.size() == 0) {
+            TMLStopState stopOfLeftBranchOfChoice = new TMLStopState("stopNoDestinationTask", referenceObject);
+            addElement(packetChoice, stopOfLeftBranchOfChoice);
+            return;
+        }
+
+
+
+        for (TMLEvent packetAvailable: packetsAvailable) {
+            addTMLEvent(packetAvailable);
+        }
+
+        int i = 0;
+        for(TMLEvent packetAvailable: packetsAvailable) {
+            TMLSendEvent sendEvtPktAvailable = new TMLSendEvent("sendEvtPktAvailable", referenceObject);
+            sendEvtPktAvailable.setEvent(packetAvailable);
+            sendEvtPktAvailable.addParam("pktlen");
+            sendEvtPktAvailable.addParam("dst");
+            sendEvtPktAvailable.addParam("vc");
+            sendEvtPktAvailable.addParam("eop");
+            sendEvtPktAvailable.addParam("chid");
+            addElement(packetChoice, sendEvtPktAvailable);
+            packetChoice.addGuard("chid == " + channelIDs.get(i));
+            TMLStopState stopOfLeftBranchOfChoice = new TMLStopState("stopOfLeftBranchOfChoice__" + channelIDs.get(i), referenceObject);
+            addElement(sendEvtPktAvailable, stopOfLeftBranchOfChoice);
+            i++;
+        }
 
     }
 
diff --git a/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java b/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java
index 35ec4ee506710dbb7208acd29caddfb2de654d14..d4e020e13a5ea2c3d2062af4eb7ea7f57a4e07b0 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java
@@ -76,6 +76,8 @@ public class TaskOUTForDispatch extends TMLTask {
         this.addAttribute(vc);
         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(chid);
         TMLAttribute nEvt = new TMLAttribute("nEvt", "nEvt", new TMLType(TMLType.NATURAL), "0");
         this.addAttribute(nEvt);
         TMLAttribute loopExit = new TMLAttribute("loopExit", "loopExit", new TMLType(TMLType.NATURAL), "0");
@@ -149,6 +151,7 @@ public class TaskOUTForDispatch extends TMLTask {
                 waitEvt.addParam("dst");
                 waitEvt.addParam("vc");
                 waitEvt.addParam("eop");
+                waitEvt.addParam("chid");
                 activity.addLinkElement(sendEvt, waitEvt);
 
                 TMLActionState reqOut = new TMLActionState("ExitLoop" + i, referenceObject);
@@ -161,6 +164,7 @@ public class TaskOUTForDispatch extends TMLTask {
                 sendEvt.addParam("dst");
                 sendEvt.addParam("vc");
                 sendEvt.addParam("eop");
+                waitEvt.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 090251369306ca347b202a1ffb8017f65775a897..53d93acaa40276b610fc1bde4a07ff75d3ad0dff 100644
--- a/src/main/java/tmltranslator/tonetwork/TaskOUTForVC.java
+++ b/src/main/java/tmltranslator/tonetwork/TaskOUTForVC.java
@@ -75,6 +75,8 @@ public class TaskOUTForVC extends TMLTask {
         this.addAttribute(vc);
         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(chid);
         TMLAttribute j = new TMLAttribute("j", "j", new TMLType(TMLType.NATURAL), "0");
         this.addAttribute(j);
 
@@ -105,6 +107,7 @@ public class TaskOUTForVC extends TMLTask {
             waitEvt.addParam("dst");
             waitEvt.addParam("vc");
             waitEvt.addParam("eop");
+            waitEvt.addParam("chid");
             activity.addLinkElement(select, waitEvt);
 
             // loop on packet size
@@ -121,6 +124,7 @@ public class TaskOUTForVC extends TMLTask {
             sendEvt.addParam("dst");
             sendEvt.addParam("vc");
             sendEvt.addParam("eop");
+            waitEvt.addParam("chid");
             activity.addLinkElement(packetLoop, sendEvt);
 
             waitEvt = new TMLWaitEvent("ReturnFromVC", referenceObject);
diff --git a/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java b/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java
index 573e03873831499da11916a2d018c9cb4a1e4077..1786b6b54790b746fbd5a5faa41cf6bb77ff9dfb 100644
--- a/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java
+++ b/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java
@@ -105,10 +105,12 @@ public class TranslatedRouter<E> {
 
 
     // Connection channels and events
-    private HashMap<TMLChannel, TMLEvent> mapOfAllOutputChannels;
+    private HashMap<TMLChannel, TMLEvent> mapOfAllOutputChannels; // Channels going to the NoC
+    private HashMap<TMLChannel, TMLEvent> mapOfAllInputChannels; // Channels getting out of the NoC
+    private Vector<TMLChannel> handledChannels;
 
-    // Hw
-    HwExecutionNode node;
+
+    private Vector<TMLChannel> destChannels;
 
     public TranslatedRouter(TMAP2Network<?> main, TMLMapping<?> tmlmap, HwNoC noc, List<TMLChannel> channelsViaNoc,
                             int nbOfVCs, int xPos, int yPos, HwExecutionNode myHwExecutionNode) {
@@ -125,6 +127,7 @@ public class TranslatedRouter<E> {
         playingTheRoleOfNext = new Link[NB_OF_PORTS];
 
         allTasks = new Vector<>();
+        handledChannels = new Vector<>();
     }
 
     public void setLinkFromPreviousRouter(int index, Link l) {
@@ -211,12 +214,20 @@ public class TranslatedRouter<E> {
         for (i = 0; i < nbOfVCs; i++) {
             // 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) {
+                TraceManager.addDev("Output Channel:" + chan.getName() + " VC=" + chan.getVC());
                 if (chan.getVC() == i) {
-                    TMLEvent outputEventOfMux = new TMLEvent("EventMUXof" + chan.getName(), null, 8,
+                    TMLEvent outputEventOfMux = new TMLEvent("EventMUXof__" + chan.getName(), null, 8,
                             true);
+                    // PARAMS!!!!!
+                    outputEventOfMux.setOriginTask(chan.getOriginTask());
+                    outputEventOfMux.addParam(new TMLType(TMLType.NATURAL));
+                    outputEventOfMux.addParam(new TMLType(TMLType.NATURAL));
+                    outputEventOfMux.addParam(new TMLType(TMLType.NATURAL));
+                    outputEventOfMux.addParam(new TMLType(TMLType.NATURAL));
+                    outputEventOfMux.addParam(new TMLType(TMLType.NATURAL));
+
                     //mapOfOutputChannels.put(chan, outputEventOfMux);
                     mapOfAllOutputChannels.put(chan, outputEventOfMux);
                     inputEventsOfMUX.add(outputEventOfMux);
@@ -228,6 +239,11 @@ public class TranslatedRouter<E> {
             TMLEvent eventForMUX_and_NI_IN = new TMLEvent("EventBetweenMUXandNI_IN_for_" + nameOfExecNode,
                     null, 8, true);
             tmlm.addEvent(eventForMUX_and_NI_IN);
+            eventForMUX_and_NI_IN.addParam(new TMLType(TMLType.NATURAL));
+            eventForMUX_and_NI_IN.addParam(new TMLType(TMLType.NATURAL));
+            eventForMUX_and_NI_IN.addParam(new TMLType(TMLType.NATURAL));
+            eventForMUX_and_NI_IN.addParam(new TMLType(TMLType.NATURAL));
+            eventForMUX_and_NI_IN.addParam(new TMLType(TMLType.NATURAL));
 
             TaskMUXAppDispatch muxTask = new TaskMUXAppDispatch("MUXof" + nameOfExecNode + "_VC" + i, null, null);
             tmlm.addTask(muxTask);
@@ -446,7 +462,7 @@ public class TranslatedRouter<E> {
 
 
         //NetworkInterfaceOUT (1 per router)
-        TaskNetworkInterfaceOUT tniOut = new TaskNetworkInterfaceOUT("NI_OUT_" + nameOfExecNode, null,
+        tniOut = new TaskNetworkInterfaceOUT("NI_OUT_" + nameOfExecNode, null,
                 null);
         tmlm.addTask(tniOut);
         allTasks.add(tniOut);
@@ -463,24 +479,9 @@ public class TranslatedRouter<E> {
         TMLEvent pktoutFromOut = playingTheRoleOfPrevious[NB_OF_PORTS-1].packetOut;
         pktoutFromOut.setDestinationTask(tniOut);
 
-        TMLEvent packetOut = new TMLEvent("evtPktOutToAppFromOut__" + xPos + "_" + yPos,
-                null, 8, true);
-        packetOut.addParam(new TMLType(TMLType.NATURAL));
-        packetOut.addParam(new TMLType(TMLType.NATURAL));
-        packetOut.addParam(new TMLType(TMLType.NATURAL));
-        packetOut.addParam(new TMLType(TMLType.NATURAL));
-        tmlm.addEvent(packetOut);
-        packetOut.setOriginTask(tniOut);
-
-        tniOut.generate(nbOfVCs, feedbackPerVC, pktoutFromOut, packetOut, chOfOut);
 
-        // Fake task out
-        fto = new FakeTaskOut("FakeTaskOutOfRouter_" + xPos + "_" + yPos, null, null);
-        tmlm.addTask(fto);
-        allTasks.add(fto);
-        packetOut.setDestinationTask(fto);
-        fto.generate(packetOut);
 
+        tniOut.generate(nbOfVCs, feedbackPerVC, pktoutFromOut, chOfOut);
 
     }
 
@@ -504,6 +505,11 @@ public class TranslatedRouter<E> {
                     pktInEvtsVCs[i][j] = new TMLEvent("evt_pktin" + i + "_vc" + j + "_" + xPos + "_" + yPos,
                             null, 8, true);
                     tmlm.addEvent(pktInEvtsVCs[i][j]);
+                    pktInEvtsVCs[i][j].addParam(new TMLType(TMLType.NATURAL));
+                    pktInEvtsVCs[i][j].addParam(new TMLType(TMLType.NATURAL));
+                    pktInEvtsVCs[i][j].addParam(new TMLType(TMLType.NATURAL));
+                    pktInEvtsVCs[i][j].addParam(new TMLType(TMLType.NATURAL));
+                    pktInEvtsVCs[i][j].addParam(new TMLType(TMLType.NATURAL));
 
                     pktInChsVCs[i][j] = new TMLChannel("ch_pktin" + i + "_vc" + j + "_" + xPos + "_" + yPos,
                             null);
@@ -523,6 +529,11 @@ public class TranslatedRouter<E> {
                     for (int k = 0; k < TMAP2Network.DOMAIN + 1; k++) {
                         routeEvtVCs[i][j][k] = new TMLEvent("evtroute_" + i + "_vc" + j + "_" + k + "_" +
                                 xPos + "_" + yPos, null, 8, true);
+                        routeEvtVCs[i][j][k].addParam(new TMLType(TMLType.NATURAL));
+                        routeEvtVCs[i][j][k].addParam(new TMLType(TMLType.NATURAL));
+                        routeEvtVCs[i][j][k].addParam(new TMLType(TMLType.NATURAL));
+                        routeEvtVCs[i][j][k].addParam(new TMLType(TMLType.NATURAL));
+                        routeEvtVCs[i][j][k].addParam(new TMLType(TMLType.NATURAL));
                         tmlm.addEvent(routeEvtVCs[i][j][k]);
                         routeEvtVCsFeedback[i][j][k] = new TMLEvent("evtfeedback_" + i + "_vc" + j + "_" + k + "_" +
                                 xPos + "_" + yPos, null, 8, true);
@@ -541,6 +552,11 @@ public class TranslatedRouter<E> {
                 for (int j = 0; j < nbOfVCs; j++) {
                     evtOutVCs[i][j] = new TMLEvent("evt_out" + i + "_vc" + j + "_" + xPos + "_" + yPos,
                             null, 8, true);
+                    evtOutVCs[i][j].addParam(new TMLType(TMLType.NATURAL));
+                    evtOutVCs[i][j].addParam(new TMLType(TMLType.NATURAL));
+                    evtOutVCs[i][j].addParam(new TMLType(TMLType.NATURAL));
+                    evtOutVCs[i][j].addParam(new TMLType(TMLType.NATURAL));
+                    evtOutVCs[i][j].addParam(new TMLType(TMLType.NATURAL));
                     tmlm.addEvent(evtOutVCs[i][j]);
                     evtSelectVC[i][j] = new TMLEvent("evt_vcselect" + i + "_vc" + j + "_" + xPos + "_" + yPos,
                             null, 8, true);
@@ -617,7 +633,7 @@ public class TranslatedRouter<E> {
         tmla.addHwNode(busNIIN);
 
         // For each VC, we create a bus and a cpu. The bus connects to the main bridge
-        for(i=0; i<nbOfVCs; i++) {
+        for (i = 0; i < nbOfVCs; i++) {
             HwCPU cpu = new HwCPU("CPUForMUX_VC" + i + getPositionNaming());
             tmla.addHwNode(cpu);
             tmlmap.addTaskToHwExecutionNode(muxTasks.get(i), cpu);
@@ -637,7 +653,7 @@ public class TranslatedRouter<E> {
 
         HwMemory memNIIN = new HwMemory("MemNetworkiInterfaceIN" + getPositionNaming());
         tmla.addHwNode(memNIIN);
-        tmlmap.addCommToHwCommNode(playingTheRoleOfPrevious[NB_OF_PORTS-1].chOutToIN, memNIIN);
+        tmlmap.addCommToHwCommNode(playingTheRoleOfPrevious[NB_OF_PORTS - 1].chOutToIN, memNIIN);
 
         HwBridge bridgeNIIN = new HwBridge("BridgeNetworkiInterfaceIN" + getPositionNaming());
 
@@ -655,10 +671,10 @@ public class TranslatedRouter<E> {
                 tmlmap.addTaskToHwExecutionNode(dispatchIns.get(portNb), cpuIN);
 
                 // connection to the right bus
-                if (portNb < NB_OF_PORTS-1) {
+                if (portNb < NB_OF_PORTS - 1) {
                     // external
                     tmla.makeHwLink(playingTheRoleOfNext[portNb].busBetweenRouters, cpuIN);
-                    HwMemory memIN = new HwMemory("mem_IN"  + portNb + getPositionNaming());
+                    HwMemory memIN = new HwMemory("mem_IN" + portNb + getPositionNaming());
                     tmla.addHwNode(memIN);
                     tmla.makeHwLink(playingTheRoleOfNext[portNb].busBetweenRouters, memIN);
                     tmlmap.addCommToHwCommNode(playingTheRoleOfNext[portNb].chOutToIN, memIN);
@@ -672,11 +688,11 @@ public class TranslatedRouter<E> {
                 }
 
                 // For each IN VC, we do the Hw Arch: bus, cpu, mem
-                for(i=0; i<nbOfVCs; i++) {
+                for (i = 0; i < nbOfVCs; i++) {
                     HwCPU cpuINVC = new HwCPU("cpuINVC_" + portNb + "_" + i + getPositionNaming());
                     tmla.addHwNode(cpuINVC);
                     tmlmap.addTaskToHwExecutionNode(dispatchInVCs[portNb][i], cpuINVC);
-                    HwMemory memINVC = new HwMemory("memINVC" + portNb + "_" + i+ getPositionNaming());
+                    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());
@@ -700,7 +716,7 @@ public class TranslatedRouter<E> {
                 tmlmap.addTaskToHwExecutionNode(dispatchOuts.get(portNb), cpuOUT);
 
                 // connection to the right bus
-                if (portNb < NB_OF_PORTS-1) {
+                if (portNb < NB_OF_PORTS - 1) {
                     // external
                     tmla.makeHwLink(playingTheRoleOfPrevious[portNb].busBetweenRouters, cpuOUT);
                 } else {
@@ -713,11 +729,11 @@ public class TranslatedRouter<E> {
                 }
 
                 // For each IN VC, we do the Hw Arch: bus, cpu, mem
-                for(i=0; i<nbOfVCs; i++) {
+                for (i = 0; i < nbOfVCs; i++) {
                     HwCPU cpuOUTVC = new HwCPU("cpuOUTVC_" + portNb + "_" + i + getPositionNaming());
                     tmla.addHwNode(cpuOUTVC);
                     tmlmap.addTaskToHwExecutionNode(dispatchOutVCs[portNb][i], cpuOUTVC);
-                    HwMemory memOUTVC = new HwMemory("memOUTVC" + portNb + "_" + i+ getPositionNaming());
+                    HwMemory memOUTVC = new HwMemory("memOUTVC" + portNb + "_" + i + getPositionNaming());
                     tmla.addHwNode(memOUTVC);
                     HwBus busOUTVC = new HwBus("busINVC" + portNb + "_" + i + getPositionNaming());
                     tmla.addHwNode(busOUTVC);
@@ -754,8 +770,10 @@ public class TranslatedRouter<E> {
         tmla.makeHwLink(busOUTToMainBridge, mainBridge);
 
         // fake task on CPU
-        tmlmap.addTaskToHwExecutionNode(fto, node);
+        // tmlmap.addTaskToHwExecutionNode(fto, myHwExecutionNode);
+    }
 
+    public void makeOriginChannels() {
 
         // We now need to modify the corresponding input tasks
         // The channel is modified to NBRNBW
@@ -764,20 +782,175 @@ public class TranslatedRouter<E> {
 
         // For all channels whose origin task is mapped on the CPU of the router
 
-
+        destChannels = new Vector<>();
         for(TMLChannel ch: tmlmap.getTMLModeling().getChannels()) {
             TMLTask t = ch.getOriginTask();
             HwExecutionNode mappedOn = tmlmap.getHwNodeOf(t);
             if (mappedOn == myHwExecutionNode) {
-                TraceManager.addDev("Found HwNode of task " + t.getTaskName() + " for channel " + ch.getName());
+                TraceManager.addDev("Found HwNode of origin task " + t.getTaskName() + " for channel " + ch.getName());
                 // We must rework the channel of the task.
                 // The channel is modified to a NBRNBW with the same task has sender / receiver
                 // The channel is mapped to the local mem
                 // 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
+
+                handledChannels.add(ch);
+
+                ch.setType(TMLChannel.NBRNBW);
+                TMLTask dest = ch.getDestinationTask();
+
+                TMLChannel channelForDestination = new TMLChannel(ch.getName() + "_dest", ch.getReferenceObject());
+                channelForDestination.setType(TMLChannel.NBRNBW);
+                channelForDestination.setDestinationTask(dest);
+                channelForDestination.setOriginTask(dest);
+                destChannels.add(channelForDestination);
+                main.putTMLChannelID(channelForDestination, main.getChannelID(ch));
+
+                ch.setDestinationTask(t);
+
+                // Map modify channel to the right memory
+                HwMemory mem = tmlmap.getTMLArchitecture().getHwMemoryByName(myHwExecutionNode.getName() + "__mem");
+                if (mem != null) {
+                    TraceManager.addDev("Mapping channel " + ch.getName() + " on mem " + mem.getName());
+                    tmlmap.addCommToHwCommNode(ch, mem);
+                }
+
+                // Must now modify the source app
+                TMLAttribute pktlen = new TMLAttribute("pktlen", "pktlen", new TMLType(TMLType.NATURAL), "0");
+                t.addAttribute(pktlen);
+                TMLAttribute dst = new TMLAttribute("dst", "dst", new TMLType(TMLType.NATURAL), "0");
+                t.addAttribute(dst);
+                TMLAttribute vc = new TMLAttribute("vc", "vc", new TMLType(TMLType.NATURAL), "0");
+                t.addAttribute(vc);
+                TMLAttribute eop = new TMLAttribute("eop", "eop", new TMLType(TMLType.NATURAL), "1");
+                t.addAttribute(eop);
+                TMLAttribute chid = new TMLAttribute("chid", "chid", new TMLType(TMLType.NATURAL),
+                        ""+main.getChannelID(ch));
+                t.addAttribute(chid);
+
+                TMLActivity activity = t.getActivityDiagram();
+                Vector<TMLActivityElement> newElements = new Vector<>();
+                TMLWriteChannel twc;
+                for(TMLElement elt: activity.getElements()) {
+                    if (elt  instanceof TMLWriteChannel) {
+                        twc = (TMLWriteChannel) elt;
+                        if (twc.getChannel(0) == ch) {
+                            TraceManager.addDev("Modifying write ch of task " + t.getTaskName());
+                            TMLSendEvent tse = new TMLSendEvent("EvtForSending__" + ch.getName(), ch.getReferenceObject());
+                            newElements.add(tse);
+                            tse.setEvent(mapOfAllOutputChannels.get(ch));
+                            tse.addParam("pktlen");
+                            tse.addParam("dst");
+                            tse.addParam("vc");
+                            tse.addParam("eop");
+                            tse.addParam("chid");
+                            tse.addNext(twc.getNextElement(0));
+                            twc.setNewNext(twc.getNextElement(0), tse);
+
+                        }
+                    }
+                }
+                for(TMLActivityElement newElt: newElements) {
+                    activity.addElement(newElt);
+                }
             }
         }
 
+        // Handling of destination part of channels
+        for(TMLChannel chd: destChannels) {
+            tmlmap.getTMLModeling().addChannel(chd);
+        }
+    }
+
+    public void makeDestinationChannels() {
+
+        TMLModeling tmlm = tmlmap.getTMLModeling();
+
+        Vector<TMLEvent> events = new Vector<>();
+        Vector<String> ids = new Vector<>();
+
+        for(TMLChannel ch: destChannels) {
+            TMLTask t = ch.getDestinationTask();
+            HwExecutionNode mappedOn = tmlmap.getHwNodeOf(t);
+            if (mappedOn == myHwExecutionNode) {
+                TMLEvent packetOut = new TMLEvent("evtPktOutToAppFromOut__" + xPos + "_" + yPos,
+                        null, 8, true);
+                packetOut.addParam(new TMLType(TMLType.NATURAL));
+                packetOut.addParam(new TMLType(TMLType.NATURAL));
+                packetOut.addParam(new TMLType(TMLType.NATURAL));
+                packetOut.addParam(new TMLType(TMLType.NATURAL));
+                packetOut.addParam(new TMLType(TMLType.NATURAL));
+                tmlm.addEvent(packetOut);
+                packetOut.setOriginTask(tniOut);
+                packetOut.setDestinationTask(ch.getDestinationTask());
+                events.add(packetOut);
+                ids.add(main.getChannelID(ch));
+            }
+        }
+
+        tniOut.postProcessing(events, ids);
+
+
+
+        for(TMLChannel ch: tmlmap.getTMLModeling().getChannels()) {
+            if (!handledChannels.contains(ch)) {
+
+                TMLTask t = ch.getDestinationTask();
+                HwExecutionNode mappedOn = tmlmap.getHwNodeOf(t);
+                if (mappedOn == myHwExecutionNode) {
+                    TraceManager.addDev("Found HwNode of destination task " + t.getTaskName() + " for channel " + ch.getName());
+
+                    // Map modify channel to the right memory
+                    HwMemory mem = tmlmap.getTMLArchitecture().getHwMemoryByName(myHwExecutionNode.getName() + "__mem");
+                    if (mem != null) {
+                        TraceManager.addDev("Mapping channel " + ch.getName() + " on mem " + mem.getName());
+                        tmlmap.addCommToHwCommNode(ch, mem);
+                    }
+
+                    // Must now modify the dest app
+                    TMLAttribute pktlen = new TMLAttribute("pktlen", "pktlen", new TMLType(TMLType.NATURAL), "0");
+                    t.addAttribute(pktlen);
+                    TMLAttribute dst = new TMLAttribute("dst", "dst", new TMLType(TMLType.NATURAL), "0");
+                    t.addAttribute(dst);
+                    TMLAttribute vc = new TMLAttribute("vc", "vc", new TMLType(TMLType.NATURAL), "0");
+                    t.addAttribute(vc);
+                    TMLAttribute eop = new TMLAttribute("eop", "eop", new TMLType(TMLType.NATURAL), "1");
+                    t.addAttribute(eop);
+                    TMLAttribute chid = new TMLAttribute("chid", "chid", new TMLType(TMLType.NATURAL), "0");
+                    t.addAttribute(chid);
+
+                    TMLActivity activity = t.getActivityDiagram();
+                    Vector<TMLActivityElement> newElements = new Vector<>();
+                    TMLReadChannel trc;
+                    for (TMLElement elt : activity.getElements()) {
+                        if (elt instanceof TMLReadChannel) {
+                            trc = (TMLReadChannel) elt;
+                            if (trc.getChannel(0) == ch) {
+                                TraceManager.addDev("Modifying write ch of task " + t.getTaskName());
+                                TMLWaitEvent twe = new TMLWaitEvent("EvtForReceiving__" + ch.getName(), ch.getReferenceObject());
+                                newElements.add(twe);
+                                twe.setEvent(mapOfAllInputChannels.get(ch));
+                                twe.addParam("pktlen");
+                                twe.addParam("dst");
+                                twe.addParam("vc");
+                                twe.addParam("eop");
+                                twe.addParam("" + main.getChannelID(ch));
+                                activity.replaceAllNext(trc, twe);
+                                twe.addNext(trc);
+                            }
+                        }
+                    }
+                    for (TMLActivityElement newElt : newElements) {
+                        activity.addElement(newElt);
+                    }
+                }
+            }
+        }
+
+    }
+
+
+    public void postProcessing() {
 
 
 
diff --git a/src/main/java/ui/GTMLModeling.java b/src/main/java/ui/GTMLModeling.java
index 4dc0892986058de1d611b0cbc0959768c5a057f4..71a75222d0b4270cd054cc8583c976aba8f2f8d4 100644
--- a/src/main/java/ui/GTMLModeling.java
+++ b/src/main/java/ui/GTMLModeling.java
@@ -908,6 +908,7 @@ public class GTMLModeling {
                                 channel.setMax(port1.getMax());
                                 channel.ports.add(port1);
                                 channel.ports.add(port2);
+                                TraceManager.addDev("Adding channel with port1 vc=" + port1.getVC());
                                 channel.setVC(port1.getVC());
                                 if (port1.isBlocking() && port2.isBlocking()) {
                                     channel.setType(TMLChannel.BRBW);
diff --git a/src/main/java/ui/tmlcompd/TMLCPrimitivePort.java b/src/main/java/ui/tmlcompd/TMLCPrimitivePort.java
index 1693ddfa2387b6f24fa5231073ea106c4634c181..675fdd0426628bcc59d8aaa99815283766505cdd 100755
--- a/src/main/java/ui/tmlcompd/TMLCPrimitivePort.java
+++ b/src/main/java/ui/tmlcompd/TMLCPrimitivePort.java
@@ -160,7 +160,7 @@ public abstract class TMLCPrimitivePort extends TGCScalableWithInternalComponent
     protected String associatedEvent = "VOID";
 
     // Network
-    protected int vc = -1;
+    protected int vc = 0;
 
 
     public int verification;
@@ -910,7 +910,7 @@ public abstract class TMLCPrimitivePort extends TGCScalableWithInternalComponent
                                 try {
                                     vc = Integer.decode(elt.getAttribute("vc"));
                                 } catch (Exception e) {
-                                    vc = -1;
+                                    vc = 0;
                                 }
 
                             }
diff --git a/src/main/java/ui/window/JDialogTMLCompositePort.java b/src/main/java/ui/window/JDialogTMLCompositePort.java
index eda89b9c892cd3cf53aa3054b1f35075e1982dc2..2c1d3198bade69e523a254967220936596a09f4b 100644
--- a/src/main/java/ui/window/JDialogTMLCompositePort.java
+++ b/src/main/java/ui/window/JDialogTMLCompositePort.java
@@ -578,7 +578,7 @@ public class JDialogTMLCompositePort extends JDialogBase implements ActionListen
         panel5.add(lossPercentageLabel, c5);
         c5.gridwidth = GridBagConstraints.REMAINDER; //end row
         vcText = new JTextField("" + vc);
-        panel5.add(lossPercentageText, c5);
+        panel5.add(vcText, c5);
 
 
 
@@ -844,7 +844,7 @@ public class JDialogTMLCompositePort extends JDialogBase implements ActionListen
         try {
             return Integer.decode(vcText.getText().trim());
         } catch (Exception e) {
-            return -1;
+            return 0;
         }
     }
 }