diff --git a/compiler/cpp/src/generate/t_php_generator.cc b/compiler/cpp/src/generate/t_php_generator.cc
index f78a7dc..b913185 100644
--- a/compiler/cpp/src/generate/t_php_generator.cc
+++ b/compiler/cpp/src/generate/t_php_generator.cc
@@ -824,20 +824,22 @@
  * @param tfunction The function
  */
 void t_php_generator::generate_php_function_helpers(t_function* tfunction) {
-  t_struct result(program_, service_name_ + "_" + tfunction->get_name() + "_result");
-  t_field success(tfunction->get_returntype(), "success", 0);
-  if (!tfunction->get_returntype()->is_void()) {
-    result.append(&success);
-  }
+  if (!tfunction->is_async()) {
+    t_struct result(program_, service_name_ + "_" + tfunction->get_name() + "_result");
+    t_field success(tfunction->get_returntype(), "success", 0);
+    if (!tfunction->get_returntype()->is_void()) {
+      result.append(&success);
+    }
 
-  t_struct* xs = tfunction->get_xceptions();
-  const vector<t_field*>& fields = xs->get_members();
-  vector<t_field*>::const_iterator f_iter;
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    result.append(*f_iter);
-  }
+    t_struct* xs = tfunction->get_xceptions();
+    const vector<t_field*>& fields = xs->get_members();
+    vector<t_field*>::const_iterator f_iter;
+    for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
+      result.append(*f_iter);
+    }
 
-  generate_php_struct_definition(f_service_, &result, false);
+    generate_php_struct_definition(f_service_, &result, false);
+  }
 }
 
 /**
diff --git a/lib/cpp/src/transport/TFileTransport.cpp b/lib/cpp/src/transport/TFileTransport.cpp
index 191ec25..8b55715 100644
--- a/lib/cpp/src/transport/TFileTransport.cpp
+++ b/lib/cpp/src/transport/TFileTransport.cpp
@@ -448,7 +448,7 @@
 uint32_t TFileTransport::read(uint8_t* buf, uint32_t len) {
   // check if there an event is ready to be read
   if (!currentEvent_) {
-    readEvent();
+    currentEvent_ = readEvent();
   }
   
   // did not manage to read an event from the file. This could have happened
@@ -467,7 +467,7 @@
              remaining);
     }
     delete(currentEvent_);
-    currentEvent_ = 0;
+    currentEvent_ = NULL;
     return remaining;
   }
   
@@ -477,7 +477,7 @@
   return len;
 }
 
-bool TFileTransport::readEvent() {
+eventInfo* TFileTransport::readEvent() {
   int readTries = 0;
 
   if (!readBuff_) {
@@ -499,7 +499,6 @@
       // read error
       if (readState_.bufferLen_ == -1) {
         readState_.resetAllValues();
-        currentEvent_ = NULL;
         GlobalOutput("TFileTransport: error while reading from file");
         throw TTransportException("TFileTransport: error while reading from file");
       } else if (readState_.bufferLen_ == 0) {  // EOF
@@ -510,14 +509,12 @@
         } else if (readTimeout_ == NO_TAIL_READ_TIMEOUT) {
           // reset state
           readState_.resetState(0);
-          currentEvent_ = NULL;
-          return false;
+          return NULL;
         } else if (readTimeout_ > 0) {
           // timeout already expired once
           if (readTries > 0) {
             readState_.resetState(0);
-            currentEvent_ = NULL;
-            return false;
+            return NULL;
           } else {
             usleep(readTimeout_ * 1000);
             readTries++;
@@ -587,14 +584,14 @@
         // check if the event has been read in full
         if (readState_.event_->eventBuffPos_ == readState_.event_->eventSize_) {
           // set the completed event to the current event
-          currentEvent_ = readState_.event_;
-          currentEvent_->eventBuffPos_ = 0;
+          eventInfo* completeEvent = readState_.event_;
+          completeEvent->eventBuffPos_ = 0;
           
-          readState_.event_ = 0;
+          readState_.event_ = NULL;
           readState_.resetState(readState_.bufferPtr_);
           
           // exit criteria
-          return true;
+          return completeEvent;
         }
       }
     }
diff --git a/lib/cpp/src/transport/TFileTransport.h b/lib/cpp/src/transport/TFileTransport.h
index abd8928..f249ff9 100644
--- a/lib/cpp/src/transport/TFileTransport.h
+++ b/lib/cpp/src/transport/TFileTransport.h
@@ -272,7 +272,7 @@
   void writerThread();
 
   // helper functions for reading from a file
-  bool readEvent();
+  eventInfo* readEvent();
 
   // event corruption-related functions
   bool isEventCorrupted();
