diff --git a/examples/dynamic/dynamic_type.sh b/examples/dynamic/dynamic_type.sh
new file mode 100644
index 0000000000000000000000000000000000000000..8059a968d048e6959704896ec7c7c570a336b028
--- /dev/null
+++ b/examples/dynamic/dynamic_type.sh
@@ -0,0 +1,24 @@
+#dummy script to test the on-the-fly compilation
+
+java -jar ../../compiler/labComm.jar --java=gen --javapackage=gen simple.lc
+
+javac -cp .:gen:../../lib/java/labcomm.jar gen/*.java
+
+# compile static encoder and decoder 
+javac -cp .:gen:../../lib/java/labcomm.jar test/StaticEncoder.java
+javac -cp .:gen:../../lib/java/labcomm.jar test/StaticDecoder.java 
+
+# compile dynamic part 
+javac -cp .:../../compiler/labComm.jar:../../lib/java/labcomm.jar:../../lib/tools/beaver.jar:../../lib/tools/beaver-rt.jar:../../lib/tools/jastadd2.jar:../../lib/tools/JFlex.jar:../../lib/tools/proj.jar  test/DynamicPart.java 
+
+javac test/HandlerContext.java
+
+# run static encoder 
+java -cp .:gen:../../lib/java//labcomm.jar test.StaticEncoder encoded_data
+
+# run dynamic part 
+java -cp .:../../compiler/labComm.jar:../../lib/java/labcomm.jar:../../lib/tools/beaver.jar:../../lib/tools/beaver-rt.jar:../../lib/tools/jastadd2.jar:../../lib/tools/JFlex.jar:../../lib/tools/proj.jar  test.DynamicPart simple_type.lc handlers_type.txt encoded_data dynamic_out
+
+
+# run static decoder 
+java -cp .:gen:../../lib/java//labcomm.jar test.StaticDecoder dynamic_out
diff --git a/examples/dynamic/handlers2.txt b/examples/dynamic/handlers2.txt
index be5e7f1a9b2962579b708b5eb9794c5279a2dca1..efa3f75597929363ff3a64d2f75059b2ddcd40a7 100644
--- a/examples/dynamic/handlers2.txt
+++ b/examples/dynamic/handlers2.txt
@@ -1,4 +1,4 @@
-foo:handler(foo_t value) {
+foo:handler(foo value) {
 	test.HandlerContext ctx = (test.HandlerContext)context;
 	System.out.println("foo handler from handlers2.txt");
 	System.out.println("using context "+ctx.str);
diff --git a/examples/dynamic/handlers_type.txt b/examples/dynamic/handlers_type.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a3922f792a0b2c8a9698a9562ce8069b70079a46
--- /dev/null
+++ b/examples/dynamic/handlers_type.txt
@@ -0,0 +1,20 @@
+foo:handler(foo_t value) {
+	test.HandlerContext ctx = (test.HandlerContext)context;
+	System.out.println("foo handler from handlers_type.txt");
+	System.out.println("using context "+ctx.str);
+        ctx.x = value.x + 1000;
+	ctx.y = value.y + 1000;
+	ctx.z = value.z + 1000;
+	System.out.println(value.x);
+	System.out.println(value.y);
+	System.out.println(value.z);
+	for(int i=0; i<value.x; i++){
+		System.out.print("."+(value.x-i));
+	}
+	System.out.println();
+}###
+bar:handler(int value) {
+	System.out.println("bar:"+value);
+	test.HandlerContext ctx = (test.HandlerContext)context;
+	ctx.bar = value + 1000;
+}###
diff --git a/examples/dynamic/simple.lc b/examples/dynamic/simple.lc
index abdf856e6c1fa4b3969d7a2ff0b871961682b26c..915cb44852c18396f0f5570bd873ac9584abc9d5 100644
--- a/examples/dynamic/simple.lc
+++ b/examples/dynamic/simple.lc
@@ -1,10 +1,8 @@
-typedef struct {
+sample struct {
   int x;
   int y;
   int z;
-} foo_t;
-
-sample foo_t foo;
+} foo;
 
 sample int bar;
 
diff --git a/examples/dynamic/simple_type.lc b/examples/dynamic/simple_type.lc
new file mode 100644
index 0000000000000000000000000000000000000000..abdf856e6c1fa4b3969d7a2ff0b871961682b26c
--- /dev/null
+++ b/examples/dynamic/simple_type.lc
@@ -0,0 +1,10 @@
+typedef struct {
+  int x;
+  int y;
+  int z;
+} foo_t;
+
+sample foo_t foo;
+
+sample int bar;
+
diff --git a/examples/dynamic/test/DynamicPart.java b/examples/dynamic/test/DynamicPart.java
index 9768f00191a6199b2b4b70f96a7df6c40b37d2ac..1a5ab3ffa38e6ee903a095618b82be4d3e22b6a4 100644
--- a/examples/dynamic/test/DynamicPart.java
+++ b/examples/dynamic/test/DynamicPart.java
@@ -302,9 +302,15 @@ public class DynamicPart {
 	 */
 	private void encodeTest(InRAMCompiler irc, HandlerContext ctxt, String tmpFile) {
 		try {
-			Class ft = irc.load(TYPE_NAME_FOO);
 			Class fc = irc.load(SAMPLE_NAME_FOO);
 			Class bc = irc.load(SAMPLE_NAME_BAR);
+			Class ft; // hack for both cases with and w/o typedef
+			try {
+				ft = irc.load(TYPE_NAME_FOO);
+			} catch (ClassNotFoundException e) {
+				System.out.println("** encodeTest: defaulting to sample==type");
+				ft = fc;
+			}
 
 			/* create sample class and instance objects */
 			Object fv = ft.newInstance();
diff --git a/examples/dynamic/test/StaticDecoder.java b/examples/dynamic/test/StaticDecoder.java
index c33dd9e9510b5761e232775a62a96608e6f0940a..b3d74edf4c407397f2aae315b1899303ad27d6f9 100644
--- a/examples/dynamic/test/StaticDecoder.java
+++ b/examples/dynamic/test/StaticDecoder.java
@@ -1,6 +1,5 @@
 package test;
 
-import gen.foo_t;
 import gen.foo;
 import gen.bar;
 
@@ -32,7 +31,7 @@ public class StaticDecoder implements foo.Handler, bar.Handler
   }
 
 
-  public void handle_foo(foo_t d) throws java.io.IOException {
+  public void handle_foo(foo d) throws java.io.IOException {
     System.out.println("Got foo, x="+d.x+", y="+d.y+", z="+d.z);
   }
 
diff --git a/examples/dynamic/test/StaticEncoder.java b/examples/dynamic/test/StaticEncoder.java
index 9f39fdd72ee02d5a9f66c775d7a89f886796851b..697f339e8335de34a4aef9f6bbdc3928d2c207f2 100644
--- a/examples/dynamic/test/StaticEncoder.java
+++ b/examples/dynamic/test/StaticEncoder.java
@@ -4,7 +4,6 @@ import java.io.FileOutputStream;
 import java.io.OutputStream;
 import se.lth.control.labcomm.LabCommEncoderChannel;
 
-import gen.foo_t;
 import gen.foo;
 import gen.bar;
 
@@ -21,7 +20,7 @@ public class StaticEncoder {
   }
 
   public void doEncode() throws java.io.IOException {
-    foo_t f = new foo_t();
+    foo f = new foo();
     f.x = 17;
     f.y = 42;
     f.z = 37;
diff --git a/examples/dynamic/test_type.sh b/examples/dynamic/test_type.sh
new file mode 100644
index 0000000000000000000000000000000000000000..3463d1a6a93da52025ff4217bb65078935fa2e5b
--- /dev/null
+++ b/examples/dynamic/test_type.sh
@@ -0,0 +1,7 @@
+#dummy script to test the on-the-fly compilation
+
+javac -cp .:../../compiler/labComm.jar:../../lib/java/labcomm.jar:../../lib/tools/beaver.jar:../../lib/tools/beaver-rt.jar:../../lib/tools/jastadd2.jar:../../lib/tools/JFlex.jar:../../lib/tools/proj.jar  test/TestLabcommGen.java 
+
+javac test/HandlerContext.java
+
+java -cp .:../../compiler/labComm.jar:../../lib/java/labcomm.jar:../../lib/tools/beaver.jar:../../lib/tools/beaver-rt.jar:../../lib/tools/jastadd2.jar:../../lib/tools/JFlex.jar:../../lib/tools/proj.jar  test.TestLabcommGen simple_type.lc handlers_type.txt encoded_data