diff --git a/executablecode/src/request.c b/executablecode/src/request.c
index 5d5cd0e37f146cd848a950592b8fdf8066047284..d91bfcf7a348171187b7e0ed5f9b8e678879139b 100644
--- a/executablecode/src/request.c
+++ b/executablecode/src/request.c
@@ -29,6 +29,9 @@ void makeNewRequest(request *req, int ID, int type, int hasDelay, long minDelay,
   req->next = NULL;
   req->listOfRequests = NULL;
   req->nextRequestInList = NULL;
+
+  req->linkedTo = NULL;
+
   req->type = type;
   req->ID = ID;
   req->hasDelay = hasDelay;
diff --git a/executablecode/src/tracemanager.c b/executablecode/src/tracemanager.c
index b8d38628187bd203254452a56654c938d3613846..7e2e9c0f014653b38e7ae2562c81eba2b734dfe5 100644
--- a/executablecode/src/tracemanager.c
+++ b/executablecode/src/tracemanager.c
@@ -13,8 +13,7 @@
 #define TRACE_FILE_NAME "Trace.txt"
 
 
-//pthread_mutex_t traceMutex;
-//pthread_cond_t wakeupTraceManager;
+pthread_mutex_t __traceMutex;
 
 int trace = TRACE_OFF;
 int id = 0;
@@ -24,7 +23,6 @@ FILE *file;
 struct timespec begints;
 
 
-
 void addInfo(char *dest, char *info) {
   char s1[10];
   long tmp;
@@ -57,6 +55,7 @@ void addInfo(char *dest, char *info) {
 
 
 void writeInTrace(char *info) {
+  mutex_lock(&__traceMutex);
   char s[CHAR_ALLOC_SIZE];
   addInfo(s, info);
 		 //printf("Write in file\n");
@@ -67,6 +66,7 @@ void writeInTrace(char *info) {
     fprintf(file, s);
     fflush(file);
   }
+  mutex_unlock(&__traceMutex);
 }
 
 
@@ -80,6 +80,9 @@ void activeTracingInFile(char *fileName) {
     name  = fileName;
   }
   file = fopen(name,"w");
+
+  /* Initializing mutex */
+  if (pthread_mutex_init(&__traceMutex, NULL) < 0) { exit(-1);}
 }
 
 void unactiveTracing() {
@@ -148,6 +151,8 @@ void traceVariableModification(char *block, char *var, int value, int type) {
 
 void traceRequest(char *myname, request *req) {
   char s[1024];
+  int i;
+ 
 
   debugMsg("Trace request");
 
@@ -161,10 +166,16 @@ void traceRequest(char *myname, request *req) {
   switch(req->type) {
   case SEND_SYNC_REQUEST:
     debug2Msg("Sync channel", req->syncChannel->outname);
-    if ( req->linkedTo == NULL) {
-      printf("NULL related\n");
-    }
-    sprintf(s, "block=%s type=send_synchro channel=%s blockdestination=%s\n", myname, req->syncChannel->outname, req->linkedTo->listOfRequests->owner);
+      //sprintf(s, "block=%s type=send_synchro channel=%s blockdestination=%s\n", myname, req->syncChannel->outname, req->linkedTo->listOfRequests->owner);
+      sprintf(s, "block=%s type=send_synchro channel=%s blockdestination=%s params=", myname, req->syncChannel->outname, req->linkedTo->listOfRequests->owner);
+      for(i=0; i<req->nbOfParams; i++) {
+	if (i>0) {
+	  sprintf(s, "%s,", s);
+	}
+	sprintf(s, "%s%d", s, *(req->params[i]));
+      }
+      sprintf(s, "%s\n", s);
+ 
     break;
   case RECEIVE_SYNC_REQUEST:
     sprintf(s, "block=%s type=receive_synchro channel=%s\n", myname, req->syncChannel->inname);
diff --git a/executablecode/src/tracemanager.h b/executablecode/src/tracemanager.h
index e85417a0cba27dd1a163c59ece6286e6c39ef58a..45f4ecb341078f7d3214b71775ce79645dc47613 100644
--- a/executablecode/src/tracemanager.h
+++ b/executablecode/src/tracemanager.h
@@ -5,6 +5,7 @@
 
 #define CHAR_ALLOC_SIZE 1024
 
+
 void activeTracingInFile();
 void unactiveTracing();
 void traceRequest(char *myname, request *req);
diff --git a/src/avatartranslator/directsimulation/AvatarSimulationBlock.java b/src/avatartranslator/directsimulation/AvatarSimulationBlock.java
index cdf186961cb221f939268209a3e90c53d91b11a0..e0952117c79725142afe4684b6c061f8d7c310d1 100644
--- a/src/avatartranslator/directsimulation/AvatarSimulationBlock.java
+++ b/src/avatartranslator/directsimulation/AvatarSimulationBlock.java
@@ -175,6 +175,7 @@ public class AvatarSimulationBlock  {
 				aspt = new AvatarSimulationPendingTransaction();
 				aspt.asb = this;
 				aspt.elementToExecute = lastTransaction.executedElement.getNext(i);
+				aspt.previouslyExecutedElement = lastTransaction.executedElement;
 				if ((aspt.elementToExecute instanceof AvatarTransition) && (lastTransaction.executedElement instanceof AvatarState)) {
 					AvatarTransition trans = (AvatarTransition)(aspt.elementToExecute);
 					if (trans.getNbOfAction() == 0){
diff --git a/src/avatartranslator/directsimulation/AvatarSimulationPendingTransaction.java b/src/avatartranslator/directsimulation/AvatarSimulationPendingTransaction.java
index be2297af7a1cbdd9ca0d7f9980d0edb804af081e..c2ed35a166135ebb29f08061062d1f50382d041c 100644
--- a/src/avatartranslator/directsimulation/AvatarSimulationPendingTransaction.java
+++ b/src/avatartranslator/directsimulation/AvatarSimulationPendingTransaction.java
@@ -57,6 +57,7 @@ import myutil.*;
 public class AvatarSimulationPendingTransaction  {
 	
 	public AvatarSimulationBlock asb;
+    public AvatarStateMachineElement previouslyExecutedElement;
 	public AvatarStateMachineElement elementToExecute;
 	public AvatarStateMachineElement involvedElement; //(transition)
 	public AvatarSimulationPendingTransaction linkedTransaction;
@@ -108,6 +109,7 @@ public class AvatarSimulationPendingTransaction  {
 		AvatarSimulationPendingTransaction aspt = new AvatarSimulationPendingTransaction();
 		aspt.asb = this.asb;
 		aspt.elementToExecute = this.elementToExecute;
+		aspt.previouslyExecutedElement = this.previouslyExecutedElement;
 		aspt.involvedElement = this.involvedElement;
 		aspt.linkedTransaction = this.linkedTransaction;
 		aspt.linkedAsynchronousMessage = this.linkedAsynchronousMessage;
diff --git a/src/avatartranslator/directsimulation/AvatarSpecificationSimulation.java b/src/avatartranslator/directsimulation/AvatarSpecificationSimulation.java
index c5717f4af52cad264d40d8604e631ae647118fe8..cf45311fbea79a5ab48fa87bfa0a4c09685c462f 100644
--- a/src/avatartranslator/directsimulation/AvatarSpecificationSimulation.java
+++ b/src/avatartranslator/directsimulation/AvatarSpecificationSimulation.java
@@ -591,9 +591,11 @@ public class AvatarSpecificationSimulation  {
 		if (aspt.elementToExecute instanceof AvatarTransition) {
 			AvatarTransition atr = (AvatarTransition)(aspt.elementToExecute);
 			if (!(atr.hasDelay()) && !(atr.hasCompute()) && !(atr.hasActions())){
-				if (nbOfTransactions(aspt.asb, _pendingTransactions) < 2) {
-					return true;
-				}
+                if ((aspt.previouslyExecutedElement != null) && (aspt.previouslyExecutedElement.nbOfNexts() < 2)) {
+					if (nbOfTransactions(aspt.asb, _pendingTransactions) < 2) {
+						return true;
+					}
+                }
 			}
 			// State entering?
 		} else if (((aspt.elementToExecute instanceof AvatarState) ||  (aspt.elementToExecute instanceof AvatarStopState))) {
@@ -762,6 +764,7 @@ public class AvatarSpecificationSimulation  {
 				AvatarTransition atr = (AvatarTransition)(tr.elementToExecute);
 				if (!(atr.hasDelay()) && !(atr.hasCompute()) && !(atr.hasActions())){
 					if (nbOfTransactions(tr.asb, _pendingTransactions) < 2) {
+                          TraceManager.addDev("Setting to silent");
 						tr.isSilent = true;
 						return tr;
 					}
@@ -769,6 +772,7 @@ public class AvatarSpecificationSimulation  {
 			// State entering?
 			} else if (((tr.elementToExecute instanceof AvatarState) ||  (tr.elementToExecute instanceof AvatarStopState)) && (executeStateEntering)) {
 				if (nbOfTransactions(tr.asb, _pendingTransactions) < 2) {
+                     TraceManager.addDev("Setting to silent");
 					tr.isSilent = true;
 					return tr;
 				}
diff --git a/src/ui/interactivesimulation/GenericTransaction.java b/src/ui/interactivesimulation/GenericTransaction.java
index 17dca056266d8cb94642e80f77f73423cc52a4fc..d121a0f6771ef4582af7c0982464e743e0c96877 100755
--- a/src/ui/interactivesimulation/GenericTransaction.java
+++ b/src/ui/interactivesimulation/GenericTransaction.java
@@ -65,6 +65,7 @@ public class GenericTransaction  {
     public String entityName;
     public String otherEntityName; /*  name of destination in synchro, etc. */
     public String name; /* Used for channel names */
+    public String params; /* values separated with commas */
     public String action;
     public long startingTime;
     public long finishTime;
diff --git a/src/ui/interactivesimulation/JSimulationSDPanel.java b/src/ui/interactivesimulation/JSimulationSDPanel.java
index 4c797e152580632c787fa94ba0cef8b79359c0d5..f26d5e73a8641285789726a538dd622c8cb6f46d 100644
--- a/src/ui/interactivesimulation/JSimulationSDPanel.java
+++ b/src/ui/interactivesimulation/JSimulationSDPanel.java
@@ -360,7 +360,7 @@ public class JSimulationSDPanel extends JPanel implements MouseMotionListener, R
 		g.drawLine(currentX, currentY, currentX, currentY+verticalLink);
 		currentY += verticalLink;
 		
-		messageName = _gt.name + "(" + ")";
+		messageName = _gt.name + "(" + _gt.params + ")";
 		
 		Color c = g.getColor();
 		
@@ -775,6 +775,7 @@ public class JSimulationSDPanel extends JPanel implements MouseMotionListener, R
 			points.clear();
 			Thread t = new Thread(this);
 			t.start();
+            repaint();
 		}
 	}
 	
@@ -934,6 +935,11 @@ public class JSimulationSDPanel extends JPanel implements MouseMotionListener, R
 		if (tmp != null) {
 			gt.name = tmp;
 		}
+        
+        tmp = extract(trans, "params");
+		if (tmp != null) {
+			gt.params = tmp;
+		}
 		
 		transactions.add(gt);
 		TraceManager.addDev("One transactions added");