diff --git a/test/ThriftTest.thrift b/test/ThriftTest.thrift
index ac0d95c..50021ba 100644
--- a/test/ThriftTest.thrift
+++ b/test/ThriftTest.thrift
@@ -33,12 +33,12 @@
   list<Xtruct> xtructs = 1
 }
 
-exception Exception {
+exception Xception {
     u32 errorCode,
     string message
 }
 
-exception Xception {
+exception Xception2 {
     u32 errorCode,
     Xtruct struct_thing
 }
@@ -74,9 +74,9 @@
 
   /* Exception specifier */
 
-  Xtruct testException(string arg) throws(Exception err1),
+  void testException(string arg) throws(Xception err1),
 
   /* Multiple exceptions specifier */
 
-  Xtruct testMultiException(string arg0, string arg1) throws(Exception err1=1, Xception err2)
+  Xtruct testMultiException(string arg0, string arg1) throws(Xception err1=1, Xception2 err2)
 }
diff --git a/test/cpp/Makefile b/test/cpp/Makefile
index daaa15e..cec9699 100644
--- a/test/cpp/Makefile
+++ b/test/cpp/Makefile
@@ -22,18 +22,12 @@
 include_flags = $(patsubst %,-I%, $(include_paths))
 
 # Tools
-THRIFT = python ../../compiler/src/thrift.py ~/ws/thrift/dev/test/ThriftTest.thrift  --cpp
+THRIFT = python ../../compiler/src/thrift.py ~/ws/thrift/dev/test/ThriftTest.thrift
 CC     = g++
 LD     = g++
 
 # Compiler flags
-LIBS  = ../../lib/cpp/src/server/TSimpleServer.cc \
-	../../lib/cpp/src/protocol/TBinaryProtocol.cc \
-	../../lib/cpp/src/transport/TBufferedTransport.cc \
-	../../lib/cpp/src/transport/TChunkedTransport.cc \
-	../../lib/cpp/src/transport/TServerSocket.cc \
-	../../lib/cpp/src/transport/TSocket.cc
-DCFL  = -Wall -O3 -g -I../cpp-gen $(include_flags) $(LIBS)
+DCFL  = -Wall -O3 -g -I../cpp-gen $(include_flags) -L$(thrift_home)/lib -lthrift
 CFL   = -Wall -O3 -I../cpp-gen $(include_flags) -L$(thrift_home)/lib -lthrift
 
 all: server client
@@ -41,7 +35,7 @@
 debug: server-debug client-debug
 
 stubs: ../ThriftTest.thrift
-	$(THRIFT) -cpp ../ThriftTest.thrift
+	$(THRIFT) --cpp ../ThriftTest.thrift
 
 server-debug: stubs
 	g++ -o TestServer $(DCFL) src/TestServer.cc ../cpp-gen/ThriftTest.cc
diff --git a/test/cpp/src/TestClient.cc b/test/cpp/src/TestClient.cc
index e977442..42272d3 100644
--- a/test/cpp/src/TestClient.cc
+++ b/test/cpp/src/TestClient.cc
@@ -13,6 +13,7 @@
 using namespace facebook::thrift;
 using namespace facebook::thrift::protocol;
 using namespace facebook::thrift::transport;
+using namespace thrift::test;
 
 //extern uint32_t g_socket_syscalls;
 
@@ -96,8 +97,8 @@
      * I64 TEST
      */
     printf("testI64(-34359738368)");
-    int64_t i64 = testClient.testI64(-34359738368);
-    printf(" = %ld\n", i64);
+    int64_t i64 = testClient.testI64(-34359738368LL);
+    printf(" = %lld\n", i64);
     
     /**
      * STRUCT TEST
@@ -109,7 +110,7 @@
     out.i32_thing = -3;
     out.i64_thing = -5;
     Xtruct in = testClient.testStruct(out);
-    printf(" = {\"%s\", %d, %d, %ld}\n",
+    printf(" = {\"%s\", %d, %d, %lld}\n",
            in.string_thing.c_str(),
            (int)in.byte_thing,
            in.i32_thing,
@@ -125,7 +126,7 @@
     out2.i32_thing = 5;
     Xtruct2 in2 = testClient.testNest(out2);
     in = in2.struct_thing;
-    printf(" = {%d, {\"%s\", %d, %d, %ld}, %d}\n",
+    printf(" = {%d, {\"%s\", %d, %d, %lld}, %d}\n",
            in2.byte_thing,
            in.string_thing.c_str(),
            (int)in.byte_thing,
@@ -256,8 +257,8 @@
      * TYPEDEF TEST
      */
     printf("testTypedef(309858235082523)");
-    UserId uid = testClient.testTypedef(309858235082523);
-    printf(" = %ld\n", uid);
+    UserId uid = testClient.testTypedef(309858235082523LL);
+    printf(" = %lld\n", uid);
 
     /**
      * NESTED MAP TEST
@@ -292,7 +293,7 @@
     printf(" = {");
     map<UserId, map<Numberz,Insanity> >::const_iterator i_iter;
     for (i_iter = whoa.begin(); i_iter != whoa.end(); ++i_iter) {
-      printf("%ld => {", i_iter->first);
+      printf("%lld => {", i_iter->first);
       map<Numberz,Insanity>::const_iterator i2_iter;
       for (i2_iter = i_iter->second.begin();
            i2_iter != i_iter->second.end();
@@ -302,7 +303,7 @@
         map<Numberz, UserId>::const_iterator um;
         printf("{");
         for (um = userMap.begin(); um != userMap.end(); ++um) {
-          printf("%d => %ld, ", um->first, um->second);
+          printf("%d => %lld, ", um->first, um->second);
         }
         printf("}, ");
 
@@ -310,7 +311,7 @@
         list<Xtruct>::const_iterator x;
         printf("{");
         for (x = xtructs.begin(); x != xtructs.end(); ++x) {
-          printf("{\"%s\", %d, %d, %ld}, ",
+          printf("{\"%s\", %d, %d, %lld}, ",
                  x->string_thing.c_str(),
                  (int)x->byte_thing,
                  x->i32_thing,
@@ -324,9 +325,29 @@
     }
     printf("}\n");
 
-    uint64_t stop = now();
-    printf("Total time: %lu us\n", stop-start);
+    /* test multi exception */
 
+    try {
+      Xtruct result = testClient.testMultiException("Xception", "test 1");
+      
+    }  catch(Xception& e) {
+      printf("testClient.testMulticException(\"Xception\", \"test 1\") => {%u, \"%s\"}\n", e.errorCode, e.message.c_str());
+    }
+   
+    try {
+      Xtruct result = testClient.testMultiException("Xception2", "test 2");
+      
+    }  catch(Xception2& e) {
+      printf("testClient.testMultiException(\"Xception2\", \"test 2\") => {%u, {\"%s\"}}\n", e.errorCode, e.struct_thing.string_thing.c_str());
+    }
+    
+    Xtruct result = testClient.testMultiException("success", "test 3");
+    
+    printf("testClient.testMultiException(\"success\", \"test 3\") => {{\"%s\"}}\n", result.string_thing.c_str());
+
+    uint64_t stop = now();
+    printf("Total time: %llu us\n", stop-start);
+    
     bufferedSocket->close();
   }
 
diff --git a/test/cpp/src/TestServer.cc b/test/cpp/src/TestServer.cc
index 27a983c..4df37af 100644
--- a/test/cpp/src/TestServer.cc
+++ b/test/cpp/src/TestServer.cc
@@ -17,6 +17,8 @@
 using namespace facebook::thrift::transport;
 using namespace facebook::thrift::server;
 
+using namespace thrift::test;
+
 class TestServer : public ThriftTestServerIf {
  public:
   TestServer(shared_ptr<TProtocol> protocol) :
@@ -42,12 +44,12 @@
   }
 
   int64_t testI64(int64_t thing) {
-    printf("testI64(%ld)\n", thing);
+    printf("testI64(%lld)\n", thing);
     return thing;
   }
 
   Xtruct testStruct(Xtruct thing) {
-    printf("testStruct({\"%s\", %d, %d, %ld})\n",
+    printf("testStruct({\"%s\", %d, %d, %lld})\n",
            thing.string_thing.c_str(),
            (int)thing.byte_thing,
            thing.i32_thing,
@@ -57,7 +59,7 @@
 
   Xtruct2 testNest(Xtruct2 nest) {
     Xtruct thing = nest.struct_thing;
-    printf("testNest({%d, {\"%s\", %d, %d, %ld}, %d})\n",
+    printf("testNest({%d, {\"%s\", %d, %d, %lld}, %d})\n",
            (int)nest.byte_thing,
            thing.string_thing.c_str(),
            (int)thing.byte_thing,
@@ -121,7 +123,7 @@
   }
 
   UserId testTypedef(UserId thing) {
-    printf("testTypedef(%ld)\n", thing);
+    printf("testTypedef(%lld)\n", thing);
     return thing;
   }
 
@@ -181,7 +183,7 @@
     printf(" = {");
     map<UserId, map<Numberz,Insanity> >::const_iterator i_iter;
     for (i_iter = insane.begin(); i_iter != insane.end(); ++i_iter) {
-      printf("%ld => {", i_iter->first);
+      printf("%lld => {", i_iter->first);
       map<Numberz,Insanity>::const_iterator i2_iter;
       for (i2_iter = i_iter->second.begin();
            i2_iter != i_iter->second.end();
@@ -191,7 +193,7 @@
         map<Numberz, UserId>::const_iterator um;
         printf("{");
         for (um = userMap.begin(); um != userMap.end(); ++um) {
-          printf("%d => %ld, ", um->first, um->second);
+          printf("%d => %lld, ", um->first, um->second);
         }
         printf("}, ");
 
@@ -199,7 +201,7 @@
         list<Xtruct>::const_iterator x;
         printf("{");
         for (x = xtructs.begin(); x != xtructs.end(); ++x) {
-          printf("{\"%s\", %d, %d, %ld}, ",
+          printf("{\"%s\", %d, %d, %lld}, ",
                  x->string_thing.c_str(),
                  (int)x->byte_thing,
                  x->i32_thing,
@@ -227,6 +229,42 @@
 
     return hello;
   }
+
+  virtual void testException(std::string arg) throw(struct thrift::test::Xception) {
+    printf("testException(%s)\n", arg.c_str());
+    if(arg.compare("Xception") == 0) {
+      Xception e;
+      e.errorCode = 1001;
+      e.message = "This is an Xception";
+      throw e;
+    } else {
+      Xtruct result;
+      result.string_thing = arg;
+      return;
+    }
+  }
+  
+  virtual struct Xtruct testMultiException(std::string arg0, std::string arg1) throw(struct Xception, struct Xception2) {
+
+    printf("testException(%s, %s)\n", arg0.c_str(), arg1.c_str());
+
+    if(arg0.compare("Xception") == 0) {
+      Xception e;
+      e.errorCode = 1001;
+      e.message = "This is an Xception";
+      throw e;
+    
+    } else if(arg0.compare("Xception2") == 0) {
+      Xception2 e;
+      e.errorCode = 2002;
+      e.struct_thing.string_thing = "This is an Xception2";
+      throw e;
+    } else {
+      Xtruct result;
+      result.string_thing = arg1;
+      return  result;
+    }
+  }
 };
 
 int main(int argc, char **argv) {
@@ -241,7 +279,7 @@
   usage <<
     argv[0] << " [--port=<port number>] [--server-type=<server-type>] [--protocol-type=<protocol-type>] [--workers=<worker-count>]" << endl <<
 
-    "\t\tserver-type\t\ttype of server, \"simple-server\" or \"thread-pool\".  Default is " << serverType << endl <<
+    "\t\tserver-type\t\ttype of server, \"simple\" or \"thread-pool\".  Default is " << serverType << endl <<
 
     "\t\tprotocol-type\t\ttype of protocol, \"binary\", \"ascii\", or \"xml\".  Default is " << protocolType << endl <<
 
