diff --git a/include/ndn-cpp/name.hpp b/include/ndn-cpp/name.hpp
index 00f6d21..d2c1afe 100644
--- a/include/ndn-cpp/name.hpp
+++ b/include/ndn-cpp/name.hpp
@@ -72,6 +72,11 @@
     {
     }
     
+    Component(const char *string)
+      : ConstBufferPtr (new Buffer(string, ::strlen(string)))
+    {
+    }
+
     const Buffer& 
     getValue() const { return **this; }
 
@@ -292,6 +297,9 @@
 
   const Block &
   wireEncode() const;
+
+  void
+  wireDecode(const Block &wire);
   
   /**
    * Parse the uri according to the NDN URI Scheme and set the name with the components.
diff --git a/src/name.cpp b/src/name.cpp
index 3d9b395..44e6039 100644
--- a/src/name.cpp
+++ b/src/name.cpp
@@ -49,7 +49,7 @@
   return Component(value);
 }
 
-Name::Component 
+Name::Component
 Name::Component::fromNumberWithMarker(uint64_t number, uint8_t marker)
 {
   ptr_lib::shared_ptr<Buffer> value(new Buffer);
@@ -332,4 +332,39 @@
   return os;
 }
 
+const Block &
+Name::wireEncode() const
+{
+  if (wire_.hasWire())
+    return wire_;
+
+  wire_ = Block(Tlv::Name);
+  for (Name::const_iterator i = begin(); i != end(); i++) {
+    OBufferStream os;
+    Tlv::writeVarNumber(os, Tlv::NameComponent);
+    Tlv::writeVarNumber(os, i->getValue().size());
+    os.write(reinterpret_cast<const char*>(i->getValue().buf()), i->getValue().size());
+
+    wire_.push_back(Block(os.buf()));
+  }
+        
+  wire_.encode();
+  return wire_;
+}
+
+void
+Name::wireDecode(const Block &wire)
+{
+  wire_ = wire;
+  wire_.parse();
+
+  for (Block::element_const_iterator i = wire_.getAll().begin();
+       i != wire_.getAll().end();
+       ++i)
+    {
+      append(i->value(), i->value_size());
+    }
+}
+
+
 }
