diff --git a/src/tmltranslator/SecurityPattern.java b/src/tmltranslator/SecurityPattern.java
index a1ef9e9fbac6191f1e72a514f464d834124abd39..17b0260944e7383f8c1e4a85868de29b44751587 100644
--- a/src/tmltranslator/SecurityPattern.java
+++ b/src/tmltranslator/SecurityPattern.java
@@ -1,10 +1,14 @@
 package tmltranslator;
+import avatartranslator.*;
 
 public class SecurityPattern {
 
 public String name;
 public int keySize;
 public int MACSize=0;
+public String originTask;
+public AvatarState state1;
+public AvatarState state2;
 
 public SecurityPattern(String _name, String _keySize, String _MACSize){
     this.name=_name; 
diff --git a/src/tmltranslator/toavatar/TML2Avatar.java b/src/tmltranslator/toavatar/TML2Avatar.java
index ce013dea27488147523558fcb2cff48e23206acd..99467d89454d1fb6c1e03584547fc22eeaf81f8d 100644
--- a/src/tmltranslator/toavatar/TML2Avatar.java
+++ b/src/tmltranslator/toavatar/TML2Avatar.java
@@ -81,6 +81,8 @@ public class TML2Avatar {
     HashMap<String, AvatarAttributeState> signalAuthOriginMap = new HashMap<String, AvatarAttributeState>();
     HashMap<String, AvatarAttributeState> signalAuthDestMap = new HashMap<String, AvatarAttributeState>();
 
+    ArrayList<SecurityPattern> secPatterns = new ArrayList<SecurityPattern>();
+
     List<AvatarSignal> signals = new ArrayList<AvatarSignal>();
     private final static Integer channelPublic = 0;
     private final static Integer channelPrivate = 1;
@@ -183,7 +185,7 @@ public class TML2Avatar {
 		a=channel.getOriginTasks().get(0);
 		destinations.addAll(channel.getDestinationTasks());
 	    }  
-	    HwCPU node1 = (HwCPU) tmlmap.getHwNodeOf(a);
+	    HwExecutionNode node1 = (HwExecutionNode) tmlmap.getHwNodeOf(a);
 	    for (TMLTask t: destinations){
 	        List<HwBus> buses = new ArrayList<HwBus>();
 		HwNode node2 = tmlmap.getHwNodeOf(t);
@@ -643,13 +645,48 @@ public class TML2Avatar {
 	    
 	}
 	else if (ae instanceof TMLActivityElementWithAction){
+	    //Might be encrypt or decrypt
 	    AvatarState as = new AvatarState(ae.getName(), ae.getReferenceObject());
 	    tran = new AvatarTransition(block, "__after_"+ae.getName(), ae.getReferenceObject());
-	    //For now, get rid of the action. It won't translate anywya
+	    //For now, get rid of the action. It won't translate anyway
 	    //tran.addAction(((TMLActivityElementWithAction) ae).getAction());
-	    as.addNext(tran);
-	    elementList.add(as);
-	    elementList.add(tran);
+	    if (ae.securityPattern!=null && ae.getName().contains("encrypt")){
+		secPatterns.add(ae.securityPattern);
+		block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
+		block.addAttribute(new AvatarAttribute(ae.securityPattern.name+"_encrypted", AvatarType.INTEGER, block, null));
+		tran.addAction(ae.securityPattern.name+"_encrypted= sencrypt("+ae.securityPattern.name+", key)");
+		System.out.println("Found security pattern "+ae.securityPattern.name);
+		ae.securityPattern.originTask=block.getName();
+		ae.securityPattern.state1=as;
+		AvatarAttributeState authOrigin = new AvatarAttributeState(ae.securityPattern.name+"1",ae.getReferenceObject(),block.getAvatarAttributeWithName(ae.securityPattern.name), as);
+		signalAuthOriginMap.put(ae.securityPattern.name, authOrigin);
+	    	as.addNext(tran);
+	    	elementList.add(as);
+	    	elementList.add(tran);
+	    }	
+	    else if (ae.securityPattern!=null && ae.getName().contains("decrypt")){
+		block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
+		block.addAttribute(new AvatarAttribute(ae.securityPattern.name+"_encrypted", AvatarType.INTEGER, block, null));
+		tran.addAction(ae.securityPattern.name+"= sdecrypt("+ae.securityPattern.name+"_encrypted,key)");
+		ae.securityPattern.state2=as;
+		System.out.println("Found security pattern decrypt "+ae.securityPattern.name);
+		
+	    	elementList.add(as);
+	    	elementList.add(tran);
+		AvatarState dummy = new AvatarState(ae.getName()+"_dummy", ae.getReferenceObject());
+		tran.addNext(dummy);
+	    	tran = new AvatarTransition(block, "__after_"+ae.getName(), ae.getReferenceObject());
+		dummy.addNext(tran);
+	    	elementList.add(dummy);
+	    	elementList.add(tran);		
+		AvatarAttributeState authDest = new AvatarAttributeState(ae.securityPattern.name+"2",ae.getReferenceObject(),block.getAvatarAttributeWithName(ae.securityPattern.name), dummy);
+		signalAuthDestMap.put(ae.securityPattern.name, authDest);
+	    }
+	    else {
+	    	as.addNext(tran);
+	    	elementList.add(as);
+	    	elementList.add(tran);
+	    }
 	}
 	else if (ae instanceof TMLActivityElementWithIntervalAction){
 	    AvatarState as = new AvatarState(ae.getName(), ae.getReferenceObject());
@@ -677,9 +714,19 @@ public class TML2Avatar {
 	    	}
 	    	else {
 		    sig=signalMap.get(block.getName()+"__IN__"+ch.getName());
-	    	}
+		}
 		AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject());
+		
+		if (ae.securityPattern!=null){
+		    System.out.println("has security pattern" + ae.securityPattern.name);
+		    as.addValue(ae.securityPattern.name+"_encrypted");
+		    AvatarAttribute data= new AvatarAttribute(ae.securityPattern.name+"_encrypted", AvatarType.INTEGER, block, null);
+		    block.addAttribute(data);
+		}
+		else {
 	    	as.addValue(ch.getName()+"__chData");
+		}
+
 	    	tran= new AvatarTransition(block, "__after_"+ae.getName(), ae.getReferenceObject());
 	    	elementList.add(signalState);
 	    	signalState.addNext(signalTran);
@@ -705,6 +752,10 @@ public class TML2Avatar {
 	    	}
 	    }
 	    else {
+		//Write Channel
+		if (ae.securityPattern!=null){
+		    System.out.println("has security pattern "+ae.securityPattern.name);
+		}
 		if (!signalMap.containsKey(block.getName()+"__OUT__"+ch.getName())){
 	            sig = new AvatarSignal(block.getName()+"__OUT__"+ch.getName(), AvatarSignal.OUT, ch.getReferenceObject());
 	            signals.add(sig);
@@ -735,7 +786,17 @@ public class TML2Avatar {
 		    signalAuthOriginMap.put(ch.getName(), authOrigin);
 	    	}  
 	    	AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject());
+
+		if (ae.securityPattern!=null){
+		    System.out.println("has security pattern" + ae.securityPattern.name);
+		    as.addValue(ae.securityPattern.name+"_encrypted");
+		    AvatarAttribute data= new AvatarAttribute(ae.securityPattern.name+"_encrypted", AvatarType.INTEGER, block, null);
+		    block.addAttribute(data);
+		}
+		else {
 	    	as.addValue(ch.getName()+"__chData");
+		}
+
 	    	tran= new AvatarTransition(block, "__after_"+ae.getName(), ae.getReferenceObject());
 	    	elementList.add(signalState);
 	    	signalState.addNext(signalTran);
@@ -966,6 +1027,12 @@ public class TML2Avatar {
 	    //Add temp variable for unsendable signals
 	    AvatarAttribute tmp = new AvatarAttribute("tmp", AvatarType.INTEGER, block, null);
 	    block.addAttribute(tmp);
+	    AvatarAttribute key = new AvatarAttribute("key", AvatarType.INTEGER, block, null);
+	    block.addAttribute(key);
+	 /*   tmp = new AvatarAttribute("aliceandbob", AvatarType.INTEGER, block, null);
+	    block.addAttribute(tmp);
+	    tmp = new AvatarAttribute("aliceandbob_encrypted", AvatarType.INTEGER, block, null);
+	    block.addAttribute(tmp);*/
 	    AvatarAttribute loop_index = new AvatarAttribute("loop_index", AvatarType.INTEGER, block, null);
 	    block.addAttribute(loop_index);
 	    for (TMLAttribute attr: task.getAttributes()){
@@ -1107,13 +1174,25 @@ public class TML2Avatar {
 	        }
 	        asm.setStartState((AvatarStartState) elementList.get(0));
 	    }
+	    for (SecurityPattern secPattern: secPatterns){
+	        System.out.println("secpattern "+ secPattern.name);
+		AvatarAttribute sec = new AvatarAttribute(secPattern.name, AvatarType.INTEGER, block, null);
+		AvatarAttribute enc = new AvatarAttribute(secPattern.name+"_encrypted", AvatarType.INTEGER, block, null);
+	        LinkedList<AvatarAttribute> attrs = new LinkedList<AvatarAttribute>();
+		block.addAttribute(sec);
+		block.addAttribute(enc);
+	        attrs.add(sec);
+	        avspec.addPragma(new AvatarPragmaSecret("#Confidentiality "+block.getName() + "."+ "securitypattern", null, attrs));
+	    }
 	    avspec.addBlock(block);
 	}
+	
 	checkConnections();
 	checkChannels();
 
 	//Add authenticity pragmas
 	for (String s: signalAuthOriginMap.keySet()){
+		System.out.println("authe " + s);
 	    if (signalAuthDestMap.containsKey(s)){
 		AvatarPragmaAuthenticity pragma = new AvatarPragmaAuthenticity(s, signalAuthOriginMap.get(s).getReferenceObject(), signalAuthOriginMap.get(s), signalAuthDestMap.get(s));
 		avspec.addPragma(pragma);
@@ -1290,6 +1369,8 @@ public class TML2Avatar {
 	}
 	//Check if we matched up all signals
 	//System.out.println(avspec);
+	
+
 	return avspec;
     }
    
diff --git a/src/ui/GTMLModeling.java b/src/ui/GTMLModeling.java
index a8cbee042228bd2688ea5cf00ad4b33eb641691e..1fa0a8d947fada1f259d665fc44a42ee2ffb1eca 100755
--- a/src/ui/GTMLModeling.java
+++ b/src/ui/GTMLModeling.java
@@ -1474,7 +1474,7 @@ public class GTMLModeling  {
                 listE.addCor(tmlexecii, tgc);
 
             } else if (tgc instanceof TMLADEncrypt) {
-                tmlexeci = new TMLExecI("execi", tgc);
+                tmlexeci = new TMLExecI("encrypt", tgc);
                 tmlexeci.setAction("123");
                 activity.addElement(tmlexeci);
 		SecurityPattern securityPattern = new SecurityPattern(((TMLADEncrypt)tgc).securityContext, ((TMLADEncrypt)tgc).keySize, ((TMLADEncrypt)tgc).MACSize);
@@ -1608,6 +1608,10 @@ public class GTMLModeling  {
                     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);
+		    }
                     activity.addElement(tmlreadchannel);
                     ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK);
                     listE.addCor(tmlreadchannel, tgc);
@@ -1908,6 +1912,10 @@ public class GTMLModeling  {
                         channel = tmlm.getChannelByName(getFromTable(tmltask, channels[i]));
                         tmlwritechannel.addChannel(channel);
                     }
+		    //add sec pattern
+		    if (securityPatterns.get(((TMLADWriteChannel)tgc).securityContext)!=null){
+			tmlwritechannel.securityPattern= securityPatterns.get(((TMLADWriteChannel)tgc).securityContext);
+		    }
                     activity.addElement(tmlwritechannel);
                     ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK);
                     listE.addCor(tmlwritechannel, tgc);
diff --git a/src/ui/tmlad/TMLADDecrypt.java b/src/ui/tmlad/TMLADDecrypt.java
index 07dbb9ea52253b23939694dd229fb749e8be4b23..f78feae02781c4bff2fa5bfb0ff164851c81e3fc 100755
--- a/src/ui/tmlad/TMLADDecrypt.java
+++ b/src/ui/tmlad/TMLADDecrypt.java
@@ -84,7 +84,7 @@ public class TMLADDecrypt extends TGCWithoutInternalComponent implements Embedde
         editable = true;
         removable = true;
         
-        name = "encrypt";
+        name = "decrypt";
         
         myImageIcon = IconManager.imgic214;
     }
@@ -197,7 +197,7 @@ public boolean editOndoubleClick(JFrame frame) {
     }
     
     public int getType() {
-        return TGComponentManager.TMLAD_ENCRYPT;
+        return TGComponentManager.TMLAD_DECRYPT;
     }
     
     public int getDefaultConnector() {