diff --git a/src/avatartranslator/AvatarBlockTemplate.java b/src/avatartranslator/AvatarBlockTemplate.java
index 9e1716c69307d7d3f80d5b97b1b60d57516784a3..76553ff0af08d72e456878d303db558a4887ddc2 100644
--- a/src/avatartranslator/AvatarBlockTemplate.java
+++ b/src/avatartranslator/AvatarBlockTemplate.java
@@ -112,7 +112,7 @@ public class AvatarBlockTemplate  {
 		
 		// expire
 		at = makeAvatarEmptyTransitionBetween(asm, as2, aaos5, _reference);
-		at.setDelays("value", "value");
+		at.setDelays("__value", "__value");
 		at = makeAvatarEmptyTransitionBetween(asm, aaos5, as1, _reference);
 		
 		// reset
diff --git a/src/avatartranslator/directsimulation/AvatarSimulationBlock.java b/src/avatartranslator/directsimulation/AvatarSimulationBlock.java
index a81fdb4fc3213becf475b0d7bad52c513e2982f9..d45fc863708a792aa149317224239685420ab35d 100644
--- a/src/avatartranslator/directsimulation/AvatarSimulationBlock.java
+++ b/src/avatartranslator/directsimulation/AvatarSimulationBlock.java
@@ -308,6 +308,21 @@ public class AvatarSimulationBlock  {
 				}
 			} 
 			
+			// Random?
+			if (_elt instanceof AvatarRandom) {
+				AvatarRandom random = (AvatarRandom)(_elt);
+				index = block.getIndexOfAvatarAttributeWithName(random.getVariable());
+				if (index >-1) {
+					int valMin = evaluateIntExpression(random.getMinValue(), attributeValues);
+					int valMax = evaluateIntExpression(random.getMaxValue(), attributeValues);
+					valMin = (int)(Math.floor((Math.random()*(valMax - valMin)))) + valMin;
+					attributeValues.remove(index);
+					attributeValues.add(index, "" + valMin);
+					ast.actions = new Vector<String>();
+					ast.actions.add(random.getVariable() + " = " + valMin);
+				}
+			} 
+			
 			// Action on signal?
 			if (_elt instanceof AvatarActionOnSignal) {
 				AvatarActionOnSignal aaos = (AvatarActionOnSignal)_elt;
diff --git a/src/ui/avatarinteractivesimulation/AvatarSpecificationSimulationSDPanel.java b/src/ui/avatarinteractivesimulation/AvatarSpecificationSimulationSDPanel.java
index f1eb462d3183e5f663cb994fcac4db8a4d9aed5b..20a3570755e1be78a68dda0a2c4dfd947bdf383e 100644
--- a/src/ui/avatarinteractivesimulation/AvatarSpecificationSimulationSDPanel.java
+++ b/src/ui/avatarinteractivesimulation/AvatarSpecificationSimulationSDPanel.java
@@ -79,6 +79,7 @@ public class AvatarSpecificationSimulationSDPanel extends JPanel  {
 	private int verticalSpaceUnderBlocks = 15;
 	private int spaceVerticalText = 2;
 	private int spaceHorizontalText = 2;
+	private int spaceStop = 20;
 	private int verticalLink = 10;
 	private int lengthAsync = 50;
 	
@@ -171,6 +172,12 @@ public class AvatarSpecificationSimulationSDPanel extends JPanel  {
 		Vector<AvatarSimulationTransaction> allTransactions = ass.getAllTransactions();
 		Vector<AvatarSimulationBlock> blocks = ass.getSimulationBlocks();
 		
+		if (allTransactions.size() > 0) {
+			ast = allTransactions.get(0);
+			clockValue = ast.clockValueWhenPerformed-ast.duration;
+			g.drawString("@" + clockValue, 10, currentY); 
+		}
+		
 		for(int i=Math.max(allTransactions.size()-drawnTransactions, 0); i<allTransactions.size(); i++) {
 			ast = allTransactions.get(i);
 			ast.stamp = stamp;
@@ -184,7 +191,11 @@ public class AvatarSpecificationSimulationSDPanel extends JPanel  {
 				newCurrentY = drawTransition(g, (AvatarTransition)(ast.executedElement), ast, xOfBlock, currentY); 
 			} else if (ast.executedElement instanceof AvatarActionOnSignal) {
 				newCurrentY = drawAvatarActionOnSignal(g, (AvatarActionOnSignal)(ast.executedElement), ast, xOfBlock, currentY, currentX); 
-			}
+			} else if (ast.executedElement instanceof AvatarStopState) {
+				newCurrentY = drawAvatarStopState(g, xOfBlock, currentY, currentX); 
+			} else if (ast.executedElement instanceof AvatarRandom) {
+				newCurrentY = drawRandom(g, (AvatarRandom)(ast.executedElement), ast, xOfBlock, currentY); 
+			} 
 			
 			
 			// Draw the line of other blocks
@@ -196,6 +207,10 @@ public class AvatarSpecificationSimulationSDPanel extends JPanel  {
 					}
 					xOfBlock += spaceBetweenLifeLines;
 				}
+				if (ast.clockValueWhenPerformed != clockValue) {
+					clockValue = ast.clockValueWhenPerformed;
+					g.drawString("@" + clockValue, 10, currentY); 
+				}
 			}
 			
 			// Update currentY;
@@ -267,7 +282,6 @@ public class AvatarSpecificationSimulationSDPanel extends JPanel  {
 			w = Math.max(g.getFontMetrics().stringWidth(action), w);
 		}
 		
-		
 		x = currentX - w/2 - spaceHorizontalText;
 		y = currentY;
 		width = w + 2*spaceHorizontalText;
@@ -294,6 +308,37 @@ public class AvatarSpecificationSimulationSDPanel extends JPanel  {
 		return currentY + verticalLink;
 	}
 	
+	private int drawRandom(Graphics g, AvatarRandom arandom, AvatarSimulationTransaction ast, int currentX, int currentY) {
+		int w;
+		int x, y, width, height;
+		Color c = g.getColor();
+		
+		if (ast.actions == null) {
+			return currentY;
+		}
+		
+		String action = ast.actions.get(0);
+		
+		g.drawLine(currentX, currentY, currentX, currentY+verticalLink);
+		currentY += verticalLink;
+		
+		w = g.getFontMetrics().stringWidth(action);
+		x = currentX - w/2 - spaceHorizontalText;
+		y = currentY;
+		width = w + 2*spaceHorizontalText;
+		height = g.getFontMetrics().getHeight() + spaceVerticalText * 2;
+		g.setColor(Color.WHITE);
+		g.fillRoundRect(x, y, width, height, 5, 5);
+		g.setColor(c);
+		g.drawRoundRect(x, y, width, height, 5, 5);
+		
+		g.drawString(action, x + spaceHorizontalText, y+height-2*spaceVerticalText);
+		
+		currentY += height;
+		g.drawLine(currentX, currentY, currentX, currentY+verticalLink);
+		return currentY + verticalLink;
+	}
+	
 	private int drawAvatarActionOnSignal(Graphics g, AvatarActionOnSignal aaos, AvatarSimulationTransaction ast, int currentX, int currentY, int startX) {
 		int w;
 		Color c = g.getColor();
@@ -369,7 +414,7 @@ public class AvatarSpecificationSimulationSDPanel extends JPanel  {
 							if (x + lengthAsync < currentX-lengthAsync) {
 								// Forward
 								g.setColor(ColorManager.AVATAR_RECEIVE_SIGNAL);
-								GraphicLib.dashedLine(g, x + lengthAsync, y-1, x + lengthAsync, currentY-1);
+								GraphicLib.dashedLine(g, x + lengthAsync - 1, y, x + lengthAsync-1, currentY);
 								GraphicLib.dashedLine(g, x + lengthAsync, currentY-1, currentX-lengthAsync, currentY-1);
 								g.setColor(c);
 								GraphicLib.dashedLine(g, x + lengthAsync, y, x + lengthAsync, currentY);
@@ -377,9 +422,9 @@ public class AvatarSpecificationSimulationSDPanel extends JPanel  {
 							} else {
 								// Backward
 								g.setColor(ColorManager.AVATAR_RECEIVE_SIGNAL);
-								GraphicLib.dashedLine(g, x + lengthAsync, y-1, x + lengthAsync, y+6);
+								GraphicLib.dashedLine(g, x + lengthAsync-1, y, x + lengthAsync-1, y+7);
 								GraphicLib.dashedLine(g, x + lengthAsync, y+6, currentX-lengthAsync, y+6);
-								GraphicLib.dashedLine(g, currentX-lengthAsync, currentY, currentX-lengthAsync, y+6);
+								GraphicLib.dashedLine(g, currentX-lengthAsync-1, currentY, currentX-lengthAsync-1, y+7);
 								g.setColor(c);
 								GraphicLib.dashedLine(g, x + lengthAsync, y, x + lengthAsync, y+7);
 								GraphicLib.dashedLine(g, x + lengthAsync, y+7, currentX-lengthAsync, y+7);
@@ -434,6 +479,24 @@ public class AvatarSpecificationSimulationSDPanel extends JPanel  {
 		
 	}
 	
+	private int drawAvatarStartState(Graphics g, int currentX, int currentY, int startX) {
+		currentX -= 7;
+		g.fillOval(currentX, currentY, 15, 15);
+		g.drawLine(currentX, currentY, currentX, currentY+20);
+		
+		currentY += 20;
+		return currentY;
+	}
+	
+	private int drawAvatarStopState(Graphics g, int currentX, int currentY, int startX) {
+		g.drawLine(currentX, currentY, currentX, currentY+spaceStop+3);
+		currentX -= (spaceStop/2);
+		g.drawLine(currentX, currentY, currentX+spaceStop, currentY+spaceStop);
+		g.drawLine(currentX, currentY+spaceStop, currentX+spaceStop, currentY);
+		currentY += spaceStop + 3;
+		return currentY;
+	}
+	
 	public void setNewSize() {
 		setPreferredSize(new Dimension(maxX + limit, maxY + limit));
 		mustScroll = true;