diff --git a/compiler/2014/ArrayTypeRewrite.jrag b/compiler/2014/ArrayTypeRewrite.jrag
index 28e3c79f4fa93b7ac6aeb3ec4da3174472080d87..8d83ffb97c52b4a6c20e34a2ffeab2dc6907898e 100644
--- a/compiler/2014/ArrayTypeRewrite.jrag
+++ b/compiler/2014/ArrayTypeRewrite.jrag
@@ -13,28 +13,28 @@ aspect ArrayRewrite {
     when (! getDim(0).isVariable()) 
     to FixedArrayType  { 
       if (getNumDim() == 1) {
-        return new FixedArrayType(getType(), 
+        return new FixedArrayType(getDataType(), 
 				  getDim(0).getExpList());
       } else {
         List l = new List();
         for (int i = 1 ; i < getNumDim() ; i++) {
 	  l.add(getDim(i));
         }
-        return new FixedArrayType(new ParseArrayType(getType(), l), 
+        return new FixedArrayType(new ParseArrayType(getDataType(), l), 
 				  getDim(0).getExpList());
       }
     }
     when (getDim(0).isVariable()) 
     to VariableArrayType  { 
       if (getNumDim() == 1) {
-        return new VariableArrayType(getType(), 
+        return new VariableArrayType(getDataType(), 
 				     getDim(0).getExpList());
       } else {
         List l = new List();
         for (int i = 1 ; i < getNumDim() ; i++) {
 	  l.add(getDim(i));
         }
-        return new VariableArrayType(new ParseArrayType(getType(), l), 
+        return new VariableArrayType(new ParseArrayType(getDataType(), l), 
 				     getDim(0).getExpList());
       }
     }
diff --git a/compiler/2014/CS_CodeGen.jrag b/compiler/2014/CS_CodeGen.jrag
index 69f50b6f98a488e197f9756b4420df0e5decdc4c..1dfb8189bb51b20a7a4b393bbce1d021d90820e7 100644
--- a/compiler/2014/CS_CodeGen.jrag
+++ b/compiler/2014/CS_CodeGen.jrag
@@ -175,11 +175,11 @@ aspect CS_CodeGenEnv {
 aspect CS_StructName {
 
   inh int Decl.CS_Depth();
-  inh int Type.CS_Depth();
+  inh int DataType.CS_Depth();
   eq Program.getDecl(int i).CS_Depth() = 0;
   eq StructType.getField(int i).CS_Depth() = CS_Depth() + 1;
 
-  inh String Type.CS_structName();
+  inh String DataType.CS_structName();
   eq Program.getDecl(int i).CS_structName() = getDecl(i).getName();
   eq StructType.getField(int i).CS_structName() {
     if (CS_Depth() == 0) {
@@ -192,9 +192,9 @@ aspect CS_StructName {
 
 aspect CS_Void {
 
-  syn boolean Decl.CS_isVoid() = getType().CS_isVoid();
+  syn boolean Decl.CS_isVoid() = getDataType().CS_isVoid();
   syn boolean UserType.CS_isVoid() = decl().CS_isVoid();
-  syn boolean Type.CS_isVoid() = false;
+  syn boolean DataType.CS_isVoid() = false;
   syn boolean VoidType.CS_isVoid() = true;
 
 }
@@ -273,7 +273,7 @@ aspect CS_Class {
 	    Decl t = it.next();
 
 	    t.CS_emitUserTypeDeps(env, t.getName(), outputCode);
-	    if( outputCode && t.getType().isUserType() ) {
+	    if( outputCode && t.getDataType().isUserType() ) {
 	       env.println(t.getName()+".register(e);");
 	    } else {  // Just output a comment
 		String refpath = (via == null) ? "directly" : "indirectly via "+via;
@@ -329,7 +329,7 @@ aspect CS_Class {
   }
     
   public void TypeDecl.CS_emitClass(CS_env env) {
-    if (getType().CS_needInstance()) {
+    if (getDataType().CS_needInstance()) {
       // Hackish prettyprint preamble
       env.println("/* ");
       pp(env.getPrintStream());
@@ -338,7 +338,7 @@ aspect CS_Class {
       env.println("public class " + getName() + " : SampleType {");
       env.println();
       env.indent();
-      getType().CS_emitInstance(env);
+      getDataType().CS_emitInstance(env);
       if( isReferenced()) {
         CS_emitRegisterEncoder(env);
 	CS_emitDispatcher(env,false);
@@ -359,11 +359,11 @@ aspect CS_Class {
     env.println("public class " + getName() + " : Sample {");
     env.println();
     env.indent();
-    getType().CS_emitInstance(env);
+    getDataType().CS_emitInstance(env);
     env.println("public interface Handler : SampleHandler {");
     env.print("  void handle(");
     if (!isVoid()) {
-      getType().CS_emitType(env);
+      getDataType().CS_emitType(env);
       env.print(" value");
     }
     env.println(");");
@@ -506,12 +506,12 @@ aspect CS_Class {
     env.print("public static void encode(Encoder e");
     if (!isVoid()) {
       env.print(", ");
-      getType().CS_emitType(env);
+      getDataType().CS_emitType(env);
       env.print(" value");
     }
     env.println(") {");
     env.indent();
-    getType().CS_emitEncoder(env, "value");
+    getDataType().CS_emitEncoder(env, "value");
     env.unindent();
     env.println("}");
     env.println();
@@ -521,20 +521,20 @@ aspect CS_Class {
     env.print("public static void encode(Encoder e");
     if (!isVoid()) {
       env.print(", ");
-      getType().CS_emitType(env);
+      getDataType().CS_emitType(env);
       env.print(" value");
     }
     env.println(") {");
     env.indent();
     env.println("e.begin(typeof(" + getName() + "));");
-    getType().CS_emitEncoder(env, "value");
+    getDataType().CS_emitEncoder(env, "value");
     env.println("e.end(typeof(" + getName() + "));");
     env.unindent();
     env.println("}");
     env.println();
   }
 
-  public void Type.CS_emitEncoder(CS_env env, String name) {
+  public void DataType.CS_emitEncoder(CS_env env, String name) {
     throw new Error(this.getClass().getName() + 
 		    ".CS_emitEncoder(CS_env env, String name)" + 
 		    " not declared");
@@ -575,7 +575,7 @@ aspect CS_Class {
         index = index + ", " + env.print_for_begin(limit);
       }
     }
-    getType().CS_emitEncoder(env, name + "[" + index + "]");
+    getDataType().CS_emitEncoder(env, name + "[" + index + "]");
     for (int i = 0 ; i < getNumExp() ; i++) {
       env.print_for_end();
     }
@@ -600,7 +600,7 @@ aspect CS_Class {
   public void StructType.CS_emitEncoder(CS_env env, String name) {
     for (int i = 0 ; i < getNumField() ; i++) {
       Field f = getField(i);
-      f.getType().CS_emitEncoder(env, name + "." + f.getName());
+      f.getDataType().CS_emitEncoder(env, name + "." + f.getName());
     }
   }
 
@@ -608,19 +608,19 @@ aspect CS_Class {
     if (CS_needInstance()) {
       env.println(getName() + ".encode(e, " + name + ");");
     } else {
-      decl().getType().CS_emitEncoder(env, name);
+      decl().getDataType().CS_emitEncoder(env, name);
     }
   }
 
   public void Decl.CS_emitDecoder(CS_env env) {
     env.print("public static ");
-    getType().CS_emitType(env);
+    getDataType().CS_emitType(env);
     env.println(" decode(Decoder d) {");
     env.indent();
     if (!isVoid()) {
-      getType().CS_emitType(env);
+      getDataType().CS_emitType(env);
       env.println(" result;");
-      getType().CS_emitDecoder(env, "result");
+      getDataType().CS_emitDecoder(env, "result");
       env.println("return result;");
     }
     env.unindent();
@@ -628,7 +628,7 @@ aspect CS_Class {
     env.println();
   }
 
-  public void Type.CS_emitDecoder(CS_env env, String name) {
+  public void DataType.CS_emitDecoder(CS_env env, String name) {
     throw new Error(this.getClass().getName() + 
 		    ".CS_emitDecoder(CS_env env, String name)" + 
 		    " not declared");
@@ -666,7 +666,7 @@ aspect CS_Class {
       env.println(";");
     }
     env.print(name + " = new "); 
-    getType().CS_emitTypePrefix(env);
+    getDataType().CS_emitTypePrefix(env);
     env.print("[");
     for (int i = 0 ; i < getNumExp() ; i++) {
       if (i > 0) {
@@ -675,7 +675,7 @@ aspect CS_Class {
       env.print("i_" + (baseDepth + i) + "_max");
     }
     env.print("]");
-    getType().CS_emitTypeSuffix(env);
+    getDataType().CS_emitTypeSuffix(env);
     env.println(";");
     
     String index = null;
@@ -687,7 +687,7 @@ aspect CS_Class {
         index = index + ", " + env.print_for_begin(limit);
       }
     }
-    getType().CS_emitDecoder(env, name + "[" + index + "]");
+    getDataType().CS_emitDecoder(env, name + "[" + index + "]");
     for (int i = 0 ; i < getNumExp() ; i++) {
       env.print_for_end();
     }
@@ -715,7 +715,7 @@ aspect CS_Class {
     env.println("();");
     for (int i = 0 ; i < getNumField() ; i++) {
       Field f = getField(i);
-      f.getType().CS_emitDecoder(env, name + "." + f.getName());
+      f.getDataType().CS_emitDecoder(env, name + "." + f.getName());
     }
   }
 
@@ -723,11 +723,11 @@ aspect CS_Class {
     if (CS_needInstance()) {
       env.println(name + " = " + getName() + ".decode(d);");
     } else {
-      decl().getType().CS_emitDecoder(env, name);
+      decl().getDataType().CS_emitDecoder(env, name);
     }
   }
 
-  public void Type.CS_emitTypePrefix(CS_env env) {
+  public void DataType.CS_emitTypePrefix(CS_env env) {
     throw new Error(this.getClass().getName() + 
 		    ".CS_emitTypePrefix(CS_env env)" + 
 		    " not declared");
@@ -745,24 +745,24 @@ aspect CS_Class {
     if (CS_needInstance()) {
       env.print(getName());
     } else {
-      decl().getType().CS_emitTypePrefix(env);
+      decl().getDataType().CS_emitTypePrefix(env);
     } 
   }
 
   public void ArrayType.CS_emitTypePrefix(CS_env env){
-    getType().CS_emitTypePrefix(env);
+    getDataType().CS_emitTypePrefix(env);
   }
 
   public void StructType.CS_emitTypePrefix(CS_env env){
     env.print(CS_structName());
   }
 
-  public void Type.CS_emitTypeSuffix(CS_env env) {
+  public void DataType.CS_emitTypeSuffix(CS_env env) {
   }
 
   public void UserType.CS_emitTypeSuffix(CS_env env) {
     if (! CS_needInstance()) {
-      decl().getType().CS_emitTypeSuffix(env);
+      decl().getDataType().CS_emitTypeSuffix(env);
     } 
   }
 
@@ -772,10 +772,10 @@ aspect CS_Class {
       env.print(",");
     }
     env.print("]");
-    getType().CS_emitTypeSuffix(env);
+    getDataType().CS_emitTypeSuffix(env);
   }
 
-  public boolean Type.CS_needInstance() {
+  public boolean DataType.CS_needInstance() {
     throw new Error(this.getClass().getName() + 
 		    ".CS_needInstance()" + 
 		    " not declared");
@@ -790,7 +790,7 @@ aspect CS_Class {
   }
 
   public boolean UserType.CS_needInstance() {
-    return decl().getType().CS_needInstance();
+    return decl().getDataType().CS_needInstance();
   }
 
   public boolean StructType.CS_needInstance() {
@@ -798,10 +798,10 @@ aspect CS_Class {
   }
 
   public boolean ArrayType.CS_needInstance() {
-    return getType().CS_needInstance();
+    return getDataType().CS_needInstance();
   }
 
-  public boolean Type.CS_isPrimitive() {
+  public boolean DataType.CS_isPrimitive() {
     return false;
   }
 
@@ -809,7 +809,7 @@ aspect CS_Class {
     return true;
   }
 
-  public void Type.CS_emitInstance(CS_env env) {
+  public void DataType.CS_emitInstance(CS_env env) {
     throw new Error(this.getClass().getName() + 
 		    ".CS_emitInstance(CS_env env)" + 
 		    " not declared");
@@ -822,7 +822,7 @@ aspect CS_Class {
   }
 
   public void ArrayType.CS_emitInstance(CS_env env) {
-    getType().CS_emitInstance(env);
+    getDataType().CS_emitInstance(env);
   }
 
   public void StructType.CS_emitInstance(CS_env env) {
@@ -831,7 +831,7 @@ aspect CS_Class {
       env.indent();
     }
     for (int i = 0 ; i < getNumField() ; i++) {
-      getField(i).getType().CS_emitInstance(env);
+      getField(i).getDataType().CS_emitInstance(env);
     }
     for (int i = 0 ; i < getNumField() ; i++) {
       getField(i).CS_emitField(env);
@@ -848,11 +848,11 @@ aspect CS_Class {
 
   public void Field.CS_emitField(CS_env env) {
     env.print("public ");
-    getType().CS_emitType(env);
+    getDataType().CS_emitType(env);
     env.println(" " + getName() + ";");    
   }
 
-  public void Type.CS_emitType(CS_env env) {
+  public void DataType.CS_emitType(CS_env env) {
     throw new Error(this.getClass().getName() + 
 		    ".CS_emitType(CS_env env)" + 
 		    " not declared");
@@ -872,17 +872,17 @@ aspect CS_Class {
   }
 
   public void UserType.CS_emitType(CS_env env) {
-    decl().getType().CS_emitType(env);
+    decl().getDataType().CS_emitType(env);
   }
 
   public void ArrayType.CS_emitType(CS_env env){
-    getType().CS_emitTypePrefix(env);
+    getDataType().CS_emitTypePrefix(env);
     env.print("[");
     for (int i = 1 ; i < getNumExp() ; i++) {
       env.print(",");
     }
     env.print("]");
-    getType().CS_emitTypeSuffix(env);
+    getDataType().CS_emitTypeSuffix(env);
   }
 
   public void StructType.CS_emitType(CS_env env){
@@ -902,7 +902,7 @@ aspect CS_Signature {
 
     public void TypeRefSignatureLine.CS_emitSignature(CS_env env, boolean isDecl){
       env.print(getIndentString());
-      env.println("e.encodePacked32(e.getTypeId( typeof("+decl.getName()+")));");
+      env.println("e.encodePacked32(e.getDataTypeId( typeof("+decl.getName()+")));");
     }
 
     public void DataSignatureLine.CS_emitSignature(CS_env env, boolean decl){
@@ -955,14 +955,14 @@ aspect CS_Info {
 
   public void TypeDecl.CS_info(CS_env env, String namespace) {
     env.print(";C#;typedef;" + namespace + getName() + ";");
-    getType().CS_emitType(env) ;
+    getDataType().CS_emitType(env) ;
     env.print(";not_applicable_for_C#");
     env.println();
   }
 
   public void SampleDecl.CS_info(CS_env env, String namespace) {
     env.print(";C#;sample;" + namespace + getName() + ";");
-    getType().CS_emitType(env);
+    getDataType().CS_emitType(env);
     env.print(";not_applicable_for_C#");
     env.println();
   }
diff --git a/compiler/2014/C_CodeGen.jrag b/compiler/2014/C_CodeGen.jrag
index 9b7cac5c4da04e4260db1c02baff5b8e5fdd9663..526b2ad02d60c303a928e1f007d6632a9047c2af 100644
--- a/compiler/2014/C_CodeGen.jrag
+++ b/compiler/2014/C_CodeGen.jrag
@@ -158,20 +158,20 @@ aspect C_CodeGenEnv {
 aspect C_IsDynamic {
   
   // Determine if a type has dynamically allocated data
-  syn boolean Decl.C_isDynamic() = getType().C_isDynamic();
-  syn boolean Type.C_isDynamic() = false;
+  syn boolean Decl.C_isDynamic() = getDataType().C_isDynamic();
+  syn boolean DataType.C_isDynamic() = false;
   syn boolean PrimType.C_isDynamic() = getToken() == LABCOMM_STRING;
   syn boolean UserType.C_isDynamic() = 
-    lookupType(getName()).getType().C_isDynamic();
+    lookupType(getName()).getDataType().C_isDynamic();
   syn boolean StructType.C_isDynamic() {
     for (int i = 0 ; i < getNumField() ; i++) {
-      if (getField(i).getType().C_isDynamic()) {
+      if (getField(i).getDataType().C_isDynamic()) {
 	return true;
       }
     }
     return false;
   }
-  syn boolean FixedArrayType.C_isDynamic() = getType().C_isDynamic();
+  syn boolean FixedArrayType.C_isDynamic() = getDataType().C_isDynamic();
   syn boolean VariableArrayType.C_isDynamic() = true;
 }
 
@@ -272,7 +272,7 @@ aspect C_Type {
   public void TypeDecl.C_emitType(C_env env) {
     env.println("#ifndef LABCOMM_DEFINED_" + env.prefix + getName());
     env.print("typedef ");
-    getType().C_emitType(env, env.prefix + getName());
+    getDataType().C_emitType(env, env.prefix + getName());
     env.println(";");
     env.println("#define LABCOMM_DEFINED_" + env.prefix + getName());
     env.println("#endif");
@@ -281,7 +281,7 @@ aspect C_Type {
   public void SampleDecl.C_emitType(C_env env) {
     env.println("#ifndef LABCOMM_DEFINED_" + env.prefix + getName());
     env.print("typedef ");
-    getType().C_emitType(env, env.prefix + getName());
+    getDataType().C_emitType(env, env.prefix + getName());
     env.println(";");
     env.println("#define LABCOMM_DEFINED_" + env.prefix + getName());
     env.println("#endif");
@@ -290,7 +290,7 @@ aspect C_Type {
                 ";");
   }
 
-  public void Type.C_emitType(C_env env, String name) {
+  public void DataType.C_emitType(C_env env, String name) {
     throw new Error(this.getClass().getName() + 
 		    ".C_emitType(C_env env, String name)" + 
 		    " not declared");
@@ -333,7 +333,7 @@ aspect C_Type {
   }
 
   public void Field.C_emitType(C_env env) {
-    getType().C_emitType(env, getName());
+    getDataType().C_emitType(env, getName());
   }
 
   public void FixedArrayType.C_emitType(C_env env, String name) {
@@ -343,7 +343,7 @@ aspect C_Type {
     for (int i = 0 ; i < getNumExp() ; i++) {
       index.append("[" + getExp(i).C_getValue() + "]");
     }
-    getType().C_emitType(env, index.toString());
+    getDataType().C_emitType(env, index.toString());
     env.println(";");
     env.unindent();
     env.print("} " + name);
@@ -359,7 +359,7 @@ aspect C_Type {
 	env.println("// n_" + i + "=" + getExp(i).C_getValue());
       }
     }
-    getType().C_emitType(env, "*a");
+    getDataType().C_emitType(env, "*a");
     env.println(";");
     env.unindent();
     env.print("} " + name);
@@ -502,12 +502,12 @@ aspect C_Decoder {
     env.println("{");
     env.indent();
     env.println(env.prefix + getName() + " v;");
-    getType().C_emitDecoder(env);
+    getDataType().C_emitDecoder(env);
     env.println("handle(&v, context);");
     if (C_isDynamic()) {
       env.println("{");
       env.indent();
-      getType().C_emitDecoderDeallocation(env);
+      getDataType().C_emitDecoderDeallocation(env);
       env.unindent();
       env.println("}");
     }
@@ -515,7 +515,7 @@ aspect C_Decoder {
     env.println("}");
   }
 
-  public void Type.C_emitDecoder(C_env env) {
+  public void DataType.C_emitDecoder(C_env env) {
     throw new Error(this.getClass().getName() + 
 		    ".C_emitDecoder(C_env env)" + 
 		    " not declared");
@@ -538,7 +538,7 @@ aspect C_Decoder {
   }
 
   public void UserType.C_emitDecoder(C_env env) {
-    lookupType(getName()).getType().C_emitDecoder(env);
+    lookupType(getName()).getDataType().C_emitDecoder(env);
   }
 
   public void StructType.C_emitDecoder(C_env env) {
@@ -563,7 +563,7 @@ aspect C_Decoder {
       env.indent();
     }
     C_emitCalcIndex(env);
-    getType().C_emitDecoder(C_Nest(env));
+    getDataType().C_emitDecoder(C_Nest(env));
     for (int i = getNumExp() - 1 ; i >= 0 ; i--) {
       env.unindent();
       env.println("}");
@@ -573,7 +573,7 @@ aspect C_Decoder {
   }
 
   public void Field.C_emitDecoder(C_env env) {
-    getType().C_emitDecoder(env.nestStruct("." + getName()));
+    getDataType().C_emitDecoder(env.nestStruct("." + getName()));
   }
 
   public void Exp.C_emitDecoderDecodeLimit(C_env env, int i) {
@@ -604,7 +604,7 @@ aspect C_Decoder {
 
   // Code for deallocation of dynamically allocated data 
 
-  public void Type.C_emitDecoderDeallocation(C_env env) {
+  public void DataType.C_emitDecoderDeallocation(C_env env) {
     throw new Error(this.getClass().getName() + 
 		    ".C_emitDecoderDeallocation(C_env env)" + 
 		    " not declared");
@@ -619,7 +619,7 @@ aspect C_Decoder {
 
   public void UserType.C_emitDecoderDeallocation(C_env env) {
     if (C_isDynamic()) {
-      lookupType(getName()).getType().C_emitDecoderDeallocation(env);
+      lookupType(getName()).getDataType().C_emitDecoderDeallocation(env);
     }
   }
 
@@ -632,7 +632,7 @@ aspect C_Decoder {
   }
 
   public void ArrayType.C_emitDecoderDeallocation(C_env env) {
-    if (getType().C_isDynamic()) {
+    if (getDataType().C_isDynamic()) {
       env.println("{");
       env.indent();
       C_emitLoopVariables(env);
@@ -646,7 +646,7 @@ aspect C_Decoder {
 	env.indent();
       }
       C_emitCalcIndex(env);
-      getType().C_emitDecoderDeallocation(C_Nest(env));
+      getDataType().C_emitDecoderDeallocation(C_Nest(env));
       for (int i = 0 ; i < getNumExp() ; i++) {
 	env.unindent();
 	env.println("}");
@@ -663,7 +663,7 @@ aspect C_Decoder {
   }
 
   public void Field.C_emitDecoderDeallocation(C_env env) {
-    getType().C_emitDecoderDeallocation(env.nestStruct("." + getName()));
+    getDataType().C_emitDecoderDeallocation(env.nestStruct("." + getName()));
   }
 
   public void Decl.C_emitDecoderRegisterHandler(C_env env) {
@@ -748,12 +748,12 @@ aspect C_copy {
     env_src.println("");
     env_src.println("{");
     env_src.indent();
-    getType().C_emitCopy(env_src, env_dst);
+    getDataType().C_emitCopy(env_src, env_dst);
     env_src.unindent();
     env_src.println("}");
   }
 
-  public void Type.C_emitCopy(C_env env_src, C_env env_dst) {
+  public void DataType.C_emitCopy(C_env env_src, C_env env_dst) {
     throw new Error(this.getClass().getName() + 
 		    ".C_emitCopy(C_env env)" + 
 		    " not declared");
@@ -780,7 +780,7 @@ aspect C_copy {
   }
 
   public void UserType.C_emitCopy(C_env env_src, C_env env_dst) {
-    lookupType(getName()).getType().C_emitCopy(env_src, env_dst);
+    lookupType(getName()).getDataType().C_emitCopy(env_src, env_dst);
   }
 
   public void StructType.C_emitCopy(C_env env_src, C_env env_dst) {
@@ -805,7 +805,7 @@ aspect C_copy {
       env_src.indent();
     }
     C_emitCalcIndex(env_src);
-    getType().C_emitCopy(C_Nest(env_src), C_Nest(env_dst));
+    getDataType().C_emitCopy(C_Nest(env_src), C_Nest(env_dst));
     for (int i = getNumExp() - 1 ; i >= 0 ; i--) {
       env_src.unindent();
       env_src.println("}");
@@ -816,7 +816,7 @@ aspect C_copy {
 
   public void Field.C_emitCopy(C_env env_src, C_env env_dst) {
     String fnam = env_src.memberAccessor() + getName();
-    getType().C_emitCopy(env_src.nestStruct(fnam), env_dst.nestStruct(fnam));
+    getDataType().C_emitCopy(env_src.nestStruct(fnam), env_dst.nestStruct(fnam));
   }
 
   public void Exp.C_emitCopyDecodeLimit(C_env env_src, C_env env_dst, int i) {
@@ -889,12 +889,12 @@ aspect C_copy {
     env.println("");
     env.println("{");
     env.indent();
-    getType().C_emitCopyDeallocation(env);
+    getDataType().C_emitCopyDeallocation(env);
     env.unindent();
     env.println("}");
   }
 
-  public void Type.C_emitCopyDeallocation(C_env env) {
+  public void DataType.C_emitCopyDeallocation(C_env env) {
     throw new Error(this.getClass().getName() +
   		    ".C_emitCopyDeallocation(C_env env)" +
   		    " not declared");
@@ -912,7 +912,7 @@ aspect C_copy {
 
   public void UserType.C_emitCopyDeallocation(C_env env) {
     if (C_isDynamic()) {
-      lookupType(getName()).getType().C_emitCopyDeallocation(env);
+      lookupType(getName()).getDataType().C_emitCopyDeallocation(env);
     }
   }
 
@@ -925,7 +925,7 @@ aspect C_copy {
   }
 
   public void ArrayType.C_emitCopyDeallocation(C_env env) {
-    if (getType().C_isDynamic()) {
+    if (getDataType().C_isDynamic()) {
       env.println("{");
       env.indent();
       C_emitLoopVariables(env);
@@ -939,7 +939,7 @@ aspect C_copy {
   	env.indent();
       }
       C_emitCalcIndex(env);
-      getType().C_emitCopyDeallocation(C_Nest(env));
+      getDataType().C_emitCopyDeallocation(C_Nest(env));
       for (int i = 0 ; i < getNumExp() ; i++) {
   	env.unindent();
   	env.println("}");
@@ -956,7 +956,7 @@ aspect C_copy {
   }
 
   public void Field.C_emitCopyDeallocation(C_env env) {
-    getType().C_emitCopyDeallocation(env.nestStruct(env.memberAccessor()
+    getDataType().C_emitCopyDeallocation(env.nestStruct(env.memberAccessor()
 						    + getName()));
   }
 }
@@ -1023,7 +1023,7 @@ aspect C_Encoder {
     env.println("{");
     env.indent();
     env.println("int result = 0;");
-    getType().C_emitEncoder(env);
+    getDataType().C_emitEncoder(env);
     env.println("return result;");
     env.unindent();
     env.println("}");
@@ -1047,7 +1047,7 @@ aspect C_Encoder {
     env.println("}");
   }
 
-  public void Type.C_emitEncoder(C_env env) {
+  public void DataType.C_emitEncoder(C_env env) {
     throw new Error(this.getClass().getName() + 
 		    ".C_emitEncoder(C_env env)" + 
 		    " not declared");
@@ -1074,7 +1074,7 @@ aspect C_Encoder {
   }
 
   public void UserType.C_emitEncoder(C_env env) {
-    decl().getType().C_emitEncoder(env);
+    decl().getDataType().C_emitEncoder(env);
   }
 
   public void StructType.C_emitEncoder(C_env env) {
@@ -1098,7 +1098,7 @@ aspect C_Encoder {
       env.indent();
     }
     C_emitCalcIndex(env);
-    getType().C_emitEncoder(C_Nest(env));
+    getDataType().C_emitEncoder(C_Nest(env));
     for (int i = getNumExp() - 1 ; i >= 0 ; i--) {
       env.unindent();
       env.println("}");
@@ -1108,7 +1108,7 @@ aspect C_Encoder {
   }
 
   public void Field.C_emitEncoder(C_env env) {
-    getType().C_emitEncoder(env.nestStruct("." + getName()));
+    getDataType().C_emitEncoder(env.nestStruct("." + getName()));
   }
 
   public void Exp.C_emitEncoderEncodeLimit(C_env env, int i) {
@@ -1516,7 +1516,7 @@ aspect C_Sizeof {
   }
 
   public int Decl.C_fixedSizeof() {
-    return getType().C_fixedSizeof();
+    return getDataType().C_fixedSizeof();
   }
 
   public void Decl.C_emitSizeof(C_env env) {
@@ -1535,7 +1535,7 @@ aspect C_Sizeof {
     env.println("}");
   }
 
-  public int Type.C_fixedSizeof() {
+  public int DataType.C_fixedSizeof() {
     throw new Error(this.getClass().getName() + 
             ".C_fixedSizeof()" + 
             " not declared");
@@ -1564,13 +1564,13 @@ aspect C_Sizeof {
   }
 
   public int UserType.C_fixedSizeof() {
-    return lookupType(getName()).getType().C_fixedSizeof();
+    return lookupType(getName()).getDataType().C_fixedSizeof();
   }
 
   public int StructType.C_fixedSizeof() {
     int result = 0;
     for (int i = 0 ; i < getNumField() ; i++) {
-      result += getField(i).getType().C_fixedSizeof();
+      result += getField(i).getDataType().C_fixedSizeof();
     }
     return result;
   }
@@ -1581,7 +1581,7 @@ aspect C_Sizeof {
       int n = Integer.parseInt(((IntegerLiteral)getExp(i)).getValue());
       elements = elements * n;
     }
-    return getType().C_fixedSizeof() * elements;
+    return getDataType().C_fixedSizeof() * elements;
   }
 
   public void Decl.C_emitSizeofValue(C_env env) {
@@ -1595,7 +1595,7 @@ aspect C_Sizeof {
     env.println("int result = 0;");
     if (C_isDynamic()) {
       env.println(env.prefix + getName() + " *v = vv;");
-      getType().C_emitSizeof(env);
+      getDataType().C_emitSizeof(env);
     } else {
       env.println("result += " + C_fixedSizeof() + ";");
     }    
@@ -1604,7 +1604,7 @@ aspect C_Sizeof {
     env.println("}");
   }
 
-  public void Type.C_emitSizeof(C_env env) {
+  public void DataType.C_emitSizeof(C_env env) {
     throw new Error(this.getClass().getName() + 
             ".C_emitSizeof(C_env env)" + 
             " not declared");
@@ -1625,17 +1625,17 @@ aspect C_Sizeof {
   }
 
   public void UserType.C_emitSizeof(C_env env) {
-    lookupType(getName()).getType().C_emitSizeof(env);
+    lookupType(getName()).getDataType().C_emitSizeof(env);
   }
 
   public void StructType.C_emitSizeof(C_env env) {
     int fixed = 0;
     for (int i = 0 ; i < getNumField() ; i++) {
-      if (getField(i).getType().C_isDynamic()) {
-        getField(i).getType().C_emitSizeof(
+      if (getField(i).getDataType().C_isDynamic()) {
+        getField(i).getDataType().C_emitSizeof(
         env.nestStruct("." + getField(i).getName()));
       } else {
-        fixed += getField(i).getType().C_fixedSizeof();
+        fixed += getField(i).getDataType().C_fixedSizeof();
       }
     }
     if (fixed > 0) {
@@ -1655,7 +1655,7 @@ aspect C_Sizeof {
     for (int i = 0 ; i < getNumExp() ; i++) {
       getExp(i).C_emitSizeof(env, i);
     }
-    if (getType().C_isDynamic()) {
+    if (getDataType().C_isDynamic()) {
       env.println("{");
       env.indent();
       C_emitLoopVariables(env);
@@ -1669,7 +1669,7 @@ aspect C_Sizeof {
         env.indent();
       }
       C_emitCalcIndex(env);
-      getType().C_emitSizeof(C_Nest(env));
+      getDataType().C_emitSizeof(C_Nest(env));
       for (int i = 0 ; i < getNumExp() ; i++) {
         env.unindent();
         env.println("}");
@@ -1677,7 +1677,7 @@ aspect C_Sizeof {
       env.unindent();
       env.println("}");
     } else {
-      env.print("result += " + getType().C_fixedSizeof());
+      env.print("result += " + getDataType().C_fixedSizeof());
       for (int i = 0 ; i < getNumExp() ; i++) {
         env.print(" * " + getExp(i).C_getLimit(env, i));
       }
diff --git a/compiler/2014/DeclNames.jrag b/compiler/2014/DeclNames.jrag
index 042739b0f9d229f550d38a76cfc5b19e445eee22..c448c6d7e73933815e0fbee438ac437f05f65561 100644
--- a/compiler/2014/DeclNames.jrag
+++ b/compiler/2014/DeclNames.jrag
@@ -1,14 +1,14 @@
 aspect DeclNames {
-	inh String Type.declName();
-	eq Decl.getType().declName() = getName();
+	inh String DataType.declName();
+	eq Decl.DataType().declName() = getName();
 
 	inh String Field.declName();
 	eq StructType.getField(int i).declName() = declName();
-    
+
         //TODO: aspect should be renamed to parent-something
 
-        inh Decl Type.parentDecl();
+        inh Decl DataType.parentDecl();
         inh Decl Field.parentDecl();
-        eq Decl.getType().parentDecl() = this;
+        eq Decl.getDataType().parentDecl() = this;
         eq StructType.getField(int i).parentDecl() = parentDecl();
 }
diff --git a/compiler/2014/FlatSignature.jrag b/compiler/2014/FlatSignature.jrag
index b96c119ce386f0a0d2b7e9e2c1edb001050e5f27..688d84c0c782ebbabe4531d9ecf8378db26d8b12 100644
--- a/compiler/2014/FlatSignature.jrag
+++ b/compiler/2014/FlatSignature.jrag
@@ -14,11 +14,11 @@ aspect FlatSignature {
   }
 
   public void TypeDecl.flatSignature(SignatureList list) {
-    getType().flatSignature(list);
+    getDataType().flatSignature(list);
   }
 
   public void SampleDecl.flatSignature(SignatureList list) {
-    getType().flatSignature(list);
+    getDataType().flatSignature(list);
   }
 
 //  public void SampleRefType.flatSignature(SignatureList list) {
@@ -45,7 +45,7 @@ aspect FlatSignature {
     for (int i = 0 ; i < getNumExp() ; i++) {
       getExp(i).flatSignature(list);
     }
-    getType().flatSignature(list);
+    getDataType().flatSignature(list);
     list.unindent();
     list.add(null, "}");
   }
@@ -63,7 +63,7 @@ aspect FlatSignature {
 
   public void Field.flatSignature(SignatureList list) {
     list.addString(getName(), signatureComment());
-    getType().flatSignature(list);
+    getDataType().flatSignature(list);
   }
 
   public void IntegerLiteral.flatSignature(SignatureList list) {
@@ -93,7 +93,7 @@ aspect FlatSignature {
   }
 
   public String Field.signatureComment() {
-    return getType().signatureComment() + " '" + getName() +"'";
+    return getDataType().signatureComment() + " '" + getName() +"'";
   }
 
 //  public String SampleRefType.signatureComment() {
diff --git a/compiler/2014/Java_CodeGen.jrag b/compiler/2014/Java_CodeGen.jrag
index cb0f6281c0cd375a0a356b081aa5607dc4e9a90b..90a641d9f2c9ba8c2ddc9c1df6f5000ed7e08d7b 100644
--- a/compiler/2014/Java_CodeGen.jrag
+++ b/compiler/2014/Java_CodeGen.jrag
@@ -178,11 +178,11 @@ aspect Java_CodeGenEnv {
 aspect Java_StructName {
 
   inh int Decl.Java_Depth();
-  inh int Type.Java_Depth();
+  inh int DataType.Java_Depth();
   eq Program.getDecl(int i).Java_Depth() = 0;
   eq StructType.getField(int i).Java_Depth() = Java_Depth() + 1;
 
-  inh String Type.Java_structName();
+  inh String DataType.Java_structName();
   eq Program.getDecl(int i).Java_structName() = getDecl(i).getName();
   eq StructType.getField(int i).Java_structName() {
     if (Java_Depth() == 0) {
@@ -195,9 +195,9 @@ aspect Java_StructName {
 
 aspect Java_Void {
 
-  syn boolean Decl.isVoid() = getType().isVoid();
+  syn boolean Decl.isVoid() = getDataType().isVoid();
   syn boolean UserType.isVoid() = decl().isVoid();
-  syn boolean Type.isVoid() = false;
+  syn boolean DataType.isVoid() = false;
   syn boolean VoidType.isVoid() = true;
 
 }
@@ -295,7 +295,7 @@ aspect Java_Class {
             Decl t = it.next();
 
             t.Java_emitUserTypeDeps(env, t.getName(), outputCode);
-            if( outputCode){// && t.getType().isUserType() ) {
+            if( outputCode){// && t.getDataType().isUserType() ) {
                env.println(t.getName()+".register(e);");
             } else {  // Just output a comment
 	        String refpath = (via == null) ? "directly" : "indirectly via "+via;
@@ -356,14 +356,14 @@ aspect Java_Class {
       env.println("import se.lth.control.labcomm"+env.verStr+".Constant;");
       env.println("import se.lth.control.labcomm"+env.verStr+".SampleType;");
 
-      if (getType().Java_needInstance() || hasDependencies() || isReferenced()) {
+      if (getDataType().Java_needInstance() || hasDependencies() || isReferenced()) {
           env.println("import se.lth.control.labcomm"+env.verStr+".Encoder;");
           env.println("import se.lth.control.labcomm"+env.verStr+".SampleDispatcher;");
           env.println("import se.lth.control.labcomm"+env.verStr+".SampleHandler;");
 //          env.println();
 //      }
 //
-//      if (getType().Java_needInstance()) {
+//      if (getDataType().Java_needInstance()) {
           env.println("import java.io.IOException;");
           env.println("import se.lth.control.labcomm"+env.verStr+".Decoder;");
       }
@@ -374,14 +374,14 @@ aspect Java_Class {
       env.println();
 
       env.indent();
-      if (getType().Java_needInstance()) {
-        getType().Java_emitInstance(env);
+      if (getDataType().Java_needInstance()) {
+        getDataType().Java_emitInstance(env);
         Java_emitEncoder(env);
         Java_emitDecoder(env);
       }
 
       //if(hasDependencies() || isReferenced()) {
-      //if( getType().isUserType() && isReferenced()) {
+      //if( getDataType().isUserType() && isReferenced()) {
       if( isReferenced()) {
         Java_emitRegisterEncoder(env);
         Java_emitDispatcher(env, false);
@@ -414,17 +414,17 @@ aspect Java_Class {
 //  Code for making samples of user types extend their type
 //  currently commented out. Is this a good idea or not?
 //
-//    if(getType().isUserType()) {
-//        env.print(" extends "+getType().getTypeName());
+//    if(getDataType().isUserType()) {
+//        env.print(" extends "+getDataType().getTypeName());
 //    }
     env.println(" implements Sample {");
     env.println();
     env.indent();
-    getType().Java_emitInstance(env);
+    getDataType().Java_emitInstance(env);
     env.println("public interface Handler extends SampleHandler {");
     env.print("  public void handle_" + getName() + "(");
     if (!isVoid()) {
-      getType().Java_emitType(env);
+      getDataType().Java_emitType(env);
       env.print(" value");
     }
     env.println(") throws Exception;");
@@ -611,12 +611,12 @@ aspect Java_Class {
     env.print("public static void encode(Encoder e");
     if (!isVoid()) {
       env.print(", ");
-      getType().Java_emitType(env);
+      getDataType().Java_emitType(env);
       env.print(" value");
     }
     env.println(") throws IOException {");
     env.indent();
-    getType().Java_emitEncoder(env, "value");
+    getDataType().Java_emitEncoder(env, "value");
     env.unindent();
     env.println("}");
     env.println();
@@ -626,20 +626,20 @@ aspect Java_Class {
     env.print("public static void encode(Encoder e");
     if (!isVoid()) {
       env.print(", ");
-      getType().Java_emitType(env);
+      getDataType().Java_emitType(env);
       env.print(" value");
     }
     env.println(") throws IOException {");
     env.indent();
     env.println("e.begin(" + getName() + ".class);");
-    getType().Java_emitEncoder(env, "value");
+    getDataType().Java_emitEncoder(env, "value");
     env.println("e.end(" + getName() + ".class);");
     env.unindent();
     env.println("}");
     env.println();
   }
 
-  public void Type.Java_emitEncoder(Java_env env, String name) {
+  public void DataType.Java_emitEncoder(Java_env env, String name) {
     throw new Error(this.getClass().getName() +
 		    ".Java_emitEncoder(Java_env env, String name)" +
 		    " not declared");
@@ -676,7 +676,7 @@ aspect Java_Class {
       String limit = "i_" + (baseDepth + i) + "_max";
       name = name + env.print_for_begin(limit);
     }
-    getType().Java_emitEncoder(env, name);
+    getDataType().Java_emitEncoder(env, name);
     for (int i = 0 ; i < getNumExp() ; i++) {
       env.print_for_end();
       env.print_block_end();
@@ -701,7 +701,7 @@ aspect Java_Class {
   public void StructType.Java_emitEncoder(Java_env env, String name) {
     for (int i = 0 ; i < getNumField() ; i++) {
       Field f = getField(i);
-      f.getType().Java_emitEncoder(env, name + "." + f.getName());
+      f.getDataType().Java_emitEncoder(env, name + "." + f.getName());
     }
   }
 
@@ -709,19 +709,19 @@ aspect Java_Class {
     if (Java_needInstance()) {
       env.println(getName() + ".encode(e, " + name + ");");
     } else {
-      decl().getType().Java_emitEncoder(env, name);
+      decl().getDataType().Java_emitEncoder(env, name);
     }
   }
 
   public void Decl.Java_emitDecoder(Java_env env) {
     env.print("public static ");
-    getType().Java_emitType(env);
+    getDataType().Java_emitType(env);
     env.println(" decode(Decoder d) throws IOException {");
     env.indent();
     if (!isVoid()) {
-      getType().Java_emitType(env);
+      getDataType().Java_emitType(env);
       env.println(" result;");
-      getType().Java_emitDecoder(env, "result");
+      getDataType().Java_emitDecoder(env, "result");
       env.println("return result;");
     }
     env.unindent();
@@ -729,7 +729,7 @@ aspect Java_Class {
     env.println();
   }
 
-  public void Type.Java_emitDecoder(Java_env env, String name) {
+  public void DataType.Java_emitDecoder(Java_env env, String name) {
     throw new Error(this.getClass().getName() +
 		    ".Java_emitDecoder(Java_env env, String name)" +
 		    " not declared");
@@ -769,7 +769,7 @@ aspect Java_Class {
       env.println(";");
       name = name + env.print_for_begin(limit);
     }
-    getType().Java_emitDecoder(env, name);
+    getDataType().Java_emitDecoder(env, name);
     for (int i = 0 ; i < getNumExp() ; i++) {
       env.print_for_end();
     }
@@ -797,7 +797,7 @@ aspect Java_Class {
     env.println("();");
     for (int i = 0 ; i < getNumField() ; i++) {
       Field f = getField(i);
-      f.getType().Java_emitDecoder(env, name + "." + f.getName());
+      f.getDataType().Java_emitDecoder(env, name + "." + f.getName());
     }
   }
 
@@ -805,11 +805,11 @@ aspect Java_Class {
     if (Java_needInstance()) {
       env.println(name + " = " + getName() + ".decode(d);");
     } else {
-      decl().getType().Java_emitDecoder(env, name);
+      decl().getDataType().Java_emitDecoder(env, name);
     }
   }
 
-  public void Type.Java_emitNew(Java_env env, String size) {
+  public void DataType.Java_emitNew(Java_env env, String size) {
     throw new Error(this.getClass().getName() +
 		    ".Java_emitNew(Java_env env, String size)" +
 		    " not declared");
@@ -817,15 +817,15 @@ aspect Java_Class {
 
   public void ArrayType.Java_emitNew(Java_env env, String size, int depth) {
     env.print("new ");
-    getType().Java_emitTypePrefix(env);
+    getDataType().Java_emitTypePrefix(env);
     env.print("[" + size + "]");
-    getType().Java_emitTypeSuffix(env);
+    getDataType().Java_emitTypeSuffix(env);
     for (int i = 1 ; i < depth ; i++) {
       env.print("[]");
     }
   }
 
-  public void Type.Java_emitTypePrefix(Java_env env) {
+  public void DataType.Java_emitTypePrefix(Java_env env) {
     throw new Error(this.getClass().getName() +
 		    ".Java_emitTypePrefix(Java_env env)" +
 		    " not declared");
@@ -843,35 +843,35 @@ aspect Java_Class {
     if (Java_needInstance()) {
       env.print(getName());
     } else {
-      decl().getType().Java_emitTypePrefix(env);
+      decl().getDataType().Java_emitTypePrefix(env);
     }
   }
 
   public void ArrayType.Java_emitTypePrefix(Java_env env){
-    getType().Java_emitTypePrefix(env);
+    getDataType().Java_emitTypePrefix(env);
   }
 
   public void StructType.Java_emitTypePrefix(Java_env env){
     env.print(Java_structName());
   }
 
-  public void Type.Java_emitTypeSuffix(Java_env env) {
+  public void DataType.Java_emitTypeSuffix(Java_env env) {
   }
 
   public void UserType.Java_emitTypeSuffix(Java_env env) {
     if (! Java_needInstance()) {
-      decl().getType().Java_emitTypeSuffix(env);
+      decl().getDataType().Java_emitTypeSuffix(env);
     }
   }
 
   public void ArrayType.Java_emitTypeSuffix(Java_env env){
-    getType().Java_emitTypeSuffix(env);
+    getDataType().Java_emitTypeSuffix(env);
     for (int i = 0 ; i < getNumExp() ; i++) {
       env.print("[]");
     }
   }
 
-  public boolean Type.Java_needInstance() {
+  public boolean DataType.Java_needInstance() {
     throw new Error(this.getClass().getName() +
 		    ".Java_needInstance()" +
 		    " not declared");
@@ -886,7 +886,7 @@ aspect Java_Class {
   }
 
   public boolean UserType.Java_needInstance() {
-    return decl().getType().Java_needInstance();
+    return decl().getDataType().Java_needInstance();
   }
 
   public boolean StructType.Java_needInstance() {
@@ -894,10 +894,10 @@ aspect Java_Class {
   }
 
   public boolean ArrayType.Java_needInstance() {
-    return getType().Java_needInstance();
+    return getDataType().Java_needInstance();
   }
 
-  public boolean Type.Java_isPrimitive() {
+  public boolean DataType.Java_isPrimitive() {
     return false;
   }
 
@@ -905,7 +905,7 @@ aspect Java_Class {
     return true;
   }
 
-  public void Type.Java_emitInstance(Java_env env) {
+  public void DataType.Java_emitInstance(Java_env env) {
     throw new Error(this.getClass().getName() +
 		    ".Java_emitInstance(Java_env env)" +
 		    " not declared");
@@ -918,7 +918,7 @@ aspect Java_Class {
   }
 
   public void ArrayType.Java_emitInstance(Java_env env) {
-    getType().Java_emitInstance(env);
+    getDataType().Java_emitInstance(env);
   }
 
   public void StructType.Java_emitInstance(Java_env env) {
@@ -927,7 +927,7 @@ aspect Java_Class {
       env.indent();
     }
     for (int i = 0 ; i < getNumField() ; i++) {
-      getField(i).getType().Java_emitInstance(env);
+      getField(i).getDataType().Java_emitInstance(env);
     }
     for (int i = 0 ; i < getNumField() ; i++) {
       getField(i).Java_emitField(env);
@@ -944,11 +944,11 @@ aspect Java_Class {
 
   public void Field.Java_emitField(Java_env env) {
     env.print("public ");
-    getType().Java_emitType(env);
+    getDataType().Java_emitType(env);
     env.println(" " + getName() + ";");
   }
 
-  public void Type.Java_emitType(Java_env env) {
+  public void DataType.Java_emitType(Java_env env) {
     throw new Error(this.getClass().getName() +
 		    ".Java_emitType(Java_env env)" +
 		    " not declared");
@@ -967,11 +967,11 @@ aspect Java_Class {
   }
 
   public void UserType.Java_emitType(Java_env env) {
-    decl().getType().Java_emitType(env);
+    decl().getDataType().Java_emitType(env);
   }
 
   public void ArrayType.Java_emitType(Java_env env){
-    getType().Java_emitType(env);
+    getDataType().Java_emitType(env);
     for (int i = 0 ; i < getNumExp() ; i++) {
       env.print("[]");
     }
@@ -1047,14 +1047,14 @@ aspect Java_Info {
 
   public void TypeDecl.Java_info(Java_env env) {
     env.print(",Java,typedef," + getName() + ",");
-    getType().Java_emitType(env);
+    getDataType().Java_emitType(env);
     env.print(",not_applicable_for_Java");
     env.println();
   }
 
   public void SampleDecl.Java_info(Java_env env) {
     env.print(",Java,sample," + getName() + ",");
-    getType().Java_emitType(env);
+    getDataType().Java_emitType(env);
     env.print(",not_applicable_for_Java");
     env.println();
   }
diff --git a/compiler/2014/LabComm.ast b/compiler/2014/LabComm.ast
index d3d5e592fc95cb38bf9fd3844d8b3ad2d3cb9081..e861eafaf9986a2d93241236faa8aca65241f6ad 100644
--- a/compiler/2014/LabComm.ast
+++ b/compiler/2014/LabComm.ast
@@ -1,6 +1,6 @@
 Program ::= Decl*;
 
-abstract Decl ::= Type <Name:String> /Signature/;
+abstract Decl ::= DataType <Name:String> /Signature/;
 
 TypeDecl   : Decl;
 SampleDecl : Decl;
@@ -17,16 +17,16 @@ IntSignatureLine           : DataSignatureLine ::= <Data:int>;
 StringSignatureLine        : DataSignatureLine ::= <Data:String>;
 TypeRefSignatureLine       : SignatureLine     ::= Decl;
 
-Field ::= Type <Name:String>;
+Field ::= DataType <Name:String>;
 
-abstract Type;
-VoidType           : Type;
-//SampleRefType      : Type;
-PrimType           : Type ::= <Name:String> <Token:int>;
-UserType           : Type ::= <Name:String>;
-StructType         : Type ::= Field*;
-ParseArrayType     : Type ::= Type Dim*;
-abstract ArrayType : Type ::= Type Exp*;
+abstract DataType;
+VoidType           : DataType;
+//SampleRefType      : DataType;
+PrimType           : DataType ::= <Name:String> <Token:int>;
+UserType           : DataType ::= <Name:String>;
+StructType         : DataType ::= Field*;
+ParseArrayType     : DataType ::= DataType Dim*;
+abstract ArrayType : DataType ::= DataType Exp*;
 VariableArrayType  : ArrayType;
 FixedArrayType     : ArrayType;
 
diff --git a/compiler/2014/LabCommParser.parser b/compiler/2014/LabCommParser.parser
index e7fb759c1511b95fff7fc3a05b18ba2b1e75e850..7719936e3d7fa5f36561937cba2bb8afb945bcde 100644
--- a/compiler/2014/LabCommParser.parser
+++ b/compiler/2014/LabCommParser.parser
@@ -73,7 +73,7 @@ SampleDecl sample_decl =
       {: return new SampleDecl(new ParseArrayType(t, d), IDENTIFIER); :}
   ;
 
-Type type =
+DataType type =
     prim_type.p                     {: return p; :}
   | user_type.u                     {: return u; :}
   | struct_type.s                   {: return s; :}
diff --git a/compiler/2014/NameAnalysis.jrag b/compiler/2014/NameAnalysis.jrag
index 92dbb41d52c56b4f533649831dda41e60aea5d0a..f9012108517f577686270a3fcbc6a7400a0121aa 100644
--- a/compiler/2014/NameAnalysis.jrag
+++ b/compiler/2014/NameAnalysis.jrag
@@ -34,8 +34,8 @@ aspect NameAnalysis {
     return null;
   }
 
-  syn TypeDecl Type.decl(); 
-  eq Type.decl() = null;
+  syn TypeDecl DataType.decl(); 
+  eq DataType.decl() = null;
   eq UserType.decl() = lookupType(getName());
   eq PrimType.decl() = null; //HERE BE DRAGONS XXX
   
diff --git a/compiler/2014/PrettyPrint.jrag b/compiler/2014/PrettyPrint.jrag
index 3808c952309d375c828023c199472d2e6b9e43de..35904daa2280e1c14acd35ec8172ea59e9570986 100644
--- a/compiler/2014/PrettyPrint.jrag
+++ b/compiler/2014/PrettyPrint.jrag
@@ -27,24 +27,24 @@ aspect PrettyPrint {
    // Pretty print declarations
   public void TypeDecl.pp(PrintStream out) {
     out.print("typedef ");
-    getType().ppIdentifier(out, getName());
+    getDataType().ppIdentifier(out, getName());
     out.println(";");
   }
 
   public void SampleDecl.pp(PrintStream out) {
     out.print("sample ");
-    getType().ppIdentifier(out, getName());
+    getDataType().ppIdentifier(out, getName());
     out.println(";");
   }
 
   public void Field.pp(PrintStream out) {
     out.print(pp_indent());
-    getType().ppIdentifier(out, getName());
+    getDataType().ppIdentifier(out, getName());
     out.println(";");
   }
 
   // Pretty print variable of a given type 
-  public void Type.ppIdentifier(PrintStream out, String id) { 
+  public void DataType.ppIdentifier(PrintStream out, String id) { 
     ppPrefix(out);
     out.print(" ");
     out.print(id);
@@ -58,7 +58,7 @@ aspect PrettyPrint {
   }
 
   // PrettyPrint prefix type info
-  public void Type.ppPrefix(PrintStream out) {
+  public void DataType.ppPrefix(PrintStream out) {
     throw new Error(this.getClass().getName() + 
 		    ".ppPrefix(PrintStream out)" + 
 		    " not declared");
@@ -81,7 +81,7 @@ aspect PrettyPrint {
   }
 
   public void ArrayType.ppPrefix(PrintStream out) {
-    getType().ppPrefix(out);
+    getDataType().ppPrefix(out);
   }
 
   public void StructType.ppPrefix(PrintStream out) {
@@ -94,7 +94,7 @@ aspect PrettyPrint {
   }
 
   // PrettyPrint suffix type info (array dimensions)
-  public void Type.ppSuffix(PrintStream out) { }
+  public void DataType.ppSuffix(PrintStream out) { }
 
   public void ArrayType.ppSuffix(PrintStream out) { 
     out.print("[");
@@ -103,7 +103,7 @@ aspect PrettyPrint {
       getExp(i).pp(out);
     }
     out.print("]");
-    getType().ppSuffix(out);
+    getDataType().ppSuffix(out);
   }
 
   public void IntegerLiteral.pp(PrintStream out) {
diff --git a/compiler/2014/Python_CodeGen.jrag b/compiler/2014/Python_CodeGen.jrag
index 1731c941a6fa4e51495f3dbc7fda1c25451980e1..cc238d798d307e574e8b9e7ee9f20ff625c43a4d 100644
--- a/compiler/2014/Python_CodeGen.jrag
+++ b/compiler/2014/Python_CodeGen.jrag
@@ -117,7 +117,7 @@ aspect PythonTypes {
     env.indent();
     env.println("typedef = labcomm2014.typedef('" + getName() + "',");
     env.indent();
-    getType().Python_genTypedef(env);
+    getDataType().Python_genTypedef(env);
     env.unindent();
     env.println(")");
     env.unindent();
@@ -129,12 +129,12 @@ aspect PythonTypes {
     env.indent();
     env.println("signature = labcomm2014.sample('" + getName() + "', ");
     env.indent();
-    getType().Python_genSignature(env);
+    getDataType().Python_genSignature(env);
     env.unindent();
     env.println(")");
     env.println("typedef = labcomm2014.sample('" + getName() + "', ");
     env.indent();
-    getType().Python_genTypedef(env);
+    getDataType().Python_genTypedef(env);
     env.unindent();
     env.println(")");
     env.unindent();
@@ -142,10 +142,10 @@ aspect PythonTypes {
   }
 
   public void UserType.Python_genSignature(Python_env env) {
-    lookupType(getName()).getType().Python_genSignature(env);
+    lookupType(getName()).getDataType().Python_genSignature(env);
   }
 
-  public void Type.Python_genSignature(Python_env env) {
+  public void DataType.Python_genSignature(Python_env env) {
     throw new Error(this.getClass().getName() + 
                     ".Python_genSignature(Python_env env)" + 
                     " not declared");
@@ -173,7 +173,7 @@ aspect PythonTypes {
     }
     env.println("],");
     env.indent();
-    getType().Python_genSignature(env);
+    getDataType().Python_genSignature(env);
     env.print(")");
     env.unindent();
   }
@@ -195,7 +195,7 @@ aspect PythonTypes {
 
   public void Field.Python_genSignature(Python_env env) {
     env.print("('" + getName() + "', ");
-    getType().Python_genSignature(env);
+    getDataType().Python_genSignature(env);
     env.print(")");
   }
 
@@ -203,7 +203,7 @@ aspect PythonTypes {
     env.println(getName() + ".typedef");
   }
 
-  public void Type.Python_genTypedef(Python_env env) {
+  public void DataType.Python_genTypedef(Python_env env) {
     throw new Error(this.getClass().getName() + 
                     ".Python_genTypedef(Python_env env)" + 
                     " not declared");
@@ -231,7 +231,7 @@ aspect PythonTypes {
     }
     env.println("],");
     env.indent();
-    getType().Python_genTypedef(env);
+    getDataType().Python_genTypedef(env);
     env.print(")");
     env.unindent();
   }
@@ -253,7 +253,7 @@ aspect PythonTypes {
 
   public void Field.Python_genTypedef(Python_env env) {
     env.print("('" + getName() + "', ");
-    getType().Python_genTypedef(env);
+    getDataType().Python_genTypedef(env);
     env.print(")");
   }
 
diff --git a/compiler/2014/RAPID_CodeGen.jrag b/compiler/2014/RAPID_CodeGen.jrag
index b367ee5720eb34ff4cd308cd4eeab56a6d1002cd..dc3f343ac66067df0ddc746f9814e1b3963cb663 100644
--- a/compiler/2014/RAPID_CodeGen.jrag
+++ b/compiler/2014/RAPID_CodeGen.jrag
@@ -126,7 +126,7 @@ aspect RAPID_CodeGen {
 
 	public void SampleDecl.RAPID_gen(RAPID_env env) {
 		// Add type declarations
-		String fullName = getType().RAPID_AddType(env, getName());
+		String fullName = getDataType().RAPID_AddType(env, getName());
 		// Add signature constants
 		String sig_len_name = "signature_len_" + getName();
 		String sig_name = "signature_" + getName();
@@ -167,7 +167,7 @@ aspect RAPID_CodeGen {
 		params.add("VAR LabComm_Stream st");
 		params.add("VAR LabComm_Decoder_Sample s");
 		stmts.add("VAR " + fullName + " tmp;");
-		getType().RAPID_AddDecodeInstr(env, stmts, "tmp", "st");
+		getDataType().RAPID_AddDecodeInstr(env, stmts, "tmp", "st");
 		stmts.add("% s.handler % tmp;");
 		env.addProc("Decode_And_Handle_" + getName(), params, stmts);
 
@@ -201,11 +201,11 @@ aspect RAPID_CodeGen {
 		params.add("VAR LabComm_Encoder_Sample s");
 		params.add("VAR " + fullName + " val");
 		stmts.add("Encode_Packed st, s.user_id;");
-		getType().RAPID_AddEncodeInstr(env, stmts, "val", "st");
+		getDataType().RAPID_AddEncodeInstr(env, stmts, "val", "st");
 		env.addProc("Encode_" + getName(), params, stmts);
 	}
 
-	public String Type.RAPID_AddType(RAPID_env env, String name) {
+	public String DataType.RAPID_AddType(RAPID_env env, String name) {
 		throw new UnsupportedOperationException("RAPID code generation does (currently) not support "+getClass().getSimpleName());
 	}
 
@@ -214,7 +214,7 @@ aspect RAPID_CodeGen {
 		for (int i = 0; i < getNumField(); i++) {
 			Field f = getField(i);
 			components.add(
-					f.getType().RAPID_AddType(env, name + "_" + f.getName()) +
+					f.getDataType().RAPID_AddType(env, name + "_" + f.getName()) +
 					" " + f.getName() + ";");
 		}
 		String typeName = env.addRecord(name, components);
@@ -222,7 +222,7 @@ aspect RAPID_CodeGen {
 	}
 
 	public String FixedArrayType.RAPID_AddType(RAPID_env env, String name) {
-		String typeName = getType().RAPID_AddType(env, name + "_e");
+		String typeName = getDataType().RAPID_AddType(env, name + "_e");
 		if (getNumExp() > 1) {
 			throw new UnsupportedOperationException("RAPID generation only (currently) supports one-dimensional arrays");
 		}
@@ -251,7 +251,7 @@ aspect RAPID_CodeGen {
 		throw new UnsupportedOperationException("RAPID code generation does not (currently) support "+getName());
 	}
 
-	public void Type.RAPID_AddDecodeInstr(RAPID_env env,
+	public void DataType.RAPID_AddDecodeInstr(RAPID_env env,
 			java.util.List<String> instrs,
 			String var_name, String stream_name) {
 		throw new UnsupportedOperationException("RAPID code generation does not (currently) support "+getClass().getSimpleName());
@@ -261,7 +261,7 @@ aspect RAPID_CodeGen {
 			java.util.List<String> instrs,
 			String var_name, String stream_name) {
 		for (int i = 0; i < getNumField(); i++) {
-			getField(i).getType().RAPID_AddDecodeInstr(env, instrs,
+			getField(i).getDataType().RAPID_AddDecodeInstr(env, instrs,
 					var_name + "." + getField(i).getName(), stream_name);
 		}
 	}
@@ -270,7 +270,7 @@ aspect RAPID_CodeGen {
 			java.util.List<String> instrs,
 			String var_name, String stream_name) {
 		for (int i = 1; i <= getExp(0).RAPID_getValue(); i++) {
-			getType().RAPID_AddDecodeInstr(env, instrs,
+			getDataType().RAPID_AddDecodeInstr(env, instrs,
 					var_name + ".e" + i, stream_name);
 		}
 	}
@@ -305,7 +305,7 @@ aspect RAPID_CodeGen {
 		}
 	}
 
-	public void Type.RAPID_AddEncodeInstr(RAPID_env env,
+	public void DataType.RAPID_AddEncodeInstr(RAPID_env env,
 			java.util.List<String> instrs,
 			String var_name, String stream_name) {
 		throw new UnsupportedOperationException("RAPID code generation does not (currently) support "+getClass().getSimpleName());
@@ -315,7 +315,7 @@ aspect RAPID_CodeGen {
 			java.util.List<String> instrs,
 			String var_name, String stream_name) {
 		for (int i = 0; i < getNumField(); i++) {
-			getField(i).getType().RAPID_AddEncodeInstr(env, instrs,
+			getField(i).getDataType().RAPID_AddEncodeInstr(env, instrs,
 					var_name + "." + getField(i).getName(), stream_name);
 		}
 	}
@@ -324,7 +324,7 @@ aspect RAPID_CodeGen {
 			java.util.List<String> instrs,
 			String var_name, String stream_name) {
 		for (int i = 1; i <= getExp(0).RAPID_getValue(); i++) {
-			getType().RAPID_AddEncodeInstr(env, instrs,
+			getDataType().RAPID_AddEncodeInstr(env, instrs,
 					var_name + ".e" + i, stream_name);
 		}
 	}
diff --git a/compiler/2014/Signature.jrag b/compiler/2014/Signature.jrag
index b32e53580aa900e31357333904aeeb115180bcf0..f3f0119cadfc0968338b4d21c351f19ec2489691 100644
--- a/compiler/2014/Signature.jrag
+++ b/compiler/2014/Signature.jrag
@@ -159,14 +159,14 @@ aspect Signature {
 
   public void TypeDecl.genSigLineForDecl(SignatureList list, boolean decl) {
     if(decl){
-      getType().genSigLineForDecl(list, decl);
+      getDataType().genSigLineForDecl(list, decl);
     }else{
       list.addTypeRef(this, "//TODO (from list.addTypeRef)");
     }
   }
 
   public void SampleDecl.genSigLineForDecl(SignatureList list, boolean decl) {
-    getType().genSigLineForDecl(list, decl);
+    getDataType().genSigLineForDecl(list, decl);
   }
 
   public void VoidType.genSigLineForDecl(SignatureList list, boolean decl) {
@@ -197,7 +197,7 @@ aspect Signature {
     for (int i = 0 ; i < getNumExp() ; i++) {
       getExp(i).genSigLineForDecl(list, false);
     }
-    getType().genSigLineForDecl(list, false);
+    getDataType().genSigLineForDecl(list, false);
     list.unindent();
     list.add(null, "}");
   }
@@ -215,7 +215,7 @@ aspect Signature {
 
   public void Field.genSigLineForDecl(SignatureList list, boolean decl) {
     list.addString(getName(), signatureComment());
-    getType().genSigLineForDecl(list, decl);
+    getDataType().genSigLineForDecl(list, decl);
   }
 
   public void IntegerLiteral.genSigLineForDecl(SignatureList list, boolean decl) {
diff --git a/compiler/2014/TypeCheck.jrag b/compiler/2014/TypeCheck.jrag
index a640ace5098013bef6cad31767a96220aa66b8a7..4d8c40a137ce92a5310d9e957dfdc921301f5cdd 100644
--- a/compiler/2014/TypeCheck.jrag
+++ b/compiler/2014/TypeCheck.jrag
@@ -6,30 +6,30 @@ aspect TypeCheck {
 
 // void is not allowed as a field in a struct or an array element
   
-  syn boolean Type.isNull();
-  eq Type.isNull() = false;
+  syn boolean DataType.isNull();
+  eq DataType.isNull() = false;
   eq VoidType.isNull() = true;
   eq UserType.isNull() = decl().isNull();
 
   syn boolean TypeDecl.isNull();
-  eq TypeDecl.isNull() = getType().isNull();
+  eq TypeDecl.isNull() = getDataType().isNull();
   
   public void ASTNode.nullTypeCheck() {}
  
   public void Field.nullTypeCheck() {
-    if(getType().isNull()) {
+    if(getDataType().isNull()) {
       error("field " + getName() + " of struct "+ declName()+ " may not be of type void");
     }
   }
 
   public void ParseArrayType.nullTypeCheck() {
-    if(getType().isNull()) {
+    if(getDataType().isNull()) {
       error("elements of array "+declName()+" may not be of type void");
     }
   }
 
   public void ArrayType.nullTypeCheck() {
-    if(getType().isNull()) {
+    if(getDataType().isNull()) {
       error("elements of array "+declName()+" may not be of type void");
     }
   }
diff --git a/compiler/2014/TypeReferences.jrag b/compiler/2014/TypeReferences.jrag
index 0a7cd9b0a1cd9a0a92ab49f4f4c509eb2a16fe56..1664ecec530cd515fe2ae1fb5d4c9eb4c12009a5 100644
--- a/compiler/2014/TypeReferences.jrag
+++ b/compiler/2014/TypeReferences.jrag
@@ -1,11 +1,11 @@
 aspect User_Types {
-  syn String Type.getTypeName();
-  eq Type.getTypeName() = getClass().getName();
+  syn String DataType.getTypeName();
+  eq DataType.getTypeName() = getClass().getName();
   eq PrimType.getTypeName() = getName();
   eq UserType.getTypeName() = getName();
 
-  syn boolean Type.isUserType();
-  eq Type.isUserType() = false;
+  syn boolean DataType.isUserType();
+  eq DataType.isUserType() = false;
   eq UserType.isUserType() = true;
 }
 
@@ -14,8 +14,8 @@ aspect Type_References {
   // The dependencies on other type declarations for a Decl.
   coll Set<Decl> Decl.type_dependencies() [new HashSet<Decl>()] with add;
 
-  Field contributes ((UserType)getType()).decl()   
-  when parentDecl() != null && getType().isUserType()
+  Field contributes ((UserType)getDataType()).decl()   
+  when parentDecl() != null && getDataType().isUserType()
   to Decl.type_dependencies() 
   for parentDecl();
 
@@ -24,8 +24,8 @@ aspect Type_References {
   to Decl.type_dependencies() 
   for parentDecl();
   /*
-  Field contributes getType().decl()   
-  when parentDecl() != null && getType().isLeafType()
+  Field contributes getDataType().decl()   
+  when parentDecl() != null && getDataType().isLeafType()
   to Decl.type_dependencies() 
   for parentDecl();
   */
diff --git a/doc/tech_report.tex b/doc/tech_report.tex
index 62a2f2e086b31edd1dd333342d7309d293f73939..883fd4c3f951339188b1ee0f63372c97a36c41c0 100644
--- a/doc/tech_report.tex
+++ b/doc/tech_report.tex
@@ -780,20 +780,20 @@ Avro has multiple codecs (for compression of the data):
 \begin{verbatim}
 Program ::= Decl*;
 
-abstract Decl ::= Type <Name:String>;
+abstract Decl ::= DataType <Name:String>;
 TypeDecl : Decl;
 SampleDecl : Decl;
 
-Field ::= Type <Name:String>;
+Field ::= DataType <Name:String>;
 
-abstract Type;
-VoidType          : Type;
-SampleRefType     : Type;
-PrimType          : Type ::= <Name:String> <Token:int>;
-UserType          : Type ::= <Name:String>;
-StructType        : Type ::= Field*;
-ParseArrayType    : Type ::= Type Dim*;
-abstract ArrayType : Type ::= Type Exp*;
+abstract DataType;
+VoidType          : DataType;
+SampleRefType     : DataType;
+PrimType          : DataType ::= <Name:String> <Token:int>;
+UserType          : DataType ::= <Name:String>;
+StructType        : DataType ::= Field*;
+ParseArrayType    : DataType ::= DataType Dim*;
+abstract ArrayType : DataType ::= DataType Exp*;
 VariableArrayType : ArrayType;
 FixedArrayType    : ArrayType;
 
diff --git a/lib/java/se/lth/control/labcomm2014/ASTbuilder.java b/lib/java/se/lth/control/labcomm2014/ASTbuilder.java
index 442afb86c2faad21eb76958685f3c6607f1bc1fd..8e36736dfa212d60692ddf386a01db76771da289 100644
--- a/lib/java/se/lth/control/labcomm2014/ASTbuilder.java
+++ b/lib/java/se/lth/control/labcomm2014/ASTbuilder.java
@@ -21,7 +21,7 @@ import se.lth.control.labcomm2014.compiler.Program;
 import se.lth.control.labcomm2014.compiler.Decl;
 import se.lth.control.labcomm2014.compiler.TypeDecl;
 import se.lth.control.labcomm2014.compiler.SampleDecl;
-import se.lth.control.labcomm2014.compiler.Type;
+import se.lth.control.labcomm2014.compiler.DataType;
 import se.lth.control.labcomm2014.compiler.VoidType;
 import se.lth.control.labcomm2014.compiler.PrimType;
 import se.lth.control.labcomm2014.compiler.UserType;
@@ -41,11 +41,11 @@ import se.lth.control.labcomm2014.compiler.VariableSize;
  */
 public class ASTbuilder implements TypeDefParser.ParsedSymbolVisitor {
 
-        private LinkedList<Type> typeStack;
+        private LinkedList<DataType> typeStack;
         private LinkedList<Field> fieldStack;
 
         public ASTbuilder() {
-            this.typeStack = new LinkedList<Type>();
+            this.typeStack = new LinkedList<DataType>();
             this.fieldStack = new LinkedList<Field>();
         }