diff --git a/src/tmltranslator/tomappingsystemc2/TML2MappingSystemC.java b/src/tmltranslator/tomappingsystemc2/TML2MappingSystemC.java
index cd2b2db9a3084328e3917b66aa292b56a533c83b..1eddbce37f79690d915b3bf272859caadc093504 100755
--- a/src/tmltranslator/tomappingsystemc2/TML2MappingSystemC.java
+++ b/src/tmltranslator/tomappingsystemc2/TML2MappingSystemC.java
@@ -384,7 +384,7 @@ public class TML2MappingSystemC {
 
 
 	private int extractPath(LinkedList<HwCommunicationNode> path, strwrap masters, strwrap slaves, HwNode startNode, HwNode destNode, boolean reverseIn){
-		String firstPart="", lastBus="";
+		String firstPart=""; //lastBus="";
 		int masterCount=0;
 		boolean reverse=reverseIn;
 		if (reverseIn)
@@ -395,7 +395,8 @@ public class TML2MappingSystemC {
 			if (commElem instanceof HwMemory){
 				reverse=true;
 				slaves.str+= ",static_cast<Slave*>(" + commElem.getName() + "),static_cast<Slave*>(" + commElem.getName() + ")";
-				firstPart=lastBus;
+				//firstPart=lastBus;
+				firstPart="";
 			}else{
 				if (reverse){
 					if (firstPart.length()==0){
@@ -411,8 +412,8 @@ public class TML2MappingSystemC {
 						firstPart=commElem.getName();
 						slaves.str+= ",static_cast<Slave*>(" + firstPart + ")";
 					}else{
-						lastBus=commElem.getName();
-						masters.str+= "," + firstPart + "_" + lastBus + "_Master";
+						//lastBus=commElem.getName();
+						masters.str+= "," + firstPart + "_" + commElem.getName() + "_Master";
 						masterCount++;
 						firstPart="";
 					}
@@ -435,7 +436,16 @@ public class TML2MappingSystemC {
 		for (HwNode node: tmlmapping.getTMLArchitecture().getHwNodes()){
 			if (node instanceof HwCommunicationNode) commNodes.add((HwCommunicationNode) node);
 		}
-		exploreBuses(0, commNodes, path, startNode, destNode, commElemToRoute);
+		HwMemory memory = getMemConnectedToBusChannelMapped(commNodes, null, commElemToRoute);
+		if(memory==null){
+			exploreBuses(0, commNodes, path, startNode, destNode, commElemToRoute);
+		}else{
+			LinkedList<HwCommunicationNode> commNodes2 = new LinkedList<HwCommunicationNode>(commNodes);
+			exploreBuses(0, commNodes, path, startNode, memory, commElemToRoute);
+			path.add(memory);
+			exploreBuses(0, commNodes2, path, memory, destNode, commElemToRoute);
+
+		}
 		int hopNum;
 		if ( (hopNum=extractPath(path, masters, slaves, startNode, destNode, false))<0){
 			hopNum=extractPath(path, masters, slaves, destNode, destNode, true)-hopNum;
@@ -463,16 +473,16 @@ public class TML2MappingSystemC {
 			//System.out.println("search for bridges connected to: " + startNode.getName());
 			nodesToExplore=getBridgesConnectedToBus(commNodes, (HwBus)startNode);
 		}
-		HwMemory memory = null;
+		//HwMemory memory = null;
 		//System.out.println("no of elements found: " + nodesToExplore.size());
 		for(HwCommunicationNode currNode:nodesToExplore){
-			memory = null;
+			//memory = null;
 			if (busExploreMode){
-				memory = getMemConnectedToBusChannelMapped(commNodes, (HwBus)currNode, commElemToRoute);
+				//memory = getMemConnectedToBusChannelMapped(commNodes, (HwBus)currNode, commElemToRoute);
 				if(isBusConnectedToNode(currNode, destNode)){
 					//System.out.println(currNode.getName() + " is last node");
 					path.add(currNode);
-					if (memory!=null) path.add(memory);
+					//if (memory!=null) path.add(memory);
 					commNodes.remove(currNode);
 					return true;
 				}
@@ -480,24 +490,24 @@ public class TML2MappingSystemC {
 			if(tmlmapping.isCommNodeMappedOn(commElemToRoute, currNode)){
 				//System.out.println(currNode.getName() + " mapping found for " + commElemToRoute.getName());
 				path.add(currNode);
-				if (memory!=null) path.add(memory);
+				//if (memory!=null) path.add(memory);
 				commNodes.remove(currNode);
 				if (exploreBuses(depth+1, commNodes, path, currNode, destNode, commElemToRoute)) return true;
 				path.remove(currNode);
-				if (memory!=null) path.remove(memory);
+				//if (memory!=null) path.remove(memory);
 				commNodes.add(currNode);
 			}
 		}
 		for(HwCommunicationNode currNode:nodesToExplore){
-			if (busExploreMode) memory = getMemConnectedToBusChannelMapped(commNodes, (HwBus)currNode, commElemToRoute); else memory=null;
+			//if (busExploreMode) memory = getMemConnectedToBusChannelMapped(commNodes, (HwBus)currNode, commElemToRoute); else memory=null;
 			path.add(currNode);
-			if (memory!=null) path.add(memory);
+			//if (memory!=null) path.add(memory);
 			commNodes.remove(currNode);
 			//for (int i=0; i<path.size(); i++) System.out.print("  ");
 			//System.out.println(currNode.getName());
 			if (exploreBuses(depth+1, commNodes, path, currNode, destNode, commElemToRoute)) return true;
 			path.remove(currNode);
-			if (memory!=null) path.remove(memory);
+			//if (memory!=null) path.remove(memory);
 			commNodes.add(currNode);	
 		}
 		return false;
@@ -506,7 +516,7 @@ public class TML2MappingSystemC {
 	private HwMemory getMemConnectedToBusChannelMapped(LinkedList<HwCommunicationNode> _commNodes, HwBus _bus, TMLElement _channel){
 		for(HwCommunicationNode commNode: _commNodes){
 			if (commNode instanceof HwMemory){
-				if (tmlmapping.getTMLArchitecture().isNodeConnectedToBus(commNode, _bus) && tmlmapping.isCommNodeMappedOn(_channel,commNode)) return (HwMemory)commNode;
+				if ((_bus==null || tmlmapping.getTMLArchitecture().isNodeConnectedToBus(commNode, _bus)) && tmlmapping.isCommNodeMappedOn(_channel,commNode)) return (HwMemory)commNode;
 			}
 		}
 		return null;