diff --git a/ndn-cpp/c/data.h b/ndn-cpp/c/data.h
index 0990d86..61dd750 100644
--- a/ndn-cpp/c/data.h
+++ b/ndn-cpp/c/data.h
@@ -62,8 +62,7 @@
   double timestampMilliseconds;    /**< milliseconds since 1/1/1970. -1 for none */
   ndn_ContentType type;            /**< default is ndn_ContentType_DATA. -1 for none */
   int freshnessSeconds;            /**< -1 for none */
-  unsigned char *finalBlockID;     /**< pointer to pre-allocated buffer.  0 for none */
-  unsigned int finalBlockIDLength; /**< length of finalBlockID.  0 for none */
+  struct ndn_NameComponent finalBlockID;  /**< has a pointer to a pre-allocated buffer.  0 for none */
 };
 
 /**
@@ -74,8 +73,7 @@
   (struct ndn_MetaInfo *self) {
   self->type = ndn_ContentType_DATA;
   self->freshnessSeconds = -1;
-  self->finalBlockID = 0;
-  self->finalBlockIDLength = 0;
+  ndn_NameComponent_initialize(&self->finalBlockID, 0, 0);
 }
 
 struct ndn_Data {
diff --git a/ndn-cpp/c/encoding/binary-xml-data.c b/ndn-cpp/c/encoding/binary-xml-data.c
index b07b7a4..2925ee6 100644
--- a/ndn-cpp/c/encoding/binary-xml-data.c
+++ b/ndn-cpp/c/encoding/binary-xml-data.c
@@ -100,7 +100,7 @@
     return error;
   
   if ((error = ndn_BinaryXmlEncoder_writeOptionalBlobDTagElement
-      (encoder, ndn_BinaryXml_DTag_FinalBlockID, metaInfo->finalBlockID, metaInfo->finalBlockIDLength)))
+      (encoder, ndn_BinaryXml_DTag_FinalBlockID, metaInfo->finalBlockID.value, metaInfo->finalBlockID.valueLength)))
     return error;
  
   // This will skip encoding if there is no key locator.
@@ -159,7 +159,7 @@
     return error;
 
   if ((error = ndn_BinaryXmlDecoder_readOptionalBinaryDTagElement
-      (decoder, ndn_BinaryXml_DTag_FinalBlockID, 0, &metaInfo->finalBlockID, &metaInfo->finalBlockIDLength)))
+      (decoder, ndn_BinaryXml_DTag_FinalBlockID, 0, &metaInfo->finalBlockID.value, &metaInfo->finalBlockID.valueLength)))
     return error;
 
   if ((error = ndn_decodeOptionalBinaryXmlKeyLocator(&signature->keyLocator, decoder)))
diff --git a/ndn-cpp/data.cpp b/ndn-cpp/data.cpp
index 0c5e7f3..387d291 100644
--- a/ndn-cpp/data.cpp
+++ b/ndn-cpp/data.cpp
@@ -48,12 +48,7 @@
   metaInfoStruct.timestampMilliseconds = timestampMilliseconds_;
   metaInfoStruct.type = type_;
   metaInfoStruct.freshnessSeconds = freshnessSeconds_;
-  
-  metaInfoStruct.finalBlockIDLength = finalBlockID_.getValue().size();
-  if (metaInfoStruct.finalBlockIDLength > 0)
-    metaInfoStruct.finalBlockID = (unsigned char *)finalBlockID_.getValue().buf();
-  else
-    metaInfoStruct.finalBlockID = 0;
+  finalBlockID_.get(metaInfoStruct.finalBlockID);
 }
 
 void MetaInfo::set(const struct ndn_MetaInfo& metaInfoStruct)
@@ -61,7 +56,7 @@
   timestampMilliseconds_ = metaInfoStruct.timestampMilliseconds;
   type_ = metaInfoStruct.type;
   freshnessSeconds_ = metaInfoStruct.freshnessSeconds;
-  finalBlockID_.setValue(Blob(metaInfoStruct.finalBlockID, metaInfoStruct.finalBlockIDLength));
+  finalBlockID_.setValue(Blob(metaInfoStruct.finalBlockID.value, metaInfoStruct.finalBlockID.valueLength));
 }
 
 void Data::get(struct ndn_Data& dataStruct) const 
