diff --git a/README b/README
index 26a53f7..e1bf59e 100644
--- a/README
+++ b/README
@@ -1,11 +1,8 @@
 Thrift (Thrift IDL and RPC tool)
-Version 1.0  (22 August 2006)
 
 Mark Slee (mcslee@facebook.com)
-Aditya Agarwal (aditya@facebook.com)
 Marc Kwiatkowski (marc@facebook.com)
-
-$Header$
+Aditya Agarwal (aditya@facebook.com)
 
 Thrift is distributed under the Thrift open source software license.
 Please see the included LICENSE file.
@@ -14,12 +11,51 @@
 ============
 
 Thrift is a lightweight, language-independent software stack with an
-associated code generation mechanism for RPC.
+associated code generation mechanism for RPC. Thrift provides clean
+abstractions for data transport, data serialization, and application
+level processing. The code generation system takes a simple definition
+language as its input and generates code across programming languages that
+uses the abstracted stack to build interoperable RPC clients and servers.
+
+For more details on Thrift's design and implementation, take a gander at
+the Thrift whitepaper included in this distribution or at the README files
+in a particular subdirectory of interest.
+
+Heirarchy
+=========
+
+thrift/
+
+  compiler/
+    Contains the Thrift compiler, implemented in C++.
+
+  lib/
+    Contains the Thrift software library implementation, subdivided by
+    language of implementation.
+
+    cpp/
+    java/
+    php/
+    py/
+    ruby/
+
+  test/
+
+    Contains sample Thrift files and test code across the target programming
+    languages.
+
 
 Requirements
 ============
-Thrift requires boost shared pointers from boost-1.33.1 or greater,
-see http://www.boost.org/libs/smart_ptr/smart_ptr.htm
+
+Thrift requires boost shared pointers from boost-1.33.1 or greater, see:
+http://www.boost.org/libs/smart_ptr/smart_ptr.htm
+
+Some portions of Thrift also depend upon libevent, see:
+http://monkey.org/~provos/libevent/
+
+These libraries are open source and may be freely obtained, but they are not
+provided as a part of this distribution.
 
 Resources
 =========
@@ -47,14 +83,17 @@
 	./configure
 
 You may need to specify the location of the boost files explicitly.
-If you installed boost in  /usr/local, you would run configure as follows:
+If you installed boost in /usr/local, you would run configure as follows:
 
 	./configure --with-boost=/usr/local
 
-Note that by default the thrift C++ library is built with no debugging symbols
-included. If you would like debugging symbols during development work, run:
+Note that by default the thrift C++ library is typically built with debugging
+symbols included. If you want to customize these options you should use the
+CXXFLAGS option in configure, as such:
 
+        ./configure CXXFLAGS='-g -O2'
         ./configure CFLAGS='-g -O2'
+        ./configure CPPFLAGS='-g -O2'
 
 Run ./configure --help to see other configuration options
 
diff --git a/compiler/cpp/configure.ac b/compiler/cpp/configure.ac
index eadb7f1..5408146 100644
--- a/compiler/cpp/configure.ac
+++ b/compiler/cpp/configure.ac
@@ -44,8 +44,4 @@
 
 AC_PROG_LIBTOOL
 
-CFLAGS="-O2"
-
-CXXFLAGS="-O2"
-
 AC_OUTPUT(Makefile)
diff --git a/lib/cpp/configure.ac b/lib/cpp/configure.ac
index 1f2763c..878e55a 100644
--- a/lib/cpp/configure.ac
+++ b/lib/cpp/configure.ac
@@ -28,6 +28,12 @@
 
 AC_CHECK_FUNCS([strtoul])
 
+AC_CHECK_FUNCS([memmove])
+
+AC_CHECK_FUNCS([strstr])
+
+AC_CHECK_FUNCS([strchr])
+
 AC_CHECK_HEADERS([arpa/inet.h])
 
 AC_CHECK_HEADERS([fcntl.h])
@@ -100,8 +106,4 @@
 
 AC_PROG_LIBTOOL
 
-CFLAGS="-g -O2"
-
-CXXFLAGS="-g -O2"
-
 AC_OUTPUT(Makefile)
diff --git a/lib/cpp/src/server/TSimpleServer.cpp b/lib/cpp/src/server/TSimpleServer.cpp
index e7d7e9b..40d7ed9 100644
--- a/lib/cpp/src/server/TSimpleServer.cpp
+++ b/lib/cpp/src/server/TSimpleServer.cpp
@@ -57,21 +57,21 @@
       outputTransport->close();
       client->close();    
     } catch (TTransportException& ttx) {
-      if (inputTransport.get() != NULL) { inputTransport->close(); }
-      if (outputTransport.get() != NULL) { outputTransport->close(); }
-      if (client.get() != NULL) { client->close(); }
+      if (inputTransport != NULL) { inputTransport->close(); }
+      if (outputTransport != NULL) { outputTransport->close(); }
+      if (client != NULL) { client->close(); }
       cerr << "TServerTransport died on accept: " << ttx.what() << endl;
       continue;
     } catch (TException& tx) {
-      if (inputTransport.get() != NULL) { inputTransport->close(); }
-      if (outputTransport.get() != NULL) { outputTransport->close(); }
-      if (client.get() != NULL) { client->close(); }
+      if (inputTransport != NULL) { inputTransport->close(); }
+      if (outputTransport != NULL) { outputTransport->close(); }
+      if (client != NULL) { client->close(); }
       cerr << "Some kind of accept exception: " << tx.what() << endl;
       continue;
     } catch (string s) {
-      if (inputTransport.get() != NULL) { inputTransport->close(); }
-      if (outputTransport.get() != NULL) { outputTransport->close(); }
-      if (client.get() != NULL) { client->close(); }
+      if (inputTransport != NULL) { inputTransport->close(); }
+      if (outputTransport != NULL) { outputTransport->close(); }
+      if (client != NULL) { client->close(); }
       cerr << "TThreadPoolServer: Unknown exception: " << s << endl;
       break;
     }
diff --git a/lib/cpp/src/server/TThreadPoolServer.cpp b/lib/cpp/src/server/TThreadPoolServer.cpp
index dcbf2f2..2542de9 100644
--- a/lib/cpp/src/server/TThreadPoolServer.cpp
+++ b/lib/cpp/src/server/TThreadPoolServer.cpp
@@ -42,7 +42,7 @@
     } catch (TTransportException& ttx) {
       // This is reasonably expected, client didn't send a full request so just
       // ignore him
-      //cerr << "TThreadPoolServer client died: " << ttx.what() << endl;
+      cerr << "TThreadPoolServer client died: " << ttx.what() << endl;
     } catch (TException& x) {
       cerr << "TThreadPoolServer exception: " << x.what() << endl;
     } catch (...) {
@@ -100,6 +100,12 @@
   
   while (!stop_) {
     try {
+      client.reset();
+      inputTransport.reset();
+      outputTransport.reset();
+      inputProtocol.reset();
+      outputProtocol.reset();
+
       // Fetch client from server
       client = serverTransport_->accept();
 
@@ -113,23 +119,23 @@
       threadManager_->add(shared_ptr<TThreadPoolServer::Task>(new TThreadPoolServer::Task(processor_, inputProtocol, outputProtocol)));
 
     } catch (TTransportException& ttx) {
-      if (inputTransport.get() != NULL) { inputTransport->close(); }
-      if (outputTransport.get() != NULL) { outputTransport->close(); }
-      if (client.get() != NULL) { client->close(); }
+      if (inputTransport != NULL) { inputTransport->close(); }
+      if (outputTransport != NULL) { outputTransport->close(); }
+      if (client != NULL) { client->close(); }
       if (!stop_ || ttx.getType() != TTransportException::INTERRUPTED) {
         cerr << "TThreadPoolServer: TServerTransport died on accept: " << ttx.what() << endl;
       }
       continue;
     } catch (TException& tx) {
-      if (inputTransport.get() != NULL) { inputTransport->close(); }
-      if (outputTransport.get() != NULL) { outputTransport->close(); }
-      if (client.get() != NULL) { client->close(); }
+      if (inputTransport != NULL) { inputTransport->close(); }
+      if (outputTransport != NULL) { outputTransport->close(); }
+      if (client != NULL) { client->close(); }
       cerr << "TThreadPoolServer: Caught TException: " << tx.what() << endl;
       continue;
     } catch (string s) {
-      if (inputTransport.get() != NULL) { inputTransport->close(); }
-      if (outputTransport.get() != NULL) { outputTransport->close(); }
-      if (client.get() != NULL) { client->close(); }
+      if (inputTransport != NULL) { inputTransport->close(); }
+      if (outputTransport != NULL) { outputTransport->close(); }
+      if (client != NULL) { client->close(); }
       cerr << "TThreadPoolServer: Unknown exception: " << s << endl;
       break;
     }
