diff --git a/modeling/SmartCardProtocol.xml b/modeling/SmartCardProtocol.xml
index b37f3c480a40f8836a0ccbf7472c0ccddb29635d..b4f05650449f69637bb9d7f7ab1e62ebfdce1a90 100755
--- a/modeling/SmartCardProtocol.xml
+++ b/modeling/SmartCardProtocol.xml
@@ -6,7 +6,7 @@
 <AvatarRDPanel name="AVATAR RD" minX="10" maxX="1400" minY="10" maxY="900" zoom="1.0" >
 <COMPONENT type="301" id="17" >
 <cdparam x="627" y="331" />
-<sizeparam width="428" height="87" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<sizeparam width="366" height="87" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
 <hidden value="false" />
 <cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" />
 <infoparam name="UML Note" value="Modeling assumptions
diff --git a/src/tmltranslator/TMLActivityElement.java b/src/tmltranslator/TMLActivityElement.java
index ae0717014a0a40f05453007ea458b5c7abc726a6..429380cc809e8d197afc057273afdcd508485f0e 100755
--- a/src/tmltranslator/TMLActivityElement.java
+++ b/src/tmltranslator/TMLActivityElement.java
@@ -50,7 +50,7 @@ import java.util.*;
 
 public class TMLActivityElement extends TMLElement{
     protected Vector<TMLActivityElement> nexts;
-
+    public String securityContext="";
     public TMLActivityElement(String _name, Object _referenceObject) {
         super(_name, _referenceObject);
         nexts = new Vector();
diff --git a/src/tmltranslator/TMLChannel.java b/src/tmltranslator/TMLChannel.java
index c15367b2d0d9a650e4b8333b3ae484c80087a8c1..bd74708c9e031bf20cace5e0195d6ca544f1add5 100755
--- a/src/tmltranslator/TMLChannel.java
+++ b/src/tmltranslator/TMLChannel.java
@@ -57,6 +57,7 @@ public class TMLChannel extends TMLCommunicationElement {
     public static final int NBRNBW = 2;
     public int confStatus;
     public boolean checkConf;
+    public boolean checkAuth;
     private int size;
     private int type;
     private int max;
diff --git a/src/tmltranslator/TMLEvent.java b/src/tmltranslator/TMLEvent.java
index 6df4a0e0fd0973b7c99f0b2824631ca471fdcc0c..fba4de5b74de82c4b47a048e5937abdd91389de7 100755
--- a/src/tmltranslator/TMLEvent.java
+++ b/src/tmltranslator/TMLEvent.java
@@ -55,6 +55,7 @@ public class TMLEvent extends TMLCommunicationElement {
     protected boolean canBeNotified = false;
     protected TMLTask origin, destination;
     public int confStatus;
+    public boolean checkAuth;
     public boolean checkConf;
     public TMLCPrimitivePort port;
     public TMLCPrimitivePort port2;
diff --git a/src/tmltranslator/TMLModeling.java b/src/tmltranslator/TMLModeling.java
index fc979e811ebeaa7ac8e7446a9bc56c6b25bea438..ea27efa40f70183cbbfa94c209f2eec62691032c 100755
--- a/src/tmltranslator/TMLModeling.java
+++ b/src/tmltranslator/TMLModeling.java
@@ -61,7 +61,7 @@ public class TMLModeling {
     private ArrayList<TMLRequest> requests;
     private ArrayList<TMLEvent> events;
     private ArrayList<String[]> pragmas;
-
+    public ArrayList<SecurityPattern> securityPatterns;
     private TMLElement correspondance[];
 
     private boolean optimized = false;
@@ -608,7 +608,7 @@ public class TMLModeling {
 	    if (channel!=null){
 		for (TMLCPrimitivePort port:channel.ports){
 		    if (port.checkConf){
-		    	port.checkStatus = 2;
+		    	port.checkConfStatus = 2;
 	 	    	port.mappingName= mappingName;
 		    }
 		}
@@ -617,7 +617,7 @@ public class TMLModeling {
 	    if (req !=null){
 		for (TMLCPrimitivePort port: req.ports){
 		    if (port.checkConf){
-		    	port.checkStatus = 2;
+		    	port.checkConfStatus = 2;
 
 	 	    	port.mappingName= mappingName;
 		    }
@@ -626,11 +626,11 @@ public class TMLModeling {
 	    TMLEvent ev = getEventByName(attr.getName().replaceAll("__eventData",""));
 	    if (ev !=null){
 		if (ev.port.checkConf){
-		    ev.port.checkStatus=2;
+		    ev.port.checkConfStatus=2;
 		    ev.port.mappingName= mappingName;
 		}
 		if (ev.port2.checkConf){
-		    ev.port2.checkStatus=2;
+		    ev.port2.checkConfStatus=2;
 		    ev.port2.mappingName=mappingName;
 		}
 	    }
@@ -658,7 +658,7 @@ public class TMLModeling {
 	    if (channel!=null){
 		for (TMLCPrimitivePort port:channel.ports){
 		    if (port.checkConf){
-		    	port.checkStatus = 3;
+		    	port.checkConfStatus = 3;
 	 	    	port.mappingName= mappingName;
 		    }
 		}
@@ -667,7 +667,7 @@ public class TMLModeling {
 	    if (req !=null){
 		for (TMLCPrimitivePort port: req.ports){
 		    if (port.checkConf){
-		    	port.checkStatus = 3;
+		    	port.checkConfStatus = 3;
 	 	    	port.mappingName= mappingName;
 		    }
 		}
@@ -675,10 +675,11 @@ public class TMLModeling {
 	    TMLEvent ev = getEventByName(attr.getName().replaceAll("__eventData",""));
 	    if (ev !=null){
 		if (ev.port.checkConf){
-		    ev.port.checkStatus=3;
+		    ev.port.checkConfStatus=3;
+		    ev.port.mappingName= mappingName;
 		}
 		if (ev.port2.checkConf){
-		    ev.port2.checkStatus=3;
+		    ev.port2.checkConfStatus=3;
 		    ev.port2.mappingName= mappingName;
 		}
 	    }
@@ -698,37 +699,200 @@ public class TMLModeling {
 		}
 	    }
 	}
-
-	System.out.println("backtracing finished");
 	return;
     }
+    public void backtraceAuthenticity(LinkedList<String> satisfiedAuthenticity, LinkedList<String> satisfiedWeakAuthenticity,LinkedList<String> nonSatisfiedAuthenticity, String mappingName){
+	for (String s: satisfiedAuthenticity){
+	    String signalName = s.split("__chData")[0];
+	    for (TMLTask t: getTasks()){
+		if (signalName.contains(t.getName())){
+		    signalName = signalName.replace(t.getName()+"__","");
+		}
+	    }
+	    TMLChannel channel = getChannelByName(signalName);
+	    if (channel!=null){
+		for (TMLCPrimitivePort port:channel.ports){
+		    if (port.checkAuth){
+		    	port.checkStrongAuthStatus = 2;
+	 	    	port.mappingName= mappingName;
+		    }
+		}
+	    }
+	    signalName = s.split("__reqData")[0];
+	    for (TMLTask t: getTasks()){
+		if (signalName.contains(t.getName())){
+		    signalName = signalName.replace(t.getName()+"__","");
+		}
+	    }
+	    TMLRequest req = getRequestByName(signalName);
+	    if (req !=null){
+		for (TMLCPrimitivePort port: req.ports){
+		    if (port.checkAuth){
+		    	port.checkStrongAuthStatus = 2;
+	 	    	port.mappingName= mappingName;
+		    }
+		}
+	    }
+	    signalName = s.split("__eventData")[0];
+	    for (TMLTask t: getTasks()){
+		if (signalName.contains(t.getName())){
+		    signalName = signalName.replace(t.getName()+"__","");
+		}
+	    }
+	    TMLEvent ev = getEventByName(signalName);
+	    if (ev !=null){
+		if (ev.port.checkAuth){
+		    ev.port.checkStrongAuthStatus=2;
+		    ev.port2.mappingName= mappingName;
+		}
+		if (ev.port2.checkAuth){
+		    ev.port2.checkStrongAuthStatus=2;
+		    ev.port2.mappingName= mappingName;
+		}
+	    }
+	}
+	for (String s: satisfiedWeakAuthenticity){
+	    String signalName = s.split("__chData")[0];
+	    for (TMLTask t: getTasks()){
+		if (signalName.contains(t.getName())){
+		    signalName = signalName.replace(t.getName()+"__","");
+		}
+	    }
+	    TMLChannel channel = getChannelByName(signalName);
+	    if (channel!=null){
+		for (TMLCPrimitivePort port:channel.ports){
+		    if (port.checkAuth){
+		    	port.checkWeakAuthStatus = 2;
+	 	    	port.mappingName= mappingName;
+		    }
+		}
+	    }
+	    signalName = s.split("__reqData")[0];
+	    for (TMLTask t: getTasks()){
+		if (signalName.contains(t.getName())){
+		    signalName = signalName.replace(t.getName()+"__","");
+		}
+	    }
+	    TMLRequest req = getRequestByName(signalName);
+	    if (req !=null){
+		for (TMLCPrimitivePort port: req.ports){
+		    if (port.checkAuth){
+		    	port.checkWeakAuthStatus = 2;
+	 	    	port.mappingName= mappingName;
+		    }
+		}
+	    }
+	    signalName = s.split("__eventData")[0];
+	    for (TMLTask t: getTasks()){
+		if (signalName.contains(t.getName())){
+		    signalName = signalName.replace(t.getName()+"__","");
+		}
+	    }
+	    TMLEvent ev = getEventByName(signalName);
+	    if (ev !=null){
+		if (ev.port.checkAuth){
+		    ev.port.checkWeakAuthStatus=2;
+		    ev.port2.mappingName= mappingName;
+		}
+		if (ev.port2.checkAuth){
+		    ev.port2.checkWeakAuthStatus=2;
+		    ev.port2.mappingName= mappingName;
+		}
+	    }
+	}
+	for (String s: nonSatisfiedAuthenticity){
+	    String signalName = s.split("__chData")[0];
+	    for (TMLTask t: getTasks()){
+		if (signalName.contains(t.getName())){
+		    signalName = signalName.replace(t.getName()+"__","");
+		}
+	    }
+	    TMLChannel channel = getChannelByName(signalName);
+	    if (channel!=null){
+		for (TMLCPrimitivePort port:channel.ports){
+		    if (port.checkAuth){
+		    	port.checkStrongAuthStatus = 3;
+	 	    	port.mappingName= mappingName;
+		    }
+		}
+	    }
+	    signalName = s.split("__reqData")[0];
+	    for (TMLTask t: getTasks()){
+		if (signalName.contains(t.getName())){
+		    signalName = signalName.replace(t.getName()+"__","");
+		}
+	    }
+	    TMLRequest req = getRequestByName(signalName);
+	    if (req !=null){
+		for (TMLCPrimitivePort port: req.ports){
+		    if (port.checkAuth){
+		    	port.checkStrongAuthStatus = 3;
+	 	    	port.mappingName= mappingName;
+		    }
+		}
+	    }
+	    signalName = s.split("__eventData")[0];
+	    for (TMLTask t: getTasks()){
+		if (signalName.contains(t.getName())){
+		    signalName = signalName.replace(t.getName()+"__","");
+		}
+	    }
+	    TMLEvent ev = getEventByName(signalName);
+	    if (ev !=null){
+		if (ev.port.checkAuth){
+		    ev.port.checkStrongAuthStatus=3;
+		    ev.port2.mappingName= mappingName;
+		}
+		if (ev.port2.checkAuth){
+		    ev.port2.checkStrongAuthStatus=3;
+		    ev.port2.mappingName= mappingName;
+		}
+	    }
+	}
+    }
     public void clearBacktracing(){
 	for (TMLChannel channel: getChannels()){
 	    for (TMLCPrimitivePort port:channel.ports){
-		if (port.checkStatus>1){
-		    port.checkStatus=1;
+		if (port.checkConfStatus>1){
+		    port.checkConfStatus=1;
 		    port.mappingName="???";
 		}
+		if (port.checkStrongAuthStatus>1 || port.checkWeakAuthStatus>1){
+		    port.checkStrongAuthStatus = 1;
+		    port.checkWeakAuthStatus=1;
+		}
 	    }
 	}
 	for (TMLRequest req: getRequests()){
 	    for (TMLCPrimitivePort port:req.ports){
-		if (port.checkStatus>1){
-		    port.checkStatus=1;
+		if (port.checkConfStatus>1){
+		    port.checkConfStatus=1;
 		    port.mappingName="???";
 		}
+		if (port.checkStrongAuthStatus>1 || port.checkWeakAuthStatus>1){
+		    port.checkStrongAuthStatus = 1;
+		    port.checkWeakAuthStatus=1;
+		}
 	    }
 	}
 	for (TMLEvent evt: getEvents()){
 	    if (evt.port!=null && evt.port2!=null){
-	        if (evt.port.checkStatus>1){
-		    evt.port.checkStatus=1;
+	        if (evt.port.checkConfStatus>1){
+		    evt.port.checkConfStatus=1;
 		    evt.port.mappingName="???";
 	        }
-	        if (evt.port2.checkStatus>1){
-		    evt.port2.checkStatus=1;
+		if (evt.port.checkStrongAuthStatus>1 || evt.port.checkWeakAuthStatus>1){
+		    evt.port.checkStrongAuthStatus=1;
+		    evt.port.checkWeakAuthStatus=1;
+		}
+	        if (evt.port2.checkConfStatus>1){
+		    evt.port2.checkConfStatus=1;
 		    evt.port2.mappingName="???";
 	        }
+		if (evt.port2.checkStrongAuthStatus>1 || evt.port2.checkWeakAuthStatus>1){
+		    evt.port2.checkStrongAuthStatus=1;
+		    evt.port2.checkWeakAuthStatus=1;
+		}
 	    }
 	}
 	return;
diff --git a/src/tmltranslator/TMLRequest.java b/src/tmltranslator/TMLRequest.java
index 9b0cc46dc7b0c3446782954147b8de769bc14aa2..8638add88698646adf5ca96b3f0f1de5ff82137f 100755
--- a/src/tmltranslator/TMLRequest.java
+++ b/src/tmltranslator/TMLRequest.java
@@ -55,6 +55,7 @@ public class TMLRequest extends TMLCommunicationElement {
     protected ArrayList<String> paramNames;
     public int confStatus;
     public boolean checkConf;
+    public boolean checkAuth;
     public ArrayList<TMLCPrimitivePort> ports;
     public TMLRequest(String name, Object reference) {
         super(name, reference);
diff --git a/src/tmltranslator/toavatar/TML2Avatar.java b/src/tmltranslator/toavatar/TML2Avatar.java
index d9b968264c5531d17a14dadc52925318443597ab..5edb3aa8311b561e83fa3d3a8ede6e43cf063ff4 100644
--- a/src/tmltranslator/toavatar/TML2Avatar.java
+++ b/src/tmltranslator/toavatar/TML2Avatar.java
@@ -77,6 +77,10 @@ public class TML2Avatar {
     public HashMap<String, Integer> originDestMap = new HashMap<String, Integer>();
     HashMap<String, AvatarSignal> signalMap = new HashMap<String, AvatarSignal>();
     public HashMap<String, Object> stateObjectMap = new HashMap<String, Object>();
+
+    HashMap<String, AvatarAttributeState> signalAuthOriginMap = new HashMap<String, AvatarAttributeState>();
+    HashMap<String, AvatarAttributeState> signalAuthDestMap = new HashMap<String, AvatarAttributeState>();
+
     List<AvatarSignal> signals = new ArrayList<AvatarSignal>();
     private final static Integer channelPublic = 0;
     private final static Integer channelPrivate = 1;
@@ -380,6 +384,7 @@ public class TML2Avatar {
 	            avspec.addPragma(new AvatarPragmaSecret("#Confidentiality "+block.getName() + "."+req.getName()+"__reqData", req.getReferenceObject(), attrs));
 		}
 	    }
+
 	    AvatarActionOnSignal as= new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject());
 	    for (int i=0; i<sr.getNbOfParams(); i++){
 		if (block.getAvatarAttributeWithName(sr.getParam(i))==null){
@@ -397,6 +402,10 @@ public class TML2Avatar {
 	    if (block.getAvatarAttributeWithName(req.getName()+"__reqData")==null){
 	    	block.addAttribute(requestData);	
 	    }
+	    if (req.checkAuth){
+		AvatarAttributeState authOrig = new AvatarAttributeState(req.getName()+"__origin",ae.getReferenceObject(),requestData, signalState);
+		signalAuthOriginMap.put(req.getName(), authOrig);
+	    }
 	    tran= new AvatarTransition(block, "__after_"+ae.getName(), ae.getReferenceObject());
 	    elementList.add(signalState);
 	    signalState.addNext(signalTran);
@@ -560,6 +569,10 @@ public class TML2Avatar {
 		if (block.getAvatarAttributeWithName(evt.getName()+"__eventData")==null){
 	            block.addAttribute(eventData);
 		}
+	        if (evt.checkAuth){
+		    AvatarAttributeState authOrig = new AvatarAttributeState(evt.getName()+"__origin",ae.getReferenceObject(),eventData, signalState);
+		    signalAuthOriginMap.put(evt.getName(), authOrig);
+	    	}
 	        tran= new AvatarTransition(block, "__after_"+ae.getName(), ae.getReferenceObject());
 		elementList.add(signalState);
 		signalState.addNext(signalTran);
@@ -606,6 +619,16 @@ public class TML2Avatar {
 	        elementList.add(as);
 	        as.addNext(tran);
 	        elementList.add(tran);
+	        if (evt.checkAuth){
+		    AvatarState afterSignalState = new AvatarState("aftersignalstate_"+ae.getName()+"_"+evt.getName(),ae.getReferenceObject());
+		    tran.addNext(afterSignalState);
+		    tran = new AvatarTransition(block, "__aftersignalstate_"+ae.getName(), ae.getReferenceObject());
+		    afterSignalState.addNext(tran);
+		    elementList.add(afterSignalState);
+		    elementList.add(tran);
+		    AvatarAttributeState authDest = new AvatarAttributeState(evt.getName()+"__destination",ae.getReferenceObject(),eventData, afterSignalState);
+		    signalAuthDestMap.put(evt.getName(), authDest);
+	        }
 	    }
 	    else {
 		//Notify Event, I don't know how to translate this
@@ -655,6 +678,31 @@ public class TML2Avatar {
 	    	else {
 		    sig=signalMap.get(block.getName()+"__IN__"+ch.getName());
 	    	}
+		AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject());
+	    	as.addValue(ch.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);
+	        if (ch.checkAuth){
+		    //Add aftersignal state
+		    AvatarState afterSignalState = new AvatarState("aftersignalstate_"+ae.getName()+"_"+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(ch.getName()+"__chData")==null){
+		        AvatarAttribute channelData= new AvatarAttribute(ch.getName()+"__chData", AvatarType.INTEGER, block, null);
+	    	        block.addAttribute(channelData);
+		    }
+		    AvatarAttributeState authDest = new AvatarAttributeState(ch.getName()+"__destination",ae.getReferenceObject(),block.getAvatarAttributeWithName(ch.getName()+"__chData"), afterSignalState);
+		    signalAuthDestMap.put(ch.getName(), authDest);
+	    	}
 	    }
 	    else {
 		if (!signalMap.containsKey(block.getName()+"__OUT__"+ch.getName())){
@@ -670,25 +718,33 @@ public class TML2Avatar {
 	    	else {
 		    sig=signalMap.get(block.getName()+"__OUT__"+ch.getName());
 	    	}
-	    }
-	    if (ch.checkConf){
-		LinkedList<AvatarAttribute> attrs = new LinkedList<AvatarAttribute>();
-		if (!attrsToCheck.contains(ch.getName()+"__chData")){
-		    attrs.add(new AvatarAttribute(ch.getName()+"__chData", AvatarType.INTEGER, block, null));
-		    attrsToCheck.add(ch.getName()+"__chData");
-		    avspec.addPragma(new AvatarPragmaSecret("#Confidentiality "+block.getName() + "."+ch.getName()+"__chData", ch.getReferenceObject(), attrs));
-	        }
-	    }   
-	    AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject());
-	    as.addValue(ch.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);
+	        if (ch.checkConf){
+		    LinkedList<AvatarAttribute> attrs = new LinkedList<AvatarAttribute>();
+		    if (!attrsToCheck.contains(ch.getName()+"__chData")){
+		        attrs.add(new AvatarAttribute(ch.getName()+"__chData", AvatarType.INTEGER, block, null));
+		    	attrsToCheck.add(ch.getName()+"__chData");
+		    	avspec.addPragma(new AvatarPragmaSecret("#Confidentiality "+block.getName() + "."+ch.getName()+"__chData", ch.getReferenceObject(), attrs));
+	            }
+	    	}
+	        if (ch.checkAuth){
+		    if (block.getAvatarAttributeWithName(ch.getName()+"__chData")==null){
+		        AvatarAttribute channelData= new AvatarAttribute(ch.getName()+"__chData", AvatarType.INTEGER, block, null);
+	    	        block.addAttribute(channelData);
+		    }
+		    AvatarAttributeState authOrigin = new AvatarAttributeState(ch.getName()+"__destination",ae.getReferenceObject(),block.getAvatarAttributeWithName(ch.getName()+"__chData"), signalState);
+		    signalAuthOriginMap.put(ch.getName(), authOrigin);
+	    	}  
+	    	AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject());
+	    	as.addValue(ch.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;
@@ -889,14 +945,17 @@ public class TML2Avatar {
 	for (TMLChannel channel: tmlmodel.getChannels()){
 	    for (TMLCPrimitivePort p: channel.ports){
 	        channel.checkConf = channel.checkConf || p.checkConf;
+		channel.checkAuth = channel.checkAuth || p.checkAuth;
 	    }
 	}
 	for (TMLEvent event: tmlmodel.getEvents()){
 	    event.checkConf = event.port.checkConf || event.port2.checkConf;
+	    event.checkAuth = event.port.checkAuth || event.port2.checkAuth;
 	}
 	for (TMLRequest request: tmlmodel.getRequests()){
 	    for (TMLCPrimitivePort p: request.ports){
 		request.checkConf = p.checkConf || request.checkConf;
+		request.checkAuth = p.checkAuth || request.checkAuth;
 	    }
 	}
 
@@ -932,7 +991,7 @@ public class TML2Avatar {
 		AvatarAttribute req_loop_index= new AvatarAttribute("req_loop_index", AvatarType.INTEGER, block, null);
 		block.addAttribute(req_loop_index);
 
-		TMLRequest request= tmlmodel.getRequestToMe(task);
+		//TMLRequest request= tmlmodel.getRequestToMe(task);
 		//Oh this is fun...let's restructure the state machine
 		//Create own start state, and ignore the returned one
 		List<AvatarStateMachineElement> elementList= translateState(task.getActivityDiagram().get(0), block);
@@ -981,7 +1040,8 @@ public class TML2Avatar {
 		
 	
 		//Add Requests, direct transition to start of state machine
-		for (Object obj: tmlmodel.getRequestsToMe(task)){		
+		for (Object obj: tmlmodel.getRequestsToMe(task)){	
+		    System.out.println("Building request ");	
 		    TMLRequest req = (TMLRequest) obj;
 		    AvatarTransition incrTran = new AvatarTransition(block, "__after_loopstart__"+req.getName(), task.getActivityDiagram().get(0).getReferenceObject());
 		    incrTran.addAction(AvatarTerm.createActionFromString(block,"req_loop_index = req_loop_index + 1"));
@@ -1004,25 +1064,34 @@ public class TML2Avatar {
 	            as.addValue(req.getName()+"__reqData");
 		    AvatarAttribute requestData= new AvatarAttribute(req.getName()+"__reqData", AvatarType.INTEGER, block, null);
 		    block.addAttribute(requestData);
-	 	    for (int i=0; i< request.getNbOfParams(); i++){
-		        if (block.getAvatarAttributeWithName(request.getParam(i))==null){
+	 	    for (int i=0; i< req.getNbOfParams(); i++){
+		        if (block.getAvatarAttributeWithName(req.getParam(i))==null){
 		    	    //Throw Error
 			    as.addValue("tmp");
 		    	}
 		     	else {
-		      	    as.addValue(request.getParam(i));
+		      	    as.addValue(req.getParam(i));
 		    	}
 		    }
-		    AvatarTransition tran = new AvatarTransition(block, "__after_" + request.getName(), task.getActivityDiagram().get(0).getReferenceObject());
+		    AvatarTransition tran = new AvatarTransition(block, "__after_" + req.getName(), task.getActivityDiagram().get(0).getReferenceObject());
 		    as.addNext(tran);
 		    asm.addElement(tran);
-		    tran.addNext(newStart);
-		}
-
-
-	
-		
+		    if (req.checkAuth){
+ 			AvatarState afterSignalState = new AvatarState("aftersignalstate_"+req.getName()+"_"+req.getName(),req.getReferenceObject());
+		    	AvatarTransition afterSignalTran = new AvatarTransition(block, "__aftersignalstate_"+req.getName(), req.getReferenceObject());
+		    	tran.addNext(afterSignalState);
+		    	afterSignalState.addNext(afterSignalTran);
+		    	asm.addElement(afterSignalState);
+		    	asm.addElement(afterSignalTran);
+			afterSignalTran.addNext(newStart);
+		    	AvatarAttributeState authDest = new AvatarAttributeState(req.getName()+"__destination",obj,requestData, afterSignalState);
+		    	signalAuthDestMap.put(req.getName(), authDest);
+	    	    }  
+		    else {
+		        tran.addNext(newStart);
+		    }
 
+		}
 
 		
 		asm.setStartState((AvatarStartState) ss);
@@ -1042,6 +1111,15 @@ public class TML2Avatar {
 	}
 	checkConnections();
 	checkChannels();
+
+	//Add authenticity pragmas
+	for (String s: signalAuthOriginMap.keySet()){
+	    if (signalAuthDestMap.containsKey(s)){
+		AvatarPragmaAuthenticity pragma = new AvatarPragmaAuthenticity(s, signalAuthOriginMap.get(s).getReferenceObject(), signalAuthOriginMap.get(s), signalAuthDestMap.get(s));
+		avspec.addPragma(pragma);
+	    }
+	}
+
 	//Create relations
 	//Channels are ?? to ??
 	//Requests are n to 1
@@ -1214,6 +1292,7 @@ public class TML2Avatar {
 	//System.out.println(avspec);
 	return avspec;
     }
+   
     public void backtraceReachability(List<String> reachableStates, List<String> nonReachableStates){
 	for (String s: reachableStates){
 	    if (stateObjectMap.containsKey(s.replace("enteringState__",""))){
diff --git a/src/ui/GTMLModeling.java b/src/ui/GTMLModeling.java
index 249ea14cccdec7bd58031712590d3dfa19c09210..3a7de92c90b25b5f9568c99d0d58fc9c9bb0b1d4 100755
--- a/src/ui/GTMLModeling.java
+++ b/src/ui/GTMLModeling.java
@@ -1471,6 +1471,21 @@ public class GTMLModeling  {
                 ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK);
                 listE.addCor(tmlexecii, tgc);
 
+            } else if (tgc instanceof TMLADEncrypt) {
+                tmlexeci = new TMLExecI("execi", tgc);
+                tmlexeci.setAction("123");
+                activity.addElement(tmlexeci);
+                ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK);
+                listE.addCor(tmlexeci, tgc);
+
+            } else if (tgc instanceof TMLADDecrypt) {
+                tmlexeci = new TMLExecI("decrypt", tgc);
+                tmlexeci.setAction("234");
+                activity.addElement(tmlexeci);
+                ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK);
+                listE.addCor(tmlexeci, tgc);
+
+
             } else if (tgc instanceof TMLADExecC) {
                 tmlexecc = new TMLExecC("execc", tgc);
                 tmlexecc.setAction(modifyString(((TMLADExecC)tgc).getDelayValue()));
diff --git a/src/ui/IconManager.java b/src/ui/IconManager.java
index cd6814a6710460ab2e1eb77fd08c7897359f2d3f..95301cac9e8e88d1df8dc7171080699f558e0ce9 100755
--- a/src/ui/IconManager.java
+++ b/src/ui/IconManager.java
@@ -109,6 +109,7 @@ public class IconManager {
     public static ImageIcon imgic800, imgic802, imgic804, imgic806, imgic808, imgic810, imgic812;
     public static ImageIcon imgic900, imgic902, imgic904, imgic906, imgic908, imgic910, imgic912, imgic914, imgic916, imgic918;
     public static ImageIcon imgic920, imgic922, imgic924, imgic926, imgic928, imgic930;
+    public static ImageIcon imgic940, imgic941;
     // Requirement diagrams
     public static ImageIcon imgic1000, imgic1002, imgic1004,imgic1006,imgic1008, imgic1010, imgic1012, imgic1014, imgic1016, imgic1018;
     public static ImageIcon imgic1050, imgic1052, imgic1054,imgic1056, imgic1058, imgic1060;
@@ -431,6 +432,8 @@ public class IconManager {
     private static String icon926 = "images/tmladforeverloop.gif";
     private static String icon928 = "images/tmladunorderedsequence.gif";
     private static String icon930 = "images/tmladreadrequestarg.gif";
+    private static String icon940 = "images/tmladencrypt.gif";
+    private static String icon941 = "images/tmladdecrypt.gif";
 
     // Requirement diagrams
     private static String icon1000 = "images/reqdiag.gif";
@@ -832,6 +835,8 @@ public class IconManager {
         imgic926 = getIcon(icon926);
         imgic928 = getIcon(icon928);
         imgic930 = getIcon(icon930);
+	imgic940 = getIcon(icon940);
+	imgic941 = getIcon(icon941);
 
         imgic1000 = getIcon(icon1000);
         imgic1002 = getIcon(icon1002);
diff --git a/src/ui/MainGUI.java b/src/ui/MainGUI.java
index da899a6f11bd6b148f7688f704abe4809f287519..4b86a4e9a2fc56f0a42fd45533fa103d2b3c20d6 100755
--- a/src/ui/MainGUI.java
+++ b/src/ui/MainGUI.java
@@ -3767,6 +3767,8 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
 	    gtm.getTMLMapping().getTMLModeling().clearBacktracing();
 	    gtm.getTMLMapping().getTMLModeling().backtrace(pvoa, getTabName(tp));
 	    gtm.getTML2Avatar().backtraceReachability(pvoa.getReachableEvents(), pvoa.getNonReachableEvents());
+	    gtm.getTMLMapping().getTMLModeling().backtraceAuthenticity(pvoa.getSatisfiedAuthenticity(), pvoa.getSatisfiedWeakAuthenticity(), pvoa.getNonSatisfiedAuthenticity(), getTabName(tp));
+	    System.out.println("backtracing finished");
 	}
 	else if (tp instanceof TMLComponentDesignPanel){
 	    
@@ -8557,6 +8559,10 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
             actionOnButton(TGComponentManager.COMPONENT, TGComponentManager.TMLAD_SELECT_EVT);
         } else if (command.equals(actions[TGUIAction.TMLAD_RANDOM].getActionCommand())) {
             actionOnButton(TGComponentManager.COMPONENT, TGComponentManager.TMLAD_RANDOM);
+ 	} else if (command.equals(actions[TGUIAction.TMLAD_ENCRYPT].getActionCommand())) {
+            actionOnButton(TGComponentManager.COMPONENT, TGComponentManager.TMLAD_ENCRYPT);
+ 	} else if (command.equals(actions[TGUIAction.TMLAD_DECRYPT].getActionCommand())) {
+            actionOnButton(TGComponentManager.COMPONENT, TGComponentManager.TMLAD_DECRYPT);
         } else if (command.equals(actions[TGUIAction.TMLCTD_CCOMPONENT].getActionCommand())) {
             actionOnButton(TGComponentManager.COMPONENT, TGComponentManager.TMLCTD_CCOMPONENT);
         } else if (command.equals(actions[TGUIAction.TMLCTD_CREMOTECOMPONENT].getActionCommand())) {
diff --git a/src/ui/TGComponentManager.java b/src/ui/TGComponentManager.java
index e7d8183e85b46487561ddfe1a041bf87b5334926..7107a14e3507c6f67f3eaa41de8ffb66b7090172 100755
--- a/src/ui/TGComponentManager.java
+++ b/src/ui/TGComponentManager.java
@@ -236,6 +236,8 @@ public class TGComponentManager {
     public static final int TMLAD_INTERVAL_DELAY = 1028;
     public static final int TMLAD_FOR_EVER_LOOP = 1030;
     public static final int TMLAD_READ_REQUEST_ARG = 1034;
+    public static final int TMLAD_ENCRYPT = 1035;
+    public static final int TMLAD_DECRYPT = 1036;
 
     public static final int TMLARCHI_CPUNODE = 1100;
     public static final int TMLARCHI_ARTIFACT = 1101;
@@ -1039,6 +1041,12 @@ public class TGComponentManager {
         case TMLAD_RANDOM:
             tgc = new TMLADRandom(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp);
             break;
+        case TMLAD_ENCRYPT:
+            tgc = new TMLADEncrypt(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp);
+            break;
+        case TMLAD_DECRYPT:
+            tgc = new TMLADDecrypt(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp);
+            break;
         case TMLCTD_CCOMPONENT:
             tgc = new TMLCCompositeComponent(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp);
             break;
@@ -1696,6 +1704,10 @@ public class TGComponentManager {
             return TMLAD_UNORDERED_SEQUENCE;
         } else if (tgc instanceof TMLADSelectEvt) {
             return TMLAD_SELECT_EVT;
+        } else if (tgc instanceof TMLADEncrypt) {
+            return TMLAD_ENCRYPT;
+        } else if (tgc instanceof TMLADDecrypt) {
+            return TMLAD_DECRYPT;
         } else if (tgc instanceof TMLADRandom) {
             return TMLAD_RANDOM;
 
diff --git a/src/ui/TGUIAction.java b/src/ui/TGUIAction.java
index ab4cbb0e5c39ca63c1b90dbb1edc3204abffdcd3..9690d240a35cf9bd0e8895cec64a34d0657629ed 100755
--- a/src/ui/TGUIAction.java
+++ b/src/ui/TGUIAction.java
@@ -204,6 +204,9 @@ public class TGUIAction extends AbstractAction {
     public static final int TMLAD_SELECT_EVT = 206;
     public static final int TMLAD_RANDOM = 245;
     public static final int TMLAD_READ_REQUEST_ARG = 335;
+    
+    public static final int TMLAD_ENCRYPT = 430;
+    public static final int TMLAD_DECRYPT = 431;
 
     public static final int TMLARCHI_EDIT = 216;
     public static final int TMLARCHI_LINK = 217;
@@ -570,7 +573,7 @@ public class TGUIAction extends AbstractAction {
     public static final int ACT_INTERNAL_SEARCH = 415;
     //--
 
-    public static final int NB_ACTION = 428;
+    public static final int NB_ACTION = 500;
 
     private  static final TAction [] actions = new TAction[NB_ACTION];
 
@@ -918,6 +921,12 @@ actions[ADD_VGMNNODE] = new TAction("add-add-vgmnnode", "Add a VGMN", IconManage
         actions[TMLAD_RANDOM] = new TAction("add-tmlad-random", "Add random", IconManager.imgic924, IconManager.imgic924, "Select random", "Add a random operator to the currently opened TML Task activity diagram", 0);
         actions[TMLAD_READ_REQUEST_ARG] = new TAction("add-tmladd-read-request-arg", "Reading request arguments", IconManager.imgic930, IconManager.imgic930, "Reading request arguments", "Add a reading request argument operator to the currently opened TML activity diagram", 0);
 
+
+
+	actions[TMLAD_ENCRYPT] = new TAction("add-tmlad-encrypt", "Add Encryption", IconManager.imgic940, IconManager.imgic940, "Encryption", "Add an encryption operator to the currently opened TML Task activity diagram", 0);
+	actions[TMLAD_DECRYPT] = new TAction("add-tmlad-decrypt", "Add Decryption", IconManager.imgic941, IconManager.imgic941, "Decryption", "Add a decryption operator to the currently opened TML Task activity diagram", 0);
+
+
         actions[EBRDD_EDIT] = new TAction("edit-ebrdd-diagram", "Edit EBRDD", IconManager.imgic100, IconManager.imgic101, "Edit EBRDD", "Make it possible to edit the currently opened Event-Based Requirement Description Diagram", 0);
         actions[EBRDD_CONNECTOR] = new TAction("add-ebrdd-connector", "Connect two operators together", IconManager.imgic202, IconManager.imgic202, "Connect two operators together", "Connect two operators of the currently opened Event-Based Requirement Description Diagram", 0);
         actions[EBRDD_START] = new TAction("add-ebrdd-start", "Add Start state", IconManager.imgic222, IconManager.imgic222, "Start", "Add a start state to the currently opened Event-Based Requirement Description Diagram", 0);
diff --git a/src/ui/TMLComponentDesignPanel.java b/src/ui/TMLComponentDesignPanel.java
index d1246123ac1ff89c9ca69c2ed53bd78b41db0b8f..6adbf3327553aa1ac44fdbf5bc8fff5c943692b5 100755
--- a/src/ui/TMLComponentDesignPanel.java
+++ b/src/ui/TMLComponentDesignPanel.java
@@ -230,89 +230,5 @@ public class TMLComponentDesignPanel extends TURTLEPanel {
     public String[] getAllOutRequests(String nameOfComponent) {
 	return tmlctdp.getAllOutRequests(nameOfComponent);
     }
-   public void modelBacktracingProVerif(ProVerifOutputAnalyzer pvoa) {
-
-        resetModelBacktracingProVerif();
-        TGComponent tgc;
-	int index;
-	ListIterator iterator;
-        // Confidential attributes
-        LinkedList<AvatarAttribute> secretAttributes = pvoa.getSecretTerms ();
-        LinkedList<AvatarAttribute> nonSecretAttributes = pvoa.getNonSecretTerms ();
-	for (AvatarAttribute attr: secretAttributes){
-		System.out.println("!!!");
-	    iterator = tmlctdp.componentList.listIterator();
-	    while (iterator.hasNext()){
-
-		tgc = (TGComponent)(iterator.next());
-		System.out.println("NEXT " + tgc);
-		if (tgc instanceof TMLCPrimitiveComponent){
-		    ArrayList<TMLCPrimitivePort> ports = ((TMLCPrimitiveComponent) tgc).getAllInternalPrimitivePorts();
-		    for (TMLCPrimitivePort p:ports){
-			if (p.checkStatus>0){
-			    System.out.println(p.getName());
-//			    p.checkStatus=3;
-			}
-		    }
-		}
-	    }
-	}
-/*
-        for(String s: pvoa.getNonReachableEvents()) {
-            index = s.indexOf("__");
-            if (index != -1) {
-                block = s.substring(index+2, s.length());
-                index = block.indexOf("__");
-                if (index != -1) {
-                    state = block.substring(index+2, block.length());
-                    block = block.substring(0, index);
-                    TraceManager.addDev("Block=" + block + " state=" + state);
-                    for(i=0; i<panels.size(); i++) {
-                        tdp = (TDiagramPanel)(panels.get(i));
-                        if ((tdp instanceof AvatarSMDPanel) && (tdp.getName().compareTo(block) == 0)){
-                            iterator = ((TDiagramPanel)(panels.get(i))).getComponentList().listIterator();
-                            while(iterator.hasNext()) {
-                                tgc = (TGComponent)(iterator.next());
-                                if (tgc instanceof AvatarSMDState) {
-                                    ((AvatarSMDState)tgc).setSecurityInfo(AvatarSMDState.NOT_REACHABLE, state);
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-*/
-        LinkedList<String> notProved = pvoa.getNotProved ();
-        LinkedList<String> satisfied = pvoa.getSatisfiedAuthenticity ();
-        LinkedList<String> satisfiedWeak = pvoa.getSatisfiedWeakAuthenticity ();
-        LinkedList<String> nonSatisfied = pvoa.getNonSatisfiedAuthenticity ();
-    }
-
-
-    public void resetModelBacktracingProVerif() {
-        /*if (abdp == null) {
-            return;
-        }
-
-        // Reset confidential attributes
-        for(AvatarBDBlock block1: abdp.getFullBlockList()) {
-            block1.resetConfidentialityOfAttributes();
-        }
-	for (Object tgc: abdp.getComponentList()){
-	    if (tgc instanceof AvatarBDPragma){
-		AvatarBDPragma pragma = (AvatarBDPragma) tgc;
-		pragma.authStrongMap.clear();
-		pragma.authWeakMap.clear();	
-	
-	    }
-	}
-        // Reset reachable states
-        for(int i=0; i<panels.size(); i++) {
-            tdp = (TDiagramPanel)(panels.get(i));
-            if (tdp instanceof AvatarSMDPanel) {
-                ((AvatarSMDPanel)tdp).resetStateSecurityInfo();
-            }
-        }*/
-    }
+  
 }
diff --git a/src/ui/images/tmladdecrypt.gif b/src/ui/images/tmladdecrypt.gif
new file mode 100755
index 0000000000000000000000000000000000000000..fc0523d687191d35570720df521cc5300f9cf8c4
Binary files /dev/null and b/src/ui/images/tmladdecrypt.gif differ
diff --git a/src/ui/images/tmladencrypt.gif b/src/ui/images/tmladencrypt.gif
new file mode 100755
index 0000000000000000000000000000000000000000..06d4e06cacdd33ec269de8dc5a5e85646180dcb9
Binary files /dev/null and b/src/ui/images/tmladencrypt.gif differ
diff --git a/src/ui/tmlad/TMLADReadChannel.java b/src/ui/tmlad/TMLADReadChannel.java
index 83ccd3c2e323749496ab1ff0ace57506238d695e..a77795c623ab831de1d6d0ce188df5dd79127d40 100755
--- a/src/ui/tmlad/TMLADReadChannel.java
+++ b/src/ui/tmlad/TMLADReadChannel.java
@@ -67,7 +67,7 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che
 
     protected String channelName = "ch";
     protected String nbOfSamples= "1";
-
+    public String securityContext ="";
     protected int stateOfError = 0; // Not yet checked
 
     public final static int NOT_VERIFIED = 0;
@@ -170,12 +170,12 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che
                 return;
             }
 
-            GraphicLib.arrowWithLine(g, 1, 0, 10, x-30, y+4, x-15, y+4, true);
-            g.drawOval(x-11, y-3, 7, 9);
+            GraphicLib.arrowWithLine(g, 1, 0, 10, x-30, y-3, x-15, y-3, true);
+            g.drawOval(x-11, y-10, 7, 9);
             g.setColor(c1);
-            g.fillRect(x-12, y, 9, 7);
+            g.fillRect(x-12, y-7, 9, 7);
             g.setColor(c);
-            g.drawRect(x-12, y, 9, 7);
+            g.drawRect(x-12, y-7, 9, 7);
 
         }
     }
@@ -210,20 +210,22 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che
 
     public boolean editOndoubleClick(JFrame frame) {
 
-	String [] labels = new String[2];
-        String [] values = new String[2];
+	String [] labels = new String[3];
+        String [] values = new String[3];
         labels[0] = "Channel name";
         values[0] = channelName;
 	labels[1] = "Nb of samples";
         values[1] = nbOfSamples;
+        labels[2] = "Security Pattern";
+	values[2] = securityContext;
 	
         ArrayList<String []> help = new ArrayList<String []>();
 	String[] allInChannels = tdp.getMGUI().getAllInChannels();
 	help.add(allInChannels);
 
-        JDialogTwoString jdts = new JDialogTwoString(frame, "Setting channel's properties", "Channel name", channelName, "Nb of samples", nbOfSamples);
+       // 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", 2, labels, values, help);
+	JDialogMultiString jdms = new JDialogMultiString(frame, "Setting channel's properties", 3, labels, values, help);
         jdms.setSize(450, 300);
         GraphicLib.centerOnParent(jdms);
         jdms.show(); // blocked until dialog has been closed
@@ -231,7 +233,7 @@ 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);
             makeValue();
             return true;
         }
@@ -258,6 +260,8 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che
         sb.append(getChannelName());
         sb.append("\" nbOfSamples=\"");
         sb.append(getSamplesValue());
+        sb.append("\" secPattern=\"");
+        sb.append(securityContext);
         sb.append("\" />\n");
         sb.append("</extraparam>\n");
         return new String(sb);
@@ -287,6 +291,7 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che
                             if (elt.getTagName().equals("Data")) {
                                 channelName = elt.getAttribute("channelName");
                                 nbOfSamples = elt.getAttribute("nbOfSamples");
+                                securityContext = elt.getAttribute("secPattern");
                             }
                         }
                     }
diff --git a/src/ui/tmlad/TMLADSendEvent.java b/src/ui/tmlad/TMLADSendEvent.java
index ceb05d5c505582b46ffaa5a31de87a352832dfc9..51537ac70be5ae16bdc72f3677f0a1ac3aa3eead 100755
--- a/src/ui/tmlad/TMLADSendEvent.java
+++ b/src/ui/tmlad/TMLADSendEvent.java
@@ -184,13 +184,12 @@ public class TMLADSendEvent extends TGCWithoutInternalComponent implements Check
                 return;
             }
 
-            GraphicLib.arrowWithLine(g, 1, 0, 10, x-30, y+4, x-15, y+4, true);
-            g.drawOval(x-11, y-3, 7, 9);
+            GraphicLib.arrowWithLine(g, 1, 0, 10, x-30, y-3, x-15, y-3, true);
+            g.drawOval(x-11, y-10, 7, 9);
             g.setColor(c1);
-            g.fillRect(x-12, y, 9, 7);
+            g.fillRect(x-12, y-7, 9, 7);
             g.setColor(c);
-            g.drawRect(x-12, y, 9, 7);
-
+            g.drawRect(x-12, y-7, 9, 7);
         }
     }
     public TGComponent isOnMe(int _x, int _y) {
diff --git a/src/ui/tmlad/TMLADSendRequest.java b/src/ui/tmlad/TMLADSendRequest.java
index 5a8ca642ac7195e87a49a81a831041694fdb5c50..06dc68d2c8c3b7a1bcefcae806c0376a7d771ed7 100755
--- a/src/ui/tmlad/TMLADSendRequest.java
+++ b/src/ui/tmlad/TMLADSendRequest.java
@@ -171,12 +171,12 @@ public class TMLADSendRequest extends TGCWithoutInternalComponent implements Che
                 return;
             }
 
-            GraphicLib.arrowWithLine(g, 1, 0, 10, x-30, y+4, x-15, y+4, true);
-            g.drawOval(x-11, y-3, 7, 9);
+            GraphicLib.arrowWithLine(g, 1, 0, 10, x-30, y-3, x-15, y-3, true);
+            g.drawOval(x-11, y-10, 7, 9);
             g.setColor(c1);
-            g.fillRect(x-12, y, 9, 7);
+            g.fillRect(x-12, y-7, 9, 7);
             g.setColor(c);
-            g.drawRect(x-12, y, 9, 7);
+            g.drawRect(x-12, y-7, 9, 7);
 
         }
     }
diff --git a/src/ui/tmlad/TMLADWaitEvent.java b/src/ui/tmlad/TMLADWaitEvent.java
index d2b8951aee588508eee5059c0705815f7a8797f6..f146325162b45fded12783af9b4420c810dfdc64 100755
--- a/src/ui/tmlad/TMLADWaitEvent.java
+++ b/src/ui/tmlad/TMLADWaitEvent.java
@@ -173,12 +173,12 @@ public class TMLADWaitEvent extends TGCWithoutInternalComponent implements Check
                 return;
             }
 
-            GraphicLib.arrowWithLine(g, 1, 0, 10, x-30, y+4, x-15, y+4, true);
-            g.drawOval(x-11, y-3, 7, 9);
+            GraphicLib.arrowWithLine(g, 1, 0, 10, x-30, y-3, x-15, y-3, true);
+            g.drawOval(x-11, y-10, 7, 9);
             g.setColor(c1);
-            g.fillRect(x-12, y, 9, 7);
+            g.fillRect(x-12, y-7, 9, 7);
             g.setColor(c);
-            g.drawRect(x-12, y, 9, 7);
+            g.drawRect(x-12, y-7, 9, 7);
 
         }
     }
diff --git a/src/ui/tmlad/TMLADWriteChannel.java b/src/ui/tmlad/TMLADWriteChannel.java
index 51454888c0e0c1e7b3366cafd836eacb5555bca6..0685f0ec290797688ee6bc51b8e073ae924aad1a 100755
--- a/src/ui/tmlad/TMLADWriteChannel.java
+++ b/src/ui/tmlad/TMLADWriteChannel.java
@@ -66,7 +66,7 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch
 
     protected String channelName = "ch";
     protected String nbOfSamples= "1";
-
+    public String securityContext = "";
     protected int stateOfError = 0; // Not yet checked
     
     public final static int NOT_VERIFIED = 0;
@@ -168,12 +168,12 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch
                 return;
             }
 
-            GraphicLib.arrowWithLine(g, 1, 0, 10, x-30, y+4, x-15, y+4, true);
-            g.drawOval(x-11, y-3, 7, 9);
+            GraphicLib.arrowWithLine(g, 1, 0, 10, x-30, y-3, x-15, y-3, true);
+            g.drawOval(x-11, y-10, 7, 9);
             g.setColor(c1);
-            g.fillRect(x-12, y, 9, 7);
+            g.fillRect(x-12, y-7, 9, 7);
             g.setColor(c);
-            g.drawRect(x-12, y, 9, 7);
+            g.drawRect(x-12, y-7, 9, 7);
 
         }
     }
@@ -217,12 +217,14 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch
     }
 
     public boolean editOndoubleClick(JFrame frame) {
-	String [] labels = new String[2];
-        String [] values = new String[2];
+	String [] labels = new String[3];
+        String [] values = new String[3];
         labels[0] = "Channel name";
         values[0] = channelName;
 	labels[1] = "Nb of samples";
         values[1] = nbOfSamples;
+	labels[2] = "Security Pattern";
+	values[2] = securityContext;
 	
         ArrayList<String []> help = new ArrayList<String []>();
 	String[] allOutChannels = tdp.getMGUI().getAllOutChannels();
@@ -230,7 +232,7 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch
 	
 
         //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", 2, labels, values, help);
+	JDialogMultiString jdms = new JDialogMultiString(frame, "Setting channel's properties", 3, labels, values, help);
         jdms.setSize(450, 300);
         GraphicLib.centerOnParent(jdms);
         jdms.show(); // blocked until dialog has been closed
@@ -238,6 +240,7 @@ 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);
 
             makeValue();
             return true;
@@ -253,6 +256,8 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch
         sb.append(channelName);
         sb.append("\" nbOfSamples=\"");
         sb.append(getSamplesValue());
+        sb.append("\" secPattern=\"");
+        sb.append(securityContext);
         sb.append("\" />\n");
         sb.append("</extraparam>\n");
         return new String(sb);
@@ -282,6 +287,7 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch
                             if (elt.getTagName().equals("Data")) {
                                 channelName = elt.getAttribute("channelName");
                                 nbOfSamples = elt.getAttribute("nbOfSamples");
+                                securityContext = elt.getAttribute("secPattern");
                             }
                         }
                     }
diff --git a/src/ui/tmlad/TMLActivityDiagramToolBar.java b/src/ui/tmlad/TMLActivityDiagramToolBar.java
index d054d2a2ce0dfa343c471a53fccf2f8f17f2fdab..f8718c6f9e9c6c0920e4d6c343706a4ac3cc1007 100755
--- a/src/ui/tmlad/TMLActivityDiagramToolBar.java
+++ b/src/ui/tmlad/TMLActivityDiagramToolBar.java
@@ -72,6 +72,8 @@ public class TMLActivityDiagramToolBar extends TToolBar {
 		mgui.actions[TGUIAction.TMLAD_RANDOM].setEnabled(b);
         mgui.actions[TGUIAction.TMLAD_EXECI].setEnabled(b);
         mgui.actions[TGUIAction.TMLAD_EXECI_INTERVAL].setEnabled(b);
+        mgui.actions[TGUIAction.TMLAD_ENCRYPT].setEnabled(b);
+        mgui.actions[TGUIAction.TMLAD_DECRYPT].setEnabled(b);
 		mgui.actions[TGUIAction.TMLAD_EXECC].setEnabled(b);
         mgui.actions[TGUIAction.TMLAD_EXECC_INTERVAL].setEnabled(b);
 		mgui.actions[TGUIAction.TMLAD_DELAY].setEnabled(b);
@@ -206,6 +208,13 @@ public class TMLActivityDiagramToolBar extends TToolBar {
         
         this.addSeparator();
         
+
+	button = this.add(mgui.actions[TGUIAction.TMLAD_ENCRYPT]);
+        button.addMouseListener(mgui.mouseHandler);
+        button = this.add(mgui.actions[TGUIAction.TMLAD_DECRYPT]);
+        button.addMouseListener(mgui.mouseHandler);
+
+		this.addSeparator();
         button = this.add(mgui.actions[TGUIAction.ACT_ENHANCE]);
         button.addMouseListener(mgui.mouseHandler);
 		
diff --git a/src/ui/tmlcompd/TMLCPrimitiveComponent.java b/src/ui/tmlcompd/TMLCPrimitiveComponent.java
index 69a5b5c9f2cfcc54fc86fd72d5d82ead44a3e9be..e81113bd61d0899399b84d4d00ea34f73119d17d 100755
--- a/src/ui/tmlcompd/TMLCPrimitiveComponent.java
+++ b/src/ui/tmlcompd/TMLCPrimitiveComponent.java
@@ -238,10 +238,10 @@ public class TMLCPrimitiveComponent extends TGCScalableWithInternalComponent imp
         g.setFont(fold);
 
     }
-     public void drawVerification(Graphics g, int x, int y, int checkStatus){
+     public void drawVerification(Graphics g, int x, int y, int checkConfStatus){
         Color c = g.getColor();
         Color c1;
-        switch(checkStatus) {
+        switch(checkConfStatus) {
         case TAttribute.CONFIDENTIALITY_OK:
             c1 = Color.green;
             break;