diff --git a/src/main/java/avatartranslator/AvatarStateMachine.java b/src/main/java/avatartranslator/AvatarStateMachine.java
index 6dba84aeabbf78b9e610d3f9c1d8c684f63cdbed..55b610d6e49fe13db9305fdcbcd1855fc30dccae 100644
--- a/src/main/java/avatartranslator/AvatarStateMachine.java
+++ b/src/main/java/avatartranslator/AvatarStateMachine.java
@@ -1727,6 +1727,15 @@ public class AvatarStateMachine extends AvatarElement {
             AvatarStateMachineElement ae;
             ae = elt.basicCloneMe(_newBlock);
 
+            /*if (ae instanceof AvatarState) {
+                TraceManager.addDev("New state: ");
+            }
+            TraceManager.addDev("elt: " +  ae.toString());*/
+
+            if (ae == null) {
+                TraceManager.addDev("Null AE");
+            }
+
             _newAsm.addElement(ae);
 
             if (ae instanceof AvatarStartState) {
@@ -1739,7 +1748,9 @@ public class AvatarStateMachine extends AvatarElement {
         for (AvatarStateMachineElement elt : elements) {
             AvatarStateMachineElement ae = correspondenceMap.get(elt);
             if (ae != null) {
-                elt.fillAdvancedValues(ae, correspondenceMap);
+                elt.fillAdvancedValues(ae, correspondenceMap, this);
+            } else {
+                TraceManager.addDev("Null correspondance ae");
             }
         }
     }
diff --git a/src/main/java/avatartranslator/AvatarStateMachineElement.java b/src/main/java/avatartranslator/AvatarStateMachineElement.java
index 50e1eed4c09e439ab583db0e698049ef045ef396..32bad1ffa65a4cb34ae677c649b4b8b795fa400e 100644
--- a/src/main/java/avatartranslator/AvatarStateMachineElement.java
+++ b/src/main/java/avatartranslator/AvatarStateMachineElement.java
@@ -39,6 +39,7 @@
 
 package avatartranslator;
 
+import myutil.TraceManager;
 import ui.TGComponent;
 
 import java.util.HashMap;
@@ -290,7 +291,8 @@ public abstract class AvatarStateMachineElement extends AvatarElement {
 
     public abstract AvatarStateMachineElement basicCloneMe(AvatarStateMachineOwner _block);
 
-    public void fillAdvancedValues(AvatarStateMachineElement asme, HashMap<AvatarStateMachineElement, AvatarStateMachineElement> correspondenceMap) {
+    public void fillAdvancedValues(AvatarStateMachineElement asme, HashMap<AvatarStateMachineElement, AvatarStateMachineElement> correspondenceMap,
+     AvatarStateMachine mch                              ) {
         // Fill all reference elements
         cloneLinkToReferenceObjects(asme);
 
@@ -310,6 +312,14 @@ public abstract class AvatarStateMachineElement extends AvatarElement {
             AvatarStateMachineElement newNext = correspondenceMap.get(next);
             if (newNext != null) {
                 asme.addNext(newNext);
+            } else {
+                TraceManager.addDev("Null next for " + next.toString());
+                if (mch != null) {
+                    TraceManager.addDev("State machine contains next? " + mch.elements.contains(next));
+
+
+
+                }
             }
         }
     }
diff --git a/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java b/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java
index c452cea1f2e0fb57a728304ec7b8a9b19f84cb3e..b87cbad030eb80013763c2e4131096f96d756c4e 100644
--- a/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java
+++ b/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java
@@ -534,6 +534,7 @@ public class FullTML2Avatar {
                     //For each of the possible state blocks, translate 1 and recurse on the remaining random sequence
                     tran = new AvatarTransition(block, "__after_" + ae.getName() + "_" + i, ae.getReferenceObject());
                     choiceState.addNext(tran);
+                    elementList.add(tran);
                     List<AvatarStateMachineElement> tmp = translateState(ae.getNextElement(i), block);
 
 
@@ -1805,125 +1806,12 @@ public class FullTML2Avatar {
 			//Events are ?? to ??
 			AvatarBlock fifo = new AvatarBlock("FIFO", avspec,null);
 			for (TMLChannel channel:tmlmodel.getChannels()){
-				/*if (channel.getName().contains("JOINCHANNEL")){
-					//System.out.println("JOINCHANNEL");
-					AvatarRelation ar= new AvatarRelation(channel.getName(), taskBlockMap.get(channel.getOriginTask()), taskBlockMap.get(channel.getDestinationTask()), channel.getReferenceObject());
-					ar.setPrivate(false);
-					if (channel.getType()==TMLChannel.BRBW){
-						ar.setAsynchronous(true);		
-						ar.setSizeOfFIFO(channel.getSize());
-						ar.setBlocking(true);
-					}
-					else if (channel.getType()==TMLChannel.BRNBW){
-						ar.setAsynchronous(true);
-						ar.setSizeOfFIFO(channel.getSize());
-						ar.setBlocking(false);
-					}
-					else {
-						//Create new block, hope for best
-						if (mc){
-							fifo = createFifo(channel.getName());
-							ar.setAsynchronous(false);
-						}
-					}
-					//System.out.println(channel.getName() + " " +channel.getOriginTask().getName() + " " + channel.getDestinationTask().getName());
-					//Find in signal
-					//Sig1 contains IN Signals, Sig2 contains OUT signals
-					List<AvatarSignal> sig1 = new ArrayList<AvatarSignal>();
-					List<AvatarSignal> sig2 = new ArrayList<AvatarSignal>();
-					for (AvatarSignal sig: taskBlockMap.get(channel.getDestinationTask()).getSignals()){
-						if (sig.getInOut()==AvatarSignal.IN){
-							String name = sig.getName();
-							String tmp = getName(channel.getName());
-							if (name.equals(tmp.split("JOIN")[tmp.split("JOIN").length-1]) || name.equals(tmp)){
-								sig1.add(sig);
-							}
-						}
-					}
-					for (AvatarSignal sig: taskBlockMap.get(channel.getOriginTask()).getSignals()){
-						if (sig.getInOut()==AvatarSignal.OUT){
-							String name = sig.getName();
-							String tmp = getName(channel.getName());
-							if (name.equals(tmp.split("JOIN")[tmp.split("JOIN").length-1]) || name.equals(tmp)){
-								sig2.add(sig);
-							}
-						}
-					}
-
-					if (sig1.size()==1 && sig2.size()==1){
-						if (channel.getType()==TMLChannel.NBRNBW && mc){
-							AvatarSignal read = fifo.getSignalByName("readSignal");
-
-							ar.block2= fifo;
-							//Set IN signal with read
-							ar.addSignals(sig1.get(0), read);
-							AvatarRelation ar2= new AvatarRelation(channel.getName()+"2", fifo, taskBlockMap.get(channel.getDestinationTask()), channel.getReferenceObject());
-							AvatarSignal write = fifo.getSignalByName("writeSignal");
-							//set OUT signal with write
-							ar2.addSignals(write, sig2.get(0));
-							ar2.setAsynchronous(false);
-							avspec.addRelation(ar2);
-						}
-						else {
-							ar.addSignals(sig2.get(0), sig1.get(0));
-						}
-					}		
-					avspec.addRelation(ar);
-				}
-		
-				else if (channel.getName().contains("FORKCHANNEL") || channel.getName().contains("fork__")){
-					System.out.println("FORKCHANNEL " + channel.getName());
-					AvatarRelation ar= new AvatarRelation(channel.getName(), taskBlockMap.get(channel.getOriginTask()), taskBlockMap.get(channel.getDestinationTask()), channel.getReferenceObject());
-					ar.setPrivate(false);
+			    // We assume one to one
 
-					//System.out.println(channel.getName() + " " +channel.getOriginTask().getName() + " " + channel.getDestinationTask().getName());
-					//Find in signal
-					//Sig1 contains IN Signals, Sig2 contains OUT signals
-					List<AvatarSignal> sig1 = new ArrayList<AvatarSignal>();
-					List<AvatarSignal> sig2 = new ArrayList<AvatarSignal>();
-					for (AvatarSignal sig: taskBlockMap.get(channel.getDestinationTask()).getSignals()){
-						if (sig.getInOut()==AvatarSignal.IN){
-							String name = sig.getName();
-							String tmp = getName(channel.getName());
-							if (name.equals(tmp.split("FORK")[tmp.split("FORK").length-1]) || name.equals(tmp)){
-								sig1.add(sig);
-							}
-						}
-					}
-					for (AvatarSignal sig: taskBlockMap.get(channel.getOriginTask()).getSignals()){
-						if (sig.getInOut()==AvatarSignal.OUT){
-							String name = sig.getName();
-							String tmp = getName(channel.getName());
-							if (name.equals(tmp.split("FORK")[tmp.split("FORK").length-1]) || name.equals(tmp)){
-								sig2.add(sig);
-							}
-						}
-					}
-
-					if (sig1.size()==1 && sig2.size()==1){
-						if (channel.getType()==TMLChannel.NBRNBW && mc){
-							AvatarSignal read = fifo.getSignalByName("readSignal");
-
-							ar.block2= fifo;
-							//Set IN signal with read
-							ar.addSignals(sig1.get(0), read);
-							AvatarRelation ar2= new AvatarRelation(channel.getName()+"2", fifo, taskBlockMap.get(channel.getDestinationTask()), channel.getReferenceObject());
-							AvatarSignal write = fifo.getSignalByName("writeSignal");
-							//set OUT signal with write
-							ar2.addSignals(write, sig2.get(0));
-							ar2.setAsynchronous(false);
-							avspec.addRelation(ar2);
-						}
-						else {
-							ar.addSignals(sig2.get(0), sig1.get(0));
-						}
-					}		
-					avspec.addRelation(ar);
-				}*/
 				if (channel.isBasicChannel()){
 					//System.out.println("checking channel " + channel.getName());
 					AvatarRelation ar= new AvatarRelation(channel.getName(), taskBlockMap.get(channel.getOriginTask()), taskBlockMap.get(channel.getDestinationTask()), channel.getReferenceObject());
-					LinkedList<HwCommunicationNode> path =tmlmap.findNodesForElement(channel);
+					LinkedList<HwCommunicationNode> path = tmlmap.findNodesForElement(channel);
 					if (path.size()!=0){
 						ar.setPrivate(true);
 						for (HwCommunicationNode node:path){
diff --git a/src/main/java/ui/GTURTLEModeling.java b/src/main/java/ui/GTURTLEModeling.java
index 4466132bb42fb6c9f7b94fdc8a9f7766fbbd2614..fed79b1ebf88716518d800c32e0202818d8b6b8f 100644
--- a/src/main/java/ui/GTURTLEModeling.java
+++ b/src/main/java/ui/GTURTLEModeling.java
@@ -1903,9 +1903,11 @@ public class GTURTLEModeling {
         TraceManager.addDev("Avatar spec generation");
         avatarspec = t2a.generateAvatarSpec("1");
 
-        /*if (mgui.isExperimentalOn()) {
+        if (mgui.isExperimentalOn()) {
             mgui.drawAvatarSpecification(avatarspec);
-        }*/
+            AvatarSpecification av2 = avatarspec.advancedClone();
+            mgui.drawAvatarSpecification(av2);
+        }
     }
 
     public void generateAvatarFromTML(boolean mc, boolean security) {
@@ -8694,6 +8696,10 @@ public class GTURTLEModeling {
             mgui.resetAllDIPLOIDs();
             listE.useDIPLOIDs();
             mgui.setMode(MainGUI.GEN_DESIGN_OK);
+
+
+
+
             return true;
         }
     }
@@ -9173,8 +9179,8 @@ public class GTURTLEModeling {
                 originDestMap.put(bl1.split("__")[bl1.split("__").length - 1], hs);
             }
         }
-        //Add Relations
 
+        //Add Relations
         for (String bl1 : originDestMap.keySet()) {
             for (String bl2 : originDestMap.get(bl1)) {
                 Vector<Point> points = new Vector<Point>();
@@ -9210,6 +9216,7 @@ public class GTURTLEModeling {
                         conn.setSizeOfFIFO(ar.getSizeOfFIFO());
                         //
                         for (int i = 0; i < ar.nbOfSignals(); i++) {
+                            //TraceManager.addDev("Adding signal relations to connector");
                             //
                             conn.addSignal(ar.getSignal1(i).toString(), ar.getSignal1(i).getInOut() == 0, ar.block1.getName().contains(bl1));
                             conn.addSignal(ar.getSignal2(i).toString(), ar.getSignal2(i).getInOut() == 0, !ar.block1.getName().contains(bl1));
@@ -9234,6 +9241,8 @@ public class GTURTLEModeling {
             }
         }
         ypos += 100;
+
+
         //Add Pragmas
         AvatarBDPragma pragma = new AvatarBDPragma(xpos, ypos, xpos, xpos * 2, ypos, ypos * 2, false, null, abd);
         //  String[] arr = new String[avspec.getPragmas().size()];
diff --git a/src/main/java/ui/avatarbd/AvatarBDPortConnector.java b/src/main/java/ui/avatarbd/AvatarBDPortConnector.java
index 5f321619d422811239fb623e2a9869e6c5564608..1d05088800697c203d9aa4ab87315a28fa17dfc8 100644
--- a/src/main/java/ui/avatarbd/AvatarBDPortConnector.java
+++ b/src/main/java/ui/avatarbd/AvatarBDPortConnector.java
@@ -673,6 +673,7 @@ public class AvatarBDPortConnector extends TGConnectorWithCommentConnectionPoint
     }
 
     public void addSignal(String signal, boolean in, boolean origin) {
+        TraceManager.addDev("Adding signal " + signal + " isIn:" + in + " origin:" + origin);
         if (in) {
             if (origin) {
                 inSignalsAtOrigin.add(signal);