diff --git a/lib/java/src/TSerializer.java b/lib/java/src/TSerializer.java
index 2fb3794..0606d9b 100644
--- a/lib/java/src/TSerializer.java
+++ b/lib/java/src/TSerializer.java
@@ -16,56 +16,84 @@
 import com.facebook.thrift.transport.TTransport;
 
 /**
- * Generic utility for easily serializing objects into a byte array.
+ * Generic utility for easily serializing objects into a byte array or Java
+ * String.
  *
  * @author Mark Slee <mcslee@facebook.com>
  */
 public class TSerializer {
 
-  private static class TByteArrayTransport extends TIOStreamTransport {
+  /**
+   * This is the byte array that data is actually serialized into
+   */
+  private final ByteArrayOutputStream baos_ = new ByteArrayOutputStream();
 
-    private final ByteArrayOutputStream baos_ = new ByteArrayOutputStream();
+  /**
+   * This transport wraps that byte array
+   */
+  private final TIOStreamTransport transport_ = new TIOStreamTransport(baos_);
 
-    public TByteArrayTransport() {
-      outputStream_ = baos_;
-    }
-
-    public byte[] get() {
-      return baos_.toByteArray();
-    }
-
-    public void reset() {
-      baos_.reset();
-    }
-  }
-
+  /**
+   * Internal protocol used for serializing objects.
+   */
   private TProtocol protocol_;
 
-  private final TByteArrayTransport transport_ = new TByteArrayTransport();
-
+  /**
+   * Create a new TSerializer that uses the TBinaryProtocol by default.
+   *
+   * @param protocolFactory Factory to create a protocol
+   */
   public TSerializer() {
     this(new TBinaryProtocol.Factory());
   }
 
+  /**
+   * Create a new TSerializer. It will use the TProtocol specified by the
+   * factory that is passed in.
+   *
+   * @param protocolFactory Factory to create a protocol
+   */
   public TSerializer(TProtocolFactory protocolFactory) {
     protocol_ = protocolFactory.getProtocol(transport_);
   }
 
+  /**
+   * Serialize the Thrift object into a byte array. The process is simple,
+   * just clear the byte array output, write the object into it, and grab the
+   * raw bytes.
+   *
+   * @param base The object to serialize
+   * @return Serialized object in byte[] format
+   */
   public byte[] serialize(TBase base) throws TException {
-    transport_.reset();
+    baos_.reset();
     base.write(protocol_);
-    byte[] data = transport_.get();
-    return data;
+    return baos_.toByteArray();
   }
 
+  /**
+   * Serialize the Thrift object into a Java string, using a specified
+   * character set for encoding.
+   *
+   * @param base The object to serialize
+   * @param charset Valid JVM charset
+   * @return Serialized object as a String
+   */
   public String toString(TBase base, String charset) throws TException {
     try {
       return new String(serialize(base), charset);
     } catch (UnsupportedEncodingException uex) {
-      throw new TException("JVM DOES NOT SUPPORT ENCODING");
+      throw new TException("JVM DOES NOT SUPPORT ENCODING: " + charset);
     }
   }
 
+  /**
+   * Serialize the Thrift object into a Java string, using the default JVM
+   * charset encoding.
+   *
+   * @param base The object to serialize
+   * @return Serialized object as a String
+   */
   public String toString(TBase base) throws TException {
     return new String(serialize(base));
   }
