diff --git a/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java b/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java
index b76ef5c650b2695a26f64cb6840464fd1bf67b66..b8124c388a86658168ccd82b09ba2f4442666df8 100644
--- a/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java
+++ b/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java
@@ -18,6 +18,8 @@ import ui.TGComponent;
 import java.io.Reader;
 import java.util.*;
 
+import org.apache.batik.anim.timing.Trace;
+
 
 public class SecurityGenerationForTMAP implements Runnable {
     String appName;
@@ -363,7 +365,7 @@ public class SecurityGenerationForTMAP implements Runnable {
                             TraceManager.addDev("362: " + chan.getOriginTask().getName().split("__")[1]);
                             if (hsmTasks.contains(chan.getOriginTask().getName().split("__")[1])) {
                                 SecurityPattern secPattern = new SecurityPattern("hsmSec_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                                secPattern.originTask = chan.getOriginTask().getName().replaceAll(title + "__", "");
+                                secPattern.originTask = "HSM_" + taskHSMMap.get(chan.getOriginTask().getName().replaceAll(title + "__", ""));
                                 channelSecMap.put(chanName, secPattern);
                                 TraceManager.addDev("portInTask=" + portInTask(chan.getOriginTask(), chanName));
                                 TraceManager.addDev("hsmSecOutChannels=" + hsmSecOutChannels.get(chan.getOriginTask()).contains(chanName));
@@ -425,7 +427,7 @@ public class SecurityGenerationForTMAP implements Runnable {
                             }
                             if (hsmTasks.contains(chan.getOriginTask().getName().split("__")[1])) {
                                 SecurityPattern secPattern = new SecurityPattern("hsmSec_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                                secPattern.originTask = chan.getOriginTask().getName().replaceAll(title + "__", "");
+                                secPattern.originTask = "HSM_" + taskHSMMap.get(chan.getOriginTask().getName().replaceAll(title + "__", ""));
                                 channelSecMap.put(chanName, secPattern);
                                 if (!hsmSecOutChannels.get(chan.getOriginTask()).contains(chanName) && portInTask(chan.getOriginTask(), chanName)) {
                                     HSMChannel hsmchan = new HSMChannel(chanName, chan.getOriginTask().getName().split("__")[1], HSMChannel.MAC);
@@ -483,7 +485,7 @@ public class SecurityGenerationForTMAP implements Runnable {
 								  }*/
                                     if (hsmTasks.contains(orig.getName().split("__")[1])) {
                                         SecurityPattern secPattern = new SecurityPattern("hsmSec_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                                        secPattern.originTask = orig.getName().replaceAll(title + "__", "");
+                                        secPattern.originTask = "HSM_" + taskHSMMap.get(orig.getName().replaceAll(title + "__", ""));
                                         channelSecMap.put(chanName, secPattern);
                                         if (!hsmSecOutChannels.get(orig).contains(chanName) && portInTask(orig, chanName)) {
                                             HSMChannel hsmchan = new HSMChannel(chanName, orig.getName().split("__")[1], HSMChannel.SENC);
@@ -543,7 +545,7 @@ public class SecurityGenerationForTMAP implements Runnable {
 								  }*/
                                     if (hsmTasks.contains(orig.getName().split("__")[1])) {
                                         SecurityPattern secPattern = new SecurityPattern("hsmSec_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                                        secPattern.originTask = orig.getName().replaceAll(title + "__", "");
+                                        secPattern.originTask = "HSM_" + taskHSMMap.get(orig.getName().replaceAll(title + "__", ""));
                                         channelSecMap.put(chanName, secPattern);
                                         if (!hsmSecOutChannels.get(orig).contains(chanName) && portInTask(orig, chanName)) {
                                             HSMChannel hsmchan = new HSMChannel(chanName, orig.getName().split("__")[1], HSMChannel.MAC);
@@ -678,21 +680,43 @@ public class SecurityGenerationForTMAP implements Runnable {
                 for (ChannelData hsmChan : hsmChans) {
                     if (!hsmChan.isChan) {
                         TMLRequest request = new TMLRequest(hsmChan.name, hsm.getReferenceObject());
-                        request.addOriginTask(hsm);
-                        request.setDestinationTask(comp);
+                        TraceManager.addDev("request= " + hsmChan.name);
+                        TraceManager.addDev("originTask = " + hsm.getName());
+                        TraceManager.addDev("desTask = " + comp.getName());
+                        if (hsmChan.isOrigin) {
+                            request.addOriginTask(hsm);
+                            request.setDestinationTask(comp);
+                        } else {
+                            request.addOriginTask(comp);
+                            request.setDestinationTask(hsm);
+                        }
                         hsm.setRequest(request);
                         comp.setRequest(request);
                         request.addParam(new TMLType(TMLType.NATURAL));
                         tmlmodel.addRequest(request);
                     } else {
                         TMLChannel channel = new TMLChannel(hsmChan.name, hsm.getReferenceObject());
-                        channel.setOriginTask(hsm);
-                        channel.setDestinationTask(comp);
                         channel.setPorts(new TMLPort(channel.getName(), channel.getReferenceObject()), new TMLPort(channel.getName(), channel.getReferenceObject()));
-                        hsm.addWriteTMLChannel(channel);
-                        hsm.addTMLChannel(channel); /// IN TMLChannel and WriteTMLChannel ??
-                        comp.addReadTMLChannel(channel);
-                        comp.addTMLChannel(channel);
+                        TraceManager.addDev("channel= " + hsmChan.name);
+                        TraceManager.addDev("originTask = " + hsm.getName());
+                        TraceManager.addDev("desTask = " + comp.getName());
+                        if (hsmChan.isOrigin) {
+                            channel.setOriginTask(hsm);
+                            channel.setDestinationTask(comp);
+                            comp.addReadTMLChannel(channel);
+                            hsm.addWriteTMLChannel(channel);
+                        } else {
+                            channel.setOriginTask(comp);
+                            channel.setDestinationTask(hsm);
+                            hsm.addReadTMLChannel(channel);
+                            comp.addWriteTMLChannel(channel);
+                        }
+                        
+                        
+                        
+                        //hsm.addTMLChannel(channel); /// IN TMLChannel and WriteTMLChannel ??
+                        
+                        //comp.addTMLChannel(channel);
                         tmlmodel.addChannel(channel);
                     }
                 }
@@ -748,6 +772,16 @@ public class SecurityGenerationForTMAP implements Runnable {
             linkMemoryWithBus.hwnode = mem;
             arch.addHwLink(linkMemoryWithBus);
         }
+        TraceManager.addDev("BEFORE");
+        for (TMLTask task : tmlmodel.getTasks()) {
+            TraceManager.addDev("taskkk = " + task.getName());
+            for (TMLActivityElement elem : task.getActivityDiagram().getElements()) {
+                if (elem instanceof TMLExecC) {
+                    TMLExecC ex = (TMLExecC) elem;
+                    TraceManager.addDev("execC: " + ex.getName() + " sec: pattern: name : " + ex.securityPattern.name + " process: " + + ex.securityPattern.process);
+                }
+            }
+        }
 
         for (TMLTask task : toSecureRev.keySet()) {
             // TraceManager.addDev("Adding nonces to " + task.getName());
@@ -767,9 +801,9 @@ public class SecurityGenerationForTMAP implements Runnable {
                     channel.setDestinationTask(task2);
                     channel.setPorts(new TMLPort(channel.getName(), channel.getReferenceObject()), new TMLPort(channel.getName(), channel.getReferenceObject()));
                     task.addWriteTMLChannel(channel);
-                    task.addTMLChannel(channel); /// IN TMLChannel and WriteTMLChannel ??
+                    //task.addTMLChannel(channel); /// IN TMLChannel and WriteTMLChannel ??
                     task2.addReadTMLChannel(channel);
-                    task2.addTMLChannel(channel);
+                    //task2.addTMLChannel(channel);
                     tmlmodel.addChannel(channel);
                     
                     List<TMLChannel> chans2 = tmlmodel.getChannelsFromMe(task2);
@@ -1042,25 +1076,21 @@ public class SecurityGenerationForTMAP implements Runnable {
                     writeChannel.setEncForm(true);
                     fromStart = taskAD.getPrevious(chan);
 
-                    TMLSendRequest req = new TMLSendRequest("startHSM_" + taskHSMMap.get(task.getName().split("__")[1]), taskAD.getReferenceObject());
-                    //TMLADSendRequest req = new TMLADSendRequest(xpos, ypos + yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-                    //req.setRequestName("startHSM_" + taskHSMMap.get(task.getName().split("__")[1]));
-                    TraceManager.addDev("chanNam="+chanName);
-                    for (String st : channelIndexMap.keySet()) {
-                        TraceManager.addDev("channelIndexMap="+st);
-                    }
-                    for (String st : channelIndexMap.keySet()) {
-                        TraceManager.addDev("channelIndexMap.value="+channelIndexMap.get(st));
+                    TMLSendRequest reqSend = new TMLSendRequest("startHSM_" + taskHSMMap.get(task.getName().split("__")[1]), taskAD.getReferenceObject());
+                    
+                    TMLRequest req = tmlmodel.getRequestByName(reqSend.getName());
+                    if (req != null) {
+                        reqSend.setRequest(req);
                     }
-                    if (req.getNbOfParams() > 0) {
-                        req.setParam(Integer.toString(channelIndexMap.get(chanName)), 0);
+
+                    if (reqSend.getNbOfParams() > 0) {
+                        reqSend.setParam(Integer.toString(channelIndexMap.get(chanName)), 0);
                     } else {
-                        req.addParam(Integer.toString(channelIndexMap.get(chanName)));
+                        reqSend.addParam(Integer.toString(channelIndexMap.get(chanName)));
                     }
                     
-
-                    fromStart.setNewNext(chan, req);
-                    taskAD.addElement(req);
+                    fromStart.setNewNext(chan, reqSend);
+                    taskAD.addElement(reqSend);
                     //Add write channel operator
                     TMLWriteChannel wr = new TMLWriteChannel("data_" + chanName + "_" + task.getName().split("__")[1], taskAD.getReferenceObject());
                     if (tmlmodel.getChannelByName(wr.getName()) != null) {
@@ -1068,11 +1098,13 @@ public class SecurityGenerationForTMAP implements Runnable {
                     } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) {
                         wr.addChannel(tmlmodel.getChannelByShortName(wr.getName()));
                     }
-                    wr.setNbOfSamples("1");
+                    TraceManager.addDev("write channel: " + wr.getName() + " in task: " + task.getName());
+                    TraceManager.addDev("channel: " + wr.getChannel(0).getName() + " in task: " + task.getName());
+                    wr.setNbOfSamples("1"); 
                     wr.setEncForm(false);
                     wr.securityPattern = channelSecMap.get(chanName);
                     taskAD.addElement(wr);
-                    req.addNext(wr);
+                    reqSend.addNext(wr);
                     wr.addNext(chan);
                     //Receive any nonces if ensuring authenticity
                     if (nonceOutChannels.get(task).contains(channel)) {
@@ -1102,7 +1134,7 @@ public class SecurityGenerationForTMAP implements Runnable {
                         taskAD.addElement(rd);
                         wr.setNewNext(chan, rd);;
 
-                        TMLWriteChannel wr2 = new TMLWriteChannel("data_" + chanName + "_" + task.getName().split("__")[1], taskAD);
+                        TMLWriteChannel wr2 = new TMLWriteChannel("data_" + chanName + "_" + task.getName().split("__")[1], taskAD.getReferenceObject());
                         if (tmlmodel.getChannelByName(wr2.getName()) != null) {
                             wr2.addChannel(tmlmodel.getChannelByName(wr2.getName()));
                         } else if (tmlmodel.getChannelByShortName(wr2.getName()) != null) {
@@ -1166,15 +1198,19 @@ public class SecurityGenerationForTMAP implements Runnable {
                 
                     fromStart = taskAD.getPrevious(chan);
                    
-                    TMLSendRequest req = new TMLSendRequest("startHSM_" + taskHSMMap.get(task.getName().split("__")[1]), taskAD.getReferenceObject());
-
-                    if (req.getNbOfParams() > 0) {
-                        req.setParam(Integer.toString(channelIndexMap.get(chanName)), 0);
+                    TMLSendRequest reqSend = new TMLSendRequest("startHSM_" + taskHSMMap.get(task.getName().split("__")[1]), taskAD.getReferenceObject());
+                    TraceManager.addDev("reqSend0="+reqSend.getName());
+                    TMLRequest req = tmlmodel.getRequestByName(reqSend.getName());
+                    if (req != null) {
+                        reqSend.setRequest(req);
+                    }
+                    if (reqSend.getNbOfParams() > 0) {
+                        reqSend.setParam(Integer.toString(channelIndexMap.get(chanName)), 0);
                     } else {
-                        req.addParam(Integer.toString(channelIndexMap.get(chanName)));
+                        reqSend.addParam(Integer.toString(channelIndexMap.get(chanName)));
                     }
-                    taskAD.addElement(req);
-                    fromStart.setNewNext(chan, req);
+                    taskAD.addElement(reqSend);
+                    fromStart.setNewNext(chan, reqSend);
 
                     //Add write channel operator
                     TMLWriteChannel wr = new TMLWriteChannel("data_" + chanName + "_" + task.getName().split("__")[1], taskAD.getReferenceObject());
@@ -1183,12 +1219,14 @@ public class SecurityGenerationForTMAP implements Runnable {
                     } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) {
                         wr.addChannel(tmlmodel.getChannelByShortName(wr.getName()));
                     }
+                    TraceManager.addDev("write channel: " + wr.getName() + " in task: " + task.getName());
+                    TraceManager.addDev("channel: " + wr.getChannel(0).getName() + " in task: " + task.getName());
                     wr.securityPattern = channelSecMap.get(chanName);
                     wr.setNbOfSamples("1");
                     taskAD.addElement(wr);
 
                     //Add connector between request and write
-                    req.addNext(wr);
+                    reqSend.addNext(wr);
                     wr.addNext(chan);
                 
                     if (nonceInChannels.get(task).contains(channel)) {
@@ -1511,6 +1549,16 @@ public class SecurityGenerationForTMAP implements Runnable {
                 }
             }
         }
+        TraceManager.addDev("AFTER");
+        for (TMLTask task : tmlmodel.getTasks()) {
+            TraceManager.addDev("taskkk = " + task.getName());
+            for (TMLActivityElement elem : task.getActivityDiagram().getElements()) {
+                if (elem instanceof TMLExecC) {
+                    TMLExecC ex = (TMLExecC) elem;
+                    TraceManager.addDev("execC: " + ex.getName() + " sec: pattern: name : " + ex.securityPattern.name + " process: " + + ex.securityPattern.process);
+                }
+            }
+        }
         return;
     }
 
@@ -1577,8 +1625,10 @@ public class SecurityGenerationForTMAP implements Runnable {
                     choice2 = new TMLChoice("choice2", taskAD.getReferenceObject());
                     taskAD.addElement(choice2);
                     //Connect new choice operator to top choice
+                    choice.addGuard("");
                     choice.addNext(choice2);
                 }
+                choice2.addGuard("[channelIndex==" + channelIndexMap.get(ch.name) + "]");
                 TMLReadChannel rd = new TMLReadChannel("data_" + ch.name + "_" + ch.task, taskAD.getReferenceObject());
                 rd.addChannel(tmlmodel.getChannelByName("data_" + ch.name + "_" + ch.task));
                 rd.securityPattern = channelSecMap.get(ch.name);
@@ -1587,11 +1637,29 @@ public class SecurityGenerationForTMAP implements Runnable {
                 //Connect choice and readchannel
                 choice2.addNext(rd);
 
+                //Recieve plaintext data if encrypting
+                if (ch.secType != HSMChannel.DEC) {
+                    rd.setEncForm(false);
+                }
+
+                //If needed, receive nonce from task
+                if (!ch.nonceName.equals("")) {
+                    rd = new TMLReadChannel(("data_" + ch.name + "_" + ch.task), taskAD.getReferenceObject());
+                    rd.addChannel(tmlmodel.getChannelByName("data_" + ch.name + "_" + ch.task));
+                    rd.securityPattern = channelSecMap.get(ch.nonceName);
+                    rd.setNbOfSamples("1"); 
+                    taskAD.addElement(rd);
+
+                    choice2.getNextElement(choice2.getNbNext()-1).addNext(rd);
+                }
+
+
                 TMLWriteChannel wr = new TMLWriteChannel("retData_" + ch.name + "_" + ch.task, taskAD.getReferenceObject());
                 wr.addChannel(tmlmodel.getChannelByName("retData_" + ch.name + "_" + ch.task));
                 taskAD.addElement(wr);
                 wr.securityPattern = channelSecMap.get(ch.name);
                 wr.setNbOfSamples("1");
+                TraceManager.addDev("HSMChannel: ch =" + ch.name + " secType=" + ch.secType);
                 if (ch.secType == HSMChannel.DEC) {
                     TMLExecC dec = new TMLExecC(channelSecMap.get(ch.name).name, taskAD.getReferenceObject());
                     dec.securityPattern = new SecurityPattern(channelSecMap.get(ch.name));
@@ -1614,6 +1682,12 @@ public class SecurityGenerationForTMAP implements Runnable {
 
                     //Connect decrypt and writechannel
                     dec.addNext(wr);
+                    //Add Stop
+                    TMLStopState stop = new TMLStopState("stop", taskAD.getReferenceObject());
+                    taskAD.addElement(stop);
+
+                    //Connext stop and write channel
+                    wr.addNext(stop);
                 } else {
                     TMLExecC enc = new TMLExecC(channelSecMap.get(ch.name).name, taskAD.getReferenceObject());
                     enc.securityPattern = new SecurityPattern(channelSecMap.get(ch.name));
@@ -1670,7 +1744,6 @@ public class SecurityGenerationForTMAP implements Runnable {
                 rd.addChannel(tmlmodel.getChannelByName("data_" + ch.name + "_" + ch.task));
                 rd.securityPattern = channelSecMap.get(ch.name);
                 rd.setNbOfSamples("1"); 
-                rd.setNbOfSamples("1"); 
                 taskAD.addElement(rd);
 
                 //Recieve plaintext data if encrypting
@@ -1689,7 +1762,7 @@ public class SecurityGenerationForTMAP implements Runnable {
                     rd.setNbOfSamples("1"); 
                     taskAD.addElement(rd);
 
-                    choice.getNextElement(0).addNext(rd);
+                    choice.getNextElement(choice.getNbNext()-1).addNext(rd);
 
                 }
 
@@ -1704,8 +1777,9 @@ public class SecurityGenerationForTMAP implements Runnable {
                 wr.setNbOfSamples("1");
                 wr.securityPattern = channelSecMap.get(ch.name);
                 taskAD.addElement(wr);
-
+                TraceManager.addDev("0 HSMChannel: ch =" + ch.name + " secType=" + ch.secType);
                 if (ch.secType == HSMChannel.DEC) {
+                    TraceManager.addDev("Add Decrypt operator");
                     //Add Decrypt operator
                     TMLExecC dec = new TMLExecC(channelSecMap.get(ch.name).name, taskAD.getReferenceObject());
                     dec.securityPattern = new SecurityPattern(channelSecMap.get(ch.name));
@@ -1728,7 +1802,7 @@ public class SecurityGenerationForTMAP implements Runnable {
                     //Connect decrypt and readchannel
                     rd.addNext(dec);
 
-                    //Connect encrypt and writechannel
+                    //Connect decrypt and writechannel
                     dec.addNext(wr);
 
                     //Add Stop
@@ -1737,8 +1811,12 @@ public class SecurityGenerationForTMAP implements Runnable {
 
                     //Connect stop and write channel
                     wr.addNext(stop);
+                    TraceManager.addDev("rd.getEncForm()=" + rd.getEncForm());
+                    TraceManager.addDev("wr.getEncForm()=" + wr.getEncForm());
+                    TraceManager.addDev("dec.securityPattern.getProcess=" + dec.securityPattern.process);
 
                 } else {
+                    TraceManager.addDev("Add Encrypt operator");
                     TMLExecC enc = new TMLExecC(channelSecMap.get(ch.name).name, taskAD.getReferenceObject());
                     enc.securityPattern = new SecurityPattern(channelSecMap.get(ch.name));
                     enc.securityPattern.setProcess(SecurityPattern.ENCRYPTION_PROCESS);
@@ -1779,7 +1857,9 @@ public class SecurityGenerationForTMAP implements Runnable {
                     //Add Stop
                     TMLStopState stop = new TMLStopState("stop", taskAD.getReferenceObject());
                     taskAD.addElement(stop);
-
+                    TraceManager.addDev("rd.getEncForm()=" + rd.getEncForm());
+                    TraceManager.addDev("wr.getEncForm()=" + wr.getEncForm());
+                    TraceManager.addDev("enc.securityPattern.getProcess=" + enc.securityPattern.process);
                     //Connect stop and write channel
                     wr.addNext(stop);
                 }
diff --git a/src/main/java/ui/DrawerTMLModeling.java b/src/main/java/ui/DrawerTMLModeling.java
index a98f08c28c502663c86e09df913365db6d0c7385..bd826ed7ad409da9cc9b4f96869927057a699fba 100644
--- a/src/main/java/ui/DrawerTMLModeling.java
+++ b/src/main/java/ui/DrawerTMLModeling.java
@@ -674,6 +674,8 @@ public class DrawerTMLModeling  {
             read.setSamples(readT.getNbOfSamples());
             if (readT.securityPattern != null) {
                 read.setSecurityContext(readT.securityPattern.name);
+                read.setEncForm(readT.getEncForm());
+                read.setIsAttacker(readT.isAttacker());
             }
             return read;
 
@@ -718,6 +720,8 @@ public class DrawerTMLModeling  {
 
             if (writeT.securityPattern != null) {
                 write.setSecurityContext(writeT.securityPattern.name);
+                write.setEncForm(writeT.getEncForm());
+                write.setIsAttacker(writeT.isAttacker());
             }
 
             return write;
diff --git a/src/main/java/ui/tmlad/TMLADReadChannel.java b/src/main/java/ui/tmlad/TMLADReadChannel.java
index 3b36ef69251431ba8ffd3c25c9620dbfa98f5479..828a642f421da4327d05b0cc0d0a0cdea74f1e22 100755
--- a/src/main/java/ui/tmlad/TMLADReadChannel.java
+++ b/src/main/java/ui/tmlad/TMLADReadChannel.java
@@ -536,6 +536,10 @@ public class TMLADReadChannel extends TADComponentWithoutSubcomponents/* Issue #
         return isAttacker;
     }
 
+    public void setIsAttacker(boolean _isAttacker) {
+        isAttacker = _isAttacker;
+    }
+
     @Override
     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 57d39853cccfb933f392a574570e797bf551e459..b103f2542bbb70804f8670619ec4f33bec9b7609 100755
--- a/src/main/java/ui/tmlad/TMLADWriteChannel.java
+++ b/src/main/java/ui/tmlad/TMLADWriteChannel.java
@@ -486,6 +486,10 @@ public class TMLADWriteChannel extends TADComponentWithoutSubcomponents/* Issue
         return isAttacker;
     }
 
+    public void setIsAttacker(boolean _isAttacker) {
+        isAttacker = _isAttacker;
+    }
+
 	public boolean getEncForm(){
 		return isEncForm;
 	}