diff --git a/ndn-cpp/c/encoding/BinaryXMLElementReader.c b/ndn-cpp/c/encoding/BinaryXMLElementReader.c
index 9561026..169db20 100644
--- a/ndn-cpp/c/encoding/BinaryXMLElementReader.c
+++ b/ndn-cpp/c/encoding/BinaryXMLElementReader.c
@@ -21,9 +21,20 @@
 #if 0 // TODO: implement saving data parts.
       this.dataParts.push(data.subarray(0, this.structureDecoder.offset));
       var element = DataUtils.concatArrays(this.dataParts);
-      this.dataParts = [];
 #endif
-      (*self->elementListener->onReceivedElement)(self->elementListener, data, self->structureDecoder.offset);
+      if (self->usePartialData) {
+        // We have partial data from a previous call, so append this data and point to partialData.
+        if (error = ndn_DynamicUCharArray_set(&self->partialData, data, self->structureDecoder.offset, self->partialDataLength))
+          return error;
+        self->partialDataLength += dataLength;
+                
+        (*self->elementListener->onReceivedElement)(self->elementListener, self->partialData.array, self->partialDataLength);
+        // Assume we don't need to use partialData anymore until needed.
+        self->usePartialData = 0;
+      }
+      else
+        // We are not using partialData, so just point to the input data buffer.
+        (*self->elementListener->onReceivedElement)(self->elementListener, data, self->structureDecoder.offset);
         
       // Need to read a new object.
       data += self->structureDecoder.offset;
@@ -36,12 +47,16 @@
       // else loop back to decode.
     }
     else {
-#if 0 // TODO: implement saving data parts.
-      // Save for a later call to concatArrays so that we only copy data once.
-      this.dataParts.push(data);
-#else
-      return -1; // TODO: implement saving data parts.
-#endif
+      // Save remaining data for a later call.
+      if (!self->usePartialData) {
+        self->usePartialData = 1;
+        self->partialDataLength = 0;
+      }
+      
+      if (error = ndn_DynamicUCharArray_set(&self->partialData, data, dataLength, self->partialDataLength))
+        return error;
+      self->partialDataLength += dataLength;
+      
       return 0;
     }
   }      
diff --git a/ndn-cpp/c/encoding/BinaryXMLElementReader.h b/ndn-cpp/c/encoding/BinaryXMLElementReader.h
index 09aeb03..9a80deb 100644
--- a/ndn-cpp/c/encoding/BinaryXMLElementReader.h
+++ b/ndn-cpp/c/encoding/BinaryXMLElementReader.h
@@ -8,6 +8,7 @@
 
 #include "../errors.h"
 #include "BinaryXMLStructureDecoder.h"
+#include "../util/DynamicUCharArray.h"
 
 #ifdef	__cplusplus
 extern "C" {
@@ -41,18 +42,27 @@
 struct ndn_BinaryXMLElementReader {
   struct ndn_ElementListener *elementListener;
   struct ndn_BinaryXMLStructureDecoder structureDecoder;
+  int usePartialData;
+  struct ndn_DynamicUCharArray partialData;
+  unsigned int partialDataLength;
 };
 
 /**
- * Initialize an ndn_BinaryXMLElementReader struct with the elementListener.
+ * Initialize an ndn_BinaryXMLElementReader struct with the elementListener and a buffer for saving partial data.
  * @param self pointer to the ndn_BinaryXMLElementReader struct
  * @param elementListener pointer to the ndn_ElementListener used by ndn_BinaryXMLElementReader_onReceivedData.
+ * @param buffer the allocated buffer.  If reallocFunction is null, this should be large enough to save a full element, perhaps 8000 bytes.
+ * @param bufferLength the length of the buffer
+ * @param reallocFunction see ndn_DynamicUCharArray_ensureLength.  This may be 0.
  */
 static inline void ndn_BinaryXMLElementReader_init
-  (struct ndn_BinaryXMLElementReader *self, struct ndn_ElementListener *elementListener)
+  (struct ndn_BinaryXMLElementReader *self, struct ndn_ElementListener *elementListener,
+   unsigned char *buffer, unsigned int bufferLength, unsigned char * (*reallocFunction)(unsigned char *, unsigned int))
 {
   self->elementListener = elementListener;
   ndn_BinaryXMLStructureDecoder_init(&self->structureDecoder);
+  self->usePartialData = 0;
+  ndn_DynamicUCharArray_init(&self->partialData, buffer, bufferLength, reallocFunction);
 }
 
 /**
diff --git a/ndn-cpp/transport/TcpTransport.cpp b/ndn-cpp/transport/TcpTransport.cpp
index fe81b42..1f575b9 100644
--- a/ndn-cpp/transport/TcpTransport.cpp
+++ b/ndn-cpp/transport/TcpTransport.cpp
@@ -5,6 +5,7 @@
 
 #include <stdexcept>
 #include "../NDN.hpp"
+#include "../c/util/ndn_realloc.h"
 #include "TcpTransport.hpp"
 
 using namespace std;
@@ -18,8 +19,10 @@
     throw std::runtime_error(ndn_getErrorString(error)); 
 
   // TODO: This belongs in the socket listener.
+  const unsigned int initialLength = 1000;
   // Automatically cast ndn_ to (struct ndn_ElementListener *)
-  ndn_BinaryXMLElementReader_init(&elementReader_, &ndn);
+  ndn_BinaryXMLElementReader_init
+    (&elementReader_, &ndn, (unsigned char *)malloc(initialLength), initialLength, ndn_realloc);
   
   // TODO: Properly indicate connected status.
   ndn_ = &ndn;
