diff --git a/src/main/java/avatartranslator/AvatarRandom.java b/src/main/java/avatartranslator/AvatarRandom.java
index 581ccc0ffed668b8fb9640661fba3b76509da8f8..fdd3f463e64f7d3ca776226bdf703b3147b2a637 100644
--- a/src/main/java/avatartranslator/AvatarRandom.java
+++ b/src/main/java/avatartranslator/AvatarRandom.java
@@ -52,6 +52,9 @@ public class AvatarRandom extends AvatarStateMachineElement {
     protected String minValue;
     protected String maxValue;
 
+    protected String originalMinValue;
+    protected String originalMaxValue;
+
 
     public final static int RANDOM_UNIFORM_LAW = 0;
     public final static int RANDOM_TRIANGULAR_LAW = 1;
@@ -85,6 +88,19 @@ public class AvatarRandom extends AvatarStateMachineElement {
         return maxValue;
     }
 
+    public String getOriginalMinValue() {
+        return originalMinValue;
+    }
+
+    public String getOriginalMaxValue() {
+        return originalMaxValue;
+    }
+
+    public void setOriginalValues(String _min, String _max) {
+        originalMinValue = _min;
+        originalMaxValue = _max;
+    }
+
     public int getFunctionId() {
         return functionId;
     }
diff --git a/src/main/java/avatartranslator/AvatarSetTimer.java b/src/main/java/avatartranslator/AvatarSetTimer.java
index 4b59f161600e9c6252bdb343fa10abb95649aa9d..d940b0f586c24874355d60148ef203529e1b2613 100644
--- a/src/main/java/avatartranslator/AvatarSetTimer.java
+++ b/src/main/java/avatartranslator/AvatarSetTimer.java
@@ -49,7 +49,8 @@ package avatartranslator;
  */
 public class AvatarSetTimer extends AvatarTimerOperator {
 	protected String setValue;
-	
+	protected String originalSetValue;
+
     public AvatarSetTimer(String _name, Object _referenceObject, AvatarStateMachineOwner _block) {
 
 		super(_name, _referenceObject, _block);
@@ -62,6 +63,14 @@ public class AvatarSetTimer extends AvatarTimerOperator {
 	public String  getTimerValue() {
 		return setValue;
 	}
+
+	public void setTimerOriginalValue(String _setValue) {
+		originalSetValue = _setValue;
+	}
+
+	public String  getTimerOriginalValue() {
+		return originalSetValue;
+	}
 	
 	public AvatarStateMachineElement basicCloneMe(AvatarStateMachineOwner _block) {
 		AvatarSetTimer ast = new AvatarSetTimer(getName(), getReferenceObject(), _block);
diff --git a/src/main/java/ui/AvatarDesignPanelTranslator.java b/src/main/java/ui/AvatarDesignPanelTranslator.java
index 0976871065bdb09f50f6ef9532b4df9fbda4eec4..7fce6e230811dd8a8e24f46fcfb59430815c18cb 100644
--- a/src/main/java/ui/AvatarDesignPanelTranslator.java
+++ b/src/main/java/ui/AvatarDesignPanelTranslator.java
@@ -2093,6 +2093,8 @@ public class AvatarDesignPanelTranslator {
 
             final AvatarRandom arandom = (AvatarRandom) element;
 
+            arandom.setOriginalValues(asmdrand.getMinValue(), asmdrand.getMaxValue());
+
             String tmp1 = modifyString(asmdrand.getMinValue());
             int error = AvatarSyntaxChecker.isAValidIntExpr(_as, _ab, tmp1);
 
@@ -2158,6 +2160,7 @@ public class AvatarDesignPanelTranslator {
             final AvatarSetTimer asettimer = (AvatarSetTimer) element;
             asettimer.setTimer(aa);
             asettimer.setTimerValue(tmp);
+            asettimer.setTimerOriginalValue(asmdst.getTimerValue());
         } else {
             element = new AvatarDummyState(name, asmdst, _ab);
         }
diff --git a/src/main/java/ui/AvatarPanelDrawer.java b/src/main/java/ui/AvatarPanelDrawer.java
index e282249bd2780e04a3c762abd7e1895e194eab63..176e17608ae15e2f23c5fc272de97d495c44c4fa 100644
--- a/src/main/java/ui/AvatarPanelDrawer.java
+++ b/src/main/java/ui/AvatarPanelDrawer.java
@@ -174,15 +174,22 @@ public class AvatarPanelDrawer {
 						//}
 						abd.addComponent(bl, father.getX() + blockIncMap.get(ab.getFather()), father.getY() + 10, false, true);
 						int size = 100;
-						if (blockSizeMap.containsKey(ab)) {
-							size = 100 * blockSizeMap.get(ab) + 50;
+						if ((ab.getReferenceObject() != null) && (ab.getReferenceObject() instanceof CDElement)) {
+							CDElement cd = (CDElement) ab.getReferenceObject();
+							bl.setUserResize(cd.getX(), cd.getY(), cd.getWidth(), cd.getHeight());
+						} else {
+
+							if (blockSizeMap.containsKey(ab)) {
+								size = 100 * blockSizeMap.get(ab) + 50;
+							}
+							bl.resize(size, 100 + (maxLevel - level) * 50);
 						}
-						bl.resize(size, 100 + (maxLevel - level) * 50);
 						drawBlockProperties(avspec, ab, bl, useOriginalValuesFirst);
 						abd.attach(bl);
 						AvatarSMDPanel smp = adp.getAvatarSMDPanel(bl.getValue());
 						buildStateMachine(ab, bl, smp, useOriginalValuesFirst);
 						blockMap.put(bl.getValue().split("__")[bl.getValue().split("__").length - 1], bl);
+						size = bl.getWidth();
 						blockIncMap.put(ab.getFather(), blockIncMap.get(ab.getFather()) + size + 10);
 					}
 				}
@@ -586,7 +593,7 @@ public class AvatarPanelDrawer {
 				for (int i = 0; i < t.getOtherReferenceObjects().size(); i++) {
 					Object o = t.getOtherReferenceObjects().get(i);
 					if (o instanceof AvatarSMDTransitionInfo) {
-						TraceManager.addDev(" ----- Position transition x y width height");
+						//TraceManager.addDev(" ----- Position transition x y width height");
 						AvatarSMDTransitionInfo tInfo = (AvatarSMDTransitionInfo) o;
 						SMDCon.getAvatarSMDTransitionInfo().setMoveCd(tInfo.getX(), tInfo.getY(), true);
 						SMDCon.getAvatarSMDTransitionInfo().resize(tInfo.getWidth(), tInfo.getHeight());
@@ -648,9 +655,18 @@ public class AvatarPanelDrawer {
 		}
 		if (asme instanceof AvatarRandom) {
 			AvatarSMDRandom smdr = new AvatarSMDRandom(newX, newY, smp.getMinX(), smp.getMaxX(), smp.getMinY(), smp.getMaxY(), false, null, smp);
-			smdr.setVariable(((AvatarRandom) asme).getVariable());
-			smdr.setMinValue(((AvatarRandom) asme).getMinValue());
-			smdr.setMaxValue(((AvatarRandom) asme).getMaxValue());
+			AvatarRandom ar = (AvatarRandom) asme;
+			smdr.setVariable(ar.getVariable());
+			if (useOriginalValuesFirst && (ar.getOriginalMinValue() != null) && (ar.getOriginalMinValue().length() > 0)) {
+				smdr.setMinValue(ar.getOriginalMinValue());
+			} else {
+				smdr.setMinValue(ar.getMinValue());
+			}
+			if (useOriginalValuesFirst && (ar.getOriginalMaxValue() != null) && (ar.getOriginalMaxValue().length() > 0)) {
+				smdr.setMaxValue(ar.getOriginalMaxValue());
+			} else {
+				smdr.setMaxValue(ar.getMaxValue());
+			}
 			smp.addComponent(smdr, newX, newY, false, true);
 			if (tgc != null) smdr.resize(width, height);
 			tgcomp = smdr;
@@ -778,7 +794,13 @@ public class AvatarPanelDrawer {
 			AvatarSMDSetTimer timerSet = new AvatarSMDSetTimer(newX, newY, smp.getMinX(), smp.getMaxX(), smp.getMinY(), smp.getMaxY(), false, null,
 					smp);
 			AvatarSetTimer ast = (AvatarSetTimer) asme;
-			timerSet.setComplexValue(ast.getTimer().getName(), ast.getTimerValue());
+			String timerValue = ast.getTimerValue();
+			if (useOriginalValuesFirst) {
+				if ((ast.getTimerOriginalValue() != null) && (ast.getTimerOriginalValue().length() > 0)) {
+					timerValue = ast.getTimerOriginalValue();
+				}
+			}
+			timerSet.setComplexValue(ast.getTimer().getName(), timerValue);
 			tgcomp = timerSet;
 			SMDMap.put(asme, timerSet);
 			smp.addComponent(timerSet, newX, newY, false, true);