diff --git a/.bzrignore b/.bzrignore
index 06ec666641cec276bf1eb97173056f357138d0c2..dc2d51ed087708f7132bf2ac1ddc3cb7a8b97d02 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -25,3 +25,9 @@ example.h
 example.py
 examples/wiki_example/example.encoded
 example.encoded
+examples/simple/*.class
+examples/simple/encoded_data
+examples/simple/example_decoder
+examples/simple/example_encoder
+lib/c/test/test_labcomm_basic_type_encoding
+lib/c/test/test_labcomm_generated_encoding
diff --git a/Makefile b/Makefile
index 4bb6ec7b1bcf9e5e219371316585b9831341a4cf..e9388b0bb0aa7719c8b28f19187ac2f9f0feb60d 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-SUBDIRS=compiler lib examples test
+SUBDIRS=compiler lib test examples
 export LABCOMM_JAR=$(shell pwd)/compiler/labComm.jar
 export LABCOMM=java -jar $(LABCOMM_JAR) 
 
diff --git a/examples/Makefile b/examples/Makefile
index a8a26d7dd99993d446149dab8756252e8db4ff9d..f9a55111448869ff4ca79977404878d3017515ed 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -2,7 +2,8 @@ all:
 	echo To be done...
 
 test:
-	echo To be done...
+	echo More to be done...
+	cd simple ; sh compile.sh && sh run.sh
 
 clean:
 	echo To be done...
diff --git a/examples/wiki_example/example_decoder.py b/examples/wiki_example/example_decoder.py
index 3d40cf468e5764d1432b65c30a594fcd6fbd85ed..d729145300388c3a7a005bbfc6acc741669c2ac6 100755
--- a/examples/wiki_example/example_decoder.py
+++ b/examples/wiki_example/example_decoder.py
@@ -3,29 +3,8 @@
 import labcomm
 import sys
 
-class FileReader:
-    def __init__(self, name):
-        self.f = open(name)
-        pass
-
-    def start(self, decoder, version):
-        other_version = decoder.decode_string()
-        if version != other_version:
-            raise Exception("LabComm version mismatch %s != %s" %
-                            (version, other_version))
-        pass
-
-    def read(self, count):
-        s = self.f.read(count)
-        if len(s) == 0:
-            raise Exception("EOF")
-        return s
-
-    def mark(self, value, decl):
-        pass
-        
 if __name__ == "__main__":
-    d = labcomm.Decoder(FileReader(sys.argv[1]))
+    d = labcomm.Decoder(labcomm.StreamReader(open(sys.argv[1])))
 
     while True:
         try:
diff --git a/lib/python/labcomm/StreamReader.py b/lib/python/labcomm/StreamReader.py
new file mode 100644
index 0000000000000000000000000000000000000000..08c97abe045a69ec93d4f0ff06212a121180d344
--- /dev/null
+++ b/lib/python/labcomm/StreamReader.py
@@ -0,0 +1,23 @@
+class StreamReader:
+
+    def __init__(self, stream):
+        self.stream = stream
+        pass
+
+    def start(self, decoder, version):
+        other_version = decoder.decode_string()
+        if version != other_version:
+            raise Exception("LabComm version mismatch %s != %s" %
+                            (version, other_version))
+        pass
+
+    def read(self, count):
+        result = self.stream.read(count)
+        if len(result) == 0:
+            raise EOFError()
+        return result
+
+    def mark(self, value, decl):
+        pass
+        
+    pass
diff --git a/lib/python/labcomm/StreamWriter.py b/lib/python/labcomm/StreamWriter.py
new file mode 100644
index 0000000000000000000000000000000000000000..ae57c96d2b6290efe29e65b411474328f992c17e
--- /dev/null
+++ b/lib/python/labcomm/StreamWriter.py
@@ -0,0 +1,19 @@
+class StreamWriter:
+    
+    def __init__(self, stream):
+        self.stream = stream
+        pass
+            
+    def start(self, encoder, version):
+        encoder.encode_string(version)
+        pass
+    
+    def write(self, data):
+        self.stream.write(data)
+        pass
+
+    def mark(self):
+        self.stream.flush()
+        pass
+
+    pass
diff --git a/lib/python/labcomm/__init__.py b/lib/python/labcomm/__init__.py
index 563171e67254a4700c51e3ba6f6920dfb7ed6d11..52a5911bb58c90786bdf95d8f8cb27837e350407 100644
--- a/lib/python/labcomm/__init__.py
+++ b/lib/python/labcomm/__init__.py
@@ -1,5 +1,8 @@
 import labcomm.LabComm
     
+from labcomm.StreamReader import StreamReader
+from labcomm.StreamWriter import StreamWriter
+
 Decoder = labcomm.LabComm.Decoder
 Encoder = labcomm.LabComm.Encoder
 
diff --git a/test/test_encoder_decoder.py b/test/test_encoder_decoder.py
index 6d8d4bcaaaef9858843227e0ad49bb8f5ca3d8d7..acd08e5e4e15f9ccf8b517b606fd17360474861e 100755
--- a/test/test_encoder_decoder.py
+++ b/test/test_encoder_decoder.py
@@ -127,18 +127,7 @@ class Test:
         self.next = threading.Semaphore(0)
         decoder = threading.Thread(target=self.decode, args=(p.stdout,))
         decoder.start()
-        class Writer:
-            def start(self, encoder, version):
-                encoder.encode_string(version)
-                pass
-            def write(self, data):
-                p.stdin.write(data)
-                pass
-            def mark(self):
-                p.stdin.flush()
-                pass
-            pass
-        encoder = labcomm.Encoder(Writer())
+        encoder = labcomm.Encoder(labcomm.StreamWriter(p.stdin))
         for name,signature in self.signatures:
             encoder.add_decl(signature)
             pass
@@ -164,22 +153,7 @@ class Test:
         pass
 
     def decode(self, f):
-        class Reader:
-            def start(self, decoder, version):
-                other_version = decoder.decode_string()
-                if version != other_version:
-                    raise Exception("LabComm version mismatch %s != %s" %
-                                    (version, other_version))
-                pass
-            def read(self, count):
-                result = f.read(count)
-                if len(result) == 0:
-                    raise EOFError()
-                return result
-            def mark(self, value, decl):
-                pass
-            pass
-        decoder = labcomm.Decoder(Reader())
+        decoder = labcomm.Decoder(labcomm.StreamReader(f))
         try:
             while True:
                 value,decl = decoder.decode()