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
