diff --git a/examples/user_types/Decoder.java b/examples/user_types/Decoder.java
index 9ddede113e48ba3d786c0470496a9f033a5640bc..708632d5d5a32653b6bef0e1d4599d303d65a3e1 100644
--- a/examples/user_types/Decoder.java
+++ b/examples/user_types/Decoder.java
@@ -34,12 +34,12 @@ public class Decoder
     theSecondInt.register(decoder, this);
     intAndRef.register(decoder, this);
     doavoid.registerSampleRef(decoder);
-//    this.tdp = TypeDefParser.registerTypeDefParser(decoder); 
+    this.tdp = TypeDefParser.registerTypeDefParser(decoder); 
  //   TypeDef.register(decoder, this);
  //   TypeBinding.register(decoder, this);
 
         
-//    tdp.addListener(this);
+    tdp.addListener(this);
     
     try {
       System.out.println("Running decoder.");
@@ -67,8 +67,12 @@ public class Decoder
 
   public void onTypeDef(TypeDefParser.ParsedTypeDef d) {
     System.out.println("ontype_def: ");
-    System.out.print((d.isSampleDef()?"sample ":"typedef ")+d);
-    System.out.println(" "+d.getName()+";");
+    if(d != null) {
+        System.out.print((d.isSampleDef()?"sample ":"typedef ")+d);
+        System.out.println(" "+d.getName()+";");
+    } else {
+        System.out.println(" null???");
+    }
     //for(byte b: d.getSignature()) {
     //   System.out.print(Integer.toHexString(b)+" ");
     //}
diff --git a/examples/user_types/Makefile b/examples/user_types/Makefile
index 4c2c91b0de76841511bc60b2257d491d5d4557ed..50700bb2d51807b302e395abc09a19bcd64e1c5f 100644
--- a/examples/user_types/Makefile
+++ b/examples/user_types/Makefile
@@ -96,11 +96,12 @@ run:
 	@echo "************ running python encoder: *****************"
 	@PYTHONPATH=${LCDIR}/lib/python:${GENDIR} ./example_encoder.py encoded_data_p LabComm2014
 
-	@echo "************ running Java  decoder: *****************"
-	@java -cp .:${LCDIR}/lib/java/labcomm2014.jar:${GENDIR} Decoder encoded_data_p
-
-	@echo "************ running C decoder: *****************"
-	@LD_LIBRARY_PATH=${LCDIR}/lib/c/ ./example_decoder encoded_data_p
+	@echo "WARNING! python encoded data only decoded by python decoder,  pending intention implementation"
+#	@echo "************ running Java  decoder: *****************"
+#	@java -cp .:${LCDIR}/lib/java/labcomm2014.jar:${GENDIR} Decoder encoded_data_p
+#
+#	@echo "************ running C decoder: *****************"
+#	@LD_LIBRARY_PATH=${LCDIR}/lib/c/ ./example_decoder encoded_data_p
 
 	@echo "************ running python decoder (from wiki_example):"
 	PYTHONPATH=${LCDIR}/lib/python ../wiki_example/example_decoder.py encoded_data_p LabComm2014
@@ -144,18 +145,19 @@ runwcs: build ExampleEncoder.exe ExampleDecoder.exe
 	@echo "************ running python encoder: *****************"
 	@PYTHONPATH=${LCDIR}/lib/python:${GENDIR} ./example_encoder.py encoded_data_p LabComm2014
 
-	@echo "************ running Java  decoder: *****************"
-	@java -cp .:${LCDIR}/lib/java/labcomm2014.jar:${GENDIR} Decoder encoded_data_p
-
-	@echo "************ running C decoder: *****************"
-	@LD_LIBRARY_PATH=${LCDIR}/lib/c/ ./example_decoder encoded_data_p
-
+	@echo "WARNING! python encoded data only decoded by python decoder,  pending intention implementation"
+#	@echo "************ running Java  decoder: *****************"
+#	@java -cp .:${LCDIR}/lib/java/labcomm2014.jar:${GENDIR} Decoder encoded_data_p
+#
+#	@echo "************ running C decoder: *****************"
+#	@LD_LIBRARY_PATH=${LCDIR}/lib/c/ ./example_decoder encoded_data_p
+#
+#	@echo "************ running C# decoder: *****************"
+#	@mono ./ExampleDecoder.exe encoded_data_p
+#
 	@echo "************ running python decoder (from wiki_example):"
 	PYTHONPATH=${LCDIR}/lib/python ../wiki_example/example_decoder.py encoded_data_p LabComm2014
 
-	@echo "************ running C# decoder: *****************"
-	@mono ./ExampleDecoder.exe encoded_data_p
-
 	@echo "************ running C# encoder: *****************"
 	@mono ./ExampleEncoder.exe encoded_data_cs
 
diff --git a/examples/user_types/TDDecoder.java b/examples/user_types/TDDecoder.java
index 52b3eb967d6d796338ddb1859d006ed389586538..9416ca71cf1f64d3e49c4cafeb0625fd66440599 100644
--- a/examples/user_types/TDDecoder.java
+++ b/examples/user_types/TDDecoder.java
@@ -76,7 +76,7 @@ public class TDDecoder
 //  }
 
   public void onTypeDef(TypeDefParser.ParsedTypeDef d) {
-    if(d.isSampleDef()){
+    if(d != null && d.isSampleDef()){
         System.out.println("onTypeDef (sample): ");
         ASTbuilder v = new ASTbuilder();
         Specification p = v.makeSpecification((TypeDefParser.ParsedSampleDef) d);
diff --git a/examples/user_types/test.lc b/examples/user_types/test.lc
index 79a80754206725f7429b3f55b8bf16092cf893cd..05b94c9c2c8e0d9d9ef4c6c7b525d8df41e4909b 100644
--- a/examples/user_types/test.lc
+++ b/examples/user_types/test.lc
@@ -1,14 +1,14 @@
 typedef struct {
-   int val;
+  (foo:bar) int val;
 } coord;
 
 typedef int anInt;
 
 typedef void avoid;
-sample  avoid doavoid;
+sample (function:trigger)(foo:bar) avoid doavoid;
 
-sample  struct {
-   int x;
+sample (a:b) "a struct with an int and a ref" struct {
+  (c:d)(e:f) int x;
   sample reference;
 } intAndRef;
 
diff --git a/lib/java/se/lth/control/labcomm2014/TypeDefParser.java b/lib/java/se/lth/control/labcomm2014/TypeDefParser.java
index 0998b26e22f87902d4e406204f83d1dd3cf2a42a..0b3e84c48352adefd884f9b62434925cac877de9 100644
--- a/lib/java/se/lth/control/labcomm2014/TypeDefParser.java
+++ b/lib/java/se/lth/control/labcomm2014/TypeDefParser.java
@@ -76,6 +76,7 @@ public class TypeDefParser implements TypeDef.Handler, TypeBinding.Handler {
     }
 
     public void handle_TypeDef(TypeDef d) throws java.io.IOException {
+        System.out.println("handle_TypeDef: "+d.getIndex());
         typeDefs.put(d.getIndex(), d);
     }
 
@@ -87,6 +88,7 @@ public class TypeDefParser implements TypeDef.Handler, TypeBinding.Handler {
             typeBindings.put(d.getSampleIndex(), d.getTypeIndex());
             td = getTypeDefForIndex(d.getSampleIndex());
         }
+        System.out.println("handle_TypeBinding: "+d.getSampleIndex());
         ParsedSampleDef result = parseSignature(td);
 
         sampleDefs.add(result);
@@ -619,8 +621,14 @@ public class TypeDefParser implements TypeDef.Handler, TypeBinding.Handler {
     }
 
     private ParsedField parseParsedField(ParserState in) throws IOException {
+        String intentions = in.decodeString();
+        if(intentions.length()>0) {
+            System.out.println("parseParsedField intentions ("+intentions);
+        } else {
+            System.out.println("no intentions");
+        }
         String name = in.decodeString();
-        return new ParsedField(name, parseType(in));
+        return new ParsedField(name, parseType(in, false));
     }
 
     private ParsedType lookupType(int tag, ParserState in) {
@@ -639,20 +647,28 @@ public class TypeDefParser implements TypeDef.Handler, TypeBinding.Handler {
     }
 
     private ParsedSampleDef parseSampleTypeDef(ParserState in) throws IOException {
-        ParsedTypeDef td = parseTypeDef(in);
+        ParsedTypeDef td = parseTypeDef(in, true);
         return new ParsedSampleDef(td);
     }
     private ParsedTypeDef parseTypeDef(ParserState in) throws IOException {
+        return parseTypeDef(in, false);
+    }
+    private ParsedTypeDef parseTypeDef(ParserState in, boolean parseIntentions) throws IOException {
         ParsedTypeDef result = in.newTypeDef();
-        result.setType(parseType(in));
+        result.setType(parseType(in, parseIntentions));
         return result;
     }
-    private ParsedType parseType(ParserState in) throws IOException {
-        String intentions = in.decodeString();
-        if(intentions.length()>0) {
-            System.out.println("parseType intentions ("+intentions);
+
+    private ParsedType parseType(ParserState in, boolean parseIntentions) throws IOException {
+        if(parseIntentions) {
+            String intentions = in.decodeString();
+            if(intentions.length()>0) {
+                System.out.println("parseType intentions ("+intentions);
+            } else {
+                System.out.println("no intentions");
+            }
         } else {
-            System.out.println("no intentions");
+            System.out.println("not parsing intentions");
         }
 
         int tag = in.decodePacked32();