diff --git a/examples/jgrafchart/Makefile b/examples/jgrafchart/Makefile
index 76b097d6228308545cf0417e413156f33ae29f57..1967ced1030af8a50170db2b7871c69f4a65376d 100644
--- a/examples/jgrafchart/Makefile
+++ b/examples/jgrafchart/Makefile
@@ -15,7 +15,7 @@ ${LCFILE}.c : ${LCFILE}.lc
 	${LCC} -C ${LCFILE}.lc
 
 
-.PHONY: clean, runclient
+.PHONY: clean runclient
 clean :
 	rm ${LCFILE}.c ${LCFILE}.h client testserver
 
diff --git a/examples/tcp/labcommTCPtest/FooSample.java b/examples/tcp/labcommTCPtest/FooSample.java
new file mode 100644
index 0000000000000000000000000000000000000000..c5024e87f493a7c8d58fc1ee932ec90bffd8001d
--- /dev/null
+++ b/examples/tcp/labcommTCPtest/FooSample.java
@@ -0,0 +1,99 @@
+/* 
+sample struct {
+  int x;
+  int y;
+  long t;
+  double d;
+} FooSample;
+*/
+package labcommTCPtest;
+import java.io.IOException;
+import se.lth.control.labcomm.LabCommDecoder;
+import se.lth.control.labcomm.LabCommDispatcher;
+import se.lth.control.labcomm.LabCommEncoder;
+import se.lth.control.labcomm.LabCommHandler;
+import se.lth.control.labcomm.LabCommSample;
+
+public class FooSample implements LabCommSample {
+
+  public int x;
+  public int y;
+  public long t;
+  public double d;
+  
+  public interface Handler extends LabCommHandler {
+    public void handle_FooSample(FooSample value) throws Exception;
+  }
+  
+  public static void register(LabCommDecoder d, Handler h) throws IOException {
+    d.register(new Dispatcher(), h);
+  }
+  
+  public static void register(LabCommEncoder e) throws IOException {
+    e.register(new Dispatcher());
+  }
+  
+  private static class Dispatcher implements LabCommDispatcher {
+    
+    public Class getSampleClass() {
+      return FooSample.class;
+    }
+    
+    public String getName() {
+      return "FooSample";
+    }
+    
+    public byte[] getSignature() {
+      return signature;
+    }
+    
+    public void decodeAndHandle(LabCommDecoder d,
+                                LabCommHandler h) throws Exception {
+      ((Handler)h).handle_FooSample(FooSample.decode(d));
+    }
+    
+  }
+  
+  public static void encode(LabCommEncoder e, FooSample value) throws IOException {
+    e.begin(FooSample.class);
+    e.encodeInt(value.x);
+    e.encodeInt(value.y);
+    e.encodeLong(value.t);
+    e.encodeDouble(value.d);
+    e.end(FooSample.class);
+  }
+  
+  public static FooSample decode(LabCommDecoder d) throws IOException {
+    FooSample result;
+    result = new FooSample();
+    result.x = d.decodeInt();
+    result.y = d.decodeInt();
+    result.t = d.decodeLong();
+    result.d = d.decodeDouble();
+    return result;
+  }
+  
+  private static byte[] signature = new byte[] {
+    // struct { 4 fields
+    17, 
+      4, 
+      // int 'x'
+      1, 
+      120, 
+      35, 
+      // int 'y'
+      1, 
+      121, 
+      35, 
+      // long 't'
+      1, 
+      116, 
+      36, 
+      // double 'd'
+      1, 
+      100, 
+      38, 
+    // }
+  };
+
+}
diff --git a/examples/tcp/labcommTCPtest/LabCommRegister.java b/examples/tcp/labcommTCPtest/LabCommRegister.java
new file mode 100644
index 0000000000000000000000000000000000000000..94585e91ef9d169a57d23b3b01a9a7845aa566b5
--- /dev/null
+++ b/examples/tcp/labcommTCPtest/LabCommRegister.java
@@ -0,0 +1,5 @@
+package labcommTCPtest;
+public class LabCommRegister {
+
+
+}
diff --git a/examples/tcp/labcommTCPtest/client/TestClient.java b/examples/tcp/labcommTCPtest/client/TestClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..c0402666e7f1f6b8efb431784889f43b0d065a0f
--- /dev/null
+++ b/examples/tcp/labcommTCPtest/client/TestClient.java
@@ -0,0 +1,69 @@
+package labcommTCPtest.client;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.net.UnknownHostException;
+
+import se.lth.control.labcomm.LabCommDecoderChannel;
+import se.lth.control.labcomm.LabCommEncoderChannel;
+import labcommTCPtest.FooSample;
+import labcommTCPtest.FooSample.Handler;
+
+public class TestClient implements Handler {
+
+
+	private OutputStream out;
+	private InputStream in;
+
+	public TestClient(Socket server) throws IOException {
+		out = server.getOutputStream();
+		in = server.getInputStream();
+	}
+
+	public void test() {
+		
+		try {
+			LabCommEncoderChannel e = new LabCommEncoderChannel(out );
+			FooSample.register(e);
+			FooSample sample = new FooSample();
+			sample.x = 17;
+			sample.y = 42;
+			sample.t = 1717;
+			sample.d = 0.42;
+			printSample("Client sending", sample);
+			FooSample.encode(e, sample);
+
+			LabCommDecoderChannel c = new LabCommDecoderChannel(in);
+			FooSample.register(c,this);
+			c.runOne();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public static void main(String... args) {
+		String server = "localhost";
+		int port = 9999;
+		try {
+			Socket s = new Socket(server, port);
+			TestClient c = new TestClient(s);
+			c.test();
+		} catch (UnknownHostException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	private void printSample(String header, FooSample sample2) throws Exception {
+		System.out.println(header);
+		System.out.format("TestClient.invoke(%d, %d, %d, %f)\n", sample2.x, sample2.y, sample2.t, sample2.d);
+	}
+
+	public void handle_FooSample(FooSample sample2) throws Exception {
+		printSample("TestClient.handle_FooSample", sample2);
+
+	}
+}
diff --git a/examples/tcp/labcommTCPtest/server/TestObject.java b/examples/tcp/labcommTCPtest/server/TestObject.java
new file mode 100644
index 0000000000000000000000000000000000000000..944b22b1158bd82e263b69eda732ddfeb0f61acb
--- /dev/null
+++ b/examples/tcp/labcommTCPtest/server/TestObject.java
@@ -0,0 +1,21 @@
+package labcommTCPtest.server;
+
+/**
+ * The service object to be accessed remotely via a LabComm channel
+ * 
+ */
+public class TestObject {
+
+	/**
+	 * A test method. The matching LabComm description is in test.lc
+	 * 
+	 * @param x
+	 * @param y
+	 * @param t
+	 * @param d
+	 */
+	public void foo(int x, int y, long t, double d) {
+		System.out.format("TestObject.foo(%d, %d, %d, %f)\n", x, y, t, d);
+	}
+
+}
diff --git a/examples/tcp/labcommTCPtest/server/TestServer.java b/examples/tcp/labcommTCPtest/server/TestServer.java
new file mode 100644
index 0000000000000000000000000000000000000000..c3511d08b100a5863e4ca05b3f3a0e13a12ca512
--- /dev/null
+++ b/examples/tcp/labcommTCPtest/server/TestServer.java
@@ -0,0 +1,59 @@
+package labcommTCPtest.server;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+import se.lth.control.labcomm.LabCommDecoderChannel;
+import se.lth.control.labcomm.LabCommEncoderChannel;
+import labcommTCPtest.FooSample;
+import labcommTCPtest.FooSample.Handler;
+
+public class TestServer implements Handler {
+
+	private OutputStream out;
+	private InputStream in;
+
+	public static void main(String a[]) {
+		try {
+			ServerSocket ss = new ServerSocket(9999);
+			Socket s = ss.accept();
+			
+			TestServer ts = new TestServer(s);
+			ts.runOne();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public TestServer(Socket s) throws IOException {
+		out = s.getOutputStream();
+		in = s.getInputStream();
+	}
+	
+	public void runOne() {
+		
+		try {
+			LabCommDecoderChannel c = new LabCommDecoderChannel(in);
+			FooSample.register(c,this);
+			c.runOne();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public void handle_FooSample(FooSample sample) throws Exception {
+		LabCommEncoderChannel e = new LabCommEncoderChannel(out );
+		FooSample.register(e);
+		System.out.println("TestServer.handle_FooSample...");
+		sample.x *= 2;
+		sample.y *= 2;
+		sample.t *= 2;
+		sample.d *= 2;
+		FooSample.encode(e, sample);
+	}
+}
diff --git a/examples/tcp/test.lc b/examples/tcp/test.lc
new file mode 100644
index 0000000000000000000000000000000000000000..fe104e91c58773da0fedb0ad76c60ea3647625ec
--- /dev/null
+++ b/examples/tcp/test.lc
@@ -0,0 +1,6 @@
+sample struct {
+    int x;
+    int y;
+    long t;
+    double d;
+} FooSample;