diff --git a/ndn-cpp/data.hpp b/ndn-cpp/data.hpp
index e8434b4..4b82fef 100644
--- a/ndn-cpp/data.hpp
+++ b/ndn-cpp/data.hpp
@@ -98,10 +98,10 @@
   setFreshnessSeconds(int freshnessSeconds) { freshnessSeconds_ = freshnessSeconds; }
   
   void 
-  setFinalBlockID(const std::vector<unsigned char>& finalBlockID) { finalBlockID_ = Name::Component(finalBlockID); }
+  setFinalBlockID(const std::vector<uint8_t>& finalBlockID) { finalBlockID_ = Name::Component(finalBlockID); }
   
   void 
-  setFinalBlockID(const unsigned char* finalBlockID, unsigned int finalBlockIdLength) 
+  setFinalBlockID(const uint8_t* finalBlockID, unsigned int finalBlockIdLength) 
   { 
     finalBlockID_ = Name::Component(finalBlockID, finalBlockIdLength); 
   }
@@ -142,7 +142,7 @@
    * @param wireFormat A WireFormat object used to decode the input. If omitted, use WireFormat getDefaultWireFormat().
    */
   void 
-  wireDecode(const unsigned char* input, unsigned int inputLength, WireFormat& wireFormat = *WireFormat::getDefaultWireFormat());
+  wireDecode(const uint8_t* input, unsigned int inputLength, WireFormat& wireFormat = *WireFormat::getDefaultWireFormat());
   
   /**
    * Decode the input using a particular wire format and update this Data. Also, set the wireEncoding field to the input.
@@ -150,7 +150,7 @@
    * @param wireFormat A WireFormat object used to decode the input. If omitted, use WireFormat getDefaultWireFormat().
    */
   void 
-  wireDecode(const std::vector<unsigned char>& input, WireFormat& wireFormat = *WireFormat::getDefaultWireFormat()) 
+  wireDecode(const std::vector<uint8_t>& input, WireFormat& wireFormat = *WireFormat::getDefaultWireFormat()) 
   {
     wireDecode(&input[0], input.size(), wireFormat);
   }
@@ -250,14 +250,14 @@
    * @param content A vector whose contents are copied.
    */
   void 
-  setContent(const std::vector<unsigned char>& content) 
+  setContent(const std::vector<uint8_t>& content) 
   { 
     content_ = content; 
     onChanged();
   }
   
   void 
-  setContent(const unsigned char* content, unsigned int contentLength) 
+  setContent(const uint8_t* content, unsigned int contentLength) 
   { 
     content_ = Blob(content, contentLength); 
     onChanged();
@@ -269,14 +269,14 @@
    * @param content A pointer to a vector with the byte array.  This takes another reference and does not copy the bytes.
    */
   void 
-  setContent(const ptr_lib::shared_ptr<std::vector<unsigned char> > &content) 
+  setContent(const ptr_lib::shared_ptr<std::vector<uint8_t> > &content) 
   { 
     content_ = content;
     onChanged();
   }
   
   void 
-  setContent(const ptr_lib::shared_ptr<const std::vector<unsigned char> > &content) 
+  setContent(const ptr_lib::shared_ptr<const std::vector<uint8_t> > &content) 
   { 
     content_ = content;
     onChanged();
