diff --git a/lib/c/2014/labcomm_decoder.c b/lib/c/2014/labcomm_decoder.c
index aafc5d36f3ed69a388df58139207d953899fcf44..cac035f6cb431e97efad2836dd33f5d86dd3fcb6 100644
--- a/lib/c/2014/labcomm_decoder.c
+++ b/lib/c/2014/labcomm_decoder.c
@@ -26,6 +26,18 @@
 #include "labcomm_ioctl.h"
 #include "labcomm_dynamic_buffer_writer.h"
 
+#ifdef DEBUG
+#define DEBUG_FPRINTF(str, ...) fprintf(str, ##__VA_ARGS__)
+#else
+#define DEBUG_FPRINTF(str, ...)
+#endif
+
+#ifdef DECODER_DEBUG
+#define DECODER_DEBUG_FPRINTF(str, ...) fprintf(str, ##__VA_ARGS__) 
+#else
+#define DECODER_DEBUG_FPRINTF(str, ...)
+#endif
+
 struct sample_entry {
   int remote_index;
   const struct labcomm_signature *signature;
@@ -169,92 +181,19 @@ static int handle_sample_ref(struct labcomm_decoder *d, int remote_index,
 static int decoder_skip(struct labcomm_decoder *d, int len, int tag)
 {
   int i;
-#ifdef LABCOMM_DECODER_DEBUG
-  printf("got tag 0x%x, skipping %d bytes\n", tag, len);
-#endif
+  DECODER_DEBUG_FPRINTF(stdout, "got tag 0x%x, skipping %d bytes\n", tag, len);
   for(i = 0; i <len; i++){
-#ifdef LABCOMM_DECODER_DEBUG
-    fprintf(stderr,".");
-#endif
+    DECODER_DEBUG_FPRINTF(stderr, ".");
     labcomm_read_byte(d->reader);
     if (d->reader->error < 0) {
-#ifdef LABCOMM_DECODER_DEBUG
-      fprintf(stderr, "\nerror while skipping: %d\n",  d->reader->error);
-#endif
+      DECODER_DEBUG_FPRINTF(stderr, "\nerror while skipping: %d\n",  d->reader->error);
       return d->reader->error;
     }
   }
-#ifdef LABCOMM_DECODER_DEBUG
-  fprintf(stderr, "\n");
-#endif
+  DECODER_DEBUG_FPRINTF(stderr, "\n");
   return tag;
 }
 
-#ifdef OLD_type_def_DECODING_TEST_CODE 
-static int decode_type_binding(struct labcomm_decoder *d, int kind)
-{
-  int result;
-  int sample_index = result = labcomm_read_packed32(d->reader);
-  if(d->reader->error < 0 ) {
-      result =  d->reader->error;
-      goto out;
-  }
-  int type_def_index = labcomm_read_packed32(d->reader);
-  if(d->reader->error < 0 ) {
-      result =  d->reader->error;
-      goto out;
-  }
-#ifdef LABCOMM_DECODER_DEBUG
-  printf("type_binding: 0x%x -> 0x%x\n", sample_index, type_def_index);
-#endif
-out:
-  return result;
-} 
-
-static int decode_type_def(struct labcomm_decoder *d, int kind){
-  int i, remote_index, result;
-  char *name;
-  int size;
-  remote_index = labcomm_read_packed32(d->reader);
-  result = remote_index;
-  if (d->reader->error < 0) {
-    result = d->reader->error;
-    goto out;
-  }
-  name = labcomm_read_string(d->reader);
-  if (d->reader->error < 0) {
-    result = d->reader->error;
-    goto out;
-  }
-  size = labcomm_read_packed32(d->reader);
-  if (d->reader->error < 0) {
-    result = d->reader->error;
-    goto free_signature_name;
-  }
-  //printf("got type_def 0x%x : %s, skipping %d signature bytes", remote_index, name, size); 
-#if 0
-  signature.signature = labcomm_memory_alloc(d->memory, 1,  signature.size);
-  if (d->reader->error < 0) {
-    result = d->reader->error;
-    goto free_signature_name;
-  }
-#endif
-  for (i = 0 ; i < size ; i++) {
-    /*signature.signature[i] =*/ labcomm_read_byte(d->reader);
-    if (d->reader->error < 0) {
-      result = d->reader->error;
-      goto free_signature_signature;
-    }
-  }
-free_signature_signature:
-//  labcomm_memory_free(d->memory, 1,  signature.signature);
-free_signature_name:
-  labcomm_memory_free(d->memory, 0, name);
-out:
-  return result;
-}
-#endif
-
 static int decode_sample_def_or_ref(struct labcomm_decoder *d, int kind)
 {
   int result;
@@ -449,9 +388,7 @@ int labcomm_decoder_decode_one(struct labcomm_decoder *d)
     }  
     labcomm_memory_free(d->memory, 1,  version);
   } else if (! d->version_ok) {
-#ifdef LABCOMM_DECODER_DEBUG
-    fprintf(stderr, "No VERSION %d %d\n", remote_index, length);
-#endif
+    DEBUG_FPRINTF(stderr, "No VERSION %d %d\n", remote_index, length);
     result = -ECONNRESET;
   } else if (remote_index == LABCOMM_SAMPLE_DEF) {
     result = decode_sample_def_or_ref(d, LABCOMM_SAMPLE_DEF); 
@@ -461,28 +398,18 @@ int labcomm_decoder_decode_one(struct labcomm_decoder *d)
     result = decode_and_handle(d, d, remote_index);
     if(result == -ENOENT) { 
         //No handler for type_defs, skip
-#ifdef OLD_type_def_DECODING_TEST_CODE 
-        result = decode_type_def(d, LABCOMM_TYPE_DEF); 
-#else
         result = decoder_skip(d, length, remote_index);
-#endif
     }
   } else if (remote_index == LABCOMM_TYPE_BINDING) {
     result = decode_and_handle(d, d, remote_index);
     if(result == -ENOENT) { 
         //No handler for type_bindings, skip
-#ifdef OLD_type_def_DECODING_TEST_CODE 
-      result = decode_type_binding(d, LABCOMM_TYPE_BINDING); 
-#else
         result = decoder_skip(d, length, remote_index);
-#endif
     }
   } else if (remote_index == LABCOMM_PRAGMA) {
     result = decode_pragma(d, d, length);
   } else if (remote_index < LABCOMM_USER) {
-#ifdef LABCOMM_DECODER_DEBUG
-    fprintf(stderr, "SKIP %d %d\n", remote_index, length);
-#endif
+    DECODER_DEBUG_FPRINTF(stderr, "SKIP %d %d\n", remote_index, length);
     result = decoder_skip(d, length, remote_index);
   } else {
     result = decode_and_handle(d, d, remote_index);
diff --git a/lib/c/2014/labcomm_encoder.c b/lib/c/2014/labcomm_encoder.c
index 6f1da153ab829b9324e3ecdc5daf14a819ef3dc3..4b71ed03285dfd9dfc1de13f29c4c02705d12794 100644
--- a/lib/c/2014/labcomm_encoder.c
+++ b/lib/c/2014/labcomm_encoder.c
@@ -26,6 +26,9 @@
 #include "labcomm_ioctl.h"
 #include "labcomm_dynamic_buffer_writer.h"
 
+//define the following to disable encoding of typedefs
+#undef LABCOMM_WITHOUT_TYPE_DEFS
+
 struct labcomm_encoder {
   struct labcomm_writer *writer;
   struct labcomm_error_handler *error;
@@ -97,134 +100,6 @@ void labcomm_encoder_free(struct labcomm_encoder* e)
   labcomm_memory_free(memory, 0, e);
 }
 
-#ifndef LABCOMM_WITHOUT_TYPE_DEFS
-
-static void write_sig_tree_byte(char b, const struct labcomm_signature *signature,
-                           void *context)
-{
-  struct labcomm_encoder *e = context;
-  if(signature) {
-    labcomm_write_packed32(e->writer, labcomm_get_local_index(signature));
-  }else {
-    if (e->writer->pos >= e->writer->count) {
-     labcomm_writer_flush(e->writer, e->writer->action_context);
-    }
-    e->writer->data[e->writer->pos] = b;
-    e->writer->pos++;
-  }
-}
-
-static void do_write_signature(struct labcomm_encoder * e, 
-                               const struct labcomm_signature *signature, 
-                               unsigned char flatten)
-{
-  map_signature(write_sig_tree_byte, e, signature, flatten);
-}
-
-static void sig_size(char b, const struct labcomm_signature *signature,
-                     void *context)
-{
-  int *result = context;
-  int diff;
-  if(signature) {
-    int idx = labcomm_get_local_index(signature);
-    diff = labcomm_size_packed32(idx);
-  }else {
-    diff = 1;
-  }
-    (*result)+=diff;
-}
-
-static int calc_sig_encoded_size(struct labcomm_encoder *e,
-                                 const struct labcomm_signature *sig)
-{
-  int result=0;
-  map_signature(sig_size, &result, sig, FALSE);
-  return result;
-}
-
-static int internal_reg_type(
-  struct labcomm_encoder *e,
-  const struct labcomm_signature *signature,
-  labcomm_bool flatten)
-{
-  int result = -EINVAL;
-  int index, *done, err;
-
-  index = labcomm_get_local_index(signature);
-  labcomm_scheduler_writer_lock(e->scheduler);
-  if (index <= 0) { goto out; }
-  done = LABCOMM_SIGNATURE_ARRAY_REF(e->memory, e->typedefs, int, index);
-  if (*done) { goto out; }
-  *done = 1;
-  err = labcomm_writer_start(e->writer, e->writer->action_context,
-                 index, signature, NULL);
-  if (err == -EALREADY) { result = 0; goto out; }
-  if (err != 0) { result = err; goto out; }
-
-  int sig_size = calc_sig_encoded_size(e, signature);
-  int len =  labcomm_size_packed32(index) +
-             labcomm_size_string(signature->name) +
-             labcomm_size_packed32(sig_size) +
-              sig_size;
-
-  labcomm_write_packed32(e->writer, LABCOMM_TYPE_DEF);
-  labcomm_write_packed32(e->writer, len);
-  labcomm_write_packed32(e->writer, index);
-  labcomm_write_string(e->writer, signature->name);
-  labcomm_write_packed32(e->writer, sig_size);
-  do_write_signature(e, signature, FALSE);
-
-  labcomm_writer_end(e->writer, e->writer->action_context);
-  result = e->writer->error;
-out:
-  labcomm_scheduler_writer_unlock(e->scheduler);
-  return result;
-}
-#endif
-
-int labcomm_internal_encoder_type_register(
-  struct labcomm_encoder *e,
-  const struct labcomm_signature *signature)
-{
-#ifndef WITHOUT_TYPE_DEFS
-  return internal_reg_type(e, signature, FALSE);
-#else
-   return 0;
-#endif
-}
-int labcomm_internal_encoder_type_bind(
-  struct labcomm_encoder *e,
-  const struct labcomm_signature *signature,
-  char has_deps)
-{
-#ifndef WITHOUT_TYPE_DEFS
-  int result = -EINVAL;
-  int err;
-  int sindex = labcomm_get_local_index(signature);
-  int tindex = has_deps ? labcomm_get_local_type_index(signature) : LABCOMM_BIND_SELF;
-  labcomm_scheduler_writer_lock(e->scheduler);
-  if(sindex <= 0 || (has_deps && tindex <= 0)) {goto out;}
-  err = labcomm_writer_start(e->writer, e->writer->action_context,
-			     LABCOMM_TYPE_BINDING, signature, NULL);
-  if (err == -EALREADY) { result = 0; goto out; }
-  if (err != 0) { result = err; goto out; }
-  int length = (labcomm_size_packed32(sindex) +
-                labcomm_size_packed32(tindex));
-  labcomm_write_packed32(e->writer, LABCOMM_TYPE_BINDING);
-  labcomm_write_packed32(e->writer, length);
-  labcomm_write_packed32(e->writer, sindex);
-  labcomm_write_packed32(e->writer, tindex);
-  labcomm_writer_end(e->writer, e->writer->action_context);
-  result = e->writer->error;
-
-out:
-  labcomm_scheduler_writer_unlock(e->scheduler);
-  return result;
-#else
-  return 0;
-#endif
-}
 int labcomm_internal_encoder_register(
   struct labcomm_encoder *e,
   const struct labcomm_signature *signature,
@@ -388,3 +263,136 @@ int labcomm_internal_encoder_signature_to_index(
   return index;
 }
 
+
+/**********************************************************
+ * Start of code related to sending (hierarchical)
+ * typedefs. Define LABCOMM_WITHOUT_TYPEDEFS to disable
+ **********************************************************/
+#ifndef LABCOMM_WITHOUT_TYPE_DEFS
+
+static void write_sig_tree_byte(char b, const struct labcomm_signature *signature,
+                           void *context)
+{
+  struct labcomm_encoder *e = context;
+  if(signature) {
+    labcomm_write_packed32(e->writer, labcomm_get_local_index(signature));
+  }else {
+    if (e->writer->pos >= e->writer->count) {
+     labcomm_writer_flush(e->writer, e->writer->action_context);
+    }
+    e->writer->data[e->writer->pos] = b;
+    e->writer->pos++;
+  }
+}
+
+static void do_write_signature(struct labcomm_encoder * e, 
+                               const struct labcomm_signature *signature, 
+                               unsigned char flatten)
+{
+  map_signature(write_sig_tree_byte, e, signature, flatten);
+}
+
+static void sig_size(char b, const struct labcomm_signature *signature,
+                     void *context)
+{
+  int *result = context;
+  int diff;
+  if(signature) {
+    int idx = labcomm_get_local_index(signature);
+    diff = labcomm_size_packed32(idx);
+  }else {
+    diff = 1;
+  }
+    (*result)+=diff;
+}
+
+static int calc_sig_encoded_size(struct labcomm_encoder *e,
+                                 const struct labcomm_signature *sig)
+{
+  int result=0;
+  map_signature(sig_size, &result, sig, FALSE);
+  return result;
+}
+
+static int internal_reg_type(
+  struct labcomm_encoder *e,
+  const struct labcomm_signature *signature,
+  labcomm_bool flatten)
+{
+  int result = -EINVAL;
+  int index, *done, err;
+
+  index = labcomm_get_local_index(signature);
+  labcomm_scheduler_writer_lock(e->scheduler);
+  if (index <= 0) { goto out; }
+  done = LABCOMM_SIGNATURE_ARRAY_REF(e->memory, e->typedefs, int, index);
+  if (*done) { goto out; }
+  *done = 1;
+  err = labcomm_writer_start(e->writer, e->writer->action_context,
+                 index, signature, NULL);
+  if (err == -EALREADY) { result = 0; goto out; }
+  if (err != 0) { result = err; goto out; }
+
+  int sig_size = calc_sig_encoded_size(e, signature);
+  int len =  labcomm_size_packed32(index) +
+             labcomm_size_string(signature->name) +
+             labcomm_size_packed32(sig_size) +
+              sig_size;
+
+  labcomm_write_packed32(e->writer, LABCOMM_TYPE_DEF);
+  labcomm_write_packed32(e->writer, len);
+  labcomm_write_packed32(e->writer, index);
+  labcomm_write_string(e->writer, signature->name);
+  labcomm_write_packed32(e->writer, sig_size);
+  do_write_signature(e, signature, FALSE);
+
+  labcomm_writer_end(e->writer, e->writer->action_context);
+  result = e->writer->error;
+out:
+  labcomm_scheduler_writer_unlock(e->scheduler);
+  return result;
+}
+#endif
+
+int labcomm_internal_encoder_type_register(
+  struct labcomm_encoder *e,
+  const struct labcomm_signature *signature)
+{
+#ifndef LABCOMM_WITHOUT_TYPE_DEFS
+  return internal_reg_type(e, signature, FALSE);
+#else
+  return 0;
+#endif
+}
+int labcomm_internal_encoder_type_bind(
+  struct labcomm_encoder *e,
+  const struct labcomm_signature *signature,
+  char has_deps)
+{
+#ifndef LABCOMM_WITHOUT_TYPE_DEFS
+  int result = -EINVAL;
+  int err;
+  int sindex = labcomm_get_local_index(signature);
+  int tindex = has_deps ? labcomm_get_local_type_index(signature) : LABCOMM_BIND_SELF;
+  labcomm_scheduler_writer_lock(e->scheduler);
+  if(sindex <= 0 || (has_deps && tindex <= 0)) {goto out;}
+  err = labcomm_writer_start(e->writer, e->writer->action_context,
+			     LABCOMM_TYPE_BINDING, signature, NULL);
+  if (err == -EALREADY) { result = 0; goto out; }
+  if (err != 0) { result = err; goto out; }
+  int length = (labcomm_size_packed32(sindex) +
+                labcomm_size_packed32(tindex));
+  labcomm_write_packed32(e->writer, LABCOMM_TYPE_BINDING);
+  labcomm_write_packed32(e->writer, length);
+  labcomm_write_packed32(e->writer, sindex);
+  labcomm_write_packed32(e->writer, tindex);
+  labcomm_writer_end(e->writer, e->writer->action_context);
+  result = e->writer->error;
+
+out:
+  labcomm_scheduler_writer_unlock(e->scheduler);
+  return result;
+#else
+  return 0;
+#endif
+}
diff --git a/lib/java/se/lth/control/labcomm/ASTbuilder.java b/lib/java/se/lth/control/labcomm/ASTbuilder.java
index f05a3c5fd332641e675f2eb71aa1f59915ef1558..73bd171750c722c910a12549f535272eafc3b5a5 100644
--- a/lib/java/se/lth/control/labcomm/ASTbuilder.java
+++ b/lib/java/se/lth/control/labcomm/ASTbuilder.java
@@ -23,7 +23,6 @@ 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.VoidType;
-//import se.lth.control.labcomm2014.compiler.SampleRefType;
 import se.lth.control.labcomm2014.compiler.PrimType;
 import se.lth.control.labcomm2014.compiler.UserType;
 import se.lth.control.labcomm2014.compiler.StructType;
@@ -42,9 +41,6 @@ import se.lth.control.labcomm2014.compiler.VariableSize;
  */
 public class ASTbuilder implements TypeDefParser.ParsedSymbolVisitor {
 
-///// tree building
-//
-//
         private LinkedList<Type> typeStack;
         private LinkedList<Field> fieldStack;
 
@@ -78,6 +74,8 @@ public class ASTbuilder implements TypeDefParser.ParsedSymbolVisitor {
             typeStack.push(new PrimType(t.getName(), t.getTag()));
         }
 
+// SampleRefs are currently represented as primitive types,
+// see comment in TypeDefParser
 //        public void visit(TypeDefParser.SampleRefType t){
 //            typeStack.push(new SampleRefType());
 //        }
@@ -136,13 +134,14 @@ public class ASTbuilder implements TypeDefParser.ParsedSymbolVisitor {
             if(errors.isEmpty()) {
                 return p;
             } else {
-                //XXX temporary debug printout
+                // This should not happen
+                // get errors and throw exception
+                StringBuilder sb = new StringBuilder();
                 for (Iterator iter = errors.iterator(); iter.hasNext(); ) {
                     String s = (String)iter.next();
-                    System.err.println(s);
+                    sb.append(s);
                 }
-                // This should not happen
-                throw new RuntimeException("Internal error: parsed labcomm declaration has errors");
+                throw new RuntimeException("Internal error: parsed labcomm declaration has errors: "+sb.toString());
             }
        }
        
diff --git a/lib/java/se/lth/control/labcomm/DecoderChannel.java b/lib/java/se/lth/control/labcomm/DecoderChannel.java
index f1e0b8cc4f0c975b6a573863d9e957b59c5d1581..05382913ec659d7ed548f585884ecb4a097bcac5 100644
--- a/lib/java/se/lth/control/labcomm/DecoderChannel.java
+++ b/lib/java/se/lth/control/labcomm/DecoderChannel.java
@@ -38,19 +38,12 @@ public class DecoderChannel implements Decoder {
        try {
            processSample(Constant.TYPE_DEF);
       } catch(Exception ex) {
-       System.out.println(ex.getMessage());   
-       //System.err.println("Got TypeDef: skipping "+len+" bytes"); 
        int idx = decodePacked32();
        String name = decodeString(); 
-       System.err.println("Ignoring (unhandled) TypeDef: "+idx+" "+name); 
        int siglen = decodePacked32();
-       //System.err.println("siglen="+siglen);
        for(int i=0; i<siglen; i++) {
            byte b = decodeByte();		  
-           //System.out.print(b);
-           //System.out.print(" ");
        }
-       //System.out.println();
       }
   }
 
@@ -58,8 +51,6 @@ public class DecoderChannel implements Decoder {
       try {
            processSample(Constant.TYPE_BINDING);
       } catch(Exception ex) {
-       System.out.println(ex.getMessage());   
-       //System.err.println("Got TypeBinding: skipping "+len+" bytes"); 
           for(int i=0; i<len; i++) {
               decodeByte();		  
           }
@@ -67,7 +58,6 @@ public class DecoderChannel implements Decoder {
   }
 
   private void processPragma(int len) throws IOException {
-       System.err.println("Got Pragma: skipping "+len+" bytes"); 
        for(int i=0; i<len; i++) {
            decodeByte();		  
        }
@@ -109,26 +99,26 @@ public class DecoderChannel implements Decoder {
 			          version + " != " + Constant.CURRENT_VERSION);
           }
         } break;
-	case Constant.SAMPLE_DEF: {
-          processSampleDef();
-	} break;
-	case Constant.SAMPLE_REF: {
-          processSampleRef();
-	} break;
-	case Constant.TYPE_DEF: {
-          processTypeDef(length);
-	} break;
-	case Constant.TYPE_BINDING: {
-          processTypeBinding(length);
-	} break;
-	case Constant.PRAGMA: {
-          processPragma(length);
-	} break;
-	default: {
-          processSample(tag);
-          done = true;
-
-	}
+        case Constant.SAMPLE_DEF: {
+            processSampleDef();
+        } break;
+        case Constant.SAMPLE_REF: {
+            processSampleRef();
+        } break;
+        case Constant.TYPE_DEF: {
+            processTypeDef(length);
+        } break;
+        case Constant.TYPE_BINDING: {
+            processTypeBinding(length);
+        } break;
+        case Constant.PRAGMA: {
+            processPragma(length);
+        } break;
+        default: {
+            processSample(tag);
+            done = true;
+
+        }
       }
     }
   }
diff --git a/lib/java/se/lth/control/labcomm/EncoderChannel.java b/lib/java/se/lth/control/labcomm/EncoderChannel.java
index 221259a37ef938214df481929cb8401e19735532..f429f94e7bf311ed57ae89b8cd7406b43ff07b2c 100644
--- a/lib/java/se/lth/control/labcomm/EncoderChannel.java
+++ b/lib/java/se/lth/control/labcomm/EncoderChannel.java
@@ -77,14 +77,12 @@ public class EncoderChannel implements Encoder {
 
 
   private int registerTypeDef(SampleDispatcher dispatcher) throws IOException {
-      //XXX A bit crude; maybe add boolean registry.contains(...) and check
-      //    if already registered
+      // check if already registered
         try {
             return type_def_registry.getTag(dispatcher);
         } catch (IOException e) {
+            //otherwise, add to the registry
             int index = type_def_registry.add(dispatcher);
-            //System.out.println("registered "+dispatcher.getName());
-            //
             //wrap encoder to get encoded length of signature
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
             EncoderChannel wrapped = new WrappedEncoder(this, baos, false);
@@ -143,7 +141,7 @@ public class EncoderChannel implements Encoder {
     begin(sample_def_registry.getTag(c));
   }
 
-  /* temporary(?) fix to allow nesting encoders to find encoded size */
+  /* aux. method used to allow nesting encoders to find encoded size */
   private void flush() throws IOException{
     data.flush();
     writer.write(bytes.toByteArray());
@@ -208,10 +206,6 @@ public class EncoderChannel implements Encoder {
   }
 
   public void encodeString(String value) throws IOException {
-    //data.writeShort(0); // HACK...
-    //data.writeUTF(value);
-
-    //kludge, to replace above hack with packed length
     ByteArrayOutputStream tmpb = new ByteArrayOutputStream();
     DataOutputStream tmps = new DataOutputStream(tmpb);
 
@@ -219,6 +213,8 @@ public class EncoderChannel implements Encoder {
     tmps.flush();
     byte[] tmp = tmpb.toByteArray();
 
+    //the two first bytes written by writeUTF is the length of
+    //the string, so we skip those
     encodePacked32(tmp.length-2);
     for (int i = 2 ; i < tmp.length ; i++) {
       encodeByte(tmp[i]);
@@ -243,6 +239,7 @@ public class EncoderChannel implements Encoder {
     try {
       index = sample_ref_registry.getTag(value);
     } catch (NullPointerException e) {
+        //we want to return 0 for unregistered ref types
     }
     data.writeInt(index);
   }
diff --git a/lib/java/se/lth/control/labcomm/TypeDefParser.java b/lib/java/se/lth/control/labcomm/TypeDefParser.java
index 5a12cf3e9195cbaad2b87a1d244d1455129cec62..a72e96510e6ee1544f42aa39c548b637172c1cbd 100644
--- a/lib/java/se/lth/control/labcomm/TypeDefParser.java
+++ b/lib/java/se/lth/control/labcomm/TypeDefParser.java
@@ -76,22 +76,16 @@ public class TypeDefParser implements TypeDef.Handler, TypeBinding.Handler {
     }
 
     public void handle_TypeDef(TypeDef d) throws java.io.IOException {
-        //System.out.println("Got TypeDef: "+d.getName()+"("+d.getIndex()+")");
         typeDefs.put(d.getIndex(), d);
     }
 
     public void handle_TypeBinding(TypeBinding d) throws java.io.IOException {
-        //System.out.println("TDP got TypeBinding: "+d.getSampleIndex()+" --> "+d.getTypeIndex()+"");
         TypeDef td;
         if(d.isSelfBinding()){
              td = new SelfBinding(d.getSampleIndex(), decoder);
         } else {
             typeBindings.put(d.getSampleIndex(), d.getTypeIndex());
             td = getTypeDefForIndex(d.getSampleIndex());
-            //System.out.println("handleTypeBinding: td:"+td.getIndex()+"=="+td.getName());
-            //System.out.println("++++++++++++++++++++++++");
-            //System.out.println(symbolString());
-            //System.out.println("++++++++++++++++++++++++");
         }
         ParsedSampleDef result = parseSignature(td);
 
@@ -109,7 +103,7 @@ public class TypeDefParser implements TypeDef.Handler, TypeBinding.Handler {
             for(ParsedTypeDef dep : ((ParsedSampleDef)d).getDependencies()) {
                 //do we want to change ParseTypeDef to have dependencies,
                 //and do recursion here?
-                //notifyListener(l, dep);
+                //if so, do notifyListener(l, dep);
                 l.onTypeDef(dep);
             }
         }
@@ -136,9 +130,6 @@ public class TypeDefParser implements TypeDef.Handler, TypeBinding.Handler {
         return res;
     }
 
-
-///// parsing
-
     public LinkedList<ParsedSymbol> symbolify() {
 
         LinkedList<ParsedSymbol> result = new LinkedList<ParsedSymbol>();
@@ -181,6 +172,8 @@ public class TypeDefParser implements TypeDef.Handler, TypeBinding.Handler {
         void visit(SampleSymbol s);
         void visit(NameSymbol s);
         void visit(PrimitiveType t);
+        //sampleRefs are sent as primitive types
+        //Put this back if that is changed to SampleRefType
         //void visit(SampleRefType t);
         void visit(ParsedStructType t);
         void visit(ParsedField t);
@@ -227,6 +220,7 @@ public class TypeDefParser implements TypeDef.Handler, TypeBinding.Handler {
     public abstract class ParsedType extends ParsedSymbol{
     }
 
+// SampleRefType currently not sent, se above
 //    public class SampleRefType extends ParsedType {
 //        public void accept(ParsedSymbolVisitor v) {
 //            v.visit(this);
@@ -529,23 +523,13 @@ public class TypeDefParser implements TypeDef.Handler, TypeBinding.Handler {
         }
         void pushType(int typeIdx) {
             if(typeIdx >= 0x40 && !typeStack.contains(typeIdx)) {
-                //typeStack.push(typeIdx);
                 typeStack.push(typeDefs.get(typeIdx));
-            } else {
-                //throw new Error("typeIdx < 0x40");
-            }
+            } 
         }
 
         void popType() {
-            //int tid = typeStack.pop();
-            //TypeDef td2 = typeDefs.get(tid);
             TypeDef td2 = typeStack.pop();
             current = td2;
-            //if(td2 != null ) {
-            //    System.out.println(td2.getName());
-            //} else {
-            //    System.out.println("popType: null for idx "+tid);
-            //}
             bis =new ByteArrayInputStream(td2.getSignature());
             in = new DataInputStream(bis);
         }
@@ -588,11 +572,6 @@ public class TypeDefParser implements TypeDef.Handler, TypeBinding.Handler {
     }
 
     public ParsedSampleDef parseSignature(TypeDef td) throws IOException{
-//    public void parseSignature(int typeIndex) throws IOException{
-
-        //int typeIndex = td.getIndex();
-        //System.out.println("parseSignature :"+td);
-        //ParserState s = new ParserState(typeIndex);
         ParserState s = new ParserState(td);
 
         ParsedSampleDef result=null;
@@ -614,7 +593,6 @@ public class TypeDefParser implements TypeDef.Handler, TypeBinding.Handler {
         int idx[] = new int[numIdx];
         for(int i=0; i<numIdx; i++){
             idx[i] = in.decodePacked32(); 
-            //System.out.println(idx[i]);
         }
         int type = in.decodePacked32();
         ParsedType elementType = lookupType(type, in); 
@@ -626,7 +604,6 @@ public class TypeDefParser implements TypeDef.Handler, TypeBinding.Handler {
     }
 
     private ParsedStructType parseStruct(ParserState in) throws IOException {
-        //System.out.println("struct");
         int numParsedFields = in.decodePacked32();
         ParsedStructType result = new ParsedStructType(numParsedFields);
         for(int i=0; i<numParsedFields; i++) {
@@ -646,6 +623,7 @@ public class TypeDefParser implements TypeDef.Handler, TypeBinding.Handler {
                 TypeDef td = typeDefs.get(tag);
                 result = new ParsedUserType(td.getName());
                 in.pushType(tag);
+// sampleRefs are sent as primitive types, see above
 //        } else if(tag == Constant.SAMPLE) {
 //                result = new SampleRefType();       
         } else {