diff --git a/compiler/CS_CodeGen.jrag b/compiler/CS_CodeGen.jrag
index aef757ec79eb4a4389acfc3254eb24054f611bca..2b45d0d42a32ae7131639be3ff70ab4c7d7b53c6 100644
--- a/compiler/CS_CodeGen.jrag
+++ b/compiler/CS_CodeGen.jrag
@@ -463,7 +463,7 @@ aspect CS_Class {
   }
 
   public String VariableSize.CS_emitEncoder(CS_env env, String name) {
-    env.println("e.encodeInt(" + name + ");");
+    env.println("e.encodePacked32(" + name + ");");
     return name;
   }
 
@@ -571,7 +571,7 @@ aspect CS_Class {
   }
 
   public void VariableSize.CS_emitDecoder(CS_env env) {
-    env.print("d.decodeInt()");
+    env.print("d.decodePacked32()");
   }
 
   public void StructType.CS_emitDecoder(CS_env env, String name) {
@@ -786,13 +786,13 @@ aspect CS_Info {
   }
 
   public void TypeDecl.CS_info(CS_env env, String namespace) {
-    env.print("C#,typedef," + namespace + getName() + ",");
+    env.print(";C#;typedef;" + namespace + getName() + ";");
     getType().CS_emitType(env);
     env.println();
   }
 
   public void SampleDecl.CS_info(CS_env env, String namespace) {
-    env.print("C#,sample," + namespace + getName() + ",");
+    env.print(";C#;sample;" + namespace + getName() + ";");
     getType().CS_emitType(env);
     env.println();
   }
diff --git a/compiler/C_CodeGen.jrag b/compiler/C_CodeGen.jrag
index ef59b2bf820f97b32fd09983ed89c71afa3b437a..d103045201bded5e62e688e00aaf0731aea4fb62 100644
--- a/compiler/C_CodeGen.jrag
+++ b/compiler/C_CodeGen.jrag
@@ -1102,12 +1102,12 @@ aspect C_Info {
   }
 
   public void TypeDecl.C_info(C_env env) {
-    env.println("C,typedef," + env.prefix + getName() + "," + 
+    env.println(",C,typedef," + env.prefix + getName() + "," + 
                  env.prefix + getName());
   }
 
   public void SampleDecl.C_info(C_env env) {
-    env.println("C,sample," + env.prefix + getName() + "," + 
+    env.println(",C,sample," + env.prefix + getName() + "," + 
                 env.prefix + getName());
   }
 
diff --git a/compiler/Java_CodeGen.jrag b/compiler/Java_CodeGen.jrag
index 303cd7e04e80d8367236f5429f0cf4deb56b1f5d..188878c639569ee8b25003db80aa3cf4aec52047 100644
--- a/compiler/Java_CodeGen.jrag
+++ b/compiler/Java_CodeGen.jrag
@@ -783,13 +783,13 @@ aspect Java_Info {
   }
 
   public void TypeDecl.Java_info(Java_env env) {
-    env.print("Java,typedef," + getName() + ",");
+    env.print(",Java,typedef," + getName() + ",");
     getType().Java_emitType(env);
     env.println();
   }
 
   public void SampleDecl.Java_info(Java_env env) {
-    env.print("Java,sample," + getName() + ",");
+    env.print(",Java,sample," + getName() + ",");
     getType().Java_emitType(env);
     env.println();
   }
diff --git a/compiler/Python_CodeGen.jrag b/compiler/Python_CodeGen.jrag
index b0908bc2959631807c89bf07579a84e60d52da80..ed3f2c7f7fcf7181ead73ad0a7fc27e30a955c86 100644
--- a/compiler/Python_CodeGen.jrag
+++ b/compiler/Python_CodeGen.jrag
@@ -80,6 +80,12 @@ aspect Python_CodeGen {
     env.println("import labcomm");
     env.println();
     Python_genTypes(env);
+    env.println("signatures = [");
+    for (int i = 0 ; i < getNumDecl() ; i++) {
+      env.println("  ('" + getDecl(i).getName() + "', " + 
+                           getDecl(i).getName() + ".signature),");
+    }
+    env.println("]");
   }
 
 }
@@ -167,7 +173,6 @@ aspect PythonTypes {
 
   public void VoidType.Python_genSignature(Python_env env) {
     env.println("labcomm.struct([])");
-    env.unindent();
   }
 
   public void Field.Python_genSignature(Python_env env) {