all: Replacing deprecated NameComponents class with Name

NameComponents is kept for backwards compatibility as typedef to Name

refs #29
diff --git a/apps/ndn-consumer-zipf-mandelbrot.cc b/apps/ndn-consumer-zipf-mandelbrot.cc
index 000cc85..faebd6c 100644
--- a/apps/ndn-consumer-zipf-mandelbrot.cc
+++ b/apps/ndn-consumer-zipf-mandelbrot.cc
@@ -174,7 +174,7 @@
   // std::cout << Simulator::Now ().ToDouble (Time::S) << "s -> " << seq << "\n";
 
   //
-  Ptr<NameComponents> nameWithSequence = Create<NameComponents> (m_interestName);
+  Ptr<Name> nameWithSequence = Create<Name> (m_interestName);
   (*nameWithSequence) (seq);
   //
 
diff --git a/apps/ndn-consumer.cc b/apps/ndn-consumer.cc
index 1b85cfb..24b4bde 100644
--- a/apps/ndn-consumer.cc
+++ b/apps/ndn-consumer.cc
@@ -64,8 +64,8 @@
 
     .AddAttribute ("Prefix","Name of the Interest",
                    StringValue ("/"),
-                   MakeNameComponentsAccessor (&Consumer::m_interestName),
-                   MakeNameComponentsChecker ())
+                   MakeNameAccessor (&Consumer::m_interestName),
+                   MakeNameChecker ())
     .AddAttribute ("LifeTime", "LifeTime for interest packet",
                    StringValue ("2s"),
                    MakeTimeAccessor (&Consumer::m_interestLifeTime),
@@ -198,7 +198,7 @@
     }
 
   //
-  Ptr<NameComponents> nameWithSequence = Create<NameComponents> (m_interestName);
+  Ptr<Name> nameWithSequence = Create<Name> (m_interestName);
   (*nameWithSequence) (seq);
   //
 
diff --git a/apps/ndn-consumer.h b/apps/ndn-consumer.h
index 75705cd..918d946 100644
--- a/apps/ndn-consumer.h
+++ b/apps/ndn-consumer.h
@@ -24,7 +24,7 @@
 
 #include "ndn-app.h"
 #include "ns3/random-variable.h"
-#include "ns3/ndn-name-components.h"
+#include "ns3/ndn-name.h"
 #include "ns3/nstime.h"
 #include "ns3/data-rate.h"
 #include "ns3/ndn-rtt-estimator.h"
@@ -126,7 +126,7 @@
   Ptr<RttEstimator> m_rtt; ///< @brief RTT estimator
 
   Time               m_offTime;             ///< \brief Time interval between packets
-  NameComponents     m_interestName;        ///< \brief NDN Name of the Interest (use NameComponents)
+  Name     m_interestName;        ///< \brief NDN Name of the Interest (use Name)
   Time               m_interestLifeTime;    ///< \brief LifeTime for interest packet
 
 /// @cond include_hidden
diff --git a/apps/ndn-producer.cc b/apps/ndn-producer.cc
index f0d464a..00f374e 100644
--- a/apps/ndn-producer.cc
+++ b/apps/ndn-producer.cc
@@ -54,8 +54,8 @@
     .AddConstructor<Producer> ()
     .AddAttribute ("Prefix","Prefix, for which producer has the data",
                    StringValue ("/"),
-                   MakeNameComponentsAccessor (&Producer::m_prefix),
-                   MakeNameComponentsChecker ())
+                   MakeNameAccessor (&Producer::m_prefix),
+                   MakeNameChecker ())
     .AddAttribute ("PayloadSize", "Virtual payload size for Content packets",
                    UintegerValue (1024),
                    MakeUintegerAccessor(&Producer::m_virtualPayloadSize),
@@ -118,7 +118,7 @@
     
   static ContentObjectTail tail;
   Ptr<ContentObjectHeader> header = Create<ContentObjectHeader> ();
-  header->SetName (Create<NameComponents> (interest->GetName ()));
+  header->SetName (Create<Name> (interest->GetName ()));
   header->SetFreshness (m_freshness);
 
   NS_LOG_INFO ("node("<< GetNode()->GetId() <<") respodning with ContentObject:\n" << boost::cref(*header));
diff --git a/apps/ndn-producer.h b/apps/ndn-producer.h
index dcc9581..f383643 100644
--- a/apps/ndn-producer.h
+++ b/apps/ndn-producer.h
@@ -25,7 +25,7 @@
 #include "ndn-app.h"
 
 #include "ns3/ptr.h"
-#include "ns3/ndn-name-components.h"
+#include "ns3/ndn-name.h"
 #include "ns3/ndn-content-object.h"
 
 namespace ns3 {
@@ -59,7 +59,7 @@
   StopApplication ();     // Called at time specified by Stop
 
 private:
-  NameComponents m_prefix;
+  Name m_prefix;
   uint32_t m_virtualPayloadSize;
   Time m_freshness;
 };
diff --git a/bindings/modulegen__gcc_ILP32.py b/bindings/modulegen__gcc_ILP32.py
index 323ad58..941d104 100644
--- a/bindings/modulegen__gcc_ILP32.py
+++ b/bindings/modulegen__gcc_ILP32.py
@@ -362,12 +362,12 @@
     module.add_class('Name', parent=root_module['ns3::SimpleRefCount< ns3::ndn::Name, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Name> >'])
     ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameChecker [class]
     module.add_class('NameChecker', parent=root_module['ns3::AttributeChecker'])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponents [class]
-    module.add_class('NameComponents', parent=root_module['ns3::ndn::Name'])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponentsChecker [class]
-    module.add_class('NameComponentsChecker', parent=root_module['ns3::AttributeChecker'])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponentsValue [class]
-    module.add_class('NameComponentsValue', parent=root_module['ns3::AttributeValue'])
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::Name [class]
+    module.add_class('Name', parent=root_module['ns3::ndn::Name'])
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameChecker [class]
+    module.add_class('NameChecker', parent=root_module['ns3::AttributeChecker'])
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameValue [class]
+    module.add_class('NameValue', parent=root_module['ns3::AttributeValue'])
     ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameValue [class]
     module.add_class('NameValue', parent=root_module['ns3::AttributeValue'])
     ## ndn-net-device-face.h (module 'ndnSIM'): ns3::ndn::NetDeviceFace [class]
@@ -606,9 +606,9 @@
     register_Ns3NdnLimits_methods(root_module, root_module['ns3::ndn::Limits'])
     register_Ns3NdnName_methods(root_module, root_module['ns3::ndn::Name'])
     register_Ns3NdnNameChecker_methods(root_module, root_module['ns3::ndn::NameChecker'])
-    register_Ns3NdnNameComponents_methods(root_module, root_module['ns3::ndn::NameComponents'])
-    register_Ns3NdnNameComponentsChecker_methods(root_module, root_module['ns3::ndn::NameComponentsChecker'])
-    register_Ns3NdnNameComponentsValue_methods(root_module, root_module['ns3::ndn::NameComponentsValue'])
+    register_Ns3NdnName_methods(root_module, root_module['ns3::ndn::Name'])
+    register_Ns3NdnNameChecker_methods(root_module, root_module['ns3::ndn::NameChecker'])
+    register_Ns3NdnNameValue_methods(root_module, root_module['ns3::ndn::NameValue'])
     register_Ns3NdnNameValue_methods(root_module, root_module['ns3::ndn::NameValue'])
     register_Ns3NdnNetDeviceFace_methods(root_module, root_module['ns3::ndn::NetDeviceFace'])
     register_Ns3NdnPit_methods(root_module, root_module['ns3::ndn::Pit'])
@@ -4783,14 +4783,14 @@
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::NameComponents const & ns3::ndn::ContentObjectHeader::GetName() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::Name const & ns3::ndn::ContentObjectHeader::GetName() const [member function]
     cls.add_method('GetName', 
-                   'ns3::ndn::NameComponents const &', 
+                   'ns3::ndn::Name const &', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::NameComponents const> ns3::ndn::ContentObjectHeader::GetNamePtr() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Name const> ns3::ndn::ContentObjectHeader::GetNamePtr() const [member function]
     cls.add_method('GetNamePtr', 
-                   'ns3::Ptr< ns3::ndn::NameComponents const >', 
+                   'ns3::Ptr< ns3::ndn::Name const >', 
                    [], 
                    is_const=True)
     ## ndn-content-object.h (module 'ndnSIM'): uint32_t ns3::ndn::ContentObjectHeader::GetSerializedSize() const [member function]
@@ -4822,10 +4822,10 @@
     cls.add_method('SetFreshness', 
                    'void', 
                    [param('ns3::Time const &', 'freshness')])
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObjectHeader::SetName(ns3::Ptr<ns3::ndn::NameComponents> const & name) [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObjectHeader::SetName(ns3::Ptr<ns3::ndn::Name> const & name) [member function]
     cls.add_method('SetName', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::NameComponents > const &', 'name')])
+                   [param('ns3::Ptr< ns3::ndn::Name > const &', 'name')])
     ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObjectHeader::SetTimestamp(ns3::Time const & timestamp) [member function]
     cls.add_method('SetTimestamp', 
                    'void', 
@@ -5043,15 +5043,15 @@
     cls.add_output_stream_operator()
     ## ndn-fib.h (module 'ndnSIM'): ns3::ndn::Fib::Fib() [constructor]
     cls.add_constructor([])
-    ## ndn-fib.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::fib::Entry> ns3::ndn::Fib::Add(ns3::ndn::NameComponents const & prefix, ns3::Ptr<ns3::ndn::Face> face, int32_t metric) [member function]
+    ## ndn-fib.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::fib::Entry> ns3::ndn::Fib::Add(ns3::ndn::Name const & prefix, ns3::Ptr<ns3::ndn::Face> face, int32_t metric) [member function]
     cls.add_method('Add', 
                    'ns3::Ptr< ns3::ndn::fib::Entry >', 
-                   [param('ns3::ndn::NameComponents const &', 'prefix'), param('ns3::Ptr< ns3::ndn::Face >', 'face'), param('int32_t', 'metric')], 
+                   [param('ns3::ndn::Name const &', 'prefix'), param('ns3::Ptr< ns3::ndn::Face >', 'face'), param('int32_t', 'metric')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ndn-fib.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::fib::Entry> ns3::ndn::Fib::Add(ns3::Ptr<ns3::ndn::NameComponents const> const & prefix, ns3::Ptr<ns3::ndn::Face> face, int32_t metric) [member function]
+    ## ndn-fib.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::fib::Entry> ns3::ndn::Fib::Add(ns3::Ptr<ns3::ndn::Name const> const & prefix, ns3::Ptr<ns3::ndn::Face> face, int32_t metric) [member function]
     cls.add_method('Add', 
                    'ns3::Ptr< ns3::ndn::fib::Entry >', 
-                   [param('ns3::Ptr< ns3::ndn::NameComponents const > const &', 'prefix'), param('ns3::Ptr< ns3::ndn::Face >', 'face'), param('int32_t', 'metric')], 
+                   [param('ns3::Ptr< ns3::ndn::Name const > const &', 'prefix'), param('ns3::Ptr< ns3::ndn::Face >', 'face'), param('int32_t', 'metric')], 
                    is_pure_virtual=True, is_virtual=True)
     ## ndn-fib.h (module 'ndnSIM'): ns3::Ptr<const ns3::ndn::fib::Entry> ns3::ndn::Fib::Begin() const [member function]
     cls.add_method('Begin', 
@@ -5113,10 +5113,10 @@
                    'void', 
                    [param('std::ostream &', 'os')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ndn-fib.h (module 'ndnSIM'): void ns3::ndn::Fib::Remove(ns3::Ptr<ns3::ndn::NameComponents const> const & prefix) [member function]
+    ## ndn-fib.h (module 'ndnSIM'): void ns3::ndn::Fib::Remove(ns3::Ptr<ns3::ndn::Name const> const & prefix) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::NameComponents const > const &', 'prefix')], 
+                   [param('ns3::Ptr< ns3::ndn::Name const > const &', 'prefix')], 
                    is_pure_virtual=True, is_virtual=True)
     ## ndn-fib.h (module 'ndnSIM'): void ns3::ndn::Fib::RemoveFromAll(ns3::Ptr<ns3::ndn::Face> face) [member function]
     cls.add_method('RemoveFromAll', 
@@ -5369,14 +5369,14 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
-    ## ndn-interest.h (module 'ndnSIM'): ns3::ndn::NameComponents const & ns3::ndn::InterestHeader::GetName() const [member function]
+    ## ndn-interest.h (module 'ndnSIM'): ns3::ndn::Name const & ns3::ndn::InterestHeader::GetName() const [member function]
     cls.add_method('GetName', 
-                   'ns3::ndn::NameComponents const &', 
+                   'ns3::ndn::Name const &', 
                    [], 
                    is_const=True)
-    ## ndn-interest.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::NameComponents const> ns3::ndn::InterestHeader::GetNamePtr() const [member function]
+    ## ndn-interest.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Name const> ns3::ndn::InterestHeader::GetNamePtr() const [member function]
     cls.add_method('GetNamePtr', 
-                   'ns3::Ptr< ns3::ndn::NameComponents const >', 
+                   'ns3::Ptr< ns3::ndn::Name const >', 
                    [], 
                    is_const=True)
     ## ndn-interest.h (module 'ndnSIM'): uint32_t ns3::ndn::InterestHeader::GetNonce() const [member function]
@@ -5417,10 +5417,10 @@
     cls.add_method('SetNack', 
                    'void', 
                    [param('uint8_t', 'nackType')])
-    ## ndn-interest.h (module 'ndnSIM'): void ns3::ndn::InterestHeader::SetName(ns3::Ptr<ns3::ndn::NameComponents> name) [member function]
+    ## ndn-interest.h (module 'ndnSIM'): void ns3::ndn::InterestHeader::SetName(ns3::Ptr<ns3::ndn::Name> name) [member function]
     cls.add_method('SetName', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::NameComponents >', 'name')])
+                   [param('ns3::Ptr< ns3::ndn::Name >', 'name')])
     ## ndn-interest.h (module 'ndnSIM'): void ns3::ndn::InterestHeader::SetNonce(uint32_t nonce) [member function]
     cls.add_method('SetNonce', 
                    'void', 
@@ -5671,57 +5671,57 @@
     cls.add_constructor([param('ns3::ndn::NameChecker const &', 'arg0')])
     return
 
-def register_Ns3NdnNameComponents_methods(root_module, cls):
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponents::NameComponents(ns3::ndn::NameComponents const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ndn::NameComponents const &', 'arg0')])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponents::NameComponents() [constructor]
+def register_Ns3NdnName_methods(root_module, cls):
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::Name::Name(ns3::ndn::Name const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ndn::Name const &', 'arg0')])
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::Name::Name() [constructor]
     cls.add_constructor([])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponents::NameComponents(std::list<boost::reference_wrapper<std::string const>, std::allocator<boost::reference_wrapper<std::string const> > > const & components) [constructor]
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::Name::Name(std::list<boost::reference_wrapper<std::string const>, std::allocator<boost::reference_wrapper<std::string const> > > const & components) [constructor]
     cls.add_constructor([param('std::list< boost::reference_wrapper< std::string const > > const &', 'components')])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponents::NameComponents(std::string const & prefix) [constructor]
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::Name::Name(std::string const & prefix) [constructor]
     cls.add_constructor([param('std::string const &', 'prefix')])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponents::NameComponents(char const * prefix) [constructor]
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::Name::Name(char const * prefix) [constructor]
     cls.add_constructor([param('char const *', 'prefix')])
     return
 
-def register_Ns3NdnNameComponentsChecker_methods(root_module, cls):
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponentsChecker::NameComponentsChecker() [constructor]
+def register_Ns3NdnNameChecker_methods(root_module, cls):
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameChecker::NameChecker() [constructor]
     cls.add_constructor([])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponentsChecker::NameComponentsChecker(ns3::ndn::NameComponentsChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ndn::NameComponentsChecker const &', 'arg0')])
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameChecker::NameChecker(ns3::ndn::NameChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ndn::NameChecker const &', 'arg0')])
     return
 
-def register_Ns3NdnNameComponentsValue_methods(root_module, cls):
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponentsValue::NameComponentsValue() [constructor]
+def register_Ns3NdnNameValue_methods(root_module, cls):
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameValue::NameValue() [constructor]
     cls.add_constructor([])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponentsValue::NameComponentsValue(ns3::ndn::NameComponentsValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ndn::NameComponentsValue const &', 'arg0')])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponentsValue::NameComponentsValue(ns3::ndn::NameComponents const & value) [constructor]
-    cls.add_constructor([param('ns3::ndn::NameComponents const &', 'value')])
-    ## ndn-name.h (module 'ndnSIM'): ns3::Ptr<ns3::AttributeValue> ns3::ndn::NameComponentsValue::Copy() const [member function]
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameValue::NameValue(ns3::ndn::NameValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ndn::NameValue const &', 'arg0')])
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameValue::NameValue(ns3::ndn::Name const & value) [constructor]
+    cls.add_constructor([param('ns3::ndn::Name const &', 'value')])
+    ## ndn-name.h (module 'ndnSIM'): ns3::Ptr<ns3::AttributeValue> ns3::ndn::NameValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ndn-name.h (module 'ndnSIM'): bool ns3::ndn::NameComponentsValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    ## ndn-name.h (module 'ndnSIM'): bool ns3::ndn::NameValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
     cls.add_method('DeserializeFromString', 
                    'bool', 
                    [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_virtual=True)
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponents ns3::ndn::NameComponentsValue::Get() const [member function]
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::Name ns3::ndn::NameValue::Get() const [member function]
     cls.add_method('Get', 
-                   'ns3::ndn::NameComponents', 
+                   'ns3::ndn::Name', 
                    [], 
                    is_const=True)
-    ## ndn-name.h (module 'ndnSIM'): std::string ns3::ndn::NameComponentsValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    ## ndn-name.h (module 'ndnSIM'): std::string ns3::ndn::NameValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
     cls.add_method('SerializeToString', 
                    'std::string', 
                    [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_const=True, is_virtual=True)
-    ## ndn-name.h (module 'ndnSIM'): void ns3::ndn::NameComponentsValue::Set(ns3::ndn::NameComponents const & value) [member function]
+    ## ndn-name.h (module 'ndnSIM'): void ns3::ndn::NameValue::Set(ns3::ndn::Name const & value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('ns3::ndn::NameComponents const &', 'value')])
+                   [param('ns3::ndn::Name const &', 'value')])
     return
 
 def register_Ns3NdnNameValue_methods(root_module, cls):
@@ -6082,9 +6082,9 @@
                    'ns3::Ptr< ns3::ndn::ContentObjectHeader const >', 
                    [], 
                    is_const=True)
-    ## ndn-content-store.h (module 'ndnSIM'): ns3::ndn::NameComponents const & ns3::ndn::cs::Entry::GetName() const [member function]
+    ## ndn-content-store.h (module 'ndnSIM'): ns3::ndn::Name const & ns3::ndn::cs::Entry::GetName() const [member function]
     cls.add_method('GetName', 
-                   'ns3::ndn::NameComponents const &', 
+                   'ns3::ndn::Name const &', 
                    [], 
                    is_const=True)
     ## ndn-content-store.h (module 'ndnSIM'): ns3::Ptr<const ns3::Packet> ns3::ndn::cs::Entry::GetPacket() const [member function]
@@ -6098,8 +6098,8 @@
     cls.add_output_stream_operator()
     ## ndn-fib-entry.h (module 'ndnSIM'): ns3::ndn::fib::Entry::Entry(ns3::ndn::fib::Entry const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::ndn::fib::Entry const &', 'arg0')])
-    ## ndn-fib-entry.h (module 'ndnSIM'): ns3::ndn::fib::Entry::Entry(ns3::Ptr<ns3::ndn::NameComponents const> const & prefix) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::ndn::NameComponents const > const &', 'prefix')])
+    ## ndn-fib-entry.h (module 'ndnSIM'): ns3::ndn::fib::Entry::Entry(ns3::Ptr<ns3::ndn::Name const> const & prefix) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::ndn::Name const > const &', 'prefix')])
     ## ndn-fib-entry.h (module 'ndnSIM'): void ns3::ndn::fib::Entry::AddOrUpdateRoutingMetric(ns3::Ptr<ns3::ndn::Face> face, int32_t metric) [member function]
     cls.add_method('AddOrUpdateRoutingMetric', 
                    'void', 
@@ -6109,9 +6109,9 @@
                    'ns3::ndn::fib::FaceMetric const &', 
                    [param('uint32_t', 'skip', default_value='0')], 
                    is_const=True)
-    ## ndn-fib-entry.h (module 'ndnSIM'): ns3::ndn::NameComponents const & ns3::ndn::fib::Entry::GetPrefix() const [member function]
+    ## ndn-fib-entry.h (module 'ndnSIM'): ns3::ndn::Name const & ns3::ndn::fib::Entry::GetPrefix() const [member function]
     cls.add_method('GetPrefix', 
-                   'ns3::ndn::NameComponents const &', 
+                   'ns3::ndn::Name const &', 
                    [], 
                    is_const=True)
     ## ndn-fib-entry.h (module 'ndnSIM'): void ns3::ndn::fib::Entry::Invalidate() [member function]
@@ -6139,7 +6139,7 @@
     ## ndn-fib-entry.h (module 'ndnSIM'): ns3::ndn::fib::Entry::m_needsProbing [variable]
     cls.add_instance_attribute('m_needsProbing', 'bool', is_const=False)
     ## ndn-fib-entry.h (module 'ndnSIM'): ns3::ndn::fib::Entry::m_prefix [variable]
-    cls.add_instance_attribute('m_prefix', 'ns3::Ptr< ns3::ndn::NameComponents const >', is_const=False)
+    cls.add_instance_attribute('m_prefix', 'ns3::Ptr< ns3::ndn::Name const >', is_const=False)
     return
 
 def register_Ns3NdnFibEntryNoFaces_methods(root_module, cls):
@@ -6312,9 +6312,9 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::NameComponents const & ns3::ndn::pit::Entry::GetPrefix() const [member function]
+    ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::Name const & ns3::ndn::pit::Entry::GetPrefix() const [member function]
     cls.add_method('GetPrefix', 
-                   'ns3::ndn::NameComponents const &', 
+                   'ns3::ndn::Name const &', 
                    [], 
                    is_const=True)
     ## ndn-pit-entry.h (module 'ndnSIM'): void ns3::ndn::pit::Entry::IncreaseAllowedRetxCount() [member function]
@@ -6436,8 +6436,8 @@
     module.add_function('MakeNameChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
-    ## ndn-name.h (module 'ndnSIM'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::ndn::MakeNameComponentsChecker() [free function]
-    module.add_function('MakeNameComponentsChecker', 
+    ## ndn-name.h (module 'ndnSIM'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::ndn::MakeNameChecker() [free function]
+    module.add_function('MakeNameChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
     register_functions_ns3_ndn_cs(module.get_submodule('cs'), root_module)
diff --git a/bindings/modulegen__gcc_LP64.py b/bindings/modulegen__gcc_LP64.py
index 323ad58..941d104 100644
--- a/bindings/modulegen__gcc_LP64.py
+++ b/bindings/modulegen__gcc_LP64.py
@@ -362,12 +362,12 @@
     module.add_class('Name', parent=root_module['ns3::SimpleRefCount< ns3::ndn::Name, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Name> >'])
     ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameChecker [class]
     module.add_class('NameChecker', parent=root_module['ns3::AttributeChecker'])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponents [class]
-    module.add_class('NameComponents', parent=root_module['ns3::ndn::Name'])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponentsChecker [class]
-    module.add_class('NameComponentsChecker', parent=root_module['ns3::AttributeChecker'])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponentsValue [class]
-    module.add_class('NameComponentsValue', parent=root_module['ns3::AttributeValue'])
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::Name [class]
+    module.add_class('Name', parent=root_module['ns3::ndn::Name'])
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameChecker [class]
+    module.add_class('NameChecker', parent=root_module['ns3::AttributeChecker'])
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameValue [class]
+    module.add_class('NameValue', parent=root_module['ns3::AttributeValue'])
     ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameValue [class]
     module.add_class('NameValue', parent=root_module['ns3::AttributeValue'])
     ## ndn-net-device-face.h (module 'ndnSIM'): ns3::ndn::NetDeviceFace [class]
@@ -606,9 +606,9 @@
     register_Ns3NdnLimits_methods(root_module, root_module['ns3::ndn::Limits'])
     register_Ns3NdnName_methods(root_module, root_module['ns3::ndn::Name'])
     register_Ns3NdnNameChecker_methods(root_module, root_module['ns3::ndn::NameChecker'])
-    register_Ns3NdnNameComponents_methods(root_module, root_module['ns3::ndn::NameComponents'])
-    register_Ns3NdnNameComponentsChecker_methods(root_module, root_module['ns3::ndn::NameComponentsChecker'])
-    register_Ns3NdnNameComponentsValue_methods(root_module, root_module['ns3::ndn::NameComponentsValue'])
+    register_Ns3NdnName_methods(root_module, root_module['ns3::ndn::Name'])
+    register_Ns3NdnNameChecker_methods(root_module, root_module['ns3::ndn::NameChecker'])
+    register_Ns3NdnNameValue_methods(root_module, root_module['ns3::ndn::NameValue'])
     register_Ns3NdnNameValue_methods(root_module, root_module['ns3::ndn::NameValue'])
     register_Ns3NdnNetDeviceFace_methods(root_module, root_module['ns3::ndn::NetDeviceFace'])
     register_Ns3NdnPit_methods(root_module, root_module['ns3::ndn::Pit'])
@@ -4783,14 +4783,14 @@
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::NameComponents const & ns3::ndn::ContentObjectHeader::GetName() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::Name const & ns3::ndn::ContentObjectHeader::GetName() const [member function]
     cls.add_method('GetName', 
-                   'ns3::ndn::NameComponents const &', 
+                   'ns3::ndn::Name const &', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::NameComponents const> ns3::ndn::ContentObjectHeader::GetNamePtr() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Name const> ns3::ndn::ContentObjectHeader::GetNamePtr() const [member function]
     cls.add_method('GetNamePtr', 
-                   'ns3::Ptr< ns3::ndn::NameComponents const >', 
+                   'ns3::Ptr< ns3::ndn::Name const >', 
                    [], 
                    is_const=True)
     ## ndn-content-object.h (module 'ndnSIM'): uint32_t ns3::ndn::ContentObjectHeader::GetSerializedSize() const [member function]
@@ -4822,10 +4822,10 @@
     cls.add_method('SetFreshness', 
                    'void', 
                    [param('ns3::Time const &', 'freshness')])
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObjectHeader::SetName(ns3::Ptr<ns3::ndn::NameComponents> const & name) [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObjectHeader::SetName(ns3::Ptr<ns3::ndn::Name> const & name) [member function]
     cls.add_method('SetName', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::NameComponents > const &', 'name')])
+                   [param('ns3::Ptr< ns3::ndn::Name > const &', 'name')])
     ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObjectHeader::SetTimestamp(ns3::Time const & timestamp) [member function]
     cls.add_method('SetTimestamp', 
                    'void', 
@@ -5043,15 +5043,15 @@
     cls.add_output_stream_operator()
     ## ndn-fib.h (module 'ndnSIM'): ns3::ndn::Fib::Fib() [constructor]
     cls.add_constructor([])
-    ## ndn-fib.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::fib::Entry> ns3::ndn::Fib::Add(ns3::ndn::NameComponents const & prefix, ns3::Ptr<ns3::ndn::Face> face, int32_t metric) [member function]
+    ## ndn-fib.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::fib::Entry> ns3::ndn::Fib::Add(ns3::ndn::Name const & prefix, ns3::Ptr<ns3::ndn::Face> face, int32_t metric) [member function]
     cls.add_method('Add', 
                    'ns3::Ptr< ns3::ndn::fib::Entry >', 
-                   [param('ns3::ndn::NameComponents const &', 'prefix'), param('ns3::Ptr< ns3::ndn::Face >', 'face'), param('int32_t', 'metric')], 
+                   [param('ns3::ndn::Name const &', 'prefix'), param('ns3::Ptr< ns3::ndn::Face >', 'face'), param('int32_t', 'metric')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ndn-fib.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::fib::Entry> ns3::ndn::Fib::Add(ns3::Ptr<ns3::ndn::NameComponents const> const & prefix, ns3::Ptr<ns3::ndn::Face> face, int32_t metric) [member function]
+    ## ndn-fib.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::fib::Entry> ns3::ndn::Fib::Add(ns3::Ptr<ns3::ndn::Name const> const & prefix, ns3::Ptr<ns3::ndn::Face> face, int32_t metric) [member function]
     cls.add_method('Add', 
                    'ns3::Ptr< ns3::ndn::fib::Entry >', 
-                   [param('ns3::Ptr< ns3::ndn::NameComponents const > const &', 'prefix'), param('ns3::Ptr< ns3::ndn::Face >', 'face'), param('int32_t', 'metric')], 
+                   [param('ns3::Ptr< ns3::ndn::Name const > const &', 'prefix'), param('ns3::Ptr< ns3::ndn::Face >', 'face'), param('int32_t', 'metric')], 
                    is_pure_virtual=True, is_virtual=True)
     ## ndn-fib.h (module 'ndnSIM'): ns3::Ptr<const ns3::ndn::fib::Entry> ns3::ndn::Fib::Begin() const [member function]
     cls.add_method('Begin', 
@@ -5113,10 +5113,10 @@
                    'void', 
                    [param('std::ostream &', 'os')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ndn-fib.h (module 'ndnSIM'): void ns3::ndn::Fib::Remove(ns3::Ptr<ns3::ndn::NameComponents const> const & prefix) [member function]
+    ## ndn-fib.h (module 'ndnSIM'): void ns3::ndn::Fib::Remove(ns3::Ptr<ns3::ndn::Name const> const & prefix) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::NameComponents const > const &', 'prefix')], 
+                   [param('ns3::Ptr< ns3::ndn::Name const > const &', 'prefix')], 
                    is_pure_virtual=True, is_virtual=True)
     ## ndn-fib.h (module 'ndnSIM'): void ns3::ndn::Fib::RemoveFromAll(ns3::Ptr<ns3::ndn::Face> face) [member function]
     cls.add_method('RemoveFromAll', 
@@ -5369,14 +5369,14 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
-    ## ndn-interest.h (module 'ndnSIM'): ns3::ndn::NameComponents const & ns3::ndn::InterestHeader::GetName() const [member function]
+    ## ndn-interest.h (module 'ndnSIM'): ns3::ndn::Name const & ns3::ndn::InterestHeader::GetName() const [member function]
     cls.add_method('GetName', 
-                   'ns3::ndn::NameComponents const &', 
+                   'ns3::ndn::Name const &', 
                    [], 
                    is_const=True)
-    ## ndn-interest.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::NameComponents const> ns3::ndn::InterestHeader::GetNamePtr() const [member function]
+    ## ndn-interest.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Name const> ns3::ndn::InterestHeader::GetNamePtr() const [member function]
     cls.add_method('GetNamePtr', 
-                   'ns3::Ptr< ns3::ndn::NameComponents const >', 
+                   'ns3::Ptr< ns3::ndn::Name const >', 
                    [], 
                    is_const=True)
     ## ndn-interest.h (module 'ndnSIM'): uint32_t ns3::ndn::InterestHeader::GetNonce() const [member function]
@@ -5417,10 +5417,10 @@
     cls.add_method('SetNack', 
                    'void', 
                    [param('uint8_t', 'nackType')])
-    ## ndn-interest.h (module 'ndnSIM'): void ns3::ndn::InterestHeader::SetName(ns3::Ptr<ns3::ndn::NameComponents> name) [member function]
+    ## ndn-interest.h (module 'ndnSIM'): void ns3::ndn::InterestHeader::SetName(ns3::Ptr<ns3::ndn::Name> name) [member function]
     cls.add_method('SetName', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::NameComponents >', 'name')])
+                   [param('ns3::Ptr< ns3::ndn::Name >', 'name')])
     ## ndn-interest.h (module 'ndnSIM'): void ns3::ndn::InterestHeader::SetNonce(uint32_t nonce) [member function]
     cls.add_method('SetNonce', 
                    'void', 
@@ -5671,57 +5671,57 @@
     cls.add_constructor([param('ns3::ndn::NameChecker const &', 'arg0')])
     return
 
-def register_Ns3NdnNameComponents_methods(root_module, cls):
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponents::NameComponents(ns3::ndn::NameComponents const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ndn::NameComponents const &', 'arg0')])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponents::NameComponents() [constructor]
+def register_Ns3NdnName_methods(root_module, cls):
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::Name::Name(ns3::ndn::Name const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ndn::Name const &', 'arg0')])
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::Name::Name() [constructor]
     cls.add_constructor([])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponents::NameComponents(std::list<boost::reference_wrapper<std::string const>, std::allocator<boost::reference_wrapper<std::string const> > > const & components) [constructor]
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::Name::Name(std::list<boost::reference_wrapper<std::string const>, std::allocator<boost::reference_wrapper<std::string const> > > const & components) [constructor]
     cls.add_constructor([param('std::list< boost::reference_wrapper< std::string const > > const &', 'components')])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponents::NameComponents(std::string const & prefix) [constructor]
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::Name::Name(std::string const & prefix) [constructor]
     cls.add_constructor([param('std::string const &', 'prefix')])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponents::NameComponents(char const * prefix) [constructor]
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::Name::Name(char const * prefix) [constructor]
     cls.add_constructor([param('char const *', 'prefix')])
     return
 
-def register_Ns3NdnNameComponentsChecker_methods(root_module, cls):
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponentsChecker::NameComponentsChecker() [constructor]
+def register_Ns3NdnNameChecker_methods(root_module, cls):
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameChecker::NameChecker() [constructor]
     cls.add_constructor([])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponentsChecker::NameComponentsChecker(ns3::ndn::NameComponentsChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ndn::NameComponentsChecker const &', 'arg0')])
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameChecker::NameChecker(ns3::ndn::NameChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ndn::NameChecker const &', 'arg0')])
     return
 
-def register_Ns3NdnNameComponentsValue_methods(root_module, cls):
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponentsValue::NameComponentsValue() [constructor]
+def register_Ns3NdnNameValue_methods(root_module, cls):
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameValue::NameValue() [constructor]
     cls.add_constructor([])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponentsValue::NameComponentsValue(ns3::ndn::NameComponentsValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ndn::NameComponentsValue const &', 'arg0')])
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponentsValue::NameComponentsValue(ns3::ndn::NameComponents const & value) [constructor]
-    cls.add_constructor([param('ns3::ndn::NameComponents const &', 'value')])
-    ## ndn-name.h (module 'ndnSIM'): ns3::Ptr<ns3::AttributeValue> ns3::ndn::NameComponentsValue::Copy() const [member function]
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameValue::NameValue(ns3::ndn::NameValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ndn::NameValue const &', 'arg0')])
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameValue::NameValue(ns3::ndn::Name const & value) [constructor]
+    cls.add_constructor([param('ns3::ndn::Name const &', 'value')])
+    ## ndn-name.h (module 'ndnSIM'): ns3::Ptr<ns3::AttributeValue> ns3::ndn::NameValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ndn-name.h (module 'ndnSIM'): bool ns3::ndn::NameComponentsValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    ## ndn-name.h (module 'ndnSIM'): bool ns3::ndn::NameValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
     cls.add_method('DeserializeFromString', 
                    'bool', 
                    [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_virtual=True)
-    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::NameComponents ns3::ndn::NameComponentsValue::Get() const [member function]
+    ## ndn-name.h (module 'ndnSIM'): ns3::ndn::Name ns3::ndn::NameValue::Get() const [member function]
     cls.add_method('Get', 
-                   'ns3::ndn::NameComponents', 
+                   'ns3::ndn::Name', 
                    [], 
                    is_const=True)
-    ## ndn-name.h (module 'ndnSIM'): std::string ns3::ndn::NameComponentsValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    ## ndn-name.h (module 'ndnSIM'): std::string ns3::ndn::NameValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
     cls.add_method('SerializeToString', 
                    'std::string', 
                    [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_const=True, is_virtual=True)
-    ## ndn-name.h (module 'ndnSIM'): void ns3::ndn::NameComponentsValue::Set(ns3::ndn::NameComponents const & value) [member function]
+    ## ndn-name.h (module 'ndnSIM'): void ns3::ndn::NameValue::Set(ns3::ndn::Name const & value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('ns3::ndn::NameComponents const &', 'value')])
+                   [param('ns3::ndn::Name const &', 'value')])
     return
 
 def register_Ns3NdnNameValue_methods(root_module, cls):
@@ -6082,9 +6082,9 @@
                    'ns3::Ptr< ns3::ndn::ContentObjectHeader const >', 
                    [], 
                    is_const=True)
-    ## ndn-content-store.h (module 'ndnSIM'): ns3::ndn::NameComponents const & ns3::ndn::cs::Entry::GetName() const [member function]
+    ## ndn-content-store.h (module 'ndnSIM'): ns3::ndn::Name const & ns3::ndn::cs::Entry::GetName() const [member function]
     cls.add_method('GetName', 
-                   'ns3::ndn::NameComponents const &', 
+                   'ns3::ndn::Name const &', 
                    [], 
                    is_const=True)
     ## ndn-content-store.h (module 'ndnSIM'): ns3::Ptr<const ns3::Packet> ns3::ndn::cs::Entry::GetPacket() const [member function]
@@ -6098,8 +6098,8 @@
     cls.add_output_stream_operator()
     ## ndn-fib-entry.h (module 'ndnSIM'): ns3::ndn::fib::Entry::Entry(ns3::ndn::fib::Entry const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::ndn::fib::Entry const &', 'arg0')])
-    ## ndn-fib-entry.h (module 'ndnSIM'): ns3::ndn::fib::Entry::Entry(ns3::Ptr<ns3::ndn::NameComponents const> const & prefix) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::ndn::NameComponents const > const &', 'prefix')])
+    ## ndn-fib-entry.h (module 'ndnSIM'): ns3::ndn::fib::Entry::Entry(ns3::Ptr<ns3::ndn::Name const> const & prefix) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::ndn::Name const > const &', 'prefix')])
     ## ndn-fib-entry.h (module 'ndnSIM'): void ns3::ndn::fib::Entry::AddOrUpdateRoutingMetric(ns3::Ptr<ns3::ndn::Face> face, int32_t metric) [member function]
     cls.add_method('AddOrUpdateRoutingMetric', 
                    'void', 
@@ -6109,9 +6109,9 @@
                    'ns3::ndn::fib::FaceMetric const &', 
                    [param('uint32_t', 'skip', default_value='0')], 
                    is_const=True)
-    ## ndn-fib-entry.h (module 'ndnSIM'): ns3::ndn::NameComponents const & ns3::ndn::fib::Entry::GetPrefix() const [member function]
+    ## ndn-fib-entry.h (module 'ndnSIM'): ns3::ndn::Name const & ns3::ndn::fib::Entry::GetPrefix() const [member function]
     cls.add_method('GetPrefix', 
-                   'ns3::ndn::NameComponents const &', 
+                   'ns3::ndn::Name const &', 
                    [], 
                    is_const=True)
     ## ndn-fib-entry.h (module 'ndnSIM'): void ns3::ndn::fib::Entry::Invalidate() [member function]
@@ -6139,7 +6139,7 @@
     ## ndn-fib-entry.h (module 'ndnSIM'): ns3::ndn::fib::Entry::m_needsProbing [variable]
     cls.add_instance_attribute('m_needsProbing', 'bool', is_const=False)
     ## ndn-fib-entry.h (module 'ndnSIM'): ns3::ndn::fib::Entry::m_prefix [variable]
-    cls.add_instance_attribute('m_prefix', 'ns3::Ptr< ns3::ndn::NameComponents const >', is_const=False)
+    cls.add_instance_attribute('m_prefix', 'ns3::Ptr< ns3::ndn::Name const >', is_const=False)
     return
 
 def register_Ns3NdnFibEntryNoFaces_methods(root_module, cls):
@@ -6312,9 +6312,9 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::NameComponents const & ns3::ndn::pit::Entry::GetPrefix() const [member function]
+    ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::Name const & ns3::ndn::pit::Entry::GetPrefix() const [member function]
     cls.add_method('GetPrefix', 
-                   'ns3::ndn::NameComponents const &', 
+                   'ns3::ndn::Name const &', 
                    [], 
                    is_const=True)
     ## ndn-pit-entry.h (module 'ndnSIM'): void ns3::ndn::pit::Entry::IncreaseAllowedRetxCount() [member function]
@@ -6436,8 +6436,8 @@
     module.add_function('MakeNameChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
-    ## ndn-name.h (module 'ndnSIM'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::ndn::MakeNameComponentsChecker() [free function]
-    module.add_function('MakeNameComponentsChecker', 
+    ## ndn-name.h (module 'ndnSIM'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::ndn::MakeNameChecker() [free function]
+    module.add_function('MakeNameChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
     register_functions_ns3_ndn_cs(module.get_submodule('cs'), root_module)
diff --git a/disabled/ccnb-parser/visitors/interest-visitor.cc b/disabled/ccnb-parser/visitors/interest-visitor.cc
index 175eaad..e7fe598 100644
--- a/disabled/ccnb-parser/visitors/interest-visitor.cc
+++ b/disabled/ccnb-parser/visitors/interest-visitor.cc
@@ -23,7 +23,7 @@
 #include "../syntax-tree/block.h"
 #include "../syntax-tree/dtag.h"
 
-#include "ns3/ndn-name-components.h"
+#include "ns3/ndn-name.h"
 #include "ns3/ndn-interest-header.h"
 
 #include "ns3/assert.h"
@@ -52,7 +52,7 @@
   // std::list<Ptr<Block> > n.m_nestedBlocks;
 
   static NonNegativeIntegerVisitor nonNegativeIntegerVisitor;
-  static NameComponentsVisitor     nameComponentsVisitor;
+  static NameVisitor     nameComponentsVisitor;
   static TimestampVisitor          timestampVisitor;
   static Uint32tBlobVisitor        nonceVisitor;
   
@@ -74,7 +74,7 @@
         NS_LOG_DEBUG ("Name");
 
         // process name components
-        Ptr<NameComponents> name = Create<NameComponents> ();
+        Ptr<Name> name = Create<Name> ();
         
         BOOST_FOREACH (Ptr<Block> block, n.m_nestedTags)
           {
@@ -107,7 +107,7 @@
       {
         NS_LOG_DEBUG ("Exclude");
         // process exclude components
-        Ptr<NameComponents> exclude = Create<NameComponents> ();
+        Ptr<Name> exclude = Create<Name> ();
         
         BOOST_FOREACH (Ptr<Block> block, n.m_nestedTags)
           {
diff --git a/disabled/ccnb-parser/visitors/name-components-visitor.cc b/disabled/ccnb-parser/visitors/name-components-visitor.cc
index ef87281..ffb242e 100644
--- a/disabled/ccnb-parser/visitors/name-components-visitor.cc
+++ b/disabled/ccnb-parser/visitors/name-components-visitor.cc
@@ -23,20 +23,20 @@
 #include "string-visitor.h"
 #include "../syntax-tree/dtag.h"
 
-#include "ns3/ndn-name-components.h"
+#include "ns3/ndn-name.h"
 
 namespace ns3 {
 namespace ndn {
 namespace CcnbParser {
 
 void
-NameComponentsVisitor::visit (Dtag &n, boost::any param/*should be NameComponents* */)
+NameVisitor::visit (Dtag &n, boost::any param/*should be Name* */)
 {
   // uint32_t n.m_dtag;
   // std::list<Ptr<Block> > n.m_nestedBlocks;
   static StringVisitor stringVisitor; 
  
-  NameComponents &components = *(boost::any_cast<NameComponents*> (param));
+  Name &components = *(boost::any_cast<Name*> (param));
 
   switch (n.m_dtag)
     {
diff --git a/disabled/ccnb-parser/visitors/name-components-visitor.h b/disabled/ccnb-parser/visitors/name-components-visitor.h
index 823de35..332d95d 100644
--- a/disabled/ccnb-parser/visitors/name-components-visitor.h
+++ b/disabled/ccnb-parser/visitors/name-components-visitor.h
@@ -29,12 +29,12 @@
 
 /**
  * \ingroup ccnx-ccnb
- * \brief Visitor to obtain fill CcnxNameComponents object with name components
+ * \brief Visitor to obtain fill CcnxName object with name components
  */
-class NameComponentsVisitor : public VoidDepthFirstVisitor
+class NameVisitor : public VoidDepthFirstVisitor
 {
 public:
-  virtual void visit (Dtag &n, boost::any param/*should be CcnxNameComponents* */);
+  virtual void visit (Dtag &n, boost::any param/*should be CcnxName* */);
 };
 
 }
diff --git a/disabled/ndn-content-object-header-ccnb.cc b/disabled/ndn-content-object-header-ccnb.cc
index c2611d8..112f141 100644
--- a/disabled/ndn-content-object-header-ccnb.cc
+++ b/disabled/ndn-content-object-header-ccnb.cc
@@ -67,19 +67,19 @@
 }
 
 void
-ContentObjectHeader::SetName (const Ptr<NameComponents> &name)
+ContentObjectHeader::SetName (const Ptr<Name> &name)
 {
   m_name = name;
 }
 
-const NameComponents&
+const Name&
 ContentObjectHeader::GetName () const
 {
   if (m_name==0) throw ContentObjectHeaderException();
   return *m_name;
 }
 
-Ptr<const NameComponents>
+Ptr<const Name>
 ContentObjectHeader::GetNamePtr () const
 {
   return m_name;
@@ -106,7 +106,7 @@
   written += CCNB::AppendCloser (start);                                    // </Signature>  
 
   written += CCNB::AppendBlockHeader (start, CCN_DTAG_Name, CCN_DTAG);    // <Name>
-  written += CCNB::AppendNameComponents (start, GetName()); //   <Component>...</Component>...
+  written += CCNB::AppendName (start, GetName()); //   <Component>...</Component>...
   written += CCNB::AppendCloser (start);                                  // </Name>  
 
   // fake signature
@@ -146,7 +146,7 @@
         written += CCNB::AppendBlockHeader (start, CCN_DTAG_KeyName, CCN_DTAG);    // <KeyName>
         {
           written += CCNB::AppendBlockHeader (start, CCN_DTAG_Name, CCN_DTAG);       // <Name>
-          written += CCNB::AppendNameComponents (start, GetName());                  //   <Component>...</Component>...
+          written += CCNB::AppendName (start, GetName());                  //   <Component>...</Component>...
           written += CCNB::AppendCloser (start);                                     // </Name>
         }
         written += CCNB::AppendCloser (start);                                     // </KeyName>
@@ -182,7 +182,7 @@
   written += 1;                                    // </Signature>  
 
   written += CCNB::EstimateBlockHeader (CCN_DTAG_Name);    // <Name>
-  written += CCNB::EstimateNameComponents (GetName()); //   <Component>...</Component>...
+  written += CCNB::EstimateName (GetName()); //   <Component>...</Component>...
   written += 1;                                  // </Name>  
 
   // fake signature
@@ -219,7 +219,7 @@
         written += CCNB::EstimateBlockHeader (CCN_DTAG_KeyName);    // <KeyName>
         {
           written += CCNB::EstimateBlockHeader (CCN_DTAG_Name);       // <Name>
-          written += CCNB::EstimateNameComponents (GetName());        //   <Component>...</Component>...
+          written += CCNB::EstimateName (GetName());        //   <Component>...</Component>...
           written += 1;                                               // </Name>
         }
         written += 1;                                               // </KeyName>
@@ -244,7 +244,7 @@
   {
     // uint32_t n.m_dtag;
     // std::list<Ptr<Block> > n.m_nestedBlocks;
-    static NameComponentsVisitor nameComponentsVisitor;
+    static NameVisitor nameComponentsVisitor;
     static NonNegativeIntegerVisitor nonNegativeIntegerVisitor;
     static TimestampVisitor          timestampVisitor;
     static StringVisitor     stringVisitor;
@@ -265,7 +265,7 @@
       case CCN_DTAG_Name:
         {
           // process name components
-          Ptr<NameComponents> name = Create<NameComponents> ();
+          Ptr<Name> name = Create<Name> ();
         
           BOOST_FOREACH (Ptr<Block> block, n.m_nestedTags)
             {
@@ -372,7 +372,7 @@
             throw CcnbDecodingException ();
 
           // process name components
-          Ptr<NameComponents> name = Create<NameComponents> ();
+          Ptr<Name> name = Create<Name> ();
         
           BOOST_FOREACH (Ptr<Block> block, nameTag->m_nestedTags)
             {
@@ -540,12 +540,12 @@
 }
 
 void
-ContentObjectHeader::SignedInfo::SetKeyLocator (Ptr<const NameComponents> keyLocator)
+ContentObjectHeader::SignedInfo::SetKeyLocator (Ptr<const Name> keyLocator)
 {
   m_keyLocator = keyLocator;
 }
 
-Ptr<const NameComponents>
+Ptr<const Name>
 ContentObjectHeader::SignedInfo::GetKeyLocator () const
 {
   return m_keyLocator;
diff --git a/disabled/ndn-content-object-header-ccnb.h b/disabled/ndn-content-object-header-ccnb.h
index f19dbbe..06edcfd 100644
--- a/disabled/ndn-content-object-header-ccnb.h
+++ b/disabled/ndn-content-object-header-ccnb.h
@@ -32,7 +32,7 @@
 #include <vector>
 #include <list>
 
-#include "ndn-name-components.h"
+#include "ndn-name.h"
 
 namespace ns3 {
 namespace ndn {
@@ -195,14 +195,14 @@
      * Note that only <KeyName> option for the key locator is supported
      */
     void
-    SetKeyLocator (Ptr<const NameComponents> keyLocator);
+    SetKeyLocator (Ptr<const Name> keyLocator);
 
     /**
      * @brief Get key locator
      *
      * Note that only <KeyName> option for the key locator is supported
      */
-    Ptr<const NameComponents>
+    Ptr<const Name>
     GetKeyLocator () const;
     
   private:
@@ -211,7 +211,7 @@
     ContentType m_type;
     Time m_freshness;
     // FinalBlockID
-    Ptr<const NameComponents> m_keyLocator; // support only <KeyName> option for KeyLocator
+    Ptr<const Name> m_keyLocator; // support only <KeyName> option for KeyLocator
   };
 
   ////////////////////////////////////////////////////////////////////////////  
@@ -231,21 +231,21 @@
   /**
    * \brief Set content object name
    *
-   * Sets name of the content object. For example, SetName( NameComponents("prefix")("postfix") );
+   * Sets name of the content object. For example, SetName( Name("prefix")("postfix") );
    **/
   void
-  SetName (const Ptr<NameComponents> &name);
+  SetName (const Ptr<Name> &name);
 
   /**
    * @brief Get name of the content object
    */
-  const NameComponents&
+  const Name&
   GetName () const;
 
   /**
    * @brief Get smart pointer to the interest name (to avoid extra memory usage)
    */
-  Ptr<const NameComponents>
+  Ptr<const Name>
   GetNamePtr () const;
 
   /**
@@ -283,7 +283,7 @@
   
 private:
   Signature  m_signature;
-  Ptr<NameComponents> m_name;
+  Ptr<Name> m_name;
   SignedInfo m_signedInfo;
 };
 
diff --git a/disabled/ndn-encoding-helper.cc b/disabled/ndn-encoding-helper.cc
index c9292ab..8ef3a7a 100644
--- a/disabled/ndn-encoding-helper.cc
+++ b/disabled/ndn-encoding-helper.cc
@@ -20,7 +20,7 @@
 
 #include "ndn-encoding-helper.h"
 
-#include "ns3/ndn-name-components.h"
+#include "ns3/ndn-name.h"
 #include "ns3/ndn-interest-header.h"
 #include "ns3/ndn-content-object-header.h"
 
@@ -37,7 +37,7 @@
   written += AppendBlockHeader (start, CcnbParser::CCN_DTAG_Interest, CcnbParser::CCN_DTAG); // <Interest>
   
   written += AppendBlockHeader (start, CcnbParser::CCN_DTAG_Name, CcnbParser::CCN_DTAG); // <Name>
-  written += AppendNameComponents (start, interest.GetName());                // <Component>...</Component>...
+  written += AppendName (start, interest.GetName());                // <Component>...</Component>...
   written += AppendCloser (start);                               // </Name>
 
   if (interest.GetMinSuffixComponents() >= 0)
@@ -55,7 +55,7 @@
   if (interest.IsEnabledExclude() && interest.GetExclude().size() > 0)
     {
       written += AppendBlockHeader (start, CcnbParser::CCN_DTAG_Exclude, CcnbParser::CCN_DTAG); // <Exclude>
-      written += AppendNameComponents (start, interest.GetExclude());                // <Component>...</Component>...
+      written += AppendName (start, interest.GetExclude());                // <Component>...</Component>...
       written += AppendCloser (start);                                  // </Exclude>
     }
   if (interest.IsEnabledChildSelector())
@@ -106,7 +106,7 @@
   written += EstimateBlockHeader (CcnbParser::CCN_DTAG_Interest); // <Interest>
   
   written += EstimateBlockHeader (CcnbParser::CCN_DTAG_Name); // <Name>
-  written += EstimateNameComponents (interest.GetName()); // <Component>...</Component>...
+  written += EstimateName (interest.GetName()); // <Component>...</Component>...
   written += 1; // </Name>
 
   if (interest.GetMinSuffixComponents() >= 0)
@@ -124,7 +124,7 @@
   if (interest.IsEnabledExclude() && interest.GetExclude().size() > 0)
     {
       written += EstimateBlockHeader (CcnbParser::CCN_DTAG_Exclude);
-      written += EstimateNameComponents (interest.GetExclude());                // <Component>...</Component>...
+      written += EstimateName (interest.GetExclude());                // <Component>...</Component>...
       written += 1;                                  // </Exclude>
     }
   if (interest.IsEnabledChildSelector())
@@ -238,7 +238,7 @@
 }
 
 size_t
-EncodingHelper::AppendNameComponents (Buffer::Iterator &start, const NameComponents &name)
+EncodingHelper::AppendName (Buffer::Iterator &start, const Name &name)
 {
   size_t written = 0;
   BOOST_FOREACH (const std::string &component, name.GetComponents())
@@ -250,7 +250,7 @@
 }
 
 size_t
-EncodingHelper::EstimateNameComponents (const NameComponents &name)
+EncodingHelper::EstimateName (const Name &name)
 {
   size_t written = 0;
   BOOST_FOREACH (const std::string &component, name.GetComponents())
diff --git a/disabled/ndn-encoding-helper.h b/disabled/ndn-encoding-helper.h
index 66796c3..ab222ac 100644
--- a/disabled/ndn-encoding-helper.h
+++ b/disabled/ndn-encoding-helper.h
@@ -31,7 +31,7 @@
 namespace ns3 {
 namespace ndn {
 
-class NameComponents;
+class Name;
 
 class InterestHeader;
 class ContentObjectHeader;
@@ -107,22 +107,22 @@
   AppendCloser (Buffer::Iterator &start);
 
   /**
-   * @brief Append NameComponents in CCNB encoding
+   * @brief Append Name in CCNB encoding
    * @param start Buffer to store serialized InterestHeader
-   * @param name constant reference to NameComponents object
+   * @param name constant reference to Name object
    *
    * @returns written length
    */
   static size_t
-  AppendNameComponents (Buffer::Iterator &start, const NameComponents &name);
+  AppendName (Buffer::Iterator &start, const Name &name);
 
   /**
-   * @brief Estimate size of NameComponents in CCNB encoding
-   * @param name constant reference to NameComponents object
+   * @brief Estimate size of Name in CCNB encoding
+   * @param name constant reference to Name object
    * @returns estimated length
    */
   static size_t
-  EstimateNameComponents (const NameComponents &name);
+  EstimateName (const Name &name);
 
   /**
    * Append a binary timestamp as a BLOB using the ccn binary
diff --git a/disabled/ndn-interest-header-ccnb.cc b/disabled/ndn-interest-header-ccnb.cc
index beebda8..438b906 100644
--- a/disabled/ndn-interest-header-ccnb.cc
+++ b/disabled/ndn-interest-header-ccnb.cc
@@ -65,10 +65,10 @@
 }
 
 InterestHeader::InterestHeader (const InterestHeader &interest)
-  : m_name                (Create<NameComponents> (interest.GetName ()))
+  : m_name                (Create<Name> (interest.GetName ()))
   , m_minSuffixComponents (interest.m_minSuffixComponents)
   , m_maxSuffixComponents (interest.m_maxSuffixComponents)
-  , m_exclude             (interest.IsEnabledExclude () ? Create<NameComponents> (interest.GetExclude ()) : 0)
+  , m_exclude             (interest.IsEnabledExclude () ? Create<Name> (interest.GetExclude ()) : 0)
   , m_childSelector       (interest.m_childSelector)
   , m_answerOriginKind    (interest.m_answerOriginKind)
   , m_scope               (interest.m_scope)
@@ -88,19 +88,19 @@
 }
 
 void
-InterestHeader::SetName (Ptr<NameComponents> name)
+InterestHeader::SetName (Ptr<Name> name)
 {
   m_name = name;
 }
 
-const NameComponents&
+const Name&
 InterestHeader::GetName () const
 {
   if (m_name==0) throw InterestHeaderException();
   return *m_name;
 }
 
-Ptr<const NameComponents>
+Ptr<const Name>
 InterestHeader::GetNamePtr () const
 {
   return m_name;
@@ -131,7 +131,7 @@
 }
 
 void
-InterestHeader::SetExclude (Ptr<NameComponents> exclude)
+InterestHeader::SetExclude (Ptr<Name> exclude)
 {
   m_exclude = exclude;
 }
@@ -142,7 +142,7 @@
   return m_exclude!=0;
 }
 
-const NameComponents&
+const Name&
 InterestHeader::GetExclude () const
 {
   if (m_exclude==0) throw InterestHeaderException();
diff --git a/disabled/ndn-interest-header-ccnb.h b/disabled/ndn-interest-header-ccnb.h
index 7b643f1..819875a 100644
--- a/disabled/ndn-interest-header-ccnb.h
+++ b/disabled/ndn-interest-header-ccnb.h
@@ -31,7 +31,7 @@
 #include <vector>
 #include <list>
 
-#include "ndn-name-components.h"
+#include "ndn-name.h"
 
 namespace ns3 {
 
@@ -147,11 +147,11 @@
   /**
    * \brief Set interest name
    *
-   * Sets name of the interest. For example, SetName( ndnNameComponents("prefix")("postfix") );
-   * @param[in] name const pointer to ndnNameComponents object that contains an interest name
+   * Sets name of the interest. For example, SetName( ndnName("prefix")("postfix") );
+   * @param[in] name const pointer to ndnName object that contains an interest name
    **/
   void
-  SetName (Ptr<NameComponents> name);
+  SetName (Ptr<Name> name);
 
 
   /**
@@ -159,13 +159,13 @@
    *
    * Gets name of the interest.
    **/
-  const NameComponents&
+  const Name&
   GetName () const;
 
   /**
    * @brief Get smart pointer to the interest name (to avoid extra memory usage)
    */
-  Ptr<const NameComponents>
+  Ptr<const Name>
   GetNamePtr () const;
 
   /**
@@ -214,11 +214,11 @@
   /**
    * \brief Set exclude filer
    *
-   * For example, SetExclude (ndnNameComponents("exclude1")("exclude2")("exclude3"))
-   * @param[in] exclude const pointer to ndnNameComponents to be excluded 
+   * For example, SetExclude (ndnName("exclude1")("exclude2")("exclude3"))
+   * @param[in] exclude const pointer to ndnName to be excluded 
    **/
   void
-  SetExclude (Ptr<NameComponents> exclude);
+  SetExclude (Ptr<Name> exclude);
 
   /**
    * \brief Check if interest conatins exclude filter
@@ -230,7 +230,7 @@
   /**
    * \brief Get exclude filter 
    */
-  const NameComponents&
+  const Name&
   GetExclude () const;
 
   /**
@@ -395,10 +395,10 @@
   GetInterest (Ptr<Packet> packet);
   
 private:
-  Ptr<NameComponents> m_name;    ///< Interest name
+  Ptr<Name> m_name;    ///< Interest name
   int32_t m_minSuffixComponents; ///< Minimum suffix components. not used if negative
   int32_t m_maxSuffixComponents; ///< Maximum suffix components. not used if negative
-  Ptr<NameComponents> m_exclude; ///< Exclude filter
+  Ptr<Name> m_exclude; ///< Exclude filter
   bool m_childSelector;          ///< Default value for ChildSelector is false
   bool m_answerOriginKind;       ///< Default value for AnswerOriginKind is false
   int8_t m_scope;                ///< -1 not set, 0 local scope, 1 this host, 2 immediate neighborhood
diff --git a/examples/custom-apps/custom-app.cc b/examples/custom-apps/custom-app.cc
index 14c564e..86108ac 100644
--- a/examples/custom-apps/custom-app.cc
+++ b/examples/custom-apps/custom-app.cc
@@ -58,7 +58,7 @@
   ndn::App::StartApplication ();
 
   // Create a name components object for name ``/prefix/sub``
-  Ptr<ndn::NameComponents> prefix = Create<ndn::NameComponents> (); // now prefix contains ``/``
+  Ptr<ndn::Name> prefix = Create<ndn::Name> (); // now prefix contains ``/``
   prefix->Add ("prefix"); // now prefix contains ``/prefix``
   prefix->Add ("sub"); // now prefix contains ``/prefix/sub``
 
@@ -91,7 +91,7 @@
   // Sending one Interest packet out //
   /////////////////////////////////////
   
-  Ptr<ndn::NameComponents> prefix = Create<ndn::NameComponents> ("/prefix/sub"); // another way to create name
+  Ptr<ndn::Name> prefix = Create<ndn::Name> ("/prefix/sub"); // another way to create name
 
   // Create and configure ndn::InterestHeader
   ndn::InterestHeader interestHeader;
@@ -125,7 +125,7 @@
   // Note that Interests send out by the app will not be sent back to the app !
   
   ndn::ContentObjectHeader data;
-  data.SetName (Create<ndn::NameComponents> (interest->GetName ())); // data will have the same name as Interests
+  data.SetName (Create<ndn::Name> (interest->GetName ())); // data will have the same name as Interests
 
   ndn::ContentObjectTail trailer; // doesn't require any configuration
 
diff --git a/examples/custom-apps/dumb-requester.cc b/examples/custom-apps/dumb-requester.cc
index 1d068c4..3dbcadf 100644
--- a/examples/custom-apps/dumb-requester.cc
+++ b/examples/custom-apps/dumb-requester.cc
@@ -48,8 +48,8 @@
 
     .AddAttribute ("Prefix", "Requested name",
                    StringValue ("/dumb-interest"),
-                   ndn::MakeNameComponentsAccessor (&DumbRequester::m_name),
-                   ndn::MakeNameComponentsChecker ())
+                   ndn::MakeNameAccessor (&DumbRequester::m_name),
+                   ndn::MakeNameChecker ())
     ;
   return tid;
 }
@@ -88,7 +88,7 @@
   // Sending one Interest packet out //
   /////////////////////////////////////
   
-  Ptr<ndn::NameComponents> prefix = Create<ndn::NameComponents> (m_name); // another way to create name
+  Ptr<ndn::Name> prefix = Create<ndn::Name> (m_name); // another way to create name
 
   // Create and configure ndn::InterestHeader
   ndn::InterestHeader interestHeader;
diff --git a/examples/custom-apps/dumb-requester.h b/examples/custom-apps/dumb-requester.h
index 050630d..2b28c77 100644
--- a/examples/custom-apps/dumb-requester.h
+++ b/examples/custom-apps/dumb-requester.h
@@ -24,7 +24,7 @@
 #define DUMB_REQUESTER_H_
 
 #include "ns3/ndn-app.h"
-#include "ns3/ndn-name-components.h"
+#include "ns3/ndn-name.h"
 
 namespace ns3 {
 
@@ -61,7 +61,7 @@
 
 private:
   bool m_isRunning;
-  ndn::NameComponents m_name;
+  ndn::Name m_name;
 };
 
 } // namespace ns3
diff --git a/helper/ndn-global-routing-helper.cc b/helper/ndn-global-routing-helper.cc
index 122bffb..a6f4601 100644
--- a/helper/ndn-global-routing-helper.cc
+++ b/helper/ndn-global-routing-helper.cc
@@ -23,7 +23,7 @@
 #include "ns3/ndn-l3-protocol.h"
 #include "../model/ndn-net-device-face.h"
 #include "../model/ndn-global-router.h"
-#include "ns3/ndn-name-components.h"
+#include "ns3/ndn-name.h"
 #include "ns3/ndn-fib.h"
 
 #include "ns3/node.h"
@@ -188,7 +188,7 @@
   NS_ASSERT_MSG (gr != 0,
 		 "GlobalRouter is not installed on the node");
 
-  Ptr<NameComponents> name = Create<NameComponents> (boost::lexical_cast<NameComponents> (prefix));
+  Ptr<Name> name = Create<Name> (boost::lexical_cast<Name> (prefix));
   gr->AddLocalPrefix (name);
 }
 
@@ -291,7 +291,7 @@
 		}
 	      else
 		{
-                  BOOST_FOREACH (const Ptr<const NameComponents> &prefix, i->first->GetLocalPrefixes ())
+                  BOOST_FOREACH (const Ptr<const Name> &prefix, i->first->GetLocalPrefixes ())
                     {
                       NS_LOG_DEBUG (" prefix " << prefix << " reachable via face " << *i->second.get<0> ()
                                     << " with distance " << i->second.get<1> ()
@@ -404,7 +404,7 @@
                     }
                   else
                     {
-                      BOOST_FOREACH (const Ptr<const NameComponents> &prefix, i->first->GetLocalPrefixes ())
+                      BOOST_FOREACH (const Ptr<const Name> &prefix, i->first->GetLocalPrefixes ())
                         {
                           NS_LOG_DEBUG (" prefix " << *prefix << " reachable via face " << *i->second.get<0> ()
                                         << " with distance " << i->second.get<1> ()
diff --git a/helper/ndn-stack-helper.cc b/helper/ndn-stack-helper.cc
index 3f284cf..c6cf1c3 100644
--- a/helper/ndn-stack-helper.cc
+++ b/helper/ndn-stack-helper.cc
@@ -42,7 +42,7 @@
 #include "ns3/ndn-forwarding-strategy.h"
 #include "ns3/ndn-fib.h"
 #include "ns3/ndn-pit.h"
-#include "ns3/ndn-name-components.h"
+#include "ns3/ndn-name.h"
 #include "ns3/ndn-content-store.h"
 
 #include "ns3/node-list.h"
@@ -360,8 +360,8 @@
 
   Ptr<Fib>  fib  = node->GetObject<Fib> ();
 
-  NameComponentsValue prefixValue;
-  prefixValue.DeserializeFromString (prefix, MakeNameComponentsChecker ());
+  NameValue prefixValue;
+  prefixValue.DeserializeFromString (prefix, MakeNameChecker ());
   fib->Add (prefixValue.Get (), face, metric);
 }
 
diff --git a/model/cs/content-store-impl.h b/model/cs/content-store-impl.h
index ffbc925..7ed8ae3 100644
--- a/model/cs/content-store-impl.h
+++ b/model/cs/content-store-impl.h
@@ -67,12 +67,12 @@
 
 template<class Policy>
 class ContentStoreImpl : public ContentStore,
-                         protected ndnSIM::trie_with_policy< NameComponents,
+                         protected ndnSIM::trie_with_policy< Name,
                                                              ndnSIM::smart_pointer_payload_traits< EntryImpl< ContentStoreImpl< Policy > >, Entry >,
                                                              Policy >
 {
 public:
-  typedef ndnSIM::trie_with_policy< NameComponents,
+  typedef ndnSIM::trie_with_policy< Name,
                                     ndnSIM::smart_pointer_payload_traits< EntryImpl< ContentStoreImpl< Policy > >, Entry >,
                                     Policy > super;
 
diff --git a/model/cs/ndn-content-store.cc b/model/cs/ndn-content-store.cc
index fbe85ce..98e118d 100644
--- a/model/cs/ndn-content-store.cc
+++ b/model/cs/ndn-content-store.cc
@@ -23,7 +23,7 @@
 #include "ndn-content-store.h"
 #include "ns3/log.h"
 #include "ns3/packet.h"
-#include "ns3/ndn-name-components.h"
+#include "ns3/ndn-name.h"
 #include "ns3/ndn-interest.h"
 #include "ns3/ndn-content-object.h"
 
@@ -78,7 +78,7 @@
   return packet;
 }
 
-const NameComponents&
+const Name&
 Entry::GetName () const
 {
   return m_header->GetName ();
diff --git a/model/cs/ndn-content-store.h b/model/cs/ndn-content-store.h
index f03e4c9..1e01a6e 100644
--- a/model/cs/ndn-content-store.h
+++ b/model/cs/ndn-content-store.h
@@ -36,7 +36,7 @@
 
 class ContentObjectHeader;
 class InterestHeader;
-class NameComponents;
+class Name;
 
 class ContentStore;
 
@@ -71,7 +71,7 @@
    * \brief Get prefix of the stored entry
    * \returns prefix of the stored entry
    */
-  const NameComponents&
+  const Name&
   GetName () const;
 
   /**
diff --git a/model/fib/ndn-fib-entry.cc b/model/fib/ndn-fib-entry.cc
index 35b3a99..09b3ec6 100644
--- a/model/fib/ndn-fib-entry.cc
+++ b/model/fib/ndn-fib-entry.cc
@@ -20,7 +20,7 @@
 
 #include "ndn-fib-entry.h"
 
-#include "ns3/ndn-name-components.h"
+#include "ns3/ndn-name.h"
 #include "ns3/log.h"
 #include "ns3/simulator.h"
 
diff --git a/model/fib/ndn-fib-entry.h b/model/fib/ndn-fib-entry.h
index 93fa2aa..9cb3aec 100644
--- a/model/fib/ndn-fib-entry.h
+++ b/model/fib/ndn-fib-entry.h
@@ -24,7 +24,7 @@
 #include "ns3/ptr.h"
 #include "ns3/nstime.h"
 #include "ns3/ndn-face.h"
-#include "ns3/ndn-name-components.h"
+#include "ns3/ndn-name.h"
 #include "ns3/ndn-limits.h"
 #include "ns3/traced-value.h"
 
@@ -40,7 +40,7 @@
 namespace ns3 {
 namespace ndn {
 
-class NameComponents;
+class Name;
 
 namespace fib {
 
@@ -245,7 +245,7 @@
    * \brief Constructor
    * \param prefix smart pointer to the prefix for the FIB entry
    */
-  Entry (const Ptr<const NameComponents> &prefix)
+  Entry (const Ptr<const Name> &prefix)
   : m_prefix (prefix)
   , m_needsProbing (false)
   {
@@ -287,7 +287,7 @@
   /**
    * \brief Get prefix for the FIB entry
    */
-  const NameComponents&
+  const Name&
   GetPrefix () const { return *m_prefix; }
 
   /**
@@ -311,7 +311,7 @@
   friend std::ostream& operator<< (std::ostream& os, const Entry &entry);
 
 public:
-  Ptr<const NameComponents> m_prefix; ///< \brief Prefix of the FIB entry
+  Ptr<const Name> m_prefix; ///< \brief Prefix of the FIB entry
   FaceMetricContainer::type m_faces; ///< \brief Indexed list of faces
 
   bool m_needsProbing;      ///< \brief flag indicating that probing should be performed
diff --git a/model/fib/ndn-fib-impl.cc b/model/fib/ndn-fib-impl.cc
index 3fc29a4..18ee6ac 100644
--- a/model/fib/ndn-fib-impl.cc
+++ b/model/fib/ndn-fib-impl.cc
@@ -85,13 +85,13 @@
 
 
 Ptr<Entry>
-FibImpl::Add (const NameComponents &prefix, Ptr<Face> face, int32_t metric)
+FibImpl::Add (const Name &prefix, Ptr<Face> face, int32_t metric)
 {
-  return Add (Create<NameComponents> (prefix), face, metric);
+  return Add (Create<Name> (prefix), face, metric);
 }
   
 Ptr<Entry>
-FibImpl::Add (const Ptr<const NameComponents> &prefix, Ptr<Face> face, int32_t metric)
+FibImpl::Add (const Ptr<const Name> &prefix, Ptr<Face> face, int32_t metric)
 {
   NS_LOG_FUNCTION (this->GetObject<Node> ()->GetId () << boost::cref(*prefix) << boost::cref(*face) << metric);
 
@@ -123,7 +123,7 @@
 }
 
 void
-FibImpl::Remove (const Ptr<const NameComponents> &prefix)
+FibImpl::Remove (const Ptr<const Name> &prefix)
 {
   NS_LOG_FUNCTION (this->GetObject<Node> ()->GetId () << boost::cref(*prefix));
 
@@ -140,7 +140,7 @@
 }
 
 // void
-// FibImpl::Invalidate (const Ptr<const NameComponents> &prefix)
+// FibImpl::Invalidate (const Ptr<const Name> &prefix)
 // {
 //   NS_LOG_FUNCTION (this->GetObject<Node> ()->GetId () << boost::cref(*prefix));
 
diff --git a/model/fib/ndn-fib-impl.h b/model/fib/ndn-fib-impl.h
index f47a7d1..9b45ba2 100644
--- a/model/fib/ndn-fib-impl.h
+++ b/model/fib/ndn-fib-impl.h
@@ -22,7 +22,7 @@
 #define	_NDN_FIB_IMPL_H_
 
 #include "ns3/ndn-fib.h"
-#include "ns3/ndn-name-components.h"
+#include "ns3/ndn-name.h"
 
 #include "../../utils/trie/trie-with-policy.h"
 #include "../../utils/trie/counting-policy.h"
@@ -35,12 +35,12 @@
 {
 public:
   typedef ndnSIM::trie_with_policy<
-    NameComponents,
+    Name,
     ndnSIM::smart_pointer_payload_traits<EntryImpl>,
     ndnSIM::counting_policy_traits
     > trie;
 
-  EntryImpl (const Ptr<const NameComponents> &prefix)
+  EntryImpl (const Ptr<const Name> &prefix)
     : Entry (prefix)
     , item_ (0)
   {
@@ -64,12 +64,12 @@
  * \brief Class implementing FIB functionality
  */
 class FibImpl : public Fib,
-                protected ndnSIM::trie_with_policy< NameComponents,
+                protected ndnSIM::trie_with_policy< Name,
                                                     ndnSIM::smart_pointer_payload_traits< EntryImpl >,
                                                     ndnSIM::counting_policy_traits >
 {
 public:
-  typedef ndnSIM::trie_with_policy< NameComponents,
+  typedef ndnSIM::trie_with_policy< Name,
                                     ndnSIM::smart_pointer_payload_traits<EntryImpl>,
                                     ndnSIM::counting_policy_traits > super;
   
@@ -89,13 +89,13 @@
   LongestPrefixMatch (const InterestHeader &interest);
   
   virtual Ptr<Entry>
-  Add (const NameComponents &prefix, Ptr<Face> face, int32_t metric);
+  Add (const Name &prefix, Ptr<Face> face, int32_t metric);
 
   virtual Ptr<Entry>
-  Add (const Ptr<const NameComponents> &prefix, Ptr<Face> face, int32_t metric);
+  Add (const Ptr<const Name> &prefix, Ptr<Face> face, int32_t metric);
 
   virtual void
-  Remove (const Ptr<const NameComponents> &prefix);
+  Remove (const Ptr<const Name> &prefix);
 
   virtual void
   InvalidateAll ();
diff --git a/model/fib/ndn-fib.h b/model/fib/ndn-fib.h
index 951f2cb..141a402 100644
--- a/model/fib/ndn-fib.h
+++ b/model/fib/ndn-fib.h
@@ -1,6 +1,6 @@
 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
 /*
- * Copyright (c) 2011 University of California, Los Angeles
+ * Copyright (c) 2011-2013 University of California, Los Angeles
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -60,7 +60,7 @@
    * \todo Implement exclude filters
    *
    * \param interest Interest packet header
-   * \returns If entry found a valid iterator will be returned, otherwise end ()
+   * \returns If entry found a valid iterator (Ptr<fib::Entry>) will be returned, otherwise End () (==0)
    */
   virtual Ptr<fib::Entry>
   LongestPrefixMatch (const InterestHeader &interest) = 0;
@@ -77,7 +77,7 @@
    * @param metric	Routing metric
    */
   virtual Ptr<fib::Entry>
-  Add (const NameComponents &prefix, Ptr<Face> face, int32_t metric) = 0;
+  Add (const Name &prefix, Ptr<Face> face, int32_t metric) = 0;
 
   /**
    * \brief Add or update FIB entry using smart pointer to prefix
@@ -91,7 +91,7 @@
    * @param metric	Routing metric
    */
   virtual Ptr<fib::Entry>
-  Add (const Ptr<const NameComponents> &prefix, Ptr<Face> face, int32_t metric) = 0;
+  Add (const Ptr<const Name> &prefix, Ptr<Face> face, int32_t metric) = 0;
 
   /**
    * @brief Remove FIB entry
@@ -102,7 +102,7 @@
    * @param name	Smart pointer to prefix
    */
   virtual void
-  Remove (const Ptr<const NameComponents> &prefix) = 0;
+  Remove (const Ptr<const Name> &prefix) = 0;
 
   // /**
   //  * @brief Invalidate FIB entry ("Safe" version of Remove)
@@ -111,7 +111,7 @@
   //  * @param name	Smart pointer to prefix
   //  */
   // virtual void
-  // Invalidate (const Ptr<const NameComponents> &prefix) = 0;
+  // Invalidate (const Ptr<const Name> &prefix) = 0;
 
   /**
    * @brief Invalidate all FIB entries
diff --git a/model/ndn-content-object.cc b/model/ndn-content-object.cc
index e03387c..91d890d 100644
--- a/model/ndn-content-object.cc
+++ b/model/ndn-content-object.cc
@@ -1,6 +1,6 @@
 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
 /*
- * Copyright (c) 2011 University of California, Los Angeles
+ * Copyright (c) 2011-2013 University of California, Los Angeles
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -25,76 +25,76 @@
 
 #include <boost/foreach.hpp>
 
-NS_LOG_COMPONENT_DEFINE ("ndn.ContentObjectHeader");
+NS_LOG_COMPONENT_DEFINE ("ndn.ContentObject");
 
 namespace ns3 {
 namespace ndn {
 
-NS_OBJECT_ENSURE_REGISTERED (ContentObjectHeader);
+NS_OBJECT_ENSURE_REGISTERED (ContentObject);
 NS_OBJECT_ENSURE_REGISTERED (ContentObjectTail);
 
 TypeId
-ContentObjectHeader::GetTypeId (void)
+ContentObject::GetTypeId (void)
 {
-  static TypeId tid = TypeId ("ns3::ndn::ContentObjectHeader")
+  static TypeId tid = TypeId ("ns3::ndn::ContentObject")
     .SetGroupName ("Ndn")
     .SetParent<Header> ()
-    .AddConstructor<ContentObjectHeader> ()
+    .AddConstructor<ContentObject> ()
     ;
   return tid;
 }
 
-ContentObjectHeader::ContentObjectHeader ()
+ContentObject::ContentObject ()
 {
 }
 
 void
-ContentObjectHeader::SetName (const Ptr<NameComponents> &name)
+ContentObject::SetName (const Ptr<Name> &name)
 {
   m_name = name;
 }
 
-const NameComponents&
-ContentObjectHeader::GetName () const
+const Name&
+ContentObject::GetName () const
 {
-  if (m_name==0) throw ContentObjectHeaderException();
+  if (m_name==0) throw ContentObjectException();
   return *m_name;
 }
 
-Ptr<const NameComponents>
-ContentObjectHeader::GetNamePtr () const
+Ptr<const Name>
+ContentObject::GetNamePtr () const
 {
   return m_name;
 }
 
 
 void
-ContentObjectHeader::SetTimestamp (const Time &timestamp)
+ContentObject::SetTimestamp (const Time &timestamp)
 {
   m_timestamp = timestamp;
 }
 
 Time
-ContentObjectHeader::GetTimestamp () const
+ContentObject::GetTimestamp () const
 {
   return m_timestamp;
 }
     
 void
-ContentObjectHeader::SetFreshness (const Time &freshness)
+ContentObject::SetFreshness (const Time &freshness)
 {
   m_freshness = freshness;
 }
 
 Time
-ContentObjectHeader::GetFreshness () const
+ContentObject::GetFreshness () const
 {
   return m_freshness;
 }
 
 
 uint32_t
-ContentObjectHeader::GetSerializedSize () const
+ContentObject::GetSerializedSize () const
 {
   uint32_t size = 2 + ((2 + 2) + (m_name->GetSerializedSize ()) + (2 + 2 + 4 + 2 + 2 + (2 + 0)));
   NS_LOG_INFO ("Serialize size = " << size);
@@ -102,7 +102,7 @@
 }
 
 void
-ContentObjectHeader::Serialize (Buffer::Iterator start) const
+ContentObject::Serialize (Buffer::Iterator start) const
 {
   start.WriteU8 (0x80); // version
   start.WriteU8 (0x01); // packet type
@@ -129,54 +129,54 @@
 
 
 uint32_t
-ContentObjectHeader::Deserialize (Buffer::Iterator start)
+ContentObject::Deserialize (Buffer::Iterator start)
 {
   Buffer::Iterator i = start;
 
   if (i.ReadU8 () != 0x80)
-    throw new ContentObjectHeaderException ();
+    throw new ContentObjectException ();
 
   if (i.ReadU8 () != 0x01)
-    throw new ContentObjectHeaderException ();
+    throw new ContentObjectException ();
 
   if (i.ReadU16 () != 2) // signature length
-    throw new ContentObjectHeaderException ();
+    throw new ContentObjectException ();
   
   if (i.ReadU16 () != 0) // signature type
-    throw new ContentObjectHeaderException ();
+    throw new ContentObjectException ();
 
-  m_name = Create<NameComponents> ();
+  m_name = Create<Name> ();
   uint32_t offset = m_name->Deserialize (i);
   i.Next (offset);
 
   if (i.ReadU16 () != (2 + 4 + 2 + 2 + (2 + 0))) // content length
-    throw new ContentObjectHeaderException ();
+    throw new ContentObjectException ();
 
   if (i.ReadU16 () != (4 + 2 + 2 + (2 + 0))) // Length (content Info)
-    throw new ContentObjectHeaderException ();
+    throw new ContentObjectException ();
 
   m_timestamp = Seconds (i.ReadU32 ());
   m_freshness = Seconds (i.ReadU16 ());
 
   if (i.ReadU16 () != 0) // Reserved
-    throw new ContentObjectHeaderException ();
+    throw new ContentObjectException ();
   if (i.ReadU16 () != 0) // Length (ContentInfoOptions)
-    throw new ContentObjectHeaderException ();
+    throw new ContentObjectException ();
 
   NS_ASSERT_MSG (i.GetDistanceFrom (start) == GetSerializedSize (),
-                 "Something wrong with ContentObjectHeader::Deserialize");
+                 "Something wrong with ContentObject::Deserialize");
   
   return i.GetDistanceFrom (start);
 }
   
 TypeId
-ContentObjectHeader::GetInstanceTypeId (void) const
+ContentObject::GetInstanceTypeId (void) const
 {
   return GetTypeId ();
 }
   
 void
-ContentObjectHeader::Print (std::ostream &os) const
+ContentObject::Print (std::ostream &os) const
 {
   os << "D: " << GetName ();
   // os << "<ContentObject><Name>" << GetName () << "</Name><Content>";
diff --git a/model/ndn-content-object.h b/model/ndn-content-object.h
index 79f04df..db7bdcf 100644
--- a/model/ndn-content-object.h
+++ b/model/ndn-content-object.h
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 /*
- * Copyright (c) 2011 University of California, Los Angeles
+ * Copyright (c) 2011-2013 University of California, Los Angeles
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -32,7 +32,7 @@
 #include <vector>
 #include <list>
 
-#include "ndn-name-components.h"
+#include "ndn-name.h"
 
 namespace ns3 {
 namespace ndn {
@@ -56,7 +56,7 @@
  * "<ContentObject><Signature>..</Signature><Name>...</Name><SignedInfo>...</SignedInfo><Content>"
  * 
  */
-class ContentObjectHeader : public SimpleRefCount<ContentObjectHeader,Header>
+class ContentObject : public SimpleRefCount<ContentObject,Header>
 {
 public:
   /**
@@ -64,26 +64,26 @@
    *
    * Creates a null header
    **/
-  ContentObjectHeader ();
+  ContentObject ();
 
   /**
    * \brief Set content object name
    *
-   * Sets name of the content object. For example, SetName( NameComponents("prefix")("postfix") );
+   * Sets name of the content object. For example, SetName( Name("prefix")("postfix") );
    **/
   void
-  SetName (const Ptr<NameComponents> &name);
+  SetName (const Ptr<Name> &name);
 
   /**
    * @brief Get name of the content object
    */
-  const NameComponents&
+  const Name&
   GetName () const;
 
   /**
    * @brief Get smart pointer to the interest name (to avoid extra memory usage)
    */
-  Ptr<const NameComponents>
+  Ptr<const Name>
   GetNamePtr () const;
 
   /**
@@ -122,11 +122,13 @@
   virtual uint32_t Deserialize (Buffer::Iterator start); ///< @brief Deserialize the Header
   
 private:
-  Ptr<NameComponents> m_name;
+  Ptr<Name> m_name;
   Time m_freshness;
   Time m_timestamp;
 };
 
+class ContentObjectHeader : public ContentObject { };
+
 /**
  * ContentObjectTail for compatibility with other packet formats
  */
diff --git a/model/ndn-global-router.cc b/model/ndn-global-router.cc
index 8020f43..b3a0b1b 100644
--- a/model/ndn-global-router.cc
+++ b/model/ndn-global-router.cc
@@ -22,7 +22,7 @@
 
 #include "ns3/ndn-l3-protocol.h"
 #include "ns3/ndn-face.h"
-#include "ns3/ndn-name-components.h"
+#include "ns3/ndn-name.h"
 
 #include "ns3/channel.h"
 
@@ -74,7 +74,7 @@
 }
 
 void
-GlobalRouter::AddLocalPrefix (Ptr< NameComponents > prefix)
+GlobalRouter::AddLocalPrefix (Ptr< Name > prefix)
 {
   m_localPrefixes.push_back (prefix);
 }
diff --git a/model/ndn-global-router.h b/model/ndn-global-router.h
index d277bb8..582b6e1 100644
--- a/model/ndn-global-router.h
+++ b/model/ndn-global-router.h
@@ -35,7 +35,7 @@
 
 class L3Protocol;
 class Face;
-class NameComponents;
+class Name;
 
 /**
  * @brief Class representing global router interface for ndnSIM
@@ -54,7 +54,7 @@
   /**
    * @brief List of locally exported prefixes
    */
-  typedef std::list< Ptr<NameComponents> > LocalPrefixList;
+  typedef std::list< Ptr<Name> > LocalPrefixList;
   
   /**
    * \brief Interface ID
@@ -86,7 +86,7 @@
    * @param prefix Prefix
    */
   void
-  AddLocalPrefix (Ptr< NameComponents > prefix);
+  AddLocalPrefix (Ptr< Name > prefix);
 
   /**
    * @brief Add edge to the node
diff --git a/model/ndn-interest.cc b/model/ndn-interest.cc
index dae23ab..362dfe2 100644
--- a/model/ndn-interest.cc
+++ b/model/ndn-interest.cc
@@ -53,7 +53,7 @@
 }
 
 InterestHeader::InterestHeader (const InterestHeader &interest)
-  : m_name                (Create<NameComponents> (interest.GetName ()))
+  : m_name                (Create<Name> (interest.GetName ()))
   , m_scope               (interest.m_scope)
   , m_interestLifetime    (interest.m_interestLifetime)
   , m_nonce               (interest.m_nonce)
@@ -71,19 +71,19 @@
 }
 
 void
-InterestHeader::SetName (Ptr<NameComponents> name)
+InterestHeader::SetName (Ptr<Name> name)
 {
   m_name = name;
 }
 
-const NameComponents&
+const Name&
 InterestHeader::GetName () const
 {
   if (m_name==0) throw InterestHeaderException();
   return *m_name;
 }
 
-Ptr<const NameComponents>
+Ptr<const Name>
 InterestHeader::GetNamePtr () const
 {
   return m_name;
@@ -186,7 +186,7 @@
   
   m_interestLifetime = Seconds (i.ReadU16 ());
 
-  m_name = Create<NameComponents> ();
+  m_name = Create<Name> ();
   uint32_t offset = m_name->Deserialize (i);
   i.Next (offset);
   
diff --git a/model/ndn-interest.h b/model/ndn-interest.h
index 096dc7b..1ee3010 100644
--- a/model/ndn-interest.h
+++ b/model/ndn-interest.h
@@ -31,7 +31,7 @@
 #include <vector>
 #include <list>
 
-#include "ndn-name-components.h"
+#include "ndn-name.h"
 
 namespace ns3 {
 
@@ -83,7 +83,7 @@
   *        |							           |	
   *        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   * **/
-class InterestHeader : public SimpleRefCount<InterestHeader, Header>
+class Interest : public SimpleRefCount<Interest, Header>
 {
 public:
   /**
@@ -91,34 +91,34 @@
    *
    * Creates a null header
    **/
-  InterestHeader ();
+  Interest ();
 
   /**
    * @brief Copy constructor
    */
-  InterestHeader (const InterestHeader &interest);
+  Interest (const Interest &interest);
 
   /**
    * \brief Set interest name
    *
-   * Sets name of the interest. For example, SetName( ndnNameComponents("prefix")("postfix") );
-   * @param[in] name const pointer to ndnNameComponents object that contains an interest name
+   * Sets name of the interest. For example, SetName( ndnName("prefix")("postfix") );
+   * @param[in] name const pointer to ndnName object that contains an interest name
    **/
   void
-  SetName (Ptr<NameComponents> name);
+  SetName (Ptr<Name> name);
 
   /**
    * \brief Get interest name
    *
    * Gets name of the interest.
    **/
-  const NameComponents&
+  const Name&
   GetName () const;
 
   /**
    * @brief Get smart pointer to the interest name (to avoid extra memory usage)
    */
-  Ptr<const NameComponents>
+  Ptr<const Name>
   GetNamePtr () const;
 
   /**
@@ -245,17 +245,19 @@
   /**
    * @brief Cheat for python bindings
    */
-  static Ptr<InterestHeader>
+  static Ptr<Interest>
   GetInterest (Ptr<Packet> packet);
   
 private:
-  Ptr<NameComponents> m_name;    ///< Interest name
+  Ptr<Name> m_name;    ///< Interest name
   uint8_t m_scope;                ///< 0xFF not set, 0 local scope, 1 this host, 2 immediate neighborhood
   Time  m_interestLifetime;      ///< InterestLifetime
   uint32_t m_nonce;              ///< Nonce. not used if zero
   uint8_t  m_nackType;           ///< Negative Acknowledgement type
 };
 
+class InterestHeader : public Interest { };
+
 /**
  * @ingroup ndn-exceptions
  * @brief Class for Interest parsing exception 
diff --git a/model/ndn-name.cc b/model/ndn-name.cc
index 8e7a872..a1624fb 100644
--- a/model/ndn-name.cc
+++ b/model/ndn-name.cc
@@ -19,7 +19,7 @@
  *         Ilya Moiseenko <iliamo@cs.ucla.edu>
  */
 
-#include "ndn-name-components.h"
+#include "ndn-name.h"
 #include <boost/foreach.hpp>
 #include "ns3/log.h"
 
@@ -33,7 +33,6 @@
 namespace ndn {
 
 ATTRIBUTE_HELPER_CPP (Name);
-ATTRIBUTE_HELPER_CPP (NameComponents);
 
 Name::Name (/* root */)
 {
diff --git a/model/ndn-name.h b/model/ndn-name.h
index 7f24784..2f01f36 100644
--- a/model/ndn-name.h
+++ b/model/ndn-name.h
@@ -302,23 +302,8 @@
 
 ATTRIBUTE_HELPER_HEADER (Name);
 
-/**
- * @ingroup Ndn
- * @brief For backwards compatibility
- */
-class NameComponents : public Name
-{
-public:
-  NameComponents () : Name () { }
-
-  NameComponents (const std::list<boost::reference_wrapper<const std::string> > &components) : Name (components) { }
-
-  NameComponents (const std::string &prefix) : Name (prefix) { }
-
-  NameComponents (const char *prefix) : Name (prefix) { }
-};
-
-ATTRIBUTE_HELPER_HEADER (NameComponents);
+// for backwards compatibility
+typedef Name NameComponents;
 
 } // namespace ndn
 } // namespace ns3
diff --git a/model/ndn-net-device-face.cc b/model/ndn-net-device-face.cc
index 997195f..67dc659 100644
--- a/model/ndn-net-device-face.cc
+++ b/model/ndn-net-device-face.cc
@@ -31,7 +31,7 @@
 // #include "ns3/address.h"
 #include "ns3/point-to-point-net-device.h"
 #include "ns3/channel.h"
-#include "ns3/ndn-name-components.h"
+#include "ns3/ndn-name.h"
 
 NS_LOG_COMPONENT_DEFINE ("ndn.NetDeviceFace");
 
diff --git a/model/pit/ndn-pit-entry.cc b/model/pit/ndn-pit-entry.cc
index accfcf1..6d16048 100644
--- a/model/pit/ndn-pit-entry.cc
+++ b/model/pit/ndn-pit-entry.cc
@@ -21,7 +21,7 @@
 #include "ndn-pit-entry.h"
 
 #include "ns3/ndn-fib.h"
-#include "ns3/ndn-name-components.h"
+#include "ns3/ndn-name.h"
 #include "ns3/ndn-interest.h"
 
 #include "ns3/simulator.h"
@@ -82,7 +82,7 @@
 }
 
 
-const NameComponents &
+const Name &
 Entry::GetPrefix () const
 {
   return m_interest->GetName ();
diff --git a/model/pit/ndn-pit-entry.h b/model/pit/ndn-pit-entry.h
index 9680ac2..694fd9f 100644
--- a/model/pit/ndn-pit-entry.h
+++ b/model/pit/ndn-pit-entry.h
@@ -137,7 +137,7 @@
   /**
    * @brief Get prefix of the PIT entry
    */
-  const NameComponents &
+  const Name &
   GetPrefix () const;
 
   /**
diff --git a/model/pit/ndn-pit-impl.h b/model/pit/ndn-pit-impl.h
index 7a346d2..bd86838 100644
--- a/model/pit/ndn-pit-impl.h
+++ b/model/pit/ndn-pit-impl.h
@@ -27,7 +27,7 @@
 
 #include "ndn-pit-entry-impl.h"
 
-#include "ns3/ndn-name-components.h"
+#include "ns3/ndn-name.h"
 
 namespace ns3 {
 namespace ndn {
@@ -42,14 +42,14 @@
  */
 template<class Policy>
 class PitImpl : public Pit
-              , protected ndnSIM::trie_with_policy<NameComponents,
+              , protected ndnSIM::trie_with_policy<Name,
                                                    ndnSIM::smart_pointer_payload_traits< EntryImpl< PitImpl< Policy > > >,
                                                    // ndnSIM::persistent_policy_traits
                                                    Policy
                                                    >
 {
 public:
-  typedef ndnSIM::trie_with_policy<NameComponents,
+  typedef ndnSIM::trie_with_policy<Name,
                                    ndnSIM::smart_pointer_payload_traits< EntryImpl< PitImpl< Policy > > >,
                                    // ndnSIM::persistent_policy_traits
                                    Policy
diff --git a/test/ndnSIM-fib-entry.cc b/test/ndnSIM-fib-entry.cc
index 2fbdb85..4d563c7 100644
--- a/test/ndnSIM-fib-entry.cc
+++ b/test/ndnSIM-fib-entry.cc
@@ -45,7 +45,7 @@
     ndn::App::StartApplication ();
 
     // add default route
-    Ptr<ndn::fib::Entry> fibEntry = GetNode ()->GetObject<ndn::Fib> ()->Add (ndn::NameComponents ("/"), m_face, 0);
+    Ptr<ndn::fib::Entry> fibEntry = GetNode ()->GetObject<ndn::Fib> ()->Add (ndn::Name ("/"), m_face, 0);
     fibEntry->UpdateStatus (m_face, ndn::fib::FaceMetric::NDN_FIB_GREEN);
 
     Simulator::Schedule (Seconds (0.5), &Client::SendPacket, this, std::string("/1"), 1);
@@ -64,7 +64,7 @@
   {
     Ptr<Packet> pkt = Create<Packet> (0);
     ndn::InterestHeader i;
-    i.SetName (Create<ndn::NameComponents> (prefix));
+    i.SetName (Create<ndn::Name> (prefix));
     i.SetNonce (nonce);
     i.SetInterestLifetime (Seconds (0.5));
 
diff --git a/test/ndnSIM-pit.cc b/test/ndnSIM-pit.cc
index 18c2751..c1ba4c1 100644
--- a/test/ndnSIM-pit.cc
+++ b/test/ndnSIM-pit.cc
@@ -39,7 +39,7 @@
     ndn::App::StartApplication ();
 
     // add default route
-    Ptr<ndn::fib::Entry> fibEntry = GetNode ()->GetObject<ndn::Fib> ()->Add (ndn::NameComponents ("/"), m_face, 0);
+    Ptr<ndn::fib::Entry> fibEntry = GetNode ()->GetObject<ndn::Fib> ()->Add (ndn::Name ("/"), m_face, 0);
     fibEntry->UpdateStatus (m_face, ndn::fib::FaceMetric::NDN_FIB_GREEN);
     
     Simulator::Schedule (Seconds (0.1), &Client::SendPacket, this, std::string("/1"), 1);
@@ -60,7 +60,7 @@
   {
     Ptr<Packet> pkt = Create<Packet> (0);
     ndn::InterestHeader i;
-    i.SetName (Create<ndn::NameComponents> (prefix));
+    i.SetName (Create<ndn::Name> (prefix));
     i.SetNonce (nonce);
     i.SetInterestLifetime (Seconds (0.5));
 
@@ -75,7 +75,7 @@
   NS_TEST_ASSERT_MSG_EQ (fib->GetSize (), 1, "There should be only one entry");
 
   Ptr<const ndn::fib::Entry> fibEntry = fib->Begin ();
-  NS_TEST_ASSERT_MSG_EQ (fibEntry->GetPrefix (), ndn::NameComponents ("/"), "prefix should be /");
+  NS_TEST_ASSERT_MSG_EQ (fibEntry->GetPrefix (), ndn::Name ("/"), "prefix should be /");
 }
 
 void
diff --git a/test/ndnSIM-serialization.cc b/test/ndnSIM-serialization.cc
index 1ce7130..16ddb51 100644
--- a/test/ndnSIM-serialization.cc
+++ b/test/ndnSIM-serialization.cc
@@ -38,8 +38,8 @@
 {
   InterestHeader source;
   
-  source.SetName (Create<NameComponents> (boost::lexical_cast<NameComponents> ("/test/test2")));
-  NS_TEST_ASSERT_MSG_EQ (source.GetName (), boost::lexical_cast<NameComponents> ("/test/test2"), "set/get name failed");
+  source.SetName (Create<Name> (boost::lexical_cast<Name> ("/test/test2")));
+  NS_TEST_ASSERT_MSG_EQ (source.GetName (), boost::lexical_cast<Name> ("/test/test2"), "set/get name failed");
   
   source.SetScope (2);
   NS_TEST_ASSERT_MSG_EQ (source.GetScope (), 2, "set/get scope failed");
@@ -73,8 +73,8 @@
 {
   ContentObjectHeader source;
   
-  source.SetName (Create<NameComponents> (boost::lexical_cast<NameComponents> ("/test/test2/1")));
-  NS_TEST_ASSERT_MSG_EQ (source.GetName (), boost::lexical_cast<NameComponents> ("/test/test2/1"), "set/get name failed");
+  source.SetName (Create<Name> (boost::lexical_cast<Name> ("/test/test2/1")));
+  NS_TEST_ASSERT_MSG_EQ (source.GetName (), boost::lexical_cast<Name> ("/test/test2/1"), "set/get name failed");
   
   source.SetFreshness (Seconds (10));
   NS_TEST_ASSERT_MSG_EQ (source.GetFreshness (), Seconds (10), "set/get freshness failed");
diff --git a/test/ndnSIM-trie.cc b/test/ndnSIM-trie.cc
index ed8356e..ee53ad4 100644
--- a/test/ndnSIM-trie.cc
+++ b/test/ndnSIM-trie.cc
@@ -60,7 +60,7 @@
 {
   cerr << "TrieTest is temporarily broken" << endl;
   // typedef trie_with_policy<
-  //   ns3::NdnNameComponents,
+  //   ns3::NdnName,
   //   smart_pointer_payload_traits<Integer>,
   //   multi_policy_traits<
   //     mpl::vector2<lru_policy_traits,random_policy_traits>
@@ -75,7 +75,7 @@
   
   // // // // x.getTrie ().PrintStat (std::cout);
   
-  // ns3::NdnNameComponents n1,n2,n3,n4;
+  // ns3::NdnName n1,n2,n3,n4;
   // // // // n1("a")("b")("c");
   // // // // n2("a")("b")("d");
   // // // // n3("a")("b")("f");
@@ -108,12 +108,12 @@
   // node->AggregateObject (fib);
   // Ptr<ndn::Face> face = CreateObject<ndn::AppFace> (app);
 
-  // fib->Add (lexical_cast<ndn::NameComponents> ("/bla"), face, 1);
-  // fib->Add (lexical_cast<ndn::NameComponents> ("/bla/1"), face, 1);
-  // fib->Add (lexical_cast<ndn::NameComponents> ("/bla/2"), face, 1);
-  // fib->Add (lexical_cast<ndn::NameComponents> ("/bla/3"), face, 1);
-  // fib->Add (lexical_cast<ndn::NameComponents> ("/bla/1/1"), face, 1);
-  // fib->Add (lexical_cast<ndn::NameComponents> ("/bla/1/2"), face, 1);
+  // fib->Add (lexical_cast<ndn::Name> ("/bla"), face, 1);
+  // fib->Add (lexical_cast<ndn::Name> ("/bla/1"), face, 1);
+  // fib->Add (lexical_cast<ndn::Name> ("/bla/2"), face, 1);
+  // fib->Add (lexical_cast<ndn::Name> ("/bla/3"), face, 1);
+  // fib->Add (lexical_cast<ndn::Name> ("/bla/1/1"), face, 1);
+  // fib->Add (lexical_cast<ndn::Name> ("/bla/1/2"), face, 1);
   
   // cout << *fib << endl;
 
@@ -125,7 +125,7 @@
   //     std::cout << *item.payload () << " " << std::endl;
   //   }
 
-  // ns3::NdnNameComponents n4;
+  // ns3::NdnName n4;
   // n4("a")("c");
     
   // // std::cout << *x->find (n4).get<0> ();