diff --git a/lib/Makefile b/lib/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..3fa0e1f182f70488ea3546e0c17598bc9d0466c9
--- /dev/null
+++ b/lib/Makefile
@@ -0,0 +1,9 @@
+all:
+	cd c ; make
+	cd csharp ; make
+	cd java ; make
+
+clean:
+	cd c ; make clean
+	cd csharp ; make clean
+	cd java ; make clean
diff --git a/lib/c/Makefile b/lib/c/Makefile
index 4f578ee40f92fdc8a3694737b3cbac11ceb5edc8..83f350fe5042a841322614cf58d9ff91e6f51959 100644
--- a/lib/c/Makefile
+++ b/lib/c/Makefile
@@ -7,8 +7,8 @@ LDFLAGS = -L.
 LDLIBS_TEST = -Tlabcomm.linkscript  -lcunit -llabcomm
 
 OBJS= labcomm.o labcomm_dynamic_buffer_writer.o labcomm_fd_reader.o labcomm_fd_writer.o labcomm_mem_reader.o labcomm_mem_writer.o
-LABCOMMC_PATH=../../compiler
-LABCOMMC_JAR=$(LABCOMMC_PATH)/labComm.jar
+LABCOMM_JAR=../../compiler/labComm.jar
+LABCOMM=java -jar $(LABCOMM_JAR) 
 
 TESTS=test_labcomm_basic_type_encoding test_labcomm_generated_encoding test_labcomm 
 #FIXME: test_labcomm_errors
@@ -33,7 +33,7 @@ endif
 
 .PHONY: all run-test clean distclean
 
-all: liblabcomm.a test/test_labcomm_errors
+all: liblabcomm.a 
 
 liblabcomm.a: $(OBJS)
 	ar -r liblabcomm.a $^
@@ -68,19 +68,19 @@ $(TEST_DIR)/gen:
 	mkdir -p $@
 
 $(TEST_DIR)/gen/%.c $(TEST_DIR)/gen/%.h: $(TEST_DIR)/%.lc | $(TEST_DIR)/gen
-	java -jar $(LABCOMMC_JAR) \
+	$(LABCOMM) \
 		--c=$(TEST_DIR)/gen/$*.c \
 		--h=$(TEST_DIR)/gen/$*.h \
 		$<
 
 $(TEST_GEN_DIR)/%.c $(TEST_GEN_DIR)/%.h: $(TESTDATA_DIR)/%.lc \
-					 $(LABCOMMC_JAR) | $(TEST_GEN_DIR)
-	java -jar $(LABCOMMC_JAR) \
+					 $(LABCOMM_JAR) | $(TEST_GEN_DIR)
+	$(LABCOMM) \
 		--c=$(patsubst %.h,%.c,$@) --h=$(patsubst %.c,%.h,$@) $<
 
-$(LABCOMMC_JAR):
+$(LABCOMM_JAR):
 	@echo "======Building LabComm compiler======"
-	cd $(LABCOMMC_PATH); ant jar
+	cd $(shell dirname $(LABCOMM_JAR)); ant jar
 	@echo "======End building LabComm compiler======"
 
 %.o: %.c %.h
diff --git a/lib/c/labcomm_fd_reader.c b/lib/c/labcomm_fd_reader.c
index 62cb6b469265b3670976a3a801681c7a9fc5611a..6940e1ce993c6957e9615cc1b0c3f245ef999d66 100644
--- a/lib/c/labcomm_fd_reader.c
+++ b/lib/c/labcomm_fd_reader.c
@@ -16,6 +16,7 @@ int labcomm_fd_reader(
   
   switch (action) {
     case labcomm_reader_alloc: {
+#ifndef LABCOMM_FD_OMIT_VERSION
       va_list ap;
       va_start(ap, action);
       char *version = va_arg(ap, char *);
@@ -23,7 +24,7 @@ int labcomm_fd_reader(
 
       read(*fd, tmp, strlen(version));
       free(tmp);
-
+#endif
       r->data = malloc(BUFFER_SIZE);
       if (r->data) {
         r->data_size = BUFFER_SIZE;
@@ -34,7 +35,9 @@ int labcomm_fd_reader(
       }
       r->count = 0;
       r->pos = 0;
-      va_end(ap);
+#ifndef LABCOMM_FD_OMIT_VERSION
+	va_end(ap);
+#endif
     } break;
     case labcomm_reader_start: 
     case labcomm_reader_continue: {
diff --git a/lib/c/labcomm_fd_writer.c b/lib/c/labcomm_fd_writer.c
index 196e18f3d6a47d8264f9ebfb47118255e7aaca41..0eecccdf4f9378e59847ae34b531b90f8ad7da5d 100644
--- a/lib/c/labcomm_fd_writer.c
+++ b/lib/c/labcomm_fd_writer.c
@@ -17,11 +17,13 @@ int labcomm_fd_writer(
 
   switch (action) {
     case labcomm_writer_alloc: {
+#ifndef LABCOMM_FD_OMIT_VERSION
       va_list ap;
       va_start(ap, action);
       char *version = va_arg(ap, char *);
 
       write(*fd, version, strlen(version));
+#endif
       w->data = malloc(BUFFER_SIZE);
       if (! w->data) {
         result = -ENOMEM;
@@ -33,7 +35,9 @@ int labcomm_fd_writer(
         w->count = BUFFER_SIZE;
         w->pos = 0;
       }
+#ifndef LABCOMM_FD_OMIT_VERSION
       va_end(ap);
+#endif
     } break;
     case labcomm_writer_free: {
       free(w->data);
diff --git a/lib/c/test/generated_encoding.lc b/lib/c/test/generated_encoding.lc
index 99cc300533e1da1c3ba48a40434e296bcfd708b7..f1f4b9b7ed08f7c044bb0e501a973ed027b34506 100644
--- a/lib/c/test/generated_encoding.lc
+++ b/lib/c/test/generated_encoding.lc
@@ -3,3 +3,5 @@ sample byte B;
 sample struct {
   int i;
 } S1;
+sample int I[_];
+sample struct { int i; } P[_];
diff --git a/lib/java/Makefile b/lib/java/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..e5394d665c11687fc5df3ec3976a4296116ddd81
--- /dev/null
+++ b/lib/java/Makefile
@@ -0,0 +1,27 @@
+MODULES=LabCommDispatcher \
+	LabCommDecoderRegistry \
+	LabComm \
+	LabCommSample \
+	LabCommHandler \
+	LabCommEncoderRegistry \
+	LabCommDecoder \
+	LabCommType \
+	LabCommEncoderChannel \
+	LabCommEncoder \
+	LabCommDecoderChannel \
+
+all: labcomm.jar
+
+labcomm.jar: gen/JAVAC
+	echo $@
+	cd gen ; jar cf ../$@ se/lth/control/labcomm/*.class
+
+gen:
+	mkdir gen
+
+gen/JAVAC: $(MODULES:%=se/lth/control/labcomm/%.java) Makefile | gen
+	javac -d gen $(filter %.java, $^)
+	touch $@
+
+clean:
+	rm -rf labcomm.jar gen