diff --git a/Makefile b/Makefile
index d3cc72cc16e54f41367eb99e0e185eee24372946..7aa38e5c2a3dcecaa8b71072823e8550ea72e9b5 100755
--- a/Makefile
+++ b/Makefile
@@ -24,6 +24,8 @@ TIFTRANSLATOR_BINARY = tiftranslator.jar
 TMLTRANSLATOR_BINARY = tmltranslator.jar
 RUNDSE_BINARY = rundse.jar
 REMOTESIMULATOR_BINARY = simulationcontrol.jar
+RUNDSE_BINARY = rundse.jar
+RUNDSE_JAR_TXT  = rundse.txt
 TTOOL_JAR_TXT = ttool.txt
 LAUNCHER_JAR_TXT = launcher.txt
 TIFTRANSLATOR_JAR_TXT = tiftranslator.txt
@@ -71,7 +73,7 @@ RELEASE_STD_FILES_WINDIWS_EXE = ttool_windows.bat
 
 RELEASE_STD_FILES_XML = manual-HW.xml DrinkMachineV10.xml WebV01.xml Protocol_example1.xml BasicExchange.xml SmartCardProtocol.xml ProtocolPatterns.xml COCOME_V50.xml CoffeeMachine_Avatar.xml Network_Avatar.xml
 RELEASE_STD_FILES_LIB =  TClock1.lib TTimerv01.lib
-RELEASE_STD_FILES_BIN = $(TTOOL_CONFIG) $(LAUNCHER_BINARY) $(TTOOL_BINARY) $(TIFTRANSLATOR_BINARY) $(TMLTRANSLATOR_BINARY) $(REMOTESIMULATOR_BINARY) 
+RELEASE_STD_FILES_BIN = $(TTOOL_CONFIG) $(LAUNCHER_BINARY) $(TTOOL_BINARY) $(TIFTRANSLATOR_BINARY) $(TMLTRANSLATOR_BINARY) $(REMOTESIMULATOR_BINARY) $(RUNDSE_BINARY) 
 RELEASE_STD_FILES_LICENSES = LICENSE LICENSE_CECILL_ENG LICENSE_CECILL_FR
 
 
@@ -125,7 +127,7 @@ remotesimulator:
 documentation:
 	$(JAVADOC) $(CLASSPATH) $(TTOOL_SRC) -d $(TTOOL_DOC_HTML) $(TTOOL_SRC)/*.java $(TTOOL_SRC)/*/*.java $(TTOOL_SRC)/*/*/*.java $(TTOOL_SRC)/fr/inria/oasis/vercors/cttool/model/*.java
 
-release: jttooljar launcher tiftranslator tmltranslator remotesimulator ttooljar_std stdrelease 
+release: jttooljar launcher tiftranslator tmltranslator rundse remotesimulator ttooljar_std stdrelease 
 	@echo release done
 
 ########## RELEASE
@@ -219,7 +221,8 @@ stdrelease:
 	cp $(TTOOL_DOC)/README_bin $(TTOOL_TARGET)/bin
 	cp $(TTOOL_BIN)/configuration.gcf $(TTOOL_TARGET)/bin
 	cp -R $(TTOOL_BIN)/$(TTOOL_LOTOS_H).h $(TTOOL_BIN)/$(TTOOL_LOTOS_H)_?.h $(TTOOL_BIN)/$(TTOOL_LOTOS_H)_?.t  $(TTOOL_BIN)/$(TTOOL_LOTOS_H)_?.f $(TTOOL_TARGET)/bin
-	cp $(TTOOL_BIN)/$(TTOOL_BINARY) $(TTOOL_BIN)/$(LAUNCHER_BINARY) $(TTOOL_BIN)/$(TIFTRANSLATOR_BINARY) $(TTOOL_BIN)/$(TMLTRANSLATOR_BINARY) $(TTOOL_BIN)/$(TTOOL_CONFIG_SRC) $(TTOOL_TARGET)/bin
+	cp $(TTOOL_BIN)/$(TTOOL_BINARY) $(TTOOL_BIN)/$(LAUNCHER_BINARY) $(TTOOL_BIN)/$(TIFTRANSLATOR_BINARY) $(TTOOL_BIN)/$(TMLTRANSLATOR_BINARY) $(TTOOL_BIN)/$(RUNDSE_BINARY) $(TTOOL_BIN)/$(TTOOL_CONFIG_SRC) $(TTOOL_TARGET)/bin
+	
 
 # Basic release
 	cd $(TTOOL_TARGET_RELEASE);$(TAR) cfv $(TTOOL_STD_RELEASE)/release.tar *; $(GZIP) -9 $(TTOOL_STD_RELEASE)/release.tar; mv $(TTOOL_STD_RELEASE)/release.tar.gz $(TTOOL_STD_RELEASE)/release.tgz
diff --git a/src/dseengine/DSEConfiguration.java b/src/dseengine/DSEConfiguration.java
index 5e438ec0b7540afc58e817265079fff42ee833bd..6cec678d96dcc6acd67a79e28a2a48e50c5c211a 100755
--- a/src/dseengine/DSEConfiguration.java
+++ b/src/dseengine/DSEConfiguration.java
@@ -101,6 +101,8 @@ public class DSEConfiguration  {
 	private int simulationExplorationMinimumCommand = 100;
 	private int simulationExplorationMinimumBranch = 100;
 	
+	private int simulationMaxCycles = -1;
+	
 	
 	
 	//private int nbOfSimulations;
@@ -276,6 +278,16 @@ public class DSEConfiguration  {
 		return 0;
 	}
 	
+	public int setSimulationMaxCycle(String _arguments) {
+		try {
+			simulationMaxCycles = Integer.decode(_arguments).intValue();
+		} catch (Exception e) {
+			errorMessage = INVALID_ARGUMENT_NATURAL_VALUE;
+			return -1;
+		}
+		return 0;
+	}
+	
 	public int runSimulation(String _arguments, boolean _debug, boolean _optimize) {
 		
 		// Checking for valid arguments
@@ -352,6 +364,11 @@ public class DSEConfiguration  {
 		String cmd;
 		while(nbOfSimulations >0) {
 			cmd = pathToSimulator + simulationExecutionCommand;
+			
+			if (simulationMaxCycles > -1) {
+				cmd += " -cmd \"1 5 " + simulationMaxCycles + "\"";
+			}
+			
 			if (outputVCD) {
 				cmd += " -ovcd " + pathToResults + "output" + simulationID + ".vcd";
 			}
@@ -441,7 +458,7 @@ public class DSEConfiguration  {
 		
 		
 		// Executing the simulation
-		String cmd = pathToSimulator + simulationExecutionCommand + " -cmd '1 7 " +simulationExplorationMinimumCommand + " " + simulationExplorationMinimumBranch + "'  -gpath " + pathToResults;
+		String cmd = pathToSimulator + simulationExecutionCommand + " -cmd \"1 7 " +simulationExplorationMinimumCommand + " " + simulationExplorationMinimumBranch + "\"  -gpath " + pathToResults;
 		
 		makeCommand(cmd);
 		simulationID ++;
@@ -454,6 +471,75 @@ public class DSEConfiguration  {
 		BufferedReader proc_in, proc_err;
         //PrintStream out = null;
         
+        try {
+            TraceManager.addDev("Going to start command " + cmd);
+			
+			ProcessBuilder pb = new ProcessBuilder(constructCommandList(cmd));
+			Map<String, String> env = pb.environment();
+			java.lang.Process proc = pb.start();
+            
+            proc_in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
+            proc_err = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
+            
+            //et = new ErrorThread(proc_err, mpi);
+            //et.start();
+            
+            while ((str = proc_in.readLine()) != null){    
+                TraceManager.addDev("Out " + str);
+                //mpi.appendOut(str+"\n");             
+            }
+            
+            //et.stopProcess();
+            
+        } catch (Exception e) {
+            TraceManager.addDev("Exception [" + e.getMessage() + "] occured when executing " + cmd);
+        }
+        TraceManager.addDev("Ending command " + cmd);
+		
+	}
+	
+	public List<String> constructCommandList(String _cmd) {
+		Vector<String> list = new Vector<String>();
+		_cmd = _cmd.trim();
+		char c;
+		String current = "";
+		boolean inQuote0 = false;
+		boolean inQuote1 = false;
+		
+		TraceManager.addDev("Making list from command : " + _cmd);
+		
+		for(int i=0; i<_cmd.length(); i++) {
+			c = _cmd.charAt(i);
+			
+			if ((c == ' ') && (!inQuote0) && (!inQuote1)){
+				TraceManager.addDev("Adding " + current);
+				list.add(current);
+				current = "";
+			} else if (c == '\'') {
+				inQuote1 = !inQuote1;
+			} else if (c == '\"') {
+				inQuote0 = !inQuote0;
+			} else {
+				current += c;
+			}
+			
+		}
+		
+		if (current.length() > 0) {
+			list.add(current);
+		}
+		
+		TraceManager.addDev("List done\n");
+		
+		return (List)list;
+		
+	}
+	
+	public void oldMakeCommand(String cmd) {
+		String str = null;
+		BufferedReader proc_in, proc_err;
+        //PrintStream out = null;
+        
         try {
             TraceManager.addDev("Going to start command " + cmd);
             
diff --git a/src/dseengine/DSEScriptReader.java b/src/dseengine/DSEScriptReader.java
index 923e1afe3e58503f2a6525abc47cd3362c1cdfd1..9d2d842c4f7e2defb6ad51cec7947950ce5b8554 100755
--- a/src/dseengine/DSEScriptReader.java
+++ b/src/dseengine/DSEScriptReader.java
@@ -77,7 +77,7 @@ public class DSEScriptReader  {
 	"simulationCompilationCommand", "simulationExecutionCommand", // 6, 7
 	"SimulationOutputHTML", "SimulationOutputTxt", // 8, 9
 	"SimulationExplorationMinimumCommand", "SimulationExplorationMinimumBranch", // 10, 11 
-	"RunExplo"
+	"RunExplo", "SimulationMaxCycle" //12, 13
 	};
 	
 	private String fileName;
@@ -251,6 +251,11 @@ public class DSEScriptReader  {
 					return ERROR_WHEN_RUNNING;
 				}
 				return OK;
+			case 13:
+				if (_config.setSimulationMaxCycle(_arguments) != 0) {
+					return SYNTAX_ERROR_IN_LINE;
+				}
+				return OK;
 			
 		}
 		
diff --git a/src/rundse.txt b/src/rundse.txt
index 18e66503cd6d4de0cbbbfb608a66e099d2efef45..b9478065e6b61d6c40c2a97da9f4bc2fa8b5aca4 100755
--- a/src/rundse.txt
+++ b/src/rundse.txt
@@ -1 +1 @@
-Main-Class: RunDSE
+Main-Class: runDSE
diff --git a/src/ui/IconManager.java b/src/ui/IconManager.java
index 7969b06e0c6997c79db9a7899da82e08390247b6..a111372d1673ee51d9ec5206425c5c34e008072d 100755
--- a/src/ui/IconManager.java
+++ b/src/ui/IconManager.java
@@ -110,7 +110,7 @@ public class IconManager {
     public static ImageIcon imgic900, imgic902, imgic904, imgic906, imgic908, imgic910, imgic912, imgic914, imgic916, imgic918;
 	public static ImageIcon imgic920, imgic922, imgic924, imgic926, imgic928, imgic930;    
     // Requirement diagrams
-    public static ImageIcon imgic1000, imgic1002, imgic1004,imgic1006,imgic1008, imgic1010, imgic1012, imgic1014;
+    public static ImageIcon imgic1000, imgic1002, imgic1004,imgic1006,imgic1008, imgic1010, imgic1012, imgic1014, imgic1016;
 	public static ImageIcon imgic1050, imgic1052, imgic1054,imgic1056, imgic1058, imgic1060;
 	
 	// Attack Tree Diagrams
@@ -430,6 +430,7 @@ public class IconManager {
 	private static String icon1010 = "images/reqcopy.gif";
 	private static String icon1012 = "images/reqcomp.gif";
 	private static String icon1014 = "images/ebrddobs.gif";
+	private static String icon1016 = "images/reqref.gif";
 	
 	
 	// EBRDD
@@ -789,6 +790,7 @@ public class IconManager {
 		imgic1010 = getIcon(icon1010);
 		imgic1012 = getIcon(icon1012);
 		imgic1014 = getIcon(icon1014);
+		imgic1016 = getIcon(icon1016);
 		
 		imgic1050 = getIcon(icon1050);
         imgic1052 = getIcon(icon1052);
diff --git a/src/ui/MainGUI.java b/src/ui/MainGUI.java
index 3793fb358db28f285ce85e077d33641fa367b039..8932070823d88a43962b1fdb573bfe83832a6da8 100755
--- a/src/ui/MainGUI.java
+++ b/src/ui/MainGUI.java
@@ -6429,6 +6429,8 @@ public	class MainGUI implements ActionListener, WindowListener, KeyListener {
             actionOnButton(TGComponentManager.COMPONENT, TGComponentManager.AVATARRD_PROPERTY);
 		} else if (command.equals(actions[TGUIAction.ARD_DERIVE_CONNECTOR].getActionCommand())) {
             actionOnButton(TGComponentManager.CONNECTOR, TGComponentManager.AVATARRD_DERIVE_CONNECTOR);
+		} else if (command.equals(actions[TGUIAction.ARD_REFINE_CONNECTOR].getActionCommand())) {
+            actionOnButton(TGComponentManager.CONNECTOR, TGComponentManager.AVATARRD_REFINE_CONNECTOR);
 		} else if (command.equals(actions[TGUIAction.ARD_VERIFY_CONNECTOR].getActionCommand())) {
             actionOnButton(TGComponentManager.CONNECTOR, TGComponentManager.AVATARRD_VERIFY_CONNECTOR);
 		} else if (command.equals(actions[TGUIAction.ARD_COPY_CONNECTOR].getActionCommand())) {
diff --git a/src/ui/TGComponentManager.java b/src/ui/TGComponentManager.java
index 3f2c44ea065fa31306b385826891c8ae05d1fbf1..7e6ede00f19b1e3ff7eaa8cf6513b29139271d3a 100755
--- a/src/ui/TGComponentManager.java
+++ b/src/ui/TGComponentManager.java
@@ -315,7 +315,8 @@ public class TGComponentManager {
 	// AVATAR RD -> starts at 5200
 	public static final int AVATARRD_REQUIREMENT = 5200;
     public static final int AVATARRD_PROPERTY = 5201;
-	public static final int AVATARRD_DERIVE_CONNECTOR = 5202;  
+	public static final int AVATARRD_DERIVE_CONNECTOR = 5202; 
+	public static final int AVATARRD_REFINE_CONNECTOR = 5206;  
 	public static final int AVATARRD_VERIFY_CONNECTOR = 5203;
 	public static final int AVATARRD_COPY_CONNECTOR = 5204;
 	public static final int AVATARRD_COMPOSITION_CONNECTOR = 5205;
@@ -897,6 +898,8 @@ public class TGComponentManager {
 			return AVATARRD_PROPERTY;
 		} else if (tgc instanceof AvatarRDDeriveConnector) {
 			return AVATARRD_DERIVE_CONNECTOR;
+		} else if (tgc instanceof AvatarRDRefineConnector) {
+			return AVATARRD_REFINE_CONNECTOR;
 		} else if (tgc instanceof AvatarRDVerifyConnector) {
 			return AVATARRD_VERIFY_CONNECTOR;
 		} else if (tgc instanceof AvatarRDCopyConnector) {
@@ -1305,6 +1308,9 @@ public class TGComponentManager {
 			// AVATAR RD
 			case AVATARRD_DERIVE_CONNECTOR:
                 tgc = new AvatarRDDeriveConnector(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp, p1, p2, listPoint);
+                break;
+			case AVATARRD_REFINE_CONNECTOR:
+                tgc = new AvatarRDRefineConnector(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp, p1, p2, listPoint);
                 break;
 			case AVATARRD_VERIFY_CONNECTOR:
                 tgc = new AvatarRDVerifyConnector(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp, p1, p2, listPoint);
diff --git a/src/ui/TGUIAction.java b/src/ui/TGUIAction.java
index 366913fa85283b9dbce058e09b70abd3c2af1900..030dd6920da9be976bf8c6bec61fc5b28833cfa5 100755
--- a/src/ui/TGUIAction.java
+++ b/src/ui/TGUIAction.java
@@ -326,6 +326,7 @@ public class TGUIAction extends AbstractAction {
 	public static final int ARD_PROPERTY = 302;
 	public static final int ARD_VERIFY_CONNECTOR = 303;
 	public static final int ARD_DERIVE_CONNECTOR = 304;
+	public static final int ARD_REFINE_CONNECTOR = 343;
 	public static final int ARD_COPY_CONNECTOR = 305;
 	public static final int ARD_COMPOSITION_CONNECTOR = 306;
     
@@ -463,7 +464,7 @@ public class TGUIAction extends AbstractAction {
     //Action for the help button created by Solange
     public static final int PRUEBA_1 = 205;
 
-    public static final int NB_ACTION = 343;
+    public static final int NB_ACTION = 344;
 
     private  static final TAction [] actions = new TAction[NB_ACTION];
     
@@ -886,9 +887,10 @@ public class TGUIAction extends AbstractAction {
         actions[ARD_REQUIREMENT] = new TAction("add-ard-requirement", "Add a requirement", IconManager.imgic5006, IconManager.imgic5006, "Requirement", "Add a requirement to the currently opened avatar requirement diagram", 0);
         actions[ARD_PROPERTY] = new TAction("add-ard-property", "Add a property", IconManager.imgic5008, IconManager.imgic5008, "Property", "Add a reference to a property of the currently opened avatar requirement diagram", 0);
         actions[ARD_DERIVE_CONNECTOR] = new TAction("add-ard-derive", "Add a <<deriveReqt>> link", IconManager.imgic1008, IconManager.imgic1008, "DeriveReqt", "Add a <<deriveReqt>> link between two requirements of the currently opened avatar requirement diagram", 0);
+         actions[ARD_REFINE_CONNECTOR] = new TAction("add-ard-refine", "Add a <<refine>> link", IconManager.imgic1016, IconManager.imgic1016, "refine", "Add a <<refine>> link between two requirements of the currently opened avatar requirement diagram", 0);
         actions[ARD_VERIFY_CONNECTOR] = new TAction("add-ard-verify", "Add a <<verify>> link", IconManager.imgic1006, IconManager.imgic1006, "Verify", "Add a <<verify>> link between an observer and a requirement of the currently opened avatar requirement diagram", 0);
 		actions[ARD_COPY_CONNECTOR] = new TAction("add-ard-copy", "Add a <<copy>> link", IconManager.imgic1010, IconManager.imgic1010, "Copy", "Add a <<copy>> link between two requirements of the currently opened avatar requirement diagram", 0);
-        actions[ARD_COMPOSITION_CONNECTOR] = new TAction("add-ard-composition", "Add a <<derive>> link", IconManager.imgic1012, IconManager.imgic1012, "Composition", "Add a <<copy>> link between two requirements of the currently opened avatar requirement diagram", 0);
+        actions[ARD_COMPOSITION_CONNECTOR] = new TAction("add-ard-composition", "Add a  composition link", IconManager.imgic1012, IconManager.imgic1012, "Composition", "Add a composition link between two requirements of the currently opened avatar requirement diagram", 0);
         
 		// AVATAR Parametric Diagrams
 		actions[APD_EDIT] = new TAction("edit-apd-diagram", "Edit AVATAR Parametric Diagrams", IconManager.imgic100, IconManager.imgic101, "Edit AVATAR Parametric Diagram", "Make it possible to edit the currently opened AVATAR Parametric Diagram", 0);
diff --git a/src/ui/avatarrd/AvatarRDConnectingPointDerive.java b/src/ui/avatarrd/AvatarRDConnectingPointDerive.java
index 2dc5287fe052430ee29d71504965a019cfefe859..6bd62afcb40785372cac42e44a586a39d6b09b2e 100755
--- a/src/ui/avatarrd/AvatarRDConnectingPointDerive.java
+++ b/src/ui/avatarrd/AvatarRDConnectingPointDerive.java
@@ -73,6 +73,12 @@ public class AvatarRDConnectingPointDerive extends  TGConnectingPointWidthHeight
             //System.out.println("is compatible with:true");
             return true;
         }
+		
+		if (type == TGComponentManager.AVATARRD_REFINE_CONNECTOR) {
+            //System.out.println("is compatible with:true");
+            return true;
+        }
+        //System.out.pr
         //System.out.println("is compatible with:false");
         return false;
     }
diff --git a/src/ui/avatarrd/AvatarRDRefineConnector.java b/src/ui/avatarrd/AvatarRDRefineConnector.java
new file mode 100755
index 0000000000000000000000000000000000000000..01307813543cdcb3a15596156d5efa0c82393378
--- /dev/null
+++ b/src/ui/avatarrd/AvatarRDRefineConnector.java
@@ -0,0 +1,106 @@
+/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ *
+ * ludovic.apvrille AT enst.fr
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ *
+ * /**
+ * Class AvatarRDDeriveConnector
+ * Connector to be used in Avatar RD. Connects two requirements
+ * Creation: 20/04/2010
+ * @version 1.0 20/04/2010
+ * @author Ludovic APVRILLE
+ * @see
+ */
+
+package ui.avatarrd;
+
+import java.awt.*;
+//import java.awt.geom.*;
+import java.util.*;
+
+import myutil.*;
+
+import ui.*;
+
+public  class AvatarRDRefineConnector extends TGConnectorWithCommentConnectionPoints {
+    int w, h;
+    
+    public AvatarRDRefineConnector(int _x, int _y, int _minX, int _minY, int _maxX, int _maxY, boolean _pos, TGComponent _father, TDiagramPanel _tdp, TGConnectingPoint _p1, TGConnectingPoint _p2, Vector _listPoint) {
+        super(_x, _y,  _minX, _minY, _maxX, _maxY, _pos, _father, _tdp, _p1, _p2, _listPoint);
+        value = "<<refine>>";
+		
+		myImageIcon = IconManager.imgic1008;
+    }
+    
+    
+    protected void drawLastSegment(Graphics g, int x1, int y1, int x2, int y2){
+		 
+        //g.drawLine(x1, y1, x2, y2);
+        GraphicLib.dashedArrowWithLine(g, 1, 1, 0, x1, y1, x2, y2, false);
+        
+        // Indicate semantics
+		
+		Font f = g.getFont();
+		Font old = f;
+		if (f.getSize() != tdp.getFontSize()) {
+			f = f.deriveFont((float)tdp.getFontSize());
+			g.setFont(f);
+		}
+		
+        w  = g.getFontMetrics().stringWidth(value);
+        h = g.getFontMetrics().getHeight();
+        g.drawString(value, (x1 + x2 - w) / 2, (y1 + y2)/2);
+		g.setFont(old);
+    }
+    
+    public TGComponent extraIsOnOnlyMe(int x1, int y1) {
+        if (GraphicLib.isInRectangle(x1, y1, (p1.getX() + p2.getX() - w) / 2, (p1.getY() + p2.getY())/2 - h, w, h)) {
+            return this;
+        }
+        return null;
+    }
+    
+    public int getType() {
+        return TGComponentManager.AVATARRD_REFINE_CONNECTOR;
+    }
+    
+}
+
+
+
+
+
+
+
diff --git a/src/ui/avatarrd/AvatarRDToolBar.java b/src/ui/avatarrd/AvatarRDToolBar.java
index 558bc9fb6cf1a73d70bcb2c4ad5cebeededdcc97..ffa78ac938f862b4516ef74e971aa073d359f7a0 100755
--- a/src/ui/avatarrd/AvatarRDToolBar.java
+++ b/src/ui/avatarrd/AvatarRDToolBar.java
@@ -73,6 +73,7 @@ public class AvatarRDToolBar extends TToolBar {
         mgui.actions[TGUIAction.ARD_PROPERTY].setEnabled(b);
         mgui.actions[TGUIAction.ARD_VERIFY_CONNECTOR].setEnabled(b);
         mgui.actions[TGUIAction.ARD_DERIVE_CONNECTOR].setEnabled(b);
+		mgui.actions[TGUIAction.ARD_REFINE_CONNECTOR].setEnabled(b);
 		mgui.actions[TGUIAction.ARD_COPY_CONNECTOR].setEnabled(b);
 		mgui.actions[TGUIAction.ARD_COMPOSITION_CONNECTOR].setEnabled(b);
 		
@@ -116,6 +117,11 @@ public class AvatarRDToolBar extends TToolBar {
         button.addMouseListener(mgui.mouseHandler);
 		
 		this.addSeparator();
+		
+		button = this.add(mgui.actions[TGUIAction.ARD_REFINE_CONNECTOR]);
+        button.addMouseListener(mgui.mouseHandler);
+		
+		this.addSeparator();
         
         button = this.add(mgui.actions[TGUIAction.ARD_VERIFY_CONNECTOR]);
         button.addMouseListener(mgui.mouseHandler);
diff --git a/src/ui/avatarsmd/AvatarSMDState.java b/src/ui/avatarsmd/AvatarSMDState.java
index 20d1a813e7358cb3533e73312e7e69ece29a6892..685c0a3f775b2d1b6b8e608a11bf47ffdfc23bac 100644
--- a/src/ui/avatarsmd/AvatarSMDState.java
+++ b/src/ui/avatarsmd/AvatarSMDState.java
@@ -77,8 +77,8 @@ public class AvatarSMDState extends TGCScalableWithInternalComponent implements
         minWidth = 40;
         minHeight = 30;
         
-        nbConnectingPoint = 16;
-        connectingPoint = new TGConnectingPoint[16];
+        nbConnectingPoint = 32;
+        connectingPoint = new TGConnectingPoint[32];
         
         connectingPoint[0] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.0, 0.0);
         connectingPoint[1] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.5, 0.0);
@@ -97,6 +97,31 @@ public class AvatarSMDState extends TGCScalableWithInternalComponent implements
         connectingPoint[13] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 1.0, 0.75);
         connectingPoint[14] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.25, 1.0);
         connectingPoint[15] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.75, 1.0);
+		
+		connectingPoint[16] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.12, 0.0);
+		connectingPoint[17] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.37, 0.0);
+		
+        connectingPoint[18] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.62, 0.0);
+		connectingPoint[19] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.87, 0.0);
+		
+        connectingPoint[20] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.0, 0.12);
+		connectingPoint[21] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.0, 0.37);
+		
+        connectingPoint[22] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 1.0, 0.12);
+		connectingPoint[23] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 1.0, 0.37);
+		
+        connectingPoint[24] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.0, 0.62);
+		connectingPoint[25] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.0, 0.87);
+		
+        connectingPoint[26] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 1.0, 0.62);
+		connectingPoint[27] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 1.0, 0.87);
+		 
+        connectingPoint[28] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.12, 1.0);
+		connectingPoint[29] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.37, 1.0);
+		
+        connectingPoint[30] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.62, 1.0);
+		 connectingPoint[31] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.87, 1.0);
+
         
         addTGConnectingPointsComment();
         
diff --git a/src/ui/images/reqref.gif b/src/ui/images/reqref.gif
new file mode 100644
index 0000000000000000000000000000000000000000..1fc0cb7e039419d196b0d78605e8079ef5509204
Binary files /dev/null and b/src/ui/images/reqref.gif differ