diff --git a/CompilerGeneration.jrag b/CompilerGeneration.jrag
index 73cd76c148cc21d6ac31dca84d8af7676a53edb7..d007355fb82d4b4e2ab0652dda50213725e988a2 100644
--- a/CompilerGeneration.jrag
+++ b/CompilerGeneration.jrag
@@ -512,16 +512,18 @@ aspect GenPrettyPrinter {
 	}
 
     public void XsAttribute.genPrettyPrinter(PrintStream pStream) {
-        String name = fixName(name());
-		pStream.println("  public void "+name+".prettyPrint(String indent, PrintStream pStream) {");
+//         String name = fixName(name());
+        String name = name();
+		pStream.println("  public void "+fixName(name)+".prettyPrint(String indent, PrintStream pStream) {");
  		pStream.println("    pStream.print(\" "+name()+"=\");");
         pStream.println("       getAttrValue().prettyPrint(indent,pStream);");
 		pStream.println("  }\n");        
     }
 
     public void XsElement.genPrettyPrinter(PrintStream pStream) {
-        String name = fixName(name());
-		pStream.println("  public void "+name+".prettyPrint(String ind, PrintStream pStream) {");
+//         String name = fixName(name());
+        String name = name();
+		pStream.println("  public void "+fixName(name)+".prettyPrint(String ind, PrintStream pStream) {");
 		pStream.println("    pStream.print(ind+\"<"+name+" \");");
 		pStream.println("    for (int i=0; i<getNumAttribute(); i++) {");
 		pStream.println("      getAttribute(i).prettyPrint(ind,pStream);");
diff --git a/examples/actors/sdftest.xdf b/examples/actors/sdftest.xdf
index f24f6214a5612d8c97826217fa63cc8a7c0ffdd2..84f44a09e79247e2bcd547f918092af8a3cb217c 100644
--- a/examples/actors/sdftest.xdf
+++ b/examples/actors/sdftest.xdf
@@ -122,7 +122,19 @@
             <Port kind="Output" name="Out">
                 <Type name="int"/>
             </Port>
-            <Action text-begin-col="7" text-begin-line="3" text-end-col="28" text-end-line="3">
+            <Decl assignable="Yes" kind="Variable" name="tmp" text-begin-col=""
+                  text-begin-line=""
+                  text-end-col="15"
+                  text-end-line="2">
+                <Type name="int"/>
+                <Expr kind="Let">
+                    <Expr kind="Literal" literal-kind="Integer" text-begin-col="15" text-begin-line="2"
+                          text-end-col="15"
+                          text-end-line="2"
+                          value="0"/>
+                </Expr>
+            </Decl>
+            <Action text-begin-col="7" text-begin-line="3" text-end-col="4" text-end-line="6">
                 <Input kind="Elements" port="In" text-begin-col="14" text-begin-line="3"
                        text-end-col="16"
                        text-end-line="3">
@@ -130,7 +142,7 @@
                         <Type name="int"/>
                     </Decl>
                 </Input>
-                <Output port="Out" text-begin-col="22" text-begin-line="3" text-end-col="26"
+                <Output port="Out" text-begin-col="22" text-begin-line="3" text-end-col="28"
                         text-end-line="3">
                     <Expr kind="Let">
                         <Expr kind="BinOpSeq" text-begin-col="23" text-begin-line="3" text-end-col="25"
@@ -139,13 +151,26 @@
                                   text-end-col="23"
                                   text-end-line="3"/>
                             <Op name="+"/>
-                            <Expr kind="Literal" literal-kind="Integer" text-begin-col="25" text-begin-line="3"
-                                  text-end-col="25"
-                                  text-end-line="3"
-                                  value="1"/>
+                            <Expr kind="Var" name="tmp" text-begin-col="25" text-begin-line="3" text-end-col="25"
+                                  text-end-line="3"/>
                         </Expr>
                     </Expr>
                 </Output>
+                <Stmt kind="Assign" name="tmp" text-begin-col="3" text-begin-line="5"
+                      text-end-col="17"
+                      text-end-line="5">
+                    <Expr kind="Let">
+                        <Expr kind="BinOpSeq" text-begin-col="10" text-begin-line="5" text-end-col="16"
+                              text-end-line="5">
+                            <Expr kind="Var" name="tmp" text-begin-col="10" text-begin-line="5" text-end-col="10"
+                                  text-end-line="5"/>
+                            <Op name="+"/>
+                            <Expr kind="Var" name="$local$x" text-begin-col="16" text-begin-line="5"
+                                  text-end-col="16"
+                                  text-end-line="5"/>
+                        </Expr>
+                    </Expr>
+                </Stmt>
             </Action>
             <Note kind="filepath" value="/work/csandersn/actors/example//AddOne.cal"/>
         </Actor>
@@ -198,139 +223,6 @@
         </Attribute>
     </Instance>
     <Instance id="$id_n$3">
-        <Note kind="UID" value="SubOne_0"/>
-        <Note kind="instanceHierarchy"/>
-        <Class name="SubOne"/>
-        <Note kind="sourceLoaded" value="true"/>
-        <Note kind="className" value="SubOne"/>
-        <Actor name="SubOne">
-            <Port kind="Input" name="In">
-                <Type name="int"/>
-            </Port>
-            <Port kind="Output" name="Out">
-                <Type name="int"/>
-            </Port>
-            <Action text-begin-col="7" text-begin-line="3" text-end-col="28" text-end-line="3">
-                <Input kind="Elements" port="In" text-begin-col="14" text-begin-line="3"
-                       text-end-col="16"
-                       text-end-line="3">
-                    <Decl kind="Input" name="$local$x">
-                        <Type name="int"/>
-                    </Decl>
-                </Input>
-                <Output port="Out" text-begin-col="22" text-begin-line="3" text-end-col="26"
-                        text-end-line="3">
-                    <Expr kind="Let">
-                        <Expr kind="BinOpSeq" text-begin-col="23" text-begin-line="3" text-end-col="25"
-                              text-end-line="3">
-                            <Expr kind="Var" name="$local$x" text-begin-col="23" text-begin-line="3"
-                                  text-end-col="23"
-                                  text-end-line="3"/>
-                            <Op name="-"/>
-                            <Expr kind="Literal" literal-kind="Integer" text-begin-col="25" text-begin-line="3"
-                                  text-end-col="25"
-                                  text-end-line="3"
-                                  value="1"/>
-                        </Expr>
-                    </Expr>
-                </Output>
-            </Action>
-            <Note kind="filepath" value="/work/csandersn/actors/example//SubOne.cal"/>
-        </Actor>
-        <Attribute kind="Value" name="clockDomain">
-            <Expr kind="Literal" literal-kind="String" value="CLK"/>
-        </Attribute>
-    </Instance>
-    <Instance id="$id_n$4">
-        <Note kind="UID" value="AddFiveOnce_0"/>
-        <Note kind="instanceHierarchy"/>
-        <Class name="AddFiveOnce"/>
-        <Note kind="sourceLoaded" value="true"/>
-        <Note kind="className" value="AddFiveOnce"/>
-        <Actor name="AddFiveOnce">
-            <Port kind="Input" name="In">
-                <Type name="int"/>
-            </Port>
-            <Port kind="Output" name="Out">
-                <Type name="int"/>
-            </Port>
-            <Action text-begin-col="9" text-begin-line="3" text-end-col="30" text-end-line="3">
-                <QID name="init">
-                    <ID name="init"/>
-                </QID>
-                <Input kind="Elements" port="In" text-begin-col="16" text-begin-line="3"
-                       text-end-col="18"
-                       text-end-line="3">
-                    <Decl kind="Input" name="$local$x">
-                        <Type name="int"/>
-                    </Decl>
-                </Input>
-                <Output port="Out" text-begin-col="24" text-begin-line="3" text-end-col="28"
-                        text-end-line="3">
-                    <Expr kind="Let">
-                        <Expr kind="BinOpSeq" text-begin-col="25" text-begin-line="3" text-end-col="27"
-                              text-end-line="3">
-                            <Expr kind="Var" name="$local$x" text-begin-col="25" text-begin-line="3"
-                                  text-end-col="25"
-                                  text-end-line="3"/>
-                            <Op name="+"/>
-                            <Expr kind="Literal" literal-kind="Integer" text-begin-col="27" text-begin-line="3"
-                                  text-end-col="27"
-                                  text-end-line="3"
-                                  value="5"/>
-                        </Expr>
-                    </Expr>
-                </Output>
-            </Action>
-            <Action text-begin-col="8" text-begin-line="5" text-end-col="27" text-end-line="5">
-                <QID name="run">
-                    <ID name="run"/>
-                </QID>
-                <Input kind="Elements" port="In" text-begin-col="15" text-begin-line="5"
-                       text-end-col="17"
-                       text-end-line="5">
-                    <Decl kind="Input" name="$local$x">
-                        <Type name="int"/>
-                    </Decl>
-                </Input>
-                <Output port="Out" text-begin-col="23" text-begin-line="5" text-end-col="25"
-                        text-end-line="5">
-                    <Expr kind="Let">
-                        <Expr kind="Var" name="$local$x" text-begin-col="24" text-begin-line="5"
-                              text-end-col="24"
-                              text-end-line="5"/>
-                    </Expr>
-                </Output>
-            </Action>
-            <Note kind="filepath" value="/work/csandersn/actors/example//AddFiveOnce.cal"/>
-            <Schedule initial-state="init" kind="fsm" text-begin-col="3" text-begin-line="7"
-                      text-end-col="3"
-                      text-end-line="10">
-                <Transition from="init" text-begin-col="4" text-begin-line="8" text-end-col="23"
-                            text-end-line="8"
-                            to="run">
-                    <ActionTags text-begin-col="" text-begin-line="" text-end-col="" text-end-line="">
-                        <QID name="init">
-                            <ID name="init"/>
-                        </QID>
-                    </ActionTags>
-                </Transition>
-                <Transition from="run" text-begin-col="2" text-begin-line="9" text-end-col="19"
-                            text-end-line="9"
-                            to="run">
-                    <ActionTags text-begin-col="" text-begin-line="" text-end-col="" text-end-line="">
-                        <QID name="run">
-                            <ID name="run"/>
-                        </QID>
-                    </ActionTags>
-                </Transition>
-            </Schedule>
-        </Actor>
-        <Attribute kind="Value" name="clockDomain">
-            <Expr kind="Literal" literal-kind="String" value="CLK"/>
-        </Attribute>
-    </Instance>
-    <Instance id="$id_n$5">
         <Note kind="UID" value="art_Sink_txt_0"/>
         <Note kind="instanceHierarchy"/>
         <Class name="art_Sink_txt"/>
@@ -410,8 +302,6 @@
     <Connection dst="$id_n$1" dst-port="In" src="$id_n$0" src-port="Out"/>
     <Connection dst="$id_n$2" dst-port="In" src="$id_n$1" src-port="Out"/>
     <Connection dst="$id_n$3" dst-port="In" src="$id_n$2" src-port="Out"/>
-    <Connection dst="$id_n$4" dst-port="In" src="$id_n$3" src-port="Out"/>
-    <Connection dst="$id_n$5" dst-port="In" src="$id_n$4" src-port="Out"/>
     <Note kind="Directive" name="default-type-name">
         <Expr kind="Literal" literal-kind="String" value="int"/>
     </Note>
diff --git a/examples/actors/xdf/MergeActors.jrag b/examples/actors/xdf/MergeActors.jrag
index 4763296c34e933a3808a8c2760d523de441c7f37..88be4dac9b5b71f5674bd5c19b29b4323310502f 100644
--- a/examples/actors/xdf/MergeActors.jrag
+++ b/examples/actors/xdf/MergeActors.jrag
@@ -27,6 +27,7 @@ aspect MergeActors {
 		for (Instance i : schedule) {
 			while (i.next != null) {
  				System.out.println("Searching connections for: "+i.name()+" "+i.next.name());
+				String srcPort="",dstPort="";
 				for (Connection c : cons) {
 					System.out.println("  "+c.getSource().name()+" "+c.getDest().name());
 					if (c.getSource() == i && c.getDest() == i.next) {
@@ -35,6 +36,8 @@ aspect MergeActors {
 						// merge. Then set remove_me flag so that this
 						// connection will be removed from the actor
 						// network.
+						srcPort = c.srcPort();
+						dstPort = c.dstPort();
 						c.remove_me = true;
 						c.is$Final(false);
 					} else if (c.getSource() == i.next) {
@@ -43,7 +46,7 @@ aspect MergeActors {
 				}
 				System.out.println("Merging "+i.name()+":"+i.next.name());
 				i.isMerged(true);
-				i.merge(i.next);
+				i.merge(i.next,srcPort,dstPort);
 				i.setName(i.name()+"_"+i.next.name());
 				i.next.disabled = true;
 				i.next = i.next.next;
@@ -56,9 +59,9 @@ aspect MergeActors {
 		}
 	}
 
-	void Instance.merge(Instance inst) {
+	void Instance.merge(Instance inst,String srcPort, String dstPort) {
 		if (isMerged()) {
-			xlimInstance().merge(inst.xlimInstance());
+			xlimInstance().merge(inst.xlimInstance(),srcPort,dstPort);
 		}
 	}
 
@@ -116,6 +119,7 @@ aspect Misc {
 		inst.add(this);
 		return inst;
 	}
+
 }
 
 aspect Rewrites {
diff --git a/examples/actors/xdf/SSR.jrag b/examples/actors/xdf/SSR.jrag
index 3407e2671db98d65a89134c896c9213c89d36979..72d30b76922a90e68d902e7cd2785ac63c9416a0 100644
--- a/examples/actors/xdf/SSR.jrag
+++ b/examples/actors/xdf/SSR.jrag
@@ -112,6 +112,23 @@ aspect ActorLookup {
 		}
 		return "";
 	}
+
+	String Connection.dstPort() {
+		for (Attribute a : getAttributes()) {
+			if (a instanceof dst_port) {
+				return fix(a.getAttrValue().getLITERAL());
+			}
+		}
+		return "";
+	}
+	String Connection.srcPort() {
+		for (Attribute a : getAttributes()) {
+			if (a instanceof src_port) {
+				return fix(a.getAttrValue().getLITERAL());
+			}
+		}
+		return "";
+	}
 }
 
 aspect misc {
diff --git a/examples/actors/xlim/GeneratedAspects.jrag b/examples/actors/xlim/GeneratedAspects.jrag
index 3a65692990a353ff8c32c809b2e89e5d3f680508..3091ec7d8e5a91be1a6fed51ce84f937415da02c 100644
--- a/examples/actors/xlim/GeneratedAspects.jrag
+++ b/examples/actors/xlim/GeneratedAspects.jrag
@@ -232,7 +232,7 @@ aspect PrettyPrinter {
   }
 
   public void actor_port.prettyPrint(String ind, PrintStream pStream) {
-    pStream.print(ind+"<actor_port ");
+    pStream.print(ind+"<actor-port ");
     for (int i=0; i<getNumAttribute(); i++) {
       getAttribute(i).prettyPrint(ind,pStream);
     }
@@ -244,7 +244,7 @@ aspect PrettyPrinter {
        for (int i=0; i<getNumElement(); i++) {
           getElement(i).prettyPrint(newInd,pStream);
        }
-       pStream.println(ind+"</actor_port> ");
+       pStream.println(ind+"</actor-port> ");
     }
   }
 
diff --git a/examples/actors/xlim/Merge.jrag b/examples/actors/xlim/Merge.jrag
index 87f11218c6d9d54df1a70fc223e5ed80ea606228..096b859de8237d8de38ace9533e6276a18b0556d 100644
--- a/examples/actors/xlim/Merge.jrag
+++ b/examples/actors/xlim/Merge.jrag
@@ -9,17 +9,28 @@
 import java.util.HashSet;
 
 aspect Merge {
-	public void Start.merge(Start dest) {
-		getSpecification().getDesign().merge(dest.getSpecification().getDesign());
+	public void Start.merge(Start dest, String srcPort, String dstPort) {
+		getSpecification().getDesign().merge(dest.getSpecification().getDesign(),srcPort,dstPort);
 	}
-	public void EmptyStart.merge(Start dest) {}
+	public void EmptyStart.merge(Start dest, String srcPort, String dstPort) {}
 
-	public void design.merge(design dest) {
+	public void design.merge(design dest, String srcPort, String dstPort) {
 		HashSet<module> ops = dest.getActions(new HashSet<module>());
 		System.out.println("Adding actions from: "+dest.name()+" to: "+name());
+		String varName = "\""+name()+"_out\"";
 		setName(name()+"_"+dest.name());
 		List<Element> eList = getElements();
+		stateVar var = new stateVar();		
+		initValue init = new initValue();		
+		var.setAttributeList(new List().add(new name(new AttrValue(varName))).
+							 add(new sourceName(new AttrValue(varName))));
+		eList.insertChild(var,0);
+		// Re-set pinWrite with shared variable
+		for (module m : getActions(new HashSet<module>())) {
+			m.setOutVar(varName,srcPort);
+		}
 		for (module o : ops) {
+			o.setInVar(varName,dstPort);
 			o.setName(dest.name()+"_"+o.name());
 			System.out.println("   Adding "+o.name());
  			eList.insertChild(o,eList.getNumChild()-2);
@@ -51,6 +62,37 @@ aspect Actions {
 		}
 		return ops;
 	}
+
+	void module.setOutVar(String varName,String srcPort) {
+		for (Element e : getElements()) {
+			e.setOutVar(varName, srcPort);
+		}
+	}
+	void Element.setOutVar(String varName, String srcPort){}
+	void operation.setOutVar(String varName, String srcPort) {
+		if (kind().equals("pinWrite")) {
+			setAttributeList(new List().add(new kind(new AttrValue("\"assign\""))).
+							 add(new target(new AttrValue(varName))));
+		}
+	}
+
+	void module.setInVar(String varName,String srcPort) {
+		for (Element e : getElements()) {
+			e.setInVar(varName, srcPort);
+		}
+	}
+	void Element.setInVar(String varName, String srcPort){}
+	void operation.setInVar(String varName, String srcPort) {
+		if (kind().equals("pinRead")) {
+			String src = getElement(0).source();
+			setAttributeList(new List().add(new kind(new AttrValue("\"assign\""))).
+							 add(new target(new AttrValue(unfix(src)))));
+			port newPort = new port();
+			newPort.setAttributeList(new List().add(new dir(new AttrValue("\"in\""))).
+									 add(new source(new AttrValue(varName))));
+			setElementList(new List().add(newPort));
+		}
+	}
 }
 
 aspect ActionScheduler {
@@ -74,7 +116,32 @@ aspect ActionScheduler {
 		return kind().equals("action-scheduler");
 	}
 
+	void Element.addTaskCall(module m) {}
 	void module.addTaskCall(module m) {
+		System.out.println("Looking in: "+kind());
+		if (hasTaskCall()) {
+			operation o = new operation();
+			o.setAttributeList(new List().add(new kind(new AttrValue("\"taskCall\""))).
+							   add(new target(new AttrValue(unfix(m.name())))));
+			addElement(o);
+		} else {
+			for (Element e : getElements()) {
+				e.addTaskCall(m);
+			}
+		}
+	}
 
+	syn boolean Element.hasTaskCall() = false;
+	eq module.hasTaskCall() {
+		for (Element e : getElements()) {
+			if (e instanceof operation) {
+				System.out.println("  "+e.kind());
+			}
+			if (e instanceof operation && e.kind().equals("taskCall")) {
+				return true;
+			}
+		}
+		return false;
 	}
-}
\ No newline at end of file
+}
+
diff --git a/examples/actors/xlim/SDF.jrag b/examples/actors/xlim/SDF.jrag
index 5b3164b6fd5eeab1f0b547a69117e39240f49d18..353d64d156acb18811e84d47bf1b06608e1dde4c 100644
--- a/examples/actors/xlim/SDF.jrag
+++ b/examples/actors/xlim/SDF.jrag
@@ -64,7 +64,7 @@ aspect Misc {
 	}
 	void Attribute.setName(String name) {}
 	void name.setName(String name) {
-		getAttrValue().setLITERAL(fix(name));
+		getAttrValue().setLITERAL(unfix(name));
 	}
 
 
@@ -75,6 +75,13 @@ aspect Misc {
 		return s;
 	}
 
+	static String ASTNode.unfix(String s) {
+		if (s.indexOf('"') != 0) {
+			return "\""+s+"\"";
+		}
+		return s;
+	}
+
 	syn design Specification.getDesign() {
 		for (Element e : getElements()) {
 			if (e instanceof design) {
@@ -83,6 +90,29 @@ aspect Misc {
 		}
 		return null;
 	}
+
+	syn String Element.kind() = "";
+	eq ComplexElement.kind() {
+		for (Attribute a : getAttributes()) {
+			if (a.isKind()) {
+				return fix(a.getAttrValue().getLITERAL());
+			}
+		}
+		return "";
+	}
+
+	syn boolean Attribute.isKind() = false;
+	eq kind.isKind() = true;
+
+	syn String Element.source() = "";
+	eq ComplexElement.source() {
+		for (Attribute a : getAttributes()) {
+			if (a instanceof source) {
+				return fix(a.getAttrValue().getLITERAL());
+			}
+		}
+		return "";
+	}
 }
 
 aspect Fixes {
diff --git a/examples/actors/xlim/xlim.ast b/examples/actors/xlim/xlim.ast
index 56c680e89cae77df1806592a3f7833758111b251..1130b4dfdae9e2965e56059b4d763d99aa126760 100644
--- a/examples/actors/xlim/xlim.ast
+++ b/examples/actors/xlim/xlim.ast
@@ -10,11 +10,13 @@ abstract Thing : ComplexElement ::=;
 abstract Element;
 ComplexElement : Element ::=  Attribute* Element*;
 ValueElement : ComplexElement;
+__DefaultElement__ : ComplexElement ::= <TAG>;
 abstract SimpleElement : Element;
 StringElement : SimpleElement ::= <LITERAL>;
 IntElement : SimpleElement ::= <LITERAL>;
 FloatElement : SimpleElement ::= <LITERAL>;
 Attribute ::= AttrValue;
+__DefaultAttribute__ : Attribute ::= <NAME>;
 AttrValue ::= <LITERAL>;
 Encoding : Attribute ::=;
 Version : Attribute ::=;
diff --git a/examples/actors/xlim/xlim.jjt b/examples/actors/xlim/xlim.jjt
index e4db8493c9b0e868558cac5a778dd451f554f0a4..bec468a1df45e895abffecaf73c1b32567a10bc0 100644
--- a/examples/actors/xlim/xlim.jjt
+++ b/examples/actors/xlim/xlim.jjt
@@ -246,7 +246,7 @@ void ElementList() #List : {}
 
 void AttributeList() #List : {}
 {
-  (Attribute())*
+  (LOOKAHEAD(2) Attribute())*
 }
 
 void AttrValue() #AttrValue : { Token t; }
@@ -287,6 +287,7 @@ void Element()  : {}
   | stateVar()
   | note()
   | initValue()
+  | __DefaultElement__() 
  )) 
  | SimpleElement()
 }
@@ -321,6 +322,18 @@ void StringElement() #StringElement : { Token t;String s; }
 	}
         {jjtThis.setLITERAL(s);}
 }
+void __DefaultElement__() #__DefaultElement__ : { Token t;String s; }
+{
+	t = <IDENTIFIER> AttributeList()
+ 	(">" ElementList() "</" <IDENTIFIER> ">" | ElementList() "/>")
+	{
+		s = t.image;
+		if (getToken(1).kind != GT ) {
+		s += getData();
+	}
+	}
+        {jjtThis.setTAG(s);}
+}
 void Attribute()  : {}
 {
   Encoding()
@@ -342,9 +355,15 @@ void Attribute()  : {}
   | value()
   | autostart()
   | size()
+  | __DefaultAttribute__() 
   
 }
 
+void __DefaultAttribute__() # __DefaultAttribute__ : {Token t;}
+{
+  t=<IDENTIFIER> "=" AttrValue()
+        {jjtThis.setNAME(t.image);}
+}
 void portName() #portName : {}
 {
   <portName> "=" AttrValue()