diff --git a/ndn-cpp/encoding/BinaryXMLDecoder.hpp b/ndn-cpp/encoding/BinaryXMLDecoder.hpp
index a02e753..f537935 100644
--- a/ndn-cpp/encoding/BinaryXMLDecoder.hpp
+++ b/ndn-cpp/encoding/BinaryXMLDecoder.hpp
@@ -14,16 +14,16 @@
 
   
 /**
- * A BinaryXMLDecoder extends a C ndn_BinaryXMLDecoder struct and wraps related functions.
+ * A BinaryXmlDecoder extends a C ndn_BinaryXmlDecoder struct and wraps related functions.
  */
-class BinaryXMLDecoder : public ndn_BinaryXMLDecoder {
+class BinaryXmlDecoder : public ndn_BinaryXmlDecoder {
 public:
   /**
-   * Initialize the base ndn_BinaryXMLDecoder struct with the input.
+   * Initialize the base ndn_BinaryXmlDecoder struct with the input.
    */
-  BinaryXMLDecoder(const unsigned char *input, unsigned int inputLength) 
+  BinaryXmlDecoder(const unsigned char *input, unsigned int inputLength) 
   {
-    ndn_BinaryXMLDecoder_init(this, (unsigned char *)input, inputLength);
+    ndn_BinaryXmlDecoder_init(this, (unsigned char *)input, inputLength);
   }
   
   /**
@@ -36,7 +36,7 @@
   {
     int gotExpectedTag;
     ndn_Error error;
-    if (error = ndn_BinaryXMLDecoder_peekDTag(this, expectedTag, &gotExpectedTag))
+    if (error = ndn_BinaryXmlDecoder_peekDTag(this, expectedTag, &gotExpectedTag))
       throw std::runtime_error(ndn_getErrorString(error));
     
     return gotExpectedTag;
diff --git a/ndn-cpp/encoding/BinaryXMLEncoder.hpp b/ndn-cpp/encoding/BinaryXMLEncoder.hpp
index f31de46..37a9ecc 100644
--- a/ndn-cpp/encoding/BinaryXMLEncoder.hpp
+++ b/ndn-cpp/encoding/BinaryXMLEncoder.hpp
@@ -14,17 +14,17 @@
 namespace ndn {
   
 /**
- * A BinaryXMLEncoder extends a C ndn_BinaryXMLEncoder struct and wraps related functions.
+ * A BinaryXmlEncoder extends a C ndn_BinaryXmlEncoder struct and wraps related functions.
  */
-class BinaryXMLEncoder : public ndn_BinaryXMLEncoder {
+class BinaryXmlEncoder : public ndn_BinaryXmlEncoder {
 public:
   /**
-   * Initialize the base ndn_BinaryXMLEncoder struct with an initial array of 16 bytes.  Use simpleRealloc.
+   * Initialize the base ndn_BinaryXmlEncoder struct with an initial array of 16 bytes.  Use simpleRealloc.
    */
-  BinaryXMLEncoder() 
+  BinaryXmlEncoder() 
   {
     const unsigned int initialLength = 16;
-    ndn_BinaryXMLEncoder_init(this, (unsigned char *)malloc(initialLength), initialLength, ndn_realloc);
+    ndn_BinaryXmlEncoder_init(this, (unsigned char *)malloc(initialLength), initialLength, ndn_realloc);
   }
   
   /**
diff --git a/ndn-cpp/encoding/BinaryXMLStructureDecoder.hpp b/ndn-cpp/encoding/BinaryXMLStructureDecoder.hpp
index 82c28b3..331f3d3 100644
--- a/ndn-cpp/encoding/BinaryXMLStructureDecoder.hpp
+++ b/ndn-cpp/encoding/BinaryXMLStructureDecoder.hpp
@@ -12,13 +12,13 @@
 namespace ndn {
   
 /**
- * A BinaryXMLStructureDecoder extends a C ndn_BinaryXMLStructureDecoder struct and wraps related functions.
+ * A BinaryXmlStructureDecoder extends a C ndn_BinaryXmlStructureDecoder struct and wraps related functions.
  */
-class BinaryXMLStructureDecoder : private ndn_BinaryXMLStructureDecoder {
+class BinaryXmlStructureDecoder : private ndn_BinaryXmlStructureDecoder {
 public:
-  BinaryXMLStructureDecoder() 
+  BinaryXmlStructureDecoder() 
   {
-    ndn_BinaryXMLStructureDecoder_init(this);
+    ndn_BinaryXmlStructureDecoder_init(this);
   }
   
   /**
@@ -32,7 +32,7 @@
   bool findElementEnd(unsigned char *input, unsigned int inputLength) 
   {
     ndn_Error error;
-    if (error = ndn_BinaryXMLStructureDecoder_findElementEnd(this, input, inputLength))
+    if (error = ndn_BinaryXmlStructureDecoder_findElementEnd(this, input, inputLength))
       throw std::runtime_error(ndn_getErrorString(error));
     return gotElementEnd();
   }
diff --git a/ndn-cpp/encoding/BinaryXMLWireFormat.cpp b/ndn-cpp/encoding/BinaryXMLWireFormat.cpp
index 2faa4c3..e0b2b1c 100644
--- a/ndn-cpp/encoding/BinaryXMLWireFormat.cpp
+++ b/ndn-cpp/encoding/BinaryXMLWireFormat.cpp
@@ -16,9 +16,9 @@
 
 namespace ndn {
 
-BinaryXMLWireFormat BinaryXMLWireFormat::instance_;
+BinaryXmlWireFormat BinaryXmlWireFormat::instance_;
 
-ptr_lib::shared_ptr<vector<unsigned char> > BinaryXMLWireFormat::encodeInterest(const Interest &interest) 
+ptr_lib::shared_ptr<vector<unsigned char> > BinaryXmlWireFormat::encodeInterest(const Interest &interest) 
 {
   struct ndn_NameComponent nameComponents[100];
   struct ndn_ExcludeEntry excludeEntries[100];
@@ -28,13 +28,13 @@
      excludeEntries, sizeof(excludeEntries) / sizeof(excludeEntries[0]));
   interest.get(interestStruct);
 
-  BinaryXMLEncoder encoder;
-  ndn_encodeBinaryXMLInterest(&interestStruct, &encoder);
+  BinaryXmlEncoder encoder;
+  ndn_encodeBinaryXmlInterest(&interestStruct, &encoder);
      
   return encoder.getOutput();
 }
 
-void BinaryXMLWireFormat::decodeInterest(Interest &interest, const unsigned char *input, unsigned int inputLength)
+void BinaryXmlWireFormat::decodeInterest(Interest &interest, const unsigned char *input, unsigned int inputLength)
 {
   struct ndn_NameComponent nameComponents[100];
   struct ndn_ExcludeEntry excludeEntries[100];
@@ -43,15 +43,15 @@
     (&interestStruct, nameComponents, sizeof(nameComponents) / sizeof(nameComponents[0]), 
      excludeEntries, sizeof(excludeEntries) / sizeof(excludeEntries[0]));
     
-  BinaryXMLDecoder decoder(input, inputLength);  
+  BinaryXmlDecoder decoder(input, inputLength);  
   ndn_Error error;
-  if (error = ndn_decodeBinaryXMLInterest(&interestStruct, &decoder))
+  if (error = ndn_decodeBinaryXmlInterest(&interestStruct, &decoder))
     throw std::runtime_error(ndn_getErrorString(error));
 
   interest.set(interestStruct);
 }
 
-ptr_lib::shared_ptr<vector<unsigned char> > BinaryXMLWireFormat::encodeContentObject(const ContentObject &contentObject) 
+ptr_lib::shared_ptr<vector<unsigned char> > BinaryXmlWireFormat::encodeContentObject(const ContentObject &contentObject) 
 {
   struct ndn_NameComponent nameComponents[100];
   struct ndn_ContentObject contentObjectStruct;
@@ -59,22 +59,22 @@
     (&contentObjectStruct, nameComponents, sizeof(nameComponents) / sizeof(nameComponents[0]));
   contentObject.get(contentObjectStruct);
 
-  BinaryXMLEncoder encoder;
-  ndn_encodeBinaryXMLContentObject(&contentObjectStruct, &encoder);
+  BinaryXmlEncoder encoder;
+  ndn_encodeBinaryXmlContentObject(&contentObjectStruct, &encoder);
      
   return encoder.getOutput();
 }
 
-void BinaryXMLWireFormat::decodeContentObject(ContentObject &contentObject, const unsigned char *input, unsigned int inputLength)
+void BinaryXmlWireFormat::decodeContentObject(ContentObject &contentObject, const unsigned char *input, unsigned int inputLength)
 {
   struct ndn_NameComponent nameComponents[100];
   struct ndn_ContentObject contentObjectStruct;
   ndn_ContentObject_init
     (&contentObjectStruct, nameComponents, sizeof(nameComponents) / sizeof(nameComponents[0]));
     
-  BinaryXMLDecoder decoder(input, inputLength);  
+  BinaryXmlDecoder decoder(input, inputLength);  
   ndn_Error error;
-  if (error = ndn_decodeBinaryXMLContentObject(&contentObjectStruct, &decoder))
+  if (error = ndn_decodeBinaryXmlContentObject(&contentObjectStruct, &decoder))
     throw std::runtime_error(ndn_getErrorString(error));
 
   contentObject.set(contentObjectStruct);
diff --git a/ndn-cpp/encoding/BinaryXMLWireFormat.hpp b/ndn-cpp/encoding/BinaryXMLWireFormat.hpp
index 20ebacd..a0fc162 100644
--- a/ndn-cpp/encoding/BinaryXMLWireFormat.hpp
+++ b/ndn-cpp/encoding/BinaryXMLWireFormat.hpp
@@ -10,7 +10,7 @@
 
 namespace ndn {
 
-class BinaryXMLWireFormat : public WireFormat {
+class BinaryXmlWireFormat : public WireFormat {
 public:
   virtual ptr_lib::shared_ptr<std::vector<unsigned char> > encodeInterest(const Interest &interest);
   virtual void decodeInterest(Interest &interest, const unsigned char *input, unsigned int inputLength);
@@ -18,10 +18,10 @@
   virtual ptr_lib::shared_ptr<std::vector<unsigned char> > encodeContentObject(const ContentObject &contentObject);
   virtual void decodeContentObject(ContentObject &contentObject, const unsigned char *input, unsigned int inputLength);
   
-  static BinaryXMLWireFormat &instance() { return instance_; }
+  static BinaryXmlWireFormat &instance() { return instance_; }
   
 private:
-  static BinaryXMLWireFormat instance_;
+  static BinaryXmlWireFormat instance_;
 };
   
 }
