diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/BytecodeMarshallerGenerator.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/BytecodeMarshallerGenerator.java
index 86dc2ca..8932c07 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/BytecodeMarshallerGenerator.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/BytecodeMarshallerGenerator.java
@@ -443,7 +443,7 @@
         mv.visitVarInsn( ALOAD, 3 );
         mv.visitVarInsn( ALOAD, 6 );
         mv.visitInsn( ARRAYLENGTH );
-        mv.visitMethodInsn( INVOKEINTERFACE, DATAOUTPUT_CLASS_INTERNAL_TYPE, "writeInt", "(I)V" );
+        mv.visitMethodInsn( INVOKEINTERFACE, TARGET_CLASS_INTERNAL_TYPE, "writeInt", "(I)V" );
 
         // Loop over every element in array
         Label forLoopEnd = new Label();
@@ -602,7 +602,7 @@
 
         // Read size
         mv.visitVarInsn( ALOAD, 3 );
-        mv.visitMethodInsn( INVOKEINTERFACE, DATAINPUT_CLASS_INTERNAL_TYPE, "readInt", "()I" );
+        mv.visitMethodInsn( INVOKEINTERFACE, SOURCE_CLASS_INTERNAL_TYPE, "readInt", "()I" );
         mv.visitInsn( DUP );
         mv.visitVarInsn( ISTORE, 5 );
 
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/GeneratorConstants.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/GeneratorConstants.java
index efc4f84..326ef4c 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/GeneratorConstants.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/GeneratorConstants.java
@@ -18,8 +18,6 @@
  */
 package org.apache.directmemory.lightning.internal.generator;
 
-import java.io.DataInput;
-import java.io.DataOutput;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
@@ -29,6 +27,8 @@
 import org.apache.directmemory.lightning.MarshallerContext;
 import org.apache.directmemory.lightning.MarshallerStrategy;
 import org.apache.directmemory.lightning.SerializationContext;
+import org.apache.directmemory.lightning.Source;
+import org.apache.directmemory.lightning.Target;
 import org.apache.directmemory.lightning.instantiator.ObjectInstantiatorFactory;
 import org.apache.directmemory.lightning.internal.CheatPropertyDescriptor;
 import org.apache.directmemory.lightning.internal.ClassDescriptorAwareSerializer;
@@ -44,16 +44,16 @@
     static String MARSHALLER_MARSHALL_SIGNATURE =
         Type.getMethodDescriptor( Type.VOID_TYPE,
                                   new Type[] { Type.getType( Object.class ), Type.getType( PropertyDescriptor.class ),
-                                      Type.getType( DataOutput.class ), Type.getType( SerializationContext.class ) } );
+                                      Type.getType( Target.class ), Type.getType( SerializationContext.class ) } );
 
     static String MARSHALLER_BASE_UNMARSHALL_SIGNATURE =
         Type.getMethodDescriptor( Type.getType( Object.class ), new Type[] { Type.getType( PropertyDescriptor.class ),
-            Type.getType( DataInput.class ), Type.getType( SerializationContext.class ) } );
+            Type.getType( Source.class ), Type.getType( SerializationContext.class ) } );
 
     static String MARSHALLER_UNMARSHALL_SIGNATURE =
         Type.getMethodDescriptor( Type.getType( Object.class ),
                                   new Type[] { Type.getType( Object.class ), Type.getType( PropertyDescriptor.class ),
-                                      Type.getType( DataInput.class ), Type.getType( SerializationContext.class ) } );
+                                      Type.getType( Source.class ), Type.getType( SerializationContext.class ) } );
 
     static String MARSHALLER_FIND_MARSHALLER_SIGNATURE =
         Type.getMethodDescriptor( Type.getType( Marshaller.class ),
@@ -65,7 +65,7 @@
     static String MARSHALLER_IS_ALREADY_MARSHALLED_SIGNATURE =
         Type.getMethodDescriptor( Type.BOOLEAN_TYPE,
                                   new Type[] { Type.getType( Object.class ), Type.getType( Class.class ),
-                                      Type.getType( DataOutput.class ), Type.getType( SerializationContext.class ) } );
+                                      Type.getType( Target.class ), Type.getType( SerializationContext.class ) } );
 
     static String MARSHALLER_CONSTRUCTOR_SIGNATURE =
         Type.getMethodDescriptor( Type.VOID_TYPE,
@@ -122,9 +122,9 @@
 
     static String CLASS_CLASS_INTERNAL_TYPE = Type.getType( Class.class ).getInternalName();
 
-    static String DATAOUTPUT_CLASS_INTERNAL_TYPE = Type.getType( DataOutput.class ).getInternalName();
+    static String TARGET_CLASS_INTERNAL_TYPE = Type.getType( Target.class ).getInternalName();
 
-    static String DATAINPUT_CLASS_INTERNAL_TYPE = Type.getType( DataInput.class ).getInternalName();
+    static String SOURCE_CLASS_INTERNAL_TYPE = Type.getType( Source.class ).getInternalName();
 
     static String MARSHALLERSTRATEGY_CLASS_INTERNAL_TYPE = Type.getType( MarshallerStrategy.class ).getInternalName();
 
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/io/ByteOrderUtils.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/io/ByteOrderUtils.java
index d765514..ac2dde4 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/io/ByteOrderUtils.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/io/ByteOrderUtils.java
@@ -166,8 +166,8 @@
 
     private static long buildLong( byte b7, byte b6, byte b5, byte b4, byte b3, byte b2, byte b1, byte b0 )
     {
-        return ( ( ( ( b7 & 0xFF ) << 56 ) | ( ( b6 & 0xFF ) << 48 ) | ( ( b5 & 0xFF ) << 40 ) | ( ( b4 & 0xFF ) << 32 )
-            | ( ( b3 & 0xFF ) << 24 ) | ( ( b2 & 0xFF ) << 16 ) | ( ( b1 & 0xFF ) << 8 ) | ( ( b0 & 0xFF ) << 0 ) ) );
+        return ( ( ( ( b7 & 0xFFL ) << 56 ) | ( ( b6 & 0xFFL ) << 48 ) | ( ( b5 & 0xFFL ) << 40 )
+            | ( ( b4 & 0xFFL ) << 32 ) | ( ( b3 & 0xFFL ) << 24 ) | ( ( b2 & 0xFFL ) << 16 ) | ( ( b1 & 0xFFL ) << 8 ) | ( ( b0 & 0xFFL ) << 0 ) ) );
     }
 
 }
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/UnicodeUtil.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/UnicodeUtil.java
index dd2aeab..bbdc315 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/UnicodeUtil.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/UnicodeUtil.java
@@ -167,7 +167,7 @@
         while ( i < end )
         {
 
-            final int code = (int) characters[i++];
+            final int code = characters[i++];
 
             if ( code < 0x80 )
             {
@@ -193,7 +193,7 @@
                 // confirm valid high surrogate
                 if ( code < 0xDC00 && i < end )
                 {
-                    int utf32 = (int) characters[i];
+                    int utf32 = characters[i];
                     // confirm valid low surrogate and write pair
                     if ( utf32 >= 0xDC00 && utf32 <= 0xDFFF )
                     {
@@ -287,14 +287,14 @@
      * 
      * @throws IOException
      */
-    public static String UTF8toUTF16( Source source, int length )
+    public static String UTF8toUTF16( Source source )
         throws IOException
     {
         int charLength = source.readInt();
 
         int offset = 0;
         final char[] out = new char[charLength];
-        while ( offset < length )
+        while ( offset < charLength )
         {
             int b = source.readByte() & 0xff;
             if ( b < 0xc0 )
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/io/ByteBufferSource.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/io/ByteBufferSource.java
index 875ee03..df90490 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/io/ByteBufferSource.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/io/ByteBufferSource.java
@@ -56,8 +56,7 @@
     public String readString()
         throws IOException
     {
-        int length = readInt();
-        return UnicodeUtil.UTF8toUTF16( this, length );
+        return UnicodeUtil.UTF8toUTF16( this );
     }
 
     @Override
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/io/ByteBufferTarget.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/io/ByteBufferTarget.java
index ce910a1..d325ebf 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/io/ByteBufferTarget.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/io/ByteBufferTarget.java
@@ -5,6 +5,7 @@
 import java.nio.ByteOrder;
 
 import org.apache.directmemory.lightning.Target;
+import org.apache.directmemory.lightning.internal.util.UnicodeUtil;
 
 public class ByteBufferTarget
     implements Target
@@ -54,7 +55,7 @@
     public void writeString( String value )
         throws IOException
     {
-        // TODO: implementation of writeString is missing
+        UnicodeUtil.UTF16toUTF8( value, this );
     }
 
     @Override
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/io/InputStreamSource.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/io/InputStreamSource.java
index 7b243a3..3c89be6 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/io/InputStreamSource.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/io/InputStreamSource.java
@@ -89,8 +89,7 @@
     public String readString()
         throws IOException
     {
-        int length = readInt();
-        return UnicodeUtil.UTF8toUTF16( this, length );
+        return UnicodeUtil.UTF8toUTF16( this );
     }
 
     @Override
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/io/OutputStreamTarget.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/io/OutputStreamTarget.java
index 132f58c..76ef67a 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/io/OutputStreamTarget.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/io/OutputStreamTarget.java
@@ -6,6 +6,7 @@
 
 import org.apache.directmemory.lightning.Target;
 import org.apache.directmemory.lightning.internal.io.ByteOrderUtils;
+import org.apache.directmemory.lightning.internal.util.UnicodeUtil;
 
 public class OutputStreamTarget
     implements Target
@@ -66,7 +67,7 @@
     public void writeString( String value )
         throws IOException
     {
-        // TODO: implementation of writeString is missing
+        UnicodeUtil.UTF16toUTF8( value, this );
     }
 
     @Override
