diff --git a/src/main/java/ui/interactivesimulation/InteractiveSimulationActions.java b/src/main/java/ui/interactivesimulation/InteractiveSimulationActions.java
index 41172e3e5a4a58361c25825e4a85d05fa6c59f55..01a5773be7622c98ffa4b0dc0db075e15f85d672 100755
--- a/src/main/java/ui/interactivesimulation/InteractiveSimulationActions.java
+++ b/src/main/java/ui/interactivesimulation/InteractiveSimulationActions.java
@@ -104,8 +104,8 @@ public class InteractiveSimulationActions extends AbstractAction {
 
     public static final int ACT_ANALYSIS_RG = 30;
     public static final int ACT_VIEW_RG = 31;
-
-    public static final int NB_ACTION = 36;
+    public static final int ACT_SHOW_TRACE = 36;
+    public static final int NB_ACTION = 37;
 
 
     private  static final TAction [] actions = new TAction[NB_ACTION];
@@ -189,6 +189,7 @@ public class InteractiveSimulationActions extends AbstractAction {
         actions[ACT_VIEW_RG] = new TAction("view-rg", "View last RG", IconManager.imgic344, IconManager.imgic344, "View last RG", "View last RG", '0');
         actions[ACT_UPDATE_LATENCY] = new TAction("update-latency", "Update latencies", IconManager.imgic75, IconManager.imgic75, "Update latencies", "Update latencies", '0');
         actions[ACT_ADD_LATENCY] = new TAction("add-latency", "Measure Latency", null, null, "Measure Latency", "Measure Latency", '0');
+		actions[ACT_SHOW_TRACE] = new TAction("show-trace", "Show Simulation Traces", IconManager.imgic7007, IconManager.imgic7007, "Show Simulation Traces", "Show Simulation Traces", '0');
 
 
     }
diff --git a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java
index 613c90e1ac10138d48bf402de02420ddc6cc004e..6d7390f1409312d7d770e8a8d1bb34c6a01fdf9f 100755
--- a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java
+++ b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java
@@ -82,7 +82,7 @@ import java.util.List;
  */
 public class JFrameInteractiveSimulation extends JFrame implements ActionListener, Runnable, MouseListener, ItemListener, ChangeListener {
 
-    protected static final int NB_OF_TRANSACTIONS = 10;
+    protected static final int NB_OF_TRANSACTIONS = 1000;
 
     protected static final String SIMULATION_HEADER = "siminfo";
     protected static final String SIMULATION_GLOBAL = "global";
@@ -108,7 +108,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
     private String hostSystemC;
     private String pathExecute;
 
-    protected JButton buttonClose, buttonStart, buttonStopAndClose;
+    protected JButton buttonClose, buttonStart, buttonStopAndClose, buttonShowTrace;
     protected JTextArea jta;
     protected JScrollPane jsp;
 
@@ -145,7 +145,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
     protected JTextField stateFileName;
     protected JTextField benchmarkFileName;
     protected JComboBox<String> cpus, busses, mems, tasks, chans;
-
+	HashMap<String, List<Integer>> channelIDMap= new HashMap<String, List<Integer>>();
 
     private String[] cpuIDs, busIDs, memIDs, taskIDs, chanIDs;
 	private List<String> simtraces= new ArrayList<String>();
@@ -209,6 +209,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
     LatencyTableModel latm;
     public Vector<String> checkedTransactions = new Vector<String>();
     private JScrollPane jspLatency;
+	int chanId=0;
 
     private int mode = 0;
     //private boolean busyStatus = false;
@@ -262,7 +263,6 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
 
         points = _points;
 
-
         valueTable = new Hashtable<Integer, String>();
         rowTable = new Hashtable<Integer, Integer>();
         runningTable = new Hashtable<Integer, Integer>();
@@ -307,6 +307,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
         buttonStart = new JButton(actions[InteractiveSimulationActions.ACT_START_ALL]);
         buttonClose = new JButton(actions[InteractiveSimulationActions.ACT_STOP_ALL]);
         buttonStopAndClose = new JButton(actions[InteractiveSimulationActions.ACT_STOP_AND_CLOSE_ALL]);
+        buttonShowTrace = new JButton(actions[InteractiveSimulationActions.ACT_SHOW_TRACE]);
         //buttonStopAndClose = new JButton(buttonStopAndCloseS, IconManager.imgic27);
 
 
@@ -330,6 +331,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
         jp.add(buttonStart);
         jp.add(buttonStopAndClose);
         jp.add(buttonClose);
+        jp.add(buttonShowTrace);
         mainpanel.add(jp, BorderLayout.NORTH);
 
 
@@ -1378,6 +1380,12 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
         return true;
 
     }
+
+	public void resetSimTrace(){
+		simtraces.clear();
+		writeSimTrace();
+	}
+
 	public void writeSimTrace(){
 		try {
 			tmlSimPanel = new JFrameTMLSimulationPanel(new Frame(), mgui, "Simulation Transactions");
@@ -1411,12 +1419,17 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
 	
 		}
 		catch (Exception e){
-			System.out.println("Could not write sim trace " + e);
+			System.out.println("Could not write sim trace " + e + " " + simtraces + " " +simIndex);
 		}
 	}
     protected void addTransactionToNode(SimulationTransaction tran){
+		//System.out.println("Command " + tran.command
+		String command = tran.command;
+		if (command.contains(" ")){
+			command = command.split(" ")[0];
+		}
 		try {
-			if (tran.command.contains("Write")){
+			if (command.equals("Write") || command.equals("Read")){
 				TMLChannel chan = tmap.getTMLModeling().getChannelByShortName(tran.channelName);
 				if (chan!=null){
 					TMLTask originTask = chan.getOriginTask();
@@ -1424,26 +1437,52 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
 					if (originTask!=null && destTask!=null){
 						//JK asynch channels don't work
 					//	if (chan.getType()==TMLChannel.BRBW){
-							String trace="time=" + tran.endTime+ " block="+ originTask.getName() + " blockdestination="+ destTask.getName() +" type=synchro channel="+tran.channelName+" params=\"" +chan.getSize()+"\"";
+						//	String trace="time=" + tran.endTime+ " block="+ originTask.getName() + " blockdestination="+ destTask.getName() +" type=synchro channel="+tran.channelName+" params=\"" +chan.getSize()+"\"";
+
+						//}
+						//else {
+							String asynchType = (command.equals("Write") ? "send_async" : "receive_async");
+							int msgId=chanId;
+							if (command.equals("Write")){	
+								if (!channelIDMap.containsKey(tran.channelName)){
+									channelIDMap.put(tran.channelName, new ArrayList<Integer>());
+								}
+								channelIDMap.get(tran.channelName).add(msgId);
+								chanId++;
+							}
+							else {
+								if (channelIDMap.containsKey(tran.channelName) && channelIDMap.get(tran.channelName).size()>0){
+									msgId=channelIDMap.get(tran.channelName).remove(0);
+								}
+							
+							}
+							String trace = "time=" + tran.endTime+ " block="+ originTask.getName() + " type="+asynchType+ " blockdestination="+ destTask.getName() + " channel="+tran.channelName+" msgid="+ msgId + " params=\"" +chan.getSize()+"\"";	
+						//	System.out.println("sending asynch " + trace);
 							if (!simtraces.contains(trace)){
 								simtraces.add(trace);
 							}
 						//}
-						//else {
-						//	String asynchType = (tran.command.contains("Write") ? "send_asynch" : "receive_asynch");
-							//simtraces.add("#"+simIndex+" time=" + tran.startTime+ " block="+ originTask.getName() + " blockdestination="+ destTask.getName() +" type="+asynchType+ " channel="+tran.channelName+" params=\"" +chan.getSize()+"\"");
-						//}
 					}
 				}
 			}
-			else if (tran.command.contains("Exec")){
+			else if (command.equals("SelectEvent")){
+			}
+			else if (command.equals("Send")){
+			}
+			else if (command.equals("Wait")){
+			}
+			else if (command.equals("Request")){
+			}
+			else if (command.equals("Notified")){
+			}
+			else if (command.contains("Execi")){
 				String trace="time="+tran.endTime+ " block=" + tran.taskName + " type=state_entering state=exec" + tran.length;
 				if (!simtraces.contains(trace)){
 					simtraces.add(trace);
 				}
 			}
 			else {
-				// :(
+				System.out.println("UNHANDLED COMMAND " + tran.command);
 			}
 			//System.out.println("Simulation command " + tran.command + " " + tran.channelName + " " + tran.length);
 
@@ -2901,7 +2940,6 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
             updateTasks();
         } else if (command.equals(actions[InteractiveSimulationActions.ACT_UPDATE_TRANSACTIONS].getActionCommand())) {
             updateTransactions();
-			writeSimTrace();
         } else if (command.equals(actions[InteractiveSimulationActions.ACT_ADD_LATENCY].getActionCommand())) {
             addLatency();
         } else if (command.equals(actions[InteractiveSimulationActions.ACT_UPDATE_LATENCY].getActionCommand())) {
@@ -2914,7 +2952,11 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
             analyzeRG();
         } else if (command.equals(actions[InteractiveSimulationActions.ACT_VIEW_RG].getActionCommand())) {
             viewRG();
-        }
+        } else if (command.equals(actions[InteractiveSimulationActions.ACT_REFRESH].getActionCommand())) {
+            resetSimTrace();
+        } else if (command.equals(actions[InteractiveSimulationActions.ACT_SHOW_TRACE].getActionCommand())) {
+			writeSimTrace();
+		}
     }
 
     public void error(String error) {
diff --git a/src/main/java/ui/interactivesimulation/JFrameTMLSimulationPanel.java b/src/main/java/ui/interactivesimulation/JFrameTMLSimulationPanel.java
index 735f93aeee9f6270877ee51585af284cfa8154aa..423db8356026c797e4eab3a0e4c6b72b5b28e0fe 100644
--- a/src/main/java/ui/interactivesimulation/JFrameTMLSimulationPanel.java
+++ b/src/main/java/ui/interactivesimulation/JFrameTMLSimulationPanel.java
@@ -106,13 +106,13 @@ public	class JFrameTMLSimulationPanel extends JFrame implements ActionListener {
         JPanel topPanel = new JPanel();
         JButton buttonClose = new JButton(actions[InteractiveSimulationActions.ACT_STOP_ALL]);
         topPanel.add(buttonClose);
-        topPanel.add(new JLabel(" time unit:"));
+        /*topPanel.add(new JLabel(" time unit:"));
         units = new JComboBox<>(unitTab);
         units.setSelectedIndex(1);
         units.addActionListener(this);
         topPanel.add(units);
         JButton buttonRefresh = new JButton(actions[InteractiveSimulationActions.ACT_REFRESH]);
-        topPanel.add(buttonRefresh);
+        topPanel.add(buttonRefresh);*/
         framePanel.add(topPanel, BorderLayout.NORTH);
         
         // Simulation panel
diff --git a/src/main/java/ui/interactivesimulation/JSimulationSDPanel.java b/src/main/java/ui/interactivesimulation/JSimulationSDPanel.java
index 6dd09317719335a73f001104b6b8c2eaf1227381..e761e97c917767c9ec2d0dff251bc03c31e696cb 100644
--- a/src/main/java/ui/interactivesimulation/JSimulationSDPanel.java
+++ b/src/main/java/ui/interactivesimulation/JSimulationSDPanel.java
@@ -1157,7 +1157,7 @@ public class JSimulationSDPanel extends JPanel implements MouseMotionListener, R
         if (tmp != null) {
             gt.messageID = tmp;
         }
-
+		System.out.println("Added transaction " + gt);
         transactions.add(gt);
         //TraceManager.addDev("One transactions added");
 
diff --git a/src/main/java/ui/interactivesimulation/JSimulationTMLPanel.java b/src/main/java/ui/interactivesimulation/JSimulationTMLPanel.java
index 76c45d8b235ada4988323a63deae5955aa01d799..57767224894ebdc4bd0f270a99a5c0246d019e8e 100644
--- a/src/main/java/ui/interactivesimulation/JSimulationTMLPanel.java
+++ b/src/main/java/ui/interactivesimulation/JSimulationTMLPanel.java
@@ -1012,7 +1012,6 @@ public class JSimulationTMLPanel extends JPanel implements MouseMotionListener,
     }
 
     private void addGenericTransaction(String trans) {
-		//System.out.println("Adding translation!!! " + trans);
         int index0;
         String tmp, tmp1, tmp2;
         long value;
@@ -1065,7 +1064,7 @@ public class JSimulationTMLPanel extends JPanel implements MouseMotionListener,
             gt.startingTime = Long.valueOf(tmp);
             gt.finishTime = Long.valueOf(tmp);
         } catch (Exception e) {
-            TraceManager.addDev("Exception: " + e.getMessage() + " on transaction " + trans);
+            System.out.println("Exception: " + e.getMessage() + " on transaction " + trans);
             return;
         }
 
@@ -1088,6 +1087,7 @@ public class JSimulationTMLPanel extends JPanel implements MouseMotionListener,
             return;
         }
 
+
         if (tmp.compareTo("state_entering") == 0) {
             gt.type = GenericTransaction.STATE_ENTERING;
         }
diff --git a/src/main/java/ui/util/IconManager.java b/src/main/java/ui/util/IconManager.java
index 836cf00e568fffb5788b88eff76b150bd408cf0a..1c3f9a88e14c5af8b28ba983572c305a981f98e6 100755
--- a/src/main/java/ui/util/IconManager.java
+++ b/src/main/java/ui/util/IconManager.java
@@ -156,7 +156,8 @@ public class IconManager {
     public static ImageIcon imgic7000, imgic7001;
     //Safety
     public static ImageIcon imgic7002, imgic7003, imgic7004, imgic7005, imgic7006;
-
+	//Show traces
+    public static ImageIcon imgic7007;
     // Delegate ports image removed, by Solange
     //public static ImageIcon imgic2102;
 
@@ -602,6 +603,8 @@ public class IconManager {
     private static String icon7004 = "E1.gif";
     private static String icon7005 = "E2.gif";
     private static String icon7006 = "imply.gif";	
+	//Show traces
+    private static String icon7007 = "toolbarButtonGraphics/general/showTrace.gif";
     public IconManager() {
 
 
@@ -1022,6 +1025,7 @@ public class IconManager {
 	imgic7004 = getIcon(icon7004);
 	imgic7005 = getIcon(icon7005);
 	imgic7006 = getIcon(icon7006);
+	imgic7007 = getIcon(icon7007);
     }
 
 } // Class