diff --git a/src/req/ebrdd/EBRDD.java b/src/req/ebrdd/EBRDD.java
index 75623fe36e752c6f8130c20efda228ee754c9c41..c3901b307c664ea1f1578e93e90c7c29fbaa5b5c 100644
--- a/src/req/ebrdd/EBRDD.java
+++ b/src/req/ebrdd/EBRDD.java
@@ -61,7 +61,7 @@ public class EBRDD extends ArrayList<EBRDDComponent> {
     
     public EBRDD(String _name) {
 		name = _name;
-        ads = new EBRDDStart();
+        ads = new EBRDDStart("Start", null);
         add(ads);
     }
 	
@@ -112,7 +112,7 @@ public class EBRDD extends ArrayList<EBRDDComponent> {
         for (i=0; i<size(); i++) {
             ad1 = get(i);
             for(j=0; j<ad1.getNbNext(); j++) {
-                if (ad1.getNext(j) == ad) {
+                if (ad1.getNextElement(j) == ad) {
                     return ad1;
                 }
             }
@@ -141,21 +141,21 @@ public class EBRDD extends ArrayList<EBRDDComponent> {
 			((EBRDDERC)elt).exploreString(((EBRDDERC)elt).getRoot(), sb, tabLevel+1);
 		}
 		
-		if (elt.getRealNbOfNext() == 0) {
+		if (elt.getNbNext() == 0) {
 			return;
 		}
-		if (elt.getRealNbOfNext() == 1) {
-			exploreString(elt.getNext(0), sb, tabLevel);
+		if (elt.getNbNext() == 1) {
+			exploreString(elt.getNextElement(0), sb, tabLevel);
 			return;
 		}
 		
 		tabLevel ++;
-		for(int i=0; i<elt.getRealNbOfNext(); i++) {
+		for(int i=0; i<elt.getNbNext(); i++) {
 			for(j=0; j<tabLevel; j++) {
 				sb.append("\t");
 			}
 			sb.append("#" + i + ":\n");
-			exploreString(elt.getNext(i), sb, tabLevel+1);
+			exploreString(elt.getNextElement(i), sb, tabLevel+1);
 		}
 	}
     
diff --git a/src/req/ebrdd/EBRDDActionState.java b/src/req/ebrdd/EBRDDActionState.java
index 2f04aaeee9e0495675b19bfd9f34a695603f5fdf..61d6a2e21a8914a49709dc124230bc324d022414 100644
--- a/src/req/ebrdd/EBRDDActionState.java
+++ b/src/req/ebrdd/EBRDDActionState.java
@@ -50,7 +50,8 @@ package req.ebrdd;
 public class EBRDDActionState extends EBRDDComponent {
     protected String action;
 	
-    public EBRDDActionState() {
+    public EBRDDActionState(String _name, Object _referenceObject) {
+		super(_name, _referenceObject);
     }
     
     public String toString() {
diff --git a/src/req/ebrdd/EBRDDChoice.java b/src/req/ebrdd/EBRDDChoice.java
index 50b98444ff6214fc7dec57613075cf57d7952431..22d0912ec51ca1339fbb7b1d89a4bd79976899b6 100755
--- a/src/req/ebrdd/EBRDDChoice.java
+++ b/src/req/ebrdd/EBRDDChoice.java
@@ -52,7 +52,8 @@ import myutil.*;
 public class EBRDDChoice extends EBRDDComponent {
     private ArrayList<String> guards;
     
-    public EBRDDChoice() {
+    public EBRDDChoice(String _name, Object _referenceObject) {
+		super(_name, _referenceObject);
         nbNext = -1;
         guards = new ArrayList<String>();
     }
@@ -147,7 +148,7 @@ public class EBRDDChoice extends EBRDDComponent {
         // Put else at the end
         index = getElseGuard();
         if ((index > -1) && (index != (getNbGuard() - 1))) {
-            next = getNext(index);
+            next = getNextElement(index);
             guard = getGuard(index);
             guards.remove(index);
 			removeNext(index);
diff --git a/src/req/ebrdd/EBRDDComponent.java b/src/req/ebrdd/EBRDDComponent.java
index 4e24ca4bccaf77187a0f8cc9f6bfb4e4637d0a41..99f487464bb32b3b99dec3217b2b8401a8ca0ae6 100644
--- a/src/req/ebrdd/EBRDDComponent.java
+++ b/src/req/ebrdd/EBRDDComponent.java
@@ -52,12 +52,13 @@ public abstract class EBRDDComponent extends EBRDDGeneralComponent implements Cl
     protected ArrayList<EBRDDComponent> nexts;
 
     
-    public EBRDDComponent() {
+    public EBRDDComponent(String _name, Object _referenceObject) {
+		super(_name, _referenceObject);
         nexts = new ArrayList<EBRDDComponent>();
     }
     
     
-    public EBRDDComponent getNext(int index) {
+    public EBRDDComponent getNextElement(int index) {
         if (index < nexts.size()) {
             return nexts.get(index);
         } else {
@@ -65,19 +66,15 @@ public abstract class EBRDDComponent extends EBRDDGeneralComponent implements Cl
         }
     }
     
-    public int getRealNbOfNext() {
+    public int getNbNext() {
         return  nexts.size();
     }
     
-    public int getNbNext() {
+    public int getNormalizedNbNext() {
         return  nbNext;
     }
     
-    public int realNbOfNext() {
-        return nexts.size();
-    }
-    
-    public ArrayList<EBRDDComponent> getAllNext() {
+    public ArrayList<EBRDDComponent> getNexts() {
         return nexts;
     }
 	
diff --git a/src/req/ebrdd/EBRDDERC.java b/src/req/ebrdd/EBRDDERC.java
index 3e03ea4098dc2190545209a130770242dbbe5595..c746af2772f903d423c05753b51b5e5fb0fb398c 100644
--- a/src/req/ebrdd/EBRDDERC.java
+++ b/src/req/ebrdd/EBRDDERC.java
@@ -52,7 +52,8 @@ public class EBRDDERC extends EBRDDComponent {
 	protected ArrayList<ERCElement> treeElements;
 	protected ESO root;
 	
-    public EBRDDERC() {
+    public EBRDDERC(String _name, Object _referenceObject) {
+		super(_name, _referenceObject);
 		treeElements = new ArrayList<ERCElement>();
     }
     
@@ -98,7 +99,7 @@ public class EBRDDERC extends EBRDDComponent {
 			
 			// Must add a new ESO
 			System.out.println("Default ESO added to ERC");
-			ESO eso = new ESO();
+			ESO eso = new ESO("ESO", null);
 			eso.addSon(elt);
 			addTreeElement(eso);
 			setRoot(eso);
diff --git a/src/req/ebrdd/EBRDDGeneralComponent.java b/src/req/ebrdd/EBRDDGeneralComponent.java
index 026d954fc8d11546c053ecd44028babd8605d184..771806f57048969c09b18df5d9819ea32ea6e76f 100644
--- a/src/req/ebrdd/EBRDDGeneralComponent.java
+++ b/src/req/ebrdd/EBRDDGeneralComponent.java
@@ -47,9 +47,23 @@ package req.ebrdd;
 
 import java.util.*;
 
-public abstract class EBRDDGeneralComponent  {
- 
-    public EBRDDGeneralComponent() {
+import tmltranslator.*;
+
+public abstract class EBRDDGeneralComponent extends DIPLOElement  {
+	protected Object referenceObject;
+    protected String name;
+    
+    public EBRDDGeneralComponent(String _name, Object _referenceObject) {
+        name = _name;
+        referenceObject = _referenceObject;
+    }
+    
+    public String getName() {
+        return name;
+    }
+    
+    public Object getReferenceObject() {
+        return referenceObject;
     }
     
 
diff --git a/src/req/ebrdd/EBRDDLoop.java b/src/req/ebrdd/EBRDDLoop.java
index 3e10bb503d3b47eb28935d1a93603a1687f6542c..3218084b5a66f47774d8e3ffe6d1eeed4bf1e460 100755
--- a/src/req/ebrdd/EBRDDLoop.java
+++ b/src/req/ebrdd/EBRDDLoop.java
@@ -52,7 +52,8 @@ public class EBRDDLoop extends EBRDDComponent {
     
     private String init, condition, increment;
     
-    public EBRDDLoop() {
+    public EBRDDLoop(String _name, Object _referenceObject) {
+		super(_name, _referenceObject);
 		nbNext = 2;
     }
     
diff --git a/src/req/ebrdd/EBRDDSequence.java b/src/req/ebrdd/EBRDDSequence.java
index dfdf1383e2835bb0b7ee04f0f4e964fbd251695c..ea81c08a5d7dc7b6b0ac29144bdbe40bb990aba6 100644
--- a/src/req/ebrdd/EBRDDSequence.java
+++ b/src/req/ebrdd/EBRDDSequence.java
@@ -51,7 +51,8 @@ import java.util.*;
 public class EBRDDSequence extends EBRDDComponent{
     private Vector indexes;
     
-    public EBRDDSequence() {
+    public EBRDDSequence(String _name, Object _referenceObject) {
+		super(_name, _referenceObject);
 		 nbNext = -1;
          indexes = new Vector();
     }
diff --git a/src/req/ebrdd/EBRDDStart.java b/src/req/ebrdd/EBRDDStart.java
index 62440af46f4b0795a96b10ffea99679b0f3e04bd..ee3414df1984d1cb379c0219687818e5cf8f798e 100644
--- a/src/req/ebrdd/EBRDDStart.java
+++ b/src/req/ebrdd/EBRDDStart.java
@@ -49,7 +49,8 @@ package req.ebrdd;
 
 public class EBRDDStart extends EBRDDComponent {
     
-    public EBRDDStart() {
+    public EBRDDStart(String _name, Object _referenceObject) {
+		super(_name, _referenceObject);
         nbNext = 1;
     }
     
diff --git a/src/req/ebrdd/EBRDDStop.java b/src/req/ebrdd/EBRDDStop.java
index c78b902d50017cbc8584f2a1a466caac58353f38..5faf822f4627090889894ff3d356b91413ee1efb 100644
--- a/src/req/ebrdd/EBRDDStop.java
+++ b/src/req/ebrdd/EBRDDStop.java
@@ -49,7 +49,8 @@ package req.ebrdd;
 
 public class EBRDDStop extends EBRDDComponent {
     
-    public EBRDDStop() {
+    public EBRDDStop(String _name, Object _referenceObject) {
+		super(_name, _referenceObject);
         nbNext = 0;
     }
     
diff --git a/src/req/ebrdd/ERB.java b/src/req/ebrdd/ERB.java
index 082506139cc3ef3cf9fcc80f27a7f8ca845fd1a5..8b667702ed3864217d392144974633d1e8eedcec 100644
--- a/src/req/ebrdd/ERB.java
+++ b/src/req/ebrdd/ERB.java
@@ -52,7 +52,8 @@ public class ERB extends ERCElement  {
 	
 	protected String evt, condition, action; 
     
-    public ERB() {
+    public ERB(String _name, Object _referenceObject) {
+		super(_name, _referenceObject);
     }
 	
 	public void setEvent(String _evt) {
diff --git a/src/req/ebrdd/ERCElement.java b/src/req/ebrdd/ERCElement.java
index ec71bf3383431f6336ea790e2ae423603d6d77cf..5334b68e99fec620dde989d835046b9c22421301 100644
--- a/src/req/ebrdd/ERCElement.java
+++ b/src/req/ebrdd/ERCElement.java
@@ -50,7 +50,8 @@ import java.util.*;
 public abstract class ERCElement extends EBRDDGeneralComponent implements Cloneable {
     protected boolean negated;
 	
-    public ERCElement() {
+    public ERCElement(String _name, Object _referenceObject) {
+		super(_name, _referenceObject);
     }
     
 	public void setNegated(boolean _negated) {
diff --git a/src/req/ebrdd/ESO.java b/src/req/ebrdd/ESO.java
index 56676c27ed3d396dcbbeed610242889f0283a137..4ef1fd7700b406d7a4ee534b167c2f543a260e60 100644
--- a/src/req/ebrdd/ESO.java
+++ b/src/req/ebrdd/ESO.java
@@ -59,7 +59,8 @@ public class ESO extends ERCElement {
 	private Vector indexes;
 	
     
-    public ESO() {
+    public ESO(String _name, Object _referenceObject) {
+		super(_name, _referenceObject);
         sons = new ArrayList<ERCElement>();
 		indexes = new Vector();
     }
diff --git a/src/ui/EBRDDTranslator.java b/src/ui/EBRDDTranslator.java
index 239a1dae613272711628bd11e73e54ad995dc2db..e25b79d45c362d47940578ef37c7324af7dea8ff 100755
--- a/src/ui/EBRDDTranslator.java
+++ b/src/ui/EBRDDTranslator.java
@@ -141,41 +141,44 @@ public class EBRDDTranslator {
 		ERB erb;
 		int i;
 		
+		int cpt=0;
+		
 		start = ebrdd.getStartState();
 		listE.addCor(start, tss);
 		
 		// Creation of other elements
 		iterator = list.listIterator();
 		while(iterator.hasNext()) {
+			cpt++;
 			tgc = (TGComponent)(iterator.next());
 			
 			// Action
 			if (tgc instanceof ui.ebrdd.EBRDDActionState) {
-				acst = new req.ebrdd.EBRDDActionState();
+				acst = new req.ebrdd.EBRDDActionState("Action state"+cpt, tgc);
 				acst.setAction(((ui.ebrdd.EBRDDActionState)tgc).getAction());
 				listE.addCor(acst, tgc);
 				
 				// Stop
 			} else if (tgc instanceof ui.ebrdd.EBRDDStopState) {
-				stop = new req.ebrdd.EBRDDStop();
+				stop = new req.ebrdd.EBRDDStop("Stop"+cpt, tgc);
 				listE.addCor(stop, tgc);
 				
 				// Choice	
 			} else if (tgc instanceof ui.ebrdd.EBRDDChoice) {
 				// guards are added later on
-				ch = new req.ebrdd.EBRDDChoice();
+				ch = new req.ebrdd.EBRDDChoice("Choice"+cpt, tgc);
 				listE.addCor(ch, tgc);
 				
 				// Sequence
 			} else if (tgc instanceof ui.ebrdd.EBRDDSequence) {
 				// guards are added later on
-				seq = new req.ebrdd.EBRDDSequence();
+				seq = new req.ebrdd.EBRDDSequence("Sequence"+cpt, tgc);
 				listE.addCor(seq, tgc);
 				
 				// Loop
 			} else if (tgc instanceof ui.ebrdd.EBRDDForLoop) {
 				// guards are added later on
-				loop = new req.ebrdd.EBRDDLoop();
+				loop = new req.ebrdd.EBRDDLoop("Loop"+cpt, tgc);
 				listE.addCor(loop, tgc);
 				loop.setInit(((ui.ebrdd.EBRDDForLoop)tgc).getInit());
 				loop.setCondition(((ui.ebrdd.EBRDDForLoop)tgc).getCondition());
@@ -184,7 +187,7 @@ public class EBRDDTranslator {
 				// ERC
 			} else if (tgc instanceof ui.ebrdd.EBRDDERC) {
 				// ERC's internal elements are built later on
-				erc = new req.ebrdd.EBRDDERC();
+				erc = new req.ebrdd.EBRDDERC("ERC"+cpt, tgc);
 				listE.addCor(erc, tgc);
 			}
 		}
@@ -215,7 +218,7 @@ public class EBRDDTranslator {
 						if (tgc1 instanceof ui.ebrdd.EBRDDESO) {
 							System.out.println("ESO found");
 							esotgc = (ui.ebrdd.EBRDDESO)tgc1;
-							eso = new req.ebrdd.ESO();
+							eso = new req.ebrdd.ESO("ESO"+cpt, esotgc);
 							listE.addCor(eso, esotgc);
 							eso.setID(esotgc.getID());
 							eso.setTimeout(esotgc.getTimeout());
@@ -227,7 +230,7 @@ public class EBRDDTranslator {
 						} else if (tgc1 instanceof ui.ebrdd.EBRDDERB) {
 							System.out.println("ERB found");
 							erbtgc = (ui.ebrdd.EBRDDERB)tgc1;
-							erb = new req.ebrdd.ERB();
+							erb = new req.ebrdd.ERB("ERB" + cpt, erbtgc);
 							listE.addCor(erb, erbtgc);
 							erb.setEvent(erbtgc.getEvent());
 							erb.setAction(erbtgc.getAction());
@@ -349,7 +352,7 @@ public class EBRDDTranslator {
                 } 
             } else if (tgc instanceof ui.ebrdd.EBRDDForLoop) {
 				loop = (req.ebrdd.EBRDDLoop)(listE.getEBRDDGeneralComponent(tgc));
-				if (loop.realNbOfNext() != 2) {
+				if (loop.getNbNext() != 2) {
 					CheckingError ce = new CheckingError(CheckingError.BEHAVIOR_ERROR, "Loop should have exactly two next elements");
                     ce.setTDiagramPanel(ebrddp);
                     ce.setTGComponent(tgc);