diff --git a/compiler/2014/Python_CodeGen.jrag b/compiler/2014/Python_CodeGen.jrag
index ac74601430639c648bcab466dea49ebc8e315770..c2aa961d7c9ebdaf87a23a2c8dda68ba9201ae73 100644
--- a/compiler/2014/Python_CodeGen.jrag
+++ b/compiler/2014/Python_CodeGen.jrag
@@ -115,9 +115,11 @@ aspect PythonTypes {
   public void TypeDecl.Python_genSignatureAndTypedef(Python_env env) {
     env.println("class " + getName() + "(object):");
     env.indent();
-    env.println("typedef = labcomm2014.typedef('" + getName() + "',");
+    env.print("typedef = labcomm2014.typedef(");
+    Python_genIntentions(env);
+    env.println(",");
     env.indent();
-    getDataType().Python_genTypedef(env);
+    getTypeInstance().Python_genTypedef(env);
     env.unindent();
     env.println(")");
     env.unindent();
@@ -127,19 +129,34 @@ aspect PythonTypes {
   public void SampleDecl.Python_genSignatureAndTypedef(Python_env env) {
     env.println("class " + getName() + "(object):");
     env.indent();
-    env.println("signature = labcomm2014.sample('" + getName() + "', ");
+    env.print("signature = labcomm2014.sample(");
+    Python_genIntentions(env);
+    env.println(",");
     env.indent();
     getDataType().Python_genSignature(env);
     env.unindent();
     env.println(")");
-    env.println("typedef = labcomm2014.sample('" + getName() + "', ");
+    env.print("typedef = labcomm2014.sample(");
+    Python_genIntentions(env);
+    env.println(",");
     env.indent();
-    getDataType().Python_genTypedef(env);
+    getTypeInstance().Python_genTypedef(env);
     env.unindent();
     env.println(")");
     env.unindent();
     env.println();
   }
+  public void Decl.Python_genIntentions(Python_env env) {
+    getTypeInstance().Python_genIntentions(env);
+  }
+
+  public void TypeInstance.Python_genIntentions(Python_env env) {
+    env.print("{'':'"+getName()+"'}");
+  }
+
+  public void TypeInstance.Python_genTypedef(Python_env env) {
+      getDataType().Python_genTypedef(env);
+  }
 
   public void UserType.Python_genSignature(Python_env env) {
     lookupType(getName()).getDataType().Python_genSignature(env);
diff --git a/lib/python/labcomm2014/LabComm.py b/lib/python/labcomm2014/LabComm.py
index 9fdaf797b7a715adf6c2cacd9495a7dee39ed3c4..7e6cba715d156c1e9c22c7ab1167f8954ff53e92 100644
--- a/lib/python/labcomm2014/LabComm.py
+++ b/lib/python/labcomm2014/LabComm.py
@@ -393,8 +393,11 @@ class SAMPLE(primitive):
 # Aggregate types
 #
 class sampledef_or_sampleref_or_typedef(type_decl):
-    def __init__(self, name=None, decl=None):
-        self.name = name
+    def __init__(self, intentions=None, decl=None):
+        if intentions is not None and '' in intentions:
+            self.name = intentions['']
+        else:
+            self.name = None
         self.decl = decl
 
     def encode_decl(self, encoder):
@@ -418,7 +421,7 @@ class sampledef_or_sampleref_or_typedef(type_decl):
             length = decoder.decode_packed32()
         decl = decoder.decode_decl()
         result = self.__class__.__new__(self.__class__)
-        result.__init__(name=name, decl=decl)
+        result.__init__(intentions={'':name}, decl=decl)
         self.add_index(decoder, index, result)
         return result
 
@@ -455,17 +458,23 @@ class sample_def(sampledef_or_sampleref_or_typedef):
         decoder.add_decl(decl, index)
 
     def rename(self, name):
-        return sample_def(name=name, decl=self.decl)
+        newIntentions = intentions.copy()
+        newIntentions['']=name
+        return sample_def(newIntentions, decl=self.decl)
 
 class sample_ref(sampledef_or_sampleref_or_typedef):
     type_index = i_SAMPLE_REF
     type_name = 'sample_ref'
 
-    def __init__(self, name=None, decl=None, sample=None):
-        self.name = name
+    def __init__(self, intentions=None, decl=None, sample=None):
+        if intentions is not None and '' in intentions:
+            self.name = intentions['']
+            print "sampleref: name = %d" % self.name
+        else:
+            self.name = None
         self.decl = decl
-        if sample == None and name != None and decl != None:
-            self.sample = sample_def(name, decl)
+        if sample == None and self.name != None and decl != None:
+            self.sample = sample_def(intentions, decl)
         else:
             self.sample = sample