diff --git a/examples/actors/xdf/MergeActors.jrag b/examples/actors/xdf/MergeActors.jrag
index ec26de21363fedc20f7ed6c34e5cac9c57566168..be6b16ed2f2fffc866452bbb62af9615a86cebc6 100644
--- a/examples/actors/xdf/MergeActors.jrag
+++ b/examples/actors/xdf/MergeActors.jrag
@@ -23,28 +23,35 @@ aspect MergeActors {
 		HashSet<Connection> cons = getConnections(new HashSet<Connection>());
 		for (Instance i : schedule) {
 			while (i.next != null) {
+// 				System.out.println("Searching connections for: "+i.name()+" "+i.next.name());
 				for (Connection c : cons) {
+					System.out.println("  "+c.getSource().name()+" "+c.getDest().name());
 					if (c.getSource() == i && c.getDest() == i.next) {
+// 						System.out.println("   Found");
 						// Check port names and perform actual actor
 						// merge. Then set remove_me flag so that this
 						// connection will be removed from the actor
 						// network.
 						c.remove_me = true;
+						c.is$Final(false);
+					} else if (c.getSource() == i.next) {
+						c.setSource(i.id());
 					}
 				}
+				i.merge(i.next);
 				i.setName(i.name()+"_"+i.next.name());
 				i.next = i.next.next;
 			}
 		}
 	}
-	void Connection.mergeActors() {
-		Instance src = getSource();
-		Instance dest = getDest();
-		if (dest.isSDF() && src.isSDF()) {		
-			src.merge(dest);
-			src.setName(src.name()+"_"+dest.name());
-		}
-	}
+// 	void Connection.mergeActors() {
+// 		Instance src = getSource();
+// 		Instance dest = getDest();
+// 		if (dest.isSDF() && src.isSDF()) {		
+// 			src.merge(dest);
+// 			src.setName(src.name()+"_"+dest.name());
+// 		}
+// 	}
 
 	void Instance.merge(Instance inst) {}
 }
diff --git a/examples/actors/xdf/SSR.jrag b/examples/actors/xdf/SSR.jrag
index 29bcbb62d6dd102533c31fb4900dc37e4c08563d..9f972178f30a927aa372e383b1f31e1ab8d731f2 100644
--- a/examples/actors/xdf/SSR.jrag
+++ b/examples/actors/xdf/SSR.jrag
@@ -28,15 +28,17 @@ aspect SSR {
 }
 
 aspect SDF {
-	syn boolean Instance.isSDF() {
+	syn boolean Instance.isSDF() = xlimInstance().isSDF();
+
+	syn xlimAST.design Instance.xlimInstance() {
 		try {
  			System.out.println("Trying to open: "+name());
 			xlimAST.XmlParser parser = new xlimAST.XmlParser(new FileReader(name()+".xlim"));
-			return parser.Start().isSDF();
+			return (xlimAST.design) parser.Start().getSpecification().getElement(0);
 		} catch (Exception e) {
 			System.out.println( name()+".xlim not found");
 // 			e.printStackTrace();
-			return false;
+			return new xlimAST.design();
 		}
 	}
 }
@@ -92,6 +94,14 @@ aspect ActorLookup {
 		return "";
 	}
 
+	void Connection.setSource(String src) {
+		for (Attribute a : getAttributes()) {
+			if (a instanceof src) {
+				a.getAttrValue().setLITERAL(src);
+			}
+		}		
+	}
+
 	syn Instance Connection.getDest() = root().getInstance(dest());
 	
 	String Connection.dest() {