diff --git a/apps/ccnx-interest-sender.cc b/apps/ccnx-interest-sender.cc
index f7b7ac0..6ca40a3 100644
--- a/apps/ccnx-interest-sender.cc
+++ b/apps/ccnx-interest-sender.cc
@@ -37,14 +37,14 @@
                    TimeValue (Seconds (0.1)),
                    MakeTimeAccessor (&CcnxInterestSender::m_offTime),
                    MakeTimeChecker ())
-    /*.AddAttribute ("NameComponents","CcnxName of the Interest (use Name::Components)",
-                   Name::ComponentsValue(Name::Components()),
-                   Name::MakeComponentsAccessor(&CcnxInterestSender::m_interestName),
-                   Name::MakeComponentsChecker())*/
-    .AddAttribute ("NameComponents","CcnxName of the Interest (use Name::Components)",
-                   PointerValue (CreateObject<Name::Components> ()),
+    /*.AddAttribute ("NameComponents","CcnxName of the Interest (use CcnxNameComponents)",
+                   CcnxNameComponentsValue(CcnxNameComponents()),
+                   MakeCcnxNameComponentsAccessor(&CcnxInterestSender::m_interestName),
+                   MakeCcnxNameComponentsChecker())*/
+    .AddAttribute ("InterestName","CcnxName of the Interest (use CcnxNameComponents)",
+                   PointerValue (CreateObject<CcnxNameComponents> ()),
                    MakePointerAccessor (&CcnxInterestSender::m_interestName),
-                   MakePointerChecker<Name::Components> ())
+                   MakePointerChecker<CcnxNameComponents> ())
     .AddAttribute ("LifeTime", "LifeTime fo interest packet",
                    TimeValue (Seconds (4.0)),
                    MakeTimeAccessor (&CcnxInterestSender::m_interestLifeTime),
@@ -61,14 +61,14 @@
                    BooleanValue(false),
                    MakeBooleanAccessor(&CcnxInterestSender::m_childSelector),
                    MakeBooleanChecker())
-    /*.AddAttribute ("Exclude","only simple name matching is supported (use Name::Components)",
-                   Name::ComponentsValue(Name::Components()),
-                   Name::MakeComponentsAccessor(&CcnxInterestSender::m_exclude),
-                   Name::MakeComponentsChecker())*/
-    .AddAttribute ("Exclude", "only simple name matching is supported (use Name::Components)",
-                   PointerValue (CreateObject<Name::Components> ()),
+    /*.AddAttribute ("Exclude","only simple name matching is supported (use CcnxNameComponents)",
+                   CcnxNameComponentsValue(CcnxNameComponents()),
+                   MakeCcnxNameComponentsAccessor(&CcnxInterestSender::m_exclude),
+                   MakeCcnxNameComponentsChecker())*/
+    .AddAttribute ("Exclude", "only simple name matching is supported (use CcnxNameComponents)",
+                   PointerValue (CreateObject<CcnxNameComponents> ()),
                    MakePointerAccessor (&CcnxInterestSender::m_exclude),
-                   MakePointerChecker<Name::Components> ())
+                   MakePointerChecker<CcnxNameComponents> ())
     .AddAttribute ("Initial Nonce", "If 0 then nonce is not used",
                    UintegerValue(1),
                    MakeUintegerAccessor(&CcnxInterestSender::m_initialNonce),
@@ -143,11 +143,11 @@
     uint32_t randomNonce = UniformVariable().GetInteger(1, std::numeric_limits<uint32_t>::max ());
     CcnxInterestHeader interestHeader;
     interestHeader.SetNonce(randomNonce);
-    //const Ptr<Name::Components> name = Create<Name::Components>(m_interestName);
+    //const Ptr<CcnxNameComponents> name = Create<CcnxNameComponents>(m_interestName);
     interestHeader.SetName(m_interestName);
     interestHeader.SetInterestLifetime(m_interestLifeTime);
     interestHeader.SetChildSelector(m_childSelector);
-    //const Ptr<Name::Components> exclude = Create<Name::Components>(m_exclude);
+    //const Ptr<CcnxNameComponents> exclude = Create<CcnxNameComponents>(m_exclude);
     interestHeader.SetExclude(m_exclude);
     interestHeader.SetMaxSuffixComponents(m_maxSuffixComponents);
     interestHeader.SetMinSuffixComponents(m_minSuffixComponents);
diff --git a/apps/ccnx-interest-sender.h b/apps/ccnx-interest-sender.h
index 0a9d2b5..345da02 100644
--- a/apps/ccnx-interest-sender.h
+++ b/apps/ccnx-interest-sender.h
@@ -59,12 +59,12 @@
         
     //Time m_onTime;
     Time m_offTime;
-    Ptr<Name::Components> m_interestName;
+    Ptr<CcnxNameComponents> m_interestName;
     Time m_interestLifeTime;
     int32_t m_minSuffixComponents;
     int32_t m_maxSuffixComponents;
     bool m_childSelector;
-    Ptr<Name::Components> m_exclude;
+    Ptr<CcnxNameComponents> m_exclude;
     uint32_t m_initialNonce;
     
     //EventId         m_startStopEvent;     // Event id for next start or stop event
@@ -78,12 +78,12 @@
     void Construct (Ptr<Node> n,
                     std::string tid,
                     const Time& offtime,
-                    Ptr<Name::Components> nameComponents,
+                    Ptr<CcnxNameComponents> nameComponents,
                     const Time& lifetime,
                     const int32_t& minSuffixComponents,
                     const int32_t& maxSuffixComponents,
                     const bool childSelector,
-                    Ptr<Name::Components> exclude,
+                    Ptr<CcnxNameComponents> exclude,
                     const uint32_t& initialNonce
                     );
     
diff --git a/examples/annotated-topology-read-example.cc b/examples/annotated-topology-read-example.cc
index 53018a9..63e42c4 100644
--- a/examples/annotated-topology-read-example.cc
+++ b/examples/annotated-topology-read-example.cc
@@ -30,7 +30,7 @@
 #include "ns3/ipv4-list-routing-helper.h"
 #include "ns3/annotated-topology-reader.h"
 #include <list>
-#include "ns3/visualizer-module.h"
+//#include "ns3/visualizer-module.h"
 
 using namespace ns3;
 using namespace std;
@@ -107,7 +107,7 @@
     ///*** settings applied
     
     
-    
+     
     
     // it creates little subnets, one for each couple of nodes.
     NS_LOG_INFO ("creating ipv4 interfaces");
diff --git a/examples/ccnx-test.cc b/examples/ccnx-test.cc
index 174d29e..e6242ab 100644
--- a/examples/ccnx-test.cc
+++ b/examples/ccnx-test.cc
@@ -52,7 +52,7 @@
   Ptr<CcnxRit> rit = CreateObject<CcnxRit> ();
 
   CcnxInterestHeader header;
-  Ptr<Name::Components> testname = Create<Name::Components> ();
+  Ptr<CcnxNameComponents> testname = Create<CcnxNameComponents> ();
   (*testname) ("test") ("test2");
   header.SetName (testname);
   header.SetNonce (1);
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-content-object-visitor.cc b/helper/ccnb-parser/visitors/ccnb-parser-content-object-visitor.cc
index d694f11..d252cd5 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-content-object-visitor.cc
+++ b/helper/ccnb-parser/visitors/ccnb-parser-content-object-visitor.cc
@@ -55,7 +55,7 @@
     case CCN_DTAG_Name:
       {
         // process name components
-        Ptr<Name::Components> name = Create<Name::Components> ();
+        Ptr<CcnxNameComponents> name = Create<CcnxNameComponents> ();
         
         BOOST_FOREACH (Ptr<Block> block, n.m_nestedTags)
           {
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-interest-visitor.cc b/helper/ccnb-parser/visitors/ccnb-parser-interest-visitor.cc
index 70578e7..05c6beb 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-interest-visitor.cc
+++ b/helper/ccnb-parser/visitors/ccnb-parser-interest-visitor.cc
@@ -63,7 +63,7 @@
     case CCN_DTAG_Name:
       {
         // process name components
-        Ptr<Name::Components> name = Create<Name::Components> ();
+        Ptr<CcnxNameComponents> name = Create<CcnxNameComponents> ();
         
         BOOST_FOREACH (Ptr<Block> block, n.m_nestedTags)
           {
@@ -93,7 +93,7 @@
     case CCN_DTAG_Exclude:
       {
         // process exclude components
-        Ptr<Name::Components> exclude = Create<Name::Components> ();
+        Ptr<CcnxNameComponents> exclude = Create<CcnxNameComponents> ();
         
         BOOST_FOREACH (Ptr<Block> block, n.m_nestedTags)
           {
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-name-components-visitor.cc b/helper/ccnb-parser/visitors/ccnb-parser-name-components-visitor.cc
index 3138be1..49b2fc5 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-name-components-visitor.cc
+++ b/helper/ccnb-parser/visitors/ccnb-parser-name-components-visitor.cc
@@ -28,13 +28,13 @@
 namespace CcnbParser {
 
 void
-NameComponentsVisitor::visit (Dtag &n, boost::any param/*should be Name::Components&*/)
+NameComponentsVisitor::visit (Dtag &n, boost::any param/*should be CcnxNameComponents&*/)
 {
   // uint32_t n.m_dtag;
   // std::list<Ptr<Block> > n.m_nestedBlocks;
   static StringVisitor stringVisitor; 
  
-  Name::Components &components = boost::any_cast<Name::Components&> (param);
+  CcnxNameComponents &components = boost::any_cast<CcnxNameComponents&> (param);
 
   switch (n.m_dtag)
     {
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-name-components-visitor.h b/helper/ccnb-parser/visitors/ccnb-parser-name-components-visitor.h
index c68eb56..e4b92cf 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-name-components-visitor.h
+++ b/helper/ccnb-parser/visitors/ccnb-parser-name-components-visitor.h
@@ -28,12 +28,12 @@
 
 /**
  * \ingroup ccnx-ccnb
- * \brief Visitor to obtain fill Name::Components object with name components
+ * \brief Visitor to obtain fill CcnxNameComponents object with name components
  */
 class NameComponentsVisitor : public VoidDepthFirstVisitor
 {
 public:
-  virtual void visit (Dtag &n, boost::any param/*should be Name::Components&*/);
+  virtual void visit (Dtag &n, boost::any param/*should be CcnxNameComponents&*/);
 };
 
 }
diff --git a/helper/ccnx-encoding-helper.cc b/helper/ccnx-encoding-helper.cc
index 7783d7a..6a4d889 100644
--- a/helper/ccnx-encoding-helper.cc
+++ b/helper/ccnx-encoding-helper.cc
@@ -76,7 +76,7 @@
 }
 
 size_t
-CcnxEncodingHelper::AppendNameComponents (Buffer::Iterator start, const Name::Components &name)
+CcnxEncodingHelper::AppendNameComponents (Buffer::Iterator start, const CcnxNameComponents &name)
 {
   size_t written = 0;
   BOOST_FOREACH (const std::string &component, name.GetComponents())
diff --git a/helper/ccnx-encoding-helper.h b/helper/ccnx-encoding-helper.h
index da5066a..6e3c1c4 100644
--- a/helper/ccnx-encoding-helper.h
+++ b/helper/ccnx-encoding-helper.h
@@ -30,7 +30,7 @@
 
 namespace ns3 {
 
-namespace Name{ class Components; }
+class CcnxNameComponents;
 
 class CcnxInterestHeader;
 class CcnxContentObjectHeader;
@@ -59,7 +59,7 @@
   AppendCloser (Buffer::Iterator start);
 
   static size_t
-  AppendNameComponents (Buffer::Iterator start, const Name::Components &name);
+  AppendNameComponents (Buffer::Iterator start, const CcnxNameComponents &name);
 
   /**
    * Append a binary timestamp as a BLOB using the ccn binary
diff --git a/model/ccnx-content-object-header.cc b/model/ccnx-content-object-header.cc
index d1ad0cf..ff849bc 100644
--- a/model/ccnx-content-object-header.cc
+++ b/model/ccnx-content-object-header.cc
@@ -49,12 +49,12 @@
 }
 
 void
-CcnxContentObjectHeader::SetName (const Ptr<Name::Components> &name)
+CcnxContentObjectHeader::SetName (const Ptr<CcnxNameComponents> &name)
 {
   m_name = name;
 }
 
-const Name::Components&
+const CcnxNameComponents&
 CcnxContentObjectHeader::GetName () const
 {
   return *m_name;
diff --git a/model/ccnx-content-object-header.h b/model/ccnx-content-object-header.h
index 97a8d3d..cebfd4d 100644
--- a/model/ccnx-content-object-header.h
+++ b/model/ccnx-content-object-header.h
@@ -63,12 +63,12 @@
   /**
    * \brief Set interest name
    *
-   * Sets name of the interest. For example, SetName( Name::Components("prefix")("postfix") );
+   * Sets name of the interest. For example, SetName( CcnxNameComponents("prefix")("postfix") );
    **/
   void
-  SetName (const Ptr<Name::Components> &name);
+  SetName (const Ptr<CcnxNameComponents> &name);
 
-  const Name::Components&
+  const CcnxNameComponents&
   GetName () const;
 
   // void
@@ -93,7 +93,7 @@
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
 private:
-  Ptr<Name::Components> m_name;
+  Ptr<CcnxNameComponents> m_name;
   // m_signature;
   // m_signedInfo;
 };
diff --git a/model/ccnx-content-store.h b/model/ccnx-content-store.h
index fb68981..dfd6e30 100644
--- a/model/ccnx-content-store.h
+++ b/model/ccnx-content-store.h
@@ -73,7 +73,7 @@
    * \brief Get prefix of the stored entry
    * \returns prefix of the stored entry
    */
-  inline const Name::Components&
+  inline const CcnxNameComponents&
   GetName () const;
 
   /**
@@ -142,7 +142,7 @@
       boost::multi_index::hashed_unique<
         boost::multi_index::tag<__ccnx_private_content_store::hash>,
         boost::multi_index::const_mem_fun<CcnxContentStoreEntry,
-                                          const Name::Components&,
+                                          const CcnxNameComponents&,
                                           &CcnxContentStoreEntry::GetName>,
         CcnxPrefixHash>,
       boost::multi_index::sequenced<boost::multi_index::tag<__ccnx_private_content_store::mru> >
@@ -151,7 +151,7 @@
       boost::multi_index::ordered_unique<
         boost::multi_index::tag<__ccnx_private_content_store::ordered>,
         boost::multi_index::const_mem_fun<CcnxContentStoreEntry,
-                                          const Name::Components&,
+                                          const CcnxNameComponents&,
                                           &CcnxContentStoreEntry::GetName>
           >
 #endif
@@ -271,7 +271,7 @@
   return os;
 }
 
-const Name::Components&
+const CcnxNameComponents&
 CcnxContentStoreEntry::GetName () const
 {
   return m_header->GetName ();
diff --git a/model/ccnx-interest-header.cc b/model/ccnx-interest-header.cc
index 330e2f4..ea70a93 100644
--- a/model/ccnx-interest-header.cc
+++ b/model/ccnx-interest-header.cc
@@ -60,12 +60,12 @@
 }
 
 void
-CcnxInterestHeader::SetName (const Ptr<Name::Components> &name)
+CcnxInterestHeader::SetName (const Ptr<CcnxNameComponents> &name)
 {
   m_name = name;
 }
 
-const Name::Components&
+const CcnxNameComponents&
 CcnxInterestHeader::GetName () const
 {
   return *m_name;
@@ -96,12 +96,12 @@
 }
 
 void
-CcnxInterestHeader::SetExclude (const Ptr<Name::Components> &exclude)
+CcnxInterestHeader::SetExclude (const Ptr<CcnxNameComponents> &exclude)
 {
   m_exclude = exclude;
 }
 
-const Name::Components&
+const CcnxNameComponents&
 CcnxInterestHeader::GetExclude () const
 {
   return *m_exclude;
diff --git a/model/ccnx-interest-header.h b/model/ccnx-interest-header.h
index 0e13bb8..3b59c00 100644
--- a/model/ccnx-interest-header.h
+++ b/model/ccnx-interest-header.h
@@ -138,12 +138,12 @@
   /**
    * \brief Set interest name
    *
-   * Sets name of the interest. For example, SetName( Name::Components("prefix")("postfix") );
+   * Sets name of the interest. For example, SetName( CcnxNameComponents("prefix")("postfix") );
    **/
   void
-  SetName (const Ptr<Name::Components> &name);
+  SetName (const Ptr<CcnxNameComponents> &name);
 
-  const Name::Components&
+  const CcnxNameComponents&
   GetName () const;
 
   void
@@ -161,12 +161,12 @@
   /**
    * \brief Set exclude filer
    *
-   * For example, SetExclude (Name::Components("exclude1")("exclude2")("exclude3"))
+   * For example, SetExclude (CcnxNameComponents("exclude1")("exclude2")("exclude3"))
    **/
   void
-  SetExclude (const Ptr<Name::Components> &exclude);
+  SetExclude (const Ptr<CcnxNameComponents> &exclude);
 
-  const Name::Components&
+  const CcnxNameComponents&
   GetExclude () const;
 
   void
@@ -209,10 +209,10 @@
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
 private:
-  Ptr<Name::Components> m_name;
+  Ptr<CcnxNameComponents> m_name;
   int32_t m_minSuffixComponents; ///< minimum suffix components. not used if negative
   int32_t m_maxSuffixComponents; ///< maximum suffix components. not used if negative
-  Ptr<Name::Components> m_exclude; ///< exclude filter
+  Ptr<CcnxNameComponents> m_exclude; ///< exclude filter
   bool m_childSelector;    
   bool m_answerOriginKind; 
   int8_t m_scope;            ///< -1 not set, 0 local scope, 1 this host, 2 immediate neighborhood
diff --git a/model/ccnx-rit.h b/model/ccnx-rit.h
index 8220759..b448320 100644
--- a/model/ccnx-rit.h
+++ b/model/ccnx-rit.h
@@ -49,11 +49,11 @@
  */
 struct CcnxRitEntry
 {
-  Name::Components m_prefix; ///< \brief Prefix of the recently satisfied interest
+  CcnxNameComponents m_prefix; ///< \brief Prefix of the recently satisfied interest
   uint32_t m_nonce; ///< \brief Nonce of the recently satisfied interest
   Time m_expireTime;  ///< \brief Time when the record should be removed
 
-  CcnxRitEntry (const Name::Components &prefix, uint32_t nonce, const Time &timeout)
+  CcnxRitEntry (const CcnxNameComponents &prefix, uint32_t nonce, const Time &timeout)
     : m_prefix (prefix)
     , m_nonce (nonce)
     , m_expireTime (timeout)
diff --git a/model/ccnx-route.cc b/model/ccnx-route.cc
index c2033f6..a3b0224 100644
--- a/model/ccnx-route.cc
+++ b/model/ccnx-route.cc
@@ -29,12 +29,12 @@
 }
 
 void
-CcnxRoute::SetPrefix (const Ptr<Name::Components> &prefix)
+CcnxRoute::SetPrefix (const Ptr<CcnxNameComponents> &prefix)
 {
   m_prefix = prefix;
 }
 
-const Name::Components&
+const CcnxNameComponents&
 CcnxRoute::GetPrefix (void) const
 {
   return *m_prefix;
diff --git a/model/ccnx-route.h b/model/ccnx-route.h
index fcff012..65d978f 100644
--- a/model/ccnx-route.h
+++ b/model/ccnx-route.h
@@ -47,11 +47,11 @@
   /**
    * \param dest Destination CcnxAddress
    */
-  void SetPrefix (const Ptr<Name::Components> &dest);
+  void SetPrefix (const Ptr<CcnxNameComponents> &dest);
   /**
    * \return Destination CcnxAddress of the route
    */
-  const Name::Components& GetPrefix (void) const;
+  const CcnxNameComponents& GetPrefix (void) const;
 
   /**
    * Equivalent in Linux to dst_entry.dev
@@ -65,7 +65,7 @@
   Ptr<CcnxFace> GetOutputFace (void) const;
 
 private:
-  Ptr<Name::Components> m_prefix;
+  Ptr<CcnxNameComponents> m_prefix;
   Ptr<CcnxFace> m_outputFace;
 };
 
diff --git a/model/hash-helper.h b/model/hash-helper.h
index 36a9ee8..0440e29 100644
--- a/model/hash-helper.h
+++ b/model/hash-helper.h
@@ -37,10 +37,10 @@
  * \todo Testing is required to determine if this hash function
  * actually provides good hash results
  */
-struct CcnxPrefixHash : public std::unary_function<Name::Components, std::size_t>
+struct CcnxPrefixHash : public std::unary_function<CcnxNameComponents, std::size_t>
 {
   std::size_t
-  operator() (const Name::Components &prefix) const
+  operator() (const CcnxNameComponents &prefix) const
   {
     std::size_t hash = 23;
     BOOST_FOREACH (const std::string &str, prefix.GetComponents ())
diff --git a/model/name-components.cc b/model/name-components.cc
index e1af1ee..7dde99f 100644
--- a/model/name-components.cc
+++ b/model/name-components.cc
@@ -25,15 +25,14 @@
 using namespace std;
 
 namespace ns3 {
-namespace Name {
 
-Components::Components ()
+CcnxNameComponents::CcnxNameComponents ()
 {
   // m_value = ccn_charbuf_create ();
   // ccn_name_init(m_value);
 }
 
-Components::Components (const string &s)
+CcnxNameComponents::CcnxNameComponents (const string &s)
 {
   // m_value = ccn_charbuf_create ();
   // ccn_name_init(m_value);
@@ -41,13 +40,13 @@
   m_prefix.push_back (s);
 }
 
-Components::~Components ()
+CcnxNameComponents::~CcnxNameComponents ()
 {
   // ccn_charbuf_destroy(&m_value);
 }
 
 const std::list<std::string> &
-Components::GetComponents () const
+CcnxNameComponents::GetComponents () const
 {
   return m_prefix;
 }
@@ -59,8 +58,8 @@
 //   return m_value;
 // }
 
-Components&
-Components::operator () (const string &s)
+CcnxNameComponents&
+CcnxNameComponents::operator () (const string &s)
 {
   // ccn_name_append_str (m_value,s.c_str());
   m_prefix.push_back (s);
@@ -73,7 +72,7 @@
 // }
 
 void
-Components::Print (std::ostream &os) const
+CcnxNameComponents::Print (std::ostream &os) const
 {
   for (const_iterator i=m_prefix.begin(); i!=m_prefix.end(); i++)
     {
@@ -82,12 +81,10 @@
 }
   
 std::ostream &
-operator << (std::ostream &os, const Components &components)
+operator << (std::ostream &os, const CcnxNameComponents &components)
 {
   components.Print (os);
   return os;
 }
-
-}
 }
 
diff --git a/model/name-components.h b/model/name-components.h
index 5749fcc..55cd5ae 100644
--- a/model/name-components.h
+++ b/model/name-components.h
@@ -31,20 +31,19 @@
 #include "ns3/object.h"
 
 namespace ns3 {
-namespace Name {
 
-class Components : public Object
+class CcnxNameComponents : public Object
 
 {
 public:
-  Components ();
-  Components (const std::string &s);
-  ~Components ();
+  CcnxNameComponents ();
+  CcnxNameComponents (const std::string &s);
+  ~CcnxNameComponents ();
   
   inline void
   Add (const std::string &s);
        
-  Components&
+  CcnxNameComponents&
   operator () (const std::string &s);
 
   const std::list<std::string> &
@@ -65,10 +64,10 @@
   size () const;
 
   inline bool
-  operator== (const Components &prefix) const;
+  operator== (const CcnxNameComponents &prefix) const;
 
   inline bool
-  operator< (const Components &prefix) const;
+  operator< (const CcnxNameComponents &prefix) const;
   
 private:
   std::list<std::string> m_prefix;
@@ -77,22 +76,22 @@
   typedef std::list<std::string>::const_iterator const_iterator;
 };
 
-std::ostream & operator << (std::ostream &os, const Components &components);
+std::ostream & operator << (std::ostream &os, const CcnxNameComponents &components);
 
 size_t
-Components::size () const
+CcnxNameComponents::size () const
 {
   return m_prefix.size ();
 }
   
 void
-Components::Add (const std::string &s)
+CcnxNameComponents::Add (const std::string &s)
 {
   (*this) (s);
 }
 
 bool
-Components::operator== (const Components &prefix) const
+CcnxNameComponents::operator== (const CcnxNameComponents &prefix) const
 {
   if (m_prefix.size () != prefix.m_prefix.size ())
     return false;
@@ -101,7 +100,7 @@
 }
 
 bool
-Components::operator< (const Components &prefix) const
+CcnxNameComponents::operator< (const CcnxNameComponents &prefix) const
 {
   return std::lexicographical_compare (m_prefix.begin (), m_prefix.end (),
                                        prefix.m_prefix.begin (), prefix.m_prefix.end ());
@@ -110,12 +109,11 @@
     
 /**
 * \class ns3::ComponentsValue
-* \brief hold objects of type ns3::Name::Components
+* \brief hold objects of type ns3:CcnxNameComponents
 */
-ATTRIBUTE_VALUE_DEFINE (Components);
-ATTRIBUTE_ACCESSOR_DEFINE (Components);
-ATTRIBUTE_CHECKER_DEFINE (Components);
-} // Namespace Name
+ATTRIBUTE_VALUE_DEFINE (CcnxNameComponents);
+ATTRIBUTE_ACCESSOR_DEFINE (CcnxNameComponents);
+ATTRIBUTE_CHECKER_DEFINE (CcnxNameComponents);
 } // namespace ns3
 
 #endif // _NDN_NAME_COMPONENTS_H_
