diff --git a/src/main/java/avatartranslator/AvatarBlock.java b/src/main/java/avatartranslator/AvatarBlock.java
index f4119dcb17b453990c736abac19f76551fc4ba03..0053bc1dd849167e8926ecb0735bc1ac5d59e212 100644
--- a/src/main/java/avatartranslator/AvatarBlock.java
+++ b/src/main/java/avatartranslator/AvatarBlock.java
@@ -133,12 +133,11 @@ public class AvatarBlock extends AvatarElement implements AvatarStateMachineOwne
     }
 
     public AvatarSignal getSignalByName(String _name) {
-	for(AvatarSignal sig: signals) {
-		System.out.println("finding " +sig.getName() + " " + _name);
-	    if (sig.getName().compareTo(_name) == 0) {
-		return sig;
-	    }
-	}
+		for(AvatarSignal sig: signals) {
+		    if (sig.getName().compareTo(_name) == 0) {
+				return sig;
+		    }
+		}
 
 	if (father != null) {
 	    return father.getSignalByName(_name);
diff --git a/src/main/java/dseengine/DSEConfiguration.java b/src/main/java/dseengine/DSEConfiguration.java
index dab16ba7eb69356cfba5395db6e73bba5288e043..045662e0b184fd282e4723183d2619ac2cb5775e 100755
--- a/src/main/java/dseengine/DSEConfiguration.java
+++ b/src/main/java/dseengine/DSEConfiguration.java
@@ -1392,10 +1392,10 @@ public class DSEConfiguration implements Runnable  {
 		     TMLArchiPanel newArch = drawMapping(tmla, "securedMapping"+(cpt-1));
 		     GTMLModeling gtml =new GTMLModeling(newArch, true);
 		     tmla = gtml.translateToTMLMapping();
-		     tmla.tmlap = tmlap;
-			tmlcdp = (TMLComponentDesignPanel) mainGUI.tabs.get(0);
-		     tmla.setTMLDesignPanel(tmlcdp);
-			 System.out.println("tmlcdp " + tmlcdp);
+//		     tmla.tmlap = tmlap;
+	//		tmlcdp = (TMLComponentDesignPanel) mainGUI.tabs.get(0);
+		//     tmla.setTMLDesignPanel(tmlcdp);
+			// System.out.println("tmlcdp " + tmlcdp);
 		     //
 		     //Repeat for secured mapping
 		     TMLMapping<TGComponent> secMapping = mainGUI.gtm.autoSecure(mainGUI, "mapping" +(cpt-1),tmla, newArch, encComp, overhead, decComp,true,false,false);
diff --git a/src/main/java/tmltranslator/TMLActivity.java b/src/main/java/tmltranslator/TMLActivity.java
index 19228fb812314dad1e3e3ec610fa21c62cf4acfc..e1fa1378e72668a0417a43339089d70b198d473d 100755
--- a/src/main/java/tmltranslator/TMLActivity.java
+++ b/src/main/java/tmltranslator/TMLActivity.java
@@ -155,6 +155,13 @@ public class TMLActivity extends TMLElement {
         return null;
     }
 
+	public void replaceElement(TMLActivityElement _oldE, TMLActivityElement _newE) {
+		_newE.setNexts(_oldE.getNexts());
+		replaceAllNext(_oldE, _newE);
+		elements.add(_newE);
+		elements.remove(_oldE);
+	}
+
     public void removeAllRandomSequences(TMLTask _task) {
         int idRandomSequence = 0;
         TMLRandomSequence tmlrs = findTMLRandomSequence();
diff --git a/src/main/java/tmltranslator/TMLActivityElementChannel.java b/src/main/java/tmltranslator/TMLActivityElementChannel.java
index d9bc2be18d7620f670c4b93c92efe35fc9fafe8c..e7a93f9bbc2f3d37e831bf91a619d6efbd48a1db 100755
--- a/src/main/java/tmltranslator/TMLActivityElementChannel.java
+++ b/src/main/java/tmltranslator/TMLActivityElementChannel.java
@@ -53,10 +53,12 @@ import java.util.ArrayList;
 public class TMLActivityElementChannel extends TMLActivityElement {
     protected ArrayList<TMLChannel> channels;
     protected String nbOfSamples;
+	private boolean isAttacker;
 
     public TMLActivityElementChannel(String _name, Object _referenceObject) {
         super(_name, _referenceObject);
         channels = new ArrayList<TMLChannel>();
+		isAttacker=false;
     }
 
     public void addChannel(TMLChannel _channel) {
@@ -71,6 +73,14 @@ public class TMLActivityElementChannel extends TMLActivityElement {
         return channels.get(_index);
     }
 
+	public boolean isAttacker(){
+		return isAttacker;
+	}
+
+	public void setAttacker(boolean attacker){
+		isAttacker=attacker;
+	}
+
     public void setNbOfSamples(String _nbOfSamples) {
         nbOfSamples = _nbOfSamples;
     }
diff --git a/src/main/java/tmltranslator/TMLMapping.java b/src/main/java/tmltranslator/TMLMapping.java
index 6577db688eefa58b072d452c5e9b2e66a58b109b..e7f7f71717e9e2aa20dca1c95d4dda774bb2e432 100755
--- a/src/main/java/tmltranslator/TMLMapping.java
+++ b/src/main/java/tmltranslator/TMLMapping.java
@@ -47,7 +47,7 @@ import myutil.*;
 import tmltranslator.toproverif.TML2ProVerif;
 import ui.TMLArchiPanel;
 import ui.TMLComponentDesignPanel;
-import ui.util.CorrespondanceElement;
+import ui.CorrespondanceTGElement;
 
 import java.util.*;
 
@@ -71,7 +71,7 @@ public class TMLMapping<E> {
     private List<HwCommunicationNode> oncommnodes;
     private List<TMLElement> mappedcommelts;
 
-    public CorrespondanceElement<E> listE;
+	private CorrespondanceTGElement listE;
 
     // Security
     public boolean firewall = false;
@@ -90,9 +90,9 @@ public class TMLMapping<E> {
 
 
 
-    // REFERENCES TO BE REMOVED!!!!
-    private TMLComponentDesignPanel tmldp;
-    public TMLArchiPanel tmlap;
+    // REFERENCES TO BE REMOVED!!!! :(
+    //private TMLComponentDesignPanel tmldp;
+    //public TMLArchiPanel tmlap;
 
 
     public TMLMapping(TMLModeling<E> _tmlm, TMLArchitecture _tmla, boolean reset) {
@@ -149,6 +149,15 @@ public class TMLMapping<E> {
         return null;
     }
 
+	public CorrespondanceTGElement getCorrespondanceList(){
+		return listE;
+	}
+
+	public void setCorrespondanceList(CorrespondanceTGElement cl){
+		listE=cl;
+	}
+
+
     public void addCustomValue(String custom) {
         customValues.add(custom);
     }
@@ -1492,12 +1501,78 @@ public class TMLMapping<E> {
         }
     }
 
-    public void setTMLDesignPanel(TMLComponentDesignPanel _tmldp){
-        tmldp = _tmldp;
-    }
-
-    public TMLComponentDesignPanel getTMLCDesignPanel(){
-        return tmldp;
+	public boolean channelAllowed(TMLChannel chan){
+		TMLTask orig = chan.getOriginTask();
+        TMLTask dest = chan.getDestinationTask();
+        List<HwNode> path = getPath(orig, dest);
+        for (HwNode node:path){
+            if (node instanceof HwBridge){
+                for (String rule:((HwBridge) node).firewallRules){
+                    String t1 = rule.split("->")[0];
+                    String t2 = rule.split("->")[1];
+                    if (t1.equals(orig.getName().replaceAll("__","::")) || t1.equals("*")){
+                        if (t2.equals(dest.getName().replaceAll("__","::")) || t2.equals("*")){
+                            return false;
+                        }
+                    }
+                }
+            }
+        }
+        return true;
+	}
+
+
+	public List<HwNode> getPath(TMLTask t1, TMLTask t2){
+        HwNode node1 = getHwNodeOf(t1);
+        HwNode node2 = getHwNodeOf(t2);
+        List<HwNode> path = new ArrayList<HwNode>();
+        if (node1==node2){
+            return path;
+        }
+        if (node1!=node2){
+            //Navigate architecture for node
+            List<HwLink> links = getTMLArchitecture().getHwLinks();
+            //  HwNode last = node1;
+            List<HwNode> found = new ArrayList<HwNode>();
+            List<HwNode> done = 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);
+            }
+        }
+        return path;
     }
 
 
diff --git a/src/main/java/tmltranslator/TMLModeling.java b/src/main/java/tmltranslator/TMLModeling.java
index 9307d14f8d3fc05d39d50ec65f481dc9d312f4e3..26fb4ed6695db61e5a773452e6225998acd7ba26 100755
--- a/src/main/java/tmltranslator/TMLModeling.java
+++ b/src/main/java/tmltranslator/TMLModeling.java
@@ -52,6 +52,7 @@ import proverifspec.ProVerifQueryResult;
 import ui.TAttribute;
 import ui.tmlcompd.TMLCPrimitiveComponent;
 import ui.tmlcompd.TMLCPrimitivePort;
+import ui.TGComponent;
 
 import java.util.*;
 
@@ -682,6 +683,17 @@ public class TMLModeling<E> {
     public List<TMLTask> getTasks() {
         return tasks;
     }
+
+	public List<TMLTask> getAttackerTasks(){
+		List<TMLTask> attackers = new ArrayList<TMLTask>();
+		for (TMLTask task: tasks){
+			if (task.isAttacker()){
+				attackers.add(task);
+			}
+		}
+		return attackers;
+	}
+	
     public List<String[]> getPragmas(){
         return pragmas;
     }
@@ -812,6 +824,10 @@ public class TMLModeling<E> {
             }
         }
     }
+	public TGComponent getTGComponent(){
+		return (TGComponent) getTasks().get(0).getReferenceObject();
+	}
+
 
     public void backtraceAuthenticity(HashMap<AvatarPragmaAuthenticity, ProVerifQueryAuthResult> authenticityResults, String mappingName) {
         //        System.out.println("Backtracing Authenticity");
diff --git a/src/main/java/tmltranslator/toavatar/TML2Avatar.java b/src/main/java/tmltranslator/toavatar/TML2Avatar.java
index 0e54f143d2a9ba1117da7cb033151cd1ef6a976d..0653a1a880a9843fe4cc5e1b15b257af3b98a04f 100644
--- a/src/main/java/tmltranslator/toavatar/TML2Avatar.java
+++ b/src/main/java/tmltranslator/toavatar/TML2Avatar.java
@@ -1360,12 +1360,8 @@ public class TML2Avatar {
 	//TODO: Make state names readable
 	//TODO: Put back numeric guards
 	//TODO: Calcuate for temp variable
+	this.avspec = new AvatarSpecification("spec", tmlmap.getTMLModeling().getTGComponent().getTDiagramPanel().tp);
 
-	this.avspec = new AvatarSpecification("spec", tmlmap.getTMLCDesignPanel());
-	if (tmlmap.getTMLCDesignPanel()==null){
-		//System.out.println("Failed to generate specification");
-	//	return avspec;
-	}
 	attrsToCheck.clear();
 	//tmlmodel.removeForksAndJoins();
 	//Only set the loop limit if it's a number
diff --git a/src/main/java/ui/GTMLModeling.java b/src/main/java/ui/GTMLModeling.java
index 94cd22a6387f7d7b54436bc0d902904097eb8b05..b99b2e4caa41e6201db71fb946d1b1b5fd9686a4 100755
--- a/src/main/java/ui/GTMLModeling.java
+++ b/src/main/java/ui/GTMLModeling.java
@@ -63,6 +63,7 @@ import ui.tmlcd.TMLTaskOperator;
 import ui.tmlcompd.TMLCPath;
 import ui.tmlcompd.TMLCPrimitiveComponent;
 import ui.tmlcompd.TMLCPrimitivePort;
+import ui.tmlcompd.*;
 import ui.tmlcompd.TMLCRecordComponent;
 import ui.tmldd.*;
 import ui.tmlsd.TGConnectorMessageTMLSD;
@@ -71,7 +72,7 @@ import ui.tmlsd.TMLSDStorageInstance;
 import ui.tmlsd.TMLSDTransferInstance;
 
 import java.util.*;
-
+import java.awt.Point;
 
 /**
  * Class GTMLModeling
@@ -153,6 +154,124 @@ public class GTMLModeling  {
         putPrefixName = _b;
     }
 
+	public void processAttacker(){
+		//System.out.println("processing...");
+		//System.out.println(tmlm.getAttackerTasks());
+		if (tmlm==null){
+			return;
+		}
+		List<TMLTask> attackers = tmlm.getAttackerTasks();
+		for (TMLTask attacker: attackers){
+			//System.out.println(attacker.getName());
+			TMLCPrimitiveComponent atcomp = tmlcdp.getPrimitiveComponentByName(attacker.getName().split("__")[1]);
+			//System.out.println("comp " + attacker.getName().split("__")[1]);
+			if (atcomp !=null){
+				//Find activity diagram
+				TMLActivityDiagramPanel tadp = tmlcdp.getTMLActivityDiagramPanel(attacker.getName().split("__")[1]);
+				List<TGComponent> list = tadp.getComponentList();
+				//System.out.println("list " + list);
+				for (TGComponent tgc: list){
+					if (tgc instanceof TMLADWriteChannel){
+						TMLADWriteChannel wr = (TMLADWriteChannel) tgc;
+						if (wr.isAttacker()){
+							//System.out.println("channel " + wr.getChannelName());
+							String channelToAdd = wr.getChannelName();
+
+                            
+							//Find ports to attach
+							List<TMLCPrimitivePort> ports = tmlcdp.tmlctdp.getPortsByName(channelToAdd);
+							//System.out.println("orts " + ports);
+							if (ports.size()!=2){	
+								//throw error
+								//System.out.println("ERROR");
+								continue;
+							}
+
+							//Remove Port Connector
+							tmlcdp.tmlctdp.removeOneConnector(ports.get(0).getTGConnectingPointAtIndex(0));
+
+
+							//Add write port to attacker component
+							TMLCChannelOutPort originPort = new TMLCChannelOutPort(atcomp.getX(), atcomp.getY(), tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, atcomp, tmlcdp.tmlctdp);
+                            originPort.commName=channelToAdd;
+							tmlcdp.tmlctdp.addComponent(originPort, atcomp.getX(), atcomp.getY(),true,true);
+
+							//Add fork/join to Component Diagram 
+							TMLCJoin join = new TMLCJoin(atcomp.getX(), atcomp.getY(), tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp);
+							tmlcdp.tmlctdp.addComponent(join, atcomp.getX(), atcomp.getY(),false,true);
+					
+							//Add 3 connectors, from each port to the join
+							TMLCPortConnector conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, originPort.getTGConnectingPointAtIndex(0), join.getTGConnectingPointAtIndex(1), new Vector<Point>());
+	                        tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true);
+							if (!ports.get(0).isOrigin()){
+								conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, ports.get(0).getTGConnectingPointAtIndex(0), join.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                        tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true);
+								conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, ports.get(1).getTGConnectingPointAtIndex(0), join.getTGConnectingPointAtIndex(6), new Vector<Point>());
+                        tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true);
+							}
+							else {
+								conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, ports.get(0).getTGConnectingPointAtIndex(0), join.getTGConnectingPointAtIndex(6), new Vector<Point>());
+                        tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true);
+								conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, ports.get(1).getTGConnectingPointAtIndex(0), join.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                        tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true);
+							}
+
+						}
+					}
+					else if (tgc instanceof TMLADReadChannel){
+						TMLADReadChannel rd = (TMLADReadChannel) tgc;
+						if (rd.isAttacker()){
+							//System.out.println("channel " + rd.getChannelName());
+							String channelToAdd = rd.getChannelName();
+
+                            
+							//Find ports to attach
+							List<TMLCPrimitivePort> ports = tmlcdp.tmlctdp.getPortsByName(channelToAdd);
+							//System.out.println("orts " + ports);
+							if (ports.size()!=2){	
+								//throw error
+								//System.out.println("ERROR");
+								continue;
+							}
+
+							//Remove Port Connector
+							tmlcdp.tmlctdp.removeOneConnector(ports.get(0).getTGConnectingPointAtIndex(0));
+
+
+							//Add write port to attacker component
+							TMLCChannelOutPort destPort = new TMLCChannelOutPort(atcomp.getX(), atcomp.getY(), tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, atcomp, tmlcdp.tmlctdp);
+                            destPort.commName=channelToAdd;
+							destPort.isOrigin=false;
+							tmlcdp.tmlctdp.addComponent(destPort, atcomp.getX(), atcomp.getY(),true,true);
+
+							//Add fork/join to Component Diagram 
+							TMLCFork fork = new TMLCFork(atcomp.getX(), atcomp.getY(), tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp);
+							tmlcdp.tmlctdp.addComponent(fork, atcomp.getX(), atcomp.getY(),false,true);
+					
+							//Add 3 connectors, from each port to the join
+							TMLCPortConnector conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, destPort.getTGConnectingPointAtIndex(0), fork.getTGConnectingPointAtIndex(1), new Vector<Point>());
+	                        tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true);
+							if (ports.get(0).isOrigin()){
+								conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, ports.get(0).getTGConnectingPointAtIndex(0), fork.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                        		tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true);
+								conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, ports.get(1).getTGConnectingPointAtIndex(0), fork.getTGConnectingPointAtIndex(6), new Vector<Point>());
+                        		tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true);
+							}
+							else {
+								conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, ports.get(0).getTGConnectingPointAtIndex(0), fork.getTGConnectingPointAtIndex(6), new Vector<Point>());
+                        		tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true);
+								conn = new TMLCPortConnector(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxX(), true, null, tmlcdp.tmlctdp, ports.get(1).getTGConnectingPointAtIndex(0), fork.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                        		tmlcdp.tmlctdp.addComponent(conn, 0,0,false,true);
+							}
+
+						}
+					}
+				}
+			}
+		}
+
+	}
+
     public TMLModeling<TGComponent> translateToTMLModeling(boolean onlyTakenIntoAccount, boolean _resetID) {
         tmlm = new TMLModeling<>(_resetID);
         checkingErrors = new LinkedList<CheckingError> ();
@@ -253,6 +372,9 @@ public class GTMLModeling  {
                 }
 
                 addTMLComponents();
+				//Adapt for attacker
+				System.out.println("Processing attacker");
+				processAttacker();
                 TraceManager.addDev("Adding channels");
                 addTMLCChannels();
                 TraceManager.addDev("Adding events");
@@ -1818,9 +1940,12 @@ public class GTMLModeling  {
                 listE.addCor(tmlrsequence, tgc);
 
             } else if (tgc instanceof TMLADReadChannel) {
-				if (!tmltask.isAttacker()){
                 // Get the channel
+				TMLADReadChannel rd = (TMLADReadChannel) tgc;
                 channel = tmlm.getChannelByName(getFromTable(tmltask, ((TMLADReadChannel)tgc).getChannelName()));
+				/*if (rd.isAttacker()){
+					channel = tmlm.getChannelByName(getAttackerChannel(((TMLADReadChannel)tgc).getChannelName()));
+				}*/
                 if (channel == null) {
                     if (Conversion.containsStringInList(removedChannels, ((TMLADReadChannel)tgc).getChannelName())) {
                         UICheckingError ce = new UICheckingError(CheckingError.BEHAVIOR_ERROR, "A call to " + ((TMLADReadChannel)tgc).getChannelName() + " has been removed because the corresponding channel is not taken into account");
@@ -1836,13 +1961,14 @@ public class GTMLModeling  {
                         ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.UNKNOWN);
                         checkingErrors.add(ce);
                     }
+	
                 } else {
                     tmlreadchannel = new TMLReadChannel("read channel", tgc);
                     tmlreadchannel.setNbOfSamples(modifyString(((TMLADReadChannel)tgc).getSamplesValue()));
                     tmlreadchannel.addChannel(channel);
                     //security pattern
-                    if (securityPatterns.get(((TMLADReadChannel)tgc).securityContext)!=null){
-                        tmlreadchannel.securityPattern= securityPatterns.get(((TMLADReadChannel)tgc).securityContext);
+                    if (securityPatterns.get(((TMLADReadChannel)tgc).getSecurityContext())!=null){
+                        tmlreadchannel.securityPattern= securityPatterns.get(((TMLADReadChannel)tgc).getSecurityContext());
                         //NbOfSamples will increase due to extra overhead from MAC
                         int cur=1;
                         try {
@@ -1860,24 +1986,19 @@ public class GTMLModeling  {
                         cur = cur+ add;
                         tmlreadchannel.setNbOfSamples(Integer.toString(cur));
                     }
-                    else if (!((TMLADReadChannel)tgc).securityContext.isEmpty()){
+                    else if (!((TMLADReadChannel)tgc).getSecurityContext().isEmpty()){
                         //Throw error for missing security pattern
-                        UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Security Pattern " + ((TMLADReadChannel)tgc).securityContext + " not found");
+                        UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Security Pattern " + ((TMLADReadChannel)tgc).getSecurityContext() + " not found");
                         ce.setTDiagramPanel(tadp);
                         ce.setTGComponent(tgc);
                         checkingErrors.add(ce);
                     }
+					/*if (tmltask.isAttacker()){
+						tmlreadchannel.setAttacker(true);						
+					}*/
                     activity.addElement(tmlreadchannel);
                     ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK);
                     listE.addCor(tmlreadchannel, tgc);
-					}
-                } else {
-					tmlexecc = new TMLExecC("execc", tgc);
-					tmlexecc.setValue("100");
-					tmlexecc.setAction("100");
-					activity.addElement(tmlexecc);
-					((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK);
-					listE.addCor(tmlexecc, tgc);
 				}
             } else if (tgc instanceof TMLADSendEvent) {
                 event = tmlm.getEventByName(getFromTable(tmltask, ((TMLADSendEvent)tgc).getEventName()));
@@ -2127,7 +2248,7 @@ public class GTMLModeling  {
 
             } else if (tgc instanceof TMLADWriteChannel) {
                 // Get channels
-				if (!tmltask.isAttacker()){
+				TMLADWriteChannel wr = (TMLADWriteChannel) tgc;
                 channels = ((TMLADWriteChannel)tgc).getChannelsByName();
                 boolean error = false;
                 for(int i=0; i<channels.length; i++) {
@@ -2149,7 +2270,8 @@ public class GTMLModeling  {
                             checkingErrors.add(ce);
                         }
                         error = true;
-                    }
+                    
+					}
                 }
                 if (!error) {
                     tmlwritechannel = new TMLWriteChannel("write channel", tgc);
@@ -2158,9 +2280,13 @@ public class GTMLModeling  {
                         channel = tmlm.getChannelByName(getFromTable(tmltask, channels[i]));
                         tmlwritechannel.addChannel(channel);
                     }
+					//if (wr.isAttacker()){
+						//channel = tmlm.getChannelByName(getAttackerChannel(channels[0]));
+                        //tmlwritechannel.addChannel(channel);
+					//}
                     //add sec pattern
-                    if (securityPatterns.get(((TMLADWriteChannel)tgc).securityContext)!=null){
-                        tmlwritechannel.securityPattern= securityPatterns.get(((TMLADWriteChannel)tgc).securityContext);
+                    if (securityPatterns.get(((TMLADWriteChannel)tgc).getSecurityContext())!=null){
+                        tmlwritechannel.securityPattern= securityPatterns.get(((TMLADWriteChannel)tgc).getSecurityContext());
                         int cur = Integer.valueOf(modifyString(((TMLADWriteChannel)tgc).getSamplesValue()));
                         int add = Integer.valueOf(tmlwritechannel.securityPattern.overhead);
                         if (!tmlwritechannel.securityPattern.nonce.equals("")){
@@ -2172,30 +2298,21 @@ public class GTMLModeling  {
                         cur = cur+ add;
                         tmlwritechannel.setNbOfSamples(Integer.toString(cur));
                     }
-                    else if (!((TMLADWriteChannel)tgc).securityContext.isEmpty()){
+                    else if (!((TMLADWriteChannel)tgc).getSecurityContext().isEmpty()){
                         //Throw error for missing security pattern
-                        UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Security Pattern " + ((TMLADWriteChannel)tgc).securityContext + " not found");
+                        UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Security Pattern " + ((TMLADWriteChannel)tgc).getSecurityContext() + " not found");
                         ce.setTDiagramPanel(tadp);
                         ce.setTGComponent(tgc);
                         checkingErrors.add(ce);
                     }
+				/*	if (tmltask.isAttacker()){
+						tmlwritechannel.setAttacker(true);
+					}*/
                     activity.addElement(tmlwritechannel);
                     ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK);
                     listE.addCor(tmlwritechannel, tgc);
                 }
-			} else {
-					System.out.println("removing write channel");
-					tmlexecc = new TMLExecC("execc", tgc);
-					tmlexecc.setValue("100");
-					tmlexecc.setAction("100");
-					activity.addElement(tmlexecc);
-					((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK);
-					listE.addCor(tmlexecc, tgc);
-				}
-            }    
-			
-
-
+			}
         }
 
         // Interconnection between elements
@@ -2369,7 +2486,6 @@ public class GTMLModeling  {
         tmlm = new TMLModeling<>(true);
         archi = new TMLArchitecture();  //filled by makeArchitecture
         map = new TMLMapping<>(tmlm, archi, false);
-        map.tmlap = tmlap;
         checkingErrors = new LinkedList<CheckingError> ();
         warnings = new LinkedList<CheckingError> ();
         //listE = new CorrespondanceTGElement();
@@ -2382,7 +2498,8 @@ public class GTMLModeling  {
         }
         //TraceManager.addDev("Making mapping");
         makeMapping();  //fills map
-        map.listE = listE;
+		processAttackerScenario();
+        map.setCorrespondanceList(listE);
         //  map.securityPatterns.addAll(securityPatterns.keySet());
         //TraceManager.addDev("Making TMLCPLib");
         makeTMLCPLib();
@@ -2395,13 +2512,34 @@ public class GTMLModeling  {
           }
           autoMapKeys();*/
         removeActionsWithRecords();
-        map.setTMLDesignPanel(this.tmlcdp);
         if (map.firewall){
             tmlap.getMainGUI().gtm.drawFirewall(map);
         }
         return map;     // the data structure map is returned to CheckSyntaxTMLMapping in GTURTLEModeling
     }
 
+	public void processAttackerScenario(){
+		//Scan tasks and activity diagrams for attacker read/write channels
+		for (TMLTask task: tmlm.getTasks()){
+			System.out.println(task + " " + task.isAttacker());
+			if (task.isAttacker()){
+				TMLActivity act=task.getActivityDiagram();
+				for (TMLActivityElement elem: act.getElements()){
+					if (elem instanceof TMLActivityElementChannel){
+						TMLActivityElementChannel elemChannel = (TMLActivityElementChannel) elem;
+						if (elemChannel.isAttacker()){
+							TMLChannel chan = elemChannel.getChannel(0);
+							if (!map.channelAllowed(chan)){
+								//Remove read/writechannel
+								TMLExecI exec= new TMLExecI("100",elem.getReferenceObject());
+								act.replaceElement(elem, exec);
+							}
+						}
+					}
+				}
+			}
+		}
+	}
 
     public TMLCP translateToTMLCPDataStructure( String _cpName )        {
 
@@ -3595,6 +3733,15 @@ public class GTMLModeling  {
         table.put(s1, s2);
     }
 
+	public String getAttackerChannel(String s){
+		for (String channelName: table.keySet()){
+			if (channelName.split("/")[1].equals(s)){
+				return table.get(channelName);
+			}
+		}
+		return "";
+	}
+
     public String getFromTable(TMLTask task, String s) {
         //TraceManager.addDev("TABLE GET: Getting from task=" + task.getName() + " element=" + s);
 
diff --git a/src/main/java/ui/GTURTLEModeling.java b/src/main/java/ui/GTURTLEModeling.java
index ce9792f900900919cec52a788793999e6ce319bf..02140d94dd873c250f5ae58ddaf4b76e0e77f763 100755
--- a/src/main/java/ui/GTURTLEModeling.java
+++ b/src/main/java/ui/GTURTLEModeling.java
@@ -734,13 +734,18 @@ public class GTURTLEModeling {
     }
     public TMLMapping<TGComponent> drawFirewall(TMLMapping<TGComponent> map){
         System.out.println("DRAWING FIREWALL");
-        TMLComponentDesignPanel tmlcdp = map.getTMLCDesignPanel();
+		TGComponent comp= map.getTMLModeling().getTGComponent();
+		TMLComponentDesignPanel tmlcdp = (TMLComponentDesignPanel) comp.getTDiagramPanel().tp;
+       // TMLComponentDesignPanel tmlcdp = map.getTMLCDesignPanel();
         TMLModeling<TGComponent> tmlm = map.getTMLModeling();
+		TMLArchitecture archi = map.getArch();
+		TURTLEPanel tmlap = map.getCorrespondanceList().getTG(archi.getFirstCPU()).getTDiagramPanel().tp;
         TMLActivityDiagramPanel firewallADP = null;
         TMLComponentTaskDiagramPanel tcdp = tmlcdp.tmlctdp;
         if (TraceManager.devPolicy == TraceManager.TO_CONSOLE){
             MainGUI gui = tmlcdp.getMainGUI();
-            int arch = mgui.tabs.indexOf(map.tmlap);
+
+            int arch = mgui.tabs.indexOf(tmlap);
             gui.cloneRenameTab(arch,"firewallArch");
             TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1);
             int ind = gui.tabs.indexOf(tmlcdp);
@@ -813,8 +818,8 @@ public class GTURTLEModeling {
                     outChans.put(chan,rd);
                     toAdd.add(rd);
                     toAdd.add(wr);
-                    map.listE.addCor(rd, (TGComponent) rd.getReferenceObject());
-                    map.listE.addCor(wr, (TGComponent) wr.getReferenceObject());
+                    map.getCorrespondanceList().addCor(rd, (TGComponent) rd.getReferenceObject());
+                    map.getCorrespondanceList().addCor(wr, (TGComponent) wr.getReferenceObject());
                 }
                 tmlm.removeAllChannels();
                 for (TMLChannel c:toAdd){
@@ -930,7 +935,7 @@ public class GTURTLEModeling {
 
                 TMLStartState start = new TMLStartState("start", adStart);
                 act.setFirst(start);
-                map.listE.addCor(start,adStart);
+                map.getCorrespondanceList().addCor(start,adStart);
 
                 //Add infinite loop
 
@@ -946,7 +951,7 @@ public class GTURTLEModeling {
                 TMLChoice choice = new TMLChoice("chooseChannel", adChoice);
                 act.addElement(choice);
                 loop.addNext(choice);
-                map.listE.addCor(choice,adChoice);
+                map.getCorrespondanceList().addCor(choice,adChoice);
 
 
 
@@ -1000,7 +1005,7 @@ public class GTURTLEModeling {
         }
         //Redo all reference objects
 
-        map.listE.useDIPLOIDs();
+        map.getCorrespondanceList().useDIPLOIDs();
         return map;
     }
 
@@ -1059,12 +1064,15 @@ public class GTURTLEModeling {
             return;
         }
         //Clone diagrams
-
-        int arch = gui.tabs.indexOf(tmap.tmlap);
+		TURTLEPanel tmlap = tmap.getCorrespondanceList().getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel().tp;
+        int arch = gui.tabs.indexOf(tmlap);
         gui.cloneRenameTab(arch,"hsm");
         TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1);
 
-        TMLComponentDesignPanel tmlcdp = tmap.getTMLCDesignPanel();
+		TGComponent tgcomp= tmap.getTMLModeling().getTGComponent();
+		TMLComponentDesignPanel tmlcdp= (TMLComponentDesignPanel) tgcomp.getTDiagramPanel().tp;
+
+//        TMLComponentDesignPanel tmlcdp = tmap.getTMLCDesignPanel();
         int ind = gui.tabs.indexOf(tmlcdp);
         String tabName = gui.getTitleAt(tmlcdp);
         gui.cloneRenameTab(ind, name);
@@ -1137,7 +1145,7 @@ public class GTURTLEModeling {
                 for (TGComponent tg: tad.getComponentList()){
                     if (tg instanceof TMLADWriteChannel){
                         TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg;
-                        if (writeChannel.securityContext.equals("")){
+                        if (writeChannel.getSecurityContext().equals("")){
                             String nonceName="";
                             int type=-1;
                             if (nonSecChans.contains(compName+"__"+writeChannel.getChannelName()+"_chData")){
@@ -1165,7 +1173,7 @@ public class GTURTLEModeling {
                             fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
                             if (fromStart!=null){
                                 channelInstances.add(tg);
-                                SecurityPattern sp = tmap.getSecurityPatternByName(writeChannel.securityContext);
+                                SecurityPattern sp = tmap.getSecurityPatternByName(writeChannel.getSecurityContext());
                                 int type=-1;
                                 if (sp.type.equals("Symmetric Encryption")){
                                     type=HSMChannel.SENC;
@@ -1180,7 +1188,7 @@ public class GTURTLEModeling {
                                     type=HSMChannel.NONCE;
                                 }
                                 HSMChannel ch = new HSMChannel(writeChannel.getChannelName(), compName, type);
-                                ch.securityContext=writeChannel.securityContext;
+                                ch.securityContext=writeChannel.getSecurityContext();
                                 compChannels.put(writeChannel.getChannelName(),ch);
                                 //chanNames.add(writeChannel.getChannelName()+compName);
                             }
@@ -1188,7 +1196,7 @@ public class GTURTLEModeling {
                     }
                     if (tg instanceof TMLADReadChannel){
                         TMLADReadChannel readChannel = (TMLADReadChannel) tg;
-                        if (readChannel.securityContext.equals("")){
+                        if (readChannel.getSecurityContext().equals("")){
                             fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
                             if (fromStart!=null){
                                 if(nonSecChans.contains(compName+"__"+readChannel.getChannelName()+"_chData") || nonAuthChans.contains(compName+"__"+readChannel.getChannelName())){
@@ -1207,7 +1215,7 @@ public class GTURTLEModeling {
                             if (fromStart!=null){
                                 channelInstances.add(tg);
                                 HSMChannel ch = new HSMChannel(readChannel.getChannelName(), compName, HSMChannel.DEC);
-                                ch.securityContext=readChannel.securityContext;
+                                ch.securityContext=readChannel.getSecurityContext();
                                 compChannels.put(readChannel.getChannelName(),ch);
                             }
                         }
@@ -1279,7 +1287,7 @@ public class GTURTLEModeling {
                     TMLADWriteChannel writeChannel = (TMLADWriteChannel) chan;
                     chanName=writeChannel.getChannelName();
                     HSMChannel ch = hsmChannels.get(chanName);
-                    writeChannel.securityContext = ch.securityContext;
+                    writeChannel.setSecurityContext(ch.securityContext);
                     xpos = chan.getX();
                     ypos = chan.getY();
                     fromStart = tad.findTGConnectorEndingAt(chan.getTGConnectingPointAtIndex(0));
@@ -1305,7 +1313,7 @@ public class GTURTLEModeling {
                     //Add write channel operator
                     wr = new TMLADWriteChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
                     wr.setChannelName("data_"+chanName+"_"+compName);
-                    wr.securityContext = ch.securityContext;
+                    wr.setSecurityContext(ch.securityContext);
                     tad.addComponent(wr, xpos, ypos+yShift, false,true);
 
 
@@ -1327,7 +1335,7 @@ public class GTURTLEModeling {
                     yShift+=60;
                     TMLADReadChannel rd = new TMLADReadChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
                     rd.setChannelName("retData_"+chanName+"_"+compName);
-                    rd.securityContext = ch.securityContext;
+                    rd.setSecurityContext(ch.securityContext);
                     tad.addComponent(rd, xpos, ypos+yShift, false,true);
 
                     fromStart.setP2(rd.getTGConnectingPointAtIndex(0));
@@ -1362,7 +1370,7 @@ public class GTURTLEModeling {
                     TMLADReadChannel readChannel = (TMLADReadChannel) chan;
                     chanName=readChannel.getChannelName();
                     HSMChannel ch= hsmChannels.get(chanName);
-                    readChannel.securityContext = ch.securityContext;
+                    readChannel.setSecurityContext(ch.securityContext);
                     xpos = chan.getX()+10;
                     ypos = chan.getY();
                     fromStart = tad.findTGConnectorStartingAt(chan.getTGConnectingPointAtIndex(1));
@@ -1404,7 +1412,7 @@ public class GTURTLEModeling {
                     //Add write channel operator
                     TMLADWriteChannel wr = new TMLADWriteChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
                     wr.setChannelName("data_"+chanName+"_"+compName);
-                    wr.securityContext = ch.securityContext;
+                    wr.setSecurityContext(ch.securityContext);
                     tad.addComponent(wr, xpos, ypos+yShift, false,true);
 
 
@@ -1419,7 +1427,7 @@ public class GTURTLEModeling {
                     yShift+=60;
                     TMLADReadChannel rd = new TMLADReadChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
                     rd.setChannelName("retData_"+chanName+"_"+compName);
-                    rd.securityContext = ch.securityContext;
+                    rd.setSecurityContext(ch.securityContext);
                     tad.addComponent(rd, xpos, ypos+yShift, false,true);
 
                     fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
@@ -1509,7 +1517,7 @@ public class GTURTLEModeling {
                     }
                     TMLADReadChannel rd = new TMLADReadChannel(xc, 300, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
                     rd.setChannelName("data_"+chan+"_"+hsmChannels.get(chan).task);
-                    rd.securityContext = ch.securityContext;
+                    rd.setSecurityContext(ch.securityContext);
                     tad.addComponent(rd, xc,300,false,true);
                     //Connect choice and readchannel
                     fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
@@ -1520,7 +1528,7 @@ public class GTURTLEModeling {
                     TMLADWriteChannel wr = new TMLADWriteChannel(xc, 600, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
                     wr.setChannelName("retData_"+chan+"_"+hsmChannels.get(chan).task);
                     tad.addComponent(wr, xc, 600,false,true);
-                    wr.securityContext = ch.securityContext;
+                    wr.setSecurityContext(ch.securityContext);
 
 
                     if (hsmChannels.get(chan).secType==HSMChannel.DEC){
@@ -1590,7 +1598,7 @@ public class GTURTLEModeling {
                     HSMChannel ch = hsmChannels.get(chan);
                     TMLADReadChannel rd = new TMLADReadChannel(xc, 300, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
                     rd.setChannelName("data_"+chan+"_"+hsmChannels.get(chan).task);
-                    rd.securityContext = ch.securityContext;
+                    rd.setSecurityContext(ch.securityContext);
                     tad.addComponent(rd, xc,300,false,true);
                     //Connect choice and readchannel
 
@@ -1603,7 +1611,7 @@ public class GTURTLEModeling {
                     TMLADWriteChannel wr = new TMLADWriteChannel(xc, 600, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
                     wr.setChannelName("retData_"+chan+"_"+hsmChannels.get(chan).task);
                     tad.addComponent(wr, xc, 600,false,true);
-                    wr.securityContext = ch.securityContext;
+                    wr.setSecurityContext(ch.securityContext);
 
 
                     if (hsmChannels.get(chan).secType==HSMChannel.DEC){
@@ -1739,7 +1747,7 @@ public class GTURTLEModeling {
                 for (TGComponent tg: tad.getComponentList()){
                     if (tg instanceof TMLADReadChannel){
                         TMLADReadChannel readChannel = (TMLADReadChannel) tg;
-                        if (readChannel.getChannelName().equals(chan) && readChannel.securityContext.equals("")){
+                        if (readChannel.getChannelName().equals(chan) && readChannel.getSecurityContext().equals("")){
                             fromStart = tad.findTGConnectorStartingAt(tg.getTGConnectingPointAtIndex(1));
                             if (fromStart!=null){
                                 channelInstances.add(tg);
@@ -1749,7 +1757,7 @@ public class GTURTLEModeling {
                 }
                 for (TGComponent chI: channelInstances){
                     TMLADReadChannel readChannel = (TMLADReadChannel) chI;
-                    readChannel.securityContext=ch.securityContext;
+                    readChannel.setSecurityContext(ch.securityContext);
                     xpos = chI.getX();
                     ypos = chI.getY()+10;
                     fromStart = tad.findTGConnectorStartingAt(chI.getTGConnectingPointAtIndex(1));
@@ -1794,7 +1802,7 @@ public class GTURTLEModeling {
                 for (TGComponent tg: tad.getComponentList()){
                     if (tg instanceof TMLADWriteChannel){
                         TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg;
-                        if (writeChannel.getChannelName().equals(chan) && writeChannel.securityContext.equals("")){
+                        if (writeChannel.getChannelName().equals(chan) && writeChannel.getSecurityContext().equals("")){
                             fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
                             if (fromStart!=null){
                                 channelInstances.add(tg);
@@ -1804,7 +1812,7 @@ public class GTURTLEModeling {
                 }
                 for (TGComponent chI: channelInstances){
                     TMLADWriteChannel writeChannel = (TMLADWriteChannel) chI;
-                    writeChannel.securityContext=ch.securityContext;
+                    writeChannel.setSecurityContext(ch.securityContext);
                     xpos = chI.getX();
                     ypos = chI.getY()-10;
                     fromStart = tad.findTGConnectorEndingAt(chI.getTGConnectingPointAtIndex(0));
@@ -1927,13 +1935,16 @@ public class GTURTLEModeling {
 
     }
 
+
+
     public TMLMapping<TGComponent> autoSecure(MainGUI gui, boolean autoConf, boolean autoWeakAuth, boolean autoStrongAuth){
         //TODO add more options
         //
         if (tmap==null){
             return null;
         }
-        int arch = gui.tabs.indexOf(tmap.tmlap);
+		TURTLEPanel tmlap = tmap.getCorrespondanceList().getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel().tp;
+        int arch = gui.tabs.indexOf(tmlap);
         gui.cloneRenameTab(arch,"enc");
         TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1);
         
@@ -1952,7 +1963,8 @@ public class GTURTLEModeling {
         if (tmap==null){
             return null;
         }
-        int arch = gui.tabs.indexOf(tmap.tmlap);
+		TURTLEPanel tmlap = tmap.getCorrespondanceList().getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel().tp;
+        int arch = gui.tabs.indexOf(tmlap);
         gui.cloneRenameTab(arch,"enc");
         TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1);
         return autoSecure(gui,"enc", tmap,newarch,encComp, overhead,decComp,true,false,false);
@@ -1962,7 +1974,8 @@ public class GTURTLEModeling {
         if (tmap==null){
             return null;
         }
-        int arch = gui.tabs.indexOf(tmap.tmlap);
+		TURTLEPanel tmlap = tmap.getCorrespondanceList().getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel().tp;
+        int arch = gui.tabs.indexOf(tmlap);
         gui.cloneRenameTab(arch,"enc");
         TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1);
         return autoSecure(gui,"enc", tmap,newarch,encComp, overhead,decComp,autoConf,autoWeakAuth, autoStrongAuth);
@@ -2056,8 +2069,9 @@ public class GTURTLEModeling {
         }
 
         //Create clone of Component Diagram + Activity diagrams to secure
-
-        TMLComponentDesignPanel tmlcdp = map.getTMLCDesignPanel();
+		TGComponent tgcomp= map.getTMLModeling().getTGComponent();
+		TMLComponentDesignPanel tmlcdp= (TMLComponentDesignPanel) tgcomp.getTDiagramPanel().tp;
+//        TMLComponentDesignPanel tmlcdp = map.getTMLCDesignPanel();
         int ind = gui.tabs.indexOf(tmlcdp);
         if (ind==-1){
             TraceManager.addDev("No Component Design Panel");
@@ -2066,7 +2080,7 @@ public class GTURTLEModeling {
         String tabName = gui.getTitleAt(tmlcdp);
         gui.cloneRenameTab(ind, name);
         TMLComponentDesignPanel t = (TMLComponentDesignPanel) gui.tabs.get(gui.tabs.size()-1);
-        map.setTMLDesignPanel(t);
+
         TMLComponentTaskDiagramPanel tcdp = t.tmlctdp;
         //Create clone of architecture panel and map tasks to it
         newarch.renameMapping(tabName, tabName+"_"+name);
@@ -2100,7 +2114,7 @@ public class GTURTLEModeling {
             for (TGComponent tg:tad.getComponentList()){
                 if (tg instanceof TMLADWriteChannel){
                     TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg;
-                    if (writeChannel.securityContext.equals("")){
+                    if (writeChannel.getSecurityContext().equals("")){
 
                         TMLChannel chan = tmlmodel.getChannelByName(tabName+"__"+writeChannel.getChannelName());
                         //System.out.println("channel " + chan);
@@ -2209,7 +2223,7 @@ public class GTURTLEModeling {
                 for (TGComponent tg: tad.getComponentList()){
                     if (tg instanceof TMLADWriteChannel){
                         TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg;
-                        if (writeChannel.getChannelName().equals(channel) && writeChannel.securityContext.equals("")){
+                        if (writeChannel.getChannelName().equals(channel) && writeChannel.getSecurityContext().equals("")){
 
                             if (fromStart!=null){
                                 channelInstances.add(tg);
@@ -2237,7 +2251,7 @@ public class GTURTLEModeling {
                         else {
                             rd.setChannelName("nonceCh"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]);
                         }
-                        rd.securityContext = "nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
+                        rd.setSecurityContext("nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]);
                         tad.addComponent(rd, xpos, ypos+yShift, false,true);
                         fromStart.setP2(rd.getTGConnectingPointAtIndex(0));
                         fromStart=new TGConnectorTMLAD(enc.getX(), enc.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
@@ -2271,9 +2285,9 @@ public class GTURTLEModeling {
                         if (tg instanceof TMLADWriteChannel){
                             TMLADWriteChannel wChannel = (TMLADWriteChannel) tg;
                             TraceManager.addDev("Inspecting write channel " + wChannel.getChannelName());
-                            if (channel.equals(wChannel.getChannelName()) && wChannel.securityContext.equals("")){
+                            if (channel.equals(wChannel.getChannelName()) && wChannel.getSecurityContext().equals("")){
                                 TraceManager.addDev("Securing write channel " + wChannel.getChannelName());
-                                wChannel.securityContext = "autoEncrypt_"+wChannel.getChannelName();
+                                wChannel.setSecurityContext("autoEncrypt_"+wChannel.getChannelName());
 
                             }
                         }
@@ -2295,7 +2309,7 @@ public class GTURTLEModeling {
                 for (TGComponent tg: tad.getComponentList()){
                     if (tg instanceof TMLADWriteChannel){
                         TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg;
-                        if (writeChannel.getChannelName().equals(channel) && writeChannel.securityContext.equals("")){
+                        if (writeChannel.getChannelName().equals(channel) && writeChannel.getSecurityContext().equals("")){
                             xpos = tg.getX();
                             ypos = tg.getY();
                             fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
@@ -2327,7 +2341,7 @@ public class GTURTLEModeling {
                         else {
                             rd.setChannelName("nonceCh"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]);
                         }
-                        rd.securityContext = "nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
+                        rd.setSecurityContext("nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]);
                         tad.addComponent(rd, xpos, ypos+yShift, false,true);
                         fromStart.setP2(rd.getTGConnectingPointAtIndex(0));
                         fromStart=new TGConnectorTMLAD(enc.getX(), enc.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
@@ -2364,9 +2378,9 @@ public class GTURTLEModeling {
                         if (tg instanceof TMLADWriteChannel){
                             TMLADWriteChannel wChannel = (TMLADWriteChannel) tg;
                             TraceManager.addDev("Inspecting write channel " + wChannel.getChannelName());
-                            if (channel.equals(wChannel.getChannelName()) && wChannel.securityContext.equals("")){
+                            if (channel.equals(wChannel.getChannelName()) && wChannel.getSecurityContext().equals("")){
                                 TraceManager.addDev("Securing write channel " + wChannel.getChannelName());
-                                wChannel.securityContext = "autoEncrypt_"+wChannel.getChannelName();
+                                wChannel.setSecurityContext("autoEncrypt_"+wChannel.getChannelName());
                                 tad.repaint();
                             }
                         }
@@ -2388,7 +2402,7 @@ public class GTURTLEModeling {
                 for (TGComponent tg: tad.getComponentList()){
                     if (tg instanceof TMLADReadChannel){
                         TMLADReadChannel readChannel = (TMLADReadChannel) tg;
-                        if (readChannel.getChannelName().equals(channel) && readChannel.securityContext.equals("")){
+                        if (readChannel.getChannelName().equals(channel) && readChannel.getSecurityContext().equals("")){
                             fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
                             if (fromStart!=null){
                                 channelInstances.add(tg);
@@ -2410,7 +2424,7 @@ public class GTURTLEModeling {
 
                     TMLADReadChannel readChannel = (TMLADReadChannel) comp;
                     TraceManager.addDev("Securing read channel " + readChannel.getChannelName());
-                    readChannel.securityContext = "autoEncrypt_"+readChannel.getChannelName();
+                    readChannel.setSecurityContext("autoEncrypt_"+readChannel.getChannelName());
                     tad.repaint();
 
                     TMLADWriteChannel wr = new TMLADWriteChannel(0, 0, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
@@ -2439,7 +2453,7 @@ public class GTURTLEModeling {
                             wr.setChannelName("nonceCh"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]);
                         }
                         //send the nonce along the channel
-                        wr.securityContext = "nonce_"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
+                        wr.setSecurityContext("nonce_"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]);
                         tad.addComponent(wr,xpos,ypos+yShift,false,true);
                         wr.makeValue();
                         TGConnector tmp =new TGConnectorTMLAD(wr.getX(), wr.getY()+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null,tad,nonce.getTGConnectingPointAtIndex(1), wr.getTGConnectingPointAtIndex(0), new Vector<Point>());
@@ -2475,9 +2489,9 @@ public class GTURTLEModeling {
                         if (tg instanceof TMLADReadChannel){
                             readChannel = (TMLADReadChannel) tg;
                             TraceManager.addDev("Inspecting read channel " + readChannel.getChannelName());
-                            if (channel.equals(readChannel.getChannelName()) && readChannel.securityContext.equals("")){
+                            if (channel.equals(readChannel.getChannelName()) && readChannel.getSecurityContext().equals("")){
                                 TraceManager.addDev("Securing read channel " + readChannel.getChannelName());
-                                readChannel.securityContext = "autoEncrypt_"+readChannel.getChannelName();
+                                readChannel.setSecurityContext("autoEncrypt_"+readChannel.getChannelName());
 
                             }
                         }
@@ -2505,7 +2519,7 @@ public class GTURTLEModeling {
                 for (TGComponent tg: tad.getComponentList()){
                     if (tg instanceof TMLADReadChannel){
                         readChannel = (TMLADReadChannel) tg;
-                        if (readChannel.getChannelName().equals(channel) && readChannel.securityContext.equals("")){
+                        if (readChannel.getChannelName().equals(channel) && readChannel.getSecurityContext().equals("")){
                             fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
                             if (fromStart!=null){
                                 channelInstances.add(tg);
@@ -2546,7 +2560,7 @@ public class GTURTLEModeling {
                             wr.setChannelName("nonceCh"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]);
                         }
                         //send the nonce along the channel
-                        wr.securityContext = "nonce_"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
+                        wr.setSecurityContext("nonce_"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]);
                         tad.addComponent(wr,xpos,ypos+yShift,false,true);
                         wr.makeValue();
                         TGConnector tmp =new TGConnectorTMLAD(wr.getX(), wr.getY()+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null,tad,nonce.getTGConnectingPointAtIndex(1), wr.getTGConnectingPointAtIndex(0), new Vector<Point>());
@@ -2568,7 +2582,7 @@ public class GTURTLEModeling {
                     //Now add the decrypt operator
                     yShift=40;
                     TraceManager.addDev("Securing read channel " + readChannel.getChannelName());
-                    readChannel.securityContext = "autoEncrypt_"+readChannel.getChannelName();
+                    readChannel.setSecurityContext("autoEncrypt_"+readChannel.getChannelName());
                     tad.repaint();
                     //Add decryption operator if it does not already exist
                     xpos = readChannel.getX();
@@ -2588,9 +2602,9 @@ public class GTURTLEModeling {
                         if (tg instanceof TMLADReadChannel){
                             readChannel = (TMLADReadChannel) tg;
                             TraceManager.addDev("Inspecting read channel " + readChannel.getChannelName());
-                            if (channel.equals(readChannel.getChannelName()) && readChannel.securityContext.equals("")){
+                            if (channel.equals(readChannel.getChannelName()) && readChannel.getSecurityContext().equals("")){
                                 TraceManager.addDev("Securing read channel " + readChannel.getChannelName());
-                                readChannel.securityContext = "autoEncrypt_"+readChannel.getChannelName();
+                                readChannel.setSecurityContext("autoEncrypt_"+readChannel.getChannelName());
 
                             }
                         }
@@ -2627,6 +2641,8 @@ public class GTURTLEModeling {
         map.setTMLModeling(newmodel);
         return map;
     }
+
+
     public boolean securePath(TMLMapping<TGComponent> map, TMLTask t1, TMLTask t2){
         //Check if a path between two tasks is secure
         boolean secure=true;
@@ -2772,7 +2788,7 @@ public class GTURTLEModeling {
                         else {
                             System.out.println("Can't map key to memory for " + sp.name + " on task " + t.getName());
                             UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Cannot map key in memory for " + sp.name + " on task " + t.getName());
-                            ce.setTDiagramPanel(tmap.tmlap.tmlap);
+                            ce.setTDiagramPanel(tmap.getCorrespondanceList().getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel());
                             ce.setTGComponent(null);
                             checkingErrors.add(ce);
                         }
@@ -2813,7 +2829,7 @@ public class GTURTLEModeling {
         else if (tmlm!=null){
             //Generate default mapping
             tmap = tmlm.getDefaultMapping();
-            tmap.setTMLDesignPanel((TMLComponentDesignPanel)mgui.getCurrentTURTLEPanel());
+          
             t2a=new TML2Avatar(tmap,false,true);
             avatarspec = t2a.generateAvatarSpec(loopLimit);
         }
diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java
index 54cb74a400525e6cd35b5a394a1f26ef4d9aa95c..fe7f83a8485c0dc0d8bb649348d563edf8db4094 100644
--- a/src/main/java/ui/MainGUI.java
+++ b/src/main/java/ui/MainGUI.java
@@ -3601,9 +3601,29 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
         if (!(tp instanceof TMLComponentDesignPanel)) { return null;}
         TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp;
         String name =  getCurrentTDiagramPanel().getName();
+		System.out.println("Name " + name);
         return tmlcomp.getAllOutChannels(name);
     }
 
+
+    public String[] getAllCompOutChannels() {   //this routine can be called only from a TMLComponentDesignPanel
+		List<String> chans = new ArrayList<String>();
+        TURTLEPanel tp = getCurrentTURTLEPanel();
+        if (tp == null) { return null;}
+        if (!(tp instanceof TMLComponentDesignPanel)) { return null;}
+        TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp;
+		return tmlcomp.getCompOutChannels();
+    }
+
+    public String[] getAllCompInChannels() {   //this routine can be called only from a TMLComponentDesignPanel
+        TURTLEPanel tp = getCurrentTURTLEPanel();
+        if (tp == null) { return null;}
+        if (!(tp instanceof TMLComponentDesignPanel)) { return null;}
+        TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp;
+		return tmlcomp.getCompInChannels();		
+    }
+
+
     public String[] getAllInChannels() {    //this routine can be called only from a TMLComponentDesignPanel
         TURTLEPanel tp = getCurrentTURTLEPanel();
         if (tp == null) {return null;}
diff --git a/src/main/java/ui/TDiagramPanel.java b/src/main/java/ui/TDiagramPanel.java
index e3bae696c2d6f08d4f91c3d3f571ea18bdd4f82c..6243f0997d1d861c684930dec30c32831dd7f4d3 100755
--- a/src/main/java/ui/TDiagramPanel.java
+++ b/src/main/java/ui/TDiagramPanel.java
@@ -2147,6 +2147,7 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree {
                     actionOnRemove(t);
                     tgcon.getTGConnectingPointP1().setFree(true);
                     tgcon.getTGConnectingPointP2().setFree(true);
+					System.out.println("removing...");
                     TraceManager.addDev("Removed one connector!");
                     for(int k=0; k<tgcon.getNbConnectingPoint(); k++)
                         removeOneConnector(tgcon.tgconnectingPointAtIndex(k));
diff --git a/src/main/java/ui/TMLComponentDesignPanel.java b/src/main/java/ui/TMLComponentDesignPanel.java
index dc16ff5937c9c3d17f1775dc95049d5a9d01cb44..28b63c05cdd61ce955eb91a0c32c8e3bd7763c9a 100755
--- a/src/main/java/ui/TMLComponentDesignPanel.java
+++ b/src/main/java/ui/TMLComponentDesignPanel.java
@@ -94,6 +94,8 @@ public class TMLComponentDesignPanel extends TURTLEPanel {
         tabbedPane.setTabLayoutPolicy( JTabbedPane.SCROLL_TAB_LAYOUT );
     }
 
+	
+
     public TMLActivityDiagramPanel getTMLActivityDiagramPanel(String _name) {
         TMLActivityDiagramPanel tmladp;
         for(int i=1; i<panels.size(); i++) {
@@ -193,6 +195,14 @@ public class TMLComponentDesignPanel extends TURTLEPanel {
         return tmlctdp.getPrimitiveComponentByName(_name);
     }
 
+	public String[] getCompOutChannels(){
+		return tmlctdp.getCompOutChannels();
+	}
+
+	public String[] getCompInChannels(){
+		return tmlctdp.getCompInChannels();
+	}
+
     public java.util.List<String> getAllTMLCommunicationNames(String _name) {
         return tmlctdp.getAllTMLCommunicationNames(_name);
     }
diff --git a/src/main/java/ui/tmlad/TMLADReadChannel.java b/src/main/java/ui/tmlad/TMLADReadChannel.java
index 3bedd32867fdcafbfe1b594c9f86659c221ca2c3..c3d37e110701516b909406a98abb031b424931d7 100755
--- a/src/main/java/ui/tmlad/TMLADReadChannel.java
+++ b/src/main/java/ui/tmlad/TMLADReadChannel.java
@@ -79,7 +79,9 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che
 
     protected String channelName = "ch";
     protected String nbOfSamples= "1";
-    public String securityContext ="";
+    protected String securityContext ="";
+	protected boolean isAttacker=false;
+
     protected int stateOfError = 0; // Not yet checked
 
     public final static int NOT_VERIFIED = 0;
@@ -169,8 +171,12 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che
         g.drawLine(x, y+height, x+width, y+height);
         g.drawLine(x, y, x+linebreak, y+height/2);
         g.drawLine(x, y+height, x+linebreak, y+height/2);
-
-        g.drawString("chl", x+(width-w) / 2, y+textY0);
+		if (isAttacker){
+	        g.drawString("attack", x+(width-w) / 2, y+textY0);	
+		}
+		else {
+	        g.drawString("chl", x+(width-w) / 2, y+textY0);
+		}
         g.drawString(value, x + linebreak + textX0, y + textY1);
 	
 	if (!securityContext.equals("")){
@@ -258,25 +264,32 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che
 
     public boolean editOndoubleClick(JFrame frame) {
 
-	String [] labels = new String[3];
-        String [] values = new String[3];
+		String [] labels = new String[4];
+        String [] values = new String[4];
         labels[0] = "Channel name";
         values[0] = channelName;
-	labels[1] = "Nb of samples";
+		labels[1] = "Nb of samples";
         values[1] = nbOfSamples;
         labels[2] = "Security Pattern";
-	values[2] = securityContext;
+		values[2] = securityContext;
+		labels[3] = "Attacker?";
+		values[3] = isAttacker ? "Yes" : "No";
 	
         ArrayList<String []> help = new ArrayList<String []>();
-	String[] allInChannels = tdp.getMGUI().getAllInChannels();
-	help.add(allInChannels);
-	help.add(null);
-	help.add(tdp.getMGUI().getCurrentCryptoConfig());
-
+		String[] allInChannels = tdp.getMGUI().getAllInChannels();
+		System.out.println("isAttacker "+ isAttacker);
+		if (isAttacker){
+			allInChannels = tdp.getMGUI().getAllCompInChannels();
 
+		}
+		help.add(allInChannels);
+		help.add(null);
+		help.add(tdp.getMGUI().getCurrentCryptoConfig());
+		String[] choice = new String[]{"Yes", "No"};
+		help.add(choice);
        // JDialogTwoString jdts = new JDialogTwoString(frame, "Setting channel's properties", "Channel name", channelName, "Nb of samples", nbOfSamples);
 
-	JDialogMultiString jdms = new JDialogMultiString(frame, "Setting channel's properties", 3, labels, values, help);
+	JDialogMultiString jdms = new JDialogMultiString(frame, "Setting channel's properties", 4, labels, values, help);
         //jdms.setSize(600, 300);
         GraphicLib.centerOnParent(jdms, 600, 300);
         jdms.setVisible( true ); // blocked until dialog has been closed
@@ -284,7 +297,8 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che
         if (jdms.hasBeenSet() && (jdms.hasValidString(0))) {
             channelName = jdms.getString(0);
             nbOfSamples = jdms.getString(1);
-	    securityContext = jdms.getString(2);
+		    securityContext = jdms.getString(2);
+			isAttacker=jdms.getString(3).equals("Yes");
             makeValue();
             return true;
         }
@@ -316,6 +330,8 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che
         sb.append(getSamplesValue());
         sb.append("\" secPattern=\"");
         sb.append(securityContext);
+		sb.append("\" isAttacker=\"");
+        sb.append(isAttacker ? "Yes": "No");
         sb.append("\" />\n");
         sb.append("</extraparam>\n");
         return new String(sb);
@@ -347,6 +363,7 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che
                                 channelName = elt.getAttribute("channelName");
                                 nbOfSamples = elt.getAttribute("nbOfSamples");
                                 securityContext = elt.getAttribute("secPattern");
+								isAttacker = elt.getAttribute("isAttacker").equals("Yes");
                             }
                         }
                     }
@@ -360,6 +377,18 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che
     }
 
 
+	public String getSecurityContext(){
+		return securityContext;
+	}
+
+	public void setSecurityContext(String sc){
+		securityContext=sc;
+	}
+
+	public boolean isAttacker(){
+		return isAttacker;
+	}
+
     public int getType() {
         return TGComponentManager.TMLAD_READ_CHANNEL;
     }
diff --git a/src/main/java/ui/tmlad/TMLADWriteChannel.java b/src/main/java/ui/tmlad/TMLADWriteChannel.java
index 6bd275a8387cb2ce7d1244e7bdd48a043c108d18..a15f95ec63e7fb7d3d6a224397d45d65f8684b83 100755
--- a/src/main/java/ui/tmlad/TMLADWriteChannel.java
+++ b/src/main/java/ui/tmlad/TMLADWriteChannel.java
@@ -83,7 +83,9 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch
 
     protected String channelName = "ch";
     protected String nbOfSamples= "1";
-    public String securityContext = "";
+    protected String securityContext = "";
+	protected boolean isAttacker = false; 
+
     protected int stateOfError = 0; // Not yet checked
     
     public final static int NOT_VERIFIED = 0;
@@ -168,8 +170,12 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch
         g.drawLine(x, y, x, y+height);
         g.drawLine(x+width-linebreak, y, x+width, y+height/2);
         g.drawLine(x+width-linebreak, y+height, x+width, y+height/2);
-
-        g.drawString("chl", x+(width-w) / 2, y);
+		if (isAttacker){
+	        g.drawString("attack", x+(width-w) / 2, y);
+		}
+		else {
+	        g.drawString("chl", x+(width-w) / 2, y);
+		}
         g.drawString(value, x + (width - w) / 2 , y + textY);
 	if (!securityContext.equals("")){
 	    g.drawString("sec:"+securityContext, x+3*width/4, y+height+textY);
@@ -271,23 +277,30 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch
     }
 
     public boolean editOndoubleClick(JFrame frame) {
-    	String [] labels = new String[3];
-        String [] values = new String[3];
+    	String [] labels = new String[4];
+        String [] values = new String[4];
         labels[0] = "Channel name";
         values[0] = channelName;
         labels[1] = "Nb of samples";
         values[1] = nbOfSamples;
         labels[2] = "Security Pattern";
         values[2] = securityContext;
-	
+		labels[3] = "Attacker?";
+		values[3] = isAttacker ? "Yes" : "No";
         ArrayList<String []> help = new ArrayList<String []>();
 		String[] allOutChannels = tdp.getMGUI().getAllOutChannels();
+		System.out.println("isAttacker "+ isAttacker);
+		if (isAttacker){
+			allOutChannels =tdp.getMGUI().getAllCompOutChannels();
+		}
+		String[] choice = new String[]{"Yes", "No"};
 		help.add(allOutChannels);
 		help.add(null);
 		help.add(tdp.getMGUI().getCurrentCryptoConfig());
+		help.add(choice);
 
         //JDialogTwoString jdts = new JDialogTwoString(frame, "Setting channel's properties", "Channel name", channelName, "Nb of samples", nbOfSamples);
-		JDialogMultiString jdms = new JDialogMultiString(frame, "Setting channel's properties", 3, labels, values, help);
+		JDialogMultiString jdms = new JDialogMultiString(frame, "Setting channel's properties", 4, labels, values, help);
         //jdms.setSize(600, 300);
         GraphicLib.centerOnParent(jdms, 600, 300);
         jdms.setVisible( true ); // blocked until dialog has been closed
@@ -295,8 +308,8 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch
         if (jdms.hasBeenSet() && (jdms.hasValidString(0))) {
             channelName = jdms.getString(0);
             nbOfSamples = jdms.getString(1);
-	    securityContext = jdms.getString(2);
-
+		    securityContext = jdms.getString(2);
+			isAttacker=jdms.getString(3).equals("Yes");
             makeValue();
             return true;
         }
@@ -313,6 +326,8 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch
         sb.append(getSamplesValue());
         sb.append("\" secPattern=\"");
         sb.append(securityContext);
+		sb.append("\" isAttacker=\"");
+        sb.append(isAttacker ? "Yes": "No");
         sb.append("\" />\n");
         sb.append("</extraparam>\n");
         return new String(sb);
@@ -344,6 +359,7 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch
                                 channelName = elt.getAttribute("channelName");
                                 nbOfSamples = elt.getAttribute("nbOfSamples");
                                 securityContext = elt.getAttribute("secPattern");
+								isAttacker = elt.getAttribute("isAttacker").equals("Yes");
                             }
                         }
                     }
@@ -375,6 +391,20 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch
 	nbOfSamples=sp;
 	makeValue();
     }
+
+	public String getSecurityContext(){
+		return securityContext;
+	}
+
+	public void setSecurityContext(String sc){
+		securityContext=sc;
+	}
+
+
+	public boolean isAttacker(){
+		return isAttacker;
+	}
+
     public void setStateAction(int _stateAction) {
         stateOfError = _stateAction;
     }
diff --git a/src/main/java/ui/tmlcompd/TMLCPrimitiveComponent.java b/src/main/java/ui/tmlcompd/TMLCPrimitiveComponent.java
index 5694e357c1e93fd23cfdae2d0a2920f65eaf8a5c..2ad6c2408ebea30c19867518afe0efbd90d76046 100755
--- a/src/main/java/ui/tmlcompd/TMLCPrimitiveComponent.java
+++ b/src/main/java/ui/tmlcompd/TMLCPrimitiveComponent.java
@@ -201,7 +201,7 @@ public class TMLCPrimitiveComponent extends TGCScalableWithInternalComponent imp
             iconIsDrawn = false;
         }
 		if (isAttacker){
-			g.drawImage(IconManager.imgic8.getImage(), x + width - iconSize - textX, y + 2*textX, null);
+			g.drawImage(IconManager.imgic7008.getImage(), x + width - iconSize - textX, y + 2*textX, null);
 		}
 
         // Attributes
@@ -497,6 +497,9 @@ public class TMLCPrimitiveComponent extends TGCScalableWithInternalComponent imp
         //TraceManager.addDev("Loading extra params of " + value);
         //value = "";
         StringBuffer sb = new StringBuffer("<extraparam>\n");
+			sb.append("<Data isAttacker=\"");
+            sb.append(isAttacker() ? "Yes": "No");
+	        sb.append("\" />\n");
         for(int i=0; i<myAttributes.size(); i++) {
             //TraceManager.addDev("Attribute:" + i);
             a = myAttributes.get (i);
@@ -541,6 +544,9 @@ public class TMLCPrimitiveComponent extends TGCScalableWithInternalComponent imp
                         //TraceManager.addDev(n2);
                         if (n2.getNodeType() == Node.ELEMENT_NODE) {
                             elt = (Element) n2;
+							if (elt.getTagName().equals("Data")) {
+                                isAttacker = elt.getAttribute("isAttacker").equals("Yes");
+							}
                             if (elt.getTagName().equals("Attribute")) {
                                 //TraceManager.addDev("Analyzing attribute");
                                 access = Integer.decode(elt.getAttribute("access")).intValue();
diff --git a/src/main/java/ui/tmlcompd/TMLComponentTaskDiagramPanel.java b/src/main/java/ui/tmlcompd/TMLComponentTaskDiagramPanel.java
index cf009a9a305ef17efeccfca9bf4797c66940c1a1..5e367a054b60a5ccc8ca606e2eb82eca4d4744da 100755
--- a/src/main/java/ui/tmlcompd/TMLComponentTaskDiagramPanel.java
+++ b/src/main/java/ui/tmlcompd/TMLComponentTaskDiagramPanel.java
@@ -145,6 +145,29 @@ public class TMLComponentTaskDiagramPanel extends TDiagramPanel implements TDPWi
         return true;
     }
 
+	public List<TMLCPrimitivePort> getPortsByName(String name){
+		List<TMLCPrimitivePort> ports = new ArrayList<TMLCPrimitivePort>();
+		for (TGComponent tgc : componentList){
+		
+			if (tgc instanceof TMLCPrimitiveComponent){
+				TMLCPrimitiveComponent comp = (TMLCPrimitiveComponent) tgc;
+				List<TMLCPrimitivePort> cps = comp.getAllChannelsOriginPorts();
+				for (TMLCPrimitivePort port : cps){
+					if (port.commName.equals(name)){
+						ports.add(port);
+					}
+				}
+				cps = comp.getAllChannelsDestinationPorts();
+				for (TMLCPrimitivePort port : cps){
+					if (port.commName.equals(name)){
+						ports.add(port);
+					}
+				}
+			}
+		}
+		return ports;
+	}
+
     public boolean actionOnValueChanged(TGComponent tgc) {
         //System.out.println("Action on value changed on component:" + tgc);
         if (tgc instanceof TMLCPrimitiveComponent) {
@@ -445,6 +468,8 @@ public class TMLComponentTaskDiagramPanel extends TDiagramPanel implements TDPWi
         return al;
     }
 
+
+
     public void getAllPortsConnectedTo( List<TGComponent> ll, TMLCPrimitivePort _port) {
         List<TGComponent> components = getMGUI().getAllTMLComponents();
         Iterator<TGComponent> iterator = components.listIterator();
@@ -618,6 +643,55 @@ public class TMLComponentTaskDiagramPanel extends TDiagramPanel implements TDPWi
         }
     }
 
+	public String[] getCompOutChannels(){
+		List<String> chls = new ArrayList<String>();
+		TGComponent tgc;
+        Iterator<TGComponent> iterator = componentList.listIterator();
+        // List<String> list = new ArrayList<String>();
+        TMLCPrimitiveComponent tmp;
+
+        while(iterator.hasNext()) {
+            tgc = iterator.next();
+            if (tgc instanceof TMLCPrimitiveComponent) {
+				TMLCPrimitiveComponent comp = (TMLCPrimitiveComponent) tgc;
+        		List<TMLCPrimitivePort> ll = comp.getAllChannelsOriginPorts();
+				Iterator<TMLCPrimitivePort> ite = ll.listIterator();
+				while(ite.hasNext()) {
+					TMLCPrimitivePort port = ite.next();
+            		chls.add(port.getPortName());
+        		}
+            }
+        }
+		String[] chlArray = new String[chls.size()];
+		chlArray = chls.toArray(chlArray);
+		return chlArray;
+	}
+
+	public String[] getCompInChannels(){
+		List<String> chls = new ArrayList<String>();
+		TGComponent tgc;
+        Iterator<TGComponent> iterator = componentList.listIterator();
+        // List<String> list = new ArrayList<String>();
+        TMLCPrimitiveComponent tmp;
+
+        while(iterator.hasNext()) {
+            tgc = iterator.next();
+            if (tgc instanceof TMLCPrimitiveComponent) {
+				TMLCPrimitiveComponent comp = (TMLCPrimitiveComponent) tgc;
+        		List<TMLCPrimitivePort> ll = comp.getAllChannelsDestinationPorts();
+				Iterator<TMLCPrimitivePort> ite = ll.listIterator();
+				while(ite.hasNext()) {
+					TMLCPrimitivePort port = ite.next();
+            		chls.add(port.getPortName());
+        		}
+            }
+        }
+		String[] chlArray = new String[chls.size()];
+		chlArray = chls.toArray(chlArray);
+		return chlArray;
+	}
+
+
     public TMLCPrimitiveComponent getPrimitiveComponentByName(String _name) {
         TGComponent tgc;
         Iterator<TGComponent> iterator = componentList.listIterator();
diff --git a/src/main/java/ui/util/IconManager.java b/src/main/java/ui/util/IconManager.java
index 1c3f9a88e14c5af8b28ba983572c305a981f98e6..2af58c41e42580c510d0e746ee91215d07711c73 100755
--- a/src/main/java/ui/util/IconManager.java
+++ b/src/main/java/ui/util/IconManager.java
@@ -158,6 +158,8 @@ public class IconManager {
     public static ImageIcon imgic7002, imgic7003, imgic7004, imgic7005, imgic7006;
 	//Show traces
     public static ImageIcon imgic7007;
+	//Attacker Scenarios
+    public static ImageIcon imgic7008;
     // Delegate ports image removed, by Solange
     //public static ImageIcon imgic2102;
 
@@ -605,6 +607,10 @@ public class IconManager {
     private static String icon7006 = "imply.gif";	
 	//Show traces
     private static String icon7007 = "toolbarButtonGraphics/general/showTrace.gif";
+
+	//Attacker Scenarios
+    private static String icon7008 = "attacker.gif";
+
     public IconManager() {
 
 
@@ -1026,6 +1032,7 @@ public class IconManager {
 	imgic7005 = getIcon(icon7005);
 	imgic7006 = getIcon(icon7006);
 	imgic7007 = getIcon(icon7007);
+	imgic7008 = getIcon(icon7008);
     }
 
 } // Class