diff --git a/src/main/java/avatartranslator/AvatarBlock.java b/src/main/java/avatartranslator/AvatarBlock.java
index 596ac54083a08ec0e6786702d2a72d638798901b..2f226d8aaefd9765c47332b9bc496c3be8d7ac75 100644
--- a/src/main/java/avatartranslator/AvatarBlock.java
+++ b/src/main/java/avatartranslator/AvatarBlock.java
@@ -164,11 +164,15 @@ public class AvatarBlock extends AvatarElement implements AvatarStateMachineOwne
         }
     }
 
-    public void addIntAttributeIfApplicable(String _name) {
-        if (getAvatarAttributeWithName(_name) == null) {
-            AvatarAttribute aa = new AvatarAttribute(_name, AvatarType.INTEGER, this, null);
-            attributes.add(aa);
+    public AvatarAttribute addIntAttributeIfApplicable(String _name) {
+        AvatarAttribute old = getAvatarAttributeWithName(_name);
+        if (old != null) {
+            return old;
         }
+
+        AvatarAttribute aa = new AvatarAttribute(_name, AvatarType.INTEGER, this, null);
+        attributes.add(aa);
+        return aa;
     }
 
     public String toString() {
diff --git a/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java b/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java
index b87cbad030eb80013763c2e4131096f96d756c4e..8917beb4fdebbd5d5c7df40c0a0517364bef4cae 100644
--- a/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java
+++ b/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java
@@ -1,51 +1,52 @@
 /* ludovic.apvrille AT enst.fr
-* 
-* This software is a computer program whose purpose is to allow the
-* edition of TURTLE analysis, design and deployment diagrams, to
-* allow the generation of RT-LOTOS or Java code from this diagram,
-* and at last to allow the analysis of formal validation traces
-* obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
-* from INRIA Rhone-Alpes.
-* 
-* This software is governed by the CeCILL  license under French law and
-* abiding by the rules of distribution of free software.  You can  use,
-* modify and/ or redistribute the software under the terms of the CeCILL
-* license as circulated by CEA, CNRS and INRIA at the following URL
-* "http://www.cecill.info".
-* 
-* As a counterpart to the access to the source code and  rights to copy,
-* modify and redistribute granted by the license, users are provided only
-* with a limited warranty  and the software's author,  the holder of the
-* economic rights,  and the successive licensors  have only  limited
-* liability.
-* 
-* In this respect, the user's attention is drawn to the risks associated
-* with loading,  using,  modifying and/or developing or reproducing the
-* software by the user in light of its specific status of free software,
-* that may mean  that it is complicated to manipulate,  and  that  also
-* therefore means  that it is reserved for developers  and  experienced
-* professionals having in-depth computer knowledge. Users are therefore
-* encouraged to load and test the software's suitability as regards their
-* requirements in conditions enabling the security of their systems and/or
-* data to be ensured and,  more generally, to use and operate it in the
-* same conditions as regards security.
-* 
-* The fact that you are presently reading this means that you have had
-* knowledge of the CeCILL license and that you accept its terms.
-*/
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
 
 
 package tmltranslator.toavatar;
 
 import avatartranslator.*;
 import myutil.TraceManager;
-import proverifspec.ProVerifQueryResult;
 import tmltranslator.*;
 import ui.TGComponent;
-import ui.tmlad.*;
 import ui.tmlcompd.TMLCPrimitivePort;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -57,7 +58,7 @@ import java.util.regex.Pattern;
  * @version 2.0 19/06/2020
  */
 public class FullTML2Avatar {
-    private TMLMapping<?> tmlmap;
+    //private TMLMapping<?> tmlmap;
     private TMLModeling<?> tmlmodel;
 
     private Map<SecurityPattern, List<AvatarAttribute>> symKeys = new HashMap<SecurityPattern, List<AvatarAttribute>>();
@@ -90,235 +91,14 @@ public class FullTML2Avatar {
     boolean mc = true;
     boolean security = false;
 
-    public FullTML2Avatar(TMLMapping<?> tmlmap) {
-        this.tmlmap = tmlmap;
-
-        this.tmlmodel = tmlmap.getTMLModeling();
+    public FullTML2Avatar(TMLModeling<?> tmlmodel) {
+        this.tmlmodel = tmlmodel;
 
-     
         allStates = new ArrayList<String>();
         attrsToCheck = new ArrayList<String>();
 
     }
 
-    public void checkConnections() {
-        List<HwLink> links = tmlmap.getTMLArchitecture().getHwLinks();
-        for (TMLTask t1 : tmlmodel.getTasks()) {
-            List<SecurityPattern> keys = new ArrayList<SecurityPattern>();
-            accessKeys.put(t1, keys);
-
-            HwExecutionNode node1 = tmlmap.getHwNodeOf(t1);
-            //Try to find memory using only private buses from origin
-            List<HwNode> toVisit = new ArrayList<HwNode>();
-            //List<HwNode> toMemory = new ArrayList<HwNode>();
-            List<HwNode> complete = new ArrayList<HwNode>();
-            for (HwLink link : links) {
-                if (link.hwnode == node1) {
-                    if (link.bus.privacy == 1) {
-                        toVisit.add(link.bus);
-                    }
-                }
-            }
-            boolean memory = false;
-            //memloop:
-            while (toVisit.size() > 0) {
-                HwNode curr = toVisit.remove(0);
-                for (HwLink link : links) {
-                    if (curr == link.bus) {
-                        if (link.hwnode instanceof HwMemory) {
-                            memory = true;
-                            List<SecurityPattern> patterns = tmlmap.getMappedPatterns((HwMemory) link.hwnode);
-                            accessKeys.get(t1).addAll(patterns);
-                            //  break memloop;
-                        }
-                        if (!complete.contains(link.hwnode) && !toVisit.contains(link.hwnode) && link.hwnode instanceof HwBridge) {
-                            toVisit.add(link.hwnode);
-                        }
-                    } else if (curr == link.hwnode) {
-                        if (!complete.contains(link.bus) && !toVisit.contains(link.bus) && link.bus.privacy == 1) {
-                            toVisit.add(link.bus);
-                        }
-                    }
-                }
-                complete.add(curr);
-            }
-
-            //Find path to secure memory from destination node
-
-
-            for (TMLTask t2 : tmlmodel.getTasks()) {
-                HwExecutionNode node2 =  tmlmap.getHwNodeOf(t2);
-                if (!memory) {
-                    //There is no path to a private memory
-                    originDestMap.put(t1.getName() + "__" + t2.getName(), channelPublic);
-                } else if (node1 == node2) {
-
-                    originDestMap.put(t1.getName() + "__" + t2.getName(), channelPrivate);
-                } else {
-                    //Navigate architecture for node
-
-                    //HwNode last = node1;
-                    List<HwNode> found = new ArrayList<HwNode>();
-                    List<HwNode> done = new ArrayList<HwNode>();
-                    List<HwNode> path = new ArrayList<HwNode>();
-                    Map<HwNode, List<HwNode>> pathMap = new HashMap<HwNode, List<HwNode>>();
-                    for (HwLink link : links) {
-                        if (link.hwnode == node1) {
-                            found.add(link.bus);
-                            List<HwNode> tmp = new ArrayList<HwNode>();
-                            tmp.add(link.bus);
-                            pathMap.put(link.bus, tmp);
-                        }
-                    }
-                    outerloop:
-                    while (found.size() > 0) {
-                        HwNode curr = found.remove(0);
-                        for (HwLink link : links) {
-                            if (curr == link.bus) {
-                                if (link.hwnode == node2) {
-                                    path = pathMap.get(curr);
-                                    break outerloop;
-                                }
-                                if (!done.contains(link.hwnode) && !found.contains(link.hwnode) && link.hwnode instanceof HwBridge) {
-                                    found.add(link.hwnode);
-                                    List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr));
-                                    tmp.add(link.hwnode);
-                                    pathMap.put(link.hwnode, tmp);
-                                }
-                            } else if (curr == link.hwnode) {
-                                if (!done.contains(link.bus) && !found.contains(link.bus)) {
-                                    found.add(link.bus);
-                                    List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr));
-                                    tmp.add(link.bus);
-                                    pathMap.put(link.bus, tmp);
-                                }
-                            }
-                        }
-                        done.add(curr);
-                    }
-                    if (path.size() == 0) {
-                        originDestMap.put(t1.getName() + "__" + t2.getName(), channelUnreachable);
-                    } else {
-                        int priv = 1;
-                        HwBus bus;
-                        //Check if all buses and bridges are private
-                        for (HwNode n : path) {
-                            if (n instanceof HwBus) {
-                                bus = (HwBus) n;
-                                if (bus.privacy == 0) {
-                                    priv = 0;
-                                    break;
-                                }
-                            }
-                        }
-                        originDestMap.put(t1.getName() + "__" + t2.getName(), priv);
-                    }
-                }
-            }
-        }
-
-    }
-
-
-	/*	public void checkChannels(){
-            List<TMLChannel> channels = tmlmodel.getChannels();
-			List<TMLTask> destinations = new ArrayList<TMLTask>();
-			TMLTask a; 
-			for (TMLChannel channel: channels){	
-				destinations.clear();
-				if (channel.isBasicChannel()){
-					a = channel.getOriginTask();
-					destinations.add(channel.getDestinationTask());
-				}
-				else {
-					a=channel.getOriginTasks().get(0);
-					destinations.addAll(channel.getDestinationTasks());
-				}  
-				HwExecutionNode node1 = tmlmap.getHwNodeOf(a);
-				for (TMLTask t: destinations){
-					//List<HwBus> buses = new ArrayList<HwBus>();
-					HwNode node2 = tmlmap.getHwNodeOf(t);
-
-					//Check if each node has a secure path to memory
-					
-					
-					
-
-					if (node1==node2){
-						channelMap.put(channel, channelPrivate);
-					}
-
-					if (node1!=node2){
-						//Navigate architecture for node
-						List<HwLink> links = tmlmap.getTMLArchitecture().getHwLinks();
-						//HwNode last = node1;
-						List<HwNode> found = new ArrayList<HwNode>();	
-						List<HwNode> done = new ArrayList<HwNode>();
-						List<HwNode> path = new ArrayList<HwNode>();
-						Map<HwNode, List<HwNode>> pathMap = new HashMap<HwNode, List<HwNode>>();
-
-						for (HwLink link: links){
-							if (link.hwnode == node1){
-								found.add(link.bus);
-								List<HwNode> tmp = new ArrayList<HwNode>();
-								tmp.add(link.bus);
-								pathMap.put(link.bus, tmp);
-							}
-						}
-						outerloop:
-						while (found.size()>0){
-							HwNode curr = found.remove(0);
-							for (HwLink link: links){
-								if (curr == link.bus){
-									if (link.hwnode == node2){
-										path = pathMap.get(curr);
-										break outerloop;
-									}
-									if (!done.contains(link.hwnode) && !found.contains(link.hwnode) && link.hwnode instanceof HwBridge){
-										found.add(link.hwnode);
-										List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr));
-										tmp.add(link.hwnode);
-										pathMap.put(link.hwnode, tmp);
-									}
-								}
-								else if (curr == link.hwnode){
-									if (!done.contains(link.bus) && !found.contains(link.bus)){
-										found.add(link.bus);
-										List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr));
-										tmp.add(link.bus);
-										pathMap.put(link.bus, tmp);
-									}
-								}
-							}
-							done.add(curr);
-						}
-
-						if (path.size() ==0){
-				
-							channelMap.put(channel, channelUnreachable);
-						}
-						else {
-							int priv=1;
-							HwBus bus;
-							//Check if all buses and bridges are private
-							for (HwNode n: path){
-								if (n instanceof HwBus){
-									bus = (HwBus) n;
-									if (bus.privacy ==0){
-										priv=0;
-										break;
-									}
-								}
-							}
-
-							channelMap.put(channel, priv);
-							//TraceManager.addDev("Channel "+channel.getName() + " between Task "+ a.getTaskName() + " and Task " + t.getTaskName() + " is " + (priv==1 ? "confidential" : "not confidential"));
-						}
-					}
-				}
-			}  
-			TraceManager.addDev(channelMap);
-		}*/
 
     public List<AvatarStateMachineElement> translateState(TMLActivityElement ae, AvatarBlock block) {
 
@@ -633,14 +413,20 @@ public class FullTML2Avatar {
 
             } else if (ae instanceof TMLWaitEvent) {
                 AvatarSignal sig;
+
                 if (!signalInMap.containsKey(evt.getName())) {
                     sig = new AvatarSignal(getName(evt.getName()), AvatarSignal.IN, evt.getReferenceObject());
                     signals.add(sig);
+                    signalOutMap.put(evt.getName(), sig);
                     block.addSignal(sig);
-                    signalInMap.put(evt.getName(), sig);
                 } else {
                     sig = signalInMap.get(evt.getName());
                 }
+
+                if (sig == null) {
+                    TraceManager.addDev("NULL evt:" + evt.getName())
+;                }
+
                 AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject());
                 for (int i = 0; i < aee.getNbOfParams(); i++) {
 
@@ -650,8 +436,18 @@ public class FullTML2Avatar {
                         TraceManager.addDev("Missing Attribute " + aee.getParam(i));
                     } else {
                         //	Add parameter to signal and actiononsignal
+                        TraceManager.addDev("Param #" + i + ":" + aee.getParam(i));
+                        AvatarAttribute aa = block.getAvatarAttributeWithName(aee.getParam(i));
+                        if (aa == null) {
+                            TraceManager.addDev("NULL Att:");
+                        }
                         sig.addParameter(block.getAvatarAttributeWithName(aee.getParam(i)));
+
+
+
+                        TraceManager.addDev("Param #" + i + " (1)");
                         as.addValue(aee.getParam(i));
+                        TraceManager.addDev("Param #" + i + " (2)");
                     }
                 }
 
@@ -676,7 +472,7 @@ public class FullTML2Avatar {
 
         } else if (ae instanceof TMLActivityElementWithAction) {
             //Might be encrypt or decrypt
-            AvatarState as = new AvatarState(ae.getValue().replaceAll(" ", "").replaceAll("\\*","").replaceAll("\\+","").replaceAll("\\-","") + "_" + ae.getName().replaceAll(" ", "").replaceAll("\\*","").replaceAll("\\+","").replaceAll("\\-",""), ae.getReferenceObject());
+            AvatarState as = new AvatarState(ae.getValue().replaceAll(" ", "").replaceAll("\\*", "").replaceAll("\\+", "").replaceAll("\\-", "") + "_" + ae.getName().replaceAll(" ", "").replaceAll("\\*", "").replaceAll("\\+", "").replaceAll("\\-", ""), ae.getReferenceObject());
             tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject());
             as.addNext(tran);
             elementList.add(as);
@@ -1086,7 +882,7 @@ public class FullTML2Avatar {
             } else {
                 // See if action.
                 if (ae instanceof TMLActionState) {
-                    String val = ((TMLActionState)ae).getAction();
+                    String val = ((TMLActionState) ae).getAction();
                     tran.addAction(val);
                 }
 
@@ -1102,6 +898,10 @@ public class FullTML2Avatar {
             TMLActivityElementChannel aec = (TMLActivityElementChannel) ae;
             TMLChannel ch = aec.getChannel(0);
             AvatarSignal sig;
+
+            String nv = getName(ch.getName()) + "_chData";
+            block.addIntAttributeIfApplicable(nv);
+
             boolean checkAcc = false;
             if (ae.getReferenceObject() != null) {
                 checkAcc = ((TGComponent) ae.getReferenceObject()).getCheckableAccessibility();
@@ -1112,195 +912,52 @@ public class FullTML2Avatar {
             }
             AvatarState signalState = new AvatarState("signalstate_" + ae.getName().replaceAll(" ", "") + "_" + ch.getName(), ae.getReferenceObject(), checkAcc, checked);
             AvatarTransition signalTran = new AvatarTransition(block, "__after_signalstate_" + ae.getName() + "_" + ch.getName(), ae.getReferenceObject());
+            AvatarTransition signalTranBefore = new AvatarTransition(block, "__before_signalstateint_" + ae.getName() + "_" + ch.getName(), ae
+                    .getReferenceObject());
+            AvatarState signalStateIntermediate = new AvatarState("signalstateinter_" + ae.getName().replaceAll(" ", "") + "_" + ch.getName(), ae
+                    .getReferenceObject(), checkAcc, checked);
+            AvatarTransition signalTranInit = new AvatarTransition(block, "_init_signalstate_" + ae.getName() + "_" + ch.getName(), ae
+                    .getReferenceObject());
+
             if (ae instanceof TMLReadChannel) {
                 //Create signal if it does not already exist
-                if (!signalInMap.containsKey(ch.getName())) {
-                    sig = new AvatarSignal(getName(ch.getName()), AvatarSignal.IN, ch.getReferenceObject());
-                    signals.add(sig);
-                    signalInMap.put(ch.getName(), sig);
-                    block.addSignal(sig);
-                    AvatarAttribute channelData = new AvatarAttribute(getName(ch.getName()) + "_chData", AvatarType.INTEGER, block, null);
-                    if (block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData") == null) {
-                        block.addAttribute(channelData);
-                    }
-                    sig.addParameter(channelData);
-                } else {
-                    sig = signalInMap.get(ch.getName());
-                }
-                AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject());
+                sig = signalInMap.get(ch.getName());
+            } else {
+                sig = signalOutMap.get(ch.getName());
+            }
 
-                if (ae.securityPattern != null) {
-                    //If nonce
-                    if (ae.securityPattern.type.equals("Nonce")) {
-                        block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                        as.addValue(ae.securityPattern.name);
-                    }
-                    //Send the encrypted key
-                    else if (!ae.securityPattern.key.isEmpty()) {
-                        as.addValue("encryptedKey_" + ae.securityPattern.key);
-                        AvatarAttribute data = new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null);
-                        block.addAttribute(data);
-                    } else {
-                        //Send the encrypted data
-                        if (!secChannelMap.containsKey(ae.securityPattern.name)) {
-                            List<String> tmp = new ArrayList<String>();
-                            secChannelMap.put(ae.securityPattern.name, tmp);
-                        }
-                        
-                        secChannelMap.get(ae.securityPattern.name).add(ch.getName());
-                        if (aec.getEncForm()){
-                        	as.addValue(ae.securityPattern.name + "_encrypted");
-                        	AvatarAttribute data = new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null);
-                        	block.addAttribute(data);
-                        }
-                        else {
-							if (block.getAvatarAttributeWithName(ae.securityPattern.name) == null){
-                       			AvatarAttribute data = new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null);
-								block.addAttribute(data);
-							}
-							as.addValue(ae.securityPattern.name);
- 	                       
-                        }
-                    }
-                } else {
-                    as.addValue(getName(ch.getName()) + "_chData");
-                }
+            AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject());
+            tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject());
 
-                tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject());
-                elementList.add(signalState);
-                signalState.addNext(signalTran);
-                elementList.add(signalTran);
-                signalTran.addNext(as);
-                as.addNext(tran);
-                elementList.add(as);
-                elementList.add(tran);
-                if (ch.checkAuth) {
-                    //Add aftersignal state
-                    AvatarState afterSignalState = new AvatarState("aftersignalstate_" + ae.getName().replaceAll(" ", "") + "_" + ch.getName(), ae.getReferenceObject());
-                    tran.addNext(afterSignalState);
-                    tran = new AvatarTransition(block, "__aftersignalstate_" + ae.getName(), ae.getReferenceObject());
-                    afterSignalState.addNext(tran);
-                    elementList.add(afterSignalState);
-                    elementList.add(tran);
-                    if (block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData") == null) {
-                        AvatarAttribute channelData = new AvatarAttribute(getName(ch.getName()) + "_chData", AvatarType.INTEGER, block, null);
-                        block.addAttribute(channelData);
-                    }
-                    AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + afterSignalState.getName() + "." + getName(ch.getName()) + "_chData", ae.getReferenceObject(), block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData"), afterSignalState);
-                    signalAuthDestMap.put(ch.getName(), authDest);
-                }
+            elementList.add(signalState);
+            elementList.add(signalStateIntermediate);
+            elementList.add(as);
+            elementList.add(tran);
+            elementList.add(signalTranInit);
+            elementList.add(signalTranBefore);
+            elementList.add(signalTran);
 
-            } else {
-                //WriteChannel
+            signalState.addNext(signalTranInit);
+            signalTranInit.addAction(ch.getName() + "_chData = 0");
+            signalTranInit.addNext(signalStateIntermediate);
+            signalStateIntermediate.addNext(signalTran);
+            signalTran.setGuard(ch.getName() + "_chData < (" + aec.getNbOfSamples() + ")");
+            signalTran.addNext(as);
+            as.addNext(signalTranBefore);
+            signalTranBefore.addAction(ch.getName() + "_chData = " + ch.getName() + "_chData + 1 ");
+            signalTranBefore.addNext(signalStateIntermediate);
 
-                if (!signalOutMap.containsKey(ch.getName())) {
-                    //Add signal if it does not exist
-                    sig = new AvatarSignal(getName(ch.getName()), AvatarSignal.OUT, ch.getReferenceObject());
-                    signals.add(sig);
-                    block.addSignal(sig);
-                    signalOutMap.put(ch.getName(), sig);
-                    AvatarAttribute channelData = new AvatarAttribute(getName(ch.getName()) + "_chData", AvatarType.INTEGER, block, null);
-                    if (block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData") == null) {
-                        block.addAttribute(channelData);
-                    }
-                    sig.addParameter(channelData);
-                } else {
-                    sig = signalOutMap.get(ch.getName());
-                }
-                //Add the confidentiality pragma for this channel data
-                if (ch.checkConf) {
-                	if (ch.originalOriginTasks.size()!=0 && ch.getOriginPort().getName().contains("PORTORIGIN")){
-                	//	System.out.println("Channel " + ch.getOriginPort().getName() + " block " + block.getName());
-                		if (!attrsToCheck.contains(ch.getOriginPort().getName() + "_chData") ) {
-                			for (TMLTask origTask: ch.originalOriginTasks){
-                				AvatarBlock bl = avspec.getBlockWithName(origTask.getName().split("__")[origTask.getName().split("__").length - 1]);
-                				if (bl!=null){
-                					AvatarAttribute attr = bl.getAvatarAttributeWithName(block.getName() + "_chData");
-                					if (attr != null) {
-		    	                        attrsToCheck.add(ch.getOriginPort().getName() + "_chData");
-		    	                        avspec.addPragma(new AvatarPragmaSecret("#Confidentiality " + bl.getName() + "." + block.getName() + "_chData", ch.getReferenceObject(), attr));
- 			   	                    }
-                				}
-                			}
-                		}
-                	}
-                	else {
-	                    if (!attrsToCheck.contains(ch.getOriginPort().getName() + "_chData") ) {
-    	                    AvatarAttribute attr = block.getAvatarAttributeWithName(ch.getOriginPort().getName() + "_chData");
-    	                    if (attr != null) {
-    	                        attrsToCheck.add(ch.getOriginPort().getName() + "_chData");
-    	                        avspec.addPragma(new AvatarPragmaSecret("#Confidentiality " + block.getName() + "." + ch.getName() + "_chData", ch.getReferenceObject(), attr));
-    	                    }
-                        }
-                    }
-                }
-                //Add the authenticity pragma for this channel data
-                if (ch.checkAuth) {
-                    if (block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData") == null) {
-                        AvatarAttribute channelData = new AvatarAttribute(getName(ch.getName()) + "_chData", AvatarType.INTEGER, block, null);
-                        block.addAttribute(channelData);
-                    }
-                    AvatarAttributeState authOrigin = new AvatarAttributeState(block.getName() + "." + signalState.getName() + "." + getName(ch.getName()) + "_chData", ae.getReferenceObject(), block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData"), signalState);
-                    signalAuthOriginMap.put(ch.getName(), authOrigin);
-                }
-                AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject());
+            signalStateIntermediate.addNext(tran);
+            tran.setGuard("else");
 
-                if (ae.securityPattern != null) {
-                    //send nonce
-                    if (ae.securityPattern.type.equals("Nonce")) {
-                        block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                        as.addValue(ae.securityPattern.name);
-                    }
-                    //send encrypted key
-                    else if (!ae.securityPattern.key.isEmpty()) {
-                        as.addValue("encryptedKey_" + ae.securityPattern.key);
-                        AvatarAttribute data = new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null);
-                        block.addAttribute(data);
-                    } else {
-                        //send encrypted data 
-                        //
-                        if (aec.getEncForm()){
-                        	as.addValue(ae.securityPattern.name + "_encrypted");
-                        	AvatarAttribute data = new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null);
-                        	block.addAttribute(data);
-						}
-                        else {
-                        	//Send unecrypted form
-                        	if (block.getAvatarAttributeWithName(ae.securityPattern.name) == null){
-                       			AvatarAttribute data = new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null);
-                        		block.addAttribute(data);
-                        	}
-                        	as.addValue(ae.securityPattern.name);
-                        }
-                        
-                        if (!secChannelMap.containsKey(ae.securityPattern.name)) {
-                            List<String> tmp = new ArrayList<String>();
-                            secChannelMap.put(ae.securityPattern.name, tmp);
-                        }
-                        secChannelMap.get(ae.securityPattern.name).add(ch.getName());
-                    }
-                } else {
-                    //No security pattern
-                    //	TraceManager.addDev("no security pattern for " + ch.getName());
-                    as.addValue(ch.getOriginPort().getName()+ "_chData");
-                }
 
-                tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject());
-                elementList.add(signalState);
-                signalState.addNext(signalTran);
-                elementList.add(signalTran);
-                signalTran.addNext(as);
-                as.addNext(tran);
-                elementList.add(as);
-                elementList.add(tran);
-            }
 
         } else if (ae instanceof TMLForLoop) {
             TMLForLoop loop = (TMLForLoop) ae;
             if (loop.isInfinite()) {
                 //Make initializaton, then choice state with transitions
                 List<AvatarStateMachineElement> elements = translateState(ae.getNextElement(0), block);
-					/*List<AvatarStateMachineElement> afterloop =*/
+                /*List<AvatarStateMachineElement> afterloop =*/
                 translateState(ae.getNextElement(1), block);
                 AvatarState initState = new AvatarState(ae.getName().replaceAll(" ", "") + "__init", ae.getReferenceObject());
                 elementList.add(initState);
@@ -1368,7 +1025,7 @@ public class FullTML2Avatar {
                 tran = new AvatarTransition(block, "loop_increment__" + ae.getName(), ae.getReferenceObject());
                 //Set default loop limit guard
                 tran.setGuard(AvatarGuard.createFromString(block, loop.getCondition()));
-					/*AvatarGuard guard = */
+                /*AvatarGuard guard = */
                 //AvatarGuard.createFromString(block, loop.getCondition());
                 tran.addAction(AvatarTerm.createActionFromString(block, loop.getIncrement()));
                 //tran.addAction(AvatarTerm.createActionFromString(block, "loop_index = loop_index + 1"));
@@ -1466,14 +1123,14 @@ public class FullTML2Avatar {
 			}*/
 
     public String getName(String s) {
-    //	System.out.println("String " + s);
+        //	System.out.println("String " + s);
         if (nameMap.containsKey(s)) {
             return nameMap.get(s);
         } else {
             if (!s.contains("__")) {
                 nameMap.put(s, s);
                 return s;
-            } else if (s.split("__").length == 1 ) {
+            } else if (s.split("__").length == 1) {
                 nameMap.put(s, s.split("__")[s.split("__").length - 1]);
                 return s.split("__")[s.split("__").length - 1];
             } else if (s.contains("JOIN") || s.contains("FORK")) {
@@ -1491,52 +1148,41 @@ public class FullTML2Avatar {
                 }*/
                 nameMap.put(s, s);
                 return s;
-               // nameMap.put(s, s.split("__")[s.split("__").length - 1]);
-               // return s.split("__")[s.split("__").length - 1];
+                // nameMap.put(s, s.split("__")[s.split("__").length - 1]);
+                // return s.split("__")[s.split("__").length - 1];
             }
         }
     }
 
     public AvatarSpecification generateAvatarSpec(String _loopLimit) {
 
-        TraceManager.addDev("security patterns " + tmlmodel.secPatterns);
-        TraceManager.addDev("keys " + tmlmap.mappedSecurity);
+        //TraceManager.addDev("security patterns " + tmlmodel.secPatterns);
+        //TraceManager.addDev("keys " + tmlmap.mappedSecurity);
 
 
         //TODO: Make state names readable
         //TODO: Put back numeric guards
-        //TODO: Calcuate for temp variable
-        if (tmlmap.getTMLModeling().getTGComponent() != null) {
-            this.avspec = new AvatarSpecification("spec", tmlmap.getTMLModeling().getTGComponent().getTDiagramPanel().tp);
+        //TODO: Calculate for temp variable
+        if (tmlmodel.getTGComponent() != null) {
+            this.avspec = new AvatarSpecification("spec", tmlmodel.getTGComponent().getTDiagramPanel().tp);
         } else {
             this.avspec = new AvatarSpecification("spec", null);
         }
         attrsToCheck.clear();
         tmlmodel.removeForksAndJoins();
-        
+
 //        System.out.println("MODIFIED model " + tmlmodel);
-        
-        for (TMLChannel chan: tmlmodel.getChannels()){
-        	//System.out.println("chan " + chan);
-        	TMLTask task = chan.getOriginTask();
-        	
-        	TMLTask task2 = chan.getDestinationTask();
-        	HwExecutionNode node =  tmlmap.getHwNodeOf(task);
-        	HwExecutionNode node2 = tmlmap.getHwNodeOf(task2);
-        	if (node==null){
-        		tmlmap.addTaskToHwExecutionNode(task, node2);
-        	}
-        	
-        	if (node2==null){
-        		tmlmap.addTaskToHwExecutionNode(task2, node);
-        	}
-        	
-        	if (chan.getName().contains("fork__") || chan.getName().contains("FORKCHANNEL")){
-        		chan.setName(chan.getName().replaceAll("__",""));
-        	}
-        	
+
+        for (TMLChannel chan : tmlmodel.getChannels()) {
+            //System.out.println("chan " + chan);
+            TMLTask task = chan.getOriginTask();
+            TMLTask task2 = chan.getDestinationTask();
+
+            if (chan.getName().contains("fork__") || chan.getName().contains("FORKCHANNEL")) {
+                chan.setName(chan.getName().replaceAll("__", ""));
+            }
         }
-        
+
         //Only set the loop limit if it's a number
         String pattern = "^[0-9]{1,2}$";
         Pattern r = Pattern.compile(pattern);
@@ -1544,6 +1190,7 @@ public class FullTML2Avatar {
         if (m.find()) {
             loopLimit = Integer.valueOf(_loopLimit);
         }
+
         for (TMLChannel channel : tmlmodel.getChannels()) {
             for (TMLCPrimitivePort p : channel.ports) {
                 channel.checkConf = channel.checkConf || p.checkConf;
@@ -1560,7 +1207,7 @@ public class FullTML2Avatar {
             topasm.addElement(topss);
         }
 
-        List<TMLTask> tasks = tmlmap.getTMLModeling().getTasks();
+        List<TMLTask> tasks = tmlmodel.getTasks();
 
         for (TMLTask task : tasks) {
             AvatarBlock block = new AvatarBlock(task.getName().split("__")[task.getName().split("__").length - 1], avspec, task.getReferenceObject());
@@ -1571,12 +1218,12 @@ public class FullTML2Avatar {
             avspec.addBlock(block);
         }
 
-        checkConnections();
+        // checkConnections();
         //	checkChannels();
 
-        distributeKeys();
+        //distributeKeys();
 
-        TraceManager.addDev("ALL KEYS " + accessKeys);
+        //TraceManager.addDev("ALL KEYS " + accessKeys);
 			/*for (TMLTask t: accessKeys.keySet()){
 				TraceManager.addDev("TASK " +t.getName());
 				for (SecurityPattern sp: accessKeys.get(t)){
@@ -1600,10 +1247,12 @@ public class FullTML2Avatar {
                     if (block.getAvatarAttributeWithName(chan.getOriginPort().getName() + "_chData") == null) {
                         block.addAttribute(channelData);
                     }
-                    sig.addParameter(channelData);
+                    //sig.addParameter(channelData);
                     signalOutMap.put(chan.getName(), sig);
+
                 } else if (chan.hasDestinationTask(task)) {
-                    AvatarSignal sig = new AvatarSignal(getName(chan.getName()), AvatarSignal.IN, chan.getReferenceObject());
+
+                    AvatarSignal sig = new AvatarSignal(chan.getDestinationPort().getName(), AvatarSignal.IN, chan.getReferenceObject());
                     block.addSignal(sig);
                     signals.add(sig);
                     signalInMap.put(chan.getName(), sig);
@@ -1611,7 +1260,7 @@ public class FullTML2Avatar {
                     if (block.getAvatarAttributeWithName(getName(chan.getName()) + "_chData") == null) {
                         block.addAttribute(channelData);
                     }
-                    sig.addParameter(channelData);
+                    //sig.addParameter(channelData);
                 }
             }
             AvatarAttribute tmp = new AvatarAttribute("tmp", AvatarType.INTEGER, block, null);
@@ -1690,9 +1339,9 @@ public class FullTML2Avatar {
                 }
 
                 //Create exit after # of loop iterations is maxed out
-					/*AvatarStopState stop =*/
-                new AvatarStopState("stop", task.getActivityDiagram().get(0).getReferenceObject());	
-					/*AvatarTransition exitTran = */
+                /*AvatarStopState stop =*/
+                new AvatarStopState("stop", task.getActivityDiagram().get(0).getReferenceObject());
+                /*AvatarTransition exitTran = */
                 new AvatarTransition(block, "to_stop", task.getActivityDiagram().get(0).getReferenceObject());
 
 
@@ -1747,370 +1396,335 @@ public class FullTML2Avatar {
 							tran.addNext(newStart);
 						}*/
 
-					}
+                }
 
 
-					asm.setStartState(ss);
+                asm.setStartState(ss);
 
-				}
-				else {
-					//Not requested
-					List<AvatarStateMachineElement> elementList= translateState(task.getActivityDiagram().get(0), block);
-					for (AvatarStateMachineElement e: elementList){
-						e.setName(processName(e.getName(), e.getID()));
-						asm.addElement(e);
-						stateObjectMap.put(task.getName().split("__")[1]+"__"+e.getName(), e.getReferenceObject());
-					}
-					asm.setStartState((AvatarStartState) elementList.get(0));
-				}
-				for (SecurityPattern secPattern: secPatterns){
-					AvatarAttribute sec = block.getAvatarAttributeWithName(secPattern.name);
-					if (sec!=null){
-						//sec = new AvatarAttribute(secPattern.name, AvatarType.INTEGER, block, null);
-						//AvatarAttribute enc = new AvatarAttribute(secPattern.name+"_encrypted", AvatarType.INTEGER, block, null);
-					//	block.addAttribute(sec);
-					//	block.addAttribute(enc);
-					//}
-						avspec.addPragma(new AvatarPragmaSecret("#Confidentiality "+block.getName() + "."+ secPattern.name, null, sec));
-					}
-				}
+            } else {
+                //Not requested
+                List<AvatarStateMachineElement> elementList = translateState(task.getActivityDiagram().get(0), block);
+                for (AvatarStateMachineElement e : elementList) {
+                    e.setName(processName(e.getName(), e.getID()));
+                    asm.addElement(e);
+                    stateObjectMap.put(task.getName().split("__")[1] + "__" + e.getName(), e.getReferenceObject());
+                }
+                asm.setStartState((AvatarStartState) elementList.get(0));
+            }
+            for (SecurityPattern secPattern : secPatterns) {
+                AvatarAttribute sec = block.getAvatarAttributeWithName(secPattern.name);
+                if (sec != null) {
+                    //sec = new AvatarAttribute(secPattern.name, AvatarType.INTEGER, block, null);
+                    //AvatarAttribute enc = new AvatarAttribute(secPattern.name+"_encrypted", AvatarType.INTEGER, block, null);
+                    //	block.addAttribute(sec);
+                    //	block.addAttribute(enc);
+                    //}
+                    avspec.addPragma(new AvatarPragmaSecret("#Confidentiality " + block.getName() + "." + secPattern.name, null, sec));
+                }
+            }
 
-			}
+        }
 
 
-			//Add authenticity pragmas
-			for (String s: signalAuthOriginMap.keySet()){
-				if (signalAuthDestMap.containsKey(s)){
-					AvatarPragmaAuthenticity pragma = new AvatarPragmaAuthenticity("#Authenticity " + signalAuthOriginMap.get(s).getName() + " " + signalAuthDestMap.get(s).getName(), signalAuthOriginMap.get(s).getReferenceObject(), signalAuthOriginMap.get(s), signalAuthDestMap.get(s));
-					if (secChannelMap.containsKey(s)){
-						for (String channel: secChannelMap.get(s)){
-							TMLChannel ch = tmlmodel.getChannelByShortName(channel);
-							if (ch!=null){
-								if (ch.checkAuth){
-									avspec.addPragma(pragma);	
-									break;
-								}
-							}
-						}
-						
-					}
-					else {
-						avspec.addPragma(pragma);
-					}
-				}
-			}
+        //Add authenticity pragmas
+        for (String s : signalAuthOriginMap.keySet()) {
+            if (signalAuthDestMap.containsKey(s)) {
+                AvatarPragmaAuthenticity pragma = new AvatarPragmaAuthenticity("#Authenticity " + signalAuthOriginMap.get(s).getName() + " " + signalAuthDestMap.get(s).getName(), signalAuthOriginMap.get(s).getReferenceObject(), signalAuthOriginMap.get(s), signalAuthDestMap.get(s));
+                if (secChannelMap.containsKey(s)) {
+                    for (String channel : secChannelMap.get(s)) {
+                        TMLChannel ch = tmlmodel.getChannelByShortName(channel);
+                        if (ch != null) {
+                            if (ch.checkAuth) {
+                                avspec.addPragma(pragma);
+                                break;
+                            }
+                        }
+                    }
 
-			//Create relations
-			//Channels are ?? to ??
-			//Requests are n to 1
-			//Events are ?? to ??
-			AvatarBlock fifo = new AvatarBlock("FIFO", avspec,null);
-			for (TMLChannel channel:tmlmodel.getChannels()){
-			    // We assume one to one
-
-				if (channel.isBasicChannel()){
-					//System.out.println("checking channel " + channel.getName());
-					AvatarRelation ar= new AvatarRelation(channel.getName(), taskBlockMap.get(channel.getOriginTask()), taskBlockMap.get(channel.getDestinationTask()), channel.getReferenceObject());
-					LinkedList<HwCommunicationNode> path = tmlmap.findNodesForElement(channel);
-					if (path.size()!=0){
-						ar.setPrivate(true);
-						for (HwCommunicationNode node:path){
-							if (node instanceof HwBus){
-								if (((HwBus) node).privacy ==0){
-									ar.setPrivate(false);
-								}
-							}
-						}
-					}
-					else {
-						if (channel.originalOriginTasks.size()==0){
-							ar.setPrivate(originDestMap.get(channel.getOriginTask().getName()+"__"+channel.getDestinationTask().getName())==1);
-						}
-						else {
-							//System.out.println("complex channel " + channel.getName());
-							//Find privacy of original tasks
-							boolean priv = true;
-							for (TMLTask task1: channel.originalOriginTasks){
-								for (TMLTask task2: channel.originalDestinationTasks){
-									if (originDestMap.get(task1.getName()+"__"+task2.getName())!=1){
-										priv=false;
-										break;
-									}
-							
-								}
-								
-							}
-							ar.setPrivate(priv);
-						}
-					}
-					if (channel.getType()==TMLChannel.BRBW){
-						ar.setAsynchronous(true);		
-						ar.setSizeOfFIFO(channel.getSize());
-						ar.setBlocking(true);
-					}
-					else if (channel.getType()==TMLChannel.BRNBW){
-						ar.setAsynchronous(true);
-						ar.setSizeOfFIFO(channel.getSize());
-						ar.setBlocking(false);
-					}
-					else {
-						//Create new block, hope for best
-						if (mc){
-							fifo = createFifo(channel.getName());
-							ar.setAsynchronous(false);
-						}
-					}
-					//Find in signal
-					
-					List<AvatarSignal> sig1 = new ArrayList<AvatarSignal>();
-					//Sig1 contains IN Signals, Sig2 contains OUT signals
-					sig1.add(signalInMap.get(channel.getName()));
-					List<AvatarSignal> sig2 = new ArrayList<AvatarSignal>();
-					sig2.add(signalOutMap.get(channel.getName()));
-					for (AvatarSignal sig: signals){
-						if (sig.getInOut()==AvatarSignal.IN){
-							String name = sig.getName();
-							if (name.equals(getName(channel.getName()))){
-					//			sig1.add(sig);
-							}
-						}
-					}
-					//Find out signal
-					for (AvatarSignal sig: signals){
-						if (sig.getInOut()==AvatarSignal.OUT){
-							String name = sig.getName();
-							if (name.equals(channel.getOriginPort().getName())){
-				//				sig2.add(sig);
-							}
-						}
-					}
-					//System.out.println("size " + sig1.size() + " " + sig2.size());
-					if (sig1.size()==0){
-						sig1.add(new AvatarSignal(getName(channel.getName()), AvatarSignal.IN, null));
-					}
-					if (sig2.size()==0){
-						sig2.add(new AvatarSignal(getName(channel.getName()), AvatarSignal.OUT, null));
-					}
-					if (sig1.size()==1 && sig2.size()==1){
-						if (channel.getType()==TMLChannel.NBRNBW && mc){
-							AvatarSignal read = fifo.getSignalByName("readSignal");
-
-							ar.block2= fifo;
-							//Set IN signal with read
-							ar.addSignals(sig1.get(0), read);
-							AvatarRelation ar2= new AvatarRelation(channel.getName()+"2", fifo, taskBlockMap.get(channel.getDestinationTask()), channel.getReferenceObject());
-							AvatarSignal write = fifo.getSignalByName("writeSignal");
-							//set OUT signal with write
-							ar2.addSignals(write, sig2.get(0));
-					//		System.out.println("Set " + sig2.get(0) + " and write");
-							ar2.setAsynchronous(false);
-							avspec.addRelation(ar2);
-						}
-						else {
-							ar.addSignals(sig2.get(0), sig1.get(0));
-						}
-					}
-					else {
-						//Create relation if it does not exist
-						if (top.getSignalByName(getName(channel.getName())+"in")==null){
-							AvatarRelation relation= new AvatarRelation(channel.getName(), top, top, channel.getReferenceObject());
-							AvatarSignal s1 = new AvatarSignal(getName(channel.getName())+"in", AvatarSignal.IN, null);
-							AvatarSignal s2 = new AvatarSignal(getName(channel.getName())+"out", AvatarSignal.OUT, null);
-							top.addSignal(s1);
-							top.addSignal(s2);
-							relation.addSignals(s2,s1);
-							avspec.addRelation(relation);
-						//	System.out.println("Failure to match signals for TMLChannel "+ channel.getName());
-						}
-					}
-					avspec.addRelation(ar);
-				}
-				else {
-					//System.out.println("WTF Found non-basic channel");
-					//If not a basic channel, create a relation between TOP block and itself
-					AvatarRelation relation= new AvatarRelation(channel.getName(), top, top, channel.getReferenceObject());
-					AvatarSignal s1 = new AvatarSignal(getName(channel.getName())+"in", AvatarSignal.IN, null);
-					AvatarSignal s2 = new AvatarSignal(getName(channel.getName())+"out", AvatarSignal.OUT, null);
-					top.addSignal(s1);
-					top.addSignal(s2);
-					relation.addSignals(s2,s1);
-					avspec.addRelation(relation);
-					for (TMLTask t1: channel.getOriginTasks()){
-						for (TMLTask t2: channel.getDestinationTasks()){
-							AvatarRelation ar= new AvatarRelation(channel.getName(), taskBlockMap.get(t1), taskBlockMap.get(t2), channel.getReferenceObject());
-							ar.setPrivate(originDestMap.get(t1.getName()+"__"+t2.getName())==1);
-							//Find in signal
-							List<AvatarSignal> sig1 = new ArrayList<AvatarSignal>();
-							List<AvatarSignal> sig2 = new ArrayList<AvatarSignal>();
-							for (AvatarSignal sig: signals){
-								if (sig.getInOut()==AvatarSignal.IN){
-									String name = sig.getName();
-									if (name.equals(getName(channel.getName()))){
-										sig1.add(sig);
-									}
-								}
-							}
-							//Find out signal
-							for (AvatarSignal sig: signals){
-								if (sig.getInOut()==AvatarSignal.OUT){
-									String name = sig.getName();
-									if (name.equals(getName(channel.getName()))){
-										sig2.add(sig);
-									}
-								}
-							}
-							if (sig1.size()==0){
-								sig1.add(new AvatarSignal(getName(channel.getName()), AvatarSignal.IN, null));
-							}
-							if (sig2.size()==0){
-								sig2.add(new AvatarSignal(getName(channel.getName()), AvatarSignal.OUT, null));
-							}
-							if (sig1.size()==1 && sig2.size()==1){
-								ar.addSignals(sig2.get(0), sig1.get(0));
-							}
-							else {
-								System.out.println("Failure to match signals for TMLChannel "+ channel.getName() + " between " + t1.getName() + " and "+ t2.getName());
-							}
-							avspec.addRelation(ar);
-						}
-					}
-				}
-			}
-			for (TMLRequest request: tmlmodel.getRequests()){
-				for (TMLTask t1: request.getOriginTasks()){
-					AvatarRelation ar = new AvatarRelation(request.getName(), taskBlockMap.get(t1), taskBlockMap.get(request.getDestinationTask()), request.getReferenceObject());
-					ar.setPrivate(originDestMap.get(t1.getName()+"__"+request.getDestinationTask().getName())==1);		
-					List<AvatarSignal> sig1 = new ArrayList<AvatarSignal>();
-					List<AvatarSignal> sig2 = new ArrayList<AvatarSignal>();
-					for (AvatarSignal sig: signals){
-						if (sig.getInOut()==AvatarSignal.IN){
-							String name = sig.getName();
-
-							if (name.equals(getName(request.getName()))){
-								sig1.add(sig);
-							}
-						}
-					}
-					//Find out signal
-					for (AvatarSignal sig: signals){
-						if (sig.getInOut()==AvatarSignal.OUT){
-							String name = sig.getName();
-
-							if (name.equals(getName(request.getName()))){
-								sig2.add(sig);
-							}
-						}
-					}
-					if (sig1.size()==0){
-						sig1.add(new AvatarSignal(getName(request.getName()), AvatarSignal.IN, null));
-					}
-					if (sig2.size()==0){
-						sig2.add(new AvatarSignal(getName(request.getName()), AvatarSignal.OUT, null));
-					}
-					if (sig1.size()==1 && sig2.size()==1){
-						ar.addSignals(sig2.get(0), sig1.get(0));
-					}
-					else {
-						//Throw error
-						System.out.println("Could not match for " + request.getName());
-					}
+                } else {
+                    avspec.addPragma(pragma);
+                }
+            }
+        }
 
-					ar.setAsynchronous(false);
-					avspec.addRelation(ar);
-				}
-			}
-			for (TMLEvent event: tmlmodel.getEvents()){
-
-				AvatarRelation ar = new AvatarRelation(event.getName(), taskBlockMap.get(event.getOriginTask()), taskBlockMap.get(event.getDestinationTask()), event.getReferenceObject());
-				ar.setPrivate(originDestMap.get(event.getOriginTask().getName()+"__"+event.getDestinationTask().getName())==1);
-				List<AvatarSignal> sig1 = new ArrayList<AvatarSignal>();
-				List<AvatarSignal> sig2 = new ArrayList<AvatarSignal>();
-				for (AvatarSignal sig: signals){
-					if (sig.getInOut()==AvatarSignal.IN){
-						String name = sig.getName();
-						if (name.equals(getName(event.getName()))){
-							sig1.add(sig);
-						}
-					}
-				}
-				//Find out signal
-				for (AvatarSignal sig: signals){
-					if (sig.getInOut()==AvatarSignal.OUT){
-						String name = sig.getName();
-						if (name.equals(getName(event.getName()))){
-							sig2.add(sig);
-						}
-					}
-				}
-				if (sig1.size()==0){
-					sig1.add(new AvatarSignal(getName(event.getName()), AvatarSignal.IN, null));
-				}
-				if (sig2.size()==0){
-					sig2.add(new AvatarSignal(getName(event.getName()), AvatarSignal.OUT, null));
-				}
-				if (sig1.size()==1 && sig2.size()==1){
-					ar.addSignals(sig2.get(0), sig1.get(0));
-				}
-				else {
-					//Throw error
-					System.out.println("Could not match for " + event.getName());
-				}
-				if (event.isBlocking()){
-					ar.setAsynchronous(true);
-					ar.setBlocking(true);
-					ar.setSizeOfFIFO(event.getMaxSize());
-				}
-				else {
-					ar.setAsynchronous(true);
-					ar.setBlocking(false);
-					ar.setSizeOfFIFO(event.getMaxSize());
+        //Create relations
+        //Channels are ?? to ??
+        //Requests are n to 1
+        //Events are ?? to ??
+        AvatarBlock fifo = new AvatarBlock("FIFO", avspec, null);
+        for (TMLChannel channel : tmlmodel.getChannels()) {
+            // We assume one to one because fork and join have been removed
+
+            if (channel.isBasicChannel()) {
+                TraceManager.addDev("checking channel " + channel.getName());
+                AvatarRelation ar = new AvatarRelation(channel.getName(), taskBlockMap.get(channel.getOriginTask()), taskBlockMap.get(channel.getDestinationTask()), channel.getReferenceObject());
+
+                if (channel.getType() == TMLChannel.BRBW) {
+                    ar.setAsynchronous(true);
+                    ar.setSizeOfFIFO(channel.getSize());
+                    ar.setBlocking(true);
+                } else if (channel.getType() == TMLChannel.BRNBW) {
+                    ar.setAsynchronous(true);
+                    ar.setSizeOfFIFO(channel.getSize());
+                    ar.setBlocking(false);
+                } else {
+                    //Create new block, hope for best
+                    if (mc) {
+                        fifo = createFifo(channel.getName());
+                        ar.setAsynchronous(false);
+                    }
+                }
+                //Find in signal
+
+                List<AvatarSignal> sig1 = new ArrayList<AvatarSignal>();
+                //Sig1 contains IN Signals, Sig2 contains OUT signals
+                sig1.add(signalInMap.get(channel.getName()));
+                List<AvatarSignal> sig2 = new ArrayList<AvatarSignal>();
+                sig2.add(signalOutMap.get(channel.getName()));
+                for (AvatarSignal sig : signals) {
+                    if (sig.getInOut() == AvatarSignal.IN) {
+                        String name = sig.getName();
+                        if (name.equals(getName(channel.getName()))) {
+                            //			sig1.add(sig);
+                        }
+                    }
+                }
+                //Find out signal
+                for (AvatarSignal sig : signals) {
+                    if (sig.getInOut() == AvatarSignal.OUT) {
+                        String name = sig.getName();
+                        if (name.equals(channel.getOriginPort().getName())) {
+                            //				sig2.add(sig);
+                        }
+                    }
+                }
+                TraceManager.addDev("size " + sig1.size() + " " + sig2.size());
+
+                if (sig1.size() == 0) {
+                    sig1.add(new AvatarSignal(getName(channel.getName()), AvatarSignal.IN, null));
+                }
+
+                if (sig2.size() == 0) {
+                    sig2.add(new AvatarSignal(getName(channel.getName()), AvatarSignal.OUT, null));
+                }
+
+                if (sig1.size() == 1 && sig2.size() == 1) {
+                    if (channel.getType() == TMLChannel.NBRNBW && mc) {
+                        AvatarSignal read = fifo.getSignalByName("readSignal");
+
+                        ar.block2 = fifo;
+                        //Set IN signal with read
+                        ar.addSignals(sig1.get(0), read);
+                        AvatarRelation ar2 = new AvatarRelation(channel.getName() + "2", fifo, taskBlockMap.get(channel.getDestinationTask()), channel.getReferenceObject());
+                        AvatarSignal write = fifo.getSignalByName("writeSignal");
+                        //set OUT signal with write
+                        ar2.addSignals(write, sig2.get(0));
+                        //		System.out.println("Set " + sig2.get(0) + " and write");
+                        ar2.setAsynchronous(false);
+                        avspec.addRelation(ar2);
+                    } else {
+                        ar.addSignals(sig2.get(0), sig1.get(0));
+                    }
+                } else {
+                    //Create relation if it does not exist
+                    if (top.getSignalByName(getName(channel.getName()) + "in") == null) {
+                        AvatarRelation relation = new AvatarRelation(channel.getName(), top, top, channel.getReferenceObject());
+                        AvatarSignal s1 = new AvatarSignal(getName(channel.getName()) + "in", AvatarSignal.IN, null);
+                        AvatarSignal s2 = new AvatarSignal(getName(channel.getName()) + "out", AvatarSignal.OUT, null);
+                        top.addSignal(s1);
+                        top.addSignal(s2);
+                        relation.addSignals(s2, s1);
+                        avspec.addRelation(relation);
+                        //	System.out.println("Failure to match signals for TMLChannel "+ channel.getName());
+                    }
+                }
+                avspec.addRelation(ar);
+            } else {
+                //System.out.println("WTF Found non-basic channel");
+                //If not a basic channel, create a relation between TOP block and itself
+                AvatarRelation relation = new AvatarRelation(channel.getName(), top, top, channel.getReferenceObject());
+                AvatarSignal s1 = new AvatarSignal(getName(channel.getName()) + "in", AvatarSignal.IN, null);
+                AvatarSignal s2 = new AvatarSignal(getName(channel.getName()) + "out", AvatarSignal.OUT, null);
+                top.addSignal(s1);
+                top.addSignal(s2);
+                relation.addSignals(s2, s1);
+                avspec.addRelation(relation);
+                for (TMLTask t1 : channel.getOriginTasks()) {
+                    for (TMLTask t2 : channel.getDestinationTasks()) {
+                        AvatarRelation ar = new AvatarRelation(channel.getName(), taskBlockMap.get(t1), taskBlockMap.get(t2), channel.getReferenceObject());
+                        ar.setPrivate(originDestMap.get(t1.getName() + "__" + t2.getName()) == 1);
+                        //Find in signal
+                        List<AvatarSignal> sig1 = new ArrayList<AvatarSignal>();
+                        List<AvatarSignal> sig2 = new ArrayList<AvatarSignal>();
+                        for (AvatarSignal sig : signals) {
+                            if (sig.getInOut() == AvatarSignal.IN) {
+                                String name = sig.getName();
+                                if (name.equals(getName(channel.getName()))) {
+                                    sig1.add(sig);
+                                }
+                            }
+                        }
+                        //Find out signal
+                        for (AvatarSignal sig : signals) {
+                            if (sig.getInOut() == AvatarSignal.OUT) {
+                                String name = sig.getName();
+                                if (name.equals(getName(channel.getName()))) {
+                                    sig2.add(sig);
+                                }
+                            }
+                        }
+                        if (sig1.size() == 0) {
+                            sig1.add(new AvatarSignal(getName(channel.getName()), AvatarSignal.IN, null));
+                        }
+                        if (sig2.size() == 0) {
+                            sig2.add(new AvatarSignal(getName(channel.getName()), AvatarSignal.OUT, null));
+                        }
+                        if (sig1.size() == 1 && sig2.size() == 1) {
+                            ar.addSignals(sig2.get(0), sig1.get(0));
+                        } else {
+                            System.out.println("Failure to match signals for TMLChannel " + channel.getName() + " between " + t1.getName() + " and " + t2.getName());
+                        }
+                        avspec.addRelation(ar);
+                    }
+                }
+            }
+        }
+        for (TMLRequest request : tmlmodel.getRequests()) {
+            for (TMLTask t1 : request.getOriginTasks()) {
+                AvatarRelation ar = new AvatarRelation(request.getName(), taskBlockMap.get(t1), taskBlockMap.get(request.getDestinationTask()), request.getReferenceObject());
+                ar.setPrivate(originDestMap.get(t1.getName() + "__" + request.getDestinationTask().getName()) == 1);
+                List<AvatarSignal> sig1 = new ArrayList<AvatarSignal>();
+                List<AvatarSignal> sig2 = new ArrayList<AvatarSignal>();
+                for (AvatarSignal sig : signals) {
+                    if (sig.getInOut() == AvatarSignal.IN) {
+                        String name = sig.getName();
+
+                        if (name.equals(getName(request.getName()))) {
+                            sig1.add(sig);
+                        }
+                    }
+                }
+                //Find out signal
+                for (AvatarSignal sig : signals) {
+                    if (sig.getInOut() == AvatarSignal.OUT) {
+                        String name = sig.getName();
+
+                        if (name.equals(getName(request.getName()))) {
+                            sig2.add(sig);
+                        }
+                    }
+                }
+                if (sig1.size() == 0) {
+                    sig1.add(new AvatarSignal(getName(request.getName()), AvatarSignal.IN, null));
+                }
+                if (sig2.size() == 0) {
+                    sig2.add(new AvatarSignal(getName(request.getName()), AvatarSignal.OUT, null));
+                }
+                if (sig1.size() == 1 && sig2.size() == 1) {
+                    ar.addSignals(sig2.get(0), sig1.get(0));
+                } else {
+                    //Throw error
+                    System.out.println("Could not match for " + request.getName());
+                }
+
+                ar.setAsynchronous(false);
+                avspec.addRelation(ar);
+            }
+        }
+
+        for (TMLEvent event : tmlmodel.getEvents()) {
+
+            TraceManager.addDev("Handling Event:" + event.getName() + " 1:" +  taskBlockMap.get(event.getOriginTask()) + " 2:" +  taskBlockMap.get
+                    (event.getDestinationTask()));
+
+            AvatarRelation ar = new AvatarRelation(event.getName(), taskBlockMap.get(event.getOriginTask()), taskBlockMap.get(event.getDestinationTask()), event.getReferenceObject());
+            //ar.setPrivate(originDestMap.get(event.getOriginTask().getName() + "__" + event.getDestinationTask().getName()) == 1);
+            List<AvatarSignal> sig1 = new ArrayList<AvatarSignal>();
+            List<AvatarSignal> sig2 = new ArrayList<AvatarSignal>();
+            for (AvatarSignal sig : signals) {
+                if (sig.getInOut() == AvatarSignal.IN) {
+                    String name = sig.getName();
+                    if (name.equals(getName(event.getName()))) {
+                        sig1.add(sig);
+                    }
+                }
+            }
+            //Find out signal
+            for (AvatarSignal sig : signals) {
+                if (sig.getInOut() == AvatarSignal.OUT) {
+                    String name = sig.getName();
+                    if (name.equals(getName(event.getName()))) {
+                        sig2.add(sig);
+                    }
+                }
+            }
+            if (sig1.size() == 0) {
+                sig1.add(new AvatarSignal(getName(event.getName()), AvatarSignal.IN, null));
+            }
+            if (sig2.size() == 0) {
+                sig2.add(new AvatarSignal(getName(event.getName()), AvatarSignal.OUT, null));
+            }
+            if (sig1.size() == 1 && sig2.size() == 1) {
+                ar.addSignals(sig2.get(0), sig1.get(0));
+            } else {
+                //Throw error
+                System.out.println("Could not match for " + event.getName());
+            }
+            if (event.isBlocking()) {
+                ar.setAsynchronous(true);
+                ar.setBlocking(true);
+                ar.setSizeOfFIFO(event.getMaxSize());
+            } else {
+                ar.setAsynchronous(true);
+                ar.setBlocking(false);
+                ar.setSizeOfFIFO(event.getMaxSize());
+
+            }
+            avspec.addRelation(ar);
+        }
+
+        //	System.out.println("Avatar relations " + avspec.getRelations());
+
+        for (AvatarSignal sig : signals) {
+            //	System.out.println("signal " + sig.getName());
+            //check that all signals are put in relations
+            AvatarRelation ar = avspec.getAvatarRelationWithSignal(sig);
+            if (ar == null) {
+                System.out.println("missing relation for " + sig.getName());
+            }
+        }
+        //Check if we matched up all signals
+        for (SecurityPattern sp : symKeys.keySet()) {
+            if (symKeys.get(sp).size() > 1) {
+                String keys = "";
+                for (AvatarAttribute key : symKeys.get(sp)) {
+                    keys = keys + " " + key.getBlock().getName() + "." + key.getName();
+                }
+                avspec.addPragma(new AvatarPragmaInitialKnowledge("#InitialSessionKnowledge " + keys, null, symKeys.get(sp), true));
+            }
+        }
+        for (SecurityPattern sp : pubKeys.keySet()) {
+            if (pubKeys.get(sp).size() != 0) {
+                String keys = "";
+                List<String> pubKeyNames = new ArrayList<String>();
+                for (AvatarAttribute key : pubKeys.get(sp)) {
+                    if (!pubKeyNames.contains(key.getBlock().getName() + "." + key.getName())) {
+                        keys = keys + " " + key.getBlock().getName() + "." + key.getName();
+                        pubKeyNames.add(key.getBlock().getName() + "." + key.getName());
+                    }
+                }
+                //	avspec.addPragma(new AvatarPragmaInitialKnowledge("#InitialSessionKnowledge "+keys, null, pubKeys.get(sp),true));
+                //System.out.println("pragma " + keys);
+            }
+        }
+
+        tmlmodel.secChannelMap = secChannelMap;
 
-				}
-				avspec.addRelation(ar);
-			}
-			
-		//	System.out.println("Avatar relations " + avspec.getRelations());
-			
-			for (AvatarSignal sig: signals){
-			//	System.out.println("signal " + sig.getName());
-				//check that all signals are put in relations
-				AvatarRelation ar = avspec.getAvatarRelationWithSignal(sig);
-				if (ar==null){
-					System.out.println("missing relation for " + sig.getName());
-				}
-			}
-			//Check if we matched up all signals
-			for (SecurityPattern sp:symKeys.keySet()){
-				if (symKeys.get(sp).size()>1){	
-					String keys = "";
-					for (AvatarAttribute key: symKeys.get(sp)){
-						keys= keys+" "+key.getBlock().getName() + "."+key.getName();
-					}
-					avspec.addPragma(new AvatarPragmaInitialKnowledge("#InitialSessionKnowledge "+ keys, null, symKeys.get(sp), true));
-				}
-			}
-			for (SecurityPattern sp:pubKeys.keySet()){
-				if (pubKeys.get(sp).size()!=0){
-					String keys = "";
-					List<String> pubKeyNames = new ArrayList<String>();
-					for (AvatarAttribute key: pubKeys.get(sp)){
-						if (!pubKeyNames.contains(key.getBlock().getName()+"."+key.getName())){
-							keys= keys+" "+key.getBlock().getName() + "."+key.getName();
-							pubKeyNames.add(key.getBlock().getName()+"."+key.getName());
-						}
-					}
-				//	avspec.addPragma(new AvatarPragmaInitialKnowledge("#InitialSessionKnowledge "+keys, null, pubKeys.get(sp),true));
-					//System.out.println("pragma " + keys);
-				}
-			}
-			
-			tmlmap.getTMLModeling().secChannelMap = secChannelMap;
-	
 //			System.out.println("avatar spec\n" +avspec);
-			return avspec;
-		}
+        return avspec;
+    }
 
-		public void backtraceReachability( Map<AvatarPragmaReachability, ProVerifQueryResult> reachabilityResults) {
+		/*public void backtraceReachability( Map<AvatarPragmaReachability, ProVerifQueryResult> reachabilityResults) {
 			for (AvatarPragmaReachability pragma: reachabilityResults.keySet())
 			{
 				ProVerifQueryResult result = reachabilityResults.get(pragma);
@@ -2147,102 +1761,57 @@ public class FullTML2Avatar {
 					}		
 				}
 			}
-		}
+		}*/
+
+
+    public AvatarBlock createFifo(String name) {
+        AvatarBlock fifo = new AvatarBlock("FIFO__FIFO" + name, avspec, null);
+        AvatarState root = new AvatarState("root", null, false, false);
+        AvatarSignal read = new AvatarSignal("readSignal", AvatarSignal.IN, null);
+        AvatarAttribute data = new AvatarAttribute("data", AvatarType.INTEGER, fifo, null);
+        fifo.addAttribute(data);
+        read.addParameter(data);
+        AvatarSignal write = new AvatarSignal("writeSignal", AvatarSignal.OUT, null);
+        write.addParameter(data);
+        AvatarStartState start = new AvatarStartState("start", null);
+        AvatarTransition afterStart = new AvatarTransition(fifo, "afterStart", null);
+        fifo.addSignal(read);
+        fifo.addSignal(write);
+        AvatarTransition toRead = new AvatarTransition(fifo, "toReadSignal", null);
+        AvatarTransition toWrite = new AvatarTransition(fifo, "toWriteSignal", null);
+        AvatarTransition afterRead = new AvatarTransition(fifo, "afterReadSignal", null);
+        AvatarTransition afterWrite = new AvatarTransition(fifo, "afterWriteSignal", null);
+        AvatarActionOnSignal readAction = new AvatarActionOnSignal("read", read, null);
+        AvatarActionOnSignal writeAction = new AvatarActionOnSignal("write", write, null);
+
+        AvatarStateMachine asm = fifo.getStateMachine();
+        asm.addElement(start);
+        asm.setStartState(start);
+        asm.addElement(afterStart);
+        asm.addElement(root);
+        asm.addElement(toRead);
+        asm.addElement(toWrite);
+        asm.addElement(afterRead);
+        asm.addElement(afterWrite);
+        asm.addElement(readAction);
+        asm.addElement(writeAction);
+
+        start.addNext(afterStart);
+        afterStart.addNext(root);
+        root.addNext(toRead);
+        root.addNext(toWrite);
+        toRead.addNext(readAction);
+        toWrite.addNext(writeAction);
+        readAction.addNext(afterRead);
+        writeAction.addNext(afterWrite);
+        afterRead.addNext(root);
+        afterWrite.addNext(root);
+
+        avspec.addBlock(fifo);
+        return fifo;
+    }
+
 
-		public void distributeKeys(){
-			List<TMLTask> tasks = tmlmap.getTMLModeling().getTasks();
-			for (TMLTask t:accessKeys.keySet()){
-				AvatarBlock b = taskBlockMap.get(t);
-				for (SecurityPattern sp: accessKeys.get(t)){
-					if (sp.type.equals("Symmetric Encryption") || sp.type.equals("MAC")){
-						AvatarAttribute key = new AvatarAttribute("key_"+sp.name, AvatarType.INTEGER, b, null);
-						if (symKeys.containsKey(sp)){
-							symKeys.get(sp).add(key);
-						}
-						else {
-							LinkedList<AvatarAttribute> tmp = new LinkedList<AvatarAttribute>();
-							tmp.add(key);
-							symKeys.put(sp, tmp);
-						}
-						b.addAttribute(key);
-					}
-					else if (sp.type.equals("Asymmetric Encryption")){
-						AvatarAttribute pubkey = new AvatarAttribute("pubKey_"+sp.name, AvatarType.INTEGER, b, null);
-						b.addAttribute(pubkey);
-						
-						AvatarAttribute privkey = new AvatarAttribute("privKey_"+sp.name, AvatarType.INTEGER, b, null);
-						b.addAttribute(privkey);
-						avspec.addPragma(new AvatarPragmaPrivatePublicKey("#PrivatePublicKeys " +  b.getName() + " " + privkey.getName() + " " + pubkey.getName(), null, privkey, pubkey));
-						if (pubKeys.containsKey(sp)){
-							pubKeys.get(sp).add(pubkey);
-						}
-						else {
-							LinkedList<AvatarAttribute> tmp = new LinkedList<AvatarAttribute>();
-							tmp.add(pubkey);
-							pubKeys.put(sp, tmp);
-						}
-						//Distribute public key everywhere
-						for (TMLTask task2 : tasks){
-							AvatarBlock b2 = taskBlockMap.get(task2);
-							pubkey = new AvatarAttribute("pubKey_"+sp.name, AvatarType.INTEGER, b2, null);
-							b2.addAttribute(pubkey);
-							if (pubKeys.containsKey(sp)){
-								pubKeys.get(sp).add(pubkey);
-							}
-						}		
-					}
-				}
-			}
-			
-		}
-		public AvatarBlock createFifo(String name){
-			AvatarBlock fifo = new AvatarBlock("FIFO__FIFO"+name, avspec, null);
-			AvatarState root = new AvatarState("root",null, false, false);
-			AvatarSignal read = new AvatarSignal("readSignal", AvatarSignal.IN, null);
-			AvatarAttribute data = new AvatarAttribute("data", AvatarType.INTEGER, fifo, null);
-			fifo.addAttribute(data); 
-			read.addParameter(data);
-			AvatarSignal write = new AvatarSignal("writeSignal", AvatarSignal.OUT, null);
-			write.addParameter(data);
-			AvatarStartState start = new AvatarStartState("start", null);
-			AvatarTransition afterStart = new AvatarTransition(fifo, "afterStart", null);
-			fifo.addSignal(read);
-			fifo.addSignal(write);
-			AvatarTransition toRead = new AvatarTransition(fifo, "toReadSignal", null);
-			AvatarTransition toWrite = new AvatarTransition(fifo, "toWriteSignal", null);
-			AvatarTransition afterRead = new AvatarTransition(fifo, "afterReadSignal", null);
-			AvatarTransition afterWrite = new AvatarTransition(fifo, "afterWriteSignal", null);
-			AvatarActionOnSignal readAction= new AvatarActionOnSignal("read", read, null);	
-			AvatarActionOnSignal writeAction= new AvatarActionOnSignal("write", write, null);	
-
-			AvatarStateMachine asm = fifo.getStateMachine();
-			asm.addElement(start);
-			asm.setStartState(start);
-			asm.addElement(afterStart);
-			asm.addElement(root);
-			asm.addElement(toRead);
-			asm.addElement(toWrite);
-			asm.addElement(afterRead);
-			asm.addElement(afterWrite);
-			asm.addElement(readAction);
-			asm.addElement(writeAction);
-
-			start.addNext(afterStart);
-			afterStart.addNext(root);
-			root.addNext(toRead);
-			root.addNext(toWrite);
-			toRead.addNext(readAction);
-			toWrite.addNext(writeAction);
-			readAction.addNext(afterRead);
-			writeAction.addNext(afterWrite);
-			afterRead.addNext(root);
-			afterWrite.addNext(root);
-
-			avspec.addBlock(fifo);
-			return fifo;
-		}
-
-	
     public AvatarSpecification convertToSecurityType(AvatarSpecification spec) {
         return spec;
     }
diff --git a/src/main/java/tmltranslator/toavatar/FullTML2AvatarDP.java b/src/main/java/tmltranslator/toavatar/FullTML2AvatarDP.java
deleted file mode 100644
index 24ad29f4f940c8f712db983e4627c963d851ee24..0000000000000000000000000000000000000000
--- a/src/main/java/tmltranslator/toavatar/FullTML2AvatarDP.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
- * 
- * ludovic.apvrille AT enst.fr
- * 
- * This software is a computer program whose purpose is to allow the
- * edition of TURTLE analysis, design and deployment diagrams, to
- * allow the generation of RT-LOTOS or Java code from this diagram,
- * and at last to allow the analysis of formal validation traces
- * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
- * from INRIA Rhone-Alpes.
- * 
- * This software is governed by the CeCILL  license under French law and
- * abiding by the rules of distribution of free software.  You can  use,
- * modify and/ or redistribute the software under the terms of the CeCILL
- * license as circulated by CEA, CNRS and INRIA at the following URL
- * "http://www.cecill.info".
- * 
- * As a counterpart to the access to the source code and  rights to copy,
- * modify and redistribute granted by the license, users are provided only
- * with a limited warranty  and the software's author,  the holder of the
- * economic rights,  and the successive licensors  have only  limited
- * liability.
- * 
- * In this respect, the user's attention is drawn to the risks associated
- * with loading,  using,  modifying and/or developing or reproducing the
- * software by the user in light of its specific status of free software,
- * that may mean  that it is complicated to manipulate,  and  that  also
- * therefore means  that it is reserved for developers  and  experienced
- * professionals having in-depth computer knowledge. Users are therefore
- * encouraged to load and test the software's suitability as regards their
- * requirements in conditions enabling the security of their systems and/or
- * data to be ensured and,  more generally, to use and operate it in the
- * same conditions as regards security.
- * 
- * The fact that you are presently reading this means that you have had
- * knowledge of the CeCILL license and that you accept its terms.
- */
-
-
-package tmltranslator.toavatar;
-
-import avatartranslator.*;
-import myutil.TraceManager;
-import tmltranslator.TMLMapping;
-import ui.AvatarDesignPanel;
-import ui.TAttribute;
-import ui.TGComponent;
-import ui.TGConnectingPoint;
-import ui.avatarbd.AvatarBDBlock;
-import ui.avatarbd.AvatarBDPanel;
-import ui.avatarbd.AvatarBDPortConnector;
-import ui.avatarbd.AvatarBDPragma;
-import ui.avatarsmd.*;
-
-import java.awt.*;
-import java.util.*;
-
-//import translator.*;
-
-
-/**
- * Class TML2AvatarDP
- * Creation: 05/10/2016
- *
- * @author Letitia LI, Ludovic APVRILLE
- */
-public class FullTML2AvatarDP {
-
-    //protected CorrespondanceTGElement listB; // list for particular element -> first element of group of blocks
-    protected TMLMapping tmlmap;
-    public AvatarDesignPanel adp;
-
-    private Map<AvatarTransition, TGConnectingPoint> tranSourceMap = new HashMap<AvatarTransition, TGConnectingPoint>();
-    private Map<AvatarTransition, AvatarStateMachineElement> tranDestMap = new HashMap<AvatarTransition, AvatarStateMachineElement>();
-    private Map<AvatarStateMachineElement, TGConnectingPoint> locMap = new HashMap<AvatarStateMachineElement, TGConnectingPoint>();
-    private Map<AvatarStateMachineElement, TGComponent> SMDMap = new HashMap<AvatarStateMachineElement, TGComponent>();
-    public Map<String, Set<String>> originDestMap = new HashMap<String, Set<String>>();
-    public Map<String, AvatarBDBlock> blockMap = new HashMap<String, AvatarBDBlock>();
-    boolean mc;
-    boolean security;
-    AvatarSpecification avspec;
-
-    public FullTML2AvatarDP(TMLMapping tmlmapping, boolean modelcheck, boolean sec) {
-        tmlmap = tmlmapping;
-        mc = modelcheck;
-        security = sec;
-    }
-
-    public FullTML2AvatarDP(AvatarSpecification av) {
-        avspec = av;
-    }
-
-    public void commMap(AvatarSpecification avspec) {
-        //Create a map of all connections
-    /*TMLModeling tmlmodel=tmlmap.getTMLModeling();
-	for (TMLTask t: tmlmodel.getTasks()){
-	    Set<String> hs = new HashSet<String>();
-	    //Iterate through channels
-	    LinkedList ll= tmlmodel.getChannelsToMe(t);
-      	    ListIterator iterator = ll.listIterator();
-            TMLChannel chanl;
-	    String name="";
-            while(iterator.hasNext()) {
-                chanl = (TMLChannel)(iterator.next()); 
-		for (TMLTask dt: chanl.getOriginTasks()){
-		    name= dt.getName();
-		    hs.add(name.split("__")[name.split("__").length-1]);
-		}
-		name= chanl.getOriginTask().getName();
-		hs.add(name.split("__")[name.split("__").length-1]);
-	    }
-	    name=t.getName();
-	    originDestMap.put(name.split("__")[name.split("__").length-1], hs);
-	    */
-        for (AvatarRelation ar : avspec.getRelations()) {
-
-            String bl1 = ar.block1.getName();
-            String bl2 = ar.block2.getName();
-            if (originDestMap.containsKey(bl1.split("__")[bl1.split("__").length - 1])) {
-                originDestMap.get(bl1.split("__")[bl1.split("__").length - 1]).add(bl2.split("__")[bl2.split("__").length - 1]);
-            } else {
-                Set<String> hs = new HashSet<String>();
-                hs.add(bl2.split("__")[bl2.split("__").length - 1]);
-                originDestMap.put(bl1.split("__")[bl1.split("__").length - 1], hs);
-            }
-        }
-
-    }
-
-    public void addStates(AvatarStateMachineElement asme, int x, int y, AvatarSMDPanel smp, AvatarBDBlock bl) {
-        TGConnectingPoint tp = new TGConnectingPoint(null, x, y, false, false);
-        if (asme instanceof AvatarStartState) {
-            AvatarSMDStartState smdss = new AvatarSMDStartState(x, y, x, x * 2, y, y * 2, false, null, smp);
-            smp.addComponent(smdss, x, y, false, true);
-            SMDMap.put(asme, smdss);
-            tp = smdss.tgconnectingPointAtIndex(0);
-            locMap.put(asme, tp);
-        }
-        if (asme instanceof AvatarTransition) {
-            //
-        }
-        if (asme instanceof AvatarActionOnSignal) {
-            avatartranslator.AvatarSignal sig = ((AvatarActionOnSignal) asme).getSignal();
-            if (sig.isIn()) {
-                AvatarSMDReceiveSignal smdrs = new AvatarSMDReceiveSignal(x, y, x, x * 2, y, y * 2, false, null, smp);
-                smp.addComponent(smdrs, x, y, false, true);
-                String name = sig.getName().split("__")[sig.getName().split("__").length - 1];
-                smdrs.setValue(name + "()");
-                sig.setName(name);
-                smdrs.recalculateSize();
-                SMDMap.put(asme, smdrs);
-                tp = smdrs.getFreeTGConnectingPoint(x + smdrs.getWidth() / 2, y + smdrs.getHeight());
-                TGConnectingPoint tp2 = smdrs.getFreeTGConnectingPoint(x + smdrs.getWidth() / 2, y);
-                locMap.put(asme, tp2);
-                if (bl.getAvatarSignalFromName(name) == null) {
-                    bl.addSignal(new ui.AvatarSignal(0, name, new String[0], new String[0]));
-                }
-
-            } else {
-                AvatarSMDSendSignal smdss = new AvatarSMDSendSignal(x, y, x, x * 2, y, y * 2, false, null, smp);
-                smp.addComponent(smdss, x, y, false, true);
-                String name = sig.getName().split("__")[sig.getName().split("__").length - 1];
-                smdss.setValue(name + "()");
-                sig.setName(name);
-                smdss.recalculateSize();
-                SMDMap.put(asme, smdss);
-                tp = smdss.getFreeTGConnectingPoint(x + smdss.getWidth() / 2, y + smdss.getHeight());
-                TGConnectingPoint tp2 = smdss.getFreeTGConnectingPoint(x + smdss.getWidth() / 2, y);
-                locMap.put(asme, tp2);
-                if (bl.getAvatarSignalFromName(name) == null) {
-                    bl.addSignal(new ui.AvatarSignal(1, name, new String[0], new String[0]));
-                }
-            }
-
-        }
-        if (asme instanceof AvatarStopState) {
-            AvatarSMDStopState smdstop = new AvatarSMDStopState(x, y, x, x * 2, y, y * 2, false, null, smp);
-            SMDMap.put(asme, smdstop);
-            smp.addComponent(smdstop, x, y, false, true);
-            tp = smdstop.tgconnectingPointAtIndex(0);
-            locMap.put(asme, tp);
-        }
-        if (asme instanceof AvatarState) {
-            //check if empty checker state
-            if (asme.getName().contains("signalstate_")) {
-                //don't add the state, ignore next transition, 
-                if (asme.getNexts().size() == 1) {
-                    AvatarStateMachineElement next = asme.getNext(0).getNext(0);
-                    //Reroute transition
-                    for (AvatarTransition at : tranDestMap.keySet()) {
-                        if (tranDestMap.get(at) == asme) {
-                            tranDestMap.put(at, next);
-                        }
-                    }
-                    addStates(next, x, y, smp, bl);
-                    return;
-                }
-            }
-            AvatarSMDState smdstate = new AvatarSMDState(x, y, x, x * 2, y, y * 2, false, null, smp);
-            smp.addComponent(smdstate, x, y, false, true);
-            smdstate.setValue(asme.getName());
-            smdstate.recalculateSize();
-            SMDMap.put(asme, smdstate);
-            tp = smdstate.getFreeTGConnectingPoint(x + smdstate.getWidth() / 2, y + smdstate.getHeight());
-            TGConnectingPoint tp2 = smdstate.getFreeTGConnectingPoint(x + smdstate.getWidth() / 2, y);
-            locMap.put(asme, tp2);
-        }
-        int i = 1;
-        int diff = 400;
-        int ydiff = 50;
-        for (AvatarStateMachineElement el : asme.getNexts()) {
-            if (el instanceof AvatarTransition) {
-                tranSourceMap.put((AvatarTransition) el, tp);
-            } else {
-                AvatarTransition t = (AvatarTransition) asme;
-                tranDestMap.put(t, el);
-            }
-            if (!SMDMap.containsKey(el)) {
-                addStates(el, diff * i, y + ydiff, smp, bl);
-                i++;
-            }
-        }
-        return;
-    }
-
-    public void translate() {
-        FullTML2Avatar tml2av = new FullTML2Avatar(tmlmap);
-        avspec = tml2av.generateAvatarSpec("1");
-        drawPanel();
-        //Create AvatarDesignDiagram
-    }
-
-    public void drawPanel() {
-        if (adp == null) {
-            return;
-        }
-        if (avspec == null) {
-            return;
-        }
-        AvatarBDPanel abd = adp.abdp;
-
-        //Find all blocks, create blocks from left
-        int xpos = 10;
-        int ypos = 10;
-        for (AvatarBlock ab : avspec.getListOfBlocks()) {
-            //Crypto blocks?
-            AvatarBDBlock father = null;
-            if (ab.getFather() != null) {
-                father = blockMap.get(ab.getFather().getName().split("__")[1]);
-
-            }
-            AvatarBDBlock bl = new AvatarBDBlock(xpos, ypos, xpos, xpos * 2, ypos, ypos * 2, false, father, abd);
-            tranSourceMap.clear();
-            bl.setValue(ab.getName().split("__")[1]);
-            abd.changeStateMachineTabName("Block0", bl.getValue());
-            blockMap.put(bl.getValue(), bl);
-            abd.addComponent(bl, xpos, ypos, false, true);
-            for (AvatarAttribute attr : ab.getAttributes()) {
-                int type = 5;
-                if (attr.getType() == AvatarType.BOOLEAN) {
-                    type = 4;
-                }
-                if (attr.getType() == AvatarType.INTEGER) {
-                    type = 0;
-                }
-                bl.addAttribute(new TAttribute(0, attr.getName(), attr.getType().getDefaultInitialValue(), type));
-                if (attr.getName().equals("key")) {
-                    bl.addCryptoElements();
-                }
-            }
-            // xpos+=300;
-            //Build the state machine
-            int smx = 400;
-            int smy = 40;
-            AvatarSMDPanel smp = adp.getAvatarSMDPanel(bl.getValue());
-            if (smp == null) {
-                TraceManager.addDev("can't find SMP");
-                return;
-            }
-            smp.removeAll();
-            AvatarStateMachine asm = ab.getStateMachine();
-            //Remove the empty check states
-
-            AvatarStartState start = asm.getStartState();
-            addStates(start, smx, smy, smp, bl);
-            //Add transitions
-            for (AvatarTransition t : tranSourceMap.keySet()) {
-                TGConnectingPoint p1 = tranSourceMap.get(t);
-                TGConnectingPoint p2 = locMap.get(tranDestMap.get(t));
-                Vector<Point> points = new Vector<>();
-                if (p1 == null || p2 == null) {
-                    TraceManager.addDev("Missing point");
-                    return;
-                }
-                AvatarSMDConnector SMDcon = new AvatarSMDConnector(p1.getX(), p1.getY(), p1.getX(), p1.getY(), p1.getX(), p1.getY(), true, null, smp, p1, p2, points);
-                String action = "";
-                if (t.getActions().size() == 0) {
-                    action = "";
-                } else {
-                    action = t.getActions().get(0).toString();
-                }
-                SMDcon.setTransitionInfo(t.getGuard().toString(), action);
-                smp.addComponent(SMDcon, p1.getX(), p1.getY(), false, true);
-            }
-        }
-
-
-        commMap(avspec);
-        //Add Relations
-
-        for (String bl1 : originDestMap.keySet()) {
-            for (String bl2 : originDestMap.get(bl1)) {
-                Vector<Point> points = new Vector<>();
-
-                //Add Relations to connector
-                for (AvatarRelation ar : avspec.getRelations()) {
-                    if (ar.block1.getName().contains(bl1) && ar.block2.getName().contains(bl2) || ar.block1.getName().contains(bl2) && ar.block2.getName().contains(bl1)) {
-                        //TGConnectingPoint p1= blockMap.get(bl1).getFreeTGConnectingPoint(blockMap.get(bl1).getX(), blockMap.get(bl1).getY());
-                        TGConnectingPoint p1 = blockMap.get(bl1).findFirstFreeTGConnectingPoint(true, true);
-                        TGConnectingPoint p2 = blockMap.get(bl2).findFirstFreeTGConnectingPoint(true, true);
-                        //	TGConnectingPoint p2=blockMap.get(bl2).getFreeTGConnectingPoint(blockMap.get(bl2).getX(),blockMap.get(bl2).getY());
-                        AvatarBDPortConnector conn = new AvatarBDPortConnector(0, 0, 0, 0, 0, 0, true, null, abd, p1, p2, points);
-                        conn.setAsynchronous(ar.isAsynchronous());
-                        conn.setBlocking(ar.isBlocking());
-                        conn.setPrivate(ar.isPrivate());
-                        conn.setSizeOfFIFO(ar.getSizeOfFIFO());
-                        TraceManager.addDev(bl1 + " " + ar.block1.getName() + " " + ar.block2.getName());
-                        conn.addSignal("in " + ar.getSignal1(0).getName(), true, true);
-                        conn.addSignal("out " + ar.getSignal2(0).getName(), false, false);
-                        TraceManager.addDev("Added Signals");
-                        conn.updateAllSignals();
-                        p1.setFree(false);
-                        p2.setFree(false);
-                        abd.addComponent(conn, 0, 0, false, true);
-                    }
-                }
-		/*for (ui.AvatarSignal sig:blockMap.get(bl1).getSignalList()){
-		    for (ui.AvatarSignal sig2: blockMap.get(bl2).getSignalList()){
-			if (sig.getId().equals(sig2.getId())){
-			    conn.addSignal("in "+sig.getId(), true, true);
-			    conn.addSignal("out "+sig.getId(), false, false);
-			}
-		    }
-		}*/
-            }
-        }
-        ypos += 100;
-        //Add Pragmas
-        AvatarBDPragma pragma = new AvatarBDPragma(xpos, ypos, xpos, xpos * 2, ypos, ypos * 2, false, null, abd);
-        String[] arr = new String[avspec.getPragmas().size()];
-        String s = "";
-        int i = 0;
-        for (AvatarPragma p : avspec.getPragmas()) {
-
-//	    arr[i] = p.getName();
-            String t = "";
-            String[] split = p.getName().split(" ");
-            if (p.getName().contains("#Confidentiality")) {
-                for (String str : split) {
-                    if (str.contains(".")) {
-                        String tmp = str.split("\\.")[0];
-                        String tmp2 = str.split("\\.")[1];
-                        TraceManager.addDev("TMP " + tmp + " " + tmp2);
-                        t = t.concat(tmp.split("__")[tmp.split("__").length - 1] + "." + tmp2.split("__")[Math.max(tmp2.split("__").length - 2, 0)] + " ");
-                    } else {
-                        t = t.concat(str + " ");
-                    }
-                }
-            } else if (p.getName().contains("Authenticity")) {
-            }
-            s = s.concat(t + "\n");
-            i++;
-        }
-        pragma.setValue(s);
-        pragma.makeValue();
-        abd.addComponent(pragma, xpos, ypos, false, true);
-
-        TraceManager.addDev("val " + pragma.getValues().length);
-
-    }
-
-
-}
diff --git a/src/main/java/ui/GTURTLEModeling.java b/src/main/java/ui/GTURTLEModeling.java
index fed79b1ebf88716518d800c32e0202818d8b6b8f..32813f34dace90f1b005a9bbf63f36dc40a6eb04 100644
--- a/src/main/java/ui/GTURTLEModeling.java
+++ b/src/main/java/ui/GTURTLEModeling.java
@@ -1894,19 +1894,22 @@ public class GTURTLEModeling {
     }
 
     public void generateFullAvatarFromTML() {
-        if (tmlm != null && tmap == null) {
+        /*if (tmlm != null && tmap == null) {
             tmap = tmlm.getDefaultMapping();
-        }
+        }*/
 
 
-        FullTML2Avatar t2a = new FullTML2Avatar(tmap);
+        FullTML2Avatar t2a = new FullTML2Avatar(tmlm);
         TraceManager.addDev("Avatar spec generation");
         avatarspec = t2a.generateAvatarSpec("1");
 
         if (mgui.isExperimentalOn()) {
+
+            TraceManager.addDev("Avatar spec:" + avatarspec.toString());
             mgui.drawAvatarSpecification(avatarspec);
-            AvatarSpecification av2 = avatarspec.advancedClone();
-            mgui.drawAvatarSpecification(av2);
+            //TraceManager.addDev("Avatar spec:" + avatarspec.toString());
+            //AvatarSpecification av2 = avatarspec.advancedClone();
+            //mgui.drawAvatarSpecification(av2);
         }
     }
 
@@ -9041,6 +9044,7 @@ public class GTURTLEModeling {
     public void drawBlockProperties(AvatarBlock ab, AvatarBDBlock bl) {
         for (avatartranslator.AvatarSignal sig : ab.getSignals()) {
             String name = sig.getName().split("__")[sig.getName().split("__").length - 1];
+
             //           sig.setName(name);
             String[] types = new String[sig.getListOfAttributes().size()];
             String[] typeIds = new String[sig.getListOfAttributes().size()];
@@ -9050,7 +9054,7 @@ public class GTURTLEModeling {
                 typeIds[i] = attr.getName();
                 i++;
             }
-            TraceManager.addDev("Adding signal " + sig);
+            //TraceManager.addDev("Adding signal " + sig + " with name=" + name);
             bl.addSignal(new ui.AvatarSignal(sig.getInOut(), name, types, typeIds));
         }
 
@@ -9207,7 +9211,7 @@ public class GTURTLEModeling {
                 //Add Relations to connector
                 for (AvatarRelation ar : avspec.getRelations()) {
                     if (ar.block1.getName().contains(bl1) && ar.block2.getName().contains(bl2) || ar.block1.getName().contains(bl2) && ar.block2.getName().contains(bl1)) {
-
+                        //TraceManager.addDev("Trying adding signal relations to connector");
                         //TGConnectingPoint p1= blockMap.get(bl1).getFreeTGConnectingPoint(blockMap.get(bl1).getX(), blockMap.get(bl1).getY());
 
                         conn.setAsynchronous(ar.isAsynchronous());
@@ -9218,8 +9222,10 @@ public class GTURTLEModeling {
                         for (int i = 0; i < ar.nbOfSignals(); i++) {
                             //TraceManager.addDev("Adding signal relations to connector");
                             //
+                            //TraceManager.addDev("Adding signal 1: " + ar.getSignal1(i).toString() + " of block " + ar.block1.getName());
                             conn.addSignal(ar.getSignal1(i).toString(), ar.getSignal1(i).getInOut() == 0, ar.block1.getName().contains(bl1));
-                            conn.addSignal(ar.getSignal2(i).toString(), ar.getSignal2(i).getInOut() == 0, !ar.block1.getName().contains(bl1));
+                            //TraceManager.addDev("Adding signal 2:" + ar.getSignal2(i).toString() + " of block " + ar.block2.getName());
+                            conn.addSignal(ar.getSignal2(i).toString(), ar.getSignal2(i).getInOut() == 0, !ar.block2.getName().contains(bl2));
                             //
                         }
                         //
diff --git a/src/main/java/ui/avatarbd/AvatarBDBlock.java b/src/main/java/ui/avatarbd/AvatarBDBlock.java
index aa784a0c273bbede5ebac563d35ecbd629cb7148..39881d5d2ea0bdd37361cd9981d9271fabed6bc7 100644
--- a/src/main/java/ui/avatarbd/AvatarBDBlock.java
+++ b/src/main/java/ui/avatarbd/AvatarBDBlock.java
@@ -1603,20 +1603,22 @@ public class AvatarBDBlock extends TGCScalableWithInternalComponent implements S
         _id = _id.trim();
         //TraceManager.addDev("Searching for signal with id=" + _id);
         for (AvatarSignal as : this.mySignals) {
-            //	
+            //TraceManager.addDev("signal? " + as.getId());
             if (as.getId().compareTo(_id) == 0)
                 return as;
         }
-        //TraceManager.addDev("Not found");
+        TraceManager.addDev("Not found");
         return null;
     }
 
     public AvatarSignal getAvatarSignalFromFullName(String _id) {
         if (_id.startsWith("in ")) {
+            //TraceManager.addDev("in  signal");
             return getSignalNameBySignalDef(_id.substring(3, _id.length()).trim());
         }
 
         if (_id.startsWith("out ")) {
+            //TraceManager.addDev("out  signal");
             return getSignalNameBySignalDef(_id.substring(4, _id.length()).trim());
         }
         return null;
diff --git a/src/main/java/ui/avatarbd/AvatarBDPortConnector.java b/src/main/java/ui/avatarbd/AvatarBDPortConnector.java
index 1d05088800697c203d9aa4ab87315a28fa17dfc8..be4e463338b4d182ff2aad5f4d864ae150786c14 100644
--- a/src/main/java/ui/avatarbd/AvatarBDPortConnector.java
+++ b/src/main/java/ui/avatarbd/AvatarBDPortConnector.java
@@ -602,19 +602,30 @@ public class AvatarBDPortConnector extends TGConnectorWithCommentConnectionPoint
         String s;
 
         for (i = 0; i < outSignalsAtOrigin.size(); i++) {
+            //TraceManager.addDev("out sig origin");
             try {
+                //TraceManager.addDev("sig block1: " + block1.getAvatarSignalFromFullName(outSignalsAtOrigin.get(i)).toString());
+                //TraceManager.addDev("Found");
+                //TraceManager.addDev("Size of in at dest:" + inSignalsAtDestination.size() + " signal name:" + inSignalsAtDestination.get(i)
+                //.toString());
+                //TraceManager.addDev("Sig block2: " + block2.getAvatarSignalFromFullName(inSignalsAtDestination.get(i)).toString());
+
+                //TraceManager.addDev("Found");
                 s = makeSignalAssociation(block1, block1.getAvatarSignalFromFullName(outSignalsAtOrigin.get(i)), block2, block2.getAvatarSignalFromFullName(inSignalsAtDestination.get(i)));
                 v.add(s);
             } catch (Exception e) {
+                TraceManager.addDev("Exception: signal removed? out origin");
                 // Probably a signal has been removed
             }
         }
 
         for (i = 0; i < inSignalsAtOrigin.size(); i++) {
+            //TraceManager.addDev("in sig origin");
             try {
                 s = makeSignalAssociation(block1, block1.getAvatarSignalFromFullName(inSignalsAtOrigin.get(i)), block2, block2.getAvatarSignalFromFullName(outSignalsAtDestination.get(i)));
                 v.add(s);
             } catch (Exception e) {
+                TraceManager.addDev("Exception: signal removed? in origin");
                 // Probably a signal has been removed
             }
         }
@@ -691,8 +702,15 @@ public class AvatarBDPortConnector extends TGConnectorWithCommentConnectionPoint
     }
 
     public void updateAllSignals() {
+        TraceManager.addDev("Updating signals");
         try {
             Vector<String> v = getAssociationSignals();
+
+
+            for (String s: v) {
+                TraceManager.addDev("Assoc: " + s);
+            }
+
             //	
             inSignalsAtOrigin.clear();
             inSignalsAtDestination.clear();
@@ -711,7 +729,7 @@ public class AvatarBDPortConnector extends TGConnectorWithCommentConnectionPoint
             for (int i = 0; i < v.size(); i++) {
 
                 assoc = v.get(i);
-                //TraceManager.addDev("assoc=" + assoc);
+                TraceManager.addDev("assoc=" + assoc);
                 as1 = block1.getSignalNameBySignalDef(getFirstSignalOfSignalAssociation(assoc));
                 as2 = block2.getSignalNameBySignalDef(getSecondSignalOfSignalAssociation(assoc));
                 if ((as1 != null) && (as2 != null)) {
diff --git a/src/main/java/ui/tmlad/TMLActivityDiagramToolBar.java b/src/main/java/ui/tmlad/TMLActivityDiagramToolBar.java
index f3cb3c410213708c0aaa6e7677325fed733f3686..8c29b428146cd1142038cd6e1dc0a761b4a2c9e8 100755
--- a/src/main/java/ui/tmlad/TMLActivityDiagramToolBar.java
+++ b/src/main/java/ui/tmlad/TMLActivityDiagramToolBar.java
@@ -83,7 +83,7 @@ public class TMLActivityDiagramToolBar extends TToolBar {
         mgui.actions[TGUIAction.TMLAD_SEND_REQUEST].setEnabled(b);
         mgui.actions[TGUIAction.TMLAD_SEND_EVENT].setEnabled(b);
         mgui.actions[TGUIAction.TMLAD_WAIT_EVENT].setEnabled(b);
-	 mgui.actions[TGUIAction.TMLAD_WRITE_CAMS].setEnabled(b);
+	    mgui.actions[TGUIAction.TMLAD_WRITE_CAMS].setEnabled(b);
         mgui.actions[TGUIAction.TMLAD_READ_CAMS].setEnabled(b);
         mgui.actions[TGUIAction.TMLAD_NOTIFIED_EVENT].setEnabled(b);
 		mgui.actions[TGUIAction.TMLAD_READ_REQUEST_ARG].setEnabled(b);
@@ -140,8 +140,6 @@ public class TMLActivityDiagramToolBar extends TToolBar {
         button = this.add(mgui.actions[TGUIAction.TMLAD_WRITE_CHANNEL]);
         button.addMouseListener(mgui.mouseHandler);
 
-	button = this.add(mgui.actions[TGUIAction.TMLAD_WRITE_CAMS]);
-        button.addMouseListener(mgui.mouseHandler);
 
         button = this.add(mgui.actions[TGUIAction.TMLAD_SEND_EVENT]);
         button.addMouseListener(mgui.mouseHandler);
@@ -155,8 +153,7 @@ public class TMLActivityDiagramToolBar extends TToolBar {
         button.addMouseListener(mgui.mouseHandler);
 
 
-	button = this.add(mgui.actions[TGUIAction.TMLAD_READ_CAMS]);
-        button.addMouseListener(mgui.mouseHandler);
+
         
 	
         button = this.add(mgui.actions[TGUIAction.TMLAD_WAIT_EVENT]);
@@ -168,6 +165,14 @@ public class TMLActivityDiagramToolBar extends TToolBar {
 		button = this.add(mgui.actions[TGUIAction.TMLAD_READ_REQUEST_ARG]);
         button.addMouseListener(mgui.mouseHandler);
         
+        this.addSeparator();
+
+        button = this.add(mgui.actions[TGUIAction.TMLAD_WRITE_CAMS]);
+        button.addMouseListener(mgui.mouseHandler);
+
+        button = this.add(mgui.actions[TGUIAction.TMLAD_READ_CAMS]);
+        button.addMouseListener(mgui.mouseHandler);
+
         this.addSeparator();
         
         button = this.add(mgui.actions[TGUIAction.TMLAD_ACTION_STATE]);