diff --git a/lib/cpp/src/server/TThreadPoolServer.cc b/lib/cpp/src/server/TThreadPoolServer.cc
new file mode 100644
index 0000000..2d6290c
--- /dev/null
+++ b/lib/cpp/src/server/TThreadPoolServer.cc
@@ -0,0 +1,98 @@
+#include "server/TThreadPoolServer.h"
+#include "transport/TBufferedTransport.h"
+#include "transport/TTransportException.h"
+#include "concurrency/Thread.h"
+#include "concurrency/ThreadManager.h"
+#include <string>
+#include <iostream>
+
+namespace facebook { namespace thrift { namespace server { 
+
+using namespace std;
+using namespace facebook::thrift::concurrency;
+using namespace facebook::thrift::transport;
+
+class TThreadPoolServer : public TServer {
+
+  class Task: public Runnable {
+    
+    TProcessor* _processor;
+    TTransport* _transport;
+    TBufferedTransport _bufferedTransport;
+    
+  public:
+    
+    Task(TProcessor* processor,
+	 TTransport* transport) :
+      _processor(processor),
+      _transport(transport),
+      _bufferedTransport(_transport) {
+    }
+    
+    ~Task() {
+      delete _transport;
+    }
+    
+    void run() {
+      
+      while(true) {
+	
+	try {
+	  _processor->process(&_bufferedTransport);
+
+	} catch (TTransportException& ttx) {
+
+	  break;
+
+	} catch(...) {
+
+	  break;
+	}
+      }
+      
+      _bufferedTransport.close();
+    }
+  };
+  
+  TThreadPoolServer(TProcessor* processor,
+		    TServerOptions* options,
+		    TServerTransport* serverTransport,
+		    ThreadManager* threadManager) :
+    TServer(processor, options), 
+    serverTransport_(serverTransport), 
+    threadManager_(threadManager) {
+  }
+    
+  ~TThreadPoolServer() {}
+
+ protected:
+
+  TServerTransport* serverTransport_;
+  ThreadManager* threadManager_;
+  
+  void run() {
+
+    try {
+      // Start the server listening
+      serverTransport_->listen();
+    } catch (TTransportException& ttx) {
+      cerr << "TThreadPoolServer::run() listen(): " << ttx.getMessage() << endl;
+      return;
+    }
+
+    // Fetch client from server
+
+    while (true) {
+
+      try {
+
+	threadManager_->add(shared_ptr<Task>(new TThreadPoolServer::Task(processor_, serverTransport_->accept())));;
+
+      } catch (TTransportException& ttx) {
+	break;
+      }
+    }
+  }
+};
+
+}}} // facebook::thrift::server
diff --git a/lib/cpp/src/server/TThreadPoolServer.h b/lib/cpp/src/server/TThreadPoolServer.h
new file mode 100644
index 0000000..ef63a37
--- /dev/null
+++ b/lib/cpp/src/server/TThreadPoolServer.h
@@ -0,0 +1,10 @@
+#ifndef T_THREADPOOL_SERVER_H
+#define T_THREADPOOL_SERVER_H
+
+#include "server/TServer.h"
+#include "transport/TServerTransport.h"
+
+namespace facebook { namespace thrift { namespace server { 
+}}} // facebook::thrift::server
+
+#endif
