diff --git a/compiler/2014/Java_CodeGen.jrag b/compiler/2014/Java_CodeGen.jrag
index 456ada22f63d8ec25551ae0481d7574776875244..6a042ed24985ae9df19da67169cef971a2118563 100644
--- a/compiler/2014/Java_CodeGen.jrag
+++ b/compiler/2014/Java_CodeGen.jrag
@@ -495,12 +495,19 @@ aspect Java_Class {
     env.println();
   }
 
+  public void TypeInstance.Java_emitAnnotationComment(Java_env env) {
+      if(hasAnnotations()) {
+          env.println("// "+getAnnotationString());
+      }
+  }
+
   //XXX TODO: refactor: split into a static class ("TypeDefSingleton"?)and a (smaller) dispatcher
   public void Decl.Java_emitDispatcher(Java_env env, boolean isSample) {
     // String genericStr = ""; //env.versionHasMetaData()?"<"+getName()+">":""; 
     String genericStr = "<"+getName()+">"; 
     env.println("private static Dispatcher dispatcher = new Dispatcher();");
     env.println();
+    getTypeInstance().Java_emitAnnotationComment(env);
     env.println("public SampleDispatcher getDispatcher() {");
     env.indent();
     env.println("return dispatcher;");
diff --git a/compiler/2014/Signature.jrag b/compiler/2014/Signature.jrag
index 6cba875085bc30f153644ef9b35b445a89cc5d0b..adbd0ef617ddbdfd847615842d983a212a647b82 100644
--- a/compiler/2014/Signature.jrag
+++ b/compiler/2014/Signature.jrag
@@ -1,6 +1,6 @@
 import java.util.*;
 
-aspect Annotations {
+aspect SigAnnotations {
 
     inh Decl TypeInstance.parentDecl();
 
@@ -20,6 +20,9 @@ aspect Annotations {
     public String  DocString.toString() {
         return "\""+getValue()+"\"";
     }
+
+    syn boolean ASTNode.isTypeInstance() = false;
+    eq TypeInstance.isTypeInstance() = true;
 }
 
 aspect Signature {
@@ -59,14 +62,21 @@ aspect Signature {
   }
 
   public void Decl.debugAnnotations() {
-      System.out.println("Decl.annotations: " + getAnnotationString());
+      getTypeInstance().debugAnnotations(getName());
+  }
+
+  public void TypeInstance.debugAnnotations(String context) {
+      if(hasAnnotations()){
+        System.out.println(context+".annotations: " + getAnnotationString());
+      } else {
+        System.out.println(context+": NO ANNOTATIONS ");
+      }
   }
   //  TESTING END
 
   syn nta Signature Decl.getSignature() {
-    debugAnnotations();
     SignatureList sl = new SignatureList();
-    genSigLineForDecl(sl, true);
+    genSigLineForDecl(sl, true, this);
     SignatureList fsl = new SignatureList();
     flatSignature(fsl);
     Signature sig = new Signature();
@@ -200,79 +210,88 @@ aspect Signature {
     }
 
 
-  public void ASTNode.genSigLineForDecl(SignatureList list, boolean decl) {
+  public void ASTNode.genSigLineForDecl(SignatureList list, boolean decl, ASTNode inst) {
     throw new Error(this.getClass().getName() +
                     ".genSigLineForDecl(SignatureList list)" +
                     " not declared");
   }
 
-  public void TypeDecl.genSigLineForDecl(SignatureList list, boolean decl) {
+  public void TypeInstance.genSigLineForDecl(SignatureList list, boolean decl, ASTNode inst) {
+        debugAnnotations(this.getName()); 
+        getDataType().genSigLineForDecl(list, decl, this);
+  }
+
+
+  public void TypeDecl.genSigLineForDecl(SignatureList list, boolean decl, ASTNode inst) {
+        //TODO intent
     if(decl){
-      getDataType().genSigLineForDecl(list, decl);
+      getTypeInstance().genSigLineForDecl(list, decl, this);
     }else{
       list.addTypeRef(this, "//TODO (from list.addTypeRef)");
     }
   }
 
-  public void SampleDecl.genSigLineForDecl(SignatureList list, boolean decl) {
-    getDataType().genSigLineForDecl(list, decl);
+  public void SampleDecl.genSigLineForDecl(SignatureList list, boolean decl, ASTNode inst) {
+        //TODO intent
+    getTypeInstance().genSigLineForDecl(list, decl, this);
   }
 
-  public void VoidType.genSigLineForDecl(SignatureList list, boolean decl) {
+  public void VoidType.genSigLineForDecl(SignatureList list, boolean decl,  ASTNode inst) {
     list.addInt(LABCOMM_STRUCT, "void");
     list.addInt(0, null);
   }
 
-//  public void SampleRefType.genSigLineForDecl(SignatureList list, boolean decl) {
+//  public void SampleRefType.genSigLineForDecl(SignatureList list, boolean decl, ASTNode inst) {
 //    list.addInt(LABCOMM_SAMPLE_REF, "sample");
 //  }
-  public void PrimType.genSigLineForDecl(SignatureList list, boolean decl) {
+  public void PrimType.genSigLineForDecl(SignatureList list, boolean decl,  ASTNode inst) {
     list.addInt(getToken(), null);
   }
 
   /* For UserType, the decl parameter is ignored, as a UserType
    * will always be a TypeRef
    */
-  public void UserType.genSigLineForDecl(SignatureList list, boolean decl) {
+  public void UserType.genSigLineForDecl(SignatureList list, boolean decl,  ASTNode inst) {
 
       TypeDecl thet = lookupType(getName());
       list.addTypeRef(thet, null);
   }
 
-  public void ArrayType.genSigLineForDecl(SignatureList list, boolean decl) {
+  public void ArrayType.genSigLineForDecl(SignatureList list, boolean decl,  ASTNode inst) {
     list.addInt(LABCOMM_ARRAY, signatureComment());
     list.indent();
     list.addInt(getNumExp(), null);
     for (int i = 0 ; i < getNumExp() ; i++) {
-      getExp(i).genSigLineForDecl(list, false);
+      getExp(i).genSigLineForDecl(list, false, null);
     }
-    getDataType().genSigLineForDecl(list, false);
+    getDataType().genSigLineForDecl(list, false, null);
     list.unindent();
     list.add(null, "}");
   }
 
-  public void StructType.genSigLineForDecl(SignatureList list, boolean decl) {
+  public void StructType.genSigLineForDecl(SignatureList list, boolean decl,  ASTNode inst) {
     list.addInt(LABCOMM_STRUCT, "struct { " + getNumField() + " fields");
     list.indent();
     list.addInt(getNumField(), null);
     for (int i = 0 ; i < getNumField() ; i++) {
-      getField(i).genSigLineForDecl(list, false);
+      getField(i).genSigLineForDecl(list, false, inst);
     }
     list.unindent();
     list.add(null, "}");
   }
 
-  public void Field.genSigLineForDecl(SignatureList list, boolean decl) {
+  public void Field.genSigLineForDecl(SignatureList list, boolean decl,  ASTNode inst) {
     list.addString(getName(), signatureComment());
-    getDataType().genSigLineForDecl(list, decl);
+    super.genSigLineForDecl(list, decl, inst);
+    //TODOintent
+    //getDataType().genSigLineForDecl(list, decl, inst);
   }
 
-  public void IntegerLiteral.genSigLineForDecl(SignatureList list, boolean decl) {
+  public void IntegerLiteral.genSigLineForDecl(SignatureList list, boolean decl, ASTNode inst) {
     list.addInt(Integer.parseInt(getValue()), null);
   }
 
-  public void VariableSize.genSigLineForDecl(SignatureList list, boolean decl) {
+  public void VariableSize.genSigLineForDecl(SignatureList list, boolean decl, ASTNode inst) {
     list.addInt(0, null);
   }
-
 }