diff --git a/lib/java/src/server/TServer.java b/lib/java/src/server/TServer.java
index 3cae00b..5ef96d0 100644
--- a/lib/java/src/server/TServer.java
+++ b/lib/java/src/server/TServer.java
@@ -1,9 +1,10 @@
 package com.facebook.thrift.server;
 
 import com.facebook.thrift.TProcessor;
+import com.facebook.thrift.protocol.TBinaryProtocol;
+import com.facebook.thrift.protocol.TProtocolFactory;
 import com.facebook.thrift.transport.TServerTransport;
 import com.facebook.thrift.transport.TTransportFactory;
-import com.facebook.thrift.transport.TBaseTransportFactory;
 
 /**
  * Generic interface for a Thrift server.
@@ -13,24 +14,11 @@
 public abstract class TServer {
 
   /**
-   * The options class should be subclassed by particular servers which have
-   * specific options needs, while the general options should live here.
-   */
-  public static class Options {
-    public Options() {}
-  }
-
-  /**
    * Core processor
    */
   protected TProcessor processor_;
 
   /**
-   * Server options
-   */
-  protected Options options_;
-
-  /**
    * Server transport
    */
   protected TServerTransport serverTransport_;
@@ -41,6 +29,11 @@
   protected TTransportFactory transportFactory_;
 
   /**
+   * Protocol Factory
+   */
+  protected TProtocolFactory protocolFactory_;
+
+  /**
    * Default constructors.
    */
 
@@ -48,8 +41,8 @@
                     TServerTransport serverTransport) {
     this(processor,
          serverTransport,
-         new TBaseTransportFactory(),
-         new Options());
+         new TTransportFactory(),
+         new TBinaryProtocol.Factory());
   }
 
   protected TServer(TProcessor processor,
@@ -58,31 +51,22 @@
     this(processor,
          serverTransport,
          transportFactory,
-         new Options());
-  }
-
-
-  protected TServer(TProcessor processor,
-                    TServerTransport serverTransport,
-                    Options options) {
-    this(processor,
-         serverTransport,
-         new TBaseTransportFactory(),
-         options);
+         new TBinaryProtocol.Factory());
   }
 
   protected TServer(TProcessor processor,
                     TServerTransport serverTransport,
                     TTransportFactory transportFactory,
-                    Options options) {
+                    TProtocolFactory protocolFactory) {
     processor_ = processor;
     serverTransport_ = serverTransport;
     transportFactory_ = transportFactory;
-    options_ = options;
+    protocolFactory_ = protocolFactory;
   }
   
   /**
    * The run method fires up the server and gets things going.
    */
   public abstract void serve();
+
 }
diff --git a/lib/java/src/server/TSimpleServer.java b/lib/java/src/server/TSimpleServer.java
index 548ca09..7ecd347 100644
--- a/lib/java/src/server/TSimpleServer.java
+++ b/lib/java/src/server/TSimpleServer.java
@@ -2,6 +2,8 @@
 
 import com.facebook.thrift.TException;
 import com.facebook.thrift.TProcessor;
+import com.facebook.thrift.protocol.TProtocol;
+import com.facebook.thrift.protocol.TProtocolFactory;
 import com.facebook.thrift.transport.TServerTransport;
 import com.facebook.thrift.transport.TTransport;
 import com.facebook.thrift.transport.TTransportException;
@@ -28,12 +30,14 @@
 
     while (true) {
       TTransport client = null;
-      TTransport[] io = null;
+      TTransport[] iot = null;
+      TProtocol[] iop = null;
       try {
         client = serverTransport_.accept();
         if (client != null) {
-          io = transportFactory_.getIOTransports(client);
-          while (processor_.process(io[0], io[1]));
+          iot = transportFactory_.getIOTransports(client);
+          iop = protocolFactory_.getIOProtocols(iot[0], iot[1]);
+          while (processor_.process(iop[0], iop[1]));
         }
       } catch (TTransportException ttx) {
         // Client died, just move on
@@ -43,12 +47,12 @@
         x.printStackTrace();
       }
 
-      if (io != null) {
-        if (io[0] != null) {
-          io[0].close();
+      if (iot != null) {
+        if (iot[0] != null) {
+          iot[0].close();
         }
-        if (io[1] != null) {
-          io[1].close();
+        if (iot[1] != null) {
+          iot[1].close();
         }
       }
     }
diff --git a/lib/java/src/server/TThreadPoolServer.java b/lib/java/src/server/TThreadPoolServer.java
index c63d1e1..090859d 100644
--- a/lib/java/src/server/TThreadPoolServer.java
+++ b/lib/java/src/server/TThreadPoolServer.java
@@ -2,11 +2,12 @@
 
 import com.facebook.thrift.TException;
 import com.facebook.thrift.TProcessor;
+import com.facebook.thrift.protocol.TProtocol;
+import com.facebook.thrift.protocol.TProtocolFactory;
 import com.facebook.thrift.transport.TServerTransport;
 import com.facebook.thrift.transport.TTransport;
 import com.facebook.thrift.transport.TTransportException;
 import com.facebook.thrift.transport.TTransportFactory;
-import com.facebook.thrift.transport.TBaseTransportFactory;
 
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.LinkedBlockingQueue;
@@ -26,25 +27,21 @@
   private ExecutorService executorService_;
 
   // Customizable server options
-  public static class Options extends TServer.Options {
+  public static class Options {
     public int minWorkerThreads = 5;
     public int maxWorkerThreads = Integer.MAX_VALUE;
   }
 
   public TThreadPoolServer(TProcessor processor,
                            TServerTransport serverTransport) {
-    this(processor,
-         serverTransport,
-         new TBaseTransportFactory(),
-         new Options());
+    this(processor, serverTransport, new Options());
   }
   
   public TThreadPoolServer(TProcessor processor,
                            TServerTransport serverTransport,
-                           TTransportFactory transportFactory,
                            Options options) {
-    super(processor, serverTransport, transportFactory, options);
-    serverTransport_ = serverTransport;
+    super(processor, serverTransport);
+
     executorService_ = null;
 
     LinkedBlockingQueue<Runnable> executorQueue =
@@ -99,10 +96,12 @@
      * Loops on processing a client forever
      */
     public void run() {
-      TTransport[] io = null;
+      TTransport[] iot = null;
+      TProtocol[] iop = null;
       try {
-        io = transportFactory_.getIOTransports(client_);
-        while (processor_.process(io[0], io[1])) {}
+        iot = transportFactory_.getIOTransports(client_);
+        iop = protocolFactory_.getIOProtocols(iot[0], iot[1]);
+        while (processor_.process(iop[0], iop[1])) {}
       } catch (TTransportException ttx) {
         // Assume the client died and continue silently
       } catch (TException tx) {
@@ -111,12 +110,12 @@
         x.printStackTrace();
       }
 
-      if (io != null) {
-        if (io[0] != null) {
-          io[0].close();
+      if (iot != null) {
+        if (iot[0] != null) {
+          iot[0].close();
         }
-        if (io[1] != null) {
-          io[1].close();
+        if (iot[1] != null) {
+          iot[1].close();
         }
       }
     }
