diff --git a/src/main/java/ui/simulationtraceanalysis/DirectedGraphTranslator.java b/src/main/java/ui/simulationtraceanalysis/DirectedGraphTranslator.java
index 2aa0ce94f00c4ab5600c2e3ca28b39044a66e59f..a211a10cf4d89f76f4af96f659ca0851921d39a6 100644
--- a/src/main/java/ui/simulationtraceanalysis/DirectedGraphTranslator.java
+++ b/src/main/java/ui/simulationtraceanalysis/DirectedGraphTranslator.java
@@ -40,6 +40,9 @@ package ui.simulationtraceanalysis;
 
 import com.mxgraph.layout.hierarchical.mxHierarchicalLayout;
 import com.mxgraph.swing.mxGraphComponent;
+
+import avatartranslator.AvatarStateMachineElement;
+
 import org.jgrapht.Graph;
 import org.jgrapht.GraphPath;
 import org.jgrapht.Graphs;
@@ -55,6 +58,8 @@ import ui.TGComponent;
 import ui.TGConnectingPoint;
 import ui.TGConnector;
 import ui.TMLComponentDesignPanel;
+import ui.ad.TADComponentWithSubcomponents;
+import ui.ad.TADComponentWithoutSubcomponents;
 import ui.interactivesimulation.SimulationTransaction;
 import ui.tmlad.*;
 import ui.tmlcompd.TMLCPrimitivePort;
@@ -79,8 +84,6 @@ import java.util.Map.Entry;
  */
 public class DirectedGraphTranslator extends JApplet {
 
-  
-
     private TMLTask taskAc, task1, task2;
 
     private TMLActivity activity;
@@ -145,7 +148,7 @@ public class DirectedGraphTranslator extends JApplet {
 
     private HashMap<Integer, List<String>> detailsOfMinMaxRow = new HashMap<Integer, List<String>>();
     private HashMap<Integer, List<SimulationTransaction>> dataBydelayedTasksOfMinMAx = new HashMap<Integer, List<SimulationTransaction>>();
-    private final JFrame frame = new JFrame("Directed Graph of the Mapping model");
+    private final JFrame frame = new JFrame("The Sys-ML Model As Directed Graph");
 
     private List<Integer> times1 = new ArrayList<Integer>();
     private List<Integer> times2 = new ArrayList<Integer>();
@@ -305,7 +308,7 @@ public class DirectedGraphTranslator extends JApplet {
             if (!g.vertexSet().contains(getvertex(ch.getName()))) {
                 vertex v2 = vertex(ch.getName(), ch.getID());
                 g.addVertex(v2);
-
+                updatemainBar("v");
                 // gVertecies.add(vertex(ch.getName()));
                 getvertex(ch.getName()).setType(vertex.TYPE_CHANNEL);
                 getvertex(ch.getName()).setTaintFixedNumber(0);
@@ -375,6 +378,7 @@ public class DirectedGraphTranslator extends JApplet {
 
                 if (!g.containsVertex(getvertex(ChannelName))) {
                     g.addVertex(v);
+                    updatemainBar("v");
                     getvertex(ChannelName).setType(vertex.TYPE_CHANNEL);
                     // gVertecies.add(vertex(ChannelName));
                     getvertex(ChannelName).setTaintFixedNumber(0);
@@ -403,6 +407,7 @@ public class DirectedGraphTranslator extends JApplet {
 
                 if (!g.containsVertex(getvertex(ChannelName))) {
                     g.addVertex(v);
+                    updatemainBar("v");
                     getvertex(ChannelName).setType(vertex.TYPE_CHANNEL);
                     // gVertecies.add(vertex(ChannelName));
 
@@ -433,7 +438,7 @@ public class DirectedGraphTranslator extends JApplet {
 
                 if (!g.containsVertex(v)) {
                     g.addVertex(v);
-
+                    updatemainBar("v");
                     getvertex(ChannelName).setType(vertex.TYPE_CHANNEL);
                     // gVertecies.add(vertex(ChannelName));
                     getvertex(ChannelName).setTaintFixedNumber(0);
@@ -950,6 +955,7 @@ public class DirectedGraphTranslator extends JApplet {
                         int id = ((TMLReadChannel) (currentElement)).getChannel(0).getID();
                         if (!g.containsVertex(getvertex(name))) {
                             g.addVertex(vertex(name, id));
+                            updatemainBar("v");
 
                         }
 
@@ -984,6 +990,7 @@ public class DirectedGraphTranslator extends JApplet {
                         vertex v = getvertex(vName);
                         if (!g.containsVertex(v)) {
                             g.addVertex(vertex(vName, vid));
+                            updatemainBar("v");
 
                         }
 
@@ -1013,7 +1020,7 @@ public class DirectedGraphTranslator extends JApplet {
                     } else if (currentElement.getName().equals("stopOfFork") || currentElement.getName().equals("stop2OfFork")
                             || currentElement.getName().equals("stopOfJoin")) {
                         opCount++;
-
+                        // currentElement = currentElement.getNexts().firstElement();
                         continue;
                     } else if (taskName.startsWith("JOINTASK_S_") && currentElement.getName().startsWith("ReadOfJoin")) {
 
@@ -1022,6 +1029,7 @@ public class DirectedGraphTranslator extends JApplet {
 
                         if (!g.containsVertex(getvertex(vName))) {
                             g.addVertex(vertex(vName, vid));
+                            updatemainBar("v");
 
                         }
 
@@ -1054,6 +1062,7 @@ public class DirectedGraphTranslator extends JApplet {
 
                         if (!g.containsVertex(getvertex(vName))) {
                             g.addVertex(vertex(vName, vid));
+                            updatemainBar("v");
 
                         }
 
@@ -1082,8 +1091,6 @@ public class DirectedGraphTranslator extends JApplet {
 
                     }
 
-                    updatemainBar(eventName);
-
                     if (currentElement.getNexts().size() > 1) {
                         for (TMLActivityElement ae : currentElement.getNexts()) {
                             multiNexts.add(ae);
@@ -1105,7 +1112,7 @@ public class DirectedGraphTranslator extends JApplet {
                     }
 
                     // start activity is added as a vertex
-                    if (currentElement.getReferenceObject() instanceof TMLADStartState) {
+                    else if (currentElement.getReferenceObject() instanceof TMLADStartState) {
 
                         addStartVertex(taskName);
 
@@ -1114,37 +1121,11 @@ public class DirectedGraphTranslator extends JApplet {
                     // the below activities are added as vertex with the required edges
                     // these activities can be used to check later for latency
 
-                    else if (currentElement.getReferenceObject() instanceof TMLADSendEvent
-                            || currentElement.getReferenceObject() instanceof TMLADWaitEvent
-                            || currentElement.getReferenceObject() instanceof TMLADForLoop
-                            || currentElement.getReferenceObject() instanceof TMLADForStaticLoop
-                            || currentElement.getReferenceObject() instanceof TMLADChoice
-                            || currentElement.getReferenceObject() instanceof TMLADForEverLoop
-                            || (currentElement.getReferenceObject() instanceof TMLADExecI && !currentElement.getValue().equals("0"))
-                            || (currentElement.getReferenceObject() instanceof TMLADExecC && !currentElement.getValue().equals("0"))
-                            || (currentElement.getReferenceObject() instanceof TMLADDelay
-                                    && !((TMLADDelay) currentElement.getReferenceObject()).getDelayValue().equals("0"))
-                            || currentElement.getReferenceObject() instanceof TMLADSendRequest
-                            || currentElement.getReferenceObject() instanceof TMLADReadRequestArg
-                            || currentElement.getReferenceObject() instanceof TMLADActionState
-                            || (currentElement.getReferenceObject() instanceof TMLADDelayInterval
-                                    && !((TMLADDelayInterval) currentElement.getReferenceObject()).getMinDelayValue().equals("0")
-                                    && !((TMLADDelayInterval) currentElement.getReferenceObject()).getMaxDelayValue().equals("0"))
-                            || (currentElement.getReferenceObject() instanceof TMLADExecCInterval
-                                    && !((TMLADExecCInterval) currentElement.getReferenceObject()).getMinDelayValue().equals("0")
-                                    && !((TMLADExecCInterval) currentElement.getReferenceObject()).getMaxDelayValue().equals("0"))
-                            || (currentElement.getReferenceObject() instanceof TMLADExecIInterval
-                                    && !((TMLADExecIInterval) currentElement.getReferenceObject()).getMinDelayValue().equals("0")
-                                    && !((TMLADExecIInterval) currentElement.getReferenceObject()).getMaxDelayValue().equals("0"))
-                            || currentElement.getReferenceObject() instanceof TMLADNotifiedEvent
-                            || currentElement.getReferenceObject() instanceof TMLADRandom
-                            || currentElement.getReferenceObject() instanceof TMLADReadChannel
-                            || currentElement.getReferenceObject() instanceof TMLADWriteChannel
-                            || currentElement.getReferenceObject() instanceof TMLADSequence
-                            || currentElement.getReferenceObject() instanceof TMLADUnorderedSequence
-                            || currentElement.getReferenceObject() instanceof TMLADSelectEvt
-                            || currentElement.getReferenceObject() instanceof TMLADDecrypt
-                            || currentElement.getReferenceObject() instanceof TMLADEncrypt) {
+                    else if (currentElement.getReferenceObject() instanceof TADComponentWithoutSubcomponents
+                            || currentElement.getReferenceObject() instanceof TADComponentWithSubcomponents
+                            || currentElement.getReferenceObject() instanceof TMLADActionState)
+
+                    {
 
                         addcurrentElementVertex(taskName, taskStartName);
 
@@ -1419,6 +1400,7 @@ public class DirectedGraphTranslator extends JApplet {
         vertex startv = vertex(taskStartName, currentElement.getID());
 
         g.addVertex(startv);
+        updatemainBar("v");
         // gVertecies.add(vertex(taskStartName));
         getvertex(taskStartName).setType(vertex.TYPE_START);
         getvertex(taskStartName).setTaintFixedNumber(1);
@@ -1439,30 +1421,31 @@ public class DirectedGraphTranslator extends JApplet {
             TMLCPrimitivePort sendingPortdetails = waitEvent.getEvent().port;
             TMLCPrimitivePort receivePortdetails = waitEvent.getEvent().port2;
 
-            if (!sendingPortdetails.isBlocking()) {
+            if (sendingPortdetails != null && !sendingPortdetails.isBlocking()) {
                 warnings.add(
                         "send event port:" + sendingPortdetails.getPortName() + " is non-blocking. Use tainting for an accurate latency analysis");
             }
-            if (sendingPortdetails.isFinite()) {
+            if (sendingPortdetails != null && sendingPortdetails.isFinite()) {
                 warnings.add("send event port:" + sendingPortdetails.getPortName() + " is Finite. Event lost is not supported in latency analysis ");
             }
             String receivePortparams = waitEvent.getAllParams();
 
             // tmlcdp.tmlctdp.getAllPortsConnectedTo(portdetails);
+            if (sendingPortdetails != null && receivePortdetails != null) {
+                waitEvt.put("waitevent:" + receivePortdetails.getPortName() + "(" + receivePortparams + ")", new ArrayList<String>());
 
-            waitEvt.put("waitevent:" + receivePortdetails.getPortName() + "(" + receivePortparams + ")", new ArrayList<String>());
+                TMLTask originTasks = waitEvent.getEvent().getOriginTask();
 
-            TMLTask originTasks = waitEvent.getEvent().getOriginTask();
+                for (TMLSendEvent wait_sendEvent : originTasks.getSendEvents()) {
 
-            for (TMLSendEvent wait_sendEvent : originTasks.getSendEvents()) {
+                    String sendingPortparams = wait_sendEvent.getAllParams();
 
-                String sendingPortparams = wait_sendEvent.getAllParams();
+                    waitEvt.get("waitevent:" + receivePortdetails.getPortName() + "(" + receivePortparams + ")")
+                            .add("sendevent:" + sendingPortdetails.getPortName() + "(" + sendingPortparams + ")");
 
-                waitEvt.get("waitevent:" + receivePortdetails.getPortName() + "(" + receivePortparams + ")")
-                        .add("sendevent:" + sendingPortdetails.getPortName() + "(" + sendingPortparams + ")");
+                }
 
             }
-
         }
 
     }
@@ -1702,9 +1685,10 @@ public class DirectedGraphTranslator extends JApplet {
             String sendingPortparams = sendEvent.getAllParams();
 
             TMLTask destinationTasks = sendEvent.getEvent().getDestinationTask();
+            if (sendingPortdetails != null && receivePortdetails != null) {
+                sendEvt.put("sendevent:" + sendingPortdetails.getPortName() + "(" + sendingPortparams + ")", new ArrayList<String>());
 
-            sendEvt.put("sendevent:" + sendingPortdetails.getPortName() + "(" + sendingPortparams + ")", new ArrayList<String>());
-
+            
             for (TMLWaitEvent wait_sendEvent : destinationTasks.getWaitEvents()) {
                 String receivePortparams = wait_sendEvent.getAllParams();
 
@@ -1712,6 +1696,7 @@ public class DirectedGraphTranslator extends JApplet {
                         .add("waitevent:" + receivePortdetails.getPortName() + "(" + receivePortparams + ")");
 
             }
+            }
 
         }
 
@@ -1813,44 +1798,64 @@ public class DirectedGraphTranslator extends JApplet {
 
         }
 
-        if (((activity.getPrevious(currentElement).getReferenceObject() instanceof TMLADExecI
-                || activity.getPrevious(currentElement).getReferenceObject() instanceof TMLADExecC)
-                && activity.getPrevious(currentElement).getValue().equals("0"))
-                || ((activity.getPrevious(currentElement).getReferenceObject() instanceof TMLADDelay)
-                        && ((TMLADDelay) activity.getPrevious(currentElement).getReferenceObject()).getDelayValue().equals("0"))
-
-                || ((activity.getPrevious(currentElement).getReferenceObject() instanceof TMLADDelayInterval)
-                        && (((TMLADDelayInterval) activity.getPrevious(currentElement).getReferenceObject()).getMinDelayValue().equals("0")
-                                && ((TMLADDelayInterval) activity.getPrevious(currentElement).getReferenceObject()).getMaxDelayValue().equals("0")))
-
-                || ((activity.getPrevious(currentElement).getReferenceObject() instanceof TMLADExecCInterval)
-                        && (((TMLADExecCInterval) activity.getPrevious(currentElement).getReferenceObject()).getMinDelayValue().equals("0")
-                                && ((TMLADExecCInterval) activity.getPrevious(currentElement).getReferenceObject()).getMaxDelayValue().equals("0"))
-
-                        || ((activity.getPrevious(currentElement).getReferenceObject() instanceof TMLADExecIInterval)
-                                && (((TMLADExecIInterval) activity.getPrevious(currentElement).getReferenceObject()).getMinDelayValue().equals("0")
-                                        && ((TMLADExecIInterval) activity.getPrevious(currentElement).getReferenceObject()).getMaxDelayValue()
-                                                .equals("0")))))
-
-        {
-
-            if (activity.getPrevious(activity.getPrevious(currentElement)).getReferenceObject() instanceof TMLADRandom) {
-                preEventName = taskName + "__" + activity.getPrevious(activity.getPrevious(currentElement)).getName() + "__"
-                        + activity.getPrevious(activity.getPrevious(currentElement)).getID();
-                preEventid = activity.getPrevious(activity.getPrevious(currentElement)).getID();
-
-            } else if (activity.getPrevious(activity.getPrevious(currentElement)).getReferenceObject() instanceof TMLADUnorderedSequence) {
-                preEventName = taskName + "__" + "unOrderedSequence" + "__" + activity.getPrevious(activity.getPrevious(currentElement)).getID();
-                preEventid = activity.getPrevious(activity.getPrevious(currentElement)).getID();
-
-            } else {
-                preEventName = taskName + "__" + activity.getPrevious(activity.getPrevious(currentElement)).getReferenceObject().toString() + "__"
-                        + activity.getPrevious(activity.getPrevious(currentElement)).getID();
-                preEventid = activity.getPrevious(activity.getPrevious(currentElement)).getID();
-
-            }
-
-        }
+        /*
+         * if (((activity.getPrevious(currentElement).getReferenceObject() instanceof
+         * TMLADExecI || activity.getPrevious(currentElement).getReferenceObject()
+         * instanceof TMLADExecC) &&
+         * activity.getPrevious(currentElement).getValue().equals("0")) ||
+         * ((activity.getPrevious(currentElement).getReferenceObject() instanceof
+         * TMLADDelay) && ((TMLADDelay)
+         * activity.getPrevious(currentElement).getReferenceObject()).getDelayValue().
+         * equals("0"))
+         * 
+         * || ((activity.getPrevious(currentElement).getReferenceObject() instanceof
+         * TMLADDelayInterval) && (((TMLADDelayInterval)
+         * activity.getPrevious(currentElement).getReferenceObject()).getMinDelayValue()
+         * .equals("0") && ((TMLADDelayInterval)
+         * activity.getPrevious(currentElement).getReferenceObject()).getMaxDelayValue()
+         * .equals("0")))
+         * 
+         * || ((activity.getPrevious(currentElement).getReferenceObject() instanceof
+         * TMLADExecCInterval) && (((TMLADExecCInterval)
+         * activity.getPrevious(currentElement).getReferenceObject()).getMinDelayValue()
+         * .equals("0") && ((TMLADExecCInterval)
+         * activity.getPrevious(currentElement).getReferenceObject()).getMaxDelayValue()
+         * .equals("0"))
+         * 
+         * || ((activity.getPrevious(currentElement).getReferenceObject() instanceof
+         * TMLADExecIInterval) && (((TMLADExecIInterval)
+         * activity.getPrevious(currentElement).getReferenceObject()).getMinDelayValue()
+         * .equals("0") && ((TMLADExecIInterval)
+         * activity.getPrevious(currentElement).getReferenceObject()).getMaxDelayValue()
+         * .equals("0")))))
+         * 
+         * {
+         * 
+         * if (activity.getPrevious(activity.getPrevious(currentElement)).
+         * getReferenceObject() instanceof TMLADRandom) { preEventName = taskName + "__"
+         * + activity.getPrevious(activity.getPrevious(currentElement)).getName() + "__"
+         * + activity.getPrevious(activity.getPrevious(currentElement)).getID();
+         * preEventid =
+         * activity.getPrevious(activity.getPrevious(currentElement)).getID();
+         * 
+         * } else if (activity.getPrevious(activity.getPrevious(currentElement)).
+         * getReferenceObject() instanceof TMLADUnorderedSequence) { preEventName =
+         * taskName + "__" + "unOrderedSequence" + "__" +
+         * activity.getPrevious(activity.getPrevious(currentElement)).getID();
+         * preEventid =
+         * activity.getPrevious(activity.getPrevious(currentElement)).getID();
+         * 
+         * } else { preEventName = taskName + "__" +
+         * activity.getPrevious(activity.getPrevious(currentElement)).getReferenceObject
+         * ().toString() + "__" +
+         * activity.getPrevious(activity.getPrevious(currentElement)).getID();
+         * preEventid =
+         * activity.getPrevious(activity.getPrevious(currentElement)).getID();
+         * 
+         * }
+         * 
+         * }
+         */
 
         if (!nameIDTaskList.containsKey(currentElement.getID())) {
             nameIDTaskList.put(String.valueOf(currentElement.getID()), eventName);
@@ -1863,6 +1868,7 @@ public class DirectedGraphTranslator extends JApplet {
             vertex preV = vertex(preEventName, preEventid);
 
             g.addVertex(v);
+            updatemainBar("v");
             // gVertecies.add(vertex(eventName));
 
             g.addEdge(preV, v);
@@ -1872,6 +1878,7 @@ public class DirectedGraphTranslator extends JApplet {
             vertex v = vertex(eventName, eventid);
 
             g.addVertex(v);
+            updatemainBar("v");
             // gVertecies.add(vertex(eventName));
             g.addEdge(getvertex(taskStartName), getvertex(eventName));
             opCount++;
@@ -1882,21 +1889,11 @@ public class DirectedGraphTranslator extends JApplet {
                 || currentElement.getReferenceObject() instanceof TMLADSendRequest
                 || currentElement.getReferenceObject() instanceof TMLADNotifiedEvent
                 || currentElement.getReferenceObject() instanceof TMLADReadChannel || currentElement.getReferenceObject() instanceof TMLADWriteChannel
-                || (currentElement.getReferenceObject() instanceof TMLADExecI && !currentElement.getValue().equals("0"))
-                || (currentElement.getReferenceObject() instanceof TMLADExecC && !currentElement.getValue().equals("0"))
-                || (currentElement.getReferenceObject() instanceof TMLADDelay
-                        && !((TMLADDelay) currentElement.getReferenceObject()).getDelayValue().equals("0"))
-                || (currentElement.getReferenceObject() instanceof TMLADDelayInterval
-                        && !((TMLADDelayInterval) currentElement.getReferenceObject()).getMinDelayValue().equals("0")
-                        && !((TMLADDelayInterval) currentElement.getReferenceObject()).getMaxDelayValue().equals("0"))
-
-                || (currentElement.getReferenceObject() instanceof TMLADExecCInterval
-                        && !((TMLADExecCInterval) currentElement.getReferenceObject()).getMinDelayValue().equals("0")
-                        && ((TMLADExecCInterval) currentElement.getReferenceObject()).getMaxDelayValue().equals("0"))
-                || (currentElement.getReferenceObject() instanceof TMLADExecIInterval
-                        && !((TMLADExecIInterval) currentElement.getReferenceObject()).getMinDelayValue().equals("0")
-                        && !((TMLADExecIInterval) currentElement.getReferenceObject()).getMaxDelayValue().equals("0"))
-                || currentElement.getReferenceObject() instanceof TMLADEncrypt || currentElement.getReferenceObject() instanceof TMLADDecrypt
+                || (currentElement.getReferenceObject() instanceof TMLADExecI) || (currentElement.getReferenceObject() instanceof TMLADExecC)
+                || (currentElement.getReferenceObject() instanceof TMLADDelay) || (currentElement.getReferenceObject() instanceof TMLADDelayInterval)
+                || (currentElement.getReferenceObject() instanceof TMLADExecCInterval)
+                || (currentElement.getReferenceObject() instanceof TMLADExecIInterval) || currentElement.getReferenceObject() instanceof TMLADEncrypt
+                || currentElement.getReferenceObject() instanceof TMLADDecrypt
                 || currentElement.getReferenceObject() instanceof TMLADReadRequestArg) {
 
             allLatencyTasks.add(eventName);
@@ -1907,7 +1904,7 @@ public class DirectedGraphTranslator extends JApplet {
             getvertex(eventName).setType(vertex.TYPE_CTRL);
             getvertex(eventName).setTaintFixedNumber(1);
         } else if (currentElement.getReferenceObject() instanceof TMLADSelectEvt) {
-            getvertex(eventName).setType(vertex.TYPE_CTRL);
+            getvertex(eventName).setType(vertex.TYPE_SELECT_EVT);
             getvertex(eventName).setTaintFixedNumber(1);
 
         } else if (currentElement.getReferenceObject() instanceof TMLADActionState) {
@@ -2244,6 +2241,7 @@ public class DirectedGraphTranslator extends JApplet {
         vertex taskEndVertex = vertex(taskEndName, taskEndid);
 
         g.addVertex(taskEndVertex);
+        updatemainBar("v");
         // gVertecies.add(vertex(taskEndName));
         getvertex(eventName).setType(vertex.TYPE_END);
         getvertex(eventName).setTaintFixedNumber(1);
@@ -3674,6 +3672,28 @@ public class DirectedGraphTranslator extends JApplet {
 
             for (SimulationTransaction st : transFile1) {
 
+                if (st.command.contains("SelectEvent params:") && getvertexFromID(Integer.valueOf(st.id)).getType() == 11) {
+                    st.command = st.command.replace("SelectEvent params:", "Wait" + st.channelName);
+
+                    int selectID = Integer.valueOf(st.id);
+
+                    vertex selectV = getvertexFromID(Integer.valueOf(selectID));
+
+                    String[] chName = st.channelName.toString().split("__");
+
+                    int waitEvntName = chName.length;
+
+                    String waitEvnt = chName[waitEvntName - 1];
+
+                    for (vertex nextV : Graphs.successorListOf(g, selectV)) {
+
+                        if (nextV.getName().contains(waitEvnt)) {
+                            st.id = String.valueOf(nextV.getId());
+                        }
+                    }
+
+                }
+
                 if (st.id.equals(idTask1) && !times1.contains(Integer.valueOf(st.startTime))) {
                     Task1Traces.add(st);
                     task1DeviceName = st.deviceName;
@@ -3682,7 +3702,7 @@ public class DirectedGraphTranslator extends JApplet {
 
                 }
 
-                if (st.id.equals(idTask2) && !times2.contains(Integer.valueOf(st.startTime))) {
+                if (st.id.equals(idTask2) && !times2.contains(Integer.valueOf(st.endTime))) {
                     Task2Traces.add(st);
                     task2DeviceName = st.deviceName;
                     times2.add(Integer.valueOf(st.endTime));
@@ -3717,18 +3737,39 @@ public class DirectedGraphTranslator extends JApplet {
                     // if (Integer.valueOf(st.startTime) >= times1.get(i) &&
                     // Integer.valueOf(st.startTime) < times2.get(i)) {
 
-                    if (!(Integer.valueOf(st.startTime) < times1.get(i) && Integer.valueOf(st.endTime) < times1.get(i))
-                            && !(Integer.valueOf(st.startTime) > times2.get(i) && Integer.valueOf(st.endTime) > times2.get(i))) {
+                    if (!(Integer.valueOf(st.startTime) < times1.get(i) && Integer.valueOf(st.endTime) <= times1.get(i))
+                            && !(Integer.valueOf(st.startTime) >= times2.get(i) && Integer.valueOf(st.endTime) > times2.get(i))) {
 
                         // if (Integer.valueOf(st.startTime) >= minTime && Integer.valueOf(st.startTime)
                         // < maxTime) {
 
+                        if (st.command.contains("SelectEvent params:") && getvertexFromID(Integer.valueOf(st.id)).getType() == 11) {
+                            st.command = st.command.replace("SelectEvent params:", "Wait" + st.channelName);
+
+                            int selectID = Integer.valueOf(st.id);
+
+                            vertex selectV = getvertexFromID(Integer.valueOf(selectID));
+
+                            String[] chName = st.channelName.toString().split("__");
+
+                            int waitEvntName = chName.length;
+
+                            String waitEvnt = chName[waitEvntName - 1];
+
+                            for (vertex nextV : Graphs.successorListOf(g, selectV)) {
+
+                                if (nextV.getName().contains(waitEvnt)) {
+                                    st.id = String.valueOf(nextV.getId());
+                                }
+                            }
+                        }
+
                         if (Integer.valueOf(st.endTime) > times2.get(i)) {
                             st.endTime = times2.get(i).toString();
                             st.length = Integer.valueOf(Integer.valueOf(times2.get(i)) - Integer.valueOf(st.startTime)).toString();
                         }
 
-                        if (Integer.valueOf(st.startTime) < times1.get(i)) {
+                        if (Integer.valueOf(st.startTime) < times1.get(i) && Integer.valueOf(st.endTime) != times1.get(i)) {
                             st.startTime = Integer.valueOf(times1.get(i)).toString();
                             st.length = Integer.valueOf(Integer.valueOf(st.endTime) - Integer.valueOf(times1.get(i))).toString();
                         }
diff --git a/src/main/java/ui/simulationtraceanalysis/JFrameCompareLatencyDetail.java b/src/main/java/ui/simulationtraceanalysis/JFrameCompareLatencyDetail.java
index f711904fa08284e92b786dad5de7cc34c1152f4c..805bab4bd88ab07c31d36206e2dd6b7b06df6470 100644
--- a/src/main/java/ui/simulationtraceanalysis/JFrameCompareLatencyDetail.java
+++ b/src/main/java/ui/simulationtraceanalysis/JFrameCompareLatencyDetail.java
@@ -35,6 +35,7 @@ import javax.swing.JTextField;
 import javax.swing.ListSelectionModel;
 import javax.swing.border.LineBorder;
 import javax.swing.filechooser.FileNameExtensionFilter;
+import javax.swing.table.DefaultTableModel;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
@@ -45,6 +46,7 @@ import org.xml.sax.SAXException;
 import common.ConfigurationTTool;
 import myutil.GraphicLib;
 import myutil.ScrolledJTextArea;
+import myutil.TraceManager;
 import tmltranslator.TMLMapping;
 import ui.ColorManager;
 import ui.MainGUI;
@@ -317,7 +319,7 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
         framePanel.add(progressBarpanel, mainConstraint);
 
         graphAnalysisResult = new JPanel(new BorderLayout());
-        graphAnalysisResult.setBorder(new javax.swing.border.TitledBorder("Latency Detailed Analysis "));
+        graphAnalysisResult.setBorder(new javax.swing.border.TitledBorder("Latency Analysis "));
         mainConstraint.gridheight = 1;
         // .weighty =0.5;
         // mainConstraint.weightx = 0.5;
@@ -346,7 +348,15 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
         jp03 = new JPanel(new BorderLayout());
         jp03.setLayout(gridbag01);
 
-        table11 = new JTable(dataDetailedByTask, columnNames);
+        DefaultTableModel tableModel1 = new DefaultTableModel(dataDetailedByTask, columnNames) {
+
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+        };
+
+        table11 = new JTable(tableModel1);
         // table11.setBackground(Color.red);
         scrollPane11 = new JScrollPane(table11, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
         // scrollPane11.setBackground(Color.red);
@@ -362,7 +372,15 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
 
         jp03.add(scrollPane11, c01);
 
-        table12 = new JTable(dataDetailedByTask, columnNames);
+        DefaultTableModel tableModel2 = new DefaultTableModel(dataDetailedByTask, columnNames) {
+
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+        };
+
+        table12 = new JTable(tableModel2);
         // table12.setBackground(Color.blue);
         scrollPane12 = new JScrollPane(table12, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
         // scrollPane11.setBackground(Color.blue);
@@ -390,7 +408,15 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
 
         dataDetailedMinMax = new Object[0][0];
 
-        table21 = new JTable(dataDetailedMinMax, columnMinMaxNames);
+        DefaultTableModel tableModel3 = new DefaultTableModel(dataDetailedMinMax, columnMinMaxNames) {
+
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+        };
+
+        table21 = new JTable(tableModel3);
         scrollPane21 = new JScrollPane(table21, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
         scrollPane21.setVisible(b);
         c01.gridheight = 1;
@@ -403,7 +429,15 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
 
         jp04.add(scrollPane21, c01);
 
-        table22 = new JTable(dataDetailedMinMax, columnMinMaxNames);
+        DefaultTableModel tableModel4 = new DefaultTableModel(dataDetailedMinMax, columnMinMaxNames) {
+
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+        };
+
+        table22 = new JTable(tableModel4);
         // table12.setBackground(Color.blue);
         scrollPane22 = new JScrollPane(table22, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
 
@@ -420,7 +454,7 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
         jp04.add(scrollPane22, c01);
 
         resultTab = GraphicLib.createTabbedPaneRegular();// new JTabbedPane();
-        resultTab.addTab("Latency detailed By Tasks", null, jp03, "Latency detailed By Tasks ");
+        resultTab.addTab("Latency Values", null, jp03, "Latency detailed By Tasks ");
         resultTab.addTab("Min/Max Latency", null, jp04, "Min and Max Latency");
 
         graphAnalysisResult.add(resultTab, BorderLayout.CENTER);
@@ -485,11 +519,15 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
             }
 
             buttonShowDGraph1.setEnabled(true);
+            if (pbar.getValue()==pbar.getMaximum()) {
+                updateBar(0);
+                
+            }
             jta.append("Browse the second simulation trace to generate the second graph \n");
             browse.setEnabled(true);
 
         } catch (Exception e) {
-            jta.append("An Error has Accord \n");
+            jta.append("An error has occurred \n");
             jta.append(e.getMessage() + "\n");
             // buttonSaveDGraph.setEnabled(false);
             buttonShowDGraph1.setEnabled(false);
@@ -540,7 +578,10 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
             buttonShowDGraph2.setEnabled(true);
             buttonDetailedAnalysis.setEnabled(true);
             buttonCompareInDetails.setEnabled(true);
-
+            if (pbar.getValue()==pbar.getMaximum()) {
+              updateBar(0);
+                
+            }
             this.pack();
             this.revalidate();
             this.repaint();
@@ -548,7 +589,7 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
             jta.append("A Directed Graph with " + dgraph.getGraphsize() + " vertices and " + dgraph.getGraphEdgeSet() + " edges was generated.\n");
 
         } catch (Exception e) {
-            jta.append("An Error has Accord \n");
+            jta.append("An error has occurred \n");
             jta.append(e.getMessage() + "\n");
             // buttonSaveDGraph.setEnabled(false);
             buttonShowDGraph2.setEnabled(false);
@@ -579,59 +620,64 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
             dispose();
             setVisible(false);
         } else if (evt.getSource() == browse) {
+            try {
+                pBarLabel.setText("Progress of Graph 2 Generation");
+
+                updateBar(0);
+                if (ConfigurationTTool.SystemCCodeDirectory.length() > 0) {
+                    fc = new JFileChooser(ConfigurationTTool.SystemCCodeDirectory);
+                } else {
+                    fc = new JFileChooser();
+                }
 
-            pBarLabel.setText("Progress of Graph 2 Generation");
-
-            updateBar(0);
-            if (ConfigurationTTool.SystemCCodeDirectory.length() > 0) {
-                fc = new JFileChooser(ConfigurationTTool.SystemCCodeDirectory);
-            } else {
-                fc = new JFileChooser();
-            }
+                FileNameExtensionFilter filter = new FileNameExtensionFilter("XML files", "xml");
+                fc.setFileFilter(filter);
+                int returnVal = fc.showOpenDialog(mainGUI.frame);
 
-            FileNameExtensionFilter filter = new FileNameExtensionFilter("XML files", "xml");
-            fc.setFileFilter(filter);
-            int returnVal = fc.showOpenDialog(mainGUI.frame);
+                if (returnVal == JFileChooser.APPROVE_OPTION) {
+                    File filefc = fc.getSelectedFile();
 
-            if (returnVal == JFileChooser.APPROVE_OPTION) {
-                File filefc = fc.getSelectedFile();
+                    latencyDetailedAnalysisMain.setCheckedTransactionsFile(new Vector<String>());
+                    SimulationTrace STfile2 = new SimulationTrace(filefc.getName(), 6, filefc.getAbsolutePath());
+                    secondFile.setText(filefc.getAbsolutePath());
 
-                latencyDetailedAnalysisMain.setCheckedTransactionsFile(new Vector<String>());
-                SimulationTrace STfile2 = new SimulationTrace(filefc.getName(), 6, filefc.getAbsolutePath());
-                secondFile.setText(filefc.getAbsolutePath());
+                    if (STfile2 instanceof SimulationTrace) {
 
-                if (STfile2 instanceof SimulationTrace) {
+                        file2 = new File(STfile2.getFullPath());
 
-                    file2 = new File(STfile2.getFullPath());
+                        try {
+                            latencyDetailedAnalysisMain.latencyDetailedAnalysisForXML(mainGUI, STfile2, false, true, 2);
+                        } catch (XPathExpressionException | ParserConfigurationException | SAXException | IOException e) {
+                            // TODO Auto-generated catch block
+                            e.printStackTrace();
+                        }
 
-                    try {
-                        latencyDetailedAnalysisMain.latencyDetailedAnalysisForXML(mainGUI, STfile2, false, true, 2);
-                    } catch (XPathExpressionException | ParserConfigurationException | SAXException | IOException e) {
-                        // TODO Auto-generated catch block
-                        e.printStackTrace();
-                    }
+                        checkedTransactionsFile2 = latencyDetailedAnalysisMain.getCheckedTransactionsFile();
+                        map = latencyDetailedAnalysisMain.getMap1();
+                        cpanels = latencyDetailedAnalysisMain.getCpanels1();
 
-                    checkedTransactionsFile2 = latencyDetailedAnalysisMain.getCheckedTransactionsFile();
-                    map = latencyDetailedAnalysisMain.getMap1();
-                    cpanels = latencyDetailedAnalysisMain.getCpanels1();
+                        this.toFront();
+                        this.requestFocus();
 
-                    this.toFront();
-                    this.requestFocus();
+                        this.pack();
+                        this.revalidate();
+                        this.repaint();
 
-                    this.pack();
-                    this.revalidate();
-                    this.repaint();
+                        tc.setCld(this);
+                        tc.setMap(map);
+                        // tc.setCld(jFrameCompareLatencyDetail);
+                        tc.setjFrameLDA(jFrameLatencyDetailedAnalysis);
 
-                    tc.setCld(this);
-                    tc.setMap(map);
-                    // tc.setCld(jFrameCompareLatencyDetail);
-                    tc.setjFrameLDA(jFrameLatencyDetailedAnalysis);
+                        tc.start(15);
+                        tc.run();
 
-                    tc.start(15);
-                    tc.run();
+                    }
 
                 }
-
+            } catch (Exception e1) {
+                // TODO Auto-generated catch block
+                // e1.printStackTrace();
+                TraceManager.addDev("Error: " + e1.getMessage());
             }
         } else if (command.equals(actions[LatencyDetailedAnalysisActions.ACT_LATENCY].getActionCommand())) {
             jta.append("Simulation Trace 1 : the Latency Between: \n " + tasksDropDownCombo1.getSelectedItem() + " and \n"
@@ -687,7 +733,7 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
             // jta.append("Refer to the generatd dialog to view the graph.\n");
 
         } catch (Exception e) {
-            // jta.append("An Error has Accord \n");
+            // jta.append("An Error has occurred \n");
             // jta.append(e.getMessage() + "\n");
         }
 
@@ -724,7 +770,15 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
 
         table11.removeAll();
 
-        table11 = new JTable(tableData, columnNames);
+        DefaultTableModel tableModel1 = new DefaultTableModel(tableData, columnNames) {
+
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+        };
+
+        table11 = new JTable(tableModel1);
 
         table11.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
@@ -734,7 +788,15 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
 
         table12.removeAll();
 
-        table12 = new JTable(tableData2, columnNames);
+        DefaultTableModel tableModel2 = new DefaultTableModel(tableData2, columnNames) {
+
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+        };
+
+        table12 = new JTable(tableModel2);
 
         table12.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
@@ -744,7 +806,15 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
 
         table21.removeAll();
 
-        table21 = new JTable(tableData1MinMax, columnMinMaxNames);
+        DefaultTableModel tableModel3 = new DefaultTableModel(tableData1MinMax, columnMinMaxNames) {
+
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+        };
+
+        table21 = new JTable(tableModel3);
 
         table21.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
@@ -754,7 +824,15 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
 
         table22.removeAll();
 
-        table22 = new JTable(tableData2MinMax, columnMinMaxNames);
+        DefaultTableModel tableModel4 = new DefaultTableModel(tableData2MinMax, columnMinMaxNames) {
+
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+        };
+
+        table22 = new JTable(tableModel4);
 
         table22.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
@@ -789,6 +867,7 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
         scrollPane11.repaint();
 
         // scrollPane11.setVisible(true);
+        jta.append("Latency has been computed...Please refer to the tables in the Latency Analysis section for the results \n");
 
         this.pack();
         this.setVisible(b);
diff --git a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyComparedDetailedPopup.java b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyComparedDetailedPopup.java
index 701a3ce1a345365f136db52ec8de1a03958751c9..e03b936b4bd9511768b149af8baaf95e75d28c88 100644
--- a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyComparedDetailedPopup.java
+++ b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyComparedDetailedPopup.java
@@ -158,6 +158,11 @@ public class JFrameLatencyComparedDetailedPopup extends JFrame implements TableM
                     return Integer.class;
                 }
             }
+            
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
         };
 
         // taskNames = new JTable(dataDetailedByTask, columnByTaskNames);
@@ -181,6 +186,11 @@ public class JFrameLatencyComparedDetailedPopup extends JFrame implements TableM
         framePanel.add(scrollPane11, c02);
 
         DefaultTableModel model12 = new DefaultTableModel(dataDetailedByTask2, columnByTaskNames) {
+            
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
             @Override
             public Class getColumnClass(int column) {
                 switch (column) {
@@ -242,6 +252,12 @@ public class JFrameLatencyComparedDetailedPopup extends JFrame implements TableM
         }
 
         DefaultTableModel model2 = new DefaultTableModel(dataHWDelayByTask, columnByHWNames) {
+            
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+            
             @Override
             public Class getColumnClass(int column) {
                 switch (column) {
@@ -279,6 +295,12 @@ public class JFrameLatencyComparedDetailedPopup extends JFrame implements TableM
         framePanel.add(scrollPane13, c02);
 
         DefaultTableModel model3 = new DefaultTableModel(dataHWDelayByTask2, columnByHWNames) {
+            
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+            
             @Override
             public Class getColumnClass(int column) {
                 switch (column) {
@@ -628,7 +650,17 @@ public class JFrameLatencyComparedDetailedPopup extends JFrame implements TableM
 
         }
 
-        JTable table = new JTable(dataDetailedByTask, columnNames);
+        DefaultTableModel tableModel = new DefaultTableModel(dataDetailedByTask, columnNames) {
+
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+        };
+
+       
+        
+        JTable table = new JTable(tableModel);
         table.setFillsViewportHeight(true);
 
         table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
diff --git a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedAnalysis.java b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedAnalysis.java
index f67b0e939bb64a0f43623feefc0ce1584db1e523..046f59d6b151710de66ca0d4631a3e994dd5c0fb 100644
--- a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedAnalysis.java
+++ b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedAnalysis.java
@@ -58,6 +58,7 @@ import java.io.FileReader;
 import java.io.IOException;
 import java.lang.Thread.State;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Vector;
 import java.util.Map.Entry;
@@ -84,6 +85,7 @@ import javax.swing.event.ChangeListener;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
 import javax.swing.filechooser.FileNameExtensionFilter;
+import javax.swing.table.DefaultTableModel;
 //import javax.swing.table.DefaultTableModel;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParser;
@@ -104,13 +106,19 @@ import common.SpecConfigTTool;
 import myutil.GraphicLib;
 import myutil.ScrolledJTextArea;
 import myutil.TraceManager;
+import tmltranslator.TMLActivity;
 import tmltranslator.TMLMapping;
+import tmltranslator.TMLTask;
+import ui.CheckableLatency;
 import ui.ColorManager;
 import ui.SimulationTrace;
 import ui.TGComponent;
+import ui.TGTextFieldWithHelp;
 import ui.TMLComponentDesignPanel;
 import ui.interactivesimulation.SimulationTransaction;
 import ui.interactivesimulation.SimulationTransactionParser;
+import ui.tmlad.TMLADExecI;
+import ui.tmlad.TMLActivityDiagramPanel;
 
 /**
  * Class JFrameLatencyDetailedAnalysis: this class opens the frame showing the
@@ -129,9 +137,10 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
     private JTabbedPane commandTab, resultTab;/* , resultTabDetailed; */
     private JPanel loadxml, commands, jp01, jp02, /* activities, */ graphAnalysisResult, jp03, jp04, jp05, jp06, progressBarpanel, addRules; // ,graphAnalysisResultDetailed;
     private JButton buttonClose, buttonShowDGraph, buttonSaveDGraph, buttonBrowse, latencybutton, buttonCheckPath, addRulebutton, viewRulesbutton,
-            preciseAnalysisbutton;
+            preciseAnalysisbutton, showAllOp;
 
     private Vector<String> checkedTransactions = new Vector<String>();
+    private Vector<String> allTasks = new Vector<String>();
     private HashMap<String, Integer> checkedT = new HashMap<String, Integer>();
 
     private JTextField saveDirName;
@@ -144,6 +153,10 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
 
     private JComboBox<String> tasksDropDownCombo5 = new JComboBox<String>();
 
+    private JComboBox<String> tasksDropDownCombo6 = new JComboBox<String>();
+
+    private JComboBox<String> tasksDropDownCombo7 = new JComboBox<String>();
+
     private Vector<String> readChannelTransactions = new Vector<String>();
     private Vector<String> writeChannelTransactions = new Vector<String>();
 
@@ -165,23 +178,29 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
     private JTextField file1;
     private File file;
     private static Vector<SimulationTransaction> transFile1;
-
+    private JLabel task2,taskL;
     private DirectedGraphTranslator dgraph;
 
     private JScrollPane scrollPane11, scrollPane12;// , scrollPane13;
 
     private LatencyAnalysisParallelAlgorithms tc;
+    private Boolean allop = false;
+    private TMLMapping<TGComponent> tmap1;
+
+    public static final String[] helpStrings = { "considerrule.html", "taint.html", "addRule.html" };
 
     // @SuppressWarnings("deprecation")
 
     private JProgressBar pbar;
     private JFrameCompareLatencyDetail jframeCompareLatencyDetail;
     private JCheckBox taintFirstOp, considerRules;
+    protected TGTextFieldWithHelp checkRuleHelp, taintHelp, ruleHelp;
 
     public JFrameLatencyDetailedAnalysis(TMLMapping<TGComponent> tmap, List<TMLComponentDesignPanel> cpanels, SimulationTrace selectedST,
             LatencyAnalysisParallelAlgorithms tc1) {
         super("Precise Latency Analysis");
         initActions();
+        tmap1 = tmap;
         fillCheckedTrans(tmap);
         tc = tc1;
 
@@ -221,7 +240,7 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
 
         jp.add(buttonClose);
 
-        latencybutton.setEnabled(true);
+        latencybutton.setEnabled(false);
         buttonShowDGraph.setEnabled(false);
         preciseAnalysisbutton.setEnabled(false);
 
@@ -324,12 +343,23 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
         c01.weightx = 1.0;
         c01.gridwidth = 1;
         c01.gridx = 0;
-        c01.gridy = 1;
+        c01.gridy = 2;
         // c01.fill = GridBagConstraints.BOTH;
 
         JLabel tasksLabel = new JLabel("Study Latency Between ", JLabel.LEFT);
         loadxml.add(tasksLabel, c01);
 
+        c01.gridheight = 1;
+        c01.weighty = 1.0;
+        c01.weightx = 1.0;
+        c01.gridwidth = 1;
+        c01.gridx = 0;
+        c01.gridy = 1;
+        // c01.fill = GridBagConstraints.BOTH;
+
+        taskL = new JLabel("Select Task 1 ", JLabel.LEFT);
+        loadxml.add(taskL, c01);
+        
         file1 = new JTextField(40);
         file1.setMinimumSize(new Dimension(300, 30));
         file1.setText(selectedST.getFullPath());
@@ -350,6 +380,15 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
         c01.gridwidth = 1;
         c01.gridx = 1;
         c01.gridy = 1;
+        tasksDropDownCombo6 = new JComboBox<String>(checkedTransactions);
+        loadxml.add(tasksDropDownCombo6, c01);
+
+        c01.gridheight = 1;
+        c01.weighty = 1.0;
+        c01.weightx = 1.0;
+        c01.gridwidth = 1;
+        c01.gridx = 1;
+        c01.gridy =2;
         tasksDropDownCombo1 = new JComboBox<String>(checkedTransactions);
         loadxml.add(tasksDropDownCombo1, c01);
 
@@ -359,6 +398,16 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
         c01.gridwidth = 1;
         c01.gridx = 2;
         c01.gridy = 1;
+        task2 = new JLabel("And task 2 ", JLabel.LEFT);
+     
+        loadxml.add(task2, c01);
+
+        c01.gridheight = 1;
+        c01.weighty = 1.0;
+        c01.weightx = 0.2;
+        c01.gridwidth = 1;
+        c01.gridx = 2;
+        c01.gridy = 2;
         JLabel op2 = new JLabel("And ", JLabel.LEFT);
         loadxml.add(op2, c01);
 
@@ -367,12 +416,37 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
         c01.weightx = 1.0;
         c01.gridwidth = 1;
         c01.gridx = 4;
-        c01.gridy = 1;
+        c01.gridy = 2;
 
         tasksDropDownCombo2 = new JComboBox<String>(checkedTransactions);
 
         loadxml.add(tasksDropDownCombo2, c01);
 
+        c01.gridheight = 1;
+        c01.weighty = 1.0;
+        c01.weightx = 1.0;
+        c01.gridwidth = 1;
+        c01.gridx = 4;
+        c01.gridy = 1;
+
+        tasksDropDownCombo7 = new JComboBox<String>(checkedTransactions);
+
+        loadxml.add(tasksDropDownCombo7, c01);
+        
+        task2.setVisible(false);
+        taskL.setVisible(false);
+        tasksDropDownCombo6.setVisible(false);
+        tasksDropDownCombo7.setVisible(false);
+
+        c01.gridheight = 1;
+        c01.weighty = 1.0;
+        c01.weightx = 1.0;
+        c01.gridwidth = 1;
+        c01.gridx = 5;
+        c01.gridy = 2;
+
+        showAllOp = new JButton(actions[LatencyDetailedAnalysisActions.ACT_SHOW_ALL_OP]);
+        loadxml.add(showAllOp, c01);
         /*
          * c01.gridheight = 1; c01.weighty = 1.0; c01.weightx = 1.0; c01.gridwidth = 1;
          * c01.gridx = 0; c01.gridy = 3;
@@ -386,35 +460,57 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
         c01.weightx = 1.0;
         c01.gridwidth = 1;
         c01.gridx = 0;
-        c01.gridy = 3;
+        c01.gridy = 4;
 
         considerRules = new JCheckBox("Consider Rules");
+
         loadxml.add(considerRules, c01);
+        checkRuleHelp = new TGTextFieldWithHelp("", 0);
+        checkRuleHelp.setEditable(false);
+        // loadxml.add(sliceTime, c01);
+        c01.gridheight = 1;
+        c01.weighty = 1.0;
+        c01.weightx = 1.0;
+        c01.gridwidth = 1;
+        c01.gridx = 1;
+        c01.gridy = 4;
+        c01.anchor = GridBagConstraints.WEST;
+        checkRuleHelp.makeEndHelpButton(helpStrings[0], tc.getMainGUI(), tc.getMainGUI().getHelpManager(), loadxml, c01);
 
         c01.gridheight = 1;
         c01.weighty = 1.0;
         c01.weightx = 1.0;
         c01.gridwidth = 1;
         c01.gridx = 1;
-        c01.gridy = 3;
+        c01.gridy = 4;
+        c01.anchor = GridBagConstraints.EAST;
 
         taintFirstOp = new JCheckBox("Taint First Operator ");
         loadxml.add(taintFirstOp, c01);
 
+        taintHelp = new TGTextFieldWithHelp("", 0);
+        taintHelp.setEditable(false);
+        c01.gridheight = 1;
+        c01.weighty = 1.0;
+        c01.weightx = 1.0;
+        c01.gridwidth = 1;
+        c01.gridx = 2;
+        c01.gridy = 4;
+        c01.anchor = GridBagConstraints.WEST;
+        taintHelp.makeEndHelpButton(helpStrings[1], tc.getMainGUI(), tc.getMainGUI().getHelpManager(), loadxml, c01);
+
         c01.gridheight = 1;
         c01.weighty = 1.0;
         c01.weightx = 1.0;
         c01.gridwidth = 1;
         c01.gridx = 3;
-        c01.gridy = 3;
+        c01.gridy = 4;
 
         GridBagLayout gridbag05 = new GridBagLayout();
         GridBagConstraints c05 = new GridBagConstraints();
         // Save
         jp06 = new JPanel(gridbag05);
 
-        commandTab.addTab("Add Rules", null, jp06, "Add Rules");
-
         JLabel tasksRules = new JLabel("ADD Rule :  ", JLabel.LEFT);
 
         c01.gridheight = 1;
@@ -475,10 +571,26 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
         c01.weightx = 1.0;
         c01.gridwidth = 1;
         c01.gridx = 4;
-        c01.gridy = 1;
+        c01.gridy = 2;
 
         jp06.add(viewRulesbutton, c01);
 
+        c01.gridheight = 1;
+        c01.weighty = 1.0;
+        c01.weightx = 1.0;
+        c01.gridwidth = 1;
+        c01.gridx = 0;
+        c01.gridy = 0;
+
+        ruleHelp = new TGTextFieldWithHelp("", 0);
+        ruleHelp.setEditable(false);
+
+        c01.anchor = GridBagConstraints.EAST;
+        ruleHelp.makeEndHelpButton(helpStrings[2], tc.getMainGUI(), tc.getMainGUI().getHelpManager(), jp06, c01);
+
+        JScrollPane scrollPane = new JScrollPane(jp06);
+
+        commandTab.addTab("Add Rules", null, scrollPane, "Add Rules");
         GridBagLayout gridbag04 = new GridBagLayout();
         GridBagConstraints c04 = new GridBagConstraints();
         // Save
@@ -528,7 +640,7 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
         c04.weighty = 1.0;
         c04.weightx = 1.0;
         c04.gridx = 0;
-        c04.gridy = 1;
+        c04.gridy = 2;
         c04.gridwidth = GridBagConstraints.REMAINDER; // end row
         c04.fill = GridBagConstraints.HORIZONTAL;
         c04.gridheight = 1;
@@ -551,8 +663,16 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
         dataDetailedByTask = new Object[0][0];
 
         jp03 = new JPanel(new BorderLayout());
+        DefaultTableModel tableModel = new DefaultTableModel(dataDetailedByTask, columnNames) {
+
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+        };
+
+        table11 = new JTable(tableModel);
 
-        table11 = new JTable(dataDetailedByTask, columnNames);
         scrollPane11 = new JScrollPane(table11, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
         scrollPane11.setVisible(true);
         jp03.add(scrollPane11, BorderLayout.CENTER);
@@ -566,7 +686,16 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
         dataDetailedMinMax = new Object[0][0];
 
         jp04 = new JPanel(new BorderLayout());
-        table12 = new JTable(dataDetailedMinMax, columnMinMaxNames);
+
+        DefaultTableModel tableModel2 = new DefaultTableModel(dataDetailedMinMax, columnMinMaxNames) {
+
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+        };
+
+        table12 = new JTable(tableModel2);
         scrollPane12 = new JScrollPane(table12, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
         scrollPane12.setVisible(true);
         jp04.add(scrollPane12, BorderLayout.CENTER);
@@ -645,12 +774,17 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
             tasksDropDownCombo3.setModel(aModel);
             tasksDropDownCombo4.setModel(aModel1);
 
+            if (pbar.getValue() == pbar.getMaximum()) {
+                updateBar(0);
+
+            }
+            latencybutton.setEnabled(true);
             this.pack();
             this.revalidate();
             this.repaint();
 
         } catch (Exception e) {
-            jta.append("An Error has Accord \n");
+            jta.append("An error has occurred \n");
             jta.append(e.getMessage() + "\n");
             // buttonSaveDGraph.setEnabled(false);
             buttonShowDGraph.setEnabled(false);
@@ -668,7 +802,7 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
 
     }
 
-    @SuppressWarnings({ "unchecked", "rawtypes" })
+    @SuppressWarnings({ "unchecked", "rawtypes", "deprecation" })
     @Override
     public void actionPerformed(ActionEvent evt) {
         String command = evt.getActionCommand();
@@ -697,10 +831,10 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
                 }
 
             } catch (ExportException e) {
-                jta.append("An Error has Accord \n");
+                jta.append("An error has occurred \n");
                 jta.append(e.getMessage() + "\n");
             } catch (IOException e) {
-                jta.append("An Error has Accord \n");
+                jta.append("An error has occurred \n");
                 jta.append(e.getMessage() + "\n");
             }
 
@@ -728,10 +862,10 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
                 }
 
             } catch (ExportException e) {
-                jta.append("An Error has Accord \n");
+                jta.append("An error has occurred \n");
                 jta.append(e.getMessage() + "\n");
             } catch (IOException e) {
-                jta.append("An Error has Accord \n");
+                jta.append("An error has occurred \n");
                 jta.append(e.getMessage() + "\n");
             }
 
@@ -748,6 +882,11 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
         } else if (command.equals(actions[LatencyDetailedAnalysisActions.ACT_LATENCY].getActionCommand())) {
             jta.append("the Latency Between: \n " + tasksDropDownCombo1.getSelectedItem() + " and \n" + tasksDropDownCombo2.getSelectedItem()
                     + " is studied \n");
+            latencybutton.setEnabled(false);
+
+            this.pack();
+            this.revalidate();
+            this.repaint();
 
             if (taintFirstOp.isSelected()) {
                 jta.append("operator 1 is tainted \n ");
@@ -840,15 +979,193 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
             new JFrameListOfRules(dgraph);
         } else if (command.equals(actions[LatencyDetailedAnalysisActions.ACT_LATENCY_PRECISE_ANALYSIS].getActionCommand())) {
 
-            int row1 = table11.getSelectedRow();
-            tc.setjFrameLDA(this);
-            tc.setRow(row1);
-            tc.start(11);
-            tc.run();
-            // tc.getT().join();
+            int row1 = 0;
+            String noLatValue = null;
+            int selectedIndex = resultTab.getSelectedIndex();
+            if (selectedIndex == 0) {
+                row1 = table11.getSelectedRow();
+                if (row1 > -1) {
+                    noLatValue = table11.getValueAt(row1, 4).toString();
+                } else {
+                    jta.append("Please select a row before precise analysis" + " \n");
+
+                }
+
+            } else if (selectedIndex == 1) {
+                row1 = table12.getSelectedRow();
+                if (row1 > -1) {
+
+                    noLatValue = table12.getValueAt(row1, 4).toString();
+                } else {
+                    jta.append("Please select a row before precise analysis" + " \n");
+
+                }
+
+            }
+
+            if (noLatValue.startsWith("Assumption Does Not Hold;")) {
+                jta.append("Can not run latency when the one-to-one assumption does not hold" + " \n");
+
+            } else {
+                tc.setjFrameLDA(this);
+                tc.setRow(row1);
+                tc.start(11);
+                tc.run();
+                // tc.getT().join();
+            }
+        } else if (command.equals(actions[LatencyDetailedAnalysisActions.ACT_SHOW_ALL_OP].getActionCommand())) {
+
+            if (!allop) {
+
+                
+                for (TMLTask tmltask : tmap1.getTMLModeling().getTasks()) {
+                    
+                    allTasks.add(tmltask.getName());
+
+          }
+
+              
+                ComboBoxModel<String> taskModel = new DefaultComboBoxModel<String>(allTasks);
+              
+                tasksDropDownCombo6.setModel(taskModel);
+                tasksDropDownCombo6.addActionListener( actions[LatencyDetailedAnalysisActions.ACT_LOAD_ALL_OP] );
+                ComboBoxModel<String> taskModel2 = new DefaultComboBoxModel<String>(allTasks);
+                tasksDropDownCombo7.setModel(taskModel2);
+              
+                ComboBoxModel<String> aModel1 = new DefaultComboBoxModel<String>(checkedTransactions);
+
+               
+                tasksDropDownCombo2.setModel(aModel1);
+
+                allop = true;
+                showAllOp.setLabel("Show checkpoints operators");
+                jta.append("show latency checkpoints operators" + " \n");
+
+                task2.setVisible(true);
+                taskL.setVisible(true);
+                tasksDropDownCombo6.setVisible(true);
+                tasksDropDownCombo7.setVisible(true);
+                this.pack();
+                this.revalidate();
+                this.repaint();
+
+            } else {
+                checkedTransactions = new Vector<String>();
+                checkedT = new HashMap<String, Integer>();
+                fillCheckedTrans(tmap1);
+                ComboBoxModel<String> aModel = new DefaultComboBoxModel<String>(checkedTransactions);
+                ComboBoxModel<String> aModel1 = new DefaultComboBoxModel<String>(checkedTransactions);
+
+                tasksDropDownCombo1.setModel(aModel);
+
+                tasksDropDownCombo2.setModel(aModel1);
+                task2.setVisible(false);
+                taskL.setVisible(false);
+                tasksDropDownCombo6.setVisible(false);
+                tasksDropDownCombo7.setVisible(false);
+
+                this.pack();
+                this.revalidate();
+                this.repaint();
+
+                allop = false;
+                showAllOp.setLabel("Show all operators");
+                jta.append("show latency all operators" + " \n");
+
+            }
+
+        }else if (command.equals(actions[LatencyDetailedAnalysisActions.ACT_LOAD_ALL_OP].getActionCommand())) {
+            
+            for (TMLTask tmltask : tmap1.getTMLModeling().getTasks()) {
+                
+                TMLActivity activity;
+                checkedTransactions = new Vector<String>();
+                allTasks = new Vector<String>();
+                checkedT = new HashMap<String, Integer>();
+             
+                int opCount = 0;
+                
+                if (tmltask.equals(tasksDropDownCombo6.getSelectedItem()))
+                {
+                    activity = tmltask.getActivityDiagram();
+
+                    activity = tmltask.getActivityDiagram();
+                    TMLActivityDiagramPanel tadp = (TMLActivityDiagramPanel) (activity.getReferenceObject());
+                    List<TGComponent> list = tadp.getComponentList();
+                    Iterator<TGComponent> iterator = list.listIterator();
+                    TGComponent tgc;
+                    opCount = 0;
+
+                    iterator = list.listIterator();
+                    while (iterator.hasNext()) {
+                        tgc = iterator.next();
+                        String compName = "";
+                        if (tgc.isEnabled()) {
+                            if (tgc instanceof CheckableLatency) {
+
+                                compName = tmltask.getName() + ":" + tgc.getName();
+                                compName = compName.replaceAll(" ", "");
+
+                                if (tgc.getValue().contains("(")) {
+                                    compName = compName + ":" + tgc.getValue().split("\\(")[0];
+                                } else {
+                                    if (tgc instanceof TMLADExecI) {
+                                        compName = ((TMLADExecI) tgc).getDelayValue();
+                                    }
+                                }
+                                checkedT.put(compName + "__" + tgc.getDIPLOID(), tgc.getDIPLOID());
+
+                            }
+                        }
+
+                    }
+                    
+                }
+           
+                
+           
+            }
+            for (Entry<String, Integer> cT : checkedT.entrySet()) {
+
+                String name = cT.getKey();
+                int id = cT.getValue();
+
+                if (!checkedTransactions.contains(name)) {
+                    if (checkedTransactions.size() > 0) {
+                        Boolean inserted = false;
+
+                        for (int j = 0; j < checkedTransactions.size(); j++) {
+
+                            if (id < checkedT.get(checkedTransactions.get(j)) && !checkedTransactions.contains(name))
+
+                            {
+                                checkedTransactions.insertElementAt(name, j);
+                                inserted = true;
+
+                            }
+
+                        }
+
+                        if (!inserted) {
+                            checkedTransactions.insertElementAt(name, checkedTransactions.size());
+                        }
+                    } else {
+                        checkedTransactions.add(name);
+
+                    }
+
+                }
+
+            }
+            
+            ComboBoxModel<String> aModel = new DefaultComboBoxModel<String>(checkedTransactions);
+            tasksDropDownCombo1.setModel(aModel);
+
 
         }
 
+        
+        
     }
 
     protected void preciselatencyAnalysis(int row1) throws InterruptedException {
@@ -862,10 +1179,11 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
             row = table11.getSelectedRow();
 
             if (row >= 0) {
+
                 try {
-                    new JFrameLatencyDetailedPopup(dgraph, row, false, taint, tc);
+                    new JFrameLatencyDetailedPopup(dgraph, row, true, taint, tc);
                 } catch (Exception e) {
-                    jta.append("An Error has Accord \n");
+                    jta.append("An error has occurred \n");
                     jta.append(e.getMessage() + "\n");
                 }
             } else {
@@ -878,7 +1196,7 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
                 try {
                     new JFrameLatencyDetailedPopup(dgraph, row, false, taint, tc);
                 } catch (Exception e) {
-                    jta.append("An Error has Accord \n");
+                    jta.append("An error has occurred \n");
                     jta.append(e.getMessage() + "\n");
                 }
             } else {
@@ -912,6 +1230,7 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
 
     protected void latencyDetailedAnalysis() {
         try {
+            preciseAnalysisbutton.setEnabled(false);
             String task1 = tasksDropDownCombo1.getSelectedItem().toString();
             String task2 = tasksDropDownCombo2.getSelectedItem().toString();
 
@@ -923,11 +1242,23 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
 
             table11.removeAll();
 
-            table11 = new JTable(tableData, columnNames);
+            DefaultTableModel tableModel = new DefaultTableModel(tableData, columnNames) {
+
+                @Override
+                public boolean isCellEditable(int row, int column) {
+                    return false;
+                }
+            };
+
+            table11 = new JTable(tableModel);
 
             table11.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
-            preciseAnalysisbutton.setEnabled(true);
+            table11.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
+                public void valueChanged(ListSelectionEvent e) {
+                    preciseAnalysisbutton.setEnabled(true);
+                }
+            });
 
             Object[][] tableData2 = null;
 
@@ -937,18 +1268,46 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
 
                 table12.removeAll();
 
-                table12 = new JTable(tableData2, columnMinMaxNames);
+                DefaultTableModel tableModel2 = new DefaultTableModel(tableData2, columnMinMaxNames) {
+
+                    @Override
+                    public boolean isCellEditable(int row, int column) {
+                        return false;
+                    }
+                };
+
+                table12 = new JTable(tableModel2);
 
                 table12.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+                table12.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
+                    public void valueChanged(ListSelectionEvent e) {
+                        preciseAnalysisbutton.setEnabled(true);
+                    }
+                });
 
             } else {
                 tableData2 = dgraph.latencyMinMaxAnalysis(task1, task2, transFile1);
 
                 table12.removeAll();
 
-                table12 = new JTable(tableData2, columnMinMaxNames);
+                DefaultTableModel tableModel2 = new DefaultTableModel(tableData2, columnMinMaxNames) {
+
+                    @Override
+                    public boolean isCellEditable(int row, int column) {
+                        return false;
+                    }
+                };
+
+                table12 = new JTable(tableModel2);
+
+                // table12 = new JTable(tableData2, columnMinMaxNames);
 
                 table12.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+                table12.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
+                    public void valueChanged(ListSelectionEvent e) {
+                        preciseAnalysisbutton.setEnabled(true);
+                    }
+                });
 
             }
 
@@ -969,13 +1328,16 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
             scrollPane11.repaint();
 
             // scrollPane11.setVisible(true);
+            jta.append("Latency has been computed...Please refer to the tables in the Latency Analysis section for the results \n");
 
+            latencybutton.setEnabled(true);
             this.pack();
             this.setVisible(true);
 
         } catch (Exception e) {
-            jta.append("An Error has Accord \n");
+            jta.append("An error has occurred \n");
             jta.append(e.getMessage() + "\n");
+            latencybutton.setEnabled(true);
         }
 
     }
@@ -991,7 +1353,7 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
             jta.append("Refer to the generatd dialog to view the graph.\n");
 
         } catch (Exception e) {
-            jta.append("An Error has Accord \n");
+            jta.append("An error has occurred \n");
             jta.append(e.getMessage() + "\n");
         }
 
diff --git a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedPopup.java b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedPopup.java
index 544b055f0fa5e64af076d31866aa47302fae40a7..797aa43fda13752599e5f49af1562582d694a8f5 100644
--- a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedPopup.java
+++ b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedPopup.java
@@ -135,6 +135,12 @@ public class JFrameLatencyDetailedPopup extends JFrame implements TableModelList
         }
 
         DefaultTableModel model = new DefaultTableModel(dataDetailedByTask, columnByTaskNames) {
+
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+
             @Override
             public Class getColumnClass(int column) {
                 switch (column) {
@@ -205,6 +211,12 @@ public class JFrameLatencyDetailedPopup extends JFrame implements TableModelList
         }
 
         DefaultTableModel model2 = new DefaultTableModel(dataHWDelayByTask, columnByHWNames) {
+
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+
             @Override
             public Class getColumnClass(int column) {
                 switch (column) {
@@ -281,7 +293,12 @@ public class JFrameLatencyDetailedPopup extends JFrame implements TableModelList
 
             }
 
-            int timeInterval = (maxTime - minTime);
+            int timeInterval=0;
+            if (maxTime>-1 && minTime<Integer.MAX_VALUE )
+            {
+                timeInterval = (maxTime - minTime);
+            } 
+            
             columnNames = new String[timeInterval + 1];
 
             columnNames[0] = "Device Name";
@@ -471,7 +488,13 @@ public class JFrameLatencyDetailedPopup extends JFrame implements TableModelList
                 }
             }
 
-            int timeInterval = (maxTime - minTime);
+            int timeInterval=0;
+            if (maxTime>-1 && minTime<Integer.MAX_VALUE )
+            {
+                timeInterval = (maxTime - minTime);
+            } 
+            
+             
             columnNames = new String[timeInterval + 1];
 
             columnNames[0] = "Device Name";
@@ -566,7 +589,16 @@ public class JFrameLatencyDetailedPopup extends JFrame implements TableModelList
 
         }
 
-        JTable table = new JTable(dataDetailedByTask, columnNames);
+        DefaultTableModel model3 = new DefaultTableModel(dataDetailedByTask, columnNames) {
+
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+
+        };
+
+        JTable table = new JTable(model3);
         table.setFillsViewportHeight(true);
 
         table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
diff --git a/src/main/java/ui/simulationtraceanalysis/LatencyAnalysisParallelAlgorithms.java b/src/main/java/ui/simulationtraceanalysis/LatencyAnalysisParallelAlgorithms.java
index b055432c477b0d14a9971c3ff549f19eeb8c691d..fa20111df6ee4d0cc8f19b8f75ea734aee12e173 100644
--- a/src/main/java/ui/simulationtraceanalysis/LatencyAnalysisParallelAlgorithms.java
+++ b/src/main/java/ui/simulationtraceanalysis/LatencyAnalysisParallelAlgorithms.java
@@ -33,6 +33,8 @@ public class LatencyAnalysisParallelAlgorithms implements Runnable {
     private latencyDetailedAnalysisMain main;
 
     private MainGUI mainGUI;
+    
+
     private SimulationTrace selectedST;
     private boolean b;
     private boolean compare;
@@ -267,4 +269,7 @@ public class LatencyAnalysisParallelAlgorithms implements Runnable {
         selectedIndex = selectedIndex1;
 
     }
+    public MainGUI getMainGUI() {
+        return mainGUI;
+    }
 }
diff --git a/src/main/java/ui/simulationtraceanalysis/LatencyDetailedAnalysisActions.java b/src/main/java/ui/simulationtraceanalysis/LatencyDetailedAnalysisActions.java
index e6f5c6ea0007960fa701fce57a1af4aa358d4306..9a120b4e8b3460e2ba489d118c2893481880b214 100644
--- a/src/main/java/ui/simulationtraceanalysis/LatencyDetailedAnalysisActions.java
+++ b/src/main/java/ui/simulationtraceanalysis/LatencyDetailedAnalysisActions.java
@@ -80,7 +80,10 @@ public class LatencyDetailedAnalysisActions extends AbstractAction {
     public static final int ACT_DELETE_SELECTED_RULE = 14;
     public static final int ACT_DELETE_ALL_RULE = 15;
     public static final int ACT_LATENCY_PRECISE_ANALYSIS = 16;
-    public static final int NB_ACTION = 17;
+    public static final int ACT_SHOW_ALL_OP = 17;
+    public static final int ACT_LOAD_ALL_OP = 18;
+    
+    public static final int NB_ACTION = 19;
 
     private static final TAction[] actions = new TAction[NB_ACTION];
 
@@ -160,7 +163,15 @@ public class LatencyDetailedAnalysisActions extends AbstractAction {
 
         actions[ACT_DELETE_ALL_RULE] = new TAction("delete_all_rules", "Delete All Rules", IconManager.imgic53, IconManager.imgic53,
                 "Delete All Rules", "Delete All Rules", 'C');
-
+        actions[ACT_SHOW_ALL_OP] = new TAction("show-operators", "Show All Operators", IconManager.imgic29, IconManager.imgic29,
+                "Show All Operators", "Show All Operators", 'T');
+        actions[ACT_LOAD_ALL_OP] = new TAction("load-operators", "Load Task Operators", IconManager.imgic29, IconManager.imgic29,
+                "Load Task Operators", "Load Task Operators", 'T');
+
+        
+        
+        
+        
     }
 
     public String getActionCommand() {
diff --git a/src/main/java/ui/simulationtraceanalysis/SaveGraphToolBar.java b/src/main/java/ui/simulationtraceanalysis/SaveGraphToolBar.java
index dca7324a4ce69674dfad8345b56daa593c137d87..48a658c4e1350c589411589bef7144979191c879 100644
--- a/src/main/java/ui/simulationtraceanalysis/SaveGraphToolBar.java
+++ b/src/main/java/ui/simulationtraceanalysis/SaveGraphToolBar.java
@@ -56,7 +56,7 @@ public class SaveGraphToolBar extends LatencyDetailedAnalysisBar {
     protected void setActive(boolean b) {
         getLatencyDetailedAnalysisF().getActions()[LatencyDetailedAnalysisActions.ACT_SAVE_TRACE_PNG].setEnabled(b);
         getLatencyDetailedAnalysisF().getActions()[LatencyDetailedAnalysisActions.ACT_SAVE_TRACE_GRAPHML].setEnabled(b);
-        getLatencyDetailedAnalysisF().getActions()[LatencyDetailedAnalysisActions.ACT_Import_ANALYSIS].setEnabled(b);
+      //  getLatencyDetailedAnalysisF().getActions()[LatencyDetailedAnalysisActions.ACT_Import_ANALYSIS].setEnabled(b);
 
     }
 
@@ -71,7 +71,7 @@ public class SaveGraphToolBar extends LatencyDetailedAnalysisBar {
         button = this.add(getLatencyDetailedAnalysisF().getActions()[LatencyDetailedAnalysisActions.ACT_SAVE_TRACE_GRAPHML]);
         this.addSeparator();
 
-        button = this.add(getLatencyDetailedAnalysisF().getActions()[LatencyDetailedAnalysisActions.ACT_Import_ANALYSIS]);
+      //  button = this.add(getLatencyDetailedAnalysisF().getActions()[LatencyDetailedAnalysisActions.ACT_Import_ANALYSIS]);
 
     }
 
diff --git a/src/main/java/ui/simulationtraceanalysis/latencyDetailedAnalysisMain.java b/src/main/java/ui/simulationtraceanalysis/latencyDetailedAnalysisMain.java
index 105fb2b4989055088210b363844f66fa06e3bacd..d2ffc5e291104580473094495251f73c213a6a63 100644
--- a/src/main/java/ui/simulationtraceanalysis/latencyDetailedAnalysisMain.java
+++ b/src/main/java/ui/simulationtraceanalysis/latencyDetailedAnalysisMain.java
@@ -57,27 +57,31 @@ public class latencyDetailedAnalysisMain {
 
     public latencyDetailedAnalysisMain(int callerId, MainGUI mainGUI, SimulationTrace selectedST, boolean b, boolean compare, int j)
             throws InterruptedException {
+        try {
+            setTc(new LatencyAnalysisParallelAlgorithms(this));
 
-        setTc(new LatencyAnalysisParallelAlgorithms(this));
-
-        if (callerId == 2) {
+            if (callerId == 2) {
 
-            tc.setMainGUI(mainGUI);
-            tc.setSelectedST(selectedST);
-            tc.setB(b);
-            tc.setJ(j);
-            tc.setCompare(compare);
-            tc.start(8);
+                tc.setMainGUI(mainGUI);
+                tc.setSelectedST(selectedST);
+                tc.setB(b);
+                tc.setJ(j);
+                tc.setCompare(compare);
+                tc.start(8);
 
-        } else if (callerId == 1) {
+            } else if (callerId == 1) {
 
-            tc.setMainGUI(mainGUI);
-            tc.setSelectedST(selectedST);
-            tc.setB(b);
-            tc.setJ(j);
-            tc.setCompare(compare);
-            tc.start(9);
+                tc.setMainGUI(mainGUI);
+                tc.setSelectedST(selectedST);
+                tc.setB(b);
+                tc.setJ(j);
+                tc.setCompare(compare);
+                tc.start(9);
 
+            }
+        } catch (Exception e1) {
+            // TODO Auto-generated catch block
+            TraceManager.addDev("Error: " + e1.getMessage());
         }
 
     }
@@ -128,6 +132,7 @@ public class latencyDetailedAnalysisMain {
                                 }
                             } catch (Exception e) {
                                 // Just in case the mentionned panel is not a TML design Panel
+                                TraceManager.addDev("Error: " + e.getMessage());
                             }
 
                         }
@@ -273,16 +278,20 @@ public class latencyDetailedAnalysisMain {
 
         } catch (XPathExpressionException e1) {
             // TODO Auto-generated catch block
-            e1.printStackTrace();
+
+            TraceManager.addDev("Error: " + e1.getMessage());
         } catch (ParserConfigurationException e1) {
             // TODO Auto-generated catch block
-            e1.printStackTrace();
+            // e1.printStackTrace();
+            TraceManager.addDev("Error: " + e1.getMessage());
         } catch (SAXException e1) {
             // TODO Auto-generated catch block
-            e1.printStackTrace();
+            // e1.printStackTrace();
+            TraceManager.addDev("Error: " + e1.getMessage());
         } catch (IOException e1) {
             // TODO Auto-generated catch block
-            e1.printStackTrace();
+            // e1.printStackTrace();
+            TraceManager.addDev("Error: " + e1.getMessage());
         }
 
         cld = new JFrameCompareLatencyDetail(this, mainGUI, checkedTransactionsFile1, map1, cpanels1, selectedST, true, tc);
@@ -291,93 +300,71 @@ public class latencyDetailedAnalysisMain {
 
     public void latencyDetailedAnalysisForXML(MainGUI mainGUI, SimulationTrace selectedST, boolean b, boolean compare, int j)
             throws ParserConfigurationException, SAXException, IOException, XPathExpressionException {
-        String xml = ""; // Populated XML String....
-
-        DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
-
-        DocumentBuilder builder = domFactory.newDocumentBuilder();
-        Document dDoc = builder.parse(selectedST.getFullPath());
 
-        XPath xPath = XPathFactory.newInstance().newXPath();
+        try {
+            String xml = ""; // Populated XML String....
 
-        String modelNode = (String) xPath.evaluate("/siminfo/global/model", dDoc, XPathConstants.STRING);
-        TURTLEPanel panel = null;
-        Vector<TURTLEPanel> allTabs = new Vector<TURTLEPanel>();
+            DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
 
-        if (j == 1) {
-            mainGUI_compare = mainGUI;
+            DocumentBuilder builder = domFactory.newDocumentBuilder();
+            Document dDoc = builder.parse(selectedST.getFullPath());
 
-        } else if (j == 2) {
-            String fileName = null;
+            XPath xPath = XPathFactory.newInstance().newXPath();
 
-            Document dDoc1 = null;
+            String modelNode = (String) xPath.evaluate("/siminfo/global/model", dDoc, XPathConstants.STRING);
+            TURTLEPanel panel = null;
+            Vector<TURTLEPanel> allTabs = new Vector<TURTLEPanel>();
 
-            if (modelNode.contains("DIPLODOCUS architecture and mapping Diagram")) {
+            if (j == 1) {
+                mainGUI_compare = mainGUI;
 
-                fileName = modelNode.replace(" / DIPLODOCUS architecture and mapping Diagram", "");
-            }
+            } else if (j == 2) {
+                String fileName = null;
 
-            if (modelNode.contains("TML Component Task Diagram")) {
+                Document dDoc1 = null;
 
-                fileName = modelNode.replace(" / TML Component Task Diagram", "");
-            }
+                if (modelNode.contains("DIPLODOCUS architecture and mapping Diagram")) {
 
-            try {
-                mainGUI_compare = null;
-                mainGUI_compare = new MainGUI(false, false, false, false, false, false, false, false, false, false, true, false, false);
-                mainGUI_compare.build();
-
-                mainGUI_compare.openProjectFromFile(new File(fileName));
-
-                mainGUI_compare.frame.setVisible(false);
-                mainGUI_compare2 = mainGUI_compare;
+                    fileName = modelNode.replace(" / DIPLODOCUS architecture and mapping Diagram", "");
+                }
 
-            } catch (Exception e1) {
-                // TODO Auto-generated catch block
-                e1.printStackTrace();
-            }
-        }
+                if (modelNode.contains("TML Component Task Diagram")) {
 
-        if (modelNode.contains("DIPLODOCUS architecture and mapping Diagram")) {
+                    fileName = modelNode.replace(" / TML Component Task Diagram", "");
+                }
 
-            for (int i = 0; i < mainGUI_compare.tabs.size(); i++) {
+                try {
+                    mainGUI_compare = null;
+                    mainGUI_compare = new MainGUI(false, false, false, false, false, false, false, false, false, false, true, false, false);
+                    mainGUI_compare.build();
 
-                if (mainGUI_compare.tabs.get(i) instanceof TMLArchiPanel) {
+                    mainGUI_compare.openProjectFromFile(new File(fileName));
 
-                    allTabs.add(mainGUI_compare.tabs.get(i));
+                    mainGUI_compare.frame.setVisible(false);
+                    mainGUI_compare2 = mainGUI_compare;
 
+                } catch (Exception e1) {
+                    // TODO Auto-generated catch block
+                    //e1.printStackTrace();
+                    TraceManager.addDev("Error: " + e1.getMessage());
                 }
-
             }
 
-            if (allTabs.size() == 1) {
-                mainGUI_compare.checkModelingSyntax(allTabs.get(0), true);
-                TURTLEPanel selectedTab = allTabs.get(0);
-
-                if (compare) {
-
-                    latencyDetailedAnalysis(selectedST, selectedTab, b, true, mainGUI_compare);
-
-                } else {
-                    latencyDetailedAnalysis(selectedST, selectedTab, b, false, mainGUI_compare);
+            if (modelNode.contains("DIPLODOCUS architecture and mapping Diagram")) {
 
-                }
+                for (int i = 0; i < mainGUI_compare.tabs.size(); i++) {
 
-                mainGUI_compare.setMode(mainGUI_compare.MODEL_CHANGED);
+                    if (mainGUI_compare.tabs.get(i) instanceof TMLArchiPanel) {
 
-            } else if (allTabs.size() > 1) {
+                        allTabs.add(mainGUI_compare.tabs.get(i));
 
-                JDialogToChosePanel jdmc = new JDialogToChosePanel(mainGUI_compare.frame, allTabs, "Choosing panel to validate");
-                // if (b) {
-                GraphicLib.centerOnParent(jdmc);
-                jdmc.setVisible(true); // blocked until dialog has been closed
+                    }
 
-                // }
-                mainGUI_compare.setMode(mainGUI_compare.MODEL_CHANGED);
-                TURTLEPanel selectedTab = jdmc.getSelectedTab();
-                if (selectedTab != null) {
+                }
 
-                    mainGUI_compare.checkModelingSyntax(selectedTab, true);
+                if (allTabs.size() == 1) {
+                    mainGUI_compare.checkModelingSyntax(allTabs.get(0), true);
+                    TURTLEPanel selectedTab = allTabs.get(0);
 
                     if (compare) {
 
@@ -385,51 +372,52 @@ public class latencyDetailedAnalysisMain {
 
                     } else {
                         latencyDetailedAnalysis(selectedST, selectedTab, b, false, mainGUI_compare);
+
                     }
-                    mainGUI_compare.setMode(mainGUI_compare.MODEL_CHANGED);
 
-                }
-            }
+                    mainGUI_compare.setMode(mainGUI_compare.MODEL_CHANGED);
 
-        } else if (modelNode.contains("TML Component Task Diagram")) {
+                } else if (allTabs.size() > 1) {
 
-            for (int i = 0; i < mainGUI_compare.tabs.size(); i++) {
-                panel = mainGUI_compare.tabs.get(i);
+                    JDialogToChosePanel jdmc = new JDialogToChosePanel(mainGUI_compare.frame, allTabs, "Choosing panel to validate");
+                    // if (b) {
+                    GraphicLib.centerOnParent(jdmc);
+                    jdmc.setVisible(true); // blocked until dialog has been closed
 
-                if (mainGUI_compare.tabs.get(i) instanceof TMLComponentDesignPanel) {
-                    allTabs.add(mainGUI_compare.tabs.get(i));
-                }
+                    // }
+                    mainGUI_compare.setMode(mainGUI_compare.MODEL_CHANGED);
+                    TURTLEPanel selectedTab = jdmc.getSelectedTab();
+                    if (selectedTab != null) {
 
-            }
+                        mainGUI_compare.checkModelingSyntax(selectedTab, true);
 
-            if (allTabs.size() == 1) {
-                mainGUI_compare.checkModelingSyntax(allTabs.get(0), true);
+                        if (compare) {
 
-                TURTLEPanel selectedTab = allTabs.get(0);
-                if (compare) {
+                            latencyDetailedAnalysis(selectedST, selectedTab, b, true, mainGUI_compare);
 
-                    latencyDetailedAnalysis(selectedST, selectedTab, b, true, mainGUI_compare);
+                        } else {
+                            latencyDetailedAnalysis(selectedST, selectedTab, b, false, mainGUI_compare);
+                        }
+                        mainGUI_compare.setMode(mainGUI_compare.MODEL_CHANGED);
 
-                } else {
-                    latencyDetailedAnalysis(selectedST, selectedTab, b, false, mainGUI_compare);
+                    }
                 }
-                mainGUI_compare.setMode(mainGUI_compare.MODEL_CHANGED);
 
-            } else if (allTabs.size() > 1) {
+            } else if (modelNode.contains("TML Component Task Diagram")) {
 
-                JDialogToChosePanel jdmc = new JDialogToChosePanel(mainGUI_compare.frame, allTabs, "Choosing panel to validate");
+                for (int i = 0; i < mainGUI_compare.tabs.size(); i++) {
+                    panel = mainGUI_compare.tabs.get(i);
 
-                // if (b) {
-                GraphicLib.centerOnParent(jdmc);
-                jdmc.setVisible(true); // blocked until dialog has been closed
+                    if (mainGUI_compare.tabs.get(i) instanceof TMLComponentDesignPanel) {
+                        allTabs.add(mainGUI_compare.tabs.get(i));
+                    }
 
-                // }
+                }
 
-                mainGUI_compare.setMode(mainGUI_compare.MODEL_CHANGED);
-                TURTLEPanel selectedTab = jdmc.getSelectedTab();
-                if (selectedTab != null) {
+                if (allTabs.size() == 1) {
+                    mainGUI_compare.checkModelingSyntax(allTabs.get(0), true);
 
-                    mainGUI_compare.checkModelingSyntax(selectedTab, true);
+                    TURTLEPanel selectedTab = allTabs.get(0);
                     if (compare) {
 
                         latencyDetailedAnalysis(selectedST, selectedTab, b, true, mainGUI_compare);
@@ -439,11 +427,39 @@ public class latencyDetailedAnalysisMain {
                     }
                     mainGUI_compare.setMode(mainGUI_compare.MODEL_CHANGED);
 
+                } else if (allTabs.size() > 1) {
+
+                    JDialogToChosePanel jdmc = new JDialogToChosePanel(mainGUI_compare.frame, allTabs, "Choosing panel to validate");
+
+                    // if (b) {
+                    GraphicLib.centerOnParent(jdmc);
+                    jdmc.setVisible(true); // blocked until dialog has been closed
+
+                    // }
+
+                    mainGUI_compare.setMode(mainGUI_compare.MODEL_CHANGED);
+                    TURTLEPanel selectedTab = jdmc.getSelectedTab();
+                    if (selectedTab != null) {
+
+                        mainGUI_compare.checkModelingSyntax(selectedTab, true);
+                        if (compare) {
+
+                            latencyDetailedAnalysis(selectedST, selectedTab, b, true, mainGUI_compare);
+
+                        } else {
+                            latencyDetailedAnalysis(selectedST, selectedTab, b, false, mainGUI_compare);
+                        }
+                        mainGUI_compare.setMode(mainGUI_compare.MODEL_CHANGED);
+
+                    }
                 }
-            }
 
+            }
+        } catch (Exception e1) {
+            // TODO Auto-generated catch block
+            // e1.printStackTrace();
+            TraceManager.addDev("Error: " + e1.getMessage());
         }
-
     }
 
     public Vector<String> getCheckedTransactionsFile() {
diff --git a/src/main/java/ui/simulationtraceanalysis/vertex.java b/src/main/java/ui/simulationtraceanalysis/vertex.java
index 6c825928a2855fdcd885d46680eba0a015f908fa..6d15ead9a1746d3e83ee60a1b218301d76fdecd0 100644
--- a/src/main/java/ui/simulationtraceanalysis/vertex.java
+++ b/src/main/java/ui/simulationtraceanalysis/vertex.java
@@ -17,6 +17,7 @@ public class vertex {
     protected static final int TYPE_UNORDER_SEQ = 8;
     protected static final int TYPE_TRANSACTION = 9;
     protected static final int TYPE_CTRL = 10;
+    protected static final int TYPE_SELECT_EVT = 11;
 
     private String name;
     private int id; // identifier