diff --git a/src/tmltranslator/toavatar/TML2Avatar.java b/src/tmltranslator/toavatar/TML2Avatar.java
index ce957b220b35a7359cc01cac5a8ed550d38380f2..9048ea8b67f492c090ff82b12c5c2ca912e52883 100644
--- a/src/tmltranslator/toavatar/TML2Avatar.java
+++ b/src/tmltranslator/toavatar/TML2Avatar.java
@@ -146,7 +146,6 @@ public class TML2Avatar {
 			  for (HwNode n: path){
 			      if (n instanceof HwBus){
 			          bus = (HwBus) n;
-				  System.out.println("BUS PRIVACY "+bus.privacy);
 			    	  if (bus.privacy ==0){
 			      	      priv=0;
 					break;
@@ -163,9 +162,6 @@ public class TML2Avatar {
 	ArrayList<TMLChannel> channels = tmlmodel.getChannels();
 	List<TMLTask> destinations = new ArrayList<TMLTask>();
 	TMLTask a; 
-	for (AvatarSignal sig:signals){
-	    System.out.println("signal "+sig.getName());
-	}
 	for (TMLChannel channel: channels){	
 	    destinations.clear();
 	    if (channel.isBasicChannel()){
@@ -181,7 +177,7 @@ public class TML2Avatar {
 	        List<HwBus> buses = new ArrayList<HwBus>();
 		HwNode node2 = tmlmap.getHwNodeOf(t);
 		if (node1==node2){
-		    System.out.println("Channel "+channel.getName() + " between Task "+ a.getTaskName() + " and Task " + t.getTaskName() + " is confidential");
+		//    System.out.println("Channel "+channel.getName() + " between Task "+ a.getTaskName() + " and Task " + t.getTaskName() + " is confidential");
 		    channelMap.put(channel, channelPrivate);
 		}
 		if (node1!=node2){
@@ -350,14 +346,14 @@ public class TML2Avatar {
 	    TMLSendRequest sr= (TMLSendRequest) ae;
 	    TMLRequest req = sr.getRequest();
 	    AvatarSignal sig;
-	    if (!signalMap.containsKey(block.getName()+"__"+req.getName())){
-	        sig = new AvatarSignal(block.getName()+"__"+req.getName(), AvatarSignal.OUT, req.getReferenceObject());
+	    if (!signalMap.containsKey(block.getName()+"__OUT__"+req.getName())){
+	        sig = new AvatarSignal(block.getName()+"__OUT__"+req.getName(), AvatarSignal.OUT, req.getReferenceObject());
 	        signals.add(sig);
-		signalMap.put(block.getName()+"__"+req.getName(), sig);
+		signalMap.put(block.getName()+"__OUT__"+req.getName(), sig);
 	        block.addSignal(sig);
 	    }
 	    else {
-		sig=signalMap.get(block.getName()+"__"+req.getName());
+		sig=signalMap.get(block.getName()+"__OUT__"+req.getName());
 	    }
 	    AvatarActionOnSignal as= new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject());
 	    for (int i=0; i<sr.getNbOfParams(); i++){
@@ -485,14 +481,14 @@ public class TML2Avatar {
 	    TMLEvent ch = aee.getEvent();
 	    if (ae instanceof TMLSendEvent){
 		AvatarSignal sig;
-		if (!signalMap.containsKey(block.getName()+"__"+ch.getName())){
-	            sig = new AvatarSignal(block.getName()+"__"+ch.getName(), AvatarSignal.OUT, ch.getReferenceObject());
+		if (!signalMap.containsKey(block.getName()+"__OUT__"+ch.getName())){
+	            sig = new AvatarSignal(block.getName()+"__OUT__"+ch.getName(), AvatarSignal.OUT, ch.getReferenceObject());
 	            signals.add(sig);
 		    block.addSignal(sig);
-		    signalMap.put(block.getName()+"__"+ch.getName(), sig);
+		    signalMap.put(block.getName()+"__OUT__"+ch.getName(), sig);
 	    	}
 	    	else {
-		    sig=signalMap.get(block.getName()+"__"+ch.getName());
+		    sig=signalMap.get(block.getName()+"__OUT__"+ch.getName());
 	    	}
 	        AvatarActionOnSignal as= new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject());
  		AvatarAttribute eventData= new AvatarAttribute(ch.getName()+"__eventData", AvatarType.INTEGER, block, null);
@@ -505,14 +501,14 @@ public class TML2Avatar {
 	    }
 	    else if (ae instanceof TMLWaitEvent){
 		AvatarSignal sig; 
-		if (!signalMap.containsKey(block.getName()+"__"+ch.getName())){
-	            sig = new AvatarSignal(block.getName()+"__"+ch.getName(), AvatarSignal.IN, ch.getReferenceObject());
+		if (!signalMap.containsKey(block.getName()+"__IN__"+ch.getName())){
+	            sig = new AvatarSignal(block.getName()+"__IN__"+ch.getName(), AvatarSignal.IN, ch.getReferenceObject());
 	            signals.add(sig);
 		    block.addSignal(sig);
-		    signalMap.put(block.getName()+"__"+ch.getName(), sig);
+		    signalMap.put(block.getName()+"__IN__"+ch.getName(), sig);
 	    	}
 	    	else {
-		    sig=signalMap.get(block.getName()+"__"+ch.getName());
+		    sig=signalMap.get(block.getName()+"__IN__"+ch.getName());
 	    	}
 	        AvatarActionOnSignal as= new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject());
  		AvatarAttribute eventData= new AvatarAttribute(ch.getName()+"__eventData", AvatarType.INTEGER, block, null);
@@ -555,29 +551,29 @@ public class TML2Avatar {
 	    TMLChannel ch = aec.getChannel(0);
 	    AvatarSignal sig;
 	    if (ae instanceof TMLReadChannel){
-		if (!signalMap.containsKey(block.getName()+"__"+ch.getName())){
-	            sig = new AvatarSignal(block.getName()+"__"+ch.getName(), AvatarSignal.IN, ch.getReferenceObject());
+		if (!signalMap.containsKey(block.getName()+"__IN__"+ch.getName())){
+	            sig = new AvatarSignal(block.getName()+"__IN__"+ch.getName(), AvatarSignal.IN, ch.getReferenceObject());
 	            signals.add(sig);
-		    signalMap.put(block.getName()+"__"+ch.getName(), sig);
+		    signalMap.put(block.getName()+"__IN__"+ch.getName(), sig);
 		    block.addSignal(sig);
 	    	    AvatarAttribute channelData= new AvatarAttribute(ch.getName()+"__chData", AvatarType.INTEGER, block, null);
 	    	    block.addAttribute(channelData);
 	    	}
 	    	else {
-		    sig=signalMap.get(block.getName()+"__"+ch.getName());
+		    sig=signalMap.get(block.getName()+"__IN__"+ch.getName());
 	    	}
 	    }
 	    else {
-		if (!signalMap.containsKey(block.getName()+"__"+ch.getName())){
-	            sig = new AvatarSignal(block.getName()+"__"+ch.getName(), AvatarSignal.OUT, ch.getReferenceObject());
+		if (!signalMap.containsKey(block.getName()+"__OUT__"+ch.getName())){
+	            sig = new AvatarSignal(block.getName()+"__OUT__"+ch.getName(), AvatarSignal.OUT, ch.getReferenceObject());
 	            signals.add(sig);
 	    	    block.addSignal(sig);
-		    signalMap.put(block.getName()+"__"+ch.getName(), sig);
+		    signalMap.put(block.getName()+"__OUT__"+ch.getName(), sig);
 		    AvatarAttribute channelData= new AvatarAttribute(ch.getName()+"__chData", AvatarType.INTEGER, block, null);
 	    	    block.addAttribute(channelData);
 	    	}
 	    	else {
-		    sig=signalMap.get(block.getName()+"__"+ch.getName());
+		    sig=signalMap.get(block.getName()+"__OUT__"+ch.getName());
 	    	}
 	    }
 	    AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject());
@@ -675,7 +671,7 @@ public class TML2Avatar {
 	    TMLChoice c = (TMLChoice) ae;
 	    for (int i=0; i<c.getNbGuard(); i++){
 		tran = new AvatarTransition(block, "__after_"+ae.getName()+"_"+i, ae.getReferenceObject());
-		tran.setGuard(c.getGuard(i));
+		//tran.setGuard(c.getGuard(i));
 		as.addNext(tran);
 		List<AvatarStateMachineElement> nexts = translateState(ae.getNextElement(i), block);
 		tran.addNext(nexts.get(0));
@@ -763,12 +759,15 @@ public class TML2Avatar {
 		AvatarTransition at= new AvatarTransition(block, "__after_start", task.getActivityDiagram().get(0).getReferenceObject());
 		ss.addNext(at);
 		asm.addElement(at);
-		AvatarSignal sig = new AvatarSignal(block.getName()+"__"+request.getName(), AvatarSignal.IN, request.getReferenceObject());
+		AvatarSignal sig = new AvatarSignal(block.getName()+"__IN__"+request.getName(), AvatarSignal.IN, request.getReferenceObject());
 		block.addSignal(sig);
 		signals.add(sig);
 	        AvatarActionOnSignal as= new AvatarActionOnSignal("getRequest__"+request.getName(), sig, request.getReferenceObject());
 		at.addNext(as);
 		asm.addElement(as);
+	        as.addValue(request.getName()+"__reqData");
+		AvatarAttribute requestData= new AvatarAttribute(request.getName()+"__reqData", AvatarType.INTEGER, block, null);
+		block.addAttribute(requestData);
 		for (int i=0; i< request.getNbOfParams(); i++){
 		    as.addValue(request.getParam(i)+"__reqData");
 		}
@@ -822,18 +821,17 @@ public class TML2Avatar {
 	//Channels are ?? to ??
 	//Requests are n to 1
 	//Events are ?? to ??
-	for (TMLChannel channel:channelMap.keySet()){
+	for (TMLChannel channel:tmlmodel.getChannels()){
 	    if (channel.isBasicChannel()){
-		System.out.println("Basic channel ");
 		AvatarRelation ar= new AvatarRelation(channel.getName(), taskBlockMap.get(channel.getOriginTask()), taskBlockMap.get(channel.getDestinationTask()), channel.getReferenceObject());
-	        ar.setPrivate(channelMap.get(channel)==1);
+	        ar.setPrivate(originDestMap.get(channel.getOriginTask().getName()+"__"+channel.getDestinationTask().getName())==1);
 	        //Find in signal
 	        List<AvatarSignal> sig1 = new ArrayList<AvatarSignal>();
 	        List<AvatarSignal> sig2 = new ArrayList<AvatarSignal>();
 	        for (AvatarSignal sig: signals){
 		    if (sig.getInOut()==AvatarSignal.IN){
 		        String name = sig.getName();
-		        if (name.equals(channel.getDestinationTask().getName()+"__"+channel.getName())){
+		        if (name.equals(channel.getDestinationTask().getName()+"__IN__"+channel.getName())){
 			    sig1.add(sig);
 		        }
 		    }
@@ -842,16 +840,18 @@ public class TML2Avatar {
 	        for (AvatarSignal sig: signals){
 		    if (sig.getInOut()==AvatarSignal.OUT){
 		        String name = sig.getName();
-		        if (name.equals(channel.getOriginTask().getName()+"__"+channel.getName())){
+		        if (name.equals(channel.getOriginTask().getName()+"__OUT__"+channel.getName())){
 			    sig2.add(sig);
 		        }
 		    }
 	        }
 	        if (sig1.size()==0){
-		    sig1.add(new AvatarSignal(channel.getDestinationTask().getName()+"__"+channel.getName(), AvatarSignal.IN, null));
+		    System.out.println("Failure at " + channel.getDestinationTask().getName()+"__IN__"+channel.getName());
+		    sig1.add(new AvatarSignal(channel.getDestinationTask().getName()+"__IN__"+channel.getName(), AvatarSignal.IN, null));
 	    	}
 	    	if (sig2.size()==0){
-		    sig2.add(new AvatarSignal(channel.getOriginTask().getName()+"__"+channel.getName(), AvatarSignal.OUT, null));
+		    System.out.println("Fail " + channel.getOriginTask().getName()+"__OUT__"+channel.getName());
+		    sig2.add(new AvatarSignal(channel.getOriginTask().getName()+"__OUT__"+channel.getName(), AvatarSignal.OUT, null));
 	    	}
 	    	if (sig1.size()==1 && sig2.size()==1){
 		    ar.addSignals(sig2.get(0), sig1.get(0));
@@ -865,16 +865,15 @@ public class TML2Avatar {
 		System.out.println("Complex channel ");
 		for (TMLTask t1: channel.getOriginTasks()){
 		    for (TMLTask t2: channel.getDestinationTasks()){
-
 			AvatarRelation ar= new AvatarRelation(channel.getName(), taskBlockMap.get(t1), taskBlockMap.get(t2), channel.getReferenceObject());
-			ar.setPrivate(channelMap.get(channel)==1);
+			ar.setPrivate(originDestMap.get(t1.getName()+"__"+t2.getName())==1);
 	    		//Find in signal
 		    	List<AvatarSignal> sig1 = new ArrayList<AvatarSignal>();
 	    		List<AvatarSignal> sig2 = new ArrayList<AvatarSignal>();
 	    		for (AvatarSignal sig: signals){
 			    if (sig.getInOut()==AvatarSignal.IN){
 		    	        String name = sig.getName();
-		    		if (name.equals(t2.getName()+"__"+channel.getName())){
+		    		if (name.equals(t2.getName()+"__IN__"+channel.getName())){
 				    sig1.add(sig);
 		    		}
 			    }
@@ -883,16 +882,16 @@ public class TML2Avatar {
 	    		for (AvatarSignal sig: signals){
 			    if (sig.getInOut()==AvatarSignal.OUT){
 		    	        String name = sig.getName();
-		    	    	if (name.equals(t1.getName()+"__"+channel.getName())){
+		    	    	if (name.equals(t1.getName()+"__OUT__"+channel.getName())){
 				    sig2.add(sig);
 		    	    	}
 			    }
 	    	    	}
 	    	    	if (sig1.size()==0){
-			    sig1.add(new AvatarSignal(channel.getDestinationTask().getName()+"__"+channel.getName(), AvatarSignal.IN, null));
+			    sig1.add(new AvatarSignal(t2.getName()+"__IN__"+channel.getName(), AvatarSignal.IN, null));
 	    	    	}
 	    	    	if (sig2.size()==0){
-			    sig2.add(new AvatarSignal(channel.getOriginTask().getName()+"__"+channel.getName(), AvatarSignal.OUT, null));
+			    sig2.add(new AvatarSignal(t1.getName()+"__OUT__"+channel.getName(), AvatarSignal.OUT, null));
 	    	    	}
 	    	    	if (sig1.size()==1 && sig2.size()==1){
 			    ar.addSignals(sig2.get(0), sig1.get(0));
@@ -906,41 +905,43 @@ public class TML2Avatar {
 	    }
 	}
 	for (TMLRequest request: tmlmodel.getRequests()){
-	    AvatarRelation ar = new AvatarRelation(request.getName(), taskBlockMap.get(request.getOriginTasks().get(0)), taskBlockMap.get(request.getDestinationTask()), request.getReferenceObject());
-	    ar.setPrivate(originDestMap.get(request.getOriginTasks().get(0).getName()+"__"+request.getDestinationTask().getName())==1);	    
-	    List<AvatarSignal> sig1 = new ArrayList<AvatarSignal>();
-	    List<AvatarSignal> sig2 = new ArrayList<AvatarSignal>();
-	    for (AvatarSignal sig: signals){
-		if (sig.getInOut()==AvatarSignal.IN){
-		    String name = sig.getName();
-		    if (name.equals(request.getDestinationTask().getName()+"__"+request.getName())){
-			sig1.add(sig);
+	    for (TMLTask t1: request.getOriginTasks()){
+ 	    	AvatarRelation ar = new AvatarRelation(request.getName(), taskBlockMap.get(t1), taskBlockMap.get(request.getDestinationTask()), request.getReferenceObject());
+	    	ar.setPrivate(originDestMap.get(t1.getName()+"__"+request.getDestinationTask().getName())==1);	    
+	    	List<AvatarSignal> sig1 = new ArrayList<AvatarSignal>();
+	    	List<AvatarSignal> sig2 = new ArrayList<AvatarSignal>();
+	    	for (AvatarSignal sig: signals){
+		    if (sig.getInOut()==AvatarSignal.IN){
+		        String name = sig.getName();
+		    	if (name.equals(request.getDestinationTask().getName()+"__IN__"+request.getName())){
+			    sig1.add(sig);
+		    	}
 		    }
-		}
-	    }
-	    //Find out signal
-	    for (AvatarSignal sig: signals){
-		if (sig.getInOut()==AvatarSignal.OUT){
-		    String name = sig.getName();
-		    if (name.equals(request.getOriginTasks().get(0).getName()+"__"+request.getName())){
-			sig2.add(sig);
+	    	}
+	    	//Find out signal
+	    	for (AvatarSignal sig: signals){
+		    if (sig.getInOut()==AvatarSignal.OUT){
+		    	String name = sig.getName();
+		    	if (name.equals(t1.getName()+"__OUT__"+request.getName())){
+			    sig2.add(sig);
+		        }
 		    }
-		}
-	    }
-	    if (sig1.size()==0){
-		sig1.add(new AvatarSignal(request.getDestinationTask().getName()+"__"+request.getName(), AvatarSignal.IN, null));
-	    }
-	    if (sig2.size()==0){
-		sig2.add(new AvatarSignal(request.getOriginTasks().get(0).getName()+"__"+request.getName(), AvatarSignal.OUT, null));
-	    }
-	    if (sig1.size()==1 && sig2.size()==1){
-		ar.addSignals(sig2.get(0), sig1.get(0));
-	    }
-	    else {
-		//Throw error
-		System.out.println("Could not match for " + request.getName());
+	    	}
+	    	if (sig1.size()==0){
+		    sig1.add(new AvatarSignal(request.getDestinationTask().getName()+"__IN__"+request.getName(), AvatarSignal.IN, null));
+	        }
+	    	if (sig2.size()==0){
+		    sig2.add(new AvatarSignal(t1.getName()+"__OUT__"+request.getName(), AvatarSignal.OUT, null));
+	    	}
+	    	if (sig1.size()==1 && sig2.size()==1){
+		    ar.addSignals(sig2.get(0), sig1.get(0));
+	    	}
+	    	else {
+		    //Throw error
+		    System.out.println("Could not match for " + request.getName());
+	    	}
+	    	avspec.addRelation(ar);
 	    }
-	    avspec.addRelation(ar);
 	}
 	for (TMLEvent event: tmlmodel.getEvents()){
 	    AvatarRelation ar = new AvatarRelation(event.getName(), taskBlockMap.get(event.getOriginTask()), taskBlockMap.get(event.getDestinationTask()), event.getReferenceObject());
@@ -950,7 +951,7 @@ public class TML2Avatar {
 	    for (AvatarSignal sig: signals){
 		if (sig.getInOut()==AvatarSignal.IN){
 		    String name = sig.getName();
-		    if (name.equals(event.getDestinationTask().getName()+"__"+event.getName())){
+		    if (name.equals(event.getDestinationTask().getName()+"__IN__"+event.getName())){
 			sig1.add(sig);
 		    }
 		}
@@ -959,16 +960,16 @@ public class TML2Avatar {
 	    for (AvatarSignal sig: signals){
 		if (sig.getInOut()==AvatarSignal.OUT){
 		    String name = sig.getName();
-		    if (name.equals(event.getOriginTask().getName()+"__"+event.getName())){
+		    if (name.equals(event.getOriginTask().getName()+"__OUT__"+event.getName())){
 			sig2.add(sig);
 		    }
 		}
 	    }
 	    if (sig1.size()==0){
-		sig1.add(new AvatarSignal(event.getDestinationTask().getName()+"__"+event.getName(), AvatarSignal.IN, null));
+		sig1.add(new AvatarSignal(event.getDestinationTask().getName()+"__IN__"+event.getName(), AvatarSignal.IN, null));
 	    }
 	    if (sig2.size()==0){
-		sig2.add(new AvatarSignal(event.getOriginTask().getName()+"__"+event.getName(), AvatarSignal.OUT, null));
+		sig2.add(new AvatarSignal(event.getOriginTask().getName()+"__OUT__"+event.getName(), AvatarSignal.OUT, null));
 	    }
 	    if (sig1.size()==1 && sig2.size()==1){
 		ar.addSignals(sig2.get(0), sig1.get(0));
@@ -979,13 +980,6 @@ public class TML2Avatar {
 	    }
 	    avspec.addRelation(ar);
 	}
-	for (AvatarSignal s: signals){
-
-	    System.out.println(s.getName());
-	}
-	for (AvatarRelation ar: avspec.getRelations()){
-	    System.out.println(ar.getName());
-	}
 	//Check if we matched up all signals
 	System.out.println(avspec);
 	return avspec;