diff --git a/ndn-cpp/Name.hpp b/ndn-cpp/Name.hpp
index 3859014..67ed2b6 100644
--- a/ndn-cpp/Name.hpp
+++ b/ndn-cpp/Name.hpp
@@ -63,33 +63,7 @@
    * Parse the uri according to the NDN URI Scheme and create the name with the components.
    * @param uri the URI string.
    */
-  Name(const char *uri);
-  
-  void encode(std::vector<unsigned char> &output, WireFormat &wireFormat) const
-  {
-    wireFormat.encodeName(*this, output);
-  }
-  void encode(std::vector<unsigned char> &output) const 
-  {
-    encode(output, BinaryXMLWireFormat::instance());
-  }
-  void decode(const unsigned char *input, unsigned int inputLength, WireFormat &wireFormat) 
-  {
-    wireFormat.decodeName(*this, input, inputLength);
-  }
-  void decode(const unsigned char *input, unsigned int inputLength) 
-  {
-    decode(input, inputLength, BinaryXMLWireFormat::instance());
-  }
-  void decode(const std::vector<unsigned char> &input, WireFormat &wireFormat) 
-  {
-    decode(&input[0], input.size(), wireFormat);
-  }
-  void decode(const std::vector<unsigned char> &input) 
-  {
-    decode(&input[0], input.size());
-  }
-  
+  Name(const char *uri);  
   /**
    * Set the nameStruct to point to the components in this name, without copying any memory.
    * WARNING: The resulting pointers in nameStruct are invalid after a further use of this object which could reallocate memory.
diff --git a/ndn-cpp/encoding/BinaryXMLWireFormat.cpp b/ndn-cpp/encoding/BinaryXMLWireFormat.cpp
index 6899924..0c1f4d2 100644
--- a/ndn-cpp/encoding/BinaryXMLWireFormat.cpp
+++ b/ndn-cpp/encoding/BinaryXMLWireFormat.cpp
@@ -4,7 +4,6 @@
  */
 
 #include <stdexcept>
-#include "../c/encoding/BinaryXMLName.h"
 #include "../c/encoding/BinaryXMLInterest.h"
 #include "../c/encoding/BinaryXMLContentObject.h"
 #include "../Interest.hpp"
@@ -19,33 +18,6 @@
 
 BinaryXMLWireFormat BinaryXMLWireFormat::instance_;
 
-void BinaryXMLWireFormat::encodeName(const Name &name, vector<unsigned char> &output) 
-{
-  struct ndn_Name nameStruct;
-  struct ndn_NameComponent components[100];
-  ndn_Name_init(&nameStruct, components, sizeof(components) / sizeof(components[0]));
-  name.get(nameStruct);
-
-  BinaryXMLEncoder encoder;
-  ndn_encodeBinaryXMLName(&nameStruct, &encoder);
-     
-  encoder.appendTo(output);
-}
-
-void BinaryXMLWireFormat::decodeName(Name &name, const unsigned char *input, unsigned int inputLength)
-{
-  struct ndn_NameComponent components[100];
-  struct ndn_Name nameStruct;
-  ndn_Name_init(&nameStruct, components, sizeof(components) / sizeof(components[0]));
-    
-  BinaryXMLDecoder decoder(input, inputLength);  
-  ndn_Error error;
-  if (error = ndn_decodeBinaryXMLName(&nameStruct, &decoder))
-    throw std::runtime_error(ndn_getErrorString(error));
-
-  name.set(nameStruct);
-}
-
 void BinaryXMLWireFormat::encodeInterest(const Interest &interest, vector<unsigned char> &output) 
 {
   struct ndn_NameComponent nameComponents[100];
diff --git a/ndn-cpp/encoding/BinaryXMLWireFormat.hpp b/ndn-cpp/encoding/BinaryXMLWireFormat.hpp
index a1a5e6a..d35660f 100644
--- a/ndn-cpp/encoding/BinaryXMLWireFormat.hpp
+++ b/ndn-cpp/encoding/BinaryXMLWireFormat.hpp
@@ -12,9 +12,6 @@
 
 class BinaryXMLWireFormat : public WireFormat {
 public:
-  virtual void encodeName(const Name &name, std::vector<unsigned char> &output);
-  virtual void decodeName(Name &name, const unsigned char *input, unsigned int inputLength);
-
   virtual void encodeInterest(const Interest &interest, std::vector<unsigned char> &output);
   virtual void decodeInterest(Interest &interest, const unsigned char *input, unsigned int inputLength);
 
diff --git a/ndn-cpp/encoding/WireFormat.cpp b/ndn-cpp/encoding/WireFormat.cpp
index 7e784a3..5d46241 100644
--- a/ndn-cpp/encoding/WireFormat.cpp
+++ b/ndn-cpp/encoding/WireFormat.cpp
@@ -9,16 +9,6 @@
 using namespace std;
 
 namespace ndn {
-  
-void WireFormat::encodeName(const Name &name, vector<unsigned char> &output) 
-{
-  throw logic_error("unimplemented");
-}
-void WireFormat::decodeName(Name &name, const unsigned char *input, unsigned int inputLength) 
-{
-  throw logic_error("unimplemented");
-}
-
 void WireFormat::encodeInterest(const Interest &interest, vector<unsigned char> &output) 
 {
   throw logic_error("unimplemented");
diff --git a/ndn-cpp/encoding/WireFormat.hpp b/ndn-cpp/encoding/WireFormat.hpp
index 8458f94..df532e9 100644
--- a/ndn-cpp/encoding/WireFormat.hpp
+++ b/ndn-cpp/encoding/WireFormat.hpp
@@ -10,15 +10,11 @@
 
 namespace ndn {
   
-class Name;
 class Interest;
 class ContentObject;
   
 class WireFormat {
 public:
-  virtual void encodeName(const Name &name, std::vector<unsigned char> &output);
-  virtual void decodeName(Name &name, const unsigned char *input, unsigned int inputLength);
-
   virtual void encodeInterest(const Interest &interest, std::vector<unsigned char> &output);
   virtual void decodeInterest(Interest &interest, const unsigned char *input, unsigned int inputLength);
 
