From ed76f2da91d82a6ff13ba3432713f2af7db628f9 Mon Sep 17 00:00:00 2001
From: jerray <jawher.jerray@eurecom.fr>
Date: Fri, 9 Feb 2024 13:24:50 +0100
Subject: [PATCH] new presentation for SecurityPattern

---
 .../java/tmltranslator/SecurityPattern.java   |  142 +-
 .../tmltranslator/TMLActivityElement.java     |   10 +-
 .../TMLActivityElementWithAction.java         |   19 +
 src/main/java/tmltranslator/TMLChannel.java   |    7 +
 src/main/java/tmltranslator/TMLMapping.java   |   10 +-
 .../TMLMappingTextSpecification.java          |    4 +-
 src/main/java/tmltranslator/TMLModeling.java  |  676 ++--------
 .../java/tmltranslator/TMLSyntaxChecking.java |    2 +-
 .../tmltranslator/TMLTextSpecification.java   |  155 +--
 .../SecurityGenerationForTMAP.java            | 1163 ++++++++---------
 .../toavatar/FullTML2Avatar.java              |  388 +++---
 .../tmltranslator/toavatarsec/TML2Avatar.java |  850 ++++++------
 .../ui/ActivityDiagram2TMLTranslator.java     |   38 +-
 src/main/java/ui/DrawerTMAPModeling.java      |    2 +-
 src/main/java/ui/DrawerTMLModeling.java       |   43 +-
 src/main/java/ui/GTMLModeling.java            |   16 +-
 src/main/java/ui/GTURTLEModeling.java         |   22 +-
 src/main/java/ui/HSMGeneration.java           |    8 +-
 src/main/java/ui/MainGUI.java                 |    4 +-
 src/main/java/ui/SecurityGeneration.java      |    2 +-
 .../window/JDialogProverifVerification.java   |    4 +-
 .../tmltranslator/DiplodocusSecurityTest.java |   38 +-
 .../tmltranslator/TMLComparingMethodTest.java |    6 +-
 .../keyexchange.tml                           |    4 +-
 .../test_diplo_security_models/nonce.tml      |    4 +-
 25 files changed, 1688 insertions(+), 1929 deletions(-)

diff --git a/src/main/java/tmltranslator/SecurityPattern.java b/src/main/java/tmltranslator/SecurityPattern.java
index fa09f6f09c..cea922d4eb 100644
--- a/src/main/java/tmltranslator/SecurityPattern.java
+++ b/src/main/java/tmltranslator/SecurityPattern.java
@@ -48,8 +48,6 @@ import java.util.Objects;
 
 
 public class SecurityPattern {
-    public final static int ENCRYPTION_PROCESS = 1;
-    public final static int DECRYPTION_PROCESS = 2;
 
     public final static String SYMMETRIC_ENC_PATTERN = "Symmetric Encryption";
     public final static String ASYMMETRIC_ENC_PATTERN = "Asymmetric Encryption";
@@ -58,22 +56,19 @@ public class SecurityPattern {
     public final static String NONCE_PATTERN = "Nonce";
     public final static String ADVANCED_PATTERN = "Advanced";
 
-    public String name = "";
-    public String type = "";
-    public int overhead = 0;
-    public int size = 0;
-    public int encTime = 0;
-    public int decTime = 0;
+    private String name = "";
+    private String type = "";
+    private int overhead = 0;
+    private int size = 0;
+    private int encTime = 0;
+    private int decTime = 0;
+    private AvatarState state1;
+    private AvatarState state2;
 
-    public String originTask;
-    public AvatarState state1;
-    public AvatarState state2;
-
-    public String nonce;
-    public String formula;
-    public String key;
-    public String algorithm = "";
-    public int process = 0;  // encrypt or decrypt
+    private String nonce;
+    private String formula;
+    private String key;
+    private String algorithm = "";
 
     public SecurityPattern(String _name, String _type, String _overhead, String _size, String _enctime, String _dectime, String _nonce,
                            String _formula, String _key) {
@@ -112,20 +107,6 @@ public class SecurityPattern {
         } catch (NumberFormatException e) {}
     }
 
-
-    public SecurityPattern(SecurityPattern secPattern) {
-        this.name = secPattern.name;
-        this.type = secPattern.type;
-        this.nonce = secPattern.nonce;
-        this.formula = secPattern.formula;
-        this.key = secPattern.key;
-        this.overhead = secPattern.overhead;
-        this.size = secPattern.size;
-        this.decTime = secPattern.decTime;
-        this.encTime = secPattern.encTime;
-        this.originTask = secPattern.originTask;
-    }
-
     public String toXML() {
         String s = "<SECURITYPATTERN ";
 
@@ -135,7 +116,6 @@ public class SecurityPattern {
         s += "\" size=\"" + size;
         s += "\" encTime=\"" + encTime;
         s += "\" decTime=\"" + decTime;
-        s += "\" originTask=\"" + originTask;
         if (state1 != null) {
             s += "\" state1=\"" + state1.getName();
         }
@@ -145,7 +125,6 @@ public class SecurityPattern {
         s += "\" nonce=\"" + nonce;
         s += "\" formula=\"" + formula;
         s += "\" key=\"" + key;
-        s += "\" process=\"" + process;
         s += "\" />\n";
 
         return s;
@@ -155,6 +134,98 @@ public class SecurityPattern {
         return name;
     }
 
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public int getOverhead() {
+        return overhead;
+    }
+
+    public void setOverhead(int overhead) {
+        this.overhead = overhead;
+    }
+
+    public int getSize() {
+        return size;
+    }
+
+    public void setSize(int size) {
+        this.size = size;
+    }
+
+    public int getEncTime() {
+        return encTime;
+    }
+
+    public void setEncTime(int encTime) {
+        this.encTime = encTime;
+    }
+
+    public int getDecTime() {
+        return decTime;
+    }
+
+    public void setDecTime(int decTime) {
+        this.decTime = decTime;
+    }
+
+    public AvatarState getState1() {
+        return state1;
+    }
+
+    public void setState1(AvatarState state1) {
+        this.state1 = state1;
+    }
+
+    public AvatarState getState2() {
+        return state2;
+    }
+
+    public void setState2(AvatarState state2) {
+        this.state2 = state2;
+    }
+
+    public String getNonce() {
+        return nonce;
+    }
+
+    public void setNonce(String nonce) {
+        this.nonce = nonce;
+    }
+
+    public String getFormula() {
+        return formula;
+    }
+
+    public void setFormula(String formula) {
+        this.formula = formula;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getAlgorithm() {
+        return algorithm;
+    }
+
+    public void setAlgorithm(String algorithm) {
+        this.algorithm = algorithm;
+    }
+
     public boolean equalSpec(Object o) {
         if (!(o instanceof SecurityPattern)) return false;
 
@@ -165,7 +236,6 @@ public class SecurityPattern {
                 decTime == securityPattern.decTime &&
                 Objects.equals(name,securityPattern.name) &&
                 Objects.equals(type,securityPattern.type) &&
-                Objects.equals(originTask,securityPattern.originTask) &&
                 Objects.equals(nonce,securityPattern.nonce) &&
                 Objects.equals(formula,securityPattern.formula) &&
                 Objects.equals(key,securityPattern.key) &&
@@ -180,10 +250,6 @@ public class SecurityPattern {
         return type.equals(SecurityPattern.NONCE_PATTERN);
     }
 
-    public void setProcess(int _process) {
-        this.process = _process;
-    }
-
     public SecurityPattern deepClone(TMLModeling tmlm) throws TMLCheckingError {
         SecurityPattern sp = new SecurityPattern(name, type, ""+overhead, ""+size, ""+encTime, ""+decTime,
                 nonce, formula, key);
diff --git a/src/main/java/tmltranslator/TMLActivityElement.java b/src/main/java/tmltranslator/TMLActivityElement.java
index 040f21b3fa..7059a42593 100755
--- a/src/main/java/tmltranslator/TMLActivityElement.java
+++ b/src/main/java/tmltranslator/TMLActivityElement.java
@@ -53,7 +53,7 @@ import java.util.Vector;
  */
 public abstract class TMLActivityElement extends TMLElement {
     protected Vector<TMLActivityElement> nexts;
-    public SecurityPattern securityPattern;
+    private SecurityPattern securityPattern;
     private String value = "";
     private boolean canBeCheckedForAccessibility = false;
     private boolean accessibility = false;
@@ -76,6 +76,14 @@ public abstract class TMLActivityElement extends TMLElement {
     public String getValue(){
     	return value;
     }
+
+    public SecurityPattern getSecurityPattern() {
+        return securityPattern;
+    }
+
+    public void setSecurityPattern(SecurityPattern securityPattern) {
+        this.securityPattern = securityPattern;
+    }
     
     public TMLActivityElement getNextElement(int _i) {
         if (_i < getNbNext() ) {
diff --git a/src/main/java/tmltranslator/TMLActivityElementWithAction.java b/src/main/java/tmltranslator/TMLActivityElementWithAction.java
index c5e8213903..c62a29c832 100755
--- a/src/main/java/tmltranslator/TMLActivityElementWithAction.java
+++ b/src/main/java/tmltranslator/TMLActivityElementWithAction.java
@@ -41,6 +41,8 @@
 
 package tmltranslator;
 
+import translator.CheckingError;
+
 import java.util.Objects;
 
 /**
@@ -50,12 +52,29 @@ import java.util.Objects;
  * @author Ludovic APVRILLE
  */
 public abstract class TMLActivityElementWithAction extends TMLActivityElement {
+    public final static int ENCRYPTION_PROCESS = 1;
+    public final static int DECRYPTION_PROCESS = 2;
+
+    private boolean isDecryptionProcess = false;
     protected String action;
 
     public TMLActivityElementWithAction(String _name, Object _referenceObject) {
         super(_name, _referenceObject);
     }
 
+    public boolean isDecryptionProcess() {
+        return isDecryptionProcess;
+    }
+
+    public void setDecryptionProcess(boolean decryption) throws TMLCheckingError {
+        isDecryptionProcess = decryption;
+        if (decryption) {
+            if (getSecurityPattern() == null) {
+                throw new TMLCheckingError(CheckingError.STRUCTURE_ERROR, "No security Pattern for " + this.getName());
+            }
+        }
+    }
+
     public void setAction(String _action) {
         action = _action;
     }
diff --git a/src/main/java/tmltranslator/TMLChannel.java b/src/main/java/tmltranslator/TMLChannel.java
index 8966cacd00..bfe881cf24 100755
--- a/src/main/java/tmltranslator/TMLChannel.java
+++ b/src/main/java/tmltranslator/TMLChannel.java
@@ -521,6 +521,13 @@ public class TMLChannel extends TMLCommunicationElement {
         return "channel__";
     }
 
+    public String getChannelName() {
+        if (!getName().contains("__")) {
+            return getName();
+        }
+        return getName().split("__")[1];
+    }
+
     public boolean isBlockingAtOrigin() {
         switch (type) {
             case BRBW:
diff --git a/src/main/java/tmltranslator/TMLMapping.java b/src/main/java/tmltranslator/TMLMapping.java
index bafe77601d..db611e2227 100755
--- a/src/main/java/tmltranslator/TMLMapping.java
+++ b/src/main/java/tmltranslator/TMLMapping.java
@@ -79,7 +79,7 @@ public class TMLMapping<E> {
 
     // Security
     public boolean firewall = false;
-    public Map<SecurityPattern, List<HwMemory>> mappedSecurity = new HashMap<SecurityPattern, List<HwMemory>>(); // Keys
+    private Map<SecurityPattern, List<HwMemory>> mappedSecurity = new HashMap<SecurityPattern, List<HwMemory>>(); // Keys
     private List<String[]> pragmas = new ArrayList<String[]>();
 
     // CPs
@@ -122,6 +122,10 @@ public class TMLMapping<E> {
         new TML2ProVerif(this);
     }
 
+    public Map<SecurityPattern, List<HwMemory>> getMappedSecurity() {
+        return mappedSecurity;
+    }
+
     public List<HwMemory> getMappedMemory(SecurityPattern sp) {
         return mappedSecurity.get(sp);
     }
@@ -137,8 +141,8 @@ public class TMLMapping<E> {
     }
 
     public SecurityPattern getSecurityPatternByName(String name) {
-        for (SecurityPattern sp:tmlm.secPatterns) {
-            if (sp.name.equals(name)) {
+        for (SecurityPattern sp:tmlm.getSecPatterns()) {
+            if (sp.getName().equals(name)) {
                 return sp;
             }
         }
diff --git a/src/main/java/tmltranslator/TMLMappingTextSpecification.java b/src/main/java/tmltranslator/TMLMappingTextSpecification.java
index 1531abb7f3..d4d659c5a5 100755
--- a/src/main/java/tmltranslator/TMLMappingTextSpecification.java
+++ b/src/main/java/tmltranslator/TMLMappingTextSpecification.java
@@ -258,8 +258,8 @@ public class TMLMappingTextSpecification<E> {
 
     public String makeMappingSecurityPatterns(TMLMapping<E> tmlmap) {
         String tmp = "";
-        for (SecurityPattern sp : tmlmap.mappedSecurity.keySet()) {
-            List<HwMemory> mems = tmlmap.mappedSecurity.get(sp);
+        for (SecurityPattern sp : tmlmap.getMappedSecurity().keySet()) {
+            List<HwMemory> mems = tmlmap.getMappedSecurity().get(sp);
             for (HwMemory mem : mems) {
                 tmp += "MAPSEC " + prepareString(mem.getName()) + " " + prepareString(sp.getName()) + CR;
             }
diff --git a/src/main/java/tmltranslator/TMLModeling.java b/src/main/java/tmltranslator/TMLModeling.java
index a649a59ffa..19af02ff5b 100755
--- a/src/main/java/tmltranslator/TMLModeling.java
+++ b/src/main/java/tmltranslator/TMLModeling.java
@@ -39,10 +39,7 @@
 
 package tmltranslator;
 
-import avatartranslator.AvatarAttribute;
-import avatartranslator.AvatarPragmaAuthenticity;
-import avatartranslator.AvatarPragmaReachability;
-import avatartranslator.AvatarPragmaSecret;
+import avatartranslator.*;
 import myutil.Conversion;
 import myutil.TraceManager;
 import proverifspec.ProVerifOutputAnalyzer;
@@ -65,10 +62,9 @@ public class TMLModeling<E> {
     public final String SEP1 = "_S_";
 
     // Security
-    public List<String> securityPatterns;
-    public List<SecurityPattern> secPatterns;
-    public Map<String, List<String>> secChannelMap;
-    public Map<SecurityPattern, List<TMLTask>> securityTaskMap;
+    private List<SecurityPattern> secPatterns;
+    private Map<TMLChannel, Set<AvatarPragma>> secChannelMap;
+    private Map<SecurityPattern, List<TMLTask>> securityTaskMap;
 
     // Tasks and communication
     private List<TMLTask> tasks;
@@ -113,13 +109,29 @@ public class TMLModeling<E> {
 
     public SecurityPattern getSecurityPattern(String name) {
         for (SecurityPattern sp : secPatterns) {
-            if (sp.name.equals(name)) {
+            if (sp.getName().equals(name)) {
                 return sp;
             }
         }
         return null;
     }
 
+    public List<SecurityPattern> getSecPatterns() {
+        return secPatterns;
+    }
+
+    public Map<SecurityPattern, List<TMLTask>> getSecurityTaskMap() {
+        return securityTaskMap;
+    }
+
+    public Map<TMLChannel, Set<AvatarPragma>> getSecChannelMap() {
+        return secChannelMap;
+    }
+
+    public void setSecChannelMap(Map<TMLChannel, Set<AvatarPragma>> secChannelMap) {
+        this.secChannelMap = secChannelMap;
+    }
+
     public TMLMapping<E> getDefaultMapping() {
         TMLMapping<E> tmlmapping;
         tmlmapping = new TMLMapping<>(this, new TMLArchitecture(), false);
@@ -135,10 +147,9 @@ public class TMLModeling<E> {
         requests = new ArrayList<TMLRequest>();
         pragmas = new ArrayList<String>();
 
-        securityPatterns = new ArrayList<String>();
         secPatterns = new ArrayList<SecurityPattern>();
 
-        secChannelMap = new HashMap<String, List<String>>();
+        secChannelMap = new HashMap<TMLChannel, Set<AvatarPragma>>();
         securityTaskMap = new HashMap<SecurityPattern, List<TMLTask>>();
 
         checkedActivities = new HashMap<>();
@@ -775,113 +786,54 @@ public class TMLModeling<E> {
     public void backtrace(ProVerifOutputAnalyzer pvoa, String mappingName) {
         //TraceManager.addDev("Backtracing Confidentiality");
         Map<AvatarPragmaSecret, ProVerifQueryResult> confResults = pvoa.getConfidentialityResults();
-
-        for (AvatarPragmaSecret pragma : confResults.keySet()) {
-            //TraceManager.addDev("pragma "  + pragma);
-            ProVerifQueryResult result = confResults.get(pragma);
-            //TraceManager.addDev("pragma "  + pragma + " / result proved:" + result.isProved() + " result satisfied:" + result.isSatisfied());
-            if (!result.isProved())
-                continue;
-            int r = result.isSatisfied() ? 2 : 3;
-
-
-            AvatarAttribute attr = pragma.getArg();
-
-            TMLChannel channel = getChannelByShortName(attr.getName().replaceAll("_chData", ""));
-            boolean invalidate = false;
-            if (channel == null) {
-                channel = getChannelByOriginPortName(attr.getName().replaceAll("_chData", ""));
-            }
-            //If an attribute is confidential because it has never been sent on that channel, do not backtrace that result since it is misleading
-            if (channel != null) {
-                //Mark the result only if the writechannel operator is reachable
-                Map<AvatarPragmaReachability, ProVerifQueryResult> reachResults = pvoa.getReachabilityResults();
-                if (reachResults.size() > 0) {
-                    for (AvatarPragmaReachability reachPragma : reachResults.keySet()) {
-                        if (reachPragma.getState().getName().equals("aftersignalstate_reachannel_" + channel.getName())) {
-                            if (!reachResults.get(reachPragma).isSatisfied()) {
-                                TraceManager.addDev("invalidate = true ");
-                                        invalidate = true;
+        for (TMLChannel ch : secChannelMap.keySet()) {
+            if (ch.isCheckConfChannel()) {
+                List<Integer> confStatus = new ArrayList<Integer>();
+                String secName = "";
+                ProVerifResultTrace trace = null;
+                String pragmaString = "";
+                for (AvatarPragma pragma : secChannelMap.get(ch)) {
+                    if (pragma instanceof AvatarPragmaSecret) {
+                        AvatarPragmaSecret pragmaSecret = (AvatarPragmaSecret) pragma;
+                        secName += pragmaSecret.getArg().getName();
+                        ProVerifQueryResult result = confResults.get(pragmaSecret);
+                        if (result != null) {
+                            if (!result.isProved()) {
+                                confStatus.add(1);
+                            } else {
+                                int r = result.isSatisfied() ? 2 : 3;
+                                confStatus.add(r);
                             }
+                            trace = pvoa.getResults().get(pragma).getTrace();
+                            pragmaString = pragma.toString();
                         }
                     }
                 }
-                // Next check if there exists a "write channel" operator that sends unencrypted data
-                boolean found = false;
-                for (TMLTask task : getTasks()) {
-                    TMLActivity act = task.getActivityDiagram();
-                    for (TMLActivityElement elem : act.getElements()) {
-                        if (elem instanceof TMLWriteChannel) {
-                            TMLWriteChannel wr = (TMLWriteChannel) elem;
-                            if (wr.getChannel(0).getName().equals(channel.getName())) {
-                                if (wr.securityPattern == null) {
-                                    found = true;
-                                }
-                            }
-                        }
-                    }
-                }
-                if (!found) {
-                    //TraceManager.addDev("not found, invalidate = true ");
-                    invalidate = true;
-                }
-                for (TMLPortWithSecurityInformation port : channel.ports) {
-                    if (port.getCheckConf()) {
-                        port.setMappingName(mappingName);
-                        if (!invalidate) {
-                            port.setConfStatus(r);
-                            //Add Result Trace also
-                            ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace();
-                            if (trace != null && port.isOrigin()) {
-                                port.setResultTrace(trace);
-                                port.setPragmaString(pragma.toString());
-                            }
-                        }
+
+                int generalConfResult = 1;
+                if (!confStatus.isEmpty()) {
+                    if (confStatus.contains(3)) {
+                        generalConfResult = 3;
+                    } else if (confStatus.contains(1)) {
+                        generalConfResult = 1;
+                    } else {
+                        generalConfResult = 2;
                     }
                 }
-            } else {
-                //TraceManager.addDev("Null channel for backtracing Confidentiality");
-            }
-            TMLRequest req = getRequestByName(attr.getName().replaceAll("_reqData", ""));
-            if (req != null) {
-                for (TMLPortWithSecurityInformation port : req.ports) {
+                for (TMLPortWithSecurityInformation port : ch.ports) {
                     if (port.getCheckConf()) {
-                        port.setConfStatus(r);
+                        port.setConfStatus(generalConfResult);
+                        TraceManager.addDev("secName = " + secName);
+                        port.setSecName(secName);
                         port.setMappingName(mappingName);
-                    }
-                }
-            }
-            TMLEvent ev = getEventByName(attr.getName().replaceAll("_eventData", ""));
-            if (ev != null) {
-                if (ev.port.getCheckConf()) {
-                    ev.port.setConfStatus(r);
-                    ev.port.setMappingName(mappingName);
-                }
-                if (ev.port2.getCheckConf()) {
-                    ev.port2.setConfStatus(r);
-                    ev.port2.setMappingName(mappingName);
-                }
-            }
-
-            //TraceManager.addDev("Attribute name to find channels: " + attr.getName());
-            List<String> channels = secChannelMap.get(attr.getName());
-            if (channels != null) {
-                for (String channelName : channels) {
-                    //TraceManager.addDev("Handling channel " + channelName);
-                    channel = getChannelByShortName(channelName);
-                    if (channel != null) {
-                        for (TMLPortWithSecurityInformation port : channel.ports) {
-                            if (port.getCheckConf()) {
-                                port.setConfStatus(r);
-                                port.setSecName(attr.getName());
-                            }
+                        port.setPragmaString(pragmaString);
+                        if (trace != null) {
+                            port.setResultTrace(trace);
                         }
                     }
                 }
             }
-
         }
-        //
     }
 
     public Object getReference() {
@@ -900,452 +852,73 @@ public class TMLModeling<E> {
     public void backtraceAuthenticity(ProVerifOutputAnalyzer pvoa, String mappingName) {
                 //TraceManager.addDev("\n** Backtracing Authenticity ** ");
         Map<AvatarPragmaAuthenticity, ProVerifQueryAuthResult> authenticityResults = pvoa.getAuthenticityResults();
-        for (AvatarPragmaAuthenticity pragma : authenticityResults.keySet()) {
-            ProVerifQueryAuthResult result = authenticityResults.get(pragma);
-            // TODO: deal directly with pragma instead of s
-            String s = pragma.getAttrB().getAttribute().getBlock().getName()
-                    + "__" + pragma.getAttrB().getAttribute().getName()
-                    + "__" + pragma.getAttrB().getState().getName()
-                    + " ==> "
-                    + pragma.getAttrA().getAttribute().getBlock().getName()
-                    + "__" + pragma.getAttrA().getAttribute().getName()
-                    + "__" + pragma.getAttrA().getState().getName();
-
-            TraceManager.addDev("\n\n **Backtracing Authenticity s=" + s + "  **");    
-            if (result.isProved() && result.isSatisfied()) {
-                TraceManager.addDev("Backtracing Authenticity  proved and  satisfied" );
-                String signalName = s.split("_chData")[0];
-                for (TMLTask t : getTasks()) {
-                    if (signalName.contains(t.getName())) {
-                        signalName = signalName.replace(t.getName() + "__", "");
-                    }
-                }
-                signalName = signalName.split("__")[1];
-                TMLChannel channel = getChannelByShortName(signalName);
-                if (channel != null) {
-                    for (TMLPortWithSecurityInformation port : channel.ports) {
-                        if (port.getCheckAuth()) {
-                            //port.setStrongAuthStatus(2);
-                            port.setStrongAuthStatus(updateStrongAuthenticityStatus(port.getCheckStrongAuthStatus(),
-                                    port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(),
-                                    result.isWeakProved(), result.isWeakSatisfied()));
-                            port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(),
-                                    port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(),
-                                    result.isWeakProved(), result.isWeakSatisfied()));
-                            port.setMappingName(mappingName);
-                            ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace();
-                            if (trace != null && !port.isOrigin()) {
-                                port.setResultTrace(trace);
-                                port.setPragmaString(pragma.toString());
+        for (TMLChannel ch : secChannelMap.keySet()) {
+            if (ch.isCheckAuthChannel()) {
+                List<Integer> weakAuthStatus = new ArrayList<Integer>();
+                List<Integer> strongAuthStatus = new ArrayList<Integer>();
+                String secName = "";
+                ProVerifResultTrace trace = null;
+                String pragmaString = "";
+                for (AvatarPragma pragma : secChannelMap.get(ch)) {
+                    if (pragma instanceof AvatarPragmaAuthenticity) {
+                        AvatarPragmaAuthenticity pragmaAuth = (AvatarPragmaAuthenticity) pragma;
+                        ProVerifQueryAuthResult result = authenticityResults.get(pragmaAuth);
+                        secName += pragmaAuth.getAttrA().getAttribute().getName() + " ";
+                        TraceManager.addDev("\n\n **Backtracing Authenticity s=" + pragma.getName() + "  **");
+                        if (result != null) {
+                            if (!result.isProved()) {
+                                strongAuthStatus.add(1);
+                            } else if (result.isProved() && result.isSatisfied()) {
+                                TraceManager.addDev("Backtracing Authenticity  proved and  satisfied");
+                                strongAuthStatus.add(2);
+                            } else if (result.isProved() && !result.isSatisfied()) {
+                                TraceManager.addDev("Backtracing Authenticity proved but not satisfied");
+                                strongAuthStatus.add(3);
                             }
-                        }
-                    }
-                }
-                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 (TMLPortWithSecurityInformation port : req.ports) {
-                        if (port.getCheckAuth()) {
-                            //port.setStrongAuthStatus(2);
-                            port.setStrongAuthStatus(updateStrongAuthenticityStatus(port.getCheckStrongAuthStatus(),
-                                    port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(),
-                                    result.isWeakProved(), result.isWeakSatisfied()));
-                            port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(),
-                                    port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(),
-                                    result.isWeakProved(), result.isWeakSatisfied()));
-                            port.setMappingName(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.getCheckAuth()) {
-                        ev.port.setStrongAuthStatus(2);
-                        ev.port2.setMappingName(mappingName);
-                    }
-                    if (ev.port2.getCheckAuth()) {
-                        ev.port2.setStrongAuthStatus(2);
-                        ev.port2.setMappingName(mappingName);
-                    }
-                }
 
-                signalName = s.split("__decrypt")[0];
-
-                /*for (TMLTask t: getTasks()) {
-                  if (signalName.contains(t.getName())) {
-                  signalName = signalName.replace(t.getName()+"__","");
-                  }
-                  }*/
-                signalName = signalName.split("__")[1];
-                //   TraceManager.addDev("secpattern " + signalName);
-                List<String> channels = secChannelMap.get(signalName);
-                // TraceManager.addDev("secpattern channels " + channels);
-                if (channels != null) {
-                    for (String channelName : channels) {
-                        channel = getChannelByShortName(channelName);
-                        if (channel != null) {
-                            for (TMLPortWithSecurityInformation port : channel.ports) {
-                                //   TraceManager.addDev("adding to port " + channelName);
-                                if (port.getCheckAuth()) {
-                                    //port.setStrongAuthStatus(2);
-                                    port.setStrongAuthStatus(updateStrongAuthenticityStatus(
-                                            port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(),
-                                            result.isProved(), result.isSatisfied(), result.isWeakProved(),
-                                            result.isWeakSatisfied()));
-                                    port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(),
-                                            port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(),
-                                            result.isWeakProved(), result.isWeakSatisfied()));
-                                    port.setSecName(signalName);
-                                    ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace();
-                                    if (trace != null && !port.isOrigin()) {
-                                        port.setResultTrace(trace);
-                                        port.setPragmaString(pragma.toString());
-                                    }
-                                }
+                            if (!result.isWeakProved()) {
+                                weakAuthStatus.add(1);
+                            } else if (result.isWeakProved() && result.isWeakSatisfied()) {
+                                TraceManager.addDev("Backtracing Authenticity weak proved and weak satisfied");
+                                weakAuthStatus.add(2);
+                            } else if (result.isWeakProved() && !result.isWeakSatisfied()) {
+                                TraceManager.addDev("Backtracing Authenticity weak proved and not weak satisfied");
+                                weakAuthStatus.add(3);
                             }
+                            trace = pvoa.getResults().get(pragma).getTrace();
+                            pragmaString = pragma.toString();
                         }
                     }
                 }
-
-                //In case of HSM
-                signalName = s.split("__decrypt")[0];
-                signalName = signalName.split("__")[1];
-                channels = secChannelMap.get(signalName);
-                if (channels != null) {
-                    for (String channelName : channels) {
-                        if (channelName.contains("retData_") || channelName.contains("data_")) {
-                            channelName = channelName.replaceAll("retData_", "").replaceAll("data_", "");
-                            //String header= channelName.split("__retData_")[0];
-                            for (TMLTask t : getTasks()) {
-                                if (channelName.contains(t.getName().split("__")[1])) {
-                                    channelName = channelName.replace("_" + t.getName().split("__")[1], "");
-                                }
-                            }
-                            channel = getChannelByShortName(channelName);
-                            if (channel != null) {
-                                for (TMLPortWithSecurityInformation port : channel.ports) {
-                                    if (port.getCheckAuth()) {
-                                        //port.setStrongAuthStatus(2);
-                                        port.setStrongAuthStatus(updateStrongAuthenticityStatus(
-                                                port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(),
-                                                result.isProved(), result.isSatisfied(), result.isWeakProved(),
-                                                result.isWeakSatisfied()));
-                                        port.setWeakAuthStatus(updateWeakAuthenticityStatus(
-                                                port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(),
-                                                result.isProved(), result.isSatisfied(), result.isWeakProved(),
-                                                result.isWeakSatisfied()));
-                                        port.setSecName(signalName);
-                                        ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace();
-                                        if (trace != null && !port.isOrigin()) {
-                                            port.setResultTrace(trace);
-                                            port.setPragmaString(pragma.toString());
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            } else if (result.isWeakProved() && result.isWeakSatisfied()) {
-                TraceManager.addDev("Backtracing Authenticity weak proved and weak satisfied");
-                String signalName = s.split("_chData")[0];
-                signalName = signalName.split("__")[1];
-                TMLChannel channel = getChannelByShortName(signalName);
-
-                if (channel != null) {
-                    TraceManager.addDev("Security ports (1): " + channel.getSecurityPorts());
-                    for (TMLPortWithSecurityInformation port : channel.ports) {
-                        if (port.getCheckAuth()) {
-                            //port.setWeakAuthStatus(2);
-                            port.setStrongAuthStatus(updateStrongAuthenticityStatus(port.getCheckStrongAuthStatus(),
-                                    port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(),
-                                    result.isWeakProved(), result.isWeakSatisfied()));
-                            port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(),
-                                    port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(),
-                                    result.isWeakProved(), result.isWeakSatisfied()));
-                            port.setMappingName(mappingName);
-                            ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace();
-                            if (trace != null && !port.isOrigin()) {
-                                port.setResultTrace(trace);
-                                port.setPragmaString(pragma.toString());
-                            }
-                        }
+                int generalStrongAuthResult = 1;
+                int generalWeakAuthResult = 1;
+                if (!weakAuthStatus.isEmpty()) {
+                    if (weakAuthStatus.contains(3)) {
+                        generalWeakAuthResult = 3;
+                    } else if (weakAuthStatus.contains(1)) {
+                        generalWeakAuthResult = 1;
+                    } else {
+                        generalWeakAuthResult = 2;
                     }
-                } else {
-                    TraceManager.addDev("Backtracing Authenticity weak proved and weak satisfied: NULL Channel");
                 }
-
-                signalName = s.split("_reqData")[0];
-                for (TMLTask t : getTasks()) {
-                    if (signalName.contains(t.getName())) {
-                        signalName = signalName.replace(t.getName() + "__", "");
+                if (!strongAuthStatus.isEmpty()) {
+                    if (strongAuthStatus.contains(3)) {
+                        generalStrongAuthResult = 3;
+                    } else if (strongAuthStatus.contains(1)) {
+                        generalStrongAuthResult = 1;
+                    } else {
+                        generalStrongAuthResult = 2;
                     }
                 }
-                TMLRequest req = getRequestByName(signalName);
-                if (req != null) {
-                    for (TMLPortWithSecurityInformation port : req.ports) {
-                        if (port.getCheckAuth()) {
-                            //port.setWeakAuthStatus(2);
-                            port.setStrongAuthStatus(updateStrongAuthenticityStatus(port.getCheckStrongAuthStatus(),
-                                    port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(),
-                                    result.isWeakProved(), result.isWeakSatisfied()));
-                            port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(),
-                                    port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(),
-                                    result.isWeakProved(), result.isWeakSatisfied()));
-                            port.setMappingName(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.getCheckAuth()) {
-                        ev.port.setWeakAuthStatus(2);
-                        ev.port2.setMappingName(mappingName);
-                    }
-                    if (ev.port2.getCheckAuth()) {
-                        ev.port2.setWeakAuthStatus(2);
-                        ev.port2.setMappingName(mappingName);
-                    }
-                }
-                signalName = s.toString().split("__decrypt")[0];
-
-                    /*for (TMLTask t: getTasks()) {
-                      if (signalName.contains(t.getName())) {
-                      signalName = signalName.replace(t.getName()+"__","");
-                      }
-                      }*/
-
-                signalName = signalName.split("__")[1];
-                TraceManager.addDev("Signal name (2): " + signalName);
-                List<String> channels = secChannelMap.get(signalName);
-                if (channels != null) {
-                    for (String channelName : channels) {
-                        channel = getChannelByShortName(channelName);
-
-                        if (channel != null) {
-                            TraceManager.addDev("Security ports (2): " + channel.getSecurityPorts());
-                            for (TMLPortWithSecurityInformation port : channel.ports) {
-                                if (port.getCheckAuth()) {
-                                    //port.setStrongAuthStatus(3);
-                                    port.setStrongAuthStatus(updateStrongAuthenticityStatus(
-                                            port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(),
-                                            result.isProved(), result.isSatisfied(), result.isWeakProved(),
-                                            result.isWeakSatisfied()));
-                                    //port.setWeakAuthStatus(2);
-                                    port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(),
-                                            port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(),
-                                            result.isWeakProved(), result.isWeakSatisfied()));
-                                    port.setSecName(signalName);
-                                    ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace();
-                                    if (trace != null && !port.isOrigin()) {
-                                        port.setResultTrace(trace);
-                                        port.setPragmaString(pragma.toString());
-                                    }
-                                }
-                            }
-                        } else {
-                            TraceManager.addDev("Backtracing Authenticity weak proved and weak satisfied: NULL Channel");
-                        }
-                    }
-                }
-
-                //In case of HSM
-                signalName = s.split("__decrypt")[0];
-                signalName = signalName.split("__")[1];
-                channels = secChannelMap.get(signalName);
-                if (channels != null) {
-                    for (String channelName : channels) {
-                        if (channelName.contains("retData_") || channelName.contains("data_")) {
-                            channelName = channelName.replaceAll("retData_", "").replaceAll("data_", "");
-                            //String header= channelName.split("__retData_")[0];
-                            for (TMLTask t : getTasks()) {
-                                if (channelName.contains(t.getName().split("__")[1])) {
-                                    channelName = channelName.replace("_" + t.getName().split("__")[1], "");
-                                }
-                            }
-                            channel = getChannelByShortName(channelName);
-                            if (channel != null) {
-                                for (TMLPortWithSecurityInformation port : channel.ports) {
-                                    if (port.getCheckAuth()) {
-                                        //port.setWeakAuthStatus(2);
-                                        port.setStrongAuthStatus(updateStrongAuthenticityStatus(
-                                                port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(),
-                                                result.isProved(), result.isSatisfied(), result.isWeakProved(),
-                                                result.isWeakSatisfied()));
-                                        port.setWeakAuthStatus(updateWeakAuthenticityStatus(
-                                                port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(),
-                                                result.isProved(), result.isSatisfied(), result.isWeakProved(),
-                                                result.isWeakSatisfied()));
-                                        port.setSecName(signalName);
-                                        ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace();
-                                        if (trace != null && !port.isOrigin()) {
-                                            port.setResultTrace(trace);
-                                            port.setPragmaString(pragma.toString());
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            } else if (result.isProved() && !result.isSatisfied()) {
-                TraceManager.addDev("Backtracing Authenticity proved but not satisfied");
-                String signalName = s.toString().split("_chData")[0];
-                signalName = signalName.split("__")[signalName.split("__").length - 1];
-
-                TMLChannel channel = getChannelByShortName(signalName);
-
-                if (channel == null) {
-                    channel = getChannelByDestinationPortName(signalName);
-                }
-                if (channel != null) {
-                    for (TMLPortWithSecurityInformation port : channel.ports) {
-                        if (port.getCheckAuth()) {
-                            TraceManager.addDev("Backtracing Authenticity proved but not satisfied / Found port with checkAuth");
-                            //port.setStrongAuthStatus(3);
-                            port.setStrongAuthStatus(updateStrongAuthenticityStatus(port.getCheckStrongAuthStatus(),
-                                    port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(),
-                                    result.isWeakProved(), result.isWeakSatisfied()));
-                            port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(),
-                                    port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(),
-                                    result.isWeakProved(), result.isWeakSatisfied()));
-                            port.setMappingName(mappingName);
-                            ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace();
-                            if (trace != null && !port.isOrigin()) {
-                                port.setResultTrace(trace);
-                                port.setPragmaString(pragma.toString());
-                            }
-                        }
-                    }
-                } else {
-                    TraceManager.addDev("Backtracing Authenticity proved but not satisfied / NULL channel");
-                }
-                signalName = s.toString().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 (TMLPortWithSecurityInformation port : req.ports) {
-                        if (port.getCheckAuth()) {
-                            //port.setStrongAuthStatus(3);
-                            port.setStrongAuthStatus(updateStrongAuthenticityStatus(port.getCheckStrongAuthStatus(),
-                                    port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(),
-                                    result.isWeakProved(), result.isWeakSatisfied()));
-                            port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(),
-                                    port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(),
-                                    result.isWeakProved(), result.isWeakSatisfied()));
-                            port.setMappingName(mappingName);
-                        }
-                    }
-                }
-                signalName = s.toString().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.getCheckAuth()) {
-                        ev.port.setStrongAuthStatus(3);
-                        ev.port2.setMappingName(mappingName);
-                    }
-                    if (ev.port2.getCheckAuth()) {
-                        ev.port2.setStrongAuthStatus(3);
-                        ev.port2.setMappingName(mappingName);
-                    }
-                }
-
-                signalName = s.split("__decrypt")[0];
-                signalName = signalName.split("__")[1];
-                List<String> channels = secChannelMap.get(signalName);
-                for (Map.Entry<String, List<String>> entry : secChannelMap.entrySet()) {
-                    System.out.println(entry.getKey() + ":" + entry.getValue());
-                }
-                
-                if (channels != null) {
-                    for (String channelName : channels) {
-                        channel = getChannelByShortName(channelName);
-                        if (channel != null) {
-                            for (TMLPortWithSecurityInformation port : channel.ports) {
-                                if (port.getCheckAuth()) {
-                                    //port.setStrongAuthStatus(3);
-                                    port.setStrongAuthStatus(updateStrongAuthenticityStatus(
-                                            port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(),
-                                            result.isProved(), result.isSatisfied(), result.isWeakProved(),
-                                            result.isWeakSatisfied()));
-                                    port.setWeakAuthStatus(updateWeakAuthenticityStatus(port.getCheckStrongAuthStatus(),
-                                            port.getCheckWeakAuthStatus(), result.isProved(), result.isSatisfied(),
-                                            result.isWeakProved(), result.isWeakSatisfied()));
-                                    TraceManager.addDev("Backtracing Authenticity not verified " + signalName);
-                                    port.setSecName(signalName);
-                                    ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace();
-                                    if (trace != null && !port.isOrigin()) {
-                                        port.setResultTrace(trace);
-                                        port.setPragmaString(pragma.toString());
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-
-                //In case of HSM
-                signalName = s.split("__decrypt")[0];
-                signalName = signalName.split("__")[1];
-                channels = secChannelMap.get(signalName);
-                if (channels != null) {
-                    for (String channelName : channels) {
-                        if (channelName.contains("retData_") || channelName.contains("data_")) {
-                            channelName = channelName.replaceAll("retData_", "").replaceAll("data_", "");
-                            //String header= channelName.split("__retData_")[0];
-                            for (TMLTask t : getTasks()) {
-                                if (channelName.contains(t.getName().split("__")[1])) {
-                                    channelName = channelName.replace("_" + t.getName().split("__")[1], "");
-                                }
-                            }
-                            channel = getChannelByShortName(channelName);
-                            if (channel != null) {
-                                for (TMLPortWithSecurityInformation port : channel.ports) {
-                                    if (port.getCheckAuth()) {
-                                        //port.setWeakAuthStatus(3);
-                                        port.setStrongAuthStatus(updateStrongAuthenticityStatus(
-                                                port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(),
-                                                result.isProved(), result.isSatisfied(), result.isWeakProved(),
-                                                result.isWeakSatisfied()));
-                                        port.setWeakAuthStatus(updateWeakAuthenticityStatus(
-                                                port.getCheckStrongAuthStatus(), port.getCheckWeakAuthStatus(),
-                                                result.isProved(), result.isSatisfied(), result.isWeakProved(),
-                                                result.isWeakSatisfied()));
-                                        port.setSecName(signalName);
-                                        ProVerifResultTrace trace = pvoa.getResults().get(pragma).getTrace();
-                                        if (trace != null && !port.isOrigin()) {
-                                            port.setResultTrace(trace);
-                                            port.setPragmaString(pragma.toString());
-                                        }
-                                    }
-                                }
-                            }
+                for (TMLPortWithSecurityInformation port : ch.ports) {
+                    if (port.getCheckAuth()) {
+                        port.setStrongAuthStatus(generalStrongAuthResult);
+                        port.setWeakAuthStatus(generalWeakAuthResult);
+                        port.setSecName(secName);
+                        port.setMappingName(mappingName);
+                        if (trace != null && !port.isOrigin()) {
+                            port.setResultTrace(trace);
+                            port.setPragmaString(pragmaString);
                         }
                     }
                 }
@@ -1615,9 +1188,6 @@ public class TMLModeling<E> {
                 tasks.add(task);
             }
         }
-        for (String s : tmlm.securityPatterns) {
-            securityPatterns.add(s);
-        }
         for (SecurityPattern sp : tmlm.secPatterns) {
             if (!secPatterns.contains(sp)) {
                 secPatterns.add(sp);
@@ -2133,7 +1703,7 @@ public class TMLModeling<E> {
 
             if ((elt0 instanceof TMLExecC) && (elt0.getNbNext() == 1)) {
                 elt1 = elt0.getNextElement(0);
-                if (elt1 instanceof TMLExecC && ((TMLExecC) elt1).securityPattern == null) {
+                if (elt1 instanceof TMLExecC && ((TMLExecC) elt1).getSecurityPattern() == null) {
                     // Concate both elements
                     concateActivityElementWithActions(activity, (TMLActivityElementWithAction) elt0, (TMLActivityElementWithAction) elt1);
 
@@ -3041,7 +2611,7 @@ public class TMLModeling<E> {
 
         TraceManager.addDev("List of Security Patterns: ok");
 
-        return (new HashSet<>(securityPatterns).equals(new HashSet<>(that.securityPatterns)));
+        return true;
     }
 
 
@@ -3205,19 +2775,6 @@ public class TMLModeling<E> {
         } 
     }
 
-    public int updateWeakAuthenticityStatus(int _lastStrongAuthStatus, int _lastWeakAuthStatus,
-            boolean _isStrongAuthProved, boolean _isStrongAuthSatisfied, boolean _isWeakAuthProved,
-            boolean _isWeakAuthSatisfied) {
-        if (_isWeakAuthProved && _isWeakAuthSatisfied && _lastWeakAuthStatus != 3) {
-            return 2;
-        } else if (!_isWeakAuthProved && _lastWeakAuthStatus < 3) {
-            return 1;
-        }
-        else {
-            return 3;
-        } 
-    }
-
     @SuppressWarnings("unchecked")
     public TMLModeling deepClone() throws TMLCheckingError {
         TMLModeling tmlm = new TMLModeling();
@@ -3303,7 +2860,6 @@ public class TMLModeling<E> {
         tmlm.optimized = optimized;
 
         // Security
-        tmlm.securityPatterns.addAll(securityPatterns);
         for(SecurityPattern sp: secPatterns) {
             tmlm.secPatterns.add(sp.deepClone(tmlm));
         }
diff --git a/src/main/java/tmltranslator/TMLSyntaxChecking.java b/src/main/java/tmltranslator/TMLSyntaxChecking.java
index 0a8fd98154..b8544b9d18 100755
--- a/src/main/java/tmltranslator/TMLSyntaxChecking.java
+++ b/src/main/java/tmltranslator/TMLSyntaxChecking.java
@@ -1121,7 +1121,7 @@ public class TMLSyntaxChecking {
     }
 
     public void checkMappingOfSecurityPattern() {
-        for(SecurityPattern sp: tmlm.secPatterns) {
+        for(SecurityPattern sp: tmlm.getSecPatterns()) {
             if (!(sp.isNonceType())) {
                 List<HwMemory> mems = mapping.getMappedMemory(sp);
                 if ((mems == null) || (mems.size() == 0)) {
diff --git a/src/main/java/tmltranslator/TMLTextSpecification.java b/src/main/java/tmltranslator/TMLTextSpecification.java
index 7a08f37ceb..a6ec1b914c 100755
--- a/src/main/java/tmltranslator/TMLTextSpecification.java
+++ b/src/main/java/tmltranslator/TMLTextSpecification.java
@@ -415,37 +415,37 @@ public class TMLTextSpecification<E> {
             return code + makeBehavior(task, elt.getNextElement(0));
 
         } else if (elt instanceof TMLExecC) {
-            if (elt.securityPattern == null) {
+            if (elt.getSecurityPattern() == null) {
                 code = "EXECC" + SP + modifyString(((TMLExecC) elt).getAction()) + CR;
             } else {
                 String type = "";
-                if (elt.securityPattern.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
+                if (elt.getSecurityPattern().getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
                     type = AENCRYPT;
-                } else if (elt.securityPattern.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) {
+                } else if (elt.getSecurityPattern().getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) {
                     type = SENCRYPT;
-                } else if (elt.securityPattern.type.equals(SecurityPattern.MAC_PATTERN)) {
+                } else if (elt.getSecurityPattern().getType().equals(SecurityPattern.MAC_PATTERN)) {
                     type = MAC;
-                } else if (elt.securityPattern.type.equals(SecurityPattern.NONCE_PATTERN)) {
+                } else if (elt.getSecurityPattern().getType().equals(SecurityPattern.NONCE_PATTERN)) {
                     type = NONCE;
-                } else if (elt.securityPattern.type.equals(SecurityPattern.HASH_PATTERN)) {
+                } else if (elt.getSecurityPattern().getType().equals(SecurityPattern.HASH_PATTERN)) {
                     type = HASH;
-                } else if (elt.securityPattern.type.equals(SecurityPattern.ADVANCED_PATTERN)) {
+                } else if (elt.getSecurityPattern().getType().equals(SecurityPattern.ADVANCED_PATTERN)) {
                     type = ADV;
                 }
 
-                String nonce = elt.securityPattern.nonce;
+                String nonce = elt.getSecurityPattern().getNonce();
                 if (nonce.length() == 0) {
                     nonce = EMPTY_KEY_NONCE;
                 }
 
-                String key = elt.securityPattern.nonce;
+                String key = elt.getSecurityPattern().getKey();
                 if (key.length() == 0) {
                     key = EMPTY_KEY_NONCE;
                 }
-
-                code = "EXECC" + SP + modifyString(((TMLExecC) elt).getAction()) + SP + elt.securityPattern.name + SP + type + SP +
-                        elt.securityPattern.encTime + SP + elt.securityPattern.decTime + SP + elt.securityPattern.overhead + SP +
-                        elt.securityPattern.size + SP + nonce + SP + key + SP + elt.securityPattern.process + CR;
+                int process = (((TMLExecC) elt).isDecryptionProcess()) ? TMLExecC.DECRYPTION_PROCESS : TMLExecC.ENCRYPTION_PROCESS;
+                code = "EXECC" + SP + modifyString(((TMLExecC) elt).getAction()) + SP + elt.getSecurityPattern().getName() + SP + type + SP +
+                        elt.getSecurityPattern().getEncTime() + SP + elt.getSecurityPattern().getDecTime() + SP + elt.getSecurityPattern().getOverhead() + SP +
+                        elt.getSecurityPattern().getSize() + SP + nonce + SP + key + SP + process + CR;
             }
             return code + makeBehavior(task, elt.getNextElement(0));
 
@@ -496,8 +496,8 @@ public class TMLTextSpecification<E> {
             }
             //TraceManager.addDev("Nb of samples in task " + task.getName() + " = " + tmlch.getNbOfSamples());
             code = code + modifyString(tmlch.getNbOfSamples());
-            if (elt.securityPattern != null) {
-                code = code + SP + elt.securityPattern.name + CR;
+            if (elt.getSecurityPattern() != null) {
+                code = code + SP + elt.getSecurityPattern().getName() + CR;
             } else {
                 code = code + CR;
             }
@@ -505,10 +505,10 @@ public class TMLTextSpecification<E> {
 
         } else if (elt instanceof TMLReadChannel) {
             tmlch = (TMLActivityElementChannel) elt;
-            if (elt.securityPattern == null) {
+            if (elt.getSecurityPattern() == null) {
                 code = "READ " + tmlch.getChannel(0).getName() + SP + modifyString(tmlch.getNbOfSamples()) + CR;
             } else {
-                code = "READ " + tmlch.getChannel(0).getName() + SP + modifyString(tmlch.getNbOfSamples()) + SP + elt.securityPattern.name + CR;
+                code = "READ " + tmlch.getChannel(0).getName() + SP + modifyString(tmlch.getNbOfSamples()) + SP + elt.getSecurityPattern().getName() + CR;
             }
             return code + makeBehavior(task, elt.getNextElement(0));
 
@@ -729,7 +729,11 @@ public class TMLTextSpecification<E> {
                     if (s1 != null) {
                         split = s1.split("\\s");
                         if (split.length > 0) {
-                            findSec(split);
+                            if (isInstruction(split[0], "EXECC")) {
+                                if (!findAndCheckSec(split)) {
+                                    addError(0, lineNb, 0, "The Security Pattern " + split[2] + " already exists");
+                                }
+                            }
                         }
                     }
 
@@ -771,55 +775,50 @@ public class TMLTextSpecification<E> {
         }
     }
 
-    public void findSec(String[] _split) {
-        if (isInstruction(_split[0], "EXECC")) {
-
-            if (_split.length > 10) {
-                TraceManager.addDev("Found EXECC in: " + _split.length + " name=" + _split[2] + " type=" + _split[3]);
+    public boolean findAndCheckSec(String[] _split) {
+        boolean isNewSec = true;
+        if (_split.length > 10) {
+            TraceManager.addDev("Found EXECC in: " + _split.length + " name=" + _split[2] + " type=" + _split[3]);
+            if (_split[10].compareTo("" + TMLExecC.ENCRYPTION_PROCESS) == 0) {
                 String ccName = _split[2];
-                String type = _split[3];
-                String stringType = "";
-                int process;
-
-                if (type.equals(AENCRYPT)) {
-                    stringType = SecurityPattern.ASYMMETRIC_ENC_PATTERN;
-                } else if (type.equals(SENCRYPT)) {
-                    stringType = SecurityPattern.SYMMETRIC_ENC_PATTERN;
-                } else if (type.equals(HASH)) {
-                    stringType = SecurityPattern.HASH_PATTERN;
-                } else if (type.equals(MAC)) {
-                    stringType = SecurityPattern.MAC_PATTERN;
-                } else if (type.equals(NONCE)) {
-                    stringType = SecurityPattern.NONCE_PATTERN;
-                } else if (type.equals(ADV)) {
-                    stringType = SecurityPattern.ADVANCED_PATTERN;
-                }
-
-                if (stringType.length() > 0) {
-                    TraceManager.addDev("Found security pattern: " + ccName + " with type: " + stringType);
-                    String nonce = _split[8];
-                    if (_split[7].compareTo(EMPTY_KEY_NONCE) == 0) {
-                        nonce = "";
-                    }
-                    String key = _split[9];
-                    if (_split[8].compareTo(EMPTY_KEY_NONCE) == 0) {
-                        key = "";
-                    }
-                    process = SecurityPattern.DECRYPTION_PROCESS;
-                    if (_split[9].compareTo("" + SecurityPattern.ENCRYPTION_PROCESS) == 0) {
-                        process = SecurityPattern.ENCRYPTION_PROCESS;
+                if (securityPatternMap.containsKey(ccName)) {
+                    isNewSec = false;
+                } else {
+                    String type = _split[3];
+                    String stringType = "";
+                    if (type.equals(AENCRYPT)) {
+                        stringType = SecurityPattern.ASYMMETRIC_ENC_PATTERN;
+                    } else if (type.equals(SENCRYPT)) {
+                        stringType = SecurityPattern.SYMMETRIC_ENC_PATTERN;
+                    } else if (type.equals(HASH)) {
+                        stringType = SecurityPattern.HASH_PATTERN;
+                    } else if (type.equals(MAC)) {
+                        stringType = SecurityPattern.MAC_PATTERN;
+                    } else if (type.equals(NONCE)) {
+                        stringType = SecurityPattern.NONCE_PATTERN;
+                    } else if (type.equals(ADV)) {
+                        stringType = SecurityPattern.ADVANCED_PATTERN;
                     }
-                    SecurityPattern sp = new SecurityPattern(ccName, stringType, _split[6], _split[7], _split[4], _split[5], nonce, "",
-                            key);
-                    sp.process = process;
-                    if (securityPatternMap.get(ccName) == null) {
+                    if (!stringType.isEmpty()) {
+                        TraceManager.addDev("Found security pattern: " + ccName + " with type: " + stringType);
+                        String nonce = _split[8];
+                        if (_split[8].compareTo(EMPTY_KEY_NONCE) == 0) {
+                            nonce = "";
+                        }
+                        String key = _split[9];
+                        if (_split[9].compareTo(EMPTY_KEY_NONCE) == 0) {
+                            key = "";
+                        }
+                        SecurityPattern sp = new SecurityPattern(ccName, stringType, _split[6], _split[7], _split[4], _split[5], nonce, "",
+                                key);
                         tmlm.addSecurityPattern(sp);
+                        securityPatternMap.put(ccName, sp);
+                        TraceManager.addDev("Security pattern " + ccName + " added");
                     }
-                    securityPatternMap.put(ccName, sp);
-                    TraceManager.addDev("Security pattern " + ccName + " added");
                 }
             }
         }
+        return isNewSec;
     }
 
     public void addError(int _type, int _lineNb, int _charNb, String _msg) {
@@ -830,7 +829,7 @@ public class TMLTextSpecification<E> {
         errors.add(error);
     }
 
-    public int analyseInstruction(String _line, int _lineNb, String[] _split) {
+    public int analyseInstruction(String _line, int _lineNb, String[] _split) throws TMLCheckingError {
         String error;
         String params;
         String id;
@@ -1690,7 +1689,7 @@ public class TMLTextSpecification<E> {
 
             if (_split.length == 4) {
                 if (securityPatternMap.containsKey(_split[3])) {
-                    tmlrch.securityPattern = securityPatternMap.get(_split[3]);
+                    tmlrch.setSecurityPattern(securityPatternMap.get(_split[3]));
                 }
             }
 
@@ -1727,10 +1726,10 @@ public class TMLTextSpecification<E> {
             TMLWriteChannel tmlwch = new TMLWriteChannel(_split[1], null);
             if (_split.length > 3) {
                 if (securityPatternMap.containsKey(_split[_split.length - 1])) {
-                    tmlwch.securityPattern = securityPatternMap.get(_split[_split.length - 1]);
+                    tmlwch.setSecurityPattern(securityPatternMap.get(_split[_split.length - 1]));
                     TraceManager.addDev("Nb of samples in task " + task.getName() +
-                            " security pattern: " + tmlwch.securityPattern.name);
-                    tmlwch.securityPattern.originTask = task.getTaskName();
+                            " security pattern: " + tmlwch.getSecurityPattern().getName());
+                    //tmlwch.getSecurityPattern().setOriginTask(task.getTaskName());
                 }
                 for (int k = 0; k < _split.length - 3; k++) {
                     //TraceManager.addDev("Handling write channel 1.1");
@@ -2785,14 +2784,24 @@ public class TMLTextSpecification<E> {
 
             if (_split.length == 11) {
                 if (securityPatternMap.containsKey(_split[2])) {
-                    //Security operation
-                    TraceManager.addDev("Found security pattern: " + _split[2]);
-                    TMLExecC execc = new TMLExecC("execc", null);
-                    execc.setAction(_split[1]);
-                    execc.securityPattern = securityPatternMap.get(_split[2]);
-                    tmlae.addNext(execc);
-                    task.getActivityDiagram().addElement(execc);
-                    tmlae = execc;
+                    if ((_split[10].compareTo("" + TMLExecC.DECRYPTION_PROCESS) == 0) || (_split[10].compareTo("" + TMLExecC.ENCRYPTION_PROCESS) == 0)) {
+                        //Security operation
+                        TraceManager.addDev("Found security pattern: " + _split[2]);
+                        TMLExecC execc = new TMLExecC("encrypt_" + _split[2], null);
+                        execc.setAction(_split[1]);
+                        execc.setSecurityPattern(securityPatternMap.get(_split[2]));
+                        if (_split[10].compareTo("" + TMLExecC.DECRYPTION_PROCESS) == 0) {
+                            execc.setDecryptionProcess(true);
+                            execc.setName("decrypt_" + _split[2]);
+                        }
+                        tmlae.addNext(execc);
+                        task.getActivityDiagram().addElement(execc);
+                        tmlae = execc;
+                    } else {
+                        error = "EXECC " + _split[2] + " has an unknown security process";
+                        addError(0, _lineNb, 0, error);
+                        return -1;
+                    }
                 } else {
                     error = "An EXECC with a security configuration must contain a valid security configuration name " + (_split[2]);
                     addError(0, _lineNb, 0, error);
diff --git a/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java b/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java
index f8636bcef7..fca3ef06d8 100644
--- a/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java
+++ b/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java
@@ -47,6 +47,7 @@ package tmltranslator.patternhandling;
  * @version 1.0 28/09/2023
  */
  
+import avatartranslator.AvatarPragma;
 import avatartranslator.AvatarPragmaAuthenticity;
 import avatartranslator.AvatarPragmaSecret;
 import avatartranslator.AvatarSpecification;
@@ -54,10 +55,7 @@ import avatartranslator.toproverif.AVATAR2ProVerif;
 import common.ConfigurationTTool;
 import launcher.RshClient;
 import myutil.TraceManager;
-import proverifspec.ProVerifOutputAnalyzer;
-import proverifspec.ProVerifQueryAuthResult;
-import proverifspec.ProVerifQueryResult;
-import proverifspec.ProVerifSpec;
+import proverifspec.*;
 import tmltranslator.*;
 import tmltranslator.toavatarsec.TML2Avatar;
 import ui.TGComponent;
@@ -77,14 +75,14 @@ public class SecurityGenerationForTMAP implements Runnable {
 
     private AVATAR2ProVerif avatar2proverif;
 
-    private Map<String, Integer> channelIndexMap = new HashMap<String, Integer>();
+    private Map<TMLChannel, Integer> channelIndexMap = new HashMap<TMLChannel, Integer>();
 
     private Map<String, List<HSMChannel>> hsmChannelMap = new HashMap<String, List<HSMChannel>>();
 
-    private Map<String, String> taskHSMMap = new HashMap<String, String>();
-    private List<String> hsmTasks = new ArrayList<String>();
+    private Map<TMLTask, String> taskHSMMap = new HashMap<TMLTask, String>();
+    private List<TMLTask> hsmTasks = new ArrayList<TMLTask>();
 
-    private Map<String, SecurityPattern> channelSecMap = new HashMap<String, SecurityPattern>();
+    private Map<TMLChannel, SecurityPattern> channelSecMap = new HashMap<TMLChannel, SecurityPattern>();
     private TMLMapping<?> newMap;
 
     public SecurityGenerationForTMAP(String appName, TMLMapping<?> tmap, String encComp, String overhead, String decComp, Map<String, List<String>> selectedCPUTasks) {
@@ -97,7 +95,7 @@ public class SecurityGenerationForTMAP implements Runnable {
         this.selectedCPUTasks = selectedCPUTasks;
     }
     
-    public void proverifAnalysis(TMLMapping<?> tmap, List<String> nonAuthChans, List<String> nonConfChans, boolean checkAuthProverif) {
+    public void proverifAnalysis(TMLMapping<?> tmap, List<TMLChannel> nonConfChans, List<TMLChannel> nonWeakAuthChans, List<TMLChannel> nonStrongAuthChans) {
         if (tmap == null) {
             TraceManager.addDev("No mapping");
             return;
@@ -111,7 +109,7 @@ public class SecurityGenerationForTMAP implements Runnable {
         }
 
         TML2Avatar t2a = new TML2Avatar(newMap, false, true, o);
-        AvatarSpecification avatarspec = t2a.generateAvatarSpec("1", checkAuthProverif);
+        AvatarSpecification avatarspec = t2a.generateAvatarSpec("1");
         if (avatarspec == null) {
             TraceManager.addDev("No avatar spec");
             return;
@@ -136,47 +134,97 @@ public class SecurityGenerationForTMAP implements Runnable {
             ProVerifOutputAnalyzer pvoa = avatar2proverif.getOutputAnalyzer();
             pvoa.analyzeOutput(data, true);
 
-            if (pvoa.getResults().size() == 0) {
+            if (pvoa.getResults().isEmpty()) {
                 TraceManager.addDev("SECGEN ERROR: No security results");
             }
 
 
             Map<AvatarPragmaSecret, ProVerifQueryResult> confResults = pvoa.getConfidentialityResults();
-
-            for (AvatarPragmaSecret pragma : confResults.keySet()) {
-                TraceManager.addDev("SECGEN: Pragma " + pragma);
-                if (confResults.get(pragma).isProved() && !confResults.get(pragma).isSatisfied()) {
-                    nonConfChans.add(pragma.getArg().getBlock().getName() + "__" + pragma.getArg().getName());
-                    TraceManager.addDev("SECGEN:" + pragma.getArg().getBlock().getName() + "." + pragma.getArg().getName() + " is not secret");
-
-                    TMLChannel chan = tmap.getTMLModeling().getChannelByShortName(pragma.getArg().getName().replaceAll("_chData", ""));
-
-                    if (chan == null) {
-                        chan = tmap.getTMLModeling().getChannelByOriginPortName(pragma.getArg().getName().replaceAll("_chData", ""));
+            Map<AvatarPragmaAuthenticity, ProVerifQueryAuthResult> authenticityResults = pvoa.getAuthenticityResults();
+            for (TMLChannel ch : tmap.getTMLModeling().getSecChannelMap().keySet()) {
+                if (ch.isCheckConfChannel()) {
+                    List<Integer> confStatus = new ArrayList<Integer>();
+                    for (AvatarPragma pragma : tmap.getTMLModeling().getSecChannelMap().get(ch)) {
+                        if (pragma instanceof AvatarPragmaSecret) {
+                            AvatarPragmaSecret pragmaSecret = (AvatarPragmaSecret) pragma;
+                            ProVerifQueryResult result = confResults.get(pragmaSecret);
+                            if (result != null) {
+                                if (!result.isProved()) {
+                                    confStatus.add(1);
+                                } else {
+                                    int r = result.isSatisfied() ? 2 : 3;
+                                    confStatus.add(r);
+                                }
+                            }
+                        }
                     }
-
-                    if (chan == null) {
-                        TraceManager.addDev("SECGEN: NULL Channel");
-                        continue;
+                    int generalConfResult = 1;
+                    if (!confStatus.isEmpty()) {
+                        if (confStatus.contains(3)) {
+                            generalConfResult = 3;
+                        } else if (confStatus.contains(1)) {
+                            generalConfResult = 1;
+                        } else {
+                            generalConfResult = 2;
+                        }
                     }
+                    if (generalConfResult == 3) {
+                        nonConfChans.add(ch);
+                    }
+                }
+                if (ch.isCheckAuthChannel()) {
+                    List<Integer> weakAuthStatus = new ArrayList<Integer>();
+                    List<Integer> strongAuthStatus = new ArrayList<Integer>();
+                    for (AvatarPragma pragma : tmap.getTMLModeling().getSecChannelMap().get(ch)) {
+                        if (pragma instanceof AvatarPragmaAuthenticity) {
+                            AvatarPragmaAuthenticity pragmaAuth = (AvatarPragmaAuthenticity) pragma;
+                            ProVerifQueryAuthResult result = authenticityResults.get(pragmaAuth);
+                            if (result != null) {
+                                if (!result.isProved()) {
+                                    strongAuthStatus.add(1);
+                                } else if (result.isProved() && result.isSatisfied()) {
+                                    strongAuthStatus.add(2);
+                                } else if (result.isProved() && !result.isSatisfied()) {
+                                    strongAuthStatus.add(3);
+                                }
 
-                    if (chan.isBasicChannel()) {
-                        TraceManager.addDev("SECGEN: Channel added to nonConfCh");
-                        nonConfChans.add(chan.getOriginTask().getName() + "__" + pragma.getArg().getName());
-
-                    } else {
-                        for (TMLTask originTask : chan.getOriginTasks()) {
-                            nonConfChans.add(originTask.getName() + "__" + pragma.getArg().getName());
+                                if (!result.isWeakProved()) {
+                                    weakAuthStatus.add(1);
+                                } else if (result.isWeakProved() && result.isWeakSatisfied()) {
+                                    weakAuthStatus.add(2);
+                                } else if (result.isWeakProved() && !result.isWeakSatisfied()) {
+                                    weakAuthStatus.add(3);
+                                }
+                            }
                         }
                     }
-                }
-            }
+                    int generalStrongAuthResult = 1;
+                    int generalWeakAuthResult = 1;
+                    if (!weakAuthStatus.isEmpty()) {
+                        if (weakAuthStatus.contains(3)) {
+                            generalWeakAuthResult = 3;
+                        } else if (weakAuthStatus.contains(1)) {
+                            generalWeakAuthResult = 1;
+                        } else {
+                            generalWeakAuthResult = 2;
+                        }
+                    }
+                    if (!strongAuthStatus.isEmpty()) {
+                        if (strongAuthStatus.contains(3)) {
+                            generalStrongAuthResult = 3;
+                        } else if (strongAuthStatus.contains(1)) {
+                            generalStrongAuthResult = 1;
+                        } else {
+                            generalStrongAuthResult = 2;
+                        }
+                    }
+                    if (generalWeakAuthResult == 3) {
+                        nonWeakAuthChans.add(ch);
+                    }
 
-            Map<AvatarPragmaAuthenticity, ProVerifQueryAuthResult> authResults = pvoa.getAuthenticityResults();
-            for (AvatarPragmaAuthenticity pragma : authResults.keySet()) {
-                if (authResults.get(pragma).isProved() && !authResults.get(pragma).isSatisfied()) {
-                    nonAuthChans.add(pragma.getAttrA().getAttribute().getBlock().getName() + "__" + pragma.getAttrA().getAttribute().getName().replaceAll("_chData", ""));
-                    nonAuthChans.add(pragma.getAttrB().getAttribute().getBlock().getName() + "__" + pragma.getAttrB().getAttribute().getName().replaceAll("_chData", ""));
+                    if (generalStrongAuthResult == 3) {
+                        nonStrongAuthChans.add(ch);
+                    }
                 }
             }
 
@@ -198,20 +246,20 @@ public class SecurityGenerationForTMAP implements Runnable {
         return tmap;
     }
 
-    public boolean portInTask(TMLTask task, String portName) {
+    public boolean portInTask(TMLTask task, TMLChannel ch) {
         TMLActivity adTask = task.getActivityDiagram();
         for (TMLActivityElement elem : adTask.getElements()) {
             if (elem instanceof TMLWriteChannel) {
                 TMLWriteChannel writeChannel = (TMLWriteChannel) elem;
                 for (int i = 0; i < writeChannel.getNbOfChannels(); i++) {
-                    if (writeChannel.getChannel(i).getName().replaceAll(appName + "__", "").equals(portName)) {
+                    if (writeChannel.getChannel(i).equals(ch)) {
                         return true;
                     }
                 }
             } else if (elem instanceof TMLReadChannel) {
                 TMLReadChannel readChannel = (TMLReadChannel) elem;
                 for (int i = 0; i < readChannel.getNbOfChannels(); i++) {
-                    if (readChannel.getChannel(i).getName().replaceAll(appName + "__", "").equals(portName)) {
+                    if (readChannel.getChannel(i).equals(ch)) {
                         return true;
                     }
                 }
@@ -225,15 +273,15 @@ public class SecurityGenerationForTMAP implements Runnable {
         // oldmodel = tmap.getTMLModeling();
         Map<TMLTask, HashSet<TMLTask>> toSecure = new HashMap<TMLTask, HashSet<TMLTask>>();
         Map<TMLTask, HashSet<TMLTask>> toSecureRev = new HashMap<TMLTask, HashSet<TMLTask>>();
-        Map<TMLTask, HashSet<String>> secOutChannels = new HashMap<TMLTask, HashSet<String>>();
-        Map<TMLTask, HashSet<String>> secInChannels = new HashMap<TMLTask, HashSet<String>>();
-        Map<TMLTask, HashSet<String>> nonceOutChannels = new HashMap<TMLTask, HashSet<String>>();
-        Map<TMLTask, HashSet<String>> nonceInChannels = new HashMap<TMLTask, HashSet<String>>();
-        Map<TMLTask, HashSet<String>> macOutChannels = new HashMap<TMLTask, HashSet<String>>();
-        Map<TMLTask, HashSet<String>> macInChannels = new HashMap<TMLTask, HashSet<String>>();
+        Map<TMLTask, HashSet<TMLChannel>> secOutChannels = new HashMap<TMLTask, HashSet<TMLChannel>>();
+        Map<TMLTask, HashSet<TMLChannel>> secInChannels = new HashMap<TMLTask, HashSet<TMLChannel>>();
+        Map<TMLTask, HashSet<TMLChannel>> nonceOutChannels = new HashMap<TMLTask, HashSet<TMLChannel>>();
+        Map<TMLTask, HashSet<TMLChannel>> nonceInChannels = new HashMap<TMLTask, HashSet<TMLChannel>>();
+        Map<TMLTask, HashSet<TMLChannel>> macOutChannels = new HashMap<TMLTask, HashSet<TMLChannel>>();
+        Map<TMLTask, HashSet<TMLChannel>> macInChannels = new HashMap<TMLTask, HashSet<TMLChannel>>();
 
-        Map<TMLTask, HashSet<String>> hsmSecInChannels = new HashMap<TMLTask, HashSet<String>>();
-        Map<TMLTask, HashSet<String>> hsmSecOutChannels = new HashMap<TMLTask, HashSet<String>>();
+        Map<TMLTask, HashSet<TMLChannel>> hsmSecInChannels = new HashMap<TMLTask, HashSet<TMLChannel>>();
+        Map<TMLTask, HashSet<TMLChannel>> hsmSecOutChannels = new HashMap<TMLTask, HashSet<TMLChannel>>();
 
         //TraceManager.addDev("mapping " + tmap.getSummaryTaskMapping());
 
@@ -243,35 +291,32 @@ public class SecurityGenerationForTMAP implements Runnable {
 
         for (String cpuName : selectedCPUTasks.keySet()) {
             for (String task : selectedCPUTasks.get(cpuName)) {
-                hsmTasks.add(task);
-                taskHSMMap.put(task, cpuName);
+                String taskLongName = appName + "__" + task;
+                hsmTasks.add(tmap.getTaskByName(taskLongName));
+                taskHSMMap.put(tmap.getTaskByName(taskLongName), cpuName);
             }
             hsmChannelMap.put(cpuName, new ArrayList<HSMChannel>());
-
         }
 
         TMLModeling<?> tmlmodel = tmap.getTMLModeling();
         //Proverif Analysis channels
-        List<String> nonAuthChans = new ArrayList<String>();
-        List<String> nonConfChans = new ArrayList<String>();
-        boolean checkAuthProverif = false;
-        for (TMLChannel ch : tmlmodel.getChannels()) {
-            if (ch.isEnsureWeakAuth() || ch.isEnsureStrongAuth()) {
-                checkAuthProverif = true;
-                break;
-            }
-        }
-        proverifAnalysis(tmap, nonAuthChans, nonConfChans, checkAuthProverif);
+        List<TMLChannel> nonConfChans = new ArrayList<TMLChannel>();
+        List<TMLChannel> nonWeakAuthChans = new ArrayList<TMLChannel>();
+        List<TMLChannel> nonStrongAuthChans = new ArrayList<TMLChannel>();
 
-        
         List<TMLChannel> channels = tmlmodel.getChannels();
         for (TMLChannel channel : channels) {
             for (TMLPortWithSecurityInformation p : channel.ports) {
-                channel.checkConf = channel.checkConf || p.getCheckConf();
-                channel.checkAuth = channel.checkAuth || p.getCheckAuth();
+                channel.checkConf = channel.checkConf || channel.isEnsureConf()|| p.getCheckConf();
+                channel.checkAuth = channel.checkAuth || channel.isEnsureWeakAuth() || channel.isEnsureStrongAuth() || p.getCheckAuth();
             }
         }
 
+        proverifAnalysis(tmap, nonConfChans, nonWeakAuthChans, nonStrongAuthChans);
+
+        
+
+
         //System.out.println("Nonauth " + nonAuthChans);
         //System.out.println("NonConf " + nonConfChans);
 
@@ -283,16 +328,16 @@ public class SecurityGenerationForTMAP implements Runnable {
         //newarch.renameMapping(tabName, tabName + "_" + name);
 
         for (TMLTask task : tmap.getTMLModeling().getTasks()) {
-            HashSet<String> tmp = new HashSet<String>();
-            HashSet<String> tmp2 = new HashSet<String>();
+            HashSet<TMLChannel> tmp = new HashSet<TMLChannel>();
+            HashSet<TMLChannel> tmp2 = new HashSet<TMLChannel>();
             HashSet<TMLTask> tmp3 = new HashSet<TMLTask>();
             HashSet<TMLTask> tmp4 = new HashSet<TMLTask>();
-            HashSet<String> tmp5 = new HashSet<String>();
-            HashSet<String> tmp6 = new HashSet<String>();
-            HashSet<String> tmp7 = new HashSet<String>();
-            HashSet<String> tmp8 = new HashSet<String>();
-            HashSet<String> tmp9 = new HashSet<String>();
-            HashSet<String> tmp10 = new HashSet<String>();
+            HashSet<TMLChannel> tmp5 = new HashSet<TMLChannel>();
+            HashSet<TMLChannel> tmp6 = new HashSet<TMLChannel>();
+            HashSet<TMLChannel> tmp7 = new HashSet<TMLChannel>();
+            HashSet<TMLChannel> tmp8 = new HashSet<TMLChannel>();
+            HashSet<TMLChannel> tmp9 = new HashSet<TMLChannel>();
+            HashSet<TMLChannel> tmp10 = new HashSet<TMLChannel>();
 
 
             secInChannels.put(task, tmp);
@@ -332,24 +377,26 @@ public class SecurityGenerationForTMAP implements Runnable {
 
             for (TMLChannel chan : tmlmodel.getChannels(task)) {
                 //Origin and Destination ports can have different names. Therefore, we need to put both names in the list of channels to secure.
-                List<String> portNames = new ArrayList<String>();
-                boolean nonConf = false;
-                boolean nonAuth = false;
+                /*List<String> portNames = new ArrayList<String>();*/
+                boolean nonConf = nonConfChans.contains(chan);
+                boolean nonWeakAuth = nonWeakAuthChans.contains(chan);
+                boolean nonStrongAuth = nonStrongAuthChans.contains(chan);
 
-                if (chan.isBasicChannel()) {
+
+                /*if (chan.isBasicChannel()) {
                     portNames.add(chan.getOriginPort().getName());
                     portNames.add(chan.getDestinationPort().getName());
-                    if (nonConfChans.contains(chan.getOriginTask().getName().split("__")[1] + "__" + chan.getOriginPort().getName() + "_chData")) {
+                    if (nonConfChans.contains(chan.getOriginTask().getTaskName() + "__" + chan.getOriginPort().getName() + "_chData")) {
                         nonConf = true;
                         TraceManager.addDev("SECGEN. non conf basic ch = true");
                     }
 
-                    if (nonAuthChans.contains(chan.getDestinationTask().getName().split("__")[1] + "__" + title + "__" + chan.getDestinationPort().getName())) {
+                    if (nonAuthChans.contains(chan.getDestinationTask().getTaskName() + "__" + title + "__" + chan.getDestinationPort().getName())) {
                         nonAuth = true;
                     }
 
                     //When port names are different
-                    if (nonAuthChans.contains(chan.getDestinationTask().getName().split("__")[1] + "__" + chan.getDestinationPort().getName())) {
+                    if (nonAuthChans.contains(chan.getDestinationTask().getTaskName() + "__" + chan.getDestinationPort().getName())) {
                         nonAuth = true;
                     }
                 } else {
@@ -381,71 +428,66 @@ public class SecurityGenerationForTMAP implements Runnable {
                     }
                     //When port names are different
 
-                }
+                }*/
 
-                String secName = chan.getName().split("__")[chan.getName().split("__").length - 1];
+                String secName = chan.getChannelName();
 
-                for (String chanName : portNames) {
+                //for (String chanName : portNames) {
                     //Classify channels based on the type of security requirements and unsatisfied properties
                     if (chan.isBasicChannel()) {
                         if (chan.isEnsureConf() && nonConf) {
                             toSecure.get(chan.getOriginTask()).add(chan.getDestinationTask());
-                            if (chan.isEnsureStrongAuth()) {
-                                if (!toSecureRev.get(chan.getDestinationTask()).contains(chan.getOriginTask())) {
-                                    toSecureRev.get(chan.getDestinationTask()).add(chan.getOriginTask());
-                                }
+                            if (chan.isEnsureStrongAuth() && nonStrongAuth) {
+                                toSecureRev.get(chan.getDestinationTask()).add(chan.getOriginTask());
                             }
-                            if (hsmTasks.contains(chan.getOriginTask().getName().split("__")[1])) {
+                            if (hsmTasks.contains(chan.getOriginTask())) {
                                 SecurityPattern secPattern = new SecurityPattern("hsmSec_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                                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.SENC);
-                                    hsmChannelMap.get(taskHSMMap.get(chan.getOriginTask().getName().split("__")[1])).add(hsmchan);
-                                    hsmSecOutChannels.get(chan.getOriginTask()).add(chanName);
-
-                                    if (chan.isEnsureStrongAuth()) {
-                                        nonceOutChannels.get(chan.getOriginTask()).add(chanName);
-                                        hsmchan.nonceName = "nonce_" + chan.getDestinationTask().getName().split("__")[1] + "_" + chan.getOriginTask().getName().split("__")[1];
+                                channelSecMap.put(chan, secPattern);
+                                if (!hsmSecOutChannels.get(chan.getOriginTask()).contains(chan) && portInTask(chan.getOriginTask(), chan)) {
+                                    HSMChannel hsmchan = new HSMChannel(chan, chan.getOriginTask(), HSMChannel.SENC);
+                                    hsmChannelMap.get(taskHSMMap.get(chan.getOriginTask())).add(hsmchan);
+                                    hsmSecOutChannels.get(chan.getOriginTask()).add(chan);
+
+                                    if (chan.isEnsureStrongAuth() && nonStrongAuth) {
+                                        nonceOutChannels.get(chan.getOriginTask()).add(chan);
+                                        hsmchan.nonceName = "nonce_" + chan.getDestinationTask().getTaskName() + "_" + chan.getOriginTask().getTaskName();
                                     }
                                 }
                             } else {
-                                if (!secOutChannels.get(chan.getOriginTask()).contains(chanName)) {
-                                    secOutChannels.get(chan.getOriginTask()).add(chanName);
+                                if (!secOutChannels.get(chan.getOriginTask()).contains(chan)) {
+                                    secOutChannels.get(chan.getOriginTask()).add(chan);
                                     SecurityPattern secPattern = new SecurityPattern("autoEncrypt_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                                    secPattern.originTask = chan.getOriginTask().getName().replaceAll(title + "__", "");
-                                    channelSecMap.put(chanName, secPattern);
-                                    if (chan.isEnsureStrongAuth()) {
-                                        nonceOutChannels.get(chan.getOriginTask()).add(chanName);
+                                    channelSecMap.put(chan, secPattern);
+                                    if (chan.isEnsureStrongAuth() && nonStrongAuth) {
+                                        nonceOutChannels.get(chan.getOriginTask()).add(chan);
                                     }
                                 }
                             }
 
-                            if (hsmTasks.contains(chan.getDestinationTask().getName().split("__")[1])) {
-                                if (!hsmSecInChannels.get(chan.getDestinationTask()).contains(chanName) && portInTask(chan.getDestinationTask(), chanName)) {
-                                    HSMChannel hsmchan = new HSMChannel(chanName, chan.getDestinationTask().getName().split("__")[1], HSMChannel.DEC);
-                                    hsmChannelMap.get(taskHSMMap.get(chan.getDestinationTask().getName().split("__")[1])).add(hsmchan);
-                                    hsmSecInChannels.get(chan.getDestinationTask()).add(chanName);
-                                    if (chan.isEnsureStrongAuth()) {
-                                        nonceInChannels.get(chan.getDestinationTask()).add(chanName);
-                                        hsmchan.nonceName = "nonce_" + chan.getDestinationTask().getName().split("__")[1] + "_" + chan.getOriginTask().getName().split("__")[1];
+                            if (hsmTasks.contains(chan.getDestinationTask())) {
+                                if (!hsmSecInChannels.get(chan.getDestinationTask()).contains(chan) && portInTask(chan.getDestinationTask(), chan)) {
+                                    HSMChannel hsmchan = new HSMChannel(chan, chan.getDestinationTask(), HSMChannel.DEC);
+                                    hsmChannelMap.get(taskHSMMap.get(chan.getDestinationTask())).add(hsmchan);
+                                    hsmSecInChannels.get(chan.getDestinationTask()).add(chan);
+                                    if (chan.isEnsureStrongAuth() && nonStrongAuth) {
+                                        nonceInChannels.get(chan.getDestinationTask()).add(chan);
+                                        hsmchan.nonceName =
+                                                "nonce_" + chan.getDestinationTask().getTaskName() + "_" + chan.getOriginTask().getTaskName();
                                     }
                                 }
                             } else {
-                                if (!secInChannels.get(chan.getDestinationTask()).contains(chanName)) {
-                                    secInChannels.get(chan.getDestinationTask()).add(chanName);
-                                    if (chan.isEnsureStrongAuth()) {
-                                        nonceInChannels.get(chan.getDestinationTask()).add(chanName);
+                                if (!secInChannels.get(chan.getDestinationTask()).contains(chan)) {
+                                    secInChannels.get(chan.getDestinationTask()).add(chan);
+                                    if (chan.isEnsureStrongAuth() && nonStrongAuth) {
+                                        nonceInChannels.get(chan.getDestinationTask()).add(chan);
                                     }
                                 }
                             }
 
-                        } else if (chan.isEnsureWeakAuth() && nonAuth) {
+                        } else if (chan.isEnsureWeakAuth() && nonWeakAuth) {
                             toSecure.get(chan.getOriginTask()).add(chan.getDestinationTask());
-                            if (chan.isEnsureStrongAuth()) {
-                                if (!toSecureRev.get(chan.getDestinationTask()).contains(chan.getOriginTask())) {
-                                    toSecureRev.get(chan.getDestinationTask()).add(chan.getOriginTask());
-                                }
+                            if (chan.isEnsureStrongAuth() && nonStrongAuth) {
+                                toSecureRev.get(chan.getDestinationTask()).add(chan.getOriginTask());
                                 /*}
                                   else {
                                   TMLChannel chantmp = oldmodel.getChannelByShortName("__"+chan.getName());
@@ -453,47 +495,45 @@ public class SecurityGenerationForTMAP implements Runnable {
                                   }*/
 
                             }
-                            if (hsmTasks.contains(chan.getOriginTask().getName().split("__")[1])) {
+                            if (hsmTasks.contains(chan.getOriginTask())) {
                                 SecurityPattern secPattern = new SecurityPattern("hsmSec_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                                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);
-                                    hsmChannelMap.get(taskHSMMap.get(chan.getOriginTask().getName().split("__")[1])).add(hsmchan);
-                                    hsmSecOutChannels.get(chan.getOriginTask()).add(chanName);
-
-                                    if (chan.isEnsureStrongAuth()) {
-                                        nonceOutChannels.get(chan.getOriginTask()).add(chanName);
-                                        hsmchan.nonceName = "nonce_" + chan.getDestinationTask().getName().split("__")[1] + "_" + chan.getOriginTask().getName().split("__")[1];
+                                channelSecMap.put(chan, secPattern);
+                                if (!hsmSecOutChannels.get(chan.getOriginTask()).contains(chan) && portInTask(chan.getOriginTask(), chan)) {
+                                    HSMChannel hsmchan = new HSMChannel(chan, chan.getOriginTask(), HSMChannel.MAC);
+                                    hsmChannelMap.get(taskHSMMap.get(chan.getOriginTask())).add(hsmchan);
+                                    hsmSecOutChannels.get(chan.getOriginTask()).add(chan);
+
+                                    if (chan.isEnsureStrongAuth() && nonStrongAuth) {
+                                        nonceOutChannels.get(chan.getOriginTask()).add(chan);
+                                        hsmchan.nonceName = "nonce_" + chan.getDestinationTask().getTaskName() + "_" + chan.getOriginTask().getTaskName();
                                     }
                                 }
                             } else {
-                                if (!macInChannels.get(chan.getOriginTask()).contains(chanName)) {
-                                    macOutChannels.get(chan.getOriginTask()).add(chanName);
+                                if (!macInChannels.get(chan.getOriginTask()).contains(chan)) {
+                                    macOutChannels.get(chan.getOriginTask()).add(chan);
                                     SecurityPattern secPattern = new SecurityPattern("autoEncrypt_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                                    secPattern.originTask = chan.getOriginTask().getName().replaceAll(title + "__", "");
-                                    channelSecMap.put(chanName, secPattern);
-                                    if (chan.isEnsureStrongAuth()) {
-                                        nonceOutChannels.get(chan.getOriginTask()).add(chanName);
+                                    channelSecMap.put(chan, secPattern);
+                                    if (chan.isEnsureStrongAuth() && nonStrongAuth) {
+                                        nonceOutChannels.get(chan.getOriginTask()).add(chan);
                                     }
                                 }
                             }
 
-                            if (hsmTasks.contains(chan.getDestinationTask().getName().split("__")[1])) {
-                                if (!hsmSecInChannels.get(chan.getDestinationTask()).contains(chanName) && portInTask(chan.getDestinationTask(), chanName)) {
-                                    HSMChannel hsmchan = new HSMChannel(chanName, chan.getDestinationTask().getName().split("__")[1], HSMChannel.DEC);
-                                    hsmChannelMap.get(taskHSMMap.get(chan.getDestinationTask().getName().split("__")[1])).add(hsmchan);
-                                    hsmSecInChannels.get(chan.getDestinationTask()).add(chanName);
-                                    if (chan.isEnsureStrongAuth()) {
-                                        nonceInChannels.get(chan.getDestinationTask()).add(chanName);
-                                        hsmchan.nonceName = "nonce_" + chan.getDestinationTask().getName().split("__")[1] + "_" + chan.getOriginTask().getName().split("__")[1];
+                            if (hsmTasks.contains(chan.getDestinationTask())) {
+                                if (!hsmSecInChannels.get(chan.getDestinationTask()).contains(chan) && portInTask(chan.getDestinationTask(), chan)) {
+                                    HSMChannel hsmchan = new HSMChannel(chan, chan.getDestinationTask(), HSMChannel.DEC);
+                                    hsmChannelMap.get(taskHSMMap.get(chan.getDestinationTask())).add(hsmchan);
+                                    hsmSecInChannels.get(chan.getDestinationTask()).add(chan);
+                                    if (chan.isEnsureStrongAuth() && nonStrongAuth) {
+                                        nonceInChannels.get(chan.getDestinationTask()).add(chan);
+                                        hsmchan.nonceName = "nonce_" + chan.getDestinationTask().getTaskName() + "_" + chan.getOriginTask().getTaskName();
                                     }
                                 }
                             } else {
-                                if (!secInChannels.get(chan.getDestinationTask()).contains(chanName)) {
-                                    secInChannels.get(chan.getDestinationTask()).add(chanName);
-                                    if (chan.isEnsureStrongAuth()) {
-                                        nonceInChannels.get(chan.getDestinationTask()).add(chanName);
+                                if (!secInChannels.get(chan.getDestinationTask()).contains(chan)) {
+                                    secInChannels.get(chan.getDestinationTask()).add(chan);
+                                    if (chan.isEnsureStrongAuth() && nonStrongAuth) {
+                                        nonceInChannels.get(chan.getDestinationTask()).add(chan);
                                     }
                                 }
                             }
@@ -510,14 +550,13 @@ public class SecurityGenerationForTMAP implements Runnable {
                                   toSecureRev.get(dest).add(orig);
                                   }
                                   }*/
-                                    if (hsmTasks.contains(orig.getName().split("__")[1])) {
+                                    if (hsmTasks.contains(orig)) {
                                         SecurityPattern secPattern = new SecurityPattern("hsmSec_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                                        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);
-                                            hsmChannelMap.get(taskHSMMap.get(orig.getName().split("__")[1])).add(hsmchan);
-                                            hsmSecOutChannels.get(orig).add(chanName);
+                                        channelSecMap.put(chan, secPattern);
+                                        if (!hsmSecOutChannels.get(orig).contains(chan) && portInTask(orig, chan)) {
+                                            HSMChannel hsmchan = new HSMChannel(chan, orig, HSMChannel.SENC);
+                                            hsmChannelMap.get(taskHSMMap.get(orig)).add(hsmchan);
+                                            hsmSecOutChannels.get(orig).add(chan);
 
                                         /*    if (chan.checkAuth && autoStrongAuth) {
                                             nonceOutChannels.get(orig).add(chanName);
@@ -525,37 +564,34 @@ public class SecurityGenerationForTMAP implements Runnable {
                                             }*/
                                         }
                                     } else {
-                                        if (!secOutChannels.get(orig).contains(chanName)) {
-                                            secOutChannels.get(orig).add(chanName);
+                                        if (!secOutChannels.get(orig).contains(chan)) {
+                                            secOutChannels.get(orig).add(chan);
                                             SecurityPattern secPattern = new SecurityPattern("autoEncrypt_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                                            secPattern.originTask = orig.getName().replaceAll(title + "__", "");
-                                            channelSecMap.put(chanName, secPattern);
+                                            channelSecMap.put(chan, secPattern);
                                         /* if (chan.checkAuth && autoStrongAuth) {
                                            nonceOutChannels.get(orig).add(chanName);
                                            }*/
                                         }
                                     }
 
-                                    if (hsmTasks.contains(dest.getName().split("__")[1])) {
-                                        if (!hsmSecInChannels.get(dest).contains(chanName) && portInTask(dest, chanName)) {
-                                            HSMChannel hsmchan = new HSMChannel(chanName, dest.getName().split("__")[1], HSMChannel.DEC);
-                                            hsmChannelMap.get(taskHSMMap.get(dest.getName().split("__")[1])).add(hsmchan);
-                                            hsmSecInChannels.get(dest).add(chanName);
+                                    if (hsmTasks.contains(dest)) {
+                                        if (!hsmSecInChannels.get(dest).contains(chan) && portInTask(dest, chan)) {
+                                            HSMChannel hsmchan = new HSMChannel(chan, dest, HSMChannel.DEC);
+                                            hsmChannelMap.get(taskHSMMap.get(dest)).add(hsmchan);
+                                            hsmSecInChannels.get(dest).add(chan);
                                         /*    if (chan.checkAuth && autoStrongAuth) {
                                             nonceInChannels.get(dest).add(chanName);
                                             hsmchan.nonceName="nonce_" + dest.getName().split("__")[1] + "_" + orig.getName().split("__")[1];
                                             }*/
                                         }
                                     } else {
-                                        if (!secInChannels.get(dest).contains(chanName)) {
-                                            secInChannels.get(dest).add(chanName);
                                         /*if (chan.checkAuth && autoStrongAuth) {
                                           nonceInChannels.get(dest).add(chanName);
                                           }*/
-                                        }
+                                        secInChannels.get(dest).add(chan);
                                     }
 
-                                } else if (chan.isEnsureWeakAuth() && nonAuth) {
+                                } else if (chan.isEnsureWeakAuth() && nonWeakAuth) {
                                     toSecure.get(orig).add(dest);
                                 /*    if (autoStrongAuth) {
                                 /*          if (chan.getOriginTask().getReferenceObject() instanceof TMLCPrimitiveComponent && chan.getDestinationTask().getReferenceObject() instanceof TMLCPrimitiveComponent) {*/
@@ -569,14 +605,13 @@ public class SecurityGenerationForTMAP implements Runnable {
                                   }
 
                                   }*/
-                                    if (hsmTasks.contains(orig.getName().split("__")[1])) {
+                                    if (hsmTasks.contains(orig)) {
                                         SecurityPattern secPattern = new SecurityPattern("hsmSec_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                                        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);
-                                            hsmChannelMap.get(taskHSMMap.get(orig.getName().split("__")[1])).add(hsmchan);
-                                            hsmSecOutChannels.get(orig).add(chanName);
+                                        channelSecMap.put(chan, secPattern);
+                                        if (!hsmSecOutChannels.get(orig).contains(chan) && portInTask(orig, chan)) {
+                                            HSMChannel hsmchan = new HSMChannel(chan, orig, HSMChannel.MAC);
+                                            hsmChannelMap.get(taskHSMMap.get(orig)).add(hsmchan);
+                                            hsmSecOutChannels.get(orig).add(chan);
 
                                         /*if (autoStrongAuth) {
                                           nonceOutChannels.get(orig).add(chanName);
@@ -584,48 +619,45 @@ public class SecurityGenerationForTMAP implements Runnable {
                                           }*/
                                         }
                                     } else {
-                                        if (!macInChannels.get(orig).contains(chanName)) {
-                                            macOutChannels.get(orig).add(chanName);
+                                        if (!macInChannels.get(orig).contains(chan)) {
+                                            macOutChannels.get(orig).add(chan);
                                             SecurityPattern secPattern = new SecurityPattern("autoEncrypt_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                                            secPattern.originTask = orig.getName().replaceAll(title + "__", "");
-                                            channelSecMap.put(chanName, secPattern);
+                                            channelSecMap.put(chan, secPattern);
                                         /*   if (autoStrongAuth) {
                                              nonceOutChannels.get(orig).add(chanName);
                                              }*/
                                         }
                                     }
 
-                                    if (hsmTasks.contains(dest.getName().split("__")[1])) {
+                                    if (hsmTasks.contains(dest)) {
 
-                                        if (!hsmSecInChannels.get(dest).contains(chanName) && portInTask(dest, chanName)) {
-                                            HSMChannel hsmchan = new HSMChannel(chanName, dest.getName().split("__")[1], HSMChannel.DEC);
-                                            hsmChannelMap.get(taskHSMMap.get(dest.getName().split("__")[1])).add(hsmchan);
-                                            hsmSecInChannels.get(dest).add(chanName);
+                                        if (!hsmSecInChannels.get(dest).contains(chan) && portInTask(dest, chan)) {
+                                            HSMChannel hsmchan = new HSMChannel(chan, dest, HSMChannel.DEC);
+                                            hsmChannelMap.get(taskHSMMap.get(dest)).add(hsmchan);
+                                            hsmSecInChannels.get(dest).add(chan);
                                         /*if (chan.checkAuth && autoStrongAuth) {
                                           nonceInChannels.get(dest).add(chanName);
                                           hsmchan.nonceName="nonce_" + dest.getName().split("__")[1] + "_" + orig.getName().split("__")[1];
                                           }*/
                                         }
                                     } else {
-                                        if (!secInChannels.get(dest).contains(chanName)) {
-                                            secInChannels.get(dest).add(chanName);
                                         /*if (chan.checkAuth && autoStrongAuth) {
                                           nonceInChannels.get(dest).add(chanName);
                                           }*/
-                                        }
+                                        secInChannels.get(dest).add(chan);
                                     }
                                 }
                             }
                         }
                     }
 
-                }
+                //}
             }
         }
 
         // System.out.println("hsmchannelmap" + hsmChannelMap);
-        for (String chSec : channelSecMap.keySet()) {
-            TraceManager.addDev("secChannelMap: key=" + chSec + " value= " + channelSecMap.get(chSec).name);
+        for (TMLChannel chSec : channelSecMap.keySet()) {
+            TraceManager.addDev("secChannelMap: key=" + chSec + " value= " + channelSecMap.get(chSec).getName());
         }
         for (TMLTask tk : macOutChannels.keySet()) {
             TraceManager.addDev("macoutchans: key= " + tk.getName() + " value= " + macOutChannels.get(tk));
@@ -670,13 +702,13 @@ public class SecurityGenerationForTMAP implements Runnable {
 
             for (TMLTask task : tmlmodel.getTasks()) {
                 for (String compName : selectedCPUTasks.get(cpuName)) {
-                    if (task.getName().replaceAll(title + "__", "").equals(compName)) {
+                    if (task.getTaskName().equals(compName)) {
                         comps.add(task);
                         break;
                     }
                 }
             }
-            if (comps.size() == 0) {
+            if (comps.isEmpty()) {
                 //System.out.println("No Components found");
                 continue;
             }
@@ -690,16 +722,16 @@ public class SecurityGenerationForTMAP implements Runnable {
                 ChannelData chd = new ChannelData("startHSM_" + cpuName, false, false);
                 hsmChans.add(chd);
                 for (HSMChannel hsmChan : hsmChannelMap.get(cpuName)) {
-                    if (!hsmChan.task.equals(comp.getName().replaceAll(title + "__", ""))) {
+                    if (!hsmChan.task.equals(comp)) {
                         continue;
                     }
-                    if (!channelIndexMap.containsKey(hsmChan.name)) {
-                        channelIndexMap.put(hsmChan.name, channelIndex);
+                    if (!channelIndexMap.containsKey(hsmChan.channel)) {
+                        channelIndexMap.put(hsmChan.channel, channelIndex);
                         channelIndex++;
                     }
-                    chd = new ChannelData("data_" + hsmChan.name + "_" + hsmChan.task, false, true);
+                    chd = new ChannelData("data_" + hsmChan.channel.getChannelName() + "_" + hsmChan.task.getTaskName(), false, true);
                     hsmChans.add(chd);
-                    chd = new ChannelData("retData_" + hsmChan.name + "_" + hsmChan.task, true, true);
+                    chd = new ChannelData("retData_" + hsmChan.channel.getChannelName() + "_" + hsmChan.task.getTaskName(), true, true);
                     hsmChans.add(chd);
                 }
                 for (ChannelData hsmChan : hsmChans) {
@@ -800,19 +832,20 @@ public class SecurityGenerationForTMAP implements Runnable {
                     }
                 }
                 if (addChan) {
-                    TMLChannel channel = new TMLChannel("nonceCh" + task.getName().split("__")[1] + "_" + task2.getName().split("__")[1], task.getReferenceObject());
+                    TMLChannel channel = new TMLChannel("nonceCh" + task.getTaskName() + "_" +
+                            task2.getTaskName(), task.getReferenceObject());
                     if (tmlmodel.getChannelByName(channel.getName()) == null) {
-                        if (hsmTasks.contains(task.getName().replaceAll(title + "__", ""))) {
-                            channel.setOriginTask(tmap.getTaskByName("HSM_" + taskHSMMap.get(task.getName().replaceAll(title + "__", ""))));
-                            tmap.getTaskByName("HSM_" + taskHSMMap.get(task.getName().replaceAll(title + "__", ""))).addWriteTMLChannel(channel);
+                        if (hsmTasks.contains(task)) {
+                            channel.setOriginTask(tmap.getTaskByName("HSM_" + taskHSMMap.get(task)));
+                            tmap.getTaskByName("HSM_" + taskHSMMap.get(task)).addWriteTMLChannel(channel);
                         } else {
                             channel.setOriginTask(task);
                             task.addWriteTMLChannel(channel);
                         }
 
-                        if (hsmTasks.contains(task2.getName().replaceAll(title + "__", ""))) {
-                            channel.setDestinationTask(tmap.getTaskByName("HSM_" + taskHSMMap.get(task2.getName().replaceAll(title + "__", ""))));
-                            tmap.getTaskByName("HSM_" + taskHSMMap.get(task2.getName().replaceAll(title + "__", ""))).addReadTMLChannel(channel);
+                        if (hsmTasks.contains(task2)) {
+                            channel.setDestinationTask(tmap.getTaskByName("HSM_" + taskHSMMap.get(task2)));
+                            tmap.getTaskByName("HSM_" + taskHSMMap.get(task2)).addReadTMLChannel(channel);
                         } else {
                             channel.setDestinationTask(task2);
                             task2.addReadTMLChannel(channel);
@@ -826,8 +859,12 @@ public class SecurityGenerationForTMAP implements Runnable {
             }
         }
 
-        for (String cpuName : selectedCPUTasks.keySet()) {          
-            buildHSMActivityDiagram(cpuName);
+        for (String cpuName : selectedCPUTasks.keySet()) {
+            try {
+                buildHSMActivityDiagram(cpuName);
+            } catch (TMLCheckingError e) {
+                throw new RuntimeException(e);
+            }
             //Add a private bus to Hardware Accelerator with the task for hsm
 
             //Find the CPU the task is mapped to
@@ -906,7 +943,7 @@ public class SecurityGenerationForTMAP implements Runnable {
             // TraceManager.addDev("Adding nonces to " + task.getName());
 
             for (TMLTask task2 : toSecureRev.get(task)) {
-                TMLChannel channel = tmlmodel.getChannelByName("nonceCh" + task.getName().split("__")[1] + "_" + task2.getName().split("__")[1]);
+                TMLChannel channel = tmlmodel.getChannelByName("nonceCh" + task.getTaskName() + "_" + task2.getTaskName());
                 
                 List<TMLChannel> chans, chans2;
                 
@@ -928,8 +965,8 @@ public class SecurityGenerationForTMAP implements Runnable {
                     }
                 }
                 
-                if (hsmTasks.contains(task.getName().replaceAll(title + "__", ""))) {
-                    chans = tmlmodel.getChannelsFromMe(tmap.getTaskByName("HSM_" + taskHSMMap.get(task.getName().replaceAll(title + "__", ""))));
+                if (hsmTasks.contains(task)) {
+                    chans = tmlmodel.getChannelsFromMe(tmap.getTaskByName("HSM_" + taskHSMMap.get(task)));
                     for (TMLChannel chan : chans) {
                         for (HwCommunicationNode mappedNode : tmap.getAllCommunicationNodesOfChannel(chan)) {
                             if (!(mappedNode instanceof HwMemory)) {
@@ -962,8 +999,8 @@ public class SecurityGenerationForTMAP implements Runnable {
                     }
                 }
 
-                if (hsmTasks.contains(task2.getName().replaceAll(title + "__", ""))) {
-                    chans2 = tmlmodel.getChannelsToMe(tmap.getTaskByName("HSM_" + taskHSMMap.get(task2.getName().replaceAll(title + "__", ""))));
+                if (hsmTasks.contains(task2)) {
+                    chans2 = tmlmodel.getChannelsToMe(tmap.getTaskByName("HSM_" + taskHSMMap.get(task2)));
                     for (TMLChannel chan2 : chans2) {
                         for (HwCommunicationNode mappedNode : tmap.getAllCommunicationNodesOfChannel(chan2)) {
                             if (!(mappedNode instanceof HwMemory)) {
@@ -994,22 +1031,14 @@ public class SecurityGenerationForTMAP implements Runnable {
             //For each occurence of a write channel operator, add encryption/nonces before it
 
 
-            for (String channel : secOutChannels.get(task)) {
+            for (TMLChannel channel : secOutChannels.get(task)) {
                 Set<TMLActivityElement> channelInstances = new HashSet<TMLActivityElement>();
-                TMLChannel tmlc = tmlmodel.getChannelByName(title + "__" + channel);
-                if (tmlc == null) {
-                    //Find by origin port instead
-                    tmlc = tmlmodel.getChannelByOriginPortName(channel);
-                }
-                if (tmlc == null) {
-                    continue;
-                }
                 //First, find the connector that points to it. We will add the encryption, nonce operators directly before the write channel operator
                 for (TMLActivityElement elem : taskAD.getElements()) {
                     if (elem instanceof TMLWriteChannel) {
                         TMLWriteChannel writeChannel = (TMLWriteChannel) elem;
                         for (int i = 0; i < writeChannel.getNbOfChannels(); i++) {
-                            if (writeChannel.getChannel(i).getName().equals(tmlc.getName()) && writeChannel.securityPattern == null) {
+                            if (writeChannel.getChannel(i).getName().equals(channel.getName()) && writeChannel.getSecurityPattern() == null) {
                                 if (fromStart != null) {
                                     channelInstances.add(elem);
                                 }
@@ -1020,33 +1049,30 @@ public class SecurityGenerationForTMAP implements Runnable {
                 for (TMLActivityElement elem : channelInstances) {
                     
                     //Add encryption operator
-                    TMLExecC encC = new TMLExecC(channelSecMap.get(channel).name, taskAD.getReferenceObject());
-                    encC.securityPattern = new SecurityPattern(channelSecMap.get(channel));
-                    encC.securityPattern.setProcess(SecurityPattern.ENCRYPTION_PROCESS);
-                    encC.setAction(Integer.toString(channelSecMap.get(channel).encTime));
+                    TMLExecC encC = new TMLExecC(channelSecMap.get(channel).getName(), taskAD.getReferenceObject());
+                    encC.setSecurityPattern(channelSecMap.get(channel));
+                    encC.setAction(Integer.toString(channelSecMap.get(channel).getEncTime()));
                     tmlmodel.addSecurityPattern(channelSecMap.get(channel));
-                    if (tmlmodel.securityTaskMap.containsKey(channelSecMap.get(channel))) {
-                        if (!tmlmodel.securityTaskMap.get(channelSecMap.get(channel)).contains(task)) {
-                            tmlmodel.securityTaskMap.get(channelSecMap.get(channel)).add(task);
+                    if (tmlmodel.getSecurityTaskMap().containsKey(channelSecMap.get(channel))) {
+                        if (!tmlmodel.getSecurityTaskMap().get(channelSecMap.get(channel)).contains(task)) {
+                            tmlmodel.getSecurityTaskMap().get(channelSecMap.get(channel)).add(task);
                         }
                     } else {
                         List<TMLTask> listTask = new ArrayList<TMLTask>();
                         listTask.add(task);
-                        tmlmodel.securityTaskMap.put(channelSecMap.get(channel), listTask);
+                        tmlmodel.getSecurityTaskMap().put(channelSecMap.get(channel), listTask);
                     }
                     
                     TMLActivityElement prevElem = taskAD.getPrevious(elem);
                     if (nonceOutChannels.get(task).contains(channel)) {
-                        SecurityPattern secPatternNonce = new SecurityPattern("nonce_" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1], SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                        if (tmlc != null) {
-                            encC.securityPattern.nonce = secPatternNonce.getName();
-                        }
+                        SecurityPattern secPatternNonce = new SecurityPattern("nonce_" + channel.getDestinationTask().getTaskName() + "_" + channel.getOriginTask().getTaskName(), SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", "");
+                        encC.getSecurityPattern().setNonce(secPatternNonce.getName());
                         boolean addNewReadNonce = true;
                         for (TMLActivityElement elemT : taskAD.getElements()) {
                             if (elemT instanceof TMLReadChannel) {
                                 TMLReadChannel readElem = (TMLReadChannel) elemT;
-                                if (readElem.securityPattern != null) {
-                                    if(readElem.securityPattern.getName().equals(secPatternNonce.getName())) {
+                                if (readElem.getSecurityPattern() != null) {
+                                    if(readElem.getSecurityPattern().getName().equals(secPatternNonce.getName())) {
                                         addNewReadNonce = false;
                                         break;
                                     }
@@ -1058,25 +1084,24 @@ public class SecurityGenerationForTMAP implements Runnable {
                             TMLReadChannel rd = new TMLReadChannel("", taskAD.getReferenceObject());
                             //System.out.println("tmlc " + tmlc);
                             //System.out.println("Checking "+ tmlc.getDestinationTask() + " " + tmlc.getOriginTask());
-                            List<TMLChannel> matches = tmlmodel.getChannels(tmlc.getDestinationTask(), tmlc.getOriginTask());
+                            List<TMLChannel> matches = tmlmodel.getChannels(channel.getDestinationTask(), channel.getOriginTask());
 
-                            if (matches.size() > 0) {
-                                rd.setName(matches.get(0).getName().replaceAll(title + "__", ""));
+                            if (!matches.isEmpty()) {
+                                rd.setName(matches.get(0).getChannelName());
                                 if (tmlmodel.getChannelByName(rd.getName()) != null) {
                                     rd.addChannel(tmlmodel.getChannelByName(rd.getName()));
                                 } else if (tmlmodel.getChannelByShortName(rd.getName()) != null) {
                                     rd.addChannel(tmlmodel.getChannelByShortName(rd.getName()));
                                 }
                             } else {
-                                rd.setName("nonceCh" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1]);
+                                rd.setName("nonceCh" + channel.getDestinationTask().getTaskName() + "_" + channel.getOriginTask().getTaskName());
                                 if (tmlmodel.getChannelByName(rd.getName()) != null) {
                                     rd.addChannel(tmlmodel.getChannelByName(rd.getName()));
                                 } else if (tmlmodel.getChannelByShortName(rd.getName()) != null) {
                                     rd.addChannel(tmlmodel.getChannelByShortName(rd.getName()));
                                 }
                             }
-                            secPatternNonce.originTask = rd.getChannel(0).getOriginTask().getName().replaceAll(title + "__", "");
-                            rd.securityPattern = secPatternNonce;  
+                            rd.setSecurityPattern(secPatternNonce);
                             rd.setNbOfSamples("1");                   
                             TMLActivityElement nextFirst = taskAD.getFirst().getNextElement(0);
                             taskAD.getFirst().setNewNext(nextFirst, rd);
@@ -1096,8 +1121,8 @@ public class SecurityGenerationForTMAP implements Runnable {
                         if (elemAC instanceof TMLWriteChannel) {
                             TMLWriteChannel wChannel = (TMLWriteChannel) elemAC;
                             for (int i=0; i < wChannel.getNbOfChannels(); i++) {
-                                if (channel.equals(wChannel.getChannel(i).getName().replaceAll(title + "__", "")) && wChannel.securityPattern == null) {
-                                    wChannel.securityPattern = channelSecMap.get(channel);
+                                if (channel.equals(wChannel.getChannel(i)) && wChannel.getSecurityPattern() == null) {
+                                    wChannel.setSecurityPattern(channelSecMap.get(channel));
                                     // wChannel.setEncForm(true);
                                 }
                             }
@@ -1106,22 +1131,14 @@ public class SecurityGenerationForTMAP implements Runnable {
                 }
             }
 
-            for (String channel : macOutChannels.get(task)) {
+            for (TMLChannel channel : macOutChannels.get(task)) {
                 //Add MAC before writechannel
-                TMLChannel tmlc = tmlmodel.getChannelByName(title + "__" + channel);
-                //First, find the connector that points to it. We will add the encryption, nonce operators directly before the write channel operator
-                if (tmlc == null) {
-                    tmlc = tmlmodel.getChannelByOriginPortName(channel);
-                }
-                if (tmlc == null) {
-                    continue;
-                }
                 Set<TMLActivityElement> channelInstances = new HashSet<TMLActivityElement>();
                 for (TMLActivityElement elem : taskAD.getElements()) {
                     if (elem instanceof TMLWriteChannel) {
                         TMLWriteChannel writeChannel = (TMLWriteChannel) elem;
                         for (int i=0; i < writeChannel.getNbOfChannels(); i++) {
-                            if (writeChannel.getChannel(i).getName().equals(tmlc.getName()) && writeChannel.securityPattern == null) {
+                            if (writeChannel.getChannel(i).getName().equals(channel.getName()) && writeChannel.getSecurityPattern() == null) {
                                 fromStart = taskAD.getPrevious(elem);
                                 if (fromStart != null) {
                                     channelInstances.add(elem);
@@ -1132,34 +1149,31 @@ public class SecurityGenerationForTMAP implements Runnable {
                 }
                 for (TMLActivityElement elem : channelInstances) {
                     //SecurityPattern secPattern = new SecurityPattern(channelSecMap.get(channel), SecurityPattern.MAC_PATTERN, overhead, overhead, encComp, decComp, "", "", "");
-                    channelSecMap.get(channel).type = SecurityPattern.MAC_PATTERN;
-                    TMLExecC encC = new TMLExecC(channelSecMap.get(channel).name, taskAD.getReferenceObject());
-                    encC.securityPattern = new SecurityPattern(channelSecMap.get(channel));
-                    encC.securityPattern.setProcess(SecurityPattern.ENCRYPTION_PROCESS);
-                    encC.setAction(Integer.toString(channelSecMap.get(channel).encTime));
+                    channelSecMap.get(channel).setType(SecurityPattern.MAC_PATTERN);
+                    TMLExecC encC = new TMLExecC(channelSecMap.get(channel).getName(), taskAD.getReferenceObject());
+                    encC.setSecurityPattern(channelSecMap.get(channel));
+                    encC.setAction(Integer.toString(channelSecMap.get(channel).getEncTime()));
                     tmlmodel.addSecurityPattern(channelSecMap.get(channel));
-                    if (tmlmodel.securityTaskMap.containsKey(channelSecMap.get(channel))) {
-                        if (!tmlmodel.securityTaskMap.get(channelSecMap.get(channel)).contains(task)) {
-                            tmlmodel.securityTaskMap.get(channelSecMap.get(channel)).add(task);
+                    if (tmlmodel.getSecurityTaskMap().containsKey(channelSecMap.get(channel))) {
+                        if (!tmlmodel.getSecurityTaskMap().get(channelSecMap.get(channel)).contains(task)) {
+                            tmlmodel.getSecurityTaskMap().get(channelSecMap.get(channel)).add(task);
                         }
                     } else {
                         List<TMLTask> listTask = new ArrayList<TMLTask>();
                         listTask.add(task);
-                        tmlmodel.securityTaskMap.put(channelSecMap.get(channel), listTask);
+                        tmlmodel.getSecurityTaskMap().put(channelSecMap.get(channel), listTask);
                     }
 
                     TMLActivityElement prevElem = taskAD.getPrevious(elem);
                     if (nonceOutChannels.get(task).contains(channel)) {
-                        SecurityPattern secPatternNonce = new SecurityPattern("nonce_" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1], SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                        if (tmlc != null) {
-                            encC.securityPattern.nonce = secPatternNonce.getName();
-                        }
+                        SecurityPattern secPatternNonce = new SecurityPattern("nonce_" + channel.getDestinationTask().getTaskName() + "_" + channel.getOriginTask().getTaskName(), SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", "");
+                        encC.getSecurityPattern().setNonce(secPatternNonce.getName());
                         boolean addNewReadNonce = true;
                         for (TMLActivityElement elemT : taskAD.getElements()) {
                             if (elemT instanceof TMLReadChannel) {
                                 TMLReadChannel readElem = (TMLReadChannel) elemT;
-                                if (readElem.securityPattern != null) {
-                                    if(readElem.securityPattern.getName().equals(secPatternNonce.getName())) {
+                                if (readElem.getSecurityPattern() != null) {
+                                    if(readElem.getSecurityPattern().getName().equals(secPatternNonce.getName())) {
                                         addNewReadNonce = false;
                                         break;
                                     }
@@ -1170,24 +1184,23 @@ public class SecurityGenerationForTMAP implements Runnable {
                             //If we need to receive a nonce
                             TMLReadChannel rd = new TMLReadChannel("", taskAD.getReferenceObject());
                             //Receive any nonces if ensuring authenticity
-                            List<TMLChannel> matches = tmlmodel.getChannels(tmlc.getDestinationTask(), tmlc.getOriginTask());
-                            if (matches.size() > 0) {
-                                rd.setName(matches.get(0).getName().replaceAll(title + "__", ""));
+                            List<TMLChannel> matches = tmlmodel.getChannels(channel.getDestinationTask(), channel.getOriginTask());
+                            if (!matches.isEmpty()) {
+                                rd.setName(matches.get(0).getChannelName());
                                 if (tmlmodel.getChannelByName(rd.getName()) != null) {
                                     rd.addChannel(tmlmodel.getChannelByName(rd.getName()));
                                 } else if (tmlmodel.getChannelByShortName(rd.getName()) != null) {
                                     rd.addChannel(tmlmodel.getChannelByShortName(rd.getName()));
                                 }
                             } else {
-                                rd.setName("nonceCh" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1]);
+                                rd.setName("nonceCh" + channel.getDestinationTask().getTaskName() + "_" + channel.getOriginTask().getTaskName());
                                 if (tmlmodel.getChannelByName(rd.getName()) != null) {
                                     rd.addChannel(tmlmodel.getChannelByName(rd.getName()));
                                 } else if (tmlmodel.getChannelByShortName(rd.getName()) != null) {
                                     rd.addChannel(tmlmodel.getChannelByShortName(rd.getName()));
                                 }
                             }
-                            secPatternNonce.originTask = rd.getChannel(0).getOriginTask().getName().replaceAll(title + "__", "");
-                            rd.securityPattern = secPatternNonce;
+                            rd.setSecurityPattern(secPatternNonce);
                             rd.setNbOfSamples("1");
                             TMLActivityElement nextFirst = taskAD.getFirst().getNextElement(0);
                             taskAD.getFirst().setNewNext(nextFirst, rd);
@@ -1206,8 +1219,8 @@ public class SecurityGenerationForTMAP implements Runnable {
                         if (elemA instanceof TMLWriteChannel) {
                             TMLWriteChannel wChannel = (TMLWriteChannel) elemA;
                             for (int i=0; i < wChannel.getNbOfChannels(); i++) {
-                                if (channel.equals(wChannel.getChannel(i).getName().replaceAll(title + "__", "")) && wChannel.securityPattern == null) {
-                                    wChannel.securityPattern = channelSecMap.get(channel); 
+                                if (channel.equals(wChannel.getChannel(i)) && wChannel.getSecurityPattern() == null) {
+                                    wChannel.setSecurityPattern(channelSecMap.get(channel));
                                     // wChannel.setEncForm(true);
                                 }
                             }
@@ -1215,13 +1228,13 @@ public class SecurityGenerationForTMAP implements Runnable {
                     }
                 }
             }
-            for (String channel : hsmSecOutChannels.get(task)) {
+            for (TMLChannel channel : hsmSecOutChannels.get(task)) {
                 Set<TMLActivityElement> channelInstances = new HashSet<TMLActivityElement>();
                 for (TMLActivityElement elem : taskAD.getElements()) {
                     if (elem instanceof TMLWriteChannel) {
                         TMLWriteChannel writeChannel = (TMLWriteChannel) elem;
                         for (int i=0; i < writeChannel.getNbOfChannels(); i++) {
-                            if (writeChannel.getChannel(i).getName().replaceAll(title + "__", "").equals(channel) && writeChannel.securityPattern == null) {
+                            if (writeChannel.getChannel(i).equals(channel) && writeChannel.getSecurityPattern() == null) {
                                 fromStart = taskAD.getPrevious(elem);
                                 if (fromStart != null) {
                                     channelInstances.add(elem);
@@ -1232,20 +1245,12 @@ public class SecurityGenerationForTMAP implements Runnable {
                 }
                 for (TMLActivityElement chan : channelInstances) {
                     TMLWriteChannel writeChannel = (TMLWriteChannel) chan;
-                    String chanName = writeChannel.getChannel(0).getName().replaceAll(title + "__", "");
-                    TMLChannel tmlc = tmlmodel.getChannelByName(title + "__" + chanName);
-                    
-                    if (tmlc == null) {
-                        tmlc = tmlmodel.getChannelByOriginPortName(channel);
-                    }
-                    if (tmlc == null) {
-                        continue;
-                    }
-                    writeChannel.securityPattern = channelSecMap.get(channel);
+                    //String chanName = writeChannel.getChannel(0).getName().replaceAll(title + "__", "");
+                    writeChannel.setSecurityPattern(channelSecMap.get(channel));
                     // writeChannel.setEncForm(true);
                     fromStart = taskAD.getPrevious(chan);
 
-                    TMLSendRequest reqSend = new TMLSendRequest("startHSM_" + taskHSMMap.get(task.getName().split("__")[1]), taskAD.getReferenceObject());
+                    TMLSendRequest reqSend = new TMLSendRequest("startHSM_" + taskHSMMap.get(task), taskAD.getReferenceObject());
                     
                     TMLRequest req = tmlmodel.getRequestByName(reqSend.getName());
                     if (req != null) {
@@ -1253,15 +1258,16 @@ public class SecurityGenerationForTMAP implements Runnable {
                     }
 
                     if (reqSend.getNbOfParams() > 0) {
-                        reqSend.setParam(Integer.toString(channelIndexMap.get(chanName)), 0);
+                        reqSend.setParam(Integer.toString(channelIndexMap.get(channel)), 0);
                     } else {
-                        reqSend.addParam(Integer.toString(channelIndexMap.get(chanName)));
+                        reqSend.addParam(Integer.toString(channelIndexMap.get(channel)));
                     }
                     
                     fromStart.setNewNext(chan, reqSend);
                     taskAD.addElement(reqSend);
                     //Add write channel operator
-                    TMLWriteChannel wr = new TMLWriteChannel("data_" + chanName + "_" + task.getName().split("__")[1], taskAD.getReferenceObject());
+                    TMLWriteChannel wr = new TMLWriteChannel("data_" + channel.getChannelName() + "_" + task.getTaskName(),
+                            taskAD.getReferenceObject());
                     if (tmlmodel.getChannelByName(wr.getName()) != null) {
                         wr.addChannel(tmlmodel.getChannelByName(wr.getName()));
                     } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) {
@@ -1317,13 +1323,14 @@ public class SecurityGenerationForTMAP implements Runnable {
                     } */
 
                     //Read channel operator to receive hsm data
-                    TMLReadChannel rd2 = new TMLReadChannel("retData_" + chanName + "_" + task.getName().split("__")[1], taskAD.getReferenceObject());
+                    TMLReadChannel rd2 = new TMLReadChannel("retData_" + channel.getChannelName() + "_" + task.getTaskName(),
+                            taskAD.getReferenceObject());
                     if (tmlmodel.getChannelByName(rd2.getName()) != null) {
                         rd2.addChannel(tmlmodel.getChannelByName(rd2.getName()));
                     } else if (tmlmodel.getChannelByShortName(rd2.getName()) != null) {
                         rd2.addChannel(tmlmodel.getChannelByShortName(rd2.getName()));
                     }
-                    rd2.securityPattern = channelSecMap.get(chanName);
+                    rd2.setSecurityPattern(channelSecMap.get(channel));
                     rd2.setNbOfSamples("1"); 
                     taskAD.addElement(rd2);
 
@@ -1333,7 +1340,7 @@ public class SecurityGenerationForTMAP implements Runnable {
                 }
             }
 
-            for (String channel : hsmSecInChannels.get(task)) {
+            for (TMLChannel channel : hsmSecInChannels.get(task)) {
                 //System.out.println("Checking hsmsecinchannel " + channel + " " + task.getName());
                 Set<TMLActivityElement> channelInstances = new HashSet<TMLActivityElement>();
                 //TGConnector conn = new TGConnectorTMLAD(0, 0, 0, 0, 0, 0, false, null, tad, null, null, new Vector<Point>());
@@ -1342,7 +1349,7 @@ public class SecurityGenerationForTMAP implements Runnable {
                     if (elem instanceof TMLReadChannel) {
                         TMLReadChannel readChannel = (TMLReadChannel) elem;
                         for (int i=0; i<readChannel.getNbOfChannels(); i++) {
-                            if (readChannel.getChannel(i).getName().replaceAll(title + "__", "").equals(channel) && readChannel.securityPattern == null) {
+                            if (readChannel.getChannel(i).equals(channel) && readChannel.getSecurityPattern() == null) {
                                 fromStart = taskAD.getPrevious(elem);
                                 if (fromStart != null) {
                                     channelInstances.add(elem);
@@ -1354,42 +1361,37 @@ public class SecurityGenerationForTMAP implements Runnable {
                 //System.out.println("matches " + channelInstances);
                 for (TMLActivityElement chan : channelInstances) {
                     TMLReadChannel readChannel = (TMLReadChannel) chan;
-                    String chanName = readChannel.getChannel(0).getName().replaceAll(title + "__", "");
-                    TMLChannel tmlc = tmlmodel.getChannelByName(title + "__" + chanName);
-                    if (tmlc == null) {
-                        tmlc = tmlmodel.getChannelByDestinationPortName(channel);
-                    }
-                    if (tmlc == null) {
-                        continue;
-                    }
-                    readChannel.securityPattern = channelSecMap.get(chanName);
+                    //String chanName = readChannel.getChannel(0).getName().replaceAll(title + "__", "");
+
+                    readChannel.setSecurityPattern(channelSecMap.get(channel));
                     // readChannel.setEncForm(true);
                 
                     fromStart = taskAD.getPrevious(chan);
                     TMLActivityElement nextReadCh = chan.getNextElement(0);
                    
-                    TMLSendRequest reqSend = new TMLSendRequest("startHSM_" + taskHSMMap.get(task.getName().split("__")[1]), taskAD.getReferenceObject());
+                    TMLSendRequest reqSend = new TMLSendRequest("startHSM_" + taskHSMMap.get(task), taskAD.getReferenceObject());
                     TMLRequest req = tmlmodel.getRequestByName(reqSend.getName());
                     if (req != null) {
                         reqSend.setRequest(req);
                     }
                     if (reqSend.getNbOfParams() > 0) {
-                        reqSend.setParam(Integer.toString(channelIndexMap.get(chanName)), 0);
+                        reqSend.setParam(Integer.toString(channelIndexMap.get(channel)), 0);
                     } else {
-                        reqSend.addParam(Integer.toString(channelIndexMap.get(chanName)));
+                        reqSend.addParam(Integer.toString(channelIndexMap.get(channel)));
                     }
                     taskAD.addElement(reqSend);
                     fromStart.setNewNext(chan, reqSend);
                     reqSend.addNext(chan);
 
                     //Add write channel operator
-                    TMLWriteChannel wr = new TMLWriteChannel("data_" + chanName + "_" + task.getName().split("__")[1], taskAD.getReferenceObject());
+                    TMLWriteChannel wr = new TMLWriteChannel("data_" + channel.getChannelName() + "_" + task.getTaskName(),
+                            taskAD.getReferenceObject());
                     if (tmlmodel.getChannelByName(wr.getName()) != null) {
                         wr.addChannel(tmlmodel.getChannelByName(wr.getName()));
                     } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) {
                         wr.addChannel(tmlmodel.getChannelByShortName(wr.getName()));
                     }
-                    wr.securityPattern = channelSecMap.get(chanName);
+                    wr.setSecurityPattern(channelSecMap.get(channel));
                     wr.setNbOfSamples("1");
                     taskAD.addElement(wr);
 
@@ -1467,7 +1469,8 @@ public class SecurityGenerationForTMAP implements Runnable {
 
                     //Add read channel operator
 
-                    TMLReadChannel rd = new TMLReadChannel("retData_" + chanName + "_" + task.getName().split("__")[1], taskAD.getReferenceObject());
+                    TMLReadChannel rd = new TMLReadChannel("retData_" + channel.getChannelName() + "_" + task.getTaskName(),
+                            taskAD.getReferenceObject());
                     if (tmlmodel.getChannelByName(rd.getName()) != null) {
                         rd.addChannel(tmlmodel.getChannelByName(rd.getName()));
                     } else if (tmlmodel.getChannelByShortName(rd.getName()) != null) {
@@ -1483,22 +1486,16 @@ public class SecurityGenerationForTMAP implements Runnable {
 
                 }
             }
-            for (String channel : macInChannels.get(task)) {
+            for (TMLChannel channel : macInChannels.get(task)) {
                 //Add decryptmac after readchannel
                 Set<TMLActivityElement> channelInstances = new HashSet<TMLActivityElement>();
                 //Find read channel operator
-                TMLChannel tmlc = tmlmodel.getChannelByName(title + "__" + channel);
-                if (tmlc == null) {
-                    tmlc = tmlmodel.getChannelByDestinationPortName(channel);
-                }
-                if (tmlc == null) {
-                    continue;
-                }
+
                 for (TMLActivityElement elem : taskAD.getElements()) {
                     if (elem instanceof TMLReadChannel) {
                         TMLReadChannel readChannel = (TMLReadChannel) elem;
                         for (int i = 0; i<readChannel.getNbOfChannels(); i++) {
-                            if (readChannel.getChannel(i).getName().equals(tmlc.getName()) && readChannel.securityPattern == null) {
+                            if (readChannel.getChannel(i).getName().equals(channel.getName()) && readChannel.getSecurityPattern() == null) {
                                 fromStart = taskAD.getPrevious(elem);
                                 if (fromStart != null) {
                                     channelInstances.add(elem);
@@ -1511,20 +1508,19 @@ public class SecurityGenerationForTMAP implements Runnable {
                     fromStart = taskAD.getPrevious(elem);
 
                     TMLReadChannel readChannel = (TMLReadChannel) elem;
-                    readChannel.securityPattern = channelSecMap.get(readChannel.getChannel(0).getName().replaceAll(title + "__", ""));
+                    readChannel.setSecurityPattern(channelSecMap.get(readChannel.getChannel(0)));
                     //Create nonce and send it
                     if (nonceInChannels.get(task).contains(channel)) {
-                        TMLExecC nonce = new TMLExecC("nonce_" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1], taskAD.getReferenceObject());
+                        TMLExecC nonce = new TMLExecC("nonce_" + channel.getDestinationTask().getTaskName() + "_" + channel.getOriginTask().getTaskName(), taskAD.getReferenceObject());
                         SecurityPattern secNonce = new SecurityPattern(nonce.getName(), SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                        nonce.securityPattern = secNonce;
-                        nonce.securityPattern.setProcess(SecurityPattern.ENCRYPTION_PROCESS);
-                        nonce.setAction(Integer.toString(secNonce.encTime));
+                        nonce.setSecurityPattern(secNonce);
+                        nonce.setAction(Integer.toString(secNonce.getEncTime()));
                         boolean addNewExecCNonce = true;
                         for (TMLActivityElement elemT : taskAD.getElements()) {
                             if (elemT instanceof TMLExecC) {
                                 TMLExecC exeCElem = (TMLExecC) elemT;
-                                if (exeCElem.securityPattern != null) {
-                                    if(exeCElem.securityPattern.getName().equals(secNonce.getName())) {
+                                if (exeCElem.getSecurityPattern() != null) {
+                                    if(exeCElem.getSecurityPattern().getName().equals(secNonce.getName())) {
                                         addNewExecCNonce = false;
                                         break;
                                     }
@@ -1534,14 +1530,14 @@ public class SecurityGenerationForTMAP implements Runnable {
                         if (addNewExecCNonce) {
                             //Create a nonce operator and a write channel operator
                             tmlmodel.addSecurityPattern(secNonce);
-                            if (tmlmodel.securityTaskMap.containsKey(secNonce)) {
-                                if (!tmlmodel.securityTaskMap.get(secNonce).contains(task)) {
-                                    tmlmodel.securityTaskMap.get(secNonce).add(task);
+                            if (tmlmodel.getSecurityTaskMap().containsKey(secNonce)) {
+                                if (!tmlmodel.getSecurityTaskMap().get(secNonce).contains(task)) {
+                                    tmlmodel.getSecurityTaskMap().get(secNonce).add(task);
                                 }
                             } else {
                                 List<TMLTask> listTask = new ArrayList<TMLTask>();
                                 listTask.add(task);
-                                tmlmodel.securityTaskMap.put(secNonce, listTask);
+                                tmlmodel.getSecurityTaskMap().put(secNonce, listTask);
                             }
                             TMLActivityElement first = taskAD.getFirst();
                             TMLActivityElement nextFirst = first.getNextElement(0);
@@ -1550,27 +1546,26 @@ public class SecurityGenerationForTMAP implements Runnable {
                             TMLWriteChannel wr = new TMLWriteChannel("", taskAD.getReferenceObject());
                             //Send nonce along channel, the newly created nonce channel or an existing channel with the matching sender and receiver
                             //Find matching channels
-                            List<TMLChannel> matches = tmlmodel.getChannels(tmlc.getDestinationTask(), tmlc.getOriginTask());
+                            List<TMLChannel> matches = tmlmodel.getChannels(channel.getDestinationTask(), channel.getOriginTask());
 
-                            if (matches.size() > 0) {
-                                wr.setName(matches.get(0).getName().replaceAll(title + "__", ""));
+                            if (!matches.isEmpty()) {
+                                wr.setName(matches.get(0).getChannelName());
                                 if (tmlmodel.getChannelByName(wr.getName()) != null) {
                                     wr.addChannel(tmlmodel.getChannelByName(wr.getName()));
                                 } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) {
                                     wr.addChannel(tmlmodel.getChannelByShortName(wr.getName()));
                                 }
                             } else {
-                                wr.setName("nonceCh" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1]);
+                                wr.setName("nonceCh" + channel.getDestinationTask().getTaskName() + "_" + channel.getOriginTask().getTaskName());
                                 if (tmlmodel.getChannelByName(wr.getName()) != null) {
                                     wr.addChannel(tmlmodel.getChannelByName(wr.getName()));
                                 } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) {
                                     wr.addChannel(tmlmodel.getChannelByShortName(wr.getName()));
                                 }
                             }
-                            secNonce.originTask = wr.getChannel(0).getOriginTask().getName().replaceAll(title + "__", "");
                             //send the nonce along the channel
                             wr.setNbOfSamples("1");
-                            wr.securityPattern = secNonce;
+                            wr.setSecurityPattern(secNonce);
                             taskAD.addElement(wr);
                             nonce.addNext(wr);
                             wr.addNext(nextFirst);
@@ -1578,20 +1573,24 @@ public class SecurityGenerationForTMAP implements Runnable {
                     }
 
                     //Add decryption operator if it does not already exist
-                    TMLExecC dec = new TMLExecC(channelSecMap.get(readChannel.getChannel(0).getName().replaceAll(title + "__", "")).name, taskAD.getReferenceObject());
-                    dec.securityPattern = new SecurityPattern(channelSecMap.get(readChannel.getChannel(0).getName().replaceAll(title + "__", "")));
-                    dec.setAction(Integer.toString(dec.securityPattern.encTime));
-                    tmlmodel.addSecurityPattern(channelSecMap.get(readChannel.getChannel(0).getName().replaceAll(title + "__", "")));
-                    if (tmlmodel.securityTaskMap.containsKey(channelSecMap.get(readChannel.getChannel(0).getName().replaceAll(title + "__", "")))) {
-                        if (!tmlmodel.securityTaskMap.get(channelSecMap.get(readChannel.getChannel(0).getName().replaceAll(title + "__", ""))).contains(task)) {
-                            tmlmodel.securityTaskMap.get(channelSecMap.get(readChannel.getChannel(0).getName().replaceAll(title + "__", ""))).add(task);
+                    TMLExecC dec = new TMLExecC(channelSecMap.get(readChannel.getChannel(0)).getName(), taskAD.getReferenceObject());
+                    dec.setSecurityPattern(channelSecMap.get(readChannel.getChannel(0)));
+                    dec.setAction(Integer.toString(dec.getSecurityPattern().getEncTime()));
+                    tmlmodel.addSecurityPattern(channelSecMap.get(readChannel.getChannel(0)));
+                    if (tmlmodel.getSecurityTaskMap().containsKey(channelSecMap.get(readChannel.getChannel(0)))) {
+                        if (!tmlmodel.getSecurityTaskMap().get(channelSecMap.get(readChannel.getChannel(0))).contains(task)) {
+                            tmlmodel.getSecurityTaskMap().get(channelSecMap.get(readChannel.getChannel(0))).add(task);
                         }
                     } else {
                         List<TMLTask> listTask = new ArrayList<TMLTask>();
                         listTask.add(task);
-                        tmlmodel.securityTaskMap.put(channelSecMap.get(readChannel.getChannel(0).getName().replaceAll(title + "__", "")), listTask);
+                        tmlmodel.getSecurityTaskMap().put(channelSecMap.get(readChannel.getChannel(0)), listTask);
+                    }
+                    try {
+                        dec.setDecryptionProcess(true);
+                    } catch (TMLCheckingError e) {
+                        throw new RuntimeException(e);
                     }
-                    dec.securityPattern.setProcess(SecurityPattern.DECRYPTION_PROCESS);
                     taskAD.addElement(dec);
                     dec.addNext(readChannel.getNextElement(0));
                     readChannel.setNewNext(readChannel.getNextElement(0), dec);
@@ -1600,8 +1599,8 @@ public class SecurityGenerationForTMAP implements Runnable {
                         if (elemA instanceof TMLReadChannel) {
                             TMLReadChannel rdOfSameCh = (TMLReadChannel) elemA;
                             for (int i=0; i<rdOfSameCh.getNbOfChannels(); i++) {
-                                if (channel.equals(rdOfSameCh.getChannel(i).getName().replaceAll(title + "__", "")) && rdOfSameCh.securityPattern == null) {
-                                    rdOfSameCh.securityPattern = channelSecMap.get(channel);
+                                if (channel.equals(rdOfSameCh.getChannel(i)) && rdOfSameCh.getSecurityPattern() == null) {
+                                    rdOfSameCh.setSecurityPattern(channelSecMap.get(channel));
                                     // rdOfSameCh.setEncForm(true);
                                 }
                             }
@@ -1609,22 +1608,16 @@ public class SecurityGenerationForTMAP implements Runnable {
                     }
                 }
             }
-            for (String channel : secInChannels.get(task)) {
+            for (TMLChannel channel : secInChannels.get(task)) {
                 TraceManager.addDev("securing channel " + channel);
                 //Find read channel operator
-                TMLChannel tmlc = tmlmodel.getChannelByName(title + "__" + channel);
-                if (tmlc == null) {
-                    tmlc = tmlmodel.getChannelByDestinationPortName(channel);
-                }
-                if (tmlc == null) {
-                    continue;
-                }
+
                 HashSet<TMLActivityElement> channelInstances = new HashSet<TMLActivityElement>();
                 for (TMLActivityElement elem : taskAD.getElements()) {
                     if (elem instanceof TMLReadChannel) {
                         TMLReadChannel readChannel = (TMLReadChannel) elem;
                         for (int i=0; i<readChannel.getNbOfChannels(); i++) {
-                            if (readChannel.getChannel(i).getName().equals(tmlc.getName()) && readChannel.securityPattern == null) {
+                            if (readChannel.getChannel(i).getName().equals(channel.getName()) && readChannel.getSecurityPattern() == null) {
                                 fromStart = taskAD.getPrevious(elem);
                                 if (fromStart != null) {
                                     channelInstances.add(elem);
@@ -1639,17 +1632,16 @@ public class SecurityGenerationForTMAP implements Runnable {
                     fromStart = taskAD.getPrevious(elem);
                     if (nonceInChannels.get(task).contains(channel)) {
                         //Create a nonce operator and a write channel operator
-                        TMLExecC nonce = new TMLExecC("nonce_" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1], taskAD.getReferenceObject());
+                        TMLExecC nonce = new TMLExecC("nonce_" + channel.getDestinationTask().getTaskName() + "_" + channel.getOriginTask().getTaskName(), taskAD.getReferenceObject());
                         SecurityPattern secNonce = new SecurityPattern(nonce.getName(), SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                        nonce.securityPattern = secNonce;
-                        nonce.securityPattern.setProcess(SecurityPattern.ENCRYPTION_PROCESS);
-                        nonce.setAction(Integer.toString(secNonce.encTime));
+                        nonce.setSecurityPattern(secNonce);
+                        nonce.setAction(Integer.toString(secNonce.getEncTime()));
                         boolean addNewExecCNonce = true;
                         for (TMLActivityElement elemT : taskAD.getElements()) {
                             if (elemT instanceof TMLExecC) {
                                 TMLExecC exeCElem = (TMLExecC) elemT;
-                                if (exeCElem.securityPattern != null) {
-                                    if(exeCElem.securityPattern.getName().equals(secNonce.getName())) {
+                                if (exeCElem.getSecurityPattern() != null) {
+                                    if(exeCElem.getSecurityPattern().getName().equals(secNonce.getName())) {
                                         addNewExecCNonce = false;
                                         break;
                                     }
@@ -1658,14 +1650,14 @@ public class SecurityGenerationForTMAP implements Runnable {
                         }
                         if (addNewExecCNonce) {
                             tmlmodel.addSecurityPattern(secNonce);
-                            if (tmlmodel.securityTaskMap.containsKey(secNonce)) {
-                                if (!tmlmodel.securityTaskMap.get(secNonce).contains(task)) {
-                                    tmlmodel.securityTaskMap.get(secNonce).add(task);
+                            if (tmlmodel.getSecurityTaskMap().containsKey(secNonce)) {
+                                if (!tmlmodel.getSecurityTaskMap().get(secNonce).contains(task)) {
+                                    tmlmodel.getSecurityTaskMap().get(secNonce).add(task);
                                 }
                             } else {
                                 List<TMLTask> listTask = new ArrayList<TMLTask>();
                                 listTask.add(task);
-                                tmlmodel.securityTaskMap.put(secNonce, listTask);
+                                tmlmodel.getSecurityTaskMap().put(secNonce, listTask);
                             }
 
                             taskAD.addElement(nonce);
@@ -1675,27 +1667,27 @@ public class SecurityGenerationForTMAP implements Runnable {
                             TMLWriteChannel wr = new TMLWriteChannel("", taskAD.getReferenceObject());
                             //Send nonce along channel, the newly created nonce channel or an existing channel with the matching sender and receiver
                             //Find matching channels
-                            List<TMLChannel> matches = tmlmodel.getChannels(tmlc.getDestinationTask(), tmlc.getOriginTask());
+                            List<TMLChannel> matches = tmlmodel.getChannels(channel.getDestinationTask(), channel.getOriginTask());
 
-                            if (matches.size() > 0) {
-                                wr.setName(matches.get(0).getName().replaceAll(title + "__", ""));
+                            if (!matches.isEmpty()) {
+                                wr.setName(matches.get(0).getChannelName());
                                 if (tmlmodel.getChannelByName(wr.getName()) != null) {
                                     wr.addChannel(tmlmodel.getChannelByName(wr.getName()));
                                 } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) {
                                     wr.addChannel(tmlmodel.getChannelByShortName(wr.getName()));
                                 }
                             } else {
-                                wr.setName("nonceCh" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1]);
+                                wr.setName("nonceCh" + channel.getDestinationTask().getTaskName() + "_" + channel.getOriginTask().getTaskName());
                                 if (tmlmodel.getChannelByName(wr.getName()) != null) {
                                     wr.addChannel(tmlmodel.getChannelByName(wr.getName()));
                                 } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) {
                                     wr.addChannel(tmlmodel.getChannelByShortName(wr.getName()));
                                 }
                             }
-                            secNonce.originTask = wr.getChannel(0).getOriginTask().getName().replaceAll(title + "__", "");
+                            //secNonce.setOriginTask(wr.getChannel(0).getOriginTask().getName().replaceAll(title + "__", ""));
                             //send the nonce along the channel
                             wr.setNbOfSamples("1");
-                            wr.securityPattern = secNonce;
+                            wr.setSecurityPattern(secNonce);
                             taskAD.addElement(wr);
                             nonce.addNext(wr);
                             wr.addNext(nextFirst);
@@ -1703,24 +1695,27 @@ public class SecurityGenerationForTMAP implements Runnable {
                     }
 
                     //Now add the decrypt operator
-                    String readChShortName = readChannel.getChannel(0).getName().replaceAll(title + "__", "");
-                    readChannel.securityPattern = channelSecMap.get(readChShortName);
+                    readChannel.setSecurityPattern(channelSecMap.get(readChannel.getChannel(0)));
                     // readChannel.setEncForm(true);
                     //Add decryption operator if it does not already exist
-                    TMLExecC dec = new TMLExecC(channelSecMap.get(readChShortName).name, taskAD.getReferenceObject());
-                    dec.securityPattern = new SecurityPattern(channelSecMap.get(readChShortName));
-                    dec.securityPattern.setProcess(SecurityPattern.DECRYPTION_PROCESS);
-                    dec.setAction(Integer.toString(channelSecMap.get(readChShortName).encTime));
-
-                    tmlmodel.addSecurityPattern(channelSecMap.get(readChShortName));
-                    if (tmlmodel.securityTaskMap.containsKey(channelSecMap.get(readChShortName))) {
-                        if (!tmlmodel.securityTaskMap.get(channelSecMap.get(readChShortName)).contains(task)) {
-                            tmlmodel.securityTaskMap.get(channelSecMap.get(readChShortName)).add(task);
+                    TMLExecC dec = new TMLExecC(channelSecMap.get(readChannel.getChannel(0)).getName(), taskAD.getReferenceObject());
+                    dec.setSecurityPattern(channelSecMap.get(readChannel.getChannel(0)));
+                    try {
+                        dec.setDecryptionProcess(true);
+                    } catch (TMLCheckingError e) {
+                        throw new RuntimeException(e);
+                    }
+                    dec.setAction(Integer.toString(channelSecMap.get(readChannel.getChannel(0)).getEncTime()));
+
+                    tmlmodel.addSecurityPattern(channelSecMap.get(readChannel.getChannel(0)));
+                    if (tmlmodel.getSecurityTaskMap().containsKey(channelSecMap.get(readChannel.getChannel(0)))) {
+                        if (!tmlmodel.getSecurityTaskMap().get(channelSecMap.get(readChannel.getChannel(0))).contains(task)) {
+                            tmlmodel.getSecurityTaskMap().get(channelSecMap.get(readChannel.getChannel(0))).add(task);
                         }
                     } else {
                         List<TMLTask> listTask = new ArrayList<TMLTask>();
                         listTask.add(task);
-                        tmlmodel.securityTaskMap.put(channelSecMap.get(readChShortName), listTask);
+                        tmlmodel.getSecurityTaskMap().put(channelSecMap.get(readChannel.getChannel(0)), listTask);
                     }
 
                     taskAD.addElement(dec);
@@ -1731,9 +1726,8 @@ public class SecurityGenerationForTMAP implements Runnable {
                         if (elemA instanceof TMLReadChannel) {
                             TMLReadChannel rdOfSameCh = (TMLReadChannel) elemA;
                             for (int i=0; i < rdOfSameCh.getNbOfChannels(); i++) {
-                                String readSameChShortName = rdOfSameCh.getChannel(i).getName().replaceAll(title + "__", "");
-                                if (channel.equals(readSameChShortName) && rdOfSameCh.securityPattern == null) {
-                                    rdOfSameCh.securityPattern = channelSecMap.get(readSameChShortName);
+                                if (channel.equals(rdOfSameCh.getChannel(i)) && rdOfSameCh.getSecurityPattern() == null) {
+                                    rdOfSameCh.setSecurityPattern(channelSecMap.get(rdOfSameCh.getChannel(i)));
                                     // rdOfSameCh.setEncForm(true);
                                 }
                             }
@@ -1745,7 +1739,7 @@ public class SecurityGenerationForTMAP implements Runnable {
         return;
     }
 
-    public void buildHSMActivityDiagram(String cpuName) {
+    public void buildHSMActivityDiagram(String cpuName) throws TMLCheckingError {
         TMLModeling<?> tmlmodel = tmap.getTMLModeling();
         //Build HSM Activity diagram
         TMLTask task = tmap.getTaskByName("HSM_" + cpuName);
@@ -1762,7 +1756,7 @@ public class SecurityGenerationForTMAP implements Runnable {
         
         //fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
 
-        if (hsmChannelMap.get(cpuName).size() == 0) {
+        if (hsmChannelMap.get(cpuName).isEmpty()) {
             TMLStopState stop = new TMLStopState("stop", taskAD.getReferenceObject());
             taskAD.addElement(stop);
             //Connect stop and start
@@ -1789,21 +1783,21 @@ public class SecurityGenerationForTMAP implements Runnable {
         for (HSMChannel ch : hsmChannelMap.get(cpuName)) {
             if (!ch.nonceName.equals("")) {
                 if (ch.secType == HSMChannel.DEC) {
-                    TMLExecC nonce = new TMLExecC("nonce_" + ch.task + "_" + tmlmodel.getChannelByShortName(ch.name).getOriginTask().getName().replaceAll(appName + "__", ""), taskAD.getReferenceObject());
+                    TMLExecC nonce = new TMLExecC("nonce_" + ch.task.getTaskName() + "_" + ch.channel.getOriginTask().getTaskName(),
+                            taskAD.getReferenceObject());
                     SecurityPattern secNonce = new SecurityPattern(nonce.getName(), SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", "");
-                    nonce.securityPattern = secNonce;
-                    nonce.securityPattern.setProcess(SecurityPattern.ENCRYPTION_PROCESS);
-                    nonce.setAction(Integer.toString(secNonce.encTime));
+                    nonce.setSecurityPattern(secNonce);
+                    nonce.setAction(Integer.toString(secNonce.getEncTime()));
                     if (!writeNonces.contains(nonce.getName())) {
                         tmlmodel.addSecurityPattern(secNonce);
-                        if (tmlmodel.securityTaskMap.containsKey(secNonce)) {
-                            if (!tmlmodel.securityTaskMap.get(secNonce).contains(task)) {
-                                tmlmodel.securityTaskMap.get(secNonce).add(task);
+                        if (tmlmodel.getSecurityTaskMap().containsKey(secNonce)) {
+                            if (!tmlmodel.getSecurityTaskMap().get(secNonce).contains(task)) {
+                                tmlmodel.getSecurityTaskMap().get(secNonce).add(task);
                             }
                         } else {
                             List<TMLTask> listTask = new ArrayList<TMLTask>();
                             listTask.add(task);
-                            tmlmodel.securityTaskMap.put(secNonce, listTask);
+                            tmlmodel.getSecurityTaskMap().put(secNonce, listTask);
                         }
 
                         taskAD.addElement(nonce);
@@ -1814,35 +1808,37 @@ public class SecurityGenerationForTMAP implements Runnable {
                             lastCurElem.addNext(nonce);
                         }
                         TMLWriteChannel wr = new TMLWriteChannel("", taskAD.getReferenceObject());
-                        wr.setName("nonceCh" + ch.task + "_" + tmlmodel.getChannelByShortName(ch.name).getOriginTask().getName().split("__")[1]);
+                        wr.setName("nonceCh" + ch.task.getTaskName() + "_" + ch.channel.getOriginTask().getTaskName());
                         if (tmlmodel.getChannelByName(wr.getName()) != null) {
                             wr.addChannel(tmlmodel.getChannelByName(wr.getName()));
                         } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) {
                             wr.addChannel(tmlmodel.getChannelByShortName(wr.getName()));
                         }
-                        secNonce.originTask = task.getName();
+                        //secNonce.setOriginTask(task.getName());
                         //send the nonce along the channel
                         wr.setNbOfSamples("1");
-                        wr.securityPattern = secNonce;
+                        wr.setSecurityPattern(secNonce);
                         taskAD.addElement(wr);
                         nonce.addNext(wr);
                         lastCurElem = wr;
                         writeNonces.add(nonce.getName());
                     }
                 } else {
-                    SecurityPattern secPatternNonce = new SecurityPattern("nonce_" + tmlmodel.getChannelByShortName(ch.name).getDestinationTask().getName().replaceAll(appName + "__", "") + "_" + ch.task, SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", "");
+                    SecurityPattern secPatternNonce =
+                            new SecurityPattern("nonce_" + ch.channel.getDestinationTask().getTaskName() + "_" + ch.task.getTaskName(),
+                                    SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", "");
                     if (!readNonces.contains(secPatternNonce.getName())) {
                         //If we need to receive a nonce
                         TMLReadChannel rd = new TMLReadChannel("", taskAD.getReferenceObject());
                         //Receive any nonces if ensuring authenticity
-                        rd.setName("nonceCh" + tmlmodel.getChannelByShortName(ch.name).getDestinationTask().getName().replaceAll(appName + "__", "") + "_" + ch.task);
+                        rd.setName("nonceCh" + ch.channel.getDestinationTask().getTaskName() + "_" + ch.task.getTaskName());
                         if (tmlmodel.getChannelByName(rd.getName()) != null) {
                             rd.addChannel(tmlmodel.getChannelByName(rd.getName()));
                         } else if (tmlmodel.getChannelByShortName(rd.getName()) != null) {
                             rd.addChannel(tmlmodel.getChannelByShortName(rd.getName()));
                         }
-                        secPatternNonce.originTask = rd.getChannel(0).getOriginTask().getName().replaceAll(appName + "__", "");
-                        rd.securityPattern = secPatternNonce;
+                        //secPatternNonce.setOriginTask(rd.getChannel(0).getOriginTask().getName().replaceAll(appName + "__", ""));
+                        rd.setSecurityPattern(secPatternNonce);
                         rd.setNbOfSamples("1");
                         if (lastCurElem.getNbNext() > 0) {
                             lastCurElem.setNewNext(lastCurElem.getNextElement(0), rd);
@@ -1883,7 +1879,7 @@ public class SecurityGenerationForTMAP implements Runnable {
                     choice.addGuard("");
                     choice.addNext(choice2);
                 }
-                choice2.addGuard("[channelIndex==" + channelIndexMap.get(ch.name) + "]");
+                choice2.addGuard("[channelIndex==" + channelIndexMap.get(ch.channel) + "]");
 
                 if (choice.getGuard(choice.getNbGuard()-1).length() == 2) {
                     choice.setGuardAt(choice.getNbGuard()-1,"[(" + choice2.getGuard(choice2.getNbGuard()-1).substring(1, choice2.getGuard(choice2.getNbGuard()-1).length()-1) + ")]");
@@ -1907,8 +1903,8 @@ public class SecurityGenerationForTMAP implements Runnable {
                     prevRd = rdNonce;
                 }*/
                 
-                TMLReadChannel rd = new TMLReadChannel("data_" + ch.name + "_" + ch.task, taskAD.getReferenceObject());
-                rd.addChannel(tmlmodel.getChannelByName("data_" + ch.name + "_" + ch.task));
+                TMLReadChannel rd = new TMLReadChannel("data_" + ch.channel.getChannelName() + "_" + ch.task.getTaskName(), taskAD.getReferenceObject());
+                rd.addChannel(tmlmodel.getChannelByName("data_" + ch.channel.getChannelName() + "_" + ch.task.getTaskName()));
                 //
                 rd.setNbOfSamples("1"); 
                 taskAD.addElement(rd);
@@ -1918,26 +1914,26 @@ public class SecurityGenerationForTMAP implements Runnable {
                     rd.setEncForm(false);
                 } */
 
-                TMLWriteChannel wr = new TMLWriteChannel("retData_" + ch.name + "_" + ch.task, taskAD.getReferenceObject());
-                wr.addChannel(tmlmodel.getChannelByName("retData_" + ch.name + "_" + ch.task));
+                TMLWriteChannel wr = new TMLWriteChannel("retData_" + ch.channel.getChannelName() + "_" + ch.task.getTaskName(), taskAD.getReferenceObject());
+                wr.addChannel(tmlmodel.getChannelByName("retData_" + ch.channel.getChannelName() + "_" + ch.task.getTaskName()));
                 taskAD.addElement(wr);
                 wr.setNbOfSamples("1");
                 if (ch.secType == HSMChannel.DEC) {
-                    rd.securityPattern = channelSecMap.get(ch.name);
-                    TMLExecC dec = new TMLExecC(channelSecMap.get(ch.name).name, taskAD.getReferenceObject());
-                    dec.securityPattern = new SecurityPattern(channelSecMap.get(ch.name));
-                    dec.securityPattern.setProcess(SecurityPattern.DECRYPTION_PROCESS);
-                    dec.setAction(Integer.toString(channelSecMap.get(ch.name).encTime));
-
-                    tmlmodel.addSecurityPattern(channelSecMap.get(ch.name));
-                    if (tmlmodel.securityTaskMap.containsKey(channelSecMap.get(ch.name))) {
-                        if (!tmlmodel.securityTaskMap.get(channelSecMap.get(ch.name)).contains(task)) {
-                            tmlmodel.securityTaskMap.get(channelSecMap.get(ch.name)).add(task);
+                    rd.setSecurityPattern(channelSecMap.get(ch.channel));
+                    TMLExecC dec = new TMLExecC(channelSecMap.get(ch.channel).getName(), taskAD.getReferenceObject());
+                    dec.setSecurityPattern(channelSecMap.get(ch.channel));
+                    dec.setDecryptionProcess(true);
+                    dec.setAction(Integer.toString(channelSecMap.get(ch.channel).getEncTime()));
+
+                    tmlmodel.addSecurityPattern(channelSecMap.get(ch.channel));
+                    if (tmlmodel.getSecurityTaskMap().containsKey(channelSecMap.get(ch.channel))) {
+                        if (!tmlmodel.getSecurityTaskMap().get(channelSecMap.get(ch.channel)).contains(task)) {
+                            tmlmodel.getSecurityTaskMap().get(channelSecMap.get(ch.channel)).add(task);
                         }
                     } else {
                         List<TMLTask> listTask = new ArrayList<TMLTask>();
                         listTask.add(task);
-                        tmlmodel.securityTaskMap.put(channelSecMap.get(ch.name), listTask);
+                        tmlmodel.getSecurityTaskMap().put(channelSecMap.get(ch.channel), listTask);
                     }
 
                     taskAD.addElement(dec);
@@ -1952,37 +1948,36 @@ public class SecurityGenerationForTMAP implements Runnable {
                     //Connext stop and write channel
                     wr.addNext(stop);
                 } else {
-                    wr.securityPattern = channelSecMap.get(ch.name);
-                    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);
-                    enc.setAction(Integer.toString(channelSecMap.get(ch.name).encTime));
-
-                    tmlmodel.addSecurityPattern(channelSecMap.get(ch.name));
-                    if (tmlmodel.securityTaskMap.containsKey(channelSecMap.get(ch.name))) {
-                        if (!tmlmodel.securityTaskMap.get(channelSecMap.get(ch.name)).contains(task)) {
-                            tmlmodel.securityTaskMap.get(channelSecMap.get(ch.name)).add(task);
+                    wr.setSecurityPattern(channelSecMap.get(ch.channel));
+                    TMLExecC enc = new TMLExecC(channelSecMap.get(ch.channel).getName(), taskAD.getReferenceObject());
+                    enc.setSecurityPattern(channelSecMap.get(ch.channel));
+                    enc.setAction(Integer.toString(channelSecMap.get(ch.channel).getEncTime()));
+
+                    tmlmodel.addSecurityPattern(channelSecMap.get(ch.channel));
+                    if (tmlmodel.getSecurityTaskMap().containsKey(channelSecMap.get(ch.channel))) {
+                        if (!tmlmodel.getSecurityTaskMap().get(channelSecMap.get(ch.channel)).contains(task)) {
+                            tmlmodel.getSecurityTaskMap().get(channelSecMap.get(ch.channel)).add(task);
                         }
                     } else {
                         List<TMLTask> listTask = new ArrayList<TMLTask>();
                         listTask.add(task);
-                        tmlmodel.securityTaskMap.put(channelSecMap.get(ch.name), listTask);
+                        tmlmodel.getSecurityTaskMap().put(channelSecMap.get(ch.channel), listTask);
                     }
                     
                     if (ch.secType == HSMChannel.SENC) {
-                        enc.securityPattern.type = SecurityPattern.SYMMETRIC_ENC_PATTERN;
+                        enc.getSecurityPattern().setType(SecurityPattern.SYMMETRIC_ENC_PATTERN);
                     } else if (ch.secType == HSMChannel.AENC) {
-                        enc.securityPattern.type = SecurityPattern.ASYMMETRIC_ENC_PATTERN;
+                        enc.getSecurityPattern().setType(SecurityPattern.ASYMMETRIC_ENC_PATTERN);
                     } else if (ch.secType == HSMChannel.MAC) {
-                        enc.securityPattern.type = SecurityPattern.MAC_PATTERN;
+                        enc.getSecurityPattern().setType(SecurityPattern.MAC_PATTERN);
                     } else if (ch.secType == HSMChannel.NONCE) {
-                        enc.securityPattern.type = SecurityPattern.NONCE_PATTERN;
+                        enc.getSecurityPattern().setType(SecurityPattern.NONCE_PATTERN);
                     }
 
-                    enc.securityPattern.overhead = Integer.parseInt(overhead);
-                    enc.securityPattern.encTime = Integer.parseInt(encComp);
-                    enc.securityPattern.decTime = Integer.parseInt(decComp);
-                    enc.securityPattern.nonce = ch.nonceName;
+                    enc.getSecurityPattern().setOverhead(Integer.parseInt(overhead));
+                    enc.getSecurityPattern().setEncTime(Integer.parseInt(encComp));
+                    enc.getSecurityPattern().setDecTime(Integer.parseInt(decComp));
+                    enc.getSecurityPattern().setNonce(ch.nonceName);
                     taskAD.addElement(enc);
 
                     //Connect encrypt and readchannel
@@ -2003,7 +1998,7 @@ public class SecurityGenerationForTMAP implements Runnable {
 
             for (HSMChannel ch : hsmChannelMap.get(cpuName)) {
                 //Add guard as channelindex
-                choice.addGuard("[channelIndex==" + channelIndexMap.get(ch.name) + "]");
+                choice.addGuard("[channelIndex==" + channelIndexMap.get(ch.channel) + "]");
                 
                 TMLActivityElement prevRd = choice;
                 //If needed, receive nonce from task
@@ -2019,8 +2014,8 @@ public class SecurityGenerationForTMAP implements Runnable {
                     prevRd = rdNonce;
                 }*/
 
-                TMLReadChannel rd = new TMLReadChannel("data_" + ch.name + "_" + ch.task, taskAD.getReferenceObject());
-                rd.addChannel(tmlmodel.getChannelByName("data_" + ch.name + "_" + ch.task));
+                TMLReadChannel rd = new TMLReadChannel("data_" + ch.channel.getChannelName() + "_" + ch.task.getTaskName(), taskAD.getReferenceObject());
+                rd.addChannel(tmlmodel.getChannelByName("data_" + ch.channel.getChannelName() + "_" + ch.task.getTaskName()));
                 
                 rd.setNbOfSamples("1"); 
                 taskAD.addElement(rd);
@@ -2034,8 +2029,8 @@ public class SecurityGenerationForTMAP implements Runnable {
                 prevRd.addNext(rd);
 
                 //Send data back to task
-                TMLWriteChannel wr = new TMLWriteChannel("retData_" + ch.name + "_" + ch.task, taskAD.getReferenceObject());
-                wr.addChannel(tmlmodel.getChannelByName("retData_" + ch.name + "_" + ch.task));
+                TMLWriteChannel wr = new TMLWriteChannel("retData_" + ch.channel.getChannelName() + "_" + ch.task.getTaskName(), taskAD.getReferenceObject());
+                wr.addChannel(tmlmodel.getChannelByName("retData_" + ch.channel.getChannelName() + "_" + ch.task.getTaskName()));
 
                 //Return plaintext data if decrypting
                 /* if (ch.secType == HSMChannel.DEC) {
@@ -2045,23 +2040,23 @@ public class SecurityGenerationForTMAP implements Runnable {
                 
                 taskAD.addElement(wr);
                 if (ch.secType == HSMChannel.DEC) {
-                    rd.securityPattern = channelSecMap.get(ch.name);
+                    rd.setSecurityPattern(channelSecMap.get(ch.channel));
                     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));
-                    dec.securityPattern.setProcess(SecurityPattern.DECRYPTION_PROCESS);
-                    dec.setAction(Integer.toString(channelSecMap.get(ch.name).encTime));
-
-                    tmlmodel.addSecurityPattern(channelSecMap.get(ch.name));
-                    if (tmlmodel.securityTaskMap.containsKey(channelSecMap.get(ch.name))) {
-                        if (!tmlmodel.securityTaskMap.get(channelSecMap.get(ch.name)).contains(task)) {
-                            tmlmodel.securityTaskMap.get(channelSecMap.get(ch.name)).add(task);
+                    TMLExecC dec = new TMLExecC(channelSecMap.get(ch.channel).getName(), taskAD.getReferenceObject());
+                    dec.setSecurityPattern(channelSecMap.get(ch.channel));
+                    dec.setDecryptionProcess(true);
+                    dec.setAction(Integer.toString(channelSecMap.get(ch.channel).getEncTime()));
+
+                    tmlmodel.addSecurityPattern(channelSecMap.get(ch.channel));
+                    if (tmlmodel.getSecurityTaskMap().containsKey(channelSecMap.get(ch.channel))) {
+                        if (!tmlmodel.getSecurityTaskMap().get(channelSecMap.get(ch.channel)).contains(task)) {
+                            tmlmodel.getSecurityTaskMap().get(channelSecMap.get(ch.channel)).add(task);
                         }
                     } else {
                         List<TMLTask> listTask = new ArrayList<TMLTask>();
                         listTask.add(task);
-                        tmlmodel.securityTaskMap.put(channelSecMap.get(ch.name), listTask);
+                        tmlmodel.getSecurityTaskMap().put(channelSecMap.get(ch.channel), listTask);
                     }
                     
                     taskAD.addElement(dec);
@@ -2080,38 +2075,37 @@ public class SecurityGenerationForTMAP implements Runnable {
                     wr.addNext(stop);
 
                 } else {
-                    wr.securityPattern = channelSecMap.get(ch.name);
+                    wr.setSecurityPattern(channelSecMap.get(ch.channel));
                     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);
-                    enc.setAction(Integer.toString(channelSecMap.get(ch.name).encTime));
-
-                    tmlmodel.addSecurityPattern(channelSecMap.get(ch.name));
-                    if (tmlmodel.securityTaskMap.containsKey(channelSecMap.get(ch.name))) {
-                        if (!tmlmodel.securityTaskMap.get(channelSecMap.get(ch.name)).contains(task)) {
-                            tmlmodel.securityTaskMap.get(channelSecMap.get(ch.name)).add(task);
+                    TMLExecC enc = new TMLExecC(channelSecMap.get(ch.channel).getName(), taskAD.getReferenceObject());
+                    enc.setSecurityPattern(channelSecMap.get(ch.channel));
+                    enc.setAction(Integer.toString(channelSecMap.get(ch.channel).getEncTime()));
+
+                    tmlmodel.addSecurityPattern(channelSecMap.get(ch.channel));
+                    if (tmlmodel.getSecurityTaskMap().containsKey(channelSecMap.get(ch.channel))) {
+                        if (!tmlmodel.getSecurityTaskMap().get(channelSecMap.get(ch.channel)).contains(task)) {
+                            tmlmodel.getSecurityTaskMap().get(channelSecMap.get(ch.channel)).add(task);
                         }
                     } else {
                         List<TMLTask> listTask = new ArrayList<TMLTask>();
                         listTask.add(task);
-                        tmlmodel.securityTaskMap.put(channelSecMap.get(ch.name), listTask);
+                        tmlmodel.getSecurityTaskMap().put(channelSecMap.get(ch.channel), listTask);
                     }
 
                     if (ch.secType == HSMChannel.SENC) {
-                        enc.securityPattern.type = SecurityPattern.SYMMETRIC_ENC_PATTERN;
+                        enc.getSecurityPattern().setType(SecurityPattern.SYMMETRIC_ENC_PATTERN);
                     } else if (ch.secType == HSMChannel.AENC) {
-                        enc.securityPattern.type = SecurityPattern.ASYMMETRIC_ENC_PATTERN;
+                        enc.getSecurityPattern().setType(SecurityPattern.ASYMMETRIC_ENC_PATTERN);
                     } else if (ch.secType == HSMChannel.MAC) {
-                        enc.securityPattern.type = SecurityPattern.MAC_PATTERN;
+                        enc.getSecurityPattern().setType(SecurityPattern.MAC_PATTERN);
                     } else if (ch.secType == HSMChannel.NONCE) {
-                        enc.securityPattern.type = SecurityPattern.NONCE_PATTERN;
+                        enc.getSecurityPattern().setType(SecurityPattern.NONCE_PATTERN);
                     }
 
-                    enc.securityPattern.overhead = Integer.parseInt(overhead);
-                    enc.securityPattern.encTime = Integer.parseInt(encComp);
-                    enc.securityPattern.decTime = Integer.parseInt(decComp);
-                    enc.securityPattern.nonce = ch.nonceName;
+                    enc.getSecurityPattern().setOverhead(Integer.parseInt(overhead));
+                    enc.getSecurityPattern().setEncTime(Integer.parseInt(encComp));
+                    enc.getSecurityPattern().setDecTime(Integer.parseInt(decComp));
+                    enc.getSecurityPattern().setNonce(ch.nonceName);
                     taskAD.addElement(enc);
 
                     //Connect encrypt and readchannel
@@ -2137,123 +2131,121 @@ public class SecurityGenerationForTMAP implements Runnable {
         }
         //Find all Security Patterns, if they don't have an associated memory at encrypt and decrypt, tmap them
         TMLModeling<?> tmlm = tmap.getTMLModeling();
-        if (tmlm.securityTaskMap == null) {
+        if (tmlm.getSecurityTaskMap() == null) {
             return tmap;
         }
-        for (SecurityPattern sp : tmlm.securityTaskMap.keySet()) {
-            if (sp.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN) || sp.type.equals(SecurityPattern.MAC_PATTERN) || sp.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
-                for (TMLTask t : tmlm.securityTaskMap.get(sp)) {
+        for (SecurityPattern sp : tmlm.getSecurityTaskMap().keySet()) {
+            if (sp.getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN) || sp.getType().equals(SecurityPattern.MAC_PATTERN) || sp.getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
+                for (TMLTask t : tmlm.getSecurityTaskMap().get(sp)) {
                     HwExecutionNode node1 = tmap.getHwNodeOf(t);
                     boolean taskMappedToCPU = false;
                     if (node1 != null) {
-                        if (node1 instanceof HwExecutionNode) {
-                            HwExecutionNode cpuNode = node1;
-                            taskMappedToCPU = true;
-                            boolean keyMappedtoMem = false;
-                            HwLink lastLink = null;
-                            for (int i=0; i < tmap.getArch().getHwLinks().size(); i++) {
-                                HwLink link = tmap.getArch().getHwLinks().get(i);
-                                if (!keyMappedtoMem && link.hwnode == node1) {
-                                    lastLink = link;
-                                    if (link.bus.privacy == 1) {
-                                        HwBus curBus = link.bus;
-                                        boolean keyFound = false;
-                                        HwMemory memNodeToMap = null;
-                                        outer:
-                                        for (HwLink linkBus : tmap.getArch().getHwLinks()) {
-                                            if (linkBus.bus == curBus) {
-                                                if (linkBus.hwnode instanceof HwMemory) {
-                                                    memNodeToMap = (HwMemory) linkBus.hwnode;
-                                                    List<SecurityPattern> keys = tmap.getMappedPatterns(memNodeToMap);
-                                                    if (keys.contains(sp)) {
-                                                        keyFound = true;
-                                                        keyMappedtoMem = true;
-                                                        break outer;
-                                                    }
+                        HwExecutionNode cpuNode = node1;
+                        taskMappedToCPU = true;
+                        boolean keyMappedtoMem = false;
+                        HwLink lastLink = null;
+                        for (int i=0; i < tmap.getArch().getHwLinks().size(); i++) {
+                            HwLink link = tmap.getArch().getHwLinks().get(i);
+                            if (!keyMappedtoMem && link.hwnode == node1) {
+                                lastLink = link;
+                                if (link.bus.privacy == 1) {
+                                    HwBus curBus = link.bus;
+                                    boolean keyFound = false;
+                                    HwMemory memNodeToMap = null;
+                                    outer:
+                                    for (HwLink linkBus : tmap.getArch().getHwLinks()) {
+                                        if (linkBus.bus == curBus) {
+                                            if (linkBus.hwnode instanceof HwMemory) {
+                                                memNodeToMap = (HwMemory) linkBus.hwnode;
+                                                List<SecurityPattern> keys = tmap.getMappedPatterns(memNodeToMap);
+                                                if (keys.contains(sp)) {
+                                                    keyFound = true;
+                                                    keyMappedtoMem = true;
+                                                    break outer;
                                                 }
                                             }
                                         }
-                                        if (!keyFound) {
-                                            if (memNodeToMap != null) {
-                                                TraceManager.addDev("Adding " + sp.name + " key to " + memNodeToMap.getName());
-                                                tmap.addSecurityPattern(memNodeToMap, sp);
-                                                keyMappedtoMem = true;
-                                            } else {
-                                                HwMemory newHwMemory = new HwMemory(cpuNode.getName() + "KeysMemory");
-                                                TraceManager.addDev("Creating new memory: " + newHwMemory.getName());
-                                                tmap.getArch().addHwNode(newHwMemory);
-                                                
-                                                //Connect Bus and Memory
-                                                HwLink linkNewMemWithBus = new HwLink("link_" + newHwMemory.getName() + "_to_" + curBus.getName());
-                                                linkNewMemWithBus.setNodes(curBus, newHwMemory);
-                                                tmap.getArch().getHwLinks().add(linkNewMemWithBus);
-                                                tmap.addSecurityPattern(newHwMemory, sp);
-                                                TraceManager.addDev("Adding " + sp.name + " key to " + newHwMemory.getName());
-                                                keyMappedtoMem = true;
-                                            }
+                                    }
+                                    if (!keyFound) {
+                                        if (memNodeToMap != null) {
+                                            TraceManager.addDev("Adding " + sp.getName() + " key to " + memNodeToMap.getName());
+                                            tmap.addSecurityPattern(memNodeToMap, sp);
+                                            keyMappedtoMem = true;
+                                        } else {
+                                            HwMemory newHwMemory = new HwMemory(cpuNode.getName() + "KeysMemory");
+                                            TraceManager.addDev("Creating new memory: " + newHwMemory.getName());
+                                            tmap.getArch().addHwNode(newHwMemory);
+
+                                            //Connect Bus and Memory
+                                            HwLink linkNewMemWithBus = new HwLink("link_" + newHwMemory.getName() + "_to_" + curBus.getName());
+                                            linkNewMemWithBus.setNodes(curBus, newHwMemory);
+                                            tmap.getArch().getHwLinks().add(linkNewMemWithBus);
+                                            tmap.addSecurityPattern(newHwMemory, sp);
+                                            TraceManager.addDev("Adding " + sp.getName() + " key to " + newHwMemory.getName());
+                                            keyMappedtoMem = true;
                                         }
                                     }
                                 }
                             }
-                            if (!keyMappedtoMem) {
-                                if (lastLink != null) {
-                                    HwBus lastBusNode = lastLink.bus;
-                                    HwExecutionNode cpuArchiNode = cpuNode;
-
-                                    HwBridge newBridge = new HwBridge(cpuNode.getName() + "KeysBrigde");
-                                    tmap.getArch().addHwNode(newBridge);
-
-                                    HwBus newPrivateBus = new HwBus(cpuNode.getName() + "KeysPrivateBus");
-                                    newPrivateBus.privacy = HwBus.BUS_PRIVATE;
-                                    for (TMLElement elem : tmap.getLisMappedChannels(lastBusNode)) {
-                                        if (elem instanceof TMLChannel) {
-                                            tmap.addCommToHwCommNode(elem, newPrivateBus);
-                                        }
-                                    }
-                                    tmap.getArch().addHwNode(newPrivateBus);
-                                   
-                                    HwMemory memNodeToMap = new HwMemory(cpuNode.getName() + "KeysMemory");
-                                    TraceManager.addDev("Creating new memory: " + memNodeToMap.getName());
-                                    tmap.getArch().addHwNode(memNodeToMap);
-
-                                    tmap.addSecurityPattern(memNodeToMap, sp);
-                                    TraceManager.addDev("Adding " + sp.name + " key to " + memNodeToMap.getName());
-                                    keyMappedtoMem = true;
-
-                                    //Connect Bus and Memory
-                                    HwLink newLinkBusMemory = new HwLink("Link_"+newPrivateBus.getName() + "_" + memNodeToMap.getName());
-                                    newLinkBusMemory.setNodes(newPrivateBus, memNodeToMap);
-                                    tmap.getArch().addHwLink(newLinkBusMemory);
-
-                                    //Connect new Private Bus and Bridge
-                                    HwLink newLinkPrivateBusBridge = new HwLink("Link_"+newPrivateBus.getName() + "_" + newBridge.getName());
-                                    newLinkPrivateBusBridge.setNodes(newPrivateBus, newBridge);
-                                    tmap.getArch().addHwLink(newLinkPrivateBusBridge);
-
-                                    //Connect Public Bus and Bridge
-                                    HwLink newLinkPublicBusBridge = new HwLink("Link_"+lastBusNode.getName() + "_" + newBridge.getName());
-                                    newLinkPublicBusBridge.setNodes(lastLink.bus, newBridge);
-                                    tmap.getArch().addHwLink(newLinkPublicBusBridge);
-
-                                    //Connect new Private Bus and CPU
-                                    HwLink newLinkPrivateBusCPU = new HwLink("Link_"+newPrivateBus.getName() + "_" + cpuArchiNode.getName());
-                                    newLinkPrivateBusCPU.setNodes(newPrivateBus, cpuArchiNode);
-                                    tmap.getArch().addHwLink(newLinkPrivateBusCPU);
-
-
-                                    //Disconnect Public Bus and CPU
-                                    HwLink linkToRemove = null;
-                                    for (HwLink li: tmap.getArch().getHwLinks()) {
-                                        if (li.bus == lastLink.bus && li.hwnode == cpuNode) {
-                                            TraceManager.addDev("Disconnect :" + li.bus.getName() + " and " + li.hwnode.getName());
-                                            linkToRemove = li;
-                                            break;
-                                        }       
+                        }
+                        if (!keyMappedtoMem) {
+                            if (lastLink != null) {
+                                HwBus lastBusNode = lastLink.bus;
+                                HwExecutionNode cpuArchiNode = cpuNode;
+
+                                HwBridge newBridge = new HwBridge(cpuNode.getName() + "KeysBrigde");
+                                tmap.getArch().addHwNode(newBridge);
+
+                                HwBus newPrivateBus = new HwBus(cpuNode.getName() + "KeysPrivateBus");
+                                newPrivateBus.privacy = HwBus.BUS_PRIVATE;
+                                for (TMLElement elem : tmap.getLisMappedChannels(lastBusNode)) {
+                                    if (elem instanceof TMLChannel) {
+                                        tmap.addCommToHwCommNode(elem, newPrivateBus);
                                     }
-                                    if (linkToRemove != null) {
-                                        tmap.getArch().getHwLinks().remove(linkToRemove);
+                                }
+                                tmap.getArch().addHwNode(newPrivateBus);
+
+                                HwMemory memNodeToMap = new HwMemory(cpuNode.getName() + "KeysMemory");
+                                TraceManager.addDev("Creating new memory: " + memNodeToMap.getName());
+                                tmap.getArch().addHwNode(memNodeToMap);
+
+                                tmap.addSecurityPattern(memNodeToMap, sp);
+                                TraceManager.addDev("Adding " + sp.getName() + " key to " + memNodeToMap.getName());
+                                keyMappedtoMem = true;
+
+                                //Connect Bus and Memory
+                                HwLink newLinkBusMemory = new HwLink("Link_"+newPrivateBus.getName() + "_" + memNodeToMap.getName());
+                                newLinkBusMemory.setNodes(newPrivateBus, memNodeToMap);
+                                tmap.getArch().addHwLink(newLinkBusMemory);
+
+                                //Connect new Private Bus and Bridge
+                                HwLink newLinkPrivateBusBridge = new HwLink("Link_"+newPrivateBus.getName() + "_" + newBridge.getName());
+                                newLinkPrivateBusBridge.setNodes(newPrivateBus, newBridge);
+                                tmap.getArch().addHwLink(newLinkPrivateBusBridge);
+
+                                //Connect Public Bus and Bridge
+                                HwLink newLinkPublicBusBridge = new HwLink("Link_"+lastBusNode.getName() + "_" + newBridge.getName());
+                                newLinkPublicBusBridge.setNodes(lastLink.bus, newBridge);
+                                tmap.getArch().addHwLink(newLinkPublicBusBridge);
+
+                                //Connect new Private Bus and CPU
+                                HwLink newLinkPrivateBusCPU = new HwLink("Link_"+newPrivateBus.getName() + "_" + cpuArchiNode.getName());
+                                newLinkPrivateBusCPU.setNodes(newPrivateBus, cpuArchiNode);
+                                tmap.getArch().addHwLink(newLinkPrivateBusCPU);
+
+
+                                //Disconnect Public Bus and CPU
+                                HwLink linkToRemove = null;
+                                for (HwLink li: tmap.getArch().getHwLinks()) {
+                                    if (li.bus == lastLink.bus && li.hwnode == cpuNode) {
+                                        TraceManager.addDev("Disconnect :" + li.bus.getName() + " and " + li.hwnode.getName());
+                                        linkToRemove = li;
+                                        break;
                                     }
                                 }
+                                if (linkToRemove != null) {
+                                    tmap.getArch().getHwLinks().remove(linkToRemove);
+                                }
                             }
                         }
                     }
@@ -2274,14 +2266,13 @@ public class SecurityGenerationForTMAP implements Runnable {
         public static final int DEC = 3;
         public static final int AENC = 4;
         public static final int NONCE = 5;
-        public String name;
-        public String task;
-        public String securityContext = "";
+        public TMLChannel channel;
+        public TMLTask task;
         public int secType;
         public String nonceName = "";
 
-        public HSMChannel(String n, String t, int type) {
-            name = n;
+        public HSMChannel(TMLChannel n, TMLTask t, int type) {
+            channel = n;
             task = t;
             secType = type;
         }
diff --git a/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java b/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java
index 406a4befd4..914deb780f 100644
--- a/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java
+++ b/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java
@@ -41,10 +41,7 @@ import avatartranslator.*;
 import myutil.TraceManager;
 import tmltranslator.*;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -76,12 +73,12 @@ public class FullTML2Avatar {
     public Map<String, Object> stateObjectMap = new HashMap<String, Object>();
     public Map<TMLTask, List<SecurityPattern>> accessKeys = new HashMap<TMLTask, List<SecurityPattern>>();
 
-    HashMap<String, List<String>> secChannelMap = new HashMap<String, List<String>>();
+    HashMap<TMLChannel, Set<AvatarPragma>> secChannelMap = new HashMap<TMLChannel, Set<AvatarPragma>>();
 
     HashMap<String, AvatarAttributeState> signalAuthOriginMap = new HashMap<String, AvatarAttributeState>();
     HashMap<String, AvatarAttributeState> signalAuthDestMap = new HashMap<String, AvatarAttributeState>();
 
-    public ArrayList<SecurityPattern> secPatterns = new ArrayList<SecurityPattern>();
+    private ArrayList<SecurityPattern> secPatterns = new ArrayList<SecurityPattern>();
 
     List<AvatarSignal> signals = new ArrayList<AvatarSignal>();
     private final static Integer channelPublic = 0;
@@ -516,14 +513,14 @@ public class FullTML2Avatar {
                 asm.setStartState((AvatarStartState) elementList.get(0));
             }
             for (SecurityPattern secPattern : secPatterns) {
-                AvatarAttribute sec = block.getAvatarAttributeWithName(secPattern.name);
+                AvatarAttribute sec = block.getAvatarAttributeWithName(secPattern.getName());
                 if (sec != null) {
                     //sec = new AvatarAttribute(secPattern.name, AvatarType.INTEGER, block, null);
                     //AvatarAttribute enc = new AvatarAttribute(secPattern.name+"_encrypted", AvatarType.INTEGER, block, null);
                     //	block.addAttribute(sec);
                     //	block.addAttribute(enc);
                     //}
-                    avspec.addPragma(new AvatarPragmaSecret("#Confidentiality " + block.getName() + "." + secPattern.name, null, sec));
+                    avspec.addPragma(new AvatarPragmaSecret("#Confidentiality " + block.getName() + "." + secPattern.getName(), null, sec));
                 }
             }
 
@@ -534,20 +531,7 @@ public class FullTML2Avatar {
         for (String s : signalAuthOriginMap.keySet()) {
             if (signalAuthDestMap.containsKey(s)) {
                 AvatarPragmaAuthenticity pragma = new AvatarPragmaAuthenticity("#Authenticity " + signalAuthOriginMap.get(s).getName() + " " + signalAuthDestMap.get(s).getName(), signalAuthOriginMap.get(s).getReferenceObject(), signalAuthOriginMap.get(s), signalAuthDestMap.get(s));
-                if (secChannelMap.containsKey(s)) {
-                    for (String channel : secChannelMap.get(s)) {
-                        TMLChannel ch = tmlmodel.getChannelByShortName(channel);
-                        if (ch != null) {
-                            if (ch.checkAuth) {
-                                avspec.addPragma(pragma);
-                                break;
-                            }
-                        }
-                    }
-
-                } else {
-                    avspec.addPragma(pragma);
-                }
+                avspec.addPragma(pragma);
             }
         }
 
@@ -786,7 +770,7 @@ public class FullTML2Avatar {
             }
         }
 
-        tmlmodel.secChannelMap = secChannelMap;
+        tmlmodel.setSecChannelMap(secChannelMap);
 
 //			System.out.println("avatar spec\n" +avspec);
         avspec.removeEmptyTransitions(true);
@@ -1161,118 +1145,118 @@ public class FullTML2Avatar {
             elementList.add(as);
             elementList.add(tran);
 
-            if (security && ae.securityPattern != null) {
+            if (security && ae.getSecurityPattern() != null) {
                 //If encryption
-                if (ae.securityPattern != null && ae.securityPattern.process == SecurityPattern.ENCRYPTION_PROCESS) {
-                    secPatterns.add(ae.securityPattern);
-                    if (ae.securityPattern.type.equals(SecurityPattern.ADVANCED_PATTERN)) {
+                if (!((TMLActivityElementWithAction) ae).isDecryptionProcess()) {
+                    secPatterns.add(ae.getSecurityPattern());
+                    if (ae.getSecurityPattern().getType().equals(SecurityPattern.ADVANCED_PATTERN)) {
                         //Type Advanced
-                        tran.addAction(ae.securityPattern.formula);
-                    } else if (ae.securityPattern.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) {
+                        tran.addAction(ae.getSecurityPattern().getFormula());
+                    } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) {
                         //Type Symmetric Encryption
-                        if (!ae.securityPattern.nonce.isEmpty()) {
+                        if (!ae.getSecurityPattern().getNonce().isEmpty()) {
                             //Concatenate nonce to data
 
                             //Create concat2 method
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.nonce, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
 
                             AvatarMethod concat2 = new AvatarMethod("concat2", ae);
-                            concat2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            concat2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.nonce));
-                            concat2.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
+                            concat2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            concat2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()));
+                            concat2.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
 
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.nonce) != null) {
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()) != null) {
                                 block.addMethod(concat2);
-                                tran.addAction(ae.securityPattern.name + "=concat2(" + ae.securityPattern.name + "," + ae.securityPattern.nonce + ")");
+                                tran.addAction(ae.getSecurityPattern().getName() + "=concat2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getNonce() + ")");
                             }
                         }
-                        if (!ae.securityPattern.key.isEmpty()) {
+                        if (!ae.getSecurityPattern().getKey().isEmpty()) {
                             //Securing a key
 
                             //Create sencrypt method for key
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.key, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
 
                             AvatarMethod sencrypt = new AvatarMethod("sencrypt", ae);
-                            sencrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.key));
-                            sencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name));
-                            sencrypt.addReturnParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key));
+                            sencrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getKey()));
+                            sencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()));
+                            sencrypt.addReturnParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()));
 
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.key) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null) {
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null) {
                                 block.addMethod(sencrypt);
-                                tran.addAction("encryptedKey_" + ae.securityPattern.key + " = sencrypt(key_" + ae.securityPattern.key + ", key_" + ae.securityPattern.name + ")");
+                                tran.addAction("encryptedKey_" + ae.getSecurityPattern().getKey() + " = sencrypt(key_" + ae.getSecurityPattern().getKey() + ", key_" + ae.getSecurityPattern().getName() + ")");
                             }
                         } else {
                             //Securing data
 
                             //Create sencrypt method for data
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
 
                             AvatarMethod sencrypt = new AvatarMethod("sencrypt", ae);
-                            sencrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            sencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name));
-                            sencrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted"));
+                            sencrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            sencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()));
+                            sencrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted"));
 
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null) {
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null) {
                                 block.addMethod(sencrypt);
                             }
-                            tran.addAction(ae.securityPattern.name + "_encrypted = sencrypt(" + ae.securityPattern.name + ", key_" + ae.securityPattern.name + ")");
+                            tran.addAction(ae.getSecurityPattern().getName() + "_encrypted = sencrypt(" + ae.getSecurityPattern().getName() + ", key_" + ae.getSecurityPattern().getName() + ")");
                         }
                         //Set as origin for authenticity
-                        ae.securityPattern.originTask = block.getName();
-                        ae.securityPattern.state1 = as;
-                    } else if (ae.securityPattern.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
-                        if (!ae.securityPattern.nonce.isEmpty()) {
+                        //ae.getSecurityPattern().setOriginTask(block.getName());
+                        ae.getSecurityPattern().setState1(as);
+                    } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
+                        if (!ae.getSecurityPattern().getNonce().isEmpty()) {
                             //Concatenating a nonce
                             //Add concat2 method
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.nonce, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
                             AvatarMethod concat2 = new AvatarMethod("concat2", ae);
-                            concat2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            concat2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.nonce));
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.nonce) != null) {
+                            concat2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            concat2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()));
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()) != null) {
                                 block.addMethod(concat2);
-                                tran.addAction(ae.securityPattern.name + "=concat2(" + ae.securityPattern.name + "," + ae.securityPattern.nonce + ")");
+                                tran.addAction(ae.getSecurityPattern().getName() + "=concat2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getNonce() + ")");
                             }
                         }
                         //Securing a key instead of data
-                        if (!ae.securityPattern.key.isEmpty()) {
+                        if (!ae.getSecurityPattern().getKey().isEmpty()) {
                             //Add aencrypt method
                             AvatarMethod aencrypt = new AvatarMethod("aencrypt", ae);
-                            block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.key, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("pubKey_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            aencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.key));
-                            aencrypt.addParameter(block.getAvatarAttributeWithName("pubKey_" + ae.securityPattern.name));
-                            aencrypt.addReturnParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key));
-                            if (block.getAvatarAttributeWithName("key_" + ae.securityPattern.key) != null && block.getAvatarAttributeWithName("pubKey_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key) != null) {
+                            block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("pubKey_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            aencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()));
+                            aencrypt.addParameter(block.getAvatarAttributeWithName("pubKey_" + ae.getSecurityPattern().getName()));
+                            aencrypt.addReturnParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()));
+                            if (block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("pubKey_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()) != null) {
                                 block.addMethod(aencrypt);
-                                tran.addAction("encryptedKey_" + ae.securityPattern.key + " = aencrypt(key_" + ae.securityPattern.key + ", pubKey_" + ae.securityPattern.name + ")");
+                                tran.addAction("encryptedKey_" + ae.getSecurityPattern().getKey() + " = aencrypt(key_" + ae.getSecurityPattern().getKey() + ", pubKey_" + ae.getSecurityPattern().getName() + ")");
                             }
                         } else {
                             //Securing data
 
                             //Add aencrypt method
                             AvatarMethod aencrypt = new AvatarMethod("aencrypt", ae);
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("pubKey_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null));
-                            aencrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            aencrypt.addParameter(block.getAvatarAttributeWithName("pubKey_" + ae.securityPattern.name));
-                            aencrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted"));
-                            if (block.getAvatarAttributeWithName("pubKey_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null) {
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("pubKey_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null));
+                            aencrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            aencrypt.addParameter(block.getAvatarAttributeWithName("pubKey_" + ae.getSecurityPattern().getName()));
+                            aencrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted"));
+                            if (block.getAvatarAttributeWithName("pubKey_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null) {
                                 block.addMethod(aencrypt);
-                                tran.addAction(ae.securityPattern.name + "_encrypted = aencrypt(" + ae.securityPattern.name + ", pubKey_" + ae.securityPattern.name + ")");
+                                tran.addAction(ae.getSecurityPattern().getName() + "_encrypted = aencrypt(" + ae.getSecurityPattern().getName() + ", pubKey_" + ae.getSecurityPattern().getName() + ")");
                             }
                         }
                         //Set as origin state for authenticity
-                        ae.securityPattern.originTask = block.getName();
-                        ae.securityPattern.state1 = as;
-                    } else if (ae.securityPattern.type.equals(SecurityPattern.NONCE_PATTERN)) {
+                        //ae.getSecurityPattern().setOriginTask(block.getName());
+                        ae.getSecurityPattern().setState1(as);
+                    } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.NONCE_PATTERN)) {
                         //Do nothing except occupy time to forge nonce
 
 
@@ -1286,113 +1270,113 @@ public class FullTML2Avatar {
 							arandom.addNext(tran);
 							elementList.add(tran);
 							block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));*/
-                    } else if (ae.securityPattern.type.equals(SecurityPattern.HASH_PATTERN)) {
+                    } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.HASH_PATTERN)) {
                         AvatarMethod hash = new AvatarMethod("hash", ae);
-                        hash.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                        if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) {
+                        hash.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                        if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) {
                             block.addMethod(hash);
                         }
-                        tran.addAction(ae.securityPattern.name + "_encrypted = hash(" + ae.securityPattern.name + ")");
-                    } else if (ae.securityPattern.type.equals(SecurityPattern.MAC_PATTERN)) {
-                        block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                        block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                        block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null)); //msg + mac(msg)
-                        if (!ae.securityPattern.nonce.isEmpty()) {
+                        tran.addAction(ae.getSecurityPattern().getName() + "_encrypted = hash(" + ae.getSecurityPattern().getName() + ")");
+                    } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.MAC_PATTERN)) {
+                        block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                        block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                        block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null)); //msg + mac(msg)
+                        if (!ae.getSecurityPattern().getNonce().isEmpty()) {
                             //Add nonce
 
                             //Add concat2 method
                             AvatarMethod concat = new AvatarMethod("concat2", ae);
-                            concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.nonce));
-                            concat.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.nonce) != null) {
+                            concat.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            concat.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()));
+                            concat.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()) != null) {
                                 block.addMethod(concat);
-                                tran.addAction(ae.securityPattern.name + "=concat2(" + ae.securityPattern.name + "," + ae.securityPattern.nonce + ")");
+                                tran.addAction(ae.getSecurityPattern().getName() + "=concat2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getNonce() + ")");
                             }
                         }
 
                         //Create MAC method
                         AvatarMethod mac = new AvatarMethod("MAC", ae);
-                        AvatarAttribute macattr = new AvatarAttribute(ae.securityPattern.name + "_mac", AvatarType.INTEGER, block, null);
+                        AvatarAttribute macattr = new AvatarAttribute(ae.getSecurityPattern().getName() + "_mac", AvatarType.INTEGER, block, null);
                         block.addAttribute(macattr);
 
 
-                        mac.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                        mac.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name));
+                        mac.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                        mac.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()));
                         mac.addReturnParameter(macattr);
 
-                        if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null) {
+                        if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null) {
                             block.addMethod(mac);
-                            tran.addAction(ae.securityPattern.name + "_mac = MAC(" + ae.securityPattern.name + ",key_" + ae.securityPattern.name + ")");
+                            tran.addAction(ae.getSecurityPattern().getName() + "_mac = MAC(" + ae.getSecurityPattern().getName() + ",key_" + ae.getSecurityPattern().getName() + ")");
                         }
 
                         //Concatenate msg and mac(msg)
 
                         //Create concat2 method
                         AvatarMethod concat = new AvatarMethod("concat2", ae);
-                        concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                        concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_mac"));
-                        concat.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted"));
+                        concat.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                        concat.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_mac"));
+                        concat.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted"));
                         //concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.));
-                        if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null) {
+                        if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null) {
                             block.addMethod(concat);
-                            tran.addAction(ae.securityPattern.name + "_encrypted = concat2(" + ae.securityPattern.name + "," + ae.securityPattern.name + "_mac)");
+                            tran.addAction(ae.getSecurityPattern().getName() + "_encrypted = concat2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + "_mac)");
                         }
-                        ae.securityPattern.originTask = block.getName();
-                        ae.securityPattern.state1 = as;
+                        //ae.getSecurityPattern().setOriginTask(block.getName());
+                        ae.getSecurityPattern().setState1(as);
                     }
                     //Set attributestate for authenticity
-                    if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) {
-                        AvatarAttributeState authOrigin = new AvatarAttributeState(block.getName() + "." + as.getName() + "." + ae.securityPattern.name, ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.securityPattern.name), as);
-                        signalAuthOriginMap.put(ae.securityPattern.name, authOrigin);
+                    if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) {
+                        AvatarAttributeState authOrigin = new AvatarAttributeState(block.getName() + "." + as.getName() + "." + ae.getSecurityPattern().getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()), as);
+                        signalAuthOriginMap.put(ae.getSecurityPattern().getName(), authOrigin);
                     }
 
-                } else if (ae.securityPattern != null && ae.securityPattern.process == SecurityPattern.DECRYPTION_PROCESS) {
+                } else  {
                     //Decryption action
                     //block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
                     //block.addAttribute(new AvatarAttribute(ae.securityPattern.name+"_encrypted", AvatarType.INTEGER, block, null));
-                    if (ae.securityPattern.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) {
-                        if (!ae.securityPattern.key.isEmpty()) {
+                    if (ae.getSecurityPattern().getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) {
+                        if (!ae.getSecurityPattern().getKey().isEmpty()) {
                             //Decrypting a key
                             //Add sdecrypt method
                             AvatarMethod sdecrypt = new AvatarMethod("sdecrypt", ae);
-                            block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.key, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null));
-
-                            sdecrypt.addParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key));
-                            sdecrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name));
-                            sdecrypt.addReturnParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.key));
-                            if (block.getAvatarAttributeWithName("key_" + ae.securityPattern.key) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key) != null) {
+                            block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null));
+
+                            sdecrypt.addParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()));
+                            sdecrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()));
+                            sdecrypt.addReturnParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()));
+                            if (block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()) != null) {
                                 block.addMethod(sdecrypt);
-                                tran.addAction("key_" + ae.securityPattern.key + " = sdecrypt(encryptedKey_" + ae.securityPattern.key + ", key_" + ae.securityPattern.name + ")");
+                                tran.addAction("key_" + ae.getSecurityPattern().getKey() + " = sdecrypt(encryptedKey_" + ae.getSecurityPattern().getKey() + ", key_" + ae.getSecurityPattern().getName() + ")");
                             }
                         } else {
                             //Decrypting data
                             AvatarMethod sdecrypt = new AvatarMethod("sdecrypt", ae);
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null));
-
-                            sdecrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted"));
-                            sdecrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name));
-                            sdecrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name) != null) {
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null));
+
+                            sdecrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted"));
+                            sdecrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()));
+                            sdecrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) {
                                 block.addMethod(sdecrypt);
-                                tran.addAction(ae.securityPattern.name + " = sdecrypt(" + ae.securityPattern.name + "_encrypted, key_" + ae.securityPattern.name + ")");
+                                tran.addAction(ae.getSecurityPattern().getName() + " = sdecrypt(" + ae.getSecurityPattern().getName() + "_encrypted, key_" + ae.getSecurityPattern().getName() + ")");
                             }
                         }
-                        if (!ae.securityPattern.nonce.isEmpty()) {
+                        if (!ae.getSecurityPattern().getNonce().isEmpty()) {
                             //Separate out the nonce
-                            block.addAttribute(new AvatarAttribute("testnonce_" + ae.securityPattern.nonce, AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("testnonce_" + ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null));
                             //Add get2 method
                             AvatarMethod get2 = new AvatarMethod("get2", ae);
-                            get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            get2.addParameter(block.getAvatarAttributeWithName("testnonce_" + ae.securityPattern.nonce));
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName("testnonce_" + ae.securityPattern.nonce) != null) {
+                            get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            get2.addParameter(block.getAvatarAttributeWithName("testnonce_" + ae.getSecurityPattern().getNonce()));
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("testnonce_" + ae.getSecurityPattern().getNonce()) != null) {
                                 block.addMethod(get2);
-                                tran.addAction("get2(" + ae.securityPattern.name + "," + ae.securityPattern.name + ",testnonce_" + ae.securityPattern.nonce + ")");
+                                tran.addAction("get2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + ",testnonce_" + ae.getSecurityPattern().getNonce() + ")");
                             }
 
                             //Add state after get2 statement
@@ -1404,74 +1388,74 @@ public class FullTML2Avatar {
                             elementList.add(tran);
 
                             //Guard transition to determine if nonce matches
-                            tran.setGuard("testnonce_" + ae.securityPattern.nonce + "==" + ae.securityPattern.nonce);
+                            tran.setGuard("testnonce_" + ae.getSecurityPattern().getNonce() + "==" + ae.getSecurityPattern().getNonce());
                         }
                         //Add a dummy state afterwards for authenticity after decrypting the data
                         AvatarState dummy = new AvatarState(reworkStringName(ae.getName() + "_dummy"), ae.getReferenceObject(), block);
-                        ae.securityPattern.state2 = dummy;
+                        ae.getSecurityPattern().setState2(dummy);
                         tran.addNext(dummy);
                         tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject());
                         dummy.addNext(tran);
                         elementList.add(dummy);
                         elementList.add(tran);
-                        if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) {
-                            AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + ae.securityPattern.name, ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.securityPattern.name), dummy);
-                            signalAuthDestMap.put(ae.securityPattern.name, authDest);
+                        if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) {
+                            AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + ae.getSecurityPattern().getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()), dummy);
+                            signalAuthDestMap.put(ae.getSecurityPattern().getName(), authDest);
                         }
-                    } else if (ae.securityPattern.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
+                    } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
                         AvatarMethod adecrypt = new AvatarMethod("adecrypt", ae);
 
-                        if (!ae.securityPattern.key.isEmpty()) {
+                        if (!ae.getSecurityPattern().getKey().isEmpty()) {
                             //Decrypting key
 
 
                             //Add adecrypt method
-                            block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("privKey_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.key, AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("privKey_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null));
 
-                            adecrypt.addParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key));
-                            adecrypt.addParameter(block.getAvatarAttributeWithName("privKey_" + ae.securityPattern.name));
-                            adecrypt.addReturnParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.key));
+                            adecrypt.addParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()));
+                            adecrypt.addParameter(block.getAvatarAttributeWithName("privKey_" + ae.getSecurityPattern().getName()));
+                            adecrypt.addReturnParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()));
 
-                            if (block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key) != null && block.getAvatarAttributeWithName("privKey_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.key) != null) {
+                            if (block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("privKey_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()) != null) {
                                 block.addMethod(adecrypt);
-                                tran.addAction("key_" + ae.securityPattern.key + " = adecrypt(encryptedKey_" + ae.securityPattern.key + ", privKey_" + ae.securityPattern.name + ")");
+                                tran.addAction("key_" + ae.getSecurityPattern().getKey() + " = adecrypt(encryptedKey_" + ae.getSecurityPattern().getKey() + ", privKey_" + ae.getSecurityPattern().getName() + ")");
                             }
                         } else {
                             //Decrypting data
 
                             //Add adecrypt method
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("privKey_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
-
-                            adecrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted"));
-                            adecrypt.addParameter(block.getAvatarAttributeWithName("privKey_" + ae.securityPattern.name));
-                            adecrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null && block.getAvatarAttributeWithName("privKey_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name) != null) {
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("privKey_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+
+                            adecrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted"));
+                            adecrypt.addParameter(block.getAvatarAttributeWithName("privKey_" + ae.getSecurityPattern().getName()));
+                            adecrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null && block.getAvatarAttributeWithName("privKey_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) {
                                 block.addMethod(adecrypt);
-                                tran.addAction(ae.securityPattern.name + " = adecrypt(" + ae.securityPattern.name + "_encrypted, privKey_" + ae.securityPattern.name + ")");
+                                tran.addAction(ae.getSecurityPattern().getName() + " = adecrypt(" + ae.getSecurityPattern().getName() + "_encrypted, privKey_" + ae.getSecurityPattern().getName() + ")");
                             }
                         }
-                        if (!ae.securityPattern.nonce.isEmpty()) {
-                            block.addAttribute(new AvatarAttribute("testnonce_" + ae.securityPattern.nonce, AvatarType.INTEGER, block, null));
+                        if (!ae.getSecurityPattern().getNonce().isEmpty()) {
+                            block.addAttribute(new AvatarAttribute("testnonce_" + ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null));
                             AvatarMethod get2 = new AvatarMethod("get2", ae);
-                            get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            get2.addParameter(block.getAvatarAttributeWithName("testnonce_" + ae.securityPattern.nonce));
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name) != null) {
+                            get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            get2.addParameter(block.getAvatarAttributeWithName("testnonce_" + ae.getSecurityPattern().getNonce()));
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) {
                                 block.addMethod(get2);
                             }
 
-                            tran.addAction("get2(" + ae.securityPattern.name + "," + ae.securityPattern.name + ",testnonce_" + ae.securityPattern.nonce + ")");
+                            tran.addAction("get2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + ",testnonce_" + ae.getSecurityPattern().getNonce() + ")");
                             AvatarState guardState = new AvatarState(reworkStringName(ae.getName() + "_guarded"), ae.getReferenceObject(), block);
                             tran.addNext(guardState);
                             tran = new AvatarTransition(block, "__guard_" + ae.getName(), ae.getReferenceObject());
                             elementList.add(guardState);
                             elementList.add(tran);
                             guardState.addNext(tran);
-                            tran.setGuard("testnonce_" + ae.securityPattern.nonce + "==" + ae.securityPattern.nonce);
+                            tran.setGuard("testnonce_" + ae.getSecurityPattern().getNonce() + "==" + ae.getSecurityPattern().getNonce());
                         }
                         AvatarState dummy = new AvatarState(reworkStringName(ae.getName() + "_dummy"), ae.getReferenceObject(), block);
                         tran.addNext(dummy);
@@ -1479,49 +1463,49 @@ public class FullTML2Avatar {
                         dummy.addNext(tran);
                         elementList.add(dummy);
                         elementList.add(tran);
-                        ae.securityPattern.state2 = dummy;
-                        if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) {
+                        ae.getSecurityPattern().setState2(dummy);
+                        if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) {
                             AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." +
-                                    ae.securityPattern.name, ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.securityPattern.name), dummy);
-                            signalAuthDestMap.put(ae.securityPattern.name, authDest);
+                                    ae.getSecurityPattern().getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()), dummy);
+                            signalAuthDestMap.put(ae.getSecurityPattern().getName(), authDest);
                         }
-                    } else if (ae.securityPattern.type.equals(SecurityPattern.MAC_PATTERN)) {
+                    } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.MAC_PATTERN)) {
                         //Separate MAC from MSG
 
                         //Add get2 method
                         AvatarMethod get2 = new AvatarMethod("get2", ae);
-                        AvatarAttribute mac = new AvatarAttribute(ae.securityPattern.name + "_mac", AvatarType.INTEGER, block, null);
+                        AvatarAttribute mac = new AvatarAttribute(ae.getSecurityPattern().getName() + "_mac", AvatarType.INTEGER, block, null);
                         block.addAttribute(mac);
-                        block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null));
-                        block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
+                        block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null));
+                        block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
 
-                        get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted"));
-                        get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
+                        get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted"));
+                        get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
                         get2.addParameter(mac);
-                        if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null) {
+                        if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null) {
                             block.addMethod(get2);
-                            tran.addAction("get2(" + ae.securityPattern.name + "_encrypted," + ae.securityPattern.name + "," + ae.securityPattern.name + "_mac)");
+                            tran.addAction("get2(" + ae.getSecurityPattern().getName() + "_encrypted," + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + "_mac)");
                         }
 
                         //Add verifymac method
                         AvatarMethod verifymac = new AvatarMethod("verifyMAC", ae);
-                        block.addAttribute(new AvatarAttribute("testnonce_" + ae.securityPattern.name, AvatarType.BOOLEAN, block, null));
+                        block.addAttribute(new AvatarAttribute("testnonce_" + ae.getSecurityPattern().getName(), AvatarType.BOOLEAN, block, null));
 
-                        verifymac.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                        verifymac.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name));
-                        verifymac.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_mac"));
-                        verifymac.addReturnParameter(block.getAvatarAttributeWithName("testnonce_" + ae.securityPattern.name));
+                        verifymac.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                        verifymac.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()));
+                        verifymac.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_mac"));
+                        verifymac.addReturnParameter(block.getAvatarAttributeWithName("testnonce_" + ae.getSecurityPattern().getName()));
 
-                        if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null) {
+                        if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null) {
                             block.addMethod(verifymac);
-                            tran.addAction("testnonce_" + ae.securityPattern.name + "=verifyMAC(" + ae.securityPattern.name + ", key_" + ae.securityPattern.name + "," + ae.securityPattern.name + "_mac)");
+                            tran.addAction("testnonce_" + ae.getSecurityPattern().getName() + "=verifyMAC(" + ae.getSecurityPattern().getName() + ", key_" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + "_mac)");
 
                         }
 
 
-                        if (!ae.securityPattern.nonce.isEmpty()) {
-                            block.addAttribute(new AvatarAttribute("testnonce_" + ae.securityPattern.nonce, AvatarType.INTEGER, block, null));
-                            tran.addAction("get2(" + ae.securityPattern.name + "," + ae.securityPattern.name + ",testnonce_" + ae.securityPattern.nonce + ")");
+                        if (!ae.getSecurityPattern().getNonce().isEmpty()) {
+                            block.addAttribute(new AvatarAttribute("testnonce_" + ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null));
+                            tran.addAction("get2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + ",testnonce_" + ae.getSecurityPattern().getNonce() + ")");
                         }
 
                         AvatarState guardState = new AvatarState(reworkStringName(ae.getName() + "_guarded"), ae.getReferenceObject(), block);
@@ -1530,9 +1514,9 @@ public class FullTML2Avatar {
                         elementList.add(guardState);
                         elementList.add(tran);
                         guardState.addNext(tran);
-                        tran.setGuard("testnonce_" + ae.securityPattern.name);
+                        tran.setGuard("testnonce_" + ae.getSecurityPattern().getName());
 
-                        if (!ae.securityPattern.nonce.isEmpty()) {
+                        if (!ae.getSecurityPattern().getNonce().isEmpty()) {
 
                             //Add extra state and transition
 
@@ -1540,14 +1524,14 @@ public class FullTML2Avatar {
                                     ae.getReferenceObject(), block);
                             tran.addNext(guardState2);
                             tran = new AvatarTransition(block, "__guard_" + ae.getName(), ae.getReferenceObject());
-                            tran.setGuard("testnonce_" + ae.securityPattern.nonce + "==" + ae.securityPattern.nonce);
+                            tran.setGuard("testnonce_" + ae.getSecurityPattern().getNonce() + "==" + ae.getSecurityPattern().getNonce());
                             elementList.add(guardState2);
                             elementList.add(tran);
 
                             guardState2.addNext(tran);
                         }
                         AvatarState dummy = new AvatarState(reworkStringName(ae.getName() + "_dummy"), ae.getReferenceObject(), block);
-                        ae.securityPattern.state2 = dummy;
+                        ae.getSecurityPattern().setState2(dummy);
                         tran.addNext(dummy);
                         elementList.add(tran);
                         tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject());
@@ -1555,9 +1539,9 @@ public class FullTML2Avatar {
                         elementList.add(dummy);
                         elementList.add(tran);
 
-                        if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) {
-                            AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + ae.securityPattern.name, ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.securityPattern.name), dummy);
-                            signalAuthDestMap.put(ae.securityPattern.name, authDest);
+                        if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) {
+                            AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + ae.getSecurityPattern().getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()), dummy);
+                            signalAuthDestMap.put(ae.getSecurityPattern().getName(), authDest);
                         }
                     }
 
diff --git a/src/main/java/tmltranslator/toavatarsec/TML2Avatar.java b/src/main/java/tmltranslator/toavatarsec/TML2Avatar.java
index 54912cb5ae..682145ce11 100644
--- a/src/main/java/tmltranslator/toavatarsec/TML2Avatar.java
+++ b/src/main/java/tmltranslator/toavatarsec/TML2Avatar.java
@@ -67,7 +67,8 @@ public class TML2Avatar {
     public Map<TMLTask, List<SecurityPattern>> accessKeys = new HashMap<TMLTask, List<SecurityPattern>>();
     public ArrayList<SecurityPattern> secPatterns = new ArrayList<SecurityPattern>();
     public int loopLimit = 1;
-    HashMap<String, List<String>> secChannelMap = new HashMap<String, List<String>>();
+    HashMap<TMLChannel, Set<String>> channelsSecAttributes = new HashMap<TMLChannel, Set<String>>();
+    HashMap<TMLChannel, Set<AvatarPragma>> secChannelMap = new HashMap<TMLChannel, Set<AvatarPragma>>();
     HashMap<String, List<AvatarAttributeState>> signalAuthOriginMap = new HashMap<String, List<AvatarAttributeState>>();
     HashMap<String, List<AvatarAttributeState>> signalAuthDestMap = new HashMap<String, List<AvatarAttributeState>>();
     List<AvatarSignal> signals = new ArrayList<AvatarSignal>();
@@ -81,6 +82,8 @@ public class TML2Avatar {
     private Set<SecurityPattern> keysPublicBus = new HashSet<SecurityPattern>();
     private Map<SecurityPattern, List<AvatarAttribute>> symKeys = new HashMap<SecurityPattern, List<AvatarAttribute>>();
     private Map<SecurityPattern, List<AvatarAttribute>> pubKeys = new HashMap<SecurityPattern, List<AvatarAttribute>>();
+
+    private Map<SecurityPattern, AvatarPragmaSecret> secPatternPragmaMap = new HashMap<SecurityPattern, AvatarPragmaSecret>();
     private Map<String, String> nameMap = new HashMap<String, String>();
     private Map<String, AvatarSignal> signalInMap = new HashMap<String, AvatarSignal>();
     private Map<String, AvatarSignal> signalOutMap = new HashMap<String, AvatarSignal>();
@@ -325,7 +328,7 @@ public class TML2Avatar {
 			TraceManager.addDev(channelMap);
 		}*/
 
-    public List<AvatarStateMachineElement> translateState(TMLActivityElement ae, AvatarBlock block, boolean autoAuthChans) {
+    public List<AvatarStateMachineElement> translateState(TMLActivityElement ae, AvatarBlock block) {
 
         //		TMLActionState tmlaction;
         //		TMLChoice tmlchoice;
@@ -381,12 +384,12 @@ public class TML2Avatar {
             elementList.add(tran);
         } else if (ae instanceof TMLSequence) {
             //Get all list of sequences and paste together
-            List<AvatarStateMachineElement> seq = translateState(ae.getNextElement(0), block, autoAuthChans);
+            List<AvatarStateMachineElement> seq = translateState(ae.getNextElement(0), block);
             List<AvatarStateMachineElement> tmp;
             // elementList.addAll(seq);
             //get rid of any stops in the middle of the sequence and replace with the start of the next sequence
             for (int i = 1; i < ae.getNbNext(); i++) {
-                tmp = translateState(ae.getNextElement(i), block, autoAuthChans);
+                tmp = translateState(ae.getNextElement(i), block);
                 for (AvatarStateMachineElement e : seq) {
                     if (e instanceof AvatarStopState) {
                         //ignore
@@ -497,7 +500,7 @@ public class TML2Avatar {
                 tran = new AvatarTransition(block, "__after_" + ae.getName() + "_0", ae.getReferenceObject());
                 elementList.add(tran);
                 choiceState.addNext(tran);
-                List<AvatarStateMachineElement> set0 = translateState(ae.getNextElement(0), block, autoAuthChans);
+                List<AvatarStateMachineElement> set0 = translateState(ae.getNextElement(0), block);
                 tran.addNext(set0.get(0));
                 elementList.addAll(set0);
                 return elementList;
@@ -518,7 +521,7 @@ public class TML2Avatar {
                     
                     choiceState.addNext(tran);
                     elementList.add(tran);
-                    List<AvatarStateMachineElement> tmp = translateState(ae.getNextElement(i), block, autoAuthChans);
+                    List<AvatarStateMachineElement> tmp = translateState(ae.getNextElement(i), block);
                     AvatarState choiceStateEnd = new AvatarState("seqchoiceend__" + i + "_" + reworkStringName(ae.getName()), ae.getReferenceObject(), block);
                     AvatarTransition tranChoiceStateEnd = new AvatarTransition(block, "trans_seqchoiceend__" + i + "_" + reworkStringName(ae.getName()), ae.getReferenceObject());
                     choiceStateEnd.addNext(tranChoiceStateEnd);
@@ -553,8 +556,8 @@ public class TML2Avatar {
                 
             }
             /*if (ae.getNbNext() == 2) {
-                List<AvatarStateMachineElement> set0 = translateState(ae.getNextElement(0), block, autoAuthChans);
-                List<AvatarStateMachineElement> set1 = translateState(ae.getNextElement(1), block, autoAuthChans);
+                List<AvatarStateMachineElement> set0 = translateState(ae.getNextElement(0), block);
+                List<AvatarStateMachineElement> set1 = translateState(ae.getNextElement(1), block);
                 //		elementList.addAll(set0);
 
                 //Remove stop states of sets and route their transitions to the first element of the following sequence
@@ -591,8 +594,8 @@ public class TML2Avatar {
                 elementList.add(stop);
 
                 //Build branch 1
-                List<AvatarStateMachineElement> set0_1 = translateState(ae.getNextElement(0), block, autoAuthChans);
-                List<AvatarStateMachineElement> set1_1 = translateState(ae.getNextElement(1), block, autoAuthChans);
+                List<AvatarStateMachineElement> set0_1 = translateState(ae.getNextElement(0), block);
+                List<AvatarStateMachineElement> set1_1 = translateState(ae.getNextElement(1), block);
                 for (AvatarStateMachineElement e : set1_1) {
                     if (e instanceof AvatarStopState) {
                         //ignore
@@ -627,7 +630,7 @@ public class TML2Avatar {
                     //For each of the possible state blocks, translate 1 and recurse on the remaining random sequence
                     tran = new AvatarTransition(block, "__after_" + ae.getName() + "_" + i, ae.getReferenceObject());
                     choiceState.addNext(tran);
-                    List<AvatarStateMachineElement> tmp = translateState(ae.getNextElement(i), block, autoAuthChans);
+                    List<AvatarStateMachineElement> tmp = translateState(ae.getNextElement(i), block);
 
 
                     AvatarState choiceStateEnd = new AvatarState("seqchoiceend__" + i + "_" +
@@ -669,7 +672,7 @@ public class TML2Avatar {
                     choiceStateEnd.addNext(tran);
                     elementList.add(tran);
 
-                    List<AvatarStateMachineElement> nexts = translateState(newSeq, block, autoAuthChans);
+                    List<AvatarStateMachineElement> nexts = translateState(newSeq, block);
                     elementList.addAll(nexts);
                     tran.addNext(nexts.get(0));
 
@@ -817,118 +820,118 @@ public class TML2Avatar {
             as.addNext(tran);
             elementList.add(as);
             elementList.add(tran);
-            if (security && ae.securityPattern != null) {
+            if (security && ae.getSecurityPattern() != null) {
                 //If encryption
-                if (ae.securityPattern != null && ae.securityPattern.process == SecurityPattern.ENCRYPTION_PROCESS) {
-                    secPatterns.add(ae.securityPattern);
-                    if (ae.securityPattern.type.equals(SecurityPattern.ADVANCED_PATTERN)) {
+                if (!((TMLActivityElementWithAction) ae).isDecryptionProcess()) {
+                    secPatterns.add(ae.getSecurityPattern());
+                    if (ae.getSecurityPattern().getType().equals(SecurityPattern.ADVANCED_PATTERN)) {
                         //Type Advanced
-                        tran.addAction(ae.securityPattern.formula);
-                    } else if (ae.securityPattern.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) {
+                        tran.addAction(ae.getSecurityPattern().getFormula());
+                    } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) {
                         //Type Symmetric Encryption
-                        if (!ae.securityPattern.nonce.isEmpty()) {
+                        if (!ae.getSecurityPattern().getNonce().isEmpty()) {
                             //Concatenate nonce to data
 
                             //Create concat2 method
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.nonce, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
 
                             AvatarMethod concat2 = new AvatarMethod("concat2", ae);
-                            concat2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            concat2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.nonce));
-                            concat2.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
+                            concat2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            concat2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()));
+                            concat2.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
 
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.nonce) != null) {
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()) != null) {
                                 block.addMethod(concat2);
-                                tran.addAction(ae.securityPattern.name + "=concat2(" + ae.securityPattern.name + "," + ae.securityPattern.nonce + ")");
+                                tran.addAction(ae.getSecurityPattern().getName() + "=concat2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getNonce() + ")");
                             }
                         }
-                        if (!ae.securityPattern.key.isEmpty()) {
+                        if (!ae.getSecurityPattern().getKey().isEmpty()) {
                             //Securing a key
 
                             //Create sencrypt method for key
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.key, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
 
                             AvatarMethod sencrypt = new AvatarMethod("sencrypt", ae);
-                            sencrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.key));
-                            sencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name));
-                            sencrypt.addReturnParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key));
+                            sencrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getKey()));
+                            sencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()));
+                            sencrypt.addReturnParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()));
 
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.key) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null) {
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null) {
                                 block.addMethod(sencrypt);
-                                tran.addAction("encryptedKey_" + ae.securityPattern.key + " = sencrypt(key_" + ae.securityPattern.key + ", key_" + ae.securityPattern.name + ")");
+                                tran.addAction("encryptedKey_" + ae.getSecurityPattern().getKey() + " = sencrypt(" + ae.getSecurityPattern().getKey() + ", key_" + ae.getSecurityPattern().getName() + ")");
                             }
                         } else {
                             //Securing data
 
                             //Create sencrypt method for data
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
 
                             AvatarMethod sencrypt = new AvatarMethod("sencrypt", ae);
-                            sencrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            sencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name));
-                            sencrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted"));
+                            sencrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            sencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()));
+                            sencrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted"));
 
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null) {
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null) {
                                 block.addMethod(sencrypt);
                             }
-                            tran.addAction(ae.securityPattern.name + "_encrypted = sencrypt(" + ae.securityPattern.name + ", key_" + ae.securityPattern.name + ")");
+                            tran.addAction(ae.getSecurityPattern().getName() + "_encrypted = sencrypt(" + ae.getSecurityPattern().getName() + ", key_" + ae.getSecurityPattern().getName() + ")");
                         }
                         //Set as origin for authenticity
-                        ae.securityPattern.originTask = block.getName();
-                        ae.securityPattern.state1 = as;
-                    } else if (ae.securityPattern.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
-                        if (!ae.securityPattern.nonce.isEmpty()) {
+                        //ae.getSecurityPattern().setOriginTask(block.getName());
+                        ae.getSecurityPattern().setState1(as);
+                    } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
+                        if (!ae.getSecurityPattern().getNonce().isEmpty()) {
                             //Concatenating a nonce
                             //Add concat2 method
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.nonce, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
                             AvatarMethod concat2 = new AvatarMethod("concat2", ae);
-                            concat2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            concat2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.nonce));
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.nonce) != null) {
+                            concat2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            concat2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()));
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()) != null) {
                                 block.addMethod(concat2);
-                                tran.addAction(ae.securityPattern.name + "=concat2(" + ae.securityPattern.name + "," + ae.securityPattern.nonce + ")");
+                                tran.addAction(ae.getSecurityPattern().getName() + "=concat2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getNonce() + ")");
                             }
                         }
                         //Securing a key instead of data
-                        if (!ae.securityPattern.key.isEmpty()) {
+                        if (!ae.getSecurityPattern().getKey().isEmpty()) {
                             //Add aencrypt method
                             AvatarMethod aencrypt = new AvatarMethod("aencrypt", ae);
-                            block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.key, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("pubKey_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            aencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.key));
-                            aencrypt.addParameter(block.getAvatarAttributeWithName("pubKey_" + ae.securityPattern.name));
-                            aencrypt.addReturnParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key));
-                            if (block.getAvatarAttributeWithName("key_" + ae.securityPattern.key) != null && block.getAvatarAttributeWithName("pubKey_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key) != null) {
+                            block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("pubKey_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            aencrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()));
+                            aencrypt.addParameter(block.getAvatarAttributeWithName("pubKey_" + ae.getSecurityPattern().getName()));
+                            aencrypt.addReturnParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()));
+                            if (block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("pubKey_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()) != null) {
                                 block.addMethod(aencrypt);
-                                tran.addAction("encryptedKey_" + ae.securityPattern.key + " = aencrypt(key_" + ae.securityPattern.key + ", pubKey_" + ae.securityPattern.name + ")");
+                                tran.addAction("encryptedKey_" + ae.getSecurityPattern().getKey() + " = aencrypt(key_" + ae.getSecurityPattern().getKey() + ", pubKey_" + ae.getSecurityPattern().getName() + ")");
                             }
                         } else {
                             //Securing data
 
                             //Add aencrypt method
                             AvatarMethod aencrypt = new AvatarMethod("aencrypt", ae);
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("pubKey_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null));
-                            aencrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            aencrypt.addParameter(block.getAvatarAttributeWithName("pubKey_" + ae.securityPattern.name));
-                            aencrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted"));
-                            if (block.getAvatarAttributeWithName("pubKey_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null) {
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("pubKey_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null));
+                            aencrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            aencrypt.addParameter(block.getAvatarAttributeWithName("pubKey_" + ae.getSecurityPattern().getName()));
+                            aencrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted"));
+                            if (block.getAvatarAttributeWithName("pubKey_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null) {
                                 block.addMethod(aencrypt);
-                                tran.addAction(ae.securityPattern.name + "_encrypted = aencrypt(" + ae.securityPattern.name + ", pubKey_" + ae.securityPattern.name + ")");
+                                tran.addAction(ae.getSecurityPattern().getName() + "_encrypted = aencrypt(" + ae.getSecurityPattern().getName() + ", pubKey_" + ae.getSecurityPattern().getName() + ")");
                             }
                         }
                         //Set as origin state for authenticity
-                        ae.securityPattern.originTask = block.getName();
-                        ae.securityPattern.state1 = as;
-                    } else if (ae.securityPattern.type.equals(SecurityPattern.NONCE_PATTERN)) {
+                        //ae.getSecurityPattern().setOriginTask(block.getName());
+                        ae.getSecurityPattern().setState1(as);
+                    } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.NONCE_PATTERN)) {
                         //Do nothing except occupy time to forge nonce
 
 
@@ -942,122 +945,125 @@ public class TML2Avatar {
 							arandom.addNext(tran);
 							elementList.add(tran);
 							block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));*/
-                    } else if (ae.securityPattern.type.equals(SecurityPattern.HASH_PATTERN)) {
+                    } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.HASH_PATTERN)) {
                         AvatarMethod hash = new AvatarMethod("hash", ae);
-                        hash.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                        if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) {
+                        hash.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                        if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) {
                             block.addMethod(hash);
                         }
-                        tran.addAction(ae.securityPattern.name + "_encrypted = hash(" + ae.securityPattern.name + ")");
-                    } else if (ae.securityPattern.type.equals(SecurityPattern.MAC_PATTERN)) {
-                        block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                        block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                        block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null)); //msg + mac(msg)
-                        if (!ae.securityPattern.nonce.isEmpty()) {
+                        tran.addAction(ae.getSecurityPattern().getName() + "_encrypted = hash(" + ae.getSecurityPattern().getName() + ")");
+                    } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.MAC_PATTERN)) {
+                        block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                        block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                        block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null)); //msg + mac(msg)
+                        if (!ae.getSecurityPattern().getNonce().isEmpty()) {
                             //Add nonce
 
                             //Add concat2 method
                             AvatarMethod concat = new AvatarMethod("concat2", ae);
-                            concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.nonce));
-                            concat.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.nonce) != null) {
+                            concat.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            concat.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()));
+                            concat.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getNonce()) != null) {
                                 block.addMethod(concat);
-                                tran.addAction(ae.securityPattern.name + "=concat2(" + ae.securityPattern.name + "," + ae.securityPattern.nonce + ")");
+                                tran.addAction(ae.getSecurityPattern().getName() + "=concat2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getNonce() + ")");
                             }
                         }
 
                         //Create MAC method
                         AvatarMethod mac = new AvatarMethod("MAC", ae);
-                        AvatarAttribute macattr = new AvatarAttribute(ae.securityPattern.name + "_mac", AvatarType.INTEGER, block, null);
+                        AvatarAttribute macattr = new AvatarAttribute(ae.getSecurityPattern().getName() + "_mac", AvatarType.INTEGER, block, null);
                         block.addAttribute(macattr);
 
 
-                        mac.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                        mac.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name));
+                        mac.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                        mac.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()));
                         mac.addReturnParameter(macattr);
 
-                        if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null) {
+                        if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null) {
                             block.addMethod(mac);
-                            tran.addAction(ae.securityPattern.name + "_mac = MAC(" + ae.securityPattern.name + ",key_" + ae.securityPattern.name + ")");
+                            tran.addAction(ae.getSecurityPattern().getName() + "_mac = MAC(" + ae.getSecurityPattern().getName() + ",key_" + ae.getSecurityPattern().getName() + ")");
                         }
 
                         //Concatenate msg and mac(msg)
 
                         //Create concat2 method
                         AvatarMethod concat = new AvatarMethod("concat2", ae);
-                        concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                        concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_mac"));
-                        concat.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted"));
+                        concat.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                        concat.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_mac"));
+                        concat.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted"));
                         //concat.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.));
-                        if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null) {
+                        if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null) {
                             block.addMethod(concat);
-                            tran.addAction(ae.securityPattern.name + "_encrypted = concat2(" + ae.securityPattern.name + "," + ae.securityPattern.name + "_mac)");
+                            tran.addAction(ae.getSecurityPattern().getName() + "_encrypted = concat2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + "_mac)");
                         }
-                        ae.securityPattern.originTask = block.getName();
-                        ae.securityPattern.state1 = as;
+                        //ae.getSecurityPattern().setOriginTask(block.getName());
+                        ae.getSecurityPattern().setState1(as);
                     }
 
                     // Set attribute state for authenticity
-                    if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) {
+                    if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) {
+                        AvatarPragmaSecret avPragmaSecret = new AvatarPragmaSecret("#Confidentiality " + block.getName() + "." + ae.getSecurityPattern().getName(),
+                                ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                        secPatternPragmaMap.put(ae.getSecurityPattern(), avPragmaSecret);
                         AvatarAttributeState authOrigin = new AvatarAttributeState(block.getName() + "." + as.getName() + "." +
-                                ae.securityPattern.name, ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.securityPattern.name), as);
-                        if (signalAuthOriginMap.containsKey(ae.securityPattern.name)) {
-                            signalAuthOriginMap.get(ae.securityPattern.name).add(authOrigin);
+                                ae.getSecurityPattern().getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()), as);
+                        if (signalAuthOriginMap.containsKey(ae.getSecurityPattern().getName())) {
+                            signalAuthOriginMap.get(ae.getSecurityPattern().getName()).add(authOrigin);
                         } else {
                             LinkedList<AvatarAttributeState> tmp = new LinkedList<AvatarAttributeState>();
                             tmp.add(authOrigin);
-                            signalAuthOriginMap.put(ae.securityPattern.name, tmp);
+                            signalAuthOriginMap.put(ae.getSecurityPattern().getName(), tmp);
                         }
                     }
 
-                } else if (ae.securityPattern != null && ae.securityPattern.process == SecurityPattern.DECRYPTION_PROCESS) {
+                } else {
                     //Decryption action
                     //block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
                     //block.addAttribute(new AvatarAttribute(ae.securityPattern.name+"_encrypted", AvatarType.INTEGER, block, null));
-                    if (ae.securityPattern.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) {
-                        if (!ae.securityPattern.key.isEmpty()) {
+                    if (ae.getSecurityPattern().getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) {
+                        if (!ae.getSecurityPattern().getKey().isEmpty()) {
                             //Decrypting a key
                             //Add sdecrypt method
                             AvatarMethod sdecrypt = new AvatarMethod("sdecrypt", ae);
-                            block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.key, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null));
-
-                            sdecrypt.addParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key));
-                            sdecrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name));
-                            sdecrypt.addReturnParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.key));
-                            if (block.getAvatarAttributeWithName("key_" + ae.securityPattern.key) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key) != null) {
+                            block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null));
+
+                            sdecrypt.addParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()));
+                            sdecrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()));
+                            sdecrypt.addReturnParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()));
+                            if (block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()) != null) {
                                 block.addMethod(sdecrypt);
-                                tran.addAction("key_" + ae.securityPattern.key + " = sdecrypt(encryptedKey_" + ae.securityPattern.key + ", key_" + ae.securityPattern.name + ")");
+                                tran.addAction("key_" + ae.getSecurityPattern().getKey() + " = sdecrypt(encryptedKey_" + ae.getSecurityPattern().getKey() + ", key_" + ae.getSecurityPattern().getName() + ")");
                             }
                         } else {
                             //Decrypting data
                             AvatarMethod sdecrypt = new AvatarMethod("sdecrypt", ae);
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null));
-
-                            sdecrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted"));
-                            sdecrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name));
-                            sdecrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name) != null) {
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null));
+
+                            sdecrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted"));
+                            sdecrypt.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()));
+                            sdecrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) {
                                 block.addMethod(sdecrypt);
-                                tran.addAction(ae.securityPattern.name + " = sdecrypt(" + ae.securityPattern.name + "_encrypted, key_" + ae.securityPattern.name + ")");
+                                tran.addAction(ae.getSecurityPattern().getName() + " = sdecrypt(" + ae.getSecurityPattern().getName() + "_encrypted, key_" + ae.getSecurityPattern().getName() + ")");
                             }
                         }
-                        if (!ae.securityPattern.nonce.isEmpty()) {
+                        if (!ae.getSecurityPattern().getNonce().isEmpty()) {
                             //Separate out the nonce
-                            block.addAttribute(new AvatarAttribute("testnonce_" + ae.securityPattern.nonce, AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("testnonce_" + ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null));
                             //Add get2 method
                             AvatarMethod get2 = new AvatarMethod("get2", ae);
-                            get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            get2.addParameter(block.getAvatarAttributeWithName("testnonce_" + ae.securityPattern.nonce));
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null &&
-                                    block.getAvatarAttributeWithName("testnonce_" + ae.securityPattern.nonce) != null) {
+                            get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            get2.addParameter(block.getAvatarAttributeWithName("testnonce_" + ae.getSecurityPattern().getNonce()));
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null &&
+                                    block.getAvatarAttributeWithName("testnonce_" + ae.getSecurityPattern().getNonce()) != null) {
                                 block.addMethod(get2);
-                                tran.addAction("get2(" + ae.securityPattern.name + "," + ae.securityPattern.name + ",testnonce_" + ae.securityPattern.nonce + ")");
+                                tran.addAction("get2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + ",testnonce_" + ae.getSecurityPattern().getNonce() + ")");
                             }
 
                             //Add state after get2 statement
@@ -1069,82 +1075,82 @@ public class TML2Avatar {
                             elementList.add(tran);
 
                             //Guard transition to determine if nonce matches
-                            tran.setGuard("testnonce_" + ae.securityPattern.nonce + "==" + ae.securityPattern.nonce);
+                            tran.setGuard("testnonce_" + ae.getSecurityPattern().getNonce() + "==" + ae.getSecurityPattern().getNonce());
                         }
 
                         // Add a dummy state afterwards for authenticity after decrypting the data
                         AvatarState dummy = new AvatarState(reworkStringName(ae.getName()) + "_dummy", ae.getReferenceObject(), block);
-                        ae.securityPattern.state2 = dummy;
+                        ae.getSecurityPattern().setState2(dummy);
                         tran.addNext(dummy);
                         tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject());
                         dummy.addNext(tran);
                         elementList.add(dummy);
                         elementList.add(tran);
-                        if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) {
+                        if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) {
                             AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." +
-                                    ae.securityPattern.name, ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.securityPattern.name), dummy);
-                            if (signalAuthDestMap.containsKey(ae.securityPattern.name)) {
-                                signalAuthDestMap.get(ae.securityPattern.name).add(authDest);
+                                    ae.getSecurityPattern().getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()), dummy);
+                            if (signalAuthDestMap.containsKey(ae.getSecurityPattern().getName())) {
+                                signalAuthDestMap.get(ae.getSecurityPattern().getName()).add(authDest);
                             } else {
                                 LinkedList<AvatarAttributeState> tmp = new LinkedList<AvatarAttributeState>();
                                 tmp.add(authDest);
-                                signalAuthDestMap.put(ae.securityPattern.name, tmp);
+                                signalAuthDestMap.put(ae.getSecurityPattern().getName(), tmp);
                             }
                         }
-                    } else if (ae.securityPattern.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
+                    } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
                         AvatarMethod adecrypt = new AvatarMethod("adecrypt", ae);
 
-                        if (!ae.securityPattern.key.isEmpty()) {
+                        if (!ae.getSecurityPattern().getKey().isEmpty()) {
                             //Decrypting key
                             //Add adecrypt method
-                            block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("privKey_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("key_" + ae.securityPattern.key, AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("privKey_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("key_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null));
 
-                            adecrypt.addParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key));
-                            adecrypt.addParameter(block.getAvatarAttributeWithName("privKey_" + ae.securityPattern.name));
-                            adecrypt.addReturnParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.key));
+                            adecrypt.addParameter(block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()));
+                            adecrypt.addParameter(block.getAvatarAttributeWithName("privKey_" + ae.getSecurityPattern().getName()));
+                            adecrypt.addReturnParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()));
 
-                            if (block.getAvatarAttributeWithName("encryptedKey_" + ae.securityPattern.key) != null &&
-                                    block.getAvatarAttributeWithName("privKey_" + ae.securityPattern.name) != null &&
-                                    block.getAvatarAttributeWithName("key_" + ae.securityPattern.key) != null) {
+                            if (block.getAvatarAttributeWithName("encryptedKey_" + ae.getSecurityPattern().getKey()) != null &&
+                                    block.getAvatarAttributeWithName("privKey_" + ae.getSecurityPattern().getName()) != null &&
+                                    block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getKey()) != null) {
                                 block.addMethod(adecrypt);
-                                tran.addAction("key_" + ae.securityPattern.key + " = adecrypt(encryptedKey_" + ae.securityPattern.key + ", privKey_" + ae.securityPattern.name + ")");
+                                tran.addAction("key_" + ae.getSecurityPattern().getKey() + " = adecrypt(encryptedKey_" + ae.getSecurityPattern().getKey() + ", privKey_" + ae.getSecurityPattern().getName() + ")");
                             }
                         } else {
                             //Decrypting data
 
                             //Add adecrypt method
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                            block.addAttribute(new AvatarAttribute("privKey_" + ae.securityPattern.name, AvatarType.INTEGER, block, null));
-
-                            adecrypt.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted"));
-                            adecrypt.addParameter(block.getAvatarAttributeWithName("privKey_" + ae.securityPattern.name));
-                            adecrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null && block.getAvatarAttributeWithName("privKey_" + ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name) != null) {
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+                            block.addAttribute(new AvatarAttribute("privKey_" + ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
+
+                            adecrypt.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted"));
+                            adecrypt.addParameter(block.getAvatarAttributeWithName("privKey_" + ae.getSecurityPattern().getName()));
+                            adecrypt.addReturnParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null && block.getAvatarAttributeWithName("privKey_" + ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) {
                                 block.addMethod(adecrypt);
-                                tran.addAction(ae.securityPattern.name + " = adecrypt(" + ae.securityPattern.name + "_encrypted, privKey_" + ae.securityPattern.name + ")");
+                                tran.addAction(ae.getSecurityPattern().getName() + " = adecrypt(" + ae.getSecurityPattern().getName() + "_encrypted, privKey_" + ae.getSecurityPattern().getName() + ")");
                             }
                         }
-                        if (!ae.securityPattern.nonce.isEmpty()) {
-                            block.addAttribute(new AvatarAttribute("testnonce_" + ae.securityPattern.nonce, AvatarType.INTEGER, block, null));
+                        if (!ae.getSecurityPattern().getNonce().isEmpty()) {
+                            block.addAttribute(new AvatarAttribute("testnonce_" + ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null));
                             AvatarMethod get2 = new AvatarMethod("get2", ae);
-                            get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                            get2.addParameter(block.getAvatarAttributeWithName("testnonce_" + ae.securityPattern.nonce));
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name) != null) {
+                            get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                            get2.addParameter(block.getAvatarAttributeWithName("testnonce_" + ae.getSecurityPattern().getNonce()));
+                            if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) {
                                 block.addMethod(get2);
                             }
 
-                            tran.addAction("get2(" + ae.securityPattern.name + "," + ae.securityPattern.name + ",testnonce_" + ae.securityPattern.nonce + ")");
+                            tran.addAction("get2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + ",testnonce_" + ae.getSecurityPattern().getNonce() + ")");
                             AvatarState guardState = new AvatarState(reworkStringName(ae.getName()) + "_guarded", ae.getReferenceObject(), block);
                             tran.addNext(guardState);
                             tran = new AvatarTransition(block, "__guard_" + ae.getName(), ae.getReferenceObject());
                             elementList.add(guardState);
                             elementList.add(tran);
                             guardState.addNext(tran);
-                            tran.setGuard("testnonce_" + ae.securityPattern.nonce + "==" + ae.securityPattern.nonce);
+                            tran.setGuard("testnonce_" + ae.getSecurityPattern().getNonce() + "==" + ae.getSecurityPattern().getNonce());
                         }
                         AvatarState dummy = new AvatarState(reworkStringName(ae.getName()) + "_dummy", ae.getReferenceObject(), block);
                         tran.addNext(dummy);
@@ -1152,54 +1158,54 @@ public class TML2Avatar {
                         dummy.addNext(tran);
                         elementList.add(dummy);
                         elementList.add(tran);
-                        ae.securityPattern.state2 = dummy;
-                        if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) {
-                            AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + ae.securityPattern.name, ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.securityPattern.name), dummy);
-                            if (signalAuthDestMap.containsKey(ae.securityPattern.name)) {
-                                signalAuthDestMap.get(ae.securityPattern.name).add(authDest);
+                        ae.getSecurityPattern().setState2(dummy);
+                        if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) {
+                            AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + ae.getSecurityPattern().getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()), dummy);
+                            if (signalAuthDestMap.containsKey(ae.getSecurityPattern().getName())) {
+                                signalAuthDestMap.get(ae.getSecurityPattern().getName()).add(authDest);
                             } else {
                                 LinkedList<AvatarAttributeState> tmp = new LinkedList<AvatarAttributeState>();
                                 tmp.add(authDest);
-                                signalAuthDestMap.put(ae.securityPattern.name, tmp);
+                                signalAuthDestMap.put(ae.getSecurityPattern().getName(), tmp);
                             }
                         }
-                    } else if (ae.securityPattern.type.equals(SecurityPattern.MAC_PATTERN)) {
+                    } else if (ae.getSecurityPattern().getType().equals(SecurityPattern.MAC_PATTERN)) {
                         //Separate MAC from MSG
 
                         //Add get2 method
                         AvatarMethod get2 = new AvatarMethod("get2", ae);
-                        AvatarAttribute mac = new AvatarAttribute(ae.securityPattern.name + "_mac", AvatarType.INTEGER, block, null);
+                        AvatarAttribute mac = new AvatarAttribute(ae.getSecurityPattern().getName() + "_mac", AvatarType.INTEGER, block, null);
                         block.addAttribute(mac);
-                        block.addAttribute(new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null));
-                        block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
+                        block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null));
+                        block.addAttribute(new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null));
 
-                        get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted"));
-                        get2.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
+                        get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted"));
+                        get2.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
                         get2.addParameter(mac);
-                        if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName(ae.securityPattern.name + "_encrypted") != null) {
+                        if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_encrypted") != null) {
                             block.addMethod(get2);
-                            tran.addAction("get2(" + ae.securityPattern.name + "_encrypted," + ae.securityPattern.name + "," + ae.securityPattern.name + "_mac)");
+                            tran.addAction("get2(" + ae.getSecurityPattern().getName() + "_encrypted," + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + "_mac)");
                         }
 
                         //Add verifymac method
                         AvatarMethod verifymac = new AvatarMethod("verifyMAC", ae);
-                        block.addAttribute(new AvatarAttribute("testnonce_" + ae.securityPattern.name, AvatarType.BOOLEAN, block, null));
+                        block.addAttribute(new AvatarAttribute("testnonce_" + ae.getSecurityPattern().getName(), AvatarType.BOOLEAN, block, null));
 
-                        verifymac.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name));
-                        verifymac.addParameter(block.getAvatarAttributeWithName("key_" + ae.securityPattern.name));
-                        verifymac.addParameter(block.getAvatarAttributeWithName(ae.securityPattern.name + "_mac"));
-                        verifymac.addReturnParameter(block.getAvatarAttributeWithName("testnonce_" + ae.securityPattern.name));
+                        verifymac.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()));
+                        verifymac.addParameter(block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()));
+                        verifymac.addParameter(block.getAvatarAttributeWithName(ae.getSecurityPattern().getName() + "_mac"));
+                        verifymac.addReturnParameter(block.getAvatarAttributeWithName("testnonce_" + ae.getSecurityPattern().getName()));
 
-                        if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null && block.getAvatarAttributeWithName("key_" + ae.securityPattern.name) != null) {
+                        if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null && block.getAvatarAttributeWithName("key_" + ae.getSecurityPattern().getName()) != null) {
                             block.addMethod(verifymac);
-                            tran.addAction("testnonce_" + ae.securityPattern.name + "=verifyMAC(" + ae.securityPattern.name + ", key_" + ae.securityPattern.name + "," + ae.securityPattern.name + "_mac)");
+                            tran.addAction("testnonce_" + ae.getSecurityPattern().getName() + "=verifyMAC(" + ae.getSecurityPattern().getName() + ", key_" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + "_mac)");
 
                         }
 
 
-                        if (!ae.securityPattern.nonce.isEmpty()) {
-                            block.addAttribute(new AvatarAttribute("testnonce_" + ae.securityPattern.nonce, AvatarType.INTEGER, block, null));
-                            tran.addAction("get2(" + ae.securityPattern.name + "," + ae.securityPattern.name + ",testnonce_" + ae.securityPattern.nonce + ")");
+                        if (!ae.getSecurityPattern().getNonce().isEmpty()) {
+                            block.addAttribute(new AvatarAttribute("testnonce_" + ae.getSecurityPattern().getNonce(), AvatarType.INTEGER, block, null));
+                            tran.addAction("get2(" + ae.getSecurityPattern().getName() + "," + ae.getSecurityPattern().getName() + ",testnonce_" + ae.getSecurityPattern().getNonce() + ")");
                         }
 
                         AvatarState guardState = new AvatarState(reworkStringName(ae.getName()) + "_guarded", ae.getReferenceObject(), block);
@@ -1208,23 +1214,23 @@ public class TML2Avatar {
                         elementList.add(guardState);
                         elementList.add(tran);
                         guardState.addNext(tran);
-                        tran.setGuard("testnonce_" + ae.securityPattern.name);
+                        tran.setGuard("testnonce_" + ae.getSecurityPattern().getName());
 
-                        if (!ae.securityPattern.nonce.isEmpty()) {
+                        if (!ae.getSecurityPattern().getNonce().isEmpty()) {
 
                             //Add extra state and transition
 
                             AvatarState guardState2 = new AvatarState(reworkStringName(ae.getName()) + "_guarded2", ae.getReferenceObject(), block);
                             tran.addNext(guardState2);
                             tran = new AvatarTransition(block, "__guard_" + ae.getName(), ae.getReferenceObject());
-                            tran.setGuard("testnonce_" + ae.securityPattern.nonce + "==" + ae.securityPattern.nonce);
+                            tran.setGuard("testnonce_" + ae.getSecurityPattern().getNonce() + "==" + ae.getSecurityPattern().getNonce());
                             elementList.add(guardState2);
                             elementList.add(tran);
 
                             guardState2.addNext(tran);
                         }
                         AvatarState dummy = new AvatarState(reworkStringName(ae.getName()) + "_dummy", ae.getReferenceObject(), block);
-                        ae.securityPattern.state2 = dummy;
+                        ae.getSecurityPattern().setState2(dummy);
                         tran.addNext(dummy);
                         elementList.add(tran);
                         tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject());
@@ -1232,14 +1238,14 @@ public class TML2Avatar {
                         elementList.add(dummy);
                         elementList.add(tran);
 
-                        if (block.getAvatarAttributeWithName(ae.securityPattern.name) != null) {
-                            AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + ae.securityPattern.name, ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.securityPattern.name), dummy);
-                            if (signalAuthDestMap.containsKey(ae.securityPattern.name)) {
-                                signalAuthDestMap.get(ae.securityPattern.name).add(authDest);
+                        if (block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()) != null) {
+                            AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + dummy.getName() + "." + ae.getSecurityPattern().getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(ae.getSecurityPattern().getName()), dummy);
+                            if (signalAuthDestMap.containsKey(ae.getSecurityPattern().getName())) {
+                                signalAuthDestMap.get(ae.getSecurityPattern().getName()).add(authDest);
                             } else {
                                 LinkedList<AvatarAttributeState> tmp = new LinkedList<AvatarAttributeState>();
                                 tmp.add(authDest);
-                                signalAuthDestMap.put(ae.securityPattern.name, tmp);
+                                signalAuthDestMap.put(ae.getSecurityPattern().getName(), tmp);
                             }
                         }
                     }
@@ -1288,50 +1294,48 @@ public class TML2Avatar {
                     block.addSignal(sig);
                     signalInMap.put(ch.getName(), sig);
                     AvatarAttribute channelData = new AvatarAttribute(getName(ch.getName()) + "_chData", AvatarType.INTEGER, block, null);
-                    if (block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData") == null) {
-                        block.addAttribute(channelData);
-                    }
                     sig.addParameter(channelData);
                 } else {
                     sig = signalInMap.get(ch.getName());
                 }
                 TraceManager.addDev("InMap sig= " + sig.getSignalName());
                 AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject(), block);
-
-                if (ae.securityPattern != null) {
+                AvatarAttribute channelData;
+                if (ae.getSecurityPattern() != null) {
                     //If nonce
-                    if (ae.securityPattern.type.equals(SecurityPattern.NONCE_PATTERN)) {
-                        block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                        as.addValue(ae.securityPattern.name);
+                    if (ae.getSecurityPattern().getType().equals(SecurityPattern.NONCE_PATTERN)) {
+                        channelData = new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null);
+                        block.addAttribute(channelData);
+                        as.addValue(channelData.getName());
                     }
                     //Send the encrypted key
-                    else if (!ae.securityPattern.key.isEmpty()) {
-                        as.addValue("encryptedKey_" + ae.securityPattern.key);
-                        AvatarAttribute data = new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null);
-                        block.addAttribute(data);
+                    else if (!ae.getSecurityPattern().getKey().isEmpty()) {
+                        channelData = new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null);
+                        as.addValue(channelData.getName());
+                        block.addAttribute(channelData);
                     } else {
                         //Send the encrypted data
-                        if (!secChannelMap.containsKey(ae.securityPattern.name)) {
-                            List<String> tmp = new ArrayList<String>();
-                            secChannelMap.put(ae.securityPattern.name, tmp);
-                        }
-
-                        secChannelMap.get(ae.securityPattern.name).add(ch.getName());
-                        if (!ae.securityPattern.type.equals(SecurityPattern.NONCE_PATTERN)) {
-                            as.addValue(ae.securityPattern.name + "_encrypted");
-                            AvatarAttribute data = new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null);
-                            block.addAttribute(data);
-                        } else {
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name) == null) {
-                                AvatarAttribute data = new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null);
-                                block.addAttribute(data);
-                            }
-                            as.addValue(ae.securityPattern.name);
-
+                        channelData = new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null);
+                        if (!channelsSecAttributes.containsKey(ch)) {
+                            Set<String> tmp = new HashSet<String>();
+                            channelsSecAttributes.put(ch, tmp);
                         }
+                        channelsSecAttributes.get(ch).add(channelData.getName());
+                        channelsSecAttributes.get(ch).add(ae.getSecurityPattern().getName());
+                        as.addValue(channelData.getName());
+                        block.addAttribute(channelData);
                     }
                 } else {
-                    as.addValue(ch.getDestinationPort().getName() + "_chData");
+                    channelData = new AvatarAttribute(getName(ch.getName()) + "_chData", AvatarType.INTEGER, block, null);
+                    if (!channelsSecAttributes.containsKey(ch)) {
+                        Set<String> tmp = new HashSet<String>();
+                        channelsSecAttributes.put(ch, tmp);
+                    }
+                    channelsSecAttributes.get(ch).add(channelData.getName());
+                    if (block.getAvatarAttributeWithName(channelData.getName()) == null) {
+                        block.addAttribute(channelData);
+                    }
+                    as.addValue(channelData.getName());
                 }
 
                 tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject());
@@ -1351,14 +1355,31 @@ public class TML2Avatar {
                     afterSignalState.addNext(tran);
                     elementList.add(afterSignalState);
                     elementList.add(tran);
-                    if (autoAuthChans || ae.securityPattern == null) {
-                        if (block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData") == null) {
+                    boolean foundDecrytionOp = false;
+                    List<TMLActivityElement> allNextForAe = new ArrayList<TMLActivityElement>(ae.getNexts());
+                    if (ae.getSecurityPattern() != null) {
+                        while (!allNextForAe.isEmpty()) {
+                            TMLActivityElement nextAe = allNextForAe.get(0);
+                            allNextForAe.addAll(nextAe.getNexts());
+                            if (security && nextAe.getSecurityPattern() != null) {
+                                if (nextAe instanceof TMLActivityElementWithAction) {
+                                    if (((TMLActivityElementWithAction) nextAe).isDecryptionProcess()) {
+                                        if (nextAe.getSecurityPattern().equalSpec(ae.getSecurityPattern())) {
+                                            foundDecrytionOp = true;
+                                        }
+                                    }
+                                }
+                            }
+                            allNextForAe.remove(nextAe);
+                        }
+                    }
+                    if (!foundDecrytionOp) {
+                        /*if (block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData") == null) {
                             AvatarAttribute channelData = new AvatarAttribute(getName(ch.getName()) + "_chData", AvatarType.INTEGER, block, null);
                             block.addAttribute(channelData);
-                        }
+                        }*/
                         AvatarAttributeState authDest = new AvatarAttributeState(block.getName() + "." + reworkStringName(afterSignalState.getName()) + "." +
-                                getName(ch.getName()) + "_chData", ae.getReferenceObject(), block.getAvatarAttributeWithName(getName(ch.getName())
-                                + "_chData"), afterSignalState);
+                                channelData.getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(channelData.getName()), afterSignalState);
                         if (signalAuthDestMap.containsKey(ch.getName())) {
                             signalAuthDestMap.get(ch.getName()).add(authDest);
                         } else {
@@ -1381,40 +1402,92 @@ public class TML2Avatar {
                     block.addSignal(sig);
                     signalOutMap.put(ch.getName(), sig);
                     AvatarAttribute channelData = new AvatarAttribute(getName(ch.getName()) + "_chData", AvatarType.INTEGER, block, null);
-                    if (block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData") == null) {
-                        block.addAttribute(channelData);
-                    }
                     sig.addParameter(channelData);
                 } else {
                     sig = signalOutMap.get(ch.getName());
                 }
                 TraceManager.addDev("OutMap sig= " + sig.getSignalName());
 
+                AvatarAttribute channelData;
+                AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject(), block);
 
+                if (ae.getSecurityPattern() != null) {
+                    //send nonce
+                    if (ae.getSecurityPattern().getType().equals(SecurityPattern.NONCE_PATTERN)) {
+                        channelData = new AvatarAttribute(ae.getSecurityPattern().getName(), AvatarType.INTEGER, block, null);
+                        block.addAttribute(channelData);
+                        as.addValue(channelData.getName());
+                    }
+                    //send encrypted key
+                    else if (!ae.getSecurityPattern().getKey().isEmpty()) {
+                        channelData = new AvatarAttribute("encryptedKey_" + ae.getSecurityPattern().getKey(), AvatarType.INTEGER, block, null);
+                        as.addValue(channelData.getName());
+                        block.addAttribute(channelData);
+                    } else {
+                        //send encrypted data
+                        //
+                        channelData = new AvatarAttribute(ae.getSecurityPattern().getName() + "_encrypted", AvatarType.INTEGER, block, null);
+                        as.addValue(channelData.getName());
+                        block.addAttribute(channelData);
+                    }
+                } else {
+                    //No security pattern
+                    //	TraceManager.addDev("no security pattern for " + ch.getName());
+                    channelData = new AvatarAttribute(getName(ch.getName()) + "_chData", AvatarType.INTEGER, block, null);
+
+                    if (block.getAvatarAttributeWithName(channelData.getName()) == null) {
+                        block.addAttribute(channelData);
+                    }
+                    as.addValue(channelData.getName());
+                }
                 //Add the confidentiality pragma for this channel data
                 if (ch.checkConf) {
                     if (ch.originalOriginTasks.size() != 0 && ch.getOriginPort().getName().contains("PORTORIGIN")) {
                         //	System.out.println("Channel " + ch.getOriginPort().getName() + " block " + block.getName());
-                        if (!attrsToCheck.contains(ch.getOriginPort().getName() + "_chData")) {
-                            for (TMLTask origTask : ch.originalOriginTasks) {
-                                AvatarBlock bl = avspec.getBlockWithName(origTask.getName().split("__")[origTask.getName().split("__").length - 1]);
-                                if (bl != null) {
-                                    AvatarAttribute attr = bl.getAvatarAttributeWithName(block.getName() + "_chData");
-                                    if (attr != null) {
-                                        attrsToCheck.add(ch.getOriginPort().getName() + "_chData");
-                                        avspec.addPragma(new AvatarPragmaSecret("#Confidentiality " + bl.getName() + "." + block.getName() +
-                                                "_chData", ch.getReferenceObject(), attr));
+                        for (TMLTask origTask : ch.originalOriginTasks) {
+                            AvatarBlock bl = avspec.getBlockWithName(origTask.getName().split("__")[origTask.getName().split("__").length - 1]);
+                            if (bl != null) {
+                                AvatarAttribute attr = bl.getAvatarAttributeWithName(channelData.getName());
+                                if (attr != null) {
+                                    AvatarPragmaSecret avPragmaSecret =
+                                            new AvatarPragmaSecret("#Confidentiality " + bl.getName() + "." + channelData.getName(),
+                                        ch.getReferenceObject(), attr);
+                                    if (!secChannelMap.containsKey(ch)) {
+                                        Set<AvatarPragma> tmp = new HashSet<AvatarPragma>();
+                                        secChannelMap.put(ch, tmp);
+                                    }
+                                    boolean isAvSecretInSet = false;
+                                    for (AvatarPragma av : secChannelMap.get(ch)) {
+                                        if (av.getName().equals(avPragmaSecret.getName())) {
+                                            isAvSecretInSet = true;
+                                            break;
+                                        }
+                                    }
+                                    if (!isAvSecretInSet) {
+                                        secChannelMap.get(ch).add(avPragmaSecret);
                                     }
                                 }
                             }
                         }
                     } else {
-                        if (!attrsToCheck.contains(ch.getOriginPort().getName() + "_chData")) {
-                            AvatarAttribute attr = block.getAvatarAttributeWithName(ch.getOriginPort().getName() + "_chData");
-                            if (attr != null) {
-                                attrsToCheck.add(ch.getOriginPort().getName() + "_chData");
-                                avspec.addPragma(new AvatarPragmaSecret("#Confidentiality " + block.getName() + "." + ch.getOriginPort().getName() +
-                                        "_chData", ch.getReferenceObject(), attr));
+                        AvatarAttribute attr = block.getAvatarAttributeWithName(channelData.getName());
+                        if (attr != null) {
+                            AvatarPragmaSecret avPragmaSecret =
+                                    new AvatarPragmaSecret("#Confidentiality " + block.getName() + "." + channelData.getName(),
+                                            ch.getReferenceObject(), attr);
+                            if (!secChannelMap.containsKey(ch)) {
+                                Set<AvatarPragma> tmp = new HashSet<AvatarPragma>();
+                                secChannelMap.put(ch, tmp);
+                            }
+                            boolean isAvSecretInSet = false;
+                            for (AvatarPragma av : secChannelMap.get(ch)) {
+                                if (av.getName().equals(avPragmaSecret.getName())) {
+                                    isAvSecretInSet = true;
+                                    break;
+                                }
+                            }
+                            if (!isAvSecretInSet) {
+                                secChannelMap.get(ch).add(avPragmaSecret);
                             }
                         }
                     }
@@ -1423,14 +1496,38 @@ public class TML2Avatar {
                 // Add the authenticity pragma for this channel data
                 // To be removed in case another authenticity pragma is used on the channel
                 // Also, to be duplicated for each send / receive
+                boolean foundEncrytionOp = false;
+                List<TMLActivityElement> allPrevOfAe = new ArrayList<TMLActivityElement>();
+                TMLActivity actDiagram = ch.getOriginTask().getActivityDiagram();
+                if (actDiagram.getPrevious(ae) != null) {
+                    allPrevOfAe.add(actDiagram.getPrevious(ae));
+                }
+                if (ae.getSecurityPattern() != null) {
+                    while (!allPrevOfAe.isEmpty()) {
+                        TMLActivityElement prevAe = allPrevOfAe.get(0);
+                        if (actDiagram.getPrevious(prevAe) != null) {
+                            allPrevOfAe.add(actDiagram.getPrevious(prevAe));
+                        }
+                        if (security && prevAe.getSecurityPattern() != null) {
+                            if (prevAe instanceof TMLActivityElementWithAction) {
+                                if (!((TMLActivityElementWithAction) prevAe).isDecryptionProcess()) {
+                                    if (prevAe.getSecurityPattern().equalSpec(ae.getSecurityPattern())) {
+                                        foundEncrytionOp = true;
+                                    }
+                                }
+                            }
+                        }
+                        allPrevOfAe.remove(prevAe);
+                    }
+                }
                 if (ch.checkAuth) {
-                    if (autoAuthChans || ae.securityPattern == null) {
-                        if (block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData") == null) {
+                    if (!foundEncrytionOp) {
+                        /*if (block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData") == null) {
                             AvatarAttribute channelData = new AvatarAttribute(getName(ch.getName()) + "_chData", AvatarType.INTEGER, block, null);
                             block.addAttribute(channelData);
-                        }
+                        }*/
                         AvatarAttributeState authOrigin = new AvatarAttributeState(block.getName() + "." + reworkStringName(signalState.getName()) + "." +
-                                getName(ch.getName()) + "_chData", ae.getReferenceObject(), block.getAvatarAttributeWithName(getName(ch.getName()) + "_chData"), signalState);
+                                channelData.getName(), ae.getReferenceObject(), block.getAvatarAttributeWithName(channelData.getName()), signalState);
                         if (signalAuthOriginMap.containsKey(ch.getName())) {
                             signalAuthOriginMap.get(ch.getName()).add(authOrigin);
                         } else {
@@ -1439,49 +1536,9 @@ public class TML2Avatar {
                             signalAuthOriginMap.put(ch.getName(), tmp);
                         }
                     }
-
                 }
 
-                AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject(), block);
-
-                if (ae.securityPattern != null) {
-                    //send nonce
-                    if (ae.securityPattern.type.equals(SecurityPattern.NONCE_PATTERN)) {
-                        block.addAttribute(new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null));
-                        as.addValue(ae.securityPattern.name);
-                    }
-                    //send encrypted key
-                    else if (!ae.securityPattern.key.isEmpty()) {
-                        as.addValue("encryptedKey_" + ae.securityPattern.key);
-                        AvatarAttribute data = new AvatarAttribute("encryptedKey_" + ae.securityPattern.key, AvatarType.INTEGER, block, null);
-                        block.addAttribute(data);
-                    } else {
-                        //send encrypted data 
-                        //
-                        if (!ae.securityPattern.type.equals(SecurityPattern.NONCE_PATTERN)) {
-                            as.addValue(ae.securityPattern.name + "_encrypted");
-                            AvatarAttribute data = new AvatarAttribute(ae.securityPattern.name + "_encrypted", AvatarType.INTEGER, block, null);
-                            block.addAttribute(data);
-                        } else {
-                            //Send unecrypted form
-                            if (block.getAvatarAttributeWithName(ae.securityPattern.name) == null) {
-                                AvatarAttribute data = new AvatarAttribute(ae.securityPattern.name, AvatarType.INTEGER, block, null);
-                                block.addAttribute(data);
-                            }
-                            as.addValue(ae.securityPattern.name);
-                        }
 
-                        if (!secChannelMap.containsKey(ae.securityPattern.name)) {
-                            List<String> tmp = new ArrayList<String>();
-                            secChannelMap.put(ae.securityPattern.name, tmp);
-                        }
-                        secChannelMap.get(ae.securityPattern.name).add(ch.getName());
-                    }
-                } else {
-                    //No security pattern
-                    //	TraceManager.addDev("no security pattern for " + ch.getName());
-                    as.addValue(ch.getOriginPort().getName() + "_chData");
-                }
 
                 tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject());
                 elementList.add(signalState);
@@ -1496,9 +1553,9 @@ public class TML2Avatar {
             TMLForLoop loop = (TMLForLoop) ae;
             if (loop.isInfinite()) {
                 //Make initializaton, then choice state with transitions
-                List<AvatarStateMachineElement> elements = translateState(ae.getNextElement(0), block, autoAuthChans);
+                List<AvatarStateMachineElement> elements = translateState(ae.getNextElement(0), block);
                 /*List<AvatarStateMachineElement> afterloop =*/
-                translateState(ae.getNextElement(1), block, autoAuthChans);
+                translateState(ae.getNextElement(1), block);
                 AvatarState initState = new AvatarState(reworkStringName(ae.getName()) + "__init", ae.getReferenceObject(), block);
                 elementList.add(initState);
                 //Build transition to choice
@@ -1547,8 +1604,8 @@ public class TML2Avatar {
                 return elementList;
             } else {
                 //Make initializaton, then choice state with transitions
-                List<AvatarStateMachineElement> elements = translateState(ae.getNextElement(0), block, autoAuthChans);
-                List<AvatarStateMachineElement> afterloop = translateState(ae.getNextElement(1), block, autoAuthChans);
+                List<AvatarStateMachineElement> elements = translateState(ae.getNextElement(0), block);
+                List<AvatarStateMachineElement> afterloop = translateState(ae.getNextElement(1), block);
                 AvatarState initState = new AvatarState(reworkStringName(ae.getName()) + "__init", ae.getReferenceObject(), block);
                 elementList.add(initState);
                 //Build transition to choice
@@ -1615,7 +1672,7 @@ public class TML2Avatar {
                 tran = new AvatarTransition(block, "__after_" + ae.getName() + "_" + i, ae.getReferenceObject());
                 //tran.setGuard(c.getGuard(i));
                 as.addNext(tran);
-                List<AvatarStateMachineElement> nexts = translateState(ae.getNextElement(i), block, autoAuthChans);
+                List<AvatarStateMachineElement> nexts = translateState(ae.getNextElement(i), block);
                 if (nexts.size() > 0) {
                     tran.addNext(nexts.get(0));
                     elementList.add(tran);
@@ -1632,7 +1689,7 @@ public class TML2Avatar {
             for (int i = 0; i < ae.getNbNext(); i++) {
                 tran = new AvatarTransition(block, "__after_" + ae.getName() + "_" + i, ae.getReferenceObject());
                 as.addNext(tran);
-                List<AvatarStateMachineElement> nexts = translateState(ae.getNextElement(i), block, autoAuthChans);
+                List<AvatarStateMachineElement> nexts = translateState(ae.getNextElement(i), block);
                 tran.addNext(nexts.get(0));
                 elementList.add(tran);
                 elementList.addAll(nexts);
@@ -1641,7 +1698,7 @@ public class TML2Avatar {
         } else {
             TraceManager.addDev("undefined tml element " + ae);
         }
-        List<AvatarStateMachineElement> nexts = translateState(ae.getNextElement(0), block, autoAuthChans);
+        List<AvatarStateMachineElement> nexts = translateState(ae.getNextElement(0), block);
         if (nexts.size() == 0) {
             //in an infinite loop i hope
             return elementList;
@@ -1697,15 +1754,18 @@ public class TML2Avatar {
         }
     }
 
-    public AvatarSpecification generateAvatarSpec(String _loopLimit, boolean autoAuthChans) {
+    public AvatarSpecification generateAvatarSpec(String _loopLimit) {
 
-        TraceManager.addDev("security patterns " + tmlmodel.secPatterns);
-        TraceManager.addDev("keys " + tmlmap.mappedSecurity);
+        TraceManager.addDev("security patterns " + tmlmodel.getSecPatterns());
+        TraceManager.addDev("keys " + tmlmap.getMappedSecurity());
 
 
         //TODO: Make state names readable
         //TODO: Put back numeric guards
         //TODO: Calculate for temp variable
+
+        // Reset the ID to ensure IDs are the same as those of the expected specifications
+        AvatarElement.resetID();
         if (tmlmap.getTMLModeling().getReference() != null) {
             this.avspec = new AvatarSpecification("spec", referenceObject);
         } else {
@@ -1798,29 +1858,29 @@ public class TML2Avatar {
                     } else if (chan.getOriginPort().getName() == null) {
                         TraceManager.addDev("NULL PORT NAME" + chan.getName());
                     }
-                    AvatarSignal sig = new AvatarSignal(chan.getOriginPort().getName(), AvatarSignal.OUT, chan.getReferenceObject());
+                    AvatarAttribute channelData = new AvatarAttribute(getName(chan.getName()) + "_chData", AvatarType.INTEGER, block,
+                            null);
+                    AvatarSignal sig = new AvatarSignal(getName(chan.getName()), AvatarSignal.OUT, chan.getReferenceObject());
 
                     block.addSignal(sig);
                     signals.add(sig);
-                    AvatarAttribute channelData = new AvatarAttribute(chan.getOriginPort().getName() + "_chData", AvatarType.INTEGER, block,
-                            null);
-                    if (block.getAvatarAttributeWithName(chan.getOriginPort().getName() + "_chData") == null) {
+
+                    /*if (block.getAvatarAttributeWithName(getName(chan.getOriginPort().getName()) + "_chData") == null) {
                         block.addAttribute(channelData);
-                    }
+                    }*/
                     sig.addParameter(channelData);
                     signalOutMap.put(chan.getName(), sig);
 
                 } else if (chan.hasDestinationTask(task)) {
-                    //AvatarSignal sig = new AvatarSignal(getName(chan.getName()), AvatarSignal.IN, chan.getReferenceObject());
-                    AvatarSignal sig = new AvatarSignal(chan.getDestinationPort().getName(), AvatarSignal.IN, chan.getReferenceObject());
+                    AvatarSignal sig = new AvatarSignal(getName(chan.getName()), AvatarSignal.IN, chan.getReferenceObject());
                     block.addSignal(sig);
                     signals.add(sig);
                     signalInMap.put(chan.getName(), sig);
-                    AvatarAttribute channelData = new AvatarAttribute(chan.getDestinationPort().getName() + "_chData", AvatarType.INTEGER, block,
-                            null);
-                    if (block.getAvatarAttributeWithName(chan.getDestinationPort().getName() + "_chData") == null) {
+                    AvatarAttribute channelData = new AvatarAttribute(getName(chan.getName()) + "_chData", AvatarType.INTEGER,
+                            block, null);
+                    /*if (block.getAvatarAttributeWithName(getName(chan.getDestinationPort().getName()) + "_chData") == null) {
                         block.addAttribute(channelData);
-                    }
+                    }*/
                     sig.addParameter(channelData);
                 }
             }
@@ -1929,7 +1989,7 @@ public class TML2Avatar {
                 //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, autoAuthChans);
+                List<AvatarStateMachineElement> elementList = translateState(task.getActivityDiagram().get(0), block);
                 AvatarStartState ss = new AvatarStartState("start", task.getActivityDiagram().get(0).getReferenceObject(), block);
                 asm.addElement(ss);
                 AvatarTransition at = new AvatarTransition(block, "__after_start", task.getActivityDiagram().get(0).getReferenceObject());
@@ -2039,7 +2099,7 @@ public class TML2Avatar {
 
             } else {
                 //Not requested
-                List<AvatarStateMachineElement> elementList = translateState(task.getActivityDiagram().get(0), block, autoAuthChans);
+                List<AvatarStateMachineElement> elementList = translateState(task.getActivityDiagram().get(0), block);
                 for (AvatarStateMachineElement e : elementList) {
                     e.setName(processName(e.getName(), e.getID()));
                     asm.addElement(e);
@@ -2047,62 +2107,122 @@ public class TML2Avatar {
                 }
                 asm.setStartState((AvatarStartState) elementList.get(0));
             }
-            for (SecurityPattern secPattern : secPatterns) {
-                AvatarAttribute sec = block.getAvatarAttributeWithName(secPattern.name);
-                if (sec != null) {
-                    boolean checkAuthSecPattern = false;
-                    for (TMLChannel ch : tmlmodel.getChannels(task)) {
-                        if (ch.hasOriginTask(task) && ch.isCheckConfChannel()) {
-                            for (TMLActivityElement actElem : task.getActivityDiagram().getElements()) {
-                                if (actElem instanceof TMLWriteChannel) {
-                                    TMLWriteChannel wc = (TMLWriteChannel) actElem;
-                                    if (wc != null && wc.hasChannel(ch) && actElem.securityPattern != null
-                                            && actElem.securityPattern.getName().equals(secPattern.getName())) {
-                                        checkAuthSecPattern = true;
-                                        break;
+
+        }
+
+        for (SecurityPattern secPattern : secPatternPragmaMap.keySet()) {
+            for (TMLTask task : tmlmodel.getTasks()) {
+                for (TMLChannel ch : tmlmodel.getChannels(task)) {
+                    if (ch.hasOriginTask(task) && ch.isCheckConfChannel()) {
+                        for (TMLActivityElement actElem : task.getActivityDiagram().getElements()) {
+                            if (actElem instanceof TMLWriteChannel) {
+                                TMLWriteChannel wc = (TMLWriteChannel) actElem;
+                                if (wc.hasChannel(ch) && actElem.getSecurityPattern() != null
+                                        && actElem.getSecurityPattern().getName().equals(secPattern.getName())) {
+                                    if (!secChannelMap.containsKey(ch)) {
+                                        Set<AvatarPragma> tmp0 = new HashSet<AvatarPragma>();
+                                        secChannelMap.put(ch, tmp0);
                                     }
+                                    boolean isAvSecretInSet = false;
+                                    for (AvatarPragma av : secChannelMap.get(ch)) {
+                                        if (av.getName().equals(secPatternPragmaMap.get(secPattern).getName())) {
+                                            isAvSecretInSet = true;
+                                            break;
+                                        }
+                                    }
+                                    if (!isAvSecretInSet) {
+                                        secChannelMap.get(ch).add(secPatternPragmaMap.get(secPattern));
+                                    }
+                                    break;
                                 }
                             }
                         }
                     }
-                    //sec = new AvatarAttribute(secPattern.name, AvatarType.INTEGER, block, null);
-                    //AvatarAttribute enc = new AvatarAttribute(secPattern.name+"_encrypted", AvatarType.INTEGER, block, null);
-                    //	block.addAttribute(sec);
-                    //	block.addAttribute(enc);
-                    //}
-                    if (checkAuthSecPattern) {
-                        avspec.addPragma(new AvatarPragmaSecret("#Confidentiality " + block.getName() + "." + secPattern.name, null, sec));
-                    }
                 }
             }
-
         }
 
         // Add authenticity pragmas
         for (String s : signalAuthOriginMap.keySet()) {
             for (AvatarAttributeState attributeStateOrigin : signalAuthOriginMap.get(s)) {
                 if (signalAuthDestMap.containsKey(s)) {
-                    for (AvatarAttributeState attributeStateDest : signalAuthDestMap.get(s)) { 
+                    for (AvatarAttributeState attributeStateDest : signalAuthDestMap.get(s)) {
                         AvatarPragmaAuthenticity pragma = new AvatarPragmaAuthenticity(
                                 "#Authenticity " + attributeStateOrigin.getName() + " " + attributeStateDest.getName(),
                                 attributeStateOrigin.getReferenceObject(), attributeStateOrigin, attributeStateDest);
-                        if (secChannelMap.containsKey(s)) {
-                            for (String channel : secChannelMap.get(s)) {
-                                TMLChannel ch = tmlmodel.getChannelByShortName(channel);
-                                if (ch != null) {
-                                    if (ch.checkAuth) {
-                                        avspec.addPragma(pragma);
+                        TMLChannel ch = tmlmodel.getChannelByShortName(s);
+                        if (ch != null && ch.checkAuth) {
+                            if (channelsSecAttributes.containsKey(ch) && channelsSecAttributes.get(ch).contains(attributeStateOrigin.getAttribute().getName())) {
+                                if (!secChannelMap.containsKey(ch)) {
+                                    Set<AvatarPragma> tmp0 = new HashSet<AvatarPragma>();
+                                    secChannelMap.put(ch, tmp0);
+                                }
+                                boolean isAvSecretInSet = false;
+                                for (AvatarPragma av : secChannelMap.get(ch)) {
+                                    if (av.getName().equals(pragma.getName())) {
+                                        isAvSecretInSet = true;
                                         break;
                                     }
                                 }
+                                if (!isAvSecretInSet) {
+                                    secChannelMap.get(ch).add(pragma);
+                                }
+                            }
+                        }
+                        for (SecurityPattern sec : secPatterns) {
+                            if (sec.getName().equals(s)) {
+                                for (TMLChannel chSec : channelsSecAttributes.keySet()) {
+                                    if (channelsSecAttributes.get(chSec).contains(sec.getName())) {
+                                        if (chSec.checkAuth) {
+                                            if (!secChannelMap.containsKey(chSec)) {
+                                                Set<AvatarPragma> tmp0 = new HashSet<AvatarPragma>();
+                                                secChannelMap.put(chSec, tmp0);
+                                            }
+                                            boolean isAvSecretInSet = false;
+                                            for (AvatarPragma av : secChannelMap.get(chSec)) {
+                                                if (av.getName().equals(pragma.getName())) {
+                                                    isAvSecretInSet = true;
+                                                    break;
+                                                }
+                                            }
+                                            if (!isAvSecretInSet) {
+                                                secChannelMap.get(chSec).add(pragma);
+                                            }
+                                        }
+                                    }
+                                }
                             }
-                        } else {
-                            avspec.addPragma(pragma);
                         }
                     }
                 }
             }
         }
+        List<AvatarPragma> avPragmas = new ArrayList<AvatarPragma>();
+        for (TMLChannel ch : secChannelMap.keySet()) {
+            for (AvatarPragma avPragma : secChannelMap.get(ch)) {
+                boolean isAvSecretInSet = false;
+                for (AvatarPragma av : avspec.getPragmas()) {
+                    if (av.getName().equals(avPragma.getName())) {
+                        isAvSecretInSet = true;
+                        break;
+                    }
+                }
+                if (!isAvSecretInSet) {
+                    avPragmas.add(avPragma);
+                }
+            }
+        }
+        // Put AvatarPragmaAuthenticity pragmas at the end of the list.
+        List<AvatarPragma> avPragmasToMove = new ArrayList<AvatarPragma>();
+        for (int indexAvPragmas=0; indexAvPragmas < avPragmas.size(); indexAvPragmas++){
+            AvatarPragma avPragma = avPragmas.get(indexAvPragmas);
+            if (avPragma instanceof AvatarPragmaAuthenticity) {
+                avPragmasToMove.add(avPragma);
+            }
+        }
+        avPragmas.removeAll(avPragmasToMove);
+        avPragmas.addAll(avPragmasToMove);
+        avspec.getPragmas().addAll(avPragmas);
 
         //Create relations
         //Channels are ?? to ??
@@ -2480,7 +2600,7 @@ public class TML2Avatar {
         }
         
         for (SecurityPattern sp : keysPublicBus) {
-            for (TMLTask taskPattern : tmlmodel.securityTaskMap.get(sp)) {
+            for (TMLTask taskPattern : tmlmodel.getSecurityTaskMap().get(sp)) {
                 AvatarBlock b = taskBlockMap.get(taskPattern);
                 AvatarAttribute attrib = b.getAvatarAttributeWithName("key_"+sp.getName());
                 if (attrib!=null) {
@@ -2506,15 +2626,15 @@ public class TML2Avatar {
             }
         }
 
-        tmlmap.getTMLModeling().secChannelMap = secChannelMap;
+        tmlmap.getTMLModeling().setSecChannelMap(secChannelMap);
 
 //			System.out.println("avatar spec\n" +avspec);
         return avspec;
     }
 
-    public AvatarSpecification generateAvatarSpec(String _loopLimit) {
+/*    public AvatarSpecification generateAvatarSpec(String _loopLimit) {
         return generateAvatarSpec(_loopLimit, false);
-    }
+    }*/
 
     public void backtraceReachability(Map<AvatarPragmaReachability, ProVerifQueryResult> reachabilityResults) {
         for (AvatarPragmaReachability pragma : reachabilityResults.keySet()) {
@@ -2576,8 +2696,8 @@ public class TML2Avatar {
                                 for (TMLActivityElement actElem : t.getActivityDiagram().getElements()) {
                                     if (actElem instanceof TMLReadChannel) {
                                         TMLReadChannel rc = (TMLReadChannel) actElem;
-                                        if (rc.hasChannel(ch) && actElem.securityPattern != null
-                                                && actElem.securityPattern.getName().equals(dec.getSecurityContext())) {
+                                        if (rc.hasChannel(ch) && actElem.getSecurityPattern() != null
+                                                && actElem.getSecurityPattern().getName().equals(dec.getSecurityContext())) {
                                             dec.setAuthCheck(ch.checkAuth);
                                             break chDestinationTask;
                                         }
@@ -2602,8 +2722,8 @@ public class TML2Avatar {
         for (TMLTask t : accessKeys.keySet()) {
             AvatarBlock b = taskBlockMap.get(t);
             for (SecurityPattern sp : accessKeys.get(t)) {
-                if (sp.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN) || sp.type.equals(SecurityPattern.MAC_PATTERN)) {
-                    AvatarAttribute key = new AvatarAttribute("key_" + sp.name, AvatarType.INTEGER, b, null);
+                if (sp.getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN) || sp.getType().equals(SecurityPattern.MAC_PATTERN)) {
+                    AvatarAttribute key = new AvatarAttribute("key_" + sp.getName(), AvatarType.INTEGER, b, null);
                     if (symKeys.containsKey(sp)) {
                         symKeys.get(sp).add(key);
                     } else {
@@ -2612,11 +2732,11 @@ public class TML2Avatar {
                         symKeys.put(sp, tmp);
                     }
                     b.addAttribute(key);
-                } else if (sp.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
-                    AvatarAttribute pubkey = new AvatarAttribute("pubKey_" + sp.name, AvatarType.INTEGER, b, null);
+                } else if (sp.getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
+                    AvatarAttribute pubkey = new AvatarAttribute("pubKey_" + sp.getName(), AvatarType.INTEGER, b, null);
                     b.addAttribute(pubkey);
 
-                    AvatarAttribute privkey = new AvatarAttribute("privKey_" + sp.name, AvatarType.INTEGER, b, null);
+                    AvatarAttribute privkey = new AvatarAttribute("privKey_" + sp.getName(), AvatarType.INTEGER, b, null);
                     b.addAttribute(privkey);
                     avspec.addPragma(new AvatarPragmaPrivatePublicKey("#PrivatePublicKeys " + b.getName() + " " + privkey.getName() + " " +
                             pubkey.getName(), null, privkey, pubkey));
@@ -2630,7 +2750,7 @@ public class TML2Avatar {
                     //Distribute public key everywhere
                     for (TMLTask task2 : tasks) {
                         AvatarBlock b2 = taskBlockMap.get(task2);
-                        pubkey = new AvatarAttribute("pubKey_" + sp.name, AvatarType.INTEGER, b2, null);
+                        pubkey = new AvatarAttribute("pubKey_" + sp.getName(), AvatarType.INTEGER, b2, null);
                         b2.addAttribute(pubkey);
                         if (pubKeys.containsKey(sp)) {
                             pubKeys.get(sp).add(pubkey);
diff --git a/src/main/java/ui/ActivityDiagram2TMLTranslator.java b/src/main/java/ui/ActivityDiagram2TMLTranslator.java
index 118ec4a97d..c1dee03406 100644
--- a/src/main/java/ui/ActivityDiagram2TMLTranslator.java
+++ b/src/main/java/ui/ActivityDiagram2TMLTranslator.java
@@ -28,7 +28,7 @@ public class ActivityDiagram2TMLTranslator {
                                              final List<String> removedRequests,
                                              final boolean considerExecOperators,
                                              final boolean considerTimeOperators)
-            throws MalformedTMLDesignException {
+            throws MalformedTMLDesignException, TMLCheckingError {
 
         //TraceManager.addDev("*********************** Consider time operators: " + considerTimeOperators);
 
@@ -198,11 +198,10 @@ public class ActivityDiagram2TMLTranslator {
                         ce.setTGComponent(tgc);
                         checkingErrors.add(ce);
                     } else {
-                        tmlexecc.securityPattern = new SecurityPattern(sp);
-                        tmlexecc.securityPattern.setProcess(SecurityPattern.ENCRYPTION_PROCESS);
-                        tmlexecc.setAction(Integer.toString(sp.encTime));;
+                        tmlexecc.setSecurityPattern(sp);
+                        tmlexecc.setAction(Integer.toString(sp.getEncTime()));;
                         ((BasicErrorHighlight) tgc).setStateAction(ErrorHighlight.OK);
-                        tmlm.securityTaskMap.get(sp).add(tmltask);
+                        tmlm.getSecurityTaskMap().get(sp).add(tmltask);
                         corrTgElement.addCor(tmlexecc, tgc);
                     }
                 } else if (tgc instanceof TMLADDecrypt) {
@@ -216,12 +215,12 @@ public class ActivityDiagram2TMLTranslator {
                         ce.setTGComponent(tgc);
                         checkingErrors.add(ce);
                     } else {
-                        tmlexecc.securityPattern = new SecurityPattern(sp);
-                        tmlexecc.setAction(Integer.toString(sp.decTime));
-                        tmlexecc.securityPattern.setProcess(SecurityPattern.DECRYPTION_PROCESS);
+                        tmlexecc.setSecurityPattern(sp);
+                        tmlexecc.setAction(Integer.toString(sp.getDecTime()));
+                        tmlexecc.setDecryptionProcess(true);
                         ((BasicErrorHighlight) tgc).setStateAction(ErrorHighlight.OK);
                         corrTgElement.addCor(tmlexecc, tgc);
-                        tmlm.securityTaskMap.get(sp).add(tmltask);
+                        tmlm.getSecurityTaskMap().get(sp).add(tmltask);
                     }
 
                 } else if (tgc instanceof TMLADExecC) {
@@ -379,7 +378,7 @@ public class ActivityDiagram2TMLTranslator {
                             tmlreadchannel.addChannel(channel);
                             //security pattern
                             if (securityPatterns.get(((TMLADReadChannel) tgc).getSecurityContext()) != null) {
-                                tmlreadchannel.securityPattern = securityPatterns.get(((TMLADReadChannel) tgc).getSecurityContext());
+                                tmlreadchannel.setSecurityPattern(securityPatterns.get(((TMLADReadChannel) tgc).getSecurityContext()));
                                 //NbOfSamples will increase due to extra overhead from MAC
 		                    /*int cur=1;
 		                    try {
@@ -388,13 +387,13 @@ public class ActivityDiagram2TMLTranslator {
 		                    } catch(NullPointerException e) {
 		                    }*/
                                 String curS = modifyString(((TMLADReadChannel) tgc).getSamplesValue());
-                                String addS = "" + tmlreadchannel.securityPattern.overhead;
+                                String addS = "" + tmlreadchannel.getSecurityPattern().getOverhead();
                                 //int add = Integer.valueOf(tmlreadchannel.securityPattern.overhead);
-                                if (!tmlreadchannel.securityPattern.nonce.equals("")) {
-                                    SecurityPattern nonce = securityPatterns.get(tmlreadchannel.securityPattern.nonce);
+                                if (!tmlreadchannel.getSecurityPattern().getNonce().equals("")) {
+                                    SecurityPattern nonce = securityPatterns.get(tmlreadchannel.getSecurityPattern().getNonce());
                                     if (nonce != null) {
                                         //add = Integer.valueOf(nonce.overhead);
-                                        addS = "" + nonce.overhead;
+                                        addS = "" + nonce.getOverhead();
                                     }
                                 }
                                 //cur = cur+ add;
@@ -786,16 +785,15 @@ public class ActivityDiagram2TMLTranslator {
                             //}
                             //add sec pattern
                             if (securityPatterns.get(((TMLADWriteChannel) tgc).getSecurityContext()) != null) {
-                                tmlwritechannel.securityPattern =
-                                        securityPatterns.get(((TMLADWriteChannel) tgc).getSecurityContext());
+                                tmlwritechannel.setSecurityPattern(securityPatterns.get(((TMLADWriteChannel) tgc).getSecurityContext()));
                                 String curS = modifyString(((TMLADWriteChannel) tgc).getSamplesValue());
-                                String addS = "" + tmlwritechannel.securityPattern.overhead;
+                                String addS = "" + tmlwritechannel.getSecurityPattern().getOverhead();
                                 //int cur = Integer.valueOf(modifyString(((TMLADWriteChannel)tgc).getSamplesValue()));
                                 //int add = Integer.valueOf(tmlwritechannel.securityPattern.overhead);
-                                if (!tmlwritechannel.securityPattern.nonce.equals("")) {
-                                    SecurityPattern nonce = securityPatterns.get(tmlwritechannel.securityPattern.nonce);
+                                if (!tmlwritechannel.getSecurityPattern().getNonce().equals("")) {
+                                    SecurityPattern nonce = securityPatterns.get(tmlwritechannel.getSecurityPattern().getNonce());
                                     if (nonce != null) {
-                                        addS = "" + nonce.overhead;
+                                        addS = "" + nonce.getOverhead();
                                         //add = Integer.valueOf(nonce.overhead);
                                     }
                                 }
diff --git a/src/main/java/ui/DrawerTMAPModeling.java b/src/main/java/ui/DrawerTMAPModeling.java
index b7f371d441..93d5dec7c0 100644
--- a/src/main/java/ui/DrawerTMAPModeling.java
+++ b/src/main/java/ui/DrawerTMAPModeling.java
@@ -415,7 +415,7 @@ public class DrawerTMAPModeling {
 
     @SuppressWarnings("unchecked")
     private void makeSecurityMapping(TMLMapping tmap, TMLArchiDiagramPanel panel) throws MalformedTMLDesignException {
-        for(Object obj: tmap.mappedSecurity.keySet()) {
+        for(Object obj: tmap.getMappedSecurity().keySet()) {
             if (obj instanceof SecurityPattern) {
                 SecurityPattern sp = (SecurityPattern) obj;
                 List<HwMemory> mems = tmap.getListBySecurityPattern(sp);
diff --git a/src/main/java/ui/DrawerTMLModeling.java b/src/main/java/ui/DrawerTMLModeling.java
index 11bc33f227..05a60db6d1 100644
--- a/src/main/java/ui/DrawerTMLModeling.java
+++ b/src/main/java/ui/DrawerTMLModeling.java
@@ -592,33 +592,30 @@ public class DrawerTMLModeling  {
         } else if (elt instanceof TMLExecC) {
             TMLExecC execc = (TMLExecC) elt;
 
-            if (elt.securityPattern != null) {
-                TraceManager.addDev("Found security pattern: " + elt.securityPattern.toXML() + " originTask: " +
-                        elt.securityPattern.originTask + " comp:" + comp.getValue() + "\n");
-                if (elt.securityPattern.originTask.compareTo(comp.getValue()) == 0) {
+            if (elt.getSecurityPattern() != null) {
+                TraceManager.addDev("Found security pattern: " + elt.getSecurityPattern().toXML() + " comp:" + comp.getValue() + "\n");
+                if (!execc.isDecryptionProcess()) {
                     TMLADEncrypt encrypt = new TMLADEncrypt(firstGUI.getX(), firstGUI.getY() + getYDep(), activityPanel.getMinX(),
                             activityPanel.getMaxX(), activityPanel.getMinY(), activityPanel.getMaxY(), true, null, activityPanel);
-                    encrypt.setName(elt.securityPattern.getName());
-                    encrypt.securityContext = elt.securityPattern.getName();
-                    encrypt.type = elt.securityPattern.type;
-                    encrypt.message_overhead = "" + elt.securityPattern.overhead;
-                    encrypt.size = "" + elt.securityPattern.size;
-                    encrypt.encTime = "" + elt.securityPattern.encTime;
-                    encrypt.decTime = "" + elt.securityPattern.decTime;
-                    encrypt.nonce = "" + elt.securityPattern.nonce;
-                    encrypt.formula = "" + elt.securityPattern.formula;
-                    encrypt.key = "" + elt.securityPattern.key;
-                    encrypt.algorithm = "" + elt.securityPattern.algorithm;
-
-
+                    encrypt.setName(elt.getSecurityPattern().getName());
+                    encrypt.securityContext = elt.getSecurityPattern().getName();
+                    encrypt.type = elt.getSecurityPattern().getType();
+                    encrypt.message_overhead = "" + elt.getSecurityPattern().getOverhead();
+                    encrypt.size = "" + elt.getSecurityPattern().getSize();
+                    encrypt.encTime = "" + elt.getSecurityPattern().getEncTime();
+                    encrypt.decTime = "" + elt.getSecurityPattern().getDecTime();
+                    encrypt.nonce = "" + elt.getSecurityPattern().getNonce();
+                    encrypt.formula = "" + elt.getSecurityPattern().getFormula();
+                    encrypt.key = "" + elt.getSecurityPattern().getKey();
+                    encrypt.algorithm = "" + elt.getSecurityPattern().getAlgorithm();
 
                     return encrypt;
 
                 } else {
                     TMLADDecrypt decrypt = new TMLADDecrypt(firstGUI.getX(), firstGUI.getY() + getYDep(), activityPanel.getMinX(),
                             activityPanel.getMaxX(), activityPanel.getMinY(), activityPanel.getMaxY(), true, null, activityPanel);
-                    decrypt.setName(elt.securityPattern.getName());
-                    decrypt.securityContext = elt.securityPattern.getName();
+                    decrypt.setName(elt.getSecurityPattern().getName());
+                    decrypt.securityContext = elt.getSecurityPattern().getName();
 
 
                     return decrypt;
@@ -699,8 +696,8 @@ public class DrawerTMLModeling  {
 
             read.setChannelName(getSplitName(readT.getChannel(0).getName(), false));
             read.setSamples(readT.getNbOfSamples());
-            if (readT.securityPattern != null) {
-                read.setSecurityContext(readT.securityPattern.name);
+            if (readT.getSecurityPattern() != null) {
+                read.setSecurityContext(readT.getSecurityPattern().getName());
                 // read.setEncForm(readT.getEncForm());
                 read.setIsAttacker(readT.isAttacker());
             }
@@ -745,8 +742,8 @@ public class DrawerTMLModeling  {
             write.setChannelName(getSplitName(writeT.getChannel(0).getName(), true));
             write.setSamples(writeT.getNbOfSamples());
 
-            if (writeT.securityPattern != null) {
-                write.setSecurityContext(writeT.securityPattern.name);
+            if (writeT.getSecurityPattern() != null) {
+                write.setSecurityContext(writeT.getSecurityPattern().getName());
                 // write.setEncForm(writeT.getEncForm());
                 write.setIsAttacker(writeT.isAttacker());
             }
diff --git a/src/main/java/ui/GTMLModeling.java b/src/main/java/ui/GTMLModeling.java
index 460b150484..1393f70e00 100644
--- a/src/main/java/ui/GTMLModeling.java
+++ b/src/main/java/ui/GTMLModeling.java
@@ -295,7 +295,7 @@ public class GTMLModeling {
                 generateTasksActivityDiagrams();
                 removeActionsWithDollars();
                 removeActionsWithRecords();
-            } catch (MalformedTMLDesignException mtmlde) {
+            } catch (MalformedTMLDesignException | TMLCheckingError mtmlde) {
                 TraceManager.addDev("Modeling error:" + mtmlde.getMessage());
             }
 
@@ -369,6 +369,8 @@ public class GTMLModeling {
                 removeActionsWithRecords();
             } catch (MalformedTMLDesignException mtmlde) {
                 TraceManager.addDev("Modeling error:" + mtmlde.getMessage());
+            } catch (TMLCheckingError e) {
+                TraceManager.addDev("Modeling error:" + e.getMessage());
             }
 
             //TraceManager.addDev("Checking syntax 2 of TML");
@@ -1639,17 +1641,17 @@ public class GTMLModeling {
             if (tgc instanceof TMLADEncrypt) {
                 if (!((TMLADEncrypt) tgc).securityContext.isEmpty()) {
                     SecurityPattern securityPattern = new SecurityPattern(((TMLADEncrypt) tgc).securityContext, ((TMLADEncrypt) tgc).type, ((TMLADEncrypt) tgc).message_overhead, ((TMLADEncrypt) tgc).size, ((TMLADEncrypt) tgc).encTime, ((TMLADEncrypt) tgc).decTime, ((TMLADEncrypt) tgc).nonce, ((TMLADEncrypt) tgc).formula, ((TMLADEncrypt) tgc).key);
-                    securityPatterns.put(securityPattern.name, securityPattern);
+                    securityPatterns.put(securityPattern.getName(), securityPattern);
                     tmlm.addSecurityPattern(securityPattern);
                     ArrayList<TMLTask> l = new ArrayList<TMLTask>();
-                    tmlm.securityTaskMap.put(securityPattern, l);
+                    tmlm.getSecurityTaskMap().put(securityPattern, l);
                     //TraceManager.addDev("Adding Security Pattern " + securityPattern.name);
                 }
             }
         }
     }
 
-    private void generateTasksActivityDiagrams() throws MalformedTMLDesignException {
+    private void generateTasksActivityDiagrams() throws MalformedTMLDesignException, TMLCheckingError {
         TMLTask tmltask;
 
         //First generate security patterns over all tasks
@@ -3121,12 +3123,12 @@ public class GTMLModeling {
                         //TraceManager.addDev("Exploring key " + key.getValue());
                         SecurityPattern sp = tmlm.getSecurityPattern(key.getValue());
                         if (sp != null && node instanceof HwMemory) {
-                            if (map.mappedSecurity.containsKey(sp)) {
-                                map.mappedSecurity.get(sp).add((HwMemory) node);
+                            if (map.getMappedSecurity().containsKey(sp)) {
+                                map.getMappedSecurity().get(sp).add((HwMemory) node);
                             } else {
                                 ArrayList<HwMemory> mems = new ArrayList<HwMemory>();
                                 mems.add((HwMemory) node);
-                                map.mappedSecurity.put(sp, mems);
+                                map.getMappedSecurity().put(sp, mems);
                                 //TraceManager.addDev("Added key of " + key.getValue());
                             }
                         } else {
diff --git a/src/main/java/ui/GTURTLEModeling.java b/src/main/java/ui/GTURTLEModeling.java
index d245a5fded..071d96ae20 100644
--- a/src/main/java/ui/GTURTLEModeling.java
+++ b/src/main/java/ui/GTURTLEModeling.java
@@ -2001,12 +2001,12 @@ public class GTURTLEModeling {
        // links = tmap.getArch().getHwLinks();
         //Find all Security Patterns, if they don't have an associated memory at encrypt and decrypt, map them
         TMLModeling<TGComponent> tmlm = tmap.getTMLModeling();
-        if (tmlm.securityTaskMap == null) {
+        if (tmlm.getSecurityTaskMap() == null) {
             return;
         }
-        for (SecurityPattern sp : tmlm.securityTaskMap.keySet()) {
-            if (sp.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN) || sp.type.equals(SecurityPattern.MAC_PATTERN) || sp.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
-                for (TMLTask t : tmlm.securityTaskMap.get(sp)) {
+        for (SecurityPattern sp : tmlm.getSecurityTaskMap().keySet()) {
+            if (sp.getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN) || sp.getType().equals(SecurityPattern.MAC_PATTERN) || sp.getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
+                for (TMLTask t : tmlm.getSecurityTaskMap().get(sp)) {
                     HwExecutionNode node1 = tmap.getHwNodeOf(t);
                     boolean taskMappedToCPU = false;
                     if (node1!=null) {
@@ -2029,7 +2029,7 @@ public class GTURTLEModeling {
                                                     memNodeToMap = (TMLArchiMemoryNode) listE.getTG(linkBus.hwnode);
                                                     List<TMLArchiKey> keys = memNodeToMap.getKeyList();
                                                     for (TMLArchiKey key : keys) {
-                                                        if (key.getValue().equals(sp.name)) {
+                                                        if (key.getValue().equals(sp.getName())) {
                                                             keyFound = true;
                                                             keyMappedtoMem = true;
                                                             break outer;
@@ -2041,9 +2041,9 @@ public class GTURTLEModeling {
                                         if (!keyFound) {
                                             if (memNodeToMap != null) {
                                                 TMLArchiKey key = new TMLArchiKey(memNodeToMap.x, (int)(memNodeToMap.y+memNodeToMap.getHeight()*(0.3+Math.random()/2)), memNodeToMap.tdp.getMinX(), memNodeToMap.tdp.getMaxX(), memNodeToMap.tdp.getMinY(), memNodeToMap.tdp.getMaxY(), false, memNodeToMap, memNodeToMap.tdp);
-                                                key.setReferenceKey(sp.name);
+                                                key.setReferenceKey(sp.getName());
                                                 key.makeFullValue();
-                                                TraceManager.addDev("Adding " + sp.name + " key to " + memNodeToMap.getName());
+                                                TraceManager.addDev("Adding " + sp.getName() + " key to " + memNodeToMap.getName());
                                                 memNodeToMap.addSwallowedTGComponent(key, 10, 10);
                                                 memNodeToMap.tdp.repaint();
                                                 keyMappedtoMem = true;
@@ -2075,9 +2075,9 @@ public class GTURTLEModeling {
                                                 links.add(newLink);
                                                 
                                                 TMLArchiKey key = new TMLArchiKey(memNodeToMap.x, (int)(memNodeToMap.y+memNodeToMap.getHeight()*(0.3+Math.random()/2)), memNodeToMap.tdp.getMinX(), memNodeToMap.tdp.getMaxX(), memNodeToMap.tdp.getMinY(), memNodeToMap.tdp.getMaxY(), false, null, memNodeToMap.tdp);
-                                                key.setReferenceKey(sp.name);
+                                                key.setReferenceKey(sp.getName());
                                                 key.makeFullValue();
-                                                TraceManager.addDev("Adding " + sp.name + " key to " + memNodeToMap.getName());
+                                                TraceManager.addDev("Adding " + sp.getName() + " key to " + memNodeToMap.getName());
                                                 memNodeToMap.addSwallowedTGComponent(key, 10, 10);
                                                 memNodeToMap.tdp.repaint();
                                                 keyMappedtoMem = true;
@@ -2126,9 +2126,9 @@ public class GTURTLEModeling {
                                     listE.addCor(newHwMemory, memNodeToMap);
 
                                     TMLArchiKey key = new TMLArchiKey(memNodeToMap.x, (int)(memNodeToMap.y+memNodeToMap.getHeight()*(0.3+Math.random()/2)), memNodeToMap.tdp.getMinX(), memNodeToMap.tdp.getMaxX(), memNodeToMap.tdp.getMinY(), memNodeToMap.tdp.getMaxY(), false, null, memNodeToMap.tdp);
-                                    key.setReferenceKey(sp.name);
+                                    key.setReferenceKey(sp.getName());
                                     key.makeFullValue();
-                                    TraceManager.addDev("Adding " + sp.name + " key to " + memNodeToMap.getName());
+                                    TraceManager.addDev("Adding " + sp.getName() + " key to " + memNodeToMap.getName());
                                     memNodeToMap.addSwallowedTGComponent(key, 10, 10);
                                     memNodeToMap.tdp.repaint();
                                     keyMappedtoMem = true;
diff --git a/src/main/java/ui/HSMGeneration.java b/src/main/java/ui/HSMGeneration.java
index 34ffce8221..82e85af470 100644
--- a/src/main/java/ui/HSMGeneration.java
+++ b/src/main/java/ui/HSMGeneration.java
@@ -262,13 +262,13 @@ public class HSMGeneration implements Runnable {
                                 channelInstances.add(tg);
                                 SecurityPattern sp = tmap.getSecurityPatternByName(writeChannel.getSecurityContext());
                                 int type = -1;
-                                if (sp.type.equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) {
+                                if (sp.getType().equals(SecurityPattern.SYMMETRIC_ENC_PATTERN)) {
                                     type = HSMChannel.SENC;
-                                } else if (sp.type.equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
+                                } else if (sp.getType().equals(SecurityPattern.ASYMMETRIC_ENC_PATTERN)) {
                                     type = HSMChannel.AENC;
-                                } else if (sp.type.equals(SecurityPattern.MAC_PATTERN)) {
+                                } else if (sp.getType().equals(SecurityPattern.MAC_PATTERN)) {
                                     type = HSMChannel.MAC;
-                                } else if (sp.type.equals(SecurityPattern.NONCE_PATTERN)) {
+                                } else if (sp.getType().equals(SecurityPattern.NONCE_PATTERN)) {
                                     type = HSMChannel.NONCE;
                                 }
                                 HSMChannel ch = new HSMChannel(writeChannel.getChannelName(), compName, type);
diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java
index a72c6fa96a..bf1ea9dbac 100644
--- a/src/main/java/ui/MainGUI.java
+++ b/src/main/java/ui/MainGUI.java
@@ -1907,7 +1907,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Per
             Date date = new Date();
             suffix = dateFormat.format(date);
         } 
-        String tabName = title + "_" + suffix;
+        String tabName = title + suffix;
         TraceManager.addDev("Draw TML Spec 1");
         int index = createTMLComponentDesign(tabName);
         TraceManager.addDev("Draw TML Spec 2");
@@ -1924,7 +1924,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Per
             Date date = new Date();
             suffix = dateFormat.format(date);
         } 
-        String tabName = title + "_" + suffix;
+        String tabName = title + suffix;
         TraceManager.addDev("Draw TMAP Spec 1");
         int index = createTMLArchitecture(tabName + "_Mapping");
         TraceManager.addDev("Draw TMAP Spec 2");
diff --git a/src/main/java/ui/SecurityGeneration.java b/src/main/java/ui/SecurityGeneration.java
index bab318ccf8..8f6b09a616 100644
--- a/src/main/java/ui/SecurityGeneration.java
+++ b/src/main/java/ui/SecurityGeneration.java
@@ -85,7 +85,7 @@ public class SecurityGeneration implements Runnable {
         }
 
         TML2Avatar t2a = new TML2Avatar(newMap, false, true, o);
-        AvatarSpecification avatarspec = t2a.generateAvatarSpec("1", this.autoWeakAuth||this.autoStrongAuth);
+        AvatarSpecification avatarspec = t2a.generateAvatarSpec("1");
         if (avatarspec == null) {
             TraceManager.addDev("No avatar spec");
             return;
diff --git a/src/main/java/ui/window/JDialogProverifVerification.java b/src/main/java/ui/window/JDialogProverifVerification.java
index 01d8bf773f..af4f9a1ced 100644
--- a/src/main/java/ui/window/JDialogProverifVerification.java
+++ b/src/main/java/ui/window/JDialogProverifVerification.java
@@ -1768,10 +1768,10 @@ public class JDialogProverifVerification extends JDialog implements ActionListen
                     this.rshc.sendExecuteCommandRequest();
                     RshClientReader reader = this.rshc.getDataReaderFromProcess();
 
-                    if (this.pvoa == null) {
+                    //if (this.pvoa == null) {
                         this.pvoa = mgui.gtm.getProVerifOutputAnalyzer();
                         this.pvoa.addListener(this);
-                    }
+                    //}
                     //try {
                         this.pvoa.analyzeOutput(reader, typedLanguage.isSelected());
                     /*} catch (Exception e) {
diff --git a/ttool/src/test/java/tmltranslator/DiplodocusSecurityTest.java b/ttool/src/test/java/tmltranslator/DiplodocusSecurityTest.java
index d7d0e55841..06d8b95e2b 100644
--- a/ttool/src/test/java/tmltranslator/DiplodocusSecurityTest.java
+++ b/ttool/src/test/java/tmltranslator/DiplodocusSecurityTest.java
@@ -43,25 +43,23 @@ public class DiplodocusSecurityTest extends AbstractTest {
     final String [] MODELS_DIPLO_SECURITY = {"symetric", "nonce", "keyexchange", "mac"};
 
     private static final List<List<String>> LIST_OF_LISTS_OF_QUERIES = Arrays.asList(
-            Arrays.asList("Query not attacker(Alice___SymmetricExchange__comm_chData[!1 = v]) is true.",
-                    "Query inj-event(authenticity___Bob___SymmetricExchange__comm_chData___aftersignalstate_SymmetricExchange_comm_" +
-                            "SymmetricExchange_comm(dummyM)) ==> inj-event(authenticity___Alice___SymmetricExchange__comm_chData" +
-                            "___signalstate_SymmetricExchange_comm_SymmetricExchange_comm(dummyM)) is false."),
-            Arrays.asList("Query not attacker(Alice___nonce__comm_chData[!1 = v]) is true.",
-                    "Query inj-event(authenticity___Bob___nonce__comm_chData___aftersignalstate_nonce_comm_nonce_comm(dummyM)) ==> inj-event" +
-                            "(authenticity___Alice___nonce__comm_chData___signalstate_nonce_comm_nonce_comm(dummyM)) is false."),
-            Arrays.asList("Query not attacker(Alice___KeyExchange__comm_chData[!1 = v]) is true.", "RESULT inj-event" +
-                    "(authenticity___Bob___KeyExchange__comm_chData___aftersignalstate_KeyExchange_comm_KeyExchange_comm283" +
-                    "(dummyM)) ==> inj-event(authenticity___Alice___KeyExchange__comm_chData___signalstate_KeyExchange_comm_KeyExchange_comm239" +
-                    "(dummyM)) is true.", "Query inj-event(authenticity___Bob___KeyExchange__comm_chData___aftersignalstate_KeyExchange_comm" +
-                    "_KeyExchange_comm283(dummyM)) ==> inj-event(authenticity___Alice___KeyExchange__comm_chData" +
-                    "___signalstate_KeyExchange_comm_KeyExchange_comm239(dummyM)) is true.",
-                    "Query inj-event(authenticity___Bob___KeyExchange__comm_chData___aftersignalstate_KeyExchange_comm_KeyExchange_",
-                    "Query inj-event(authenticity___Bob___KeyExchange__comm_chData___aftersignalstate_KeyExchange_comm_KeyExchange_comm(dummyM)) " +
-                            "==> inj-event(authenticity___Alice___KeyExchange__comm_chData___signalstate_KeyExchange_comm_KeyExchange_comm(dummyM)) is false"),
-            Arrays.asList("Query not attacker(Alice___MAC__comm_chData[!1 = v]) is true.",
-                    "Query inj-event(authenticity___Bob___MAC__comm_chData___aftersignalstate_MAC_comm_MAC_comm(dummyM)) ==> inj-event(authenticity" +
-                            "___Alice___MAC__comm_chData___signalstate_MAC_comm_MAC_comm(dummyM)) is false")
+            Arrays.asList("Query not attacker(Alice___sym_encrypted[!1 = v]) is true.",
+                    "Query not attacker(Alice___sym[!1 = v]) is true.",
+                    "Query inj-event(authenticity___Bob___sym___decrypt_sym_dummy(dummyM))" +
+                            " ==> inj-event(authenticity___Alice___sym____encrypt_sym(dummyM)) is false."),
+            Arrays.asList("Query not attacker(Alice___symN[!1 = v]) is true.",
+                    "Query not attacker(Alice___symN_encrypted[!1 = v]) is true.",
+                    "Query inj-event(authenticity___Bob___symN___decrypt_symN_dummy(dummyM)) ==> inj-event" +
+                            "(authenticity___Alice___symN____encrypt_symN(dummyM)) is true."),
+            Arrays.asList("Query not attacker(Alice___symKey[!1 = v]) is true.",
+                    "Query not attacker(Alice___symKey_encrypted[!1 = v]) is true.",
+                    "Query not attacker(Alice___encryptedKey_symKey[!1 = v]) is true.",
+                    "Query inj-event(authenticity___Bob___symKey___decrypt_symKey_dummy(dummyM)) ==>" +
+                            " inj-event(authenticity___Alice___symKey____encrypt_symKey(dummyM)) is false."),
+            Arrays.asList("Query not attacker(Alice___mac[!1 = v]) is false.",
+                    "Query not attacker(Alice___mac_encrypted[!1 = v]) is true.",
+                    "Query inj-event(authenticity___Bob___mac___decrypt_mac_dummy(dummyM)) ==> inj-event(authenticity" +
+                            "___Alice___mac____encrypt_mac(dummyM)) is false.")
     );
     private static final String PROVERIF_SUMMARY = "Verification summary:";
     private static final String PROVERIF_QUERY = "Query";
@@ -145,7 +143,7 @@ public class DiplodocusSecurityTest extends AbstractTest {
                 o = ((TGComponent)(tmap.getTMLModeling().getReference())).getTDiagramPanel().tp;
             }
             TML2Avatar t2a = new TML2Avatar(tmap, false, true, o);
-            AvatarSpecification avatarspec = t2a.generateAvatarSpec("1", true);
+            AvatarSpecification avatarspec = t2a.generateAvatarSpec("1");
             AVATAR2ProVerif avatar2proverif = new AVATAR2ProVerif(avatarspec);
             ProVerifSpec proverif = avatar2proverif.generateProVerif(true, true, 0, true,
                     true);
diff --git a/ttool/src/test/java/tmltranslator/TMLComparingMethodTest.java b/ttool/src/test/java/tmltranslator/TMLComparingMethodTest.java
index 1f2094e841..a6ca771f4a 100644
--- a/ttool/src/test/java/tmltranslator/TMLComparingMethodTest.java
+++ b/ttool/src/test/java/tmltranslator/TMLComparingMethodTest.java
@@ -402,8 +402,8 @@ public class TMLComparingMethodTest extends AbstractTest {
         secuPt12 = new SecurityPattern("securityPattern1","Symmetric Encryption","5","128",
                 "100", "100", "None", "formula1", "Key1");
 
-        secuPt9.originTask = "OriginTask";
-        secuPt10.algorithm = "EDF";
+        //secuPt9.setOriginTask("OriginTask");
+        secuPt10.setAlgorithm("EDF");
     }
 
     private void createTMLTaskForTestingConfigs() {
@@ -526,7 +526,7 @@ public class TMLComparingMethodTest extends AbstractTest {
         assertFalse(securityPattern1.equalSpec(secuPt6));
         assertFalse(securityPattern1.equalSpec(secuPt7));
         assertFalse(securityPattern1.equalSpec(secuPt8));
-        assertFalse(securityPattern1.equalSpec(secuPt9));
+        //assertFalse(securityPattern1.equalSpec(secuPt9));
         assertFalse(securityPattern1.equalSpec(secuPt10));
         assertFalse(securityPattern1.equalSpec(secuPt11));
         assertTrue(securityPattern1.equalSpec(secuPt12));
diff --git a/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tml b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tml
index 6de0229a51..b2f8cb6be8 100644
--- a/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tml
+++ b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tml
@@ -19,7 +19,7 @@ TASK KeyExchange__Alice
     //Local variables
     
     //Behavior
-    EXECC 100 aenc AE 100 100 0 0 - - 1
+    EXECC 100 aenc AE 100 100 0 symKey - symKey 1
     WRITE KeyExchange__comm 1+0 aenc
     EXECC 100 symKey SE 100 100 0 0 - - 1
     WRITE KeyExchange__comm 1+0 symKey
@@ -31,7 +31,7 @@ TASK KeyExchange__Bob
     
     //Behavior
     READ KeyExchange__comm 1+0 aenc
-    EXECC 100 aenc AE 100 100 0 0 - - 2
+    EXECC 100 aenc AE 100 100 0 symKey - symKey 2
     READ KeyExchange__comm 1+0 symKey
     EXECC 100 symKey SE 100 100 0 0 - - 2
 ENDTASK
diff --git a/ttool/src/test/resources/tmltranslator/test_diplo_security_models/nonce.tml b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/nonce.tml
index e3d8d17e7e..739a42de72 100644
--- a/ttool/src/test/resources/tmltranslator/test_diplo_security_models/nonce.tml
+++ b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/nonce.tml
@@ -22,7 +22,7 @@ TASK nonce__Alice
     
     //Behavior
     READ nonce__nonce_ch 1+0 n
-    EXECC 100 symN SE 100 100 0 0 - - 1
+    EXECC 100 symN SE 100 100 0 0 n - 1
     WRITE nonce__comm 1+0 symN
 ENDTASK
 
@@ -34,6 +34,6 @@ TASK nonce__Bob
     EXECC 100 n NONCE 100 100 0 11 - - 1
     WRITE nonce__nonce_ch 1+0 n
     READ nonce__comm 1+0 symN
-    EXECC 100 symN SE 100 100 0 0 - - 2
+    EXECC 100 symN SE 100 100 0 0 n - 2
 ENDTASK
 
-- 
GitLab