diff --git a/compiler/2014/Annotations.jrag b/compiler/2014/Annotations.jrag
new file mode 100644
index 0000000000000000000000000000000000000000..2472bce08d05cf106e9e707ab939a6829a6caffb
--- /dev/null
+++ b/compiler/2014/Annotations.jrag
@@ -0,0 +1,18 @@
+aspect Annotations {
+    syn boolean TypeInstance.hasAnnotations() = getNumAnnotation()>0;
+    syn boolean TypeInstance.hasIntentions() = ! intentions().isEmpty();
+
+    syn boolean Annotation.isIntention() = false;
+    eq Intention.isIntention() = true;
+
+    inh TypeInstance Annotation.parentInstance();
+    eq TypeInstance.getAnnotation(int i).parentInstance() = this;
+
+
+    coll Set<Intention> TypeInstance.intentions() [new HashSet<Intention>()] with add;
+    Intention contributes this
+        to TypeInstance.intentions()
+        for parentInstance();
+
+}
+
diff --git a/compiler/2014/FlatSignature.jrag b/compiler/2014/FlatSignature.jrag
index 688d84c0c782ebbabe4531d9ecf8378db26d8b12..363e3228924e02c4de40f391d9ec4a3c2a0670a7 100644
--- a/compiler/2014/FlatSignature.jrag
+++ b/compiler/2014/FlatSignature.jrag
@@ -14,17 +14,23 @@ aspect FlatSignature {
   }
 
   public void TypeDecl.flatSignature(SignatureList list) {
-    getDataType().flatSignature(list);
+    getTypeInstance().flatSignature(list);
   }
 
   public void SampleDecl.flatSignature(SignatureList list) {
-    getDataType().flatSignature(list);
+    getTypeInstance().flatSignature(list);
   }
 
 //  public void SampleRefType.flatSignature(SignatureList list) {
 //    list.addInt(LABCOMM_SAMPLE_REF, "sample");
 //  }
 
+  public void TypeInstance.flatSignature(SignatureList list) {
+        debugAnnotations(this.getName());
+        list.addString(getIntentionString(), "intentions: "+getIntentionString());
+        getDataType().flatSignature(list);
+  }
+
   public void VoidType.flatSignature(SignatureList list) {
     list.addInt(LABCOMM_STRUCT, "void");
     list.addInt(0, null);
@@ -62,6 +68,7 @@ aspect FlatSignature {
   }
 
   public void Field.flatSignature(SignatureList list) {
+    list.addString(getIntentionString(), "intentions: "+getIntentionString());
     list.addString(getName(), signatureComment());
     getDataType().flatSignature(list);
   }
diff --git a/compiler/2014/Signature.jrag b/compiler/2014/Signature.jrag
index 8c50f91a84d11076458ee218d56ad866a464de41..30aad01017cd072fbeb710e35785f374872da006 100644
--- a/compiler/2014/Signature.jrag
+++ b/compiler/2014/Signature.jrag
@@ -229,8 +229,20 @@ aspect Signature {
                     " not declared");
   }
 
+  syn String ASTNode.getIntentionString() = "";
+  eq TypeInstance.getIntentionString() {
+    StringBuilder sb = new StringBuilder();
+    Iterator<Intention> it = intentions().iterator();
+    while(it.hasNext()) {
+        Intention i = it.next();
+        sb.append(i.toString());
+    }
+    return sb.toString();
+  }
+
   public void TypeInstance.genSigLineForDecl(SignatureList list, boolean decl, ASTNode inst) {
-        debugAnnotations(this.getName());
+//        debugAnnotations(this.getName());
+//        list.addString(inst.getIntentionString(), "intention string");
         getDataType().genSigLineForDecl(list, decl, this);
   }