diff --git a/examples/user_types/ExampleDecoder.cs b/examples/user_types/ExampleDecoder.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1b6bc0d2ae2e96e3e5213afaadddbbf10245f286
--- /dev/null
+++ b/examples/user_types/ExampleDecoder.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.IO;
+using se.lth.control.labcomm;
+
+namespace user_types
+{
+    class Decoder : twoLines.Handler 
+    {
+        DecoderChannel dec;
+
+        public Decoder(Stream stream)
+        {
+            dec = new DecoderChannel(stream);
+            twoLines.register(dec, this);
+            try
+            {
+                Console.WriteLine("Running decoder.");
+                dec.run();
+            }
+            catch (EndOfStreamException)
+            {
+                Console.WriteLine("EOF reached");
+            }
+        }
+
+        private string genPoint(point p)
+        {
+            return "(" + p.x.val + ", " + p.y.val + ")";
+        }
+        private String genLine(line l)
+        {
+            return "Line from " + genPoint(l.start) + " to " + genPoint(l.end);
+        }
+        public void handle(twoLines d)
+        {
+            Console.WriteLine("Got twoLines: ");
+            Console.WriteLine("Line l1: "+genLine(d.l1));
+            Console.WriteLine("Line l2: " + genLine(d.l2));
+        }
+
+        static void Main(string[] args)
+        {
+            new Decoder(new FileStream(args[0], FileMode.Open));
+        }
+    }
+}
diff --git a/examples/user_types/ExampleEncoder.cs b/examples/user_types/ExampleEncoder.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c2e2fa9dfa087345cb714441d90075270797c386
--- /dev/null
+++ b/examples/user_types/ExampleEncoder.cs
@@ -0,0 +1,85 @@
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using se.lth.control.labcomm;
+
+namespace user_types
+{
+    public class Encoder
+    {
+        private EncoderChannel enc;
+        public Encoder(Stream stream)
+        {
+            enc = new EncoderChannel(stream);
+            twoLines.register(enc);
+        }
+
+        public void doEncode()
+        {
+            twoLines x = new twoLines();
+            line l1 = new line();
+            point p11 = new point();
+            coord c11x = new coord();
+            coord c11y = new coord();
+            c11x.val = 11;
+            c11y.val = 99;
+            p11.x = c11x;
+            p11.y = c11y;
+
+            l1.start = p11;
+
+            point p12 = new point();
+            coord c12x = new coord();
+            coord c12y = new coord();
+            c12x.val = 22;
+            c12y.val = 88;
+            p12.x = c12x;
+            p12.y = c12y;
+
+            l1.end = p12;
+
+            line l2 = new line();
+            point p21 = new point();
+            coord c21x = new coord();
+            coord c21y = new coord();
+            c21x.val = 17;
+            c21y.val = 42;
+            p21.x = c21x;
+            p21.y = c21y;
+
+            l2.start = p21;
+
+            point p22 = new point();
+            coord c22x = new coord();
+            coord c22y = new coord();
+            c22x.val = 13;
+            c22y.val = 37;
+            p22.x = c22x;
+            p22.y = c22y;
+
+            l2.end = p22;
+
+            foo f = new foo();
+            f.a = 10;
+            f.b = 20;
+            f.c = false;
+
+            x.l1 = l1;
+            x.l2 = l2;
+            x.f = f;
+
+            Console.WriteLine("Encoding theTwoLines");
+            twoLines.encode(enc, x);
+        }
+
+        static void Main(string[] args)
+        {
+            FileStream stream = new FileStream(args[0],FileMode.Create);
+            Encoder example = new Encoder(stream);
+            example.doEncode();
+            stream.Close();
+        }
+    }
+}
diff --git a/examples/user_types/Makefile b/examples/user_types/Makefile
index 813d419a720e245cc7c18beb5ce6495c659c022a..a5c0760dfb2ea7815769940feaf61d1c50c302a8 100644
--- a/examples/user_types/Makefile
+++ b/examples/user_types/Makefile
@@ -32,11 +32,11 @@ cleanbuild: clean build
 labcomm.dll:
 	ln -sf ../../lib/csharp/labcomm.dll $@
 
-Encoder.exe: Encoder.cs gen/test.cs labcomm.dll Makefile
+ExampleEncoder.exe: ExampleEncoder.cs gen/test.cs labcomm.dll Makefile
 	mcs -out:$@ $(filter %.cs, $^) -lib:../../lib/csharp/ -r:labcomm
 	chmod a+x $@
 
-Decoder.exe: Decoder.cs gen/test.cs labcomm.dll Makefile
+ExampleDecoder.exe: ExampleDecoder.cs gen/test.cs labcomm.dll Makefile
 	mcs -out:$@ $(filter %.cs, $^) -lib:../../lib/csharp/ -r:labcomm
 	chmod a+x $@
 
@@ -100,7 +100,7 @@ run:
 	@echo "************ running python decoder (from wiki_example):"
 	PYTHONPATH=${LCDIR}/lib/python ../wiki_example/example_decoder.py encoded_data_p LabComm2014
 
-runwcs: Encoder.exe Decoder.exe
+runwcs: ExampleEncoder.exe ExampleDecoder.exe
 	export LD_LIBRARY_PATH=${LCDIR}/lib/c/
 	@echo
 	@echo "********************************************"
@@ -120,7 +120,7 @@ runwcs: Encoder.exe Decoder.exe
 	@PYTHONPATH=${LCDIR}/lib/python ../wiki_example/example_decoder.py encoded_data_j LabComm2014
 
 	@echo "************ running C# decoder: *****************"
-	@./Decoder.exe encoded_data_j
+	@./ExampleDecoder.exe encoded_data_j
 
 	@echo "************ running C encoder: *****************"
 	@./example_encoder encoded_data_c
@@ -135,7 +135,7 @@ runwcs: Encoder.exe Decoder.exe
 	@PYTHONPATH=${LCDIR}/lib/python ../wiki_example/example_decoder.py encoded_data_c LabComm2014
 
 	@echo "************ running C# decoder: *****************"
-	@./Decoder.exe encoded_data_c
+	@./ExampleDecoder.exe encoded_data_c
 
 	@echo "************ running python encoder: *****************"
 	@PYTHONPATH=${LCDIR}/lib/python:${GENDIR} ./example_encoder.py encoded_data_p LabComm2014
@@ -150,10 +150,10 @@ runwcs: Encoder.exe Decoder.exe
 	PYTHONPATH=${LCDIR}/lib/python ../wiki_example/example_decoder.py encoded_data_p LabComm2014
 
 	@echo "************ running C# decoder: *****************"
-	@./Decoder.exe encoded_data_p
+	@./ExampleDecoder.exe encoded_data_p
 
 	@echo "************ running C# encoder: *****************"
-	@./Encoder.exe encoded_data_cs
+	@./ExampleEncoder.exe encoded_data_cs
 
 	@echo "************ running Java  decoder: *****************"
 	@java -cp .:${LCDIR}/lib/java/labcomm.jar:${GENDIR} Decoder encoded_data_cs
@@ -165,7 +165,7 @@ runwcs: Encoder.exe Decoder.exe
 	@PYTHONPATH=${LCDIR}/lib/python ../wiki_example/example_decoder.py encoded_data_cs LabComm2014
 
 	@echo "************ running C# decoder: *****************"
-	@./Decoder.exe encoded_data_cs
+	@./ExampleDecoder.exe encoded_data_cs