diff --git a/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp b/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp
index e7a1fe8fb352ebedb2d10d2758afdba1b91a39d4..4217eeb0e363034dcea3a13a1e0ced5f3da243ed 100644
--- a/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp
+++ b/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp
@@ -438,7 +438,7 @@ int MultiCoreCPU::allTrans2XML(std::ostringstream& glob, int maxNbOfTrans) const
   int total = 0;
   for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){
     if (cpt >= begining) {
-      (*i)->toXML(glob, 1, _name);
+      (*i)->toXML(glob, 0, _name);
       total ++;
     }
     cpt ++;
@@ -451,7 +451,7 @@ void MultiCoreCPU::latencies2XML(std::ostringstream& glob, int id1, int id2) {
   for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){
 	if ((*i)->getCommand() !=NULL){
 	if ((*i)->getCommand()->getID() == id1 || (*i)->getCommand()->getID() == id2){
-	    (*i)->toXML(glob, 1, _name);
+	    (*i)->toXML(glob, 0, _name);
 	}
 	}
   }
diff --git a/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp b/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp
index b90dd9e6e9e633028b9b4caaa9895a984843f21c..4bc2334287ac26d0513d1bdcf798ca996f69f266 100644
--- a/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp
+++ b/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp
@@ -428,7 +428,7 @@ int SingleCoreCPU::allTrans2XML(std::ostringstream& glob, int maxNbOfTrans) cons
   int total = 0;
   for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){
     if (cpt >= begining) {
-      (*i)->toXML(glob, 1, _name);
+      (*i)->toXML(glob, 0, _name);
       total ++;
     }
     cpt ++;
@@ -440,7 +440,7 @@ void SingleCoreCPU::latencies2XML(std::ostringstream& glob, unsigned int id1, un
 	for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){
 		if ((*i)->getCommand() !=NULL){
 			if ((*i)->getCommand()->getID() == id1 || (*i)->getCommand()->getID() == id2){
-				(*i)->toXML(glob, 1, _name);
+				(*i)->toXML(glob, 0, _name);
 			}
 		}
 	}
diff --git a/src/main/java/avatartranslator/AvatarPragmaLatency.java b/src/main/java/avatartranslator/AvatarPragmaLatency.java
index 19db85bb5ea2a131b2ca659ff004619c837775df..58276b8759714b471da2fbab65cda48ba3765300 100644
--- a/src/main/java/avatartranslator/AvatarPragmaLatency.java
+++ b/src/main/java/avatartranslator/AvatarPragmaLatency.java
@@ -50,9 +50,9 @@ package avatartranslator;
 import java.util.List;
 
 public class AvatarPragmaLatency extends AvatarPragma {
-    private AvatarActionOnSignal state1;
+    private AvatarStateMachineElement state1;
     private AvatarBlock block1;
-	private AvatarActionOnSignal state2;
+	private AvatarStateMachineElement state2;
 	private AvatarBlock block2;
 	private int symbolType;
 	public static final int lessThan =1;
@@ -63,7 +63,7 @@ public class AvatarPragmaLatency extends AvatarPragma {
 	private List<String> id2;
 	private String pragmaString="";	
 
-    public AvatarPragmaLatency(String _name, Object _referenceObject, AvatarBlock block1, AvatarActionOnSignal state1, AvatarBlock block2, AvatarActionOnSignal state2,  int symbolType, int time, List<String> id1, List<String> id2, String pragmaString)
+    public AvatarPragmaLatency(String _name, Object _referenceObject, AvatarBlock block1, AvatarStateMachineElement state1, AvatarBlock block2, AvatarStateMachineElement state2,  int symbolType, int time, List<String> id1, List<String> id2, String pragmaString)
     {
         super(_name, _referenceObject);
         this.block1 = block1;
@@ -77,7 +77,7 @@ public class AvatarPragmaLatency extends AvatarPragma {
 		this.pragmaString=pragmaString;
     }
 
-    public AvatarActionOnSignal getState1()
+    public AvatarStateMachineElement getState1()
     {
         return this.state1;
     }
@@ -87,7 +87,7 @@ public class AvatarPragmaLatency extends AvatarPragma {
         return this.block1;
     }
 
-    public AvatarActionOnSignal getState2()
+    public AvatarStateMachineElement getState2()
     {
         return this.state2;
     }
diff --git a/src/main/java/avatartranslator/AvatarState.java b/src/main/java/avatartranslator/AvatarState.java
index 0f0290414d244d9b33f357672ee4c211519a6521..880eb41b464998dd8cb360e5bba3aadb29be96bc 100644
--- a/src/main/java/avatartranslator/AvatarState.java
+++ b/src/main/java/avatartranslator/AvatarState.java
@@ -51,6 +51,7 @@ public class AvatarState extends AvatarStateElement {
     private String entryCode;
     private boolean hidden; // i.e, not present in the original state machine
     public int stateID; // to be used by code generator to more efficiently keep track of states.
+	private boolean checkLatency;
 
     public AvatarState(String _name, Object _referenceObject) {
         super(_name, _referenceObject);
@@ -81,6 +82,15 @@ public class AvatarState extends AvatarStateElement {
     public String getNiceName() {
         return "State " + getName();
     }
+    
+    public boolean getCheckLatency(){
+		return checkLatency;
+	}
+	
+	public void setCheckLatency(boolean b){
+		checkLatency=b;
+	}
+
 
     public int hasEmptyTransitionsOnItself(AvatarStateMachine _asm) {
         AvatarTransition at;
diff --git a/src/main/java/ui/AvatarDesignPanelTranslator.java b/src/main/java/ui/AvatarDesignPanelTranslator.java
index 72d8905efe722f14dba7d095c6d643097d6bed1b..892e452735a428a9458a8a80afabb9e620579d92 100644
--- a/src/main/java/ui/AvatarDesignPanelTranslator.java
+++ b/src/main/java/ui/AvatarDesignPanelTranslator.java
@@ -270,7 +270,7 @@ public class AvatarDesignPanelTranslator {
 		String block1 = p1.split("\\.")[0];
 		String state1 = p1.split("\\.")[1];
 		AvatarBlock bl1;
-		AvatarActionOnSignal st1=null;
+		AvatarStateMachineElement st1=null;
 		List<String> id1= new ArrayList<String>();
 		bl1 = as.getBlockWithName(block1);
 		if (bl1==null){
@@ -288,6 +288,14 @@ public class AvatarDesignPanelTranslator {
 				st1= aaos;
 			}
 		}
+		AvatarState astate1 = asm.getStateWithName(state1);
+		if (astate1!=null){
+			if (astate1.getCheckLatency()){
+				id1.add("State-"+state1 + ":"+ astate1.getID());
+				st1= astate1;
+			}
+		}
+		
 		if (id1.size()==0){
 			UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Cannot find checkable state " + block1+ "." + state1 + " in pragma");
 		   	ce.setTDiagramPanel(adp.getAvatarBDPanel());
@@ -320,7 +328,7 @@ public class AvatarDesignPanelTranslator {
 
 
 		AvatarBlock bl2;
-		AvatarActionOnSignal st2=null;
+		AvatarStateMachineElement st2=null;
 
 		bl2 = as.getBlockWithName(block2);
 		if (bl2==null){
@@ -342,6 +350,14 @@ public class AvatarDesignPanelTranslator {
 			}
 		}
 		
+		AvatarState astate2 = asm.getStateWithName(state2);
+		if (astate2!=null){
+			if (astate2.getCheckLatency()){
+				id2.add("State-"+state2 + ":"+ astate2.getID());
+				st2= astate2;
+			}
+		}
+		
 		if (id2.size()==0){
 			UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Cannot find checkable state " + block2+ "." + state2 + " in pragma");
 		   	ce.setTDiagramPanel(adp.getAvatarBDPanel());
@@ -1594,7 +1610,7 @@ public class AvatarDesignPanelTranslator {
         astate.addReferenceObject (tgc);
         tgc.setAVATARID (astate.getID());
 		if (tgc.getCheckLatency()){
-		//	astate.setCheckLatency(true);
+			astate.setCheckLatency(true);
 			_as.checkedIDs.add(tgc.getName()+"-"+tgc.getValue()+":"+astate.getID());
 		}
     }
diff --git a/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java b/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java
index 11b0b717f45eddc7093adaddcfb6ea40dc2bbe5f..dcd604a490c039c46091106400bb27a16e1465d0 100755
--- a/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java
+++ b/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java
@@ -927,8 +927,8 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         jspLatency = new JScrollPane(latTable);
         jspLatency.setWheelScrollingEnabled(true);
         jspLatency.getVerticalScrollBar().setUnitIncrement(10);
-        jspLatency.setMinimumSize(new Dimension(250, 50));
-        jspLatency.setPreferredSize(new Dimension(250, 50));
+        jspLatency.setMinimumSize(new Dimension(450, 100));
+        jspLatency.setPreferredSize(new Dimension(450, 100));
         latencyPanel.add(jspLatency, c0);
 
 
diff --git a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java
index 3bbcf132a3de8b5da0670eb832fb8b9496eca307..3a6497ebcc6e26c7e48545ad5c1a3736b263b001 100755
--- a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java
+++ b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java
@@ -1534,7 +1534,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
 		}
 		
 		try {
-			if ((command.equals("Write") || command.equals("Read")) && tran.deviceName.contains("CPU")){
+			if ((command.equals("Write") || command.equals("Read")) && tran.nodeType.equals("0")){
 				TMLChannel chan = tmap.getTMLModeling().getChannelByShortName(tran.channelName);
 				if (chan!=null){
 					TMLTask originTask = chan.getOriginTask();
@@ -1581,7 +1581,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
 					}
 				}
 			}
-			else if ((command.equals("Send") || command.equals("Wait") || command.equals("SelectEvent"))  && tran.deviceName.contains("CPU") && !tran.channelName.startsWith("reqChannel")){
+			else if ((command.equals("Send") || command.equals("Wait") || command.equals("SelectEvent"))  && tran.nodeType.equals("0") && !tran.channelName.startsWith("reqChannel")){
 				if (command.equals("SelectEvent")){
 					String trace="time="+tran.endTime+ " block=" + tran.taskName + " type=state_entering state=SelectEvent";
 					if (!simtraces.contains(trace)){
@@ -1634,7 +1634,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
 					}
 				}
 			}
-			else if ((command.equals("Request") || command.equals("Wait")) && tran.deviceName.contains("CPU") && tran.channelName.startsWith("reqChannel")){
+			else if ((command.equals("Request") || command.equals("Wait")) && tran.nodeType.equals("0") && tran.channelName.startsWith("reqChannel")){
 				TMLRequest req=null;
 				for (TMLRequest request: tmap.getTMLModeling().getRequests()){
 					if (tran.channelName.replaceAll("reqChannel_","").equals(request.getDestinationTask().getName())){						
diff --git a/ttool/src/test/java/avatartranslator/AvatarSafetyTests.java b/ttool/src/test/java/avatartranslator/AvatarSafetyTests.java
index 829f0ec875635e0fd53ab2ac522857c73643107d..172fb14e5531c84a132a47da14c1c896a2f838c3 100644
--- a/ttool/src/test/java/avatartranslator/AvatarSafetyTests.java
+++ b/ttool/src/test/java/avatartranslator/AvatarSafetyTests.java
@@ -103,7 +103,11 @@ public class AvatarSafetyTests {
 
 		AvatarBlock C = new AvatarBlock("C", null, null);
 		AvatarStateMachine Casm = C.getStateMachine();
-		Casm.addElement(new AvatarState("c1", null));
+		AvatarState c1=	new AvatarState("c1", null);
+		c1.setCheckLatency(true);
+		Casm.addElement(c1);
+
+		
 		C.addAttribute(new AvatarAttribute("attr", AvatarType.INTEGER, C, null));
 		C.addAttribute(new AvatarAttribute("m__a", AvatarType.UNDEFINED, C, null));	
 		C.addAttribute(new AvatarAttribute("m__b", AvatarType.UNDEFINED, C, null));
@@ -139,8 +143,14 @@ public class AvatarSafetyTests {
 		assertEquals(pragma.getBlock1().getName(),"A");
 		assertEquals(pragma.getBlock2().getName(),"B");
 		//Check State names
-		assertEquals(pragma.getState1().getSignal().getName(),"sig");
-		assertEquals(pragma.getState2().getSignal().getName(),"sig2");
+		if (pragma.getState1() instanceof AvatarActionOnSignal){
+			AvatarActionOnSignal aos = (AvatarActionOnSignal) pragma.getState1();
+			assertEquals(aos.getSignal().getName(),"sig");
+		}
+		if (pragma.getState2() instanceof AvatarActionOnSignal){
+			AvatarActionOnSignal aos2 = (AvatarActionOnSignal) pragma.getState2();
+			assertEquals(aos2.getSignal().getName(),"sig2");
+		}
 		//Check ids not empty
 		assertEquals(pragma.getId1().size(),1);
 		assertEquals(pragma.getId2().size(),1);	
@@ -208,6 +218,34 @@ public class AvatarSafetyTests {
 	
 	}
     
+    @Test
+    public void testFormAvatarStatePragma(){
+    pragma = adpt.checkPerformancePragma("Latency(A.sig,C.c1)<1", blocks, as, null);
+		assertTrue(pragma !=null);
+		//Check Block names
+		assertEquals(pragma.getBlock1().getName(),"A");
+		assertEquals(pragma.getBlock2().getName(),"C");
+		//Check State names
+		assertTrue(pragma.getState1() instanceof AvatarActionOnSignal);
+		if (pragma.getState1() instanceof AvatarActionOnSignal){
+			AvatarActionOnSignal aos = (AvatarActionOnSignal) pragma.getState1();
+			assertEquals(aos.getSignal().getName(),"sig");
+		}
+		assertTrue(pragma.getState2() instanceof AvatarState);
+		if (pragma.getState2() instanceof AvatarState){
+			AvatarState st = (AvatarState) pragma.getState2();
+			assertEquals(st.getName(),"c1");
+		}	
+			
+		//Check ids not empty
+		assertEquals(pragma.getId1().size(),1);
+		assertEquals(pragma.getId2().size(),1);	
+		//Check symbol
+		assertEquals(pragma.getSymbolType(),AvatarPragmaLatency.lessThan);
+		//Check time
+		assertEquals(pragma.getTime(),1);
+    }
+    
     public static void main(String[] args){
         AvatarSafetyTests ast = new AvatarSafetyTests ();
        // ast.runTest ();