diff --git a/compiler/cpp/src/generate/t_php_generator.cc b/compiler/cpp/src/generate/t_php_generator.cc
index 6ac0b33..1ed599c 100644
--- a/compiler/cpp/src/generate/t_php_generator.cc
+++ b/compiler/cpp/src/generate/t_php_generator.cc
@@ -341,7 +341,7 @@
     php_includes();
 
   f_service_ <<
-    "require_once dirname(__FILE__).'/" << program_name_ << "_types.php';" << endl << endl;
+    "require_once $GLOBALS['THRIFT_ROOT'].'/packages/" << program_name_ << "/" << program_name << "_types.php';" << endl << endl;
 
   // Generate the three main parts of the service (well, two for now in PHP)
   generate_service_interface(tservice);
@@ -624,12 +624,12 @@
         f_service_ <<
           indent() << "throw new Exception(\"" << (*f_iter)->get_name() << " failed: unknown result\");" << endl;
       }     
-    }      
 
     // Close function
     scope_down(f_service_);
     f_service_ << endl;
-    
+
+    }   
   }
 
   indent_down();
diff --git a/lib/cpp/src/server/TServer.h b/lib/cpp/src/server/TServer.h
index c19302f..ddb320d 100644
--- a/lib/cpp/src/server/TServer.h
+++ b/lib/cpp/src/server/TServer.h
@@ -21,10 +21,10 @@
  *
  * @author Mark Slee <mcslee@facebook.com>
  */
-class TServer : public concurrency::Runnable {
+class TServer {
 public:
   virtual ~TServer() {}
-  virtual void run() = 0;
+  virtual void serve() = 0;
   
 protected:
   TServer(shared_ptr<TProcessor> processor,
diff --git a/lib/cpp/src/server/TSimpleServer.cc b/lib/cpp/src/server/TSimpleServer.cc
index 041a52f..63b6c6b 100644
--- a/lib/cpp/src/server/TSimpleServer.cc
+++ b/lib/cpp/src/server/TSimpleServer.cc
@@ -11,7 +11,7 @@
  *
  * @author Mark Slee <mcslee@facebook.com>
  */
-void TSimpleServer::run() {
+void TSimpleServer::serve() {
 
   shared_ptr<TTransport> client;
   pair<shared_ptr<TTransport>,shared_ptr<TTransport> > io;
diff --git a/lib/cpp/src/server/TSimpleServer.h b/lib/cpp/src/server/TSimpleServer.h
index 973ba30..a0d22a7 100644
--- a/lib/cpp/src/server/TSimpleServer.h
+++ b/lib/cpp/src/server/TSimpleServer.h
@@ -24,7 +24,7 @@
     
   ~TSimpleServer() {}
 
-  void run();
+  void serve();
 
 };
 
diff --git a/lib/cpp/src/server/TThreadPoolServer.cc b/lib/cpp/src/server/TThreadPoolServer.cc
index 1eab53d..4285b05 100644
--- a/lib/cpp/src/server/TThreadPoolServer.cc
+++ b/lib/cpp/src/server/TThreadPoolServer.cc
@@ -55,7 +55,7 @@
 
 TThreadPoolServer::~TThreadPoolServer() {}
 
-void TThreadPoolServer::run() {
+void TThreadPoolServer::serve() {
 
   shared_ptr<TTransport> client;
   pair<shared_ptr<TTransport>,shared_ptr<TTransport> > io;
diff --git a/lib/cpp/src/server/TThreadPoolServer.h b/lib/cpp/src/server/TThreadPoolServer.h
index 34b216c..b8f8b47 100644
--- a/lib/cpp/src/server/TThreadPoolServer.h
+++ b/lib/cpp/src/server/TThreadPoolServer.h
@@ -26,7 +26,7 @@
 
   virtual ~TThreadPoolServer();
 
-  virtual void run();
+  virtual void serve();
 
 protected:
 
diff --git a/lib/php/src/transport/TSocket.php b/lib/php/src/transport/TSocket.php
index 74ef01f..5ecd874 100644
--- a/lib/php/src/transport/TSocket.php
+++ b/lib/php/src/transport/TSocket.php
@@ -165,12 +165,28 @@
       stream_set_timeout($this->handle_, 0, $this->recvTimeout_*1000);
       $this->sendTimeoutSet_ = FALSE;
     }
-    $buf = @stream_get_contents($this->handle_, $len);
-    if ($buf === FALSE || strlen($buf) !== $len) {
-      throw new Exception('TSocket: Could not read '.$len.' bytes from '.
-                          $this->host_.':'.$this->port_);
+    // This call does not obey stream_set_timeout values!
+    // $buf = @stream_get_contents($this->handle_, $len);
+
+    $pre = null;
+    while (true) {
+      $buf = @fread($this->handle_, $len);
+      if ($buf === FALSE) {
+        throw new Exception('TSocket: Could not read '.$len.' bytes from '.
+                            $this->host_.':'.$this->port_);
+      } else if (($sz = strlen($buf)) < $len) {
+        $md = stream_get_meta_data($this->handle_);
+        if ($md['timed_out']) {
+          throw new Exception('TSocket: timed out reading '.$len.' bytes from '.
+                              $this->host_.':'.$this->port_);
+        } else {
+          $pre .= $buf;
+          $len -= $sz;
+        }
+      } else {
+        return $pre.$buf;
+      }
     }
-    return $buf;
   }
 
   /**
@@ -184,7 +200,7 @@
       stream_set_timeout($this->handle_, 0, $this->recvTimeout_*1000);
       $this->sendTimeoutSet_ = FALSE;
     }
-    $data = @fread($this->handle_, 1);
+    $data = @fread($this->handle_, $len);
     if ($data === FALSE) {
       throw new Exception('TSocket: Could not read '.$len.' bytes from '.
                           $this->host_.':'.$this->port_);
diff --git a/lib/py/src/server/TServer.py b/lib/py/src/server/TServer.py
index 53f6846..c9a701e 100644
--- a/lib/py/src/server/TServer.py
+++ b/lib/py/src/server/TServer.py
@@ -6,7 +6,7 @@
 
 class TServer:
 
-  """Base interface for a server, which must have a run method."""
+  """Base interface for a server, which must have a serve method."""
 
   def __init__(self, processor, serverTransport, transportFactory=None):
     self.processor = processor
@@ -16,7 +16,7 @@
     else:
       self.transportFactory = transportFactory
 
-  def run(self):
+  def serve(self):
     pass
 
 class TSimpleServer(TServer):
@@ -26,7 +26,7 @@
   def __init__(self, processor, serverTransport, transportFactory=None):
     TServer.__init__(self, processor, serverTransport, transportFactory)
 
-  def run(self):
+  def serve(self):
     self.serverTransport.listen()
     while True:
       client = self.serverTransport.accept()
diff --git a/test/cpp/src/TestServer.cc b/test/cpp/src/TestServer.cc
index f2f9eca..db41b79 100644
--- a/test/cpp/src/TestServer.cc
+++ b/test/cpp/src/TestServer.cc
@@ -353,7 +353,7 @@
                                );
 
     printf("Starting the server on port %d...\n", port);
-    simpleServer.run();
+    simpleServer.serve();
 
   } else if (serverType == "thread-pool") {
 
@@ -374,7 +374,7 @@
 				       serverOptions);
 
     printf("Starting the server on port %d...\n", port);
-    threadPoolServer.run();
+    threadPoolServer.serve();
   }
 
   printf("done.\n");
diff --git a/test/py/TestServer.py b/test/py/TestServer.py
index f0f9ba1..96312c5 100755
--- a/test/py/TestServer.py
+++ b/test/py/TestServer.py
@@ -57,4 +57,4 @@
 processor = ThriftTest.Processor(handler, protocol)
 factory = TTransport.TBufferedTransportFactory()
 server = TServer.TSimpleServer(processor, transport, factory)
-server.run()
+server.serve()
