diff --git a/simulators/c++2/src_simulator/TMLTransaction.cpp b/simulators/c++2/src_simulator/TMLTransaction.cpp
index 6b8e7cc1c1207059d31f4256a13ba9a6a030ca79..e178e1711b40e0735500ad39a5bf6c849ffc8ffe 100755
--- a/simulators/c++2/src_simulator/TMLTransaction.cpp
+++ b/simulators/c++2/src_simulator/TMLTransaction.cpp
@@ -90,11 +90,11 @@ std::string TMLTransaction::toShortString() const{
 
 void TMLTransaction::toXML(std::ostringstream& glob, int deviceID, std::string deviceName) const {
   if (_command==0) {
-    glob << TAG_TRANSo << " deviceid=\"" << deviceID << "\" devicename=\"" << deviceName << "\" command=\"0\"";
+    glob << TAG_TRANSo << " deviceid=\"" << deviceID << "\" devicename=\"" << deviceName << "\" id=\"" << _command->getID() << "\" command=\"0\"";
   } else {
     glob << TAG_TRANSo << " deviceid=\"" << deviceID << "\" devicename=\"" << deviceName << "\" command=\"" << _command->toShortString() << "\"";
     std::cout << "Info transaction:" <<  " starttime=\"" << _startTime << "\" endtime=\"" << getEndTime() << " length" << _length << "\" virtuallength=" <<  _virtualLength << " getStartTime:" << getStartTime() << "\n"; 
-    glob << " starttime=\"" << _startTime << "\" endtime=\"" << getEndTime() << "\" length=\"" << _length << "\" virtuallength=\"" <<  _virtualLength << "\""; 
+    glob << " starttime=\"" << _startTime << "\" endtime=\"" << getEndTime() << "\" length=\"" << _length << "\" virtuallength=\"" <<  _virtualLength << "\" id=\"" << _command->getID() << "\""; 
     if (_channel!=0) glob << " ch=\"" << _channel->toShortString() << "\"";
   }
 
diff --git a/simulators/c++2/src_simulator/TMLTransaction.h b/simulators/c++2/src_simulator/TMLTransaction.h
index 2c54b285c048915561b664e71d1c40303f7e99f0..a0c03096e50489ff748b9bf85d9df4c2f86365bb 100644
--- a/simulators/c++2/src_simulator/TMLTransaction.h
+++ b/simulators/c++2/src_simulator/TMLTransaction.h
@@ -233,7 +233,7 @@ public:
 	inline static void resetID() {_ID=1;}
 	inline void setStateID(ID iID) {_stateID=iID;}
 	inline ID getStateID() {return _stateID;}
-
+	inline void setTaskID(ID iID) {_taskID=iID;}
 	void toXML(std::ostringstream& glob, int deviceID, std::string deviceName) const;
 	
 
@@ -259,6 +259,7 @@ protected:
 	///Channel on which data was conveyed
 	TMLChannel* _channel;
 	ID _stateID;
+	ID _taskID;
 	///Memory pool for transactions
 	static MemPoolNoDel<TMLTransaction> memPool;
 	///Current Transaction ID
diff --git a/simulators/c++2/src_simulator/sim/Simulator.cpp b/simulators/c++2/src_simulator/sim/Simulator.cpp
index 48d80918a7882c97dc7988ea000f742c57c56f38..ebe8daf377ac139b081d8d0fbc1e6c0ad34cc701 100644
--- a/simulators/c++2/src_simulator/sim/Simulator.cpp
+++ b/simulators/c++2/src_simulator/sim/Simulator.cpp
@@ -389,6 +389,9 @@ bool Simulator::simulate(TMLTransaction*& oLastTrans){
     std::cout << "kernel:simulate: scheduling decision: " <<  transLET->toString() << std::endl;
 #endif
     commandLET=transLET->getCommand();
+	//if (depTask!=NULL){
+//	transLET->setTaskID(commandLET->getID());
+	//}
 #ifdef DEBUG_KERNEL
     std::cout << "kernel:simulate: add trans " << commandLET->toString() << std::endl;
 #endif
@@ -473,8 +476,10 @@ bool Simulator::simulate(TMLTransaction*& oLastTrans){
 #endif
     }
     oLastTrans=transLET;
+
     //std::cout << "kernel:simulate: getTransLowestEndTime" << std::endl;
     transLET=getTransLowestEndTime(cpuLET);
+
     //_syncInfo->_server->sendReply("Sleep once again\n");
     //sleep(1);
   }
diff --git a/src/ui/interactivesimulation/JFrameInteractiveSimulation.java b/src/ui/interactivesimulation/JFrameInteractiveSimulation.java
index 27f9a8c49d54918134c44563309e68fbfc4bad65..d8ba059955267b9dbcd7f5fd62dc0f02210ff0bf 100755
--- a/src/ui/interactivesimulation/JFrameInteractiveSimulation.java
+++ b/src/ui/interactivesimulation/JFrameInteractiveSimulation.java
@@ -973,9 +973,14 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
 		infoTab.addTab("Latency", null, latencyPanel, "Latency Measurements");
 
 		c0.gridwidth=1;
+		c0.gridheight=1;
+		latencyPanel.add(new JLabel("Checkpoint 1:"),c0);
+		c0.gridwidth = GridBagConstraints.REMAINDER;
 		transaction1 = new JComboBox(checkedTransactions);
 		latencyPanel.add(transaction1, c0);
 	
+		c0.gridwidth=1;
+		latencyPanel.add(new JLabel("Checkpoint 2:"),c0);
 		c0.gridwidth= GridBagConstraints.REMAINDER;
 		transaction2 = new JComboBox(checkedTransactions);	
 		latencyPanel.add(transaction2, c0);
@@ -989,16 +994,16 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
 		sorterPI = new TableSorter(latm);
         jtablePI = new JTable(sorterPI);
         sorterPI.setTableHeader(jtablePI.getTableHeader());
-        ((jtablePI.getColumnModel()).getColumn(0)).setPreferredWidth(100);
-        ((jtablePI.getColumnModel()).getColumn(1)).setPreferredWidth(100);
+        ((jtablePI.getColumnModel()).getColumn(0)).setPreferredWidth(400);
+        ((jtablePI.getColumnModel()).getColumn(1)).setPreferredWidth(400);
         ((jtablePI.getColumnModel()).getColumn(2)).setPreferredWidth(50);
 
-        jtablePI.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+        jtablePI.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
         jspLatency = new JScrollPane(jtablePI);
         jspLatency.setWheelScrollingEnabled(true);
         jspLatency.getVerticalScrollBar().setUnitIncrement(10);
-        jspLatency.setMinimumSize(new Dimension(250, 300));
-        jspLatency.setPreferredSize(new Dimension(250, 300));
+        jspLatency.setMinimumSize(new Dimension(300, 250));
+        jspLatency.setPreferredSize(new Dimension(450, 250));
         latencyPanel.add(jspLatency, c0);
 
 
@@ -1733,15 +1738,16 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
                             //TraceManager.addDev("Command handled");
                             st.startTime = elt.getAttribute("starttime");
 						    st.endTime = elt.getAttribute("endtime");
-						//	System.out.println("command " +commandT);
-							if (checkTable.containsKey(commandT)){
+							String taskId= elt.getAttribute("id");
+							//System.out.println(elt.getAttribute("id"));
+							if (checkTable.containsKey(taskId)){
 								//System.out.println("added trans " + commandT + " " +st.endTime);
-								if (!transTimes.containsKey(commandT)){
+								if (!transTimes.containsKey(taskId)){
 									ArrayList<String> timeList = new ArrayList<String>();
-									transTimes.put(commandT, timeList);
+									transTimes.put(taskId, timeList);
 								}
-								if (!transTimes.get(commandT).contains(st.endTime)){
-									transTimes.get(commandT).add(st.endTime);
+								if (!transTimes.get(taskId).contains(st.endTime)){
+									transTimes.get(taskId).add(st.endTime);
 								}
                                     //System.out.println("nl:" + nl + " value=" + node0.getNodeValue() + " content=" + node0.getTextContent());
                                 	
@@ -1855,7 +1861,6 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
 		    transactionPanel.setData(trans);
 		}
 		if (latencyPanel !=null){
-			System.out.println("Processing latencies...");
 			processLatency();
 		}
                 //ttm.setData(trans);
@@ -2324,14 +2329,15 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
 		latm.setData(latencies);
 	}
 	private void updateLatency(){
-	   //sendCommand("lt 100");
+	   sendCommand("lt 20");
 	}
 
 	private void processLatency(){
  
-		System.out.println(transTimes);
+//		TraceManager.addDev(transTimes.toString());
 		for (Object o: latencies){
 			SimulationLatency sl = (SimulationLatency) o;
+			sl.time="??";
 			for (String st1:transTimes.keySet()){
 				for (String st2:transTimes.keySet()){
 					if (st1!=st2){
@@ -2342,11 +2348,13 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
 								int time = Integer.MAX_VALUE;
 								for (String time2: transTimes.get(st2)){
 									int diff = Integer.valueOf(time1) - Integer.valueOf(time2);
-									if (diff < time && diff >0){
+									if (diff < time && diff >=0){
 										time=diff;
 									}	
 								}
-								minTimes.add(time);						
+								if (time!=Integer.MAX_VALUE){
+									minTimes.add(time);						
+								}
 							}
 							sl.time=Integer.toString(Collections.max(minTimes));	
 						}
@@ -2795,6 +2803,8 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
             mgui.resetTransactions();
             mgui.resetStatus();
             sendCommand("reset");
+			transTimes=new HashMap<String, ArrayList<String>>();
+			processLatency();
             askForUpdate();
         } else if (command.equals(actions[InteractiveSimulationActions.ACT_STOP_SIMU].getActionCommand())) {
             sendCommand("stop");