diff --git a/helper/boost-graph-ndn-global-routing-helper.h b/helper/boost-graph-ndn-global-routing-helper.h
index ab619c6..df08c73 100644
--- a/helper/boost-graph-ndn-global-routing-helper.h
+++ b/helper/boost-graph-ndn-global-routing-helper.h
@@ -35,13 +35,12 @@
 #include <list>
 #include <map>
 
-namespace boost
-{
+namespace boost {
 
 class NdnGlobalRouterGraph
 {
 public:
-  typedef ns3::Ptr< ns3::NdnGlobalRouter > Vertice;
+  typedef ns3::Ptr< ns3::ndn::GlobalRouter > Vertice;
   typedef uint16_t edge_property_type;
   typedef uint32_t vertex_property_type;
   
@@ -49,14 +48,14 @@
   {
     for (ns3::NodeList::Iterator node = ns3::NodeList::Begin (); node != ns3::NodeList::End (); node++)
       {
-        ns3::Ptr<ns3::NdnGlobalRouter> gr = (*node)->GetObject<ns3::NdnGlobalRouter> ();
+        ns3::Ptr<ns3::ndn::GlobalRouter> gr = (*node)->GetObject<ns3::ndn::GlobalRouter> ();
 	if (gr != 0)
 	  m_vertices.push_back (gr);
       }
 
     for (ns3::ChannelList::Iterator channel = ns3::ChannelList::Begin (); channel != ns3::ChannelList::End (); channel++)
       {
-        ns3::Ptr<ns3::NdnGlobalRouter> gr = (*channel)->GetObject<ns3::NdnGlobalRouter> ();
+        ns3::Ptr<ns3::ndn::GlobalRouter> gr = (*channel)->GetObject<ns3::ndn::GlobalRouter> ();
 	if (gr != 0)
 	  m_vertices.push_back (gr);
       }
@@ -85,7 +84,7 @@
 {
   // Graph concept
   typedef NdnGlobalRouterGraph::Vertice vertex_descriptor;
-  typedef ns3::NdnGlobalRouter::Incidency edge_descriptor;
+  typedef ns3::ndn::GlobalRouter::Incidency edge_descriptor;
   typedef directed_tag directed_category;
   typedef disallow_parallel_edge_tag edge_parallel_category;
   typedef ndn_global_router_graph_category traversal_category;
@@ -95,7 +94,7 @@
   typedef size_t vertices_size_type;
 
   // AdjacencyGraph concept
-  typedef ns3::NdnGlobalRouter::IncidencyList::iterator out_edge_iterator;
+  typedef ns3::ndn::GlobalRouter::IncidencyList::iterator out_edge_iterator;
   typedef size_t degree_size_type;
 
   // typedef size_t edges_size_type;
@@ -206,9 +205,9 @@
 struct property_traits< EdgeWeights >
 {
   // Metric property map
-  typedef tuple< ns3::Ptr<ns3::NdnFace>, uint16_t > value_type;
-  typedef tuple< ns3::Ptr<ns3::NdnFace>, uint16_t > reference;
-  typedef ns3::NdnGlobalRouter::Incidency key_type;
+  typedef tuple< ns3::Ptr<ns3::ndn::Face>, uint16_t > value_type;
+  typedef tuple< ns3::Ptr<ns3::ndn::Face>, uint16_t > reference;
+  typedef ns3::ndn::GlobalRouter::Incidency key_type;
   typedef readable_property_map_tag category;
 };
 
@@ -254,8 +253,8 @@
     return a + b.get<1> ();
   }
 
-  tuple< ns3::Ptr<ns3::NdnFace>, uint32_t >
-  operator () (tuple< ns3::Ptr<ns3::NdnFace>, uint32_t > a,
+  tuple< ns3::Ptr<ns3::ndn::Face>, uint32_t >
+  operator () (tuple< ns3::Ptr<ns3::ndn::Face>, uint32_t > a,
                property_traits< EdgeWeights >::reference b) const
   {
     if (a.get<0> () == 0)
@@ -271,7 +270,7 @@
   // Metric property map
   typedef uint32_t value_type;
   typedef uint32_t reference;
-  typedef ns3::Ptr< ns3::NdnGlobalRouter > key_type;
+  typedef ns3::Ptr< ns3::ndn::GlobalRouter > key_type;
   typedef readable_property_map_tag category;
 };
 
@@ -300,16 +299,16 @@
 }
 
 // void
-// put (cref< std::map< ns3::Ptr<ns3::NdnGlobalRouter>, ns3::Ptr<ns3::NdnGlobalRouter> > > map,
+// put (cref< std::map< ns3::Ptr<ns3::ndn::GlobalRouter>, ns3::Ptr<ns3::ndn::GlobalRouter> > > map,
 
 uint32_t
-get (const boost::VertexIds&, ns3::Ptr<ns3::NdnGlobalRouter> &gr)
+get (const boost::VertexIds&, ns3::Ptr<ns3::ndn::GlobalRouter> &gr)
 {
   return gr->GetId ();
 }
 
 inline property_traits< EdgeWeights >::reference
-get(const boost::EdgeWeights&, ns3::NdnGlobalRouter::Incidency &edge)
+get(const boost::EdgeWeights&, ns3::ndn::GlobalRouter::Incidency &edge)
 {
   if (edge.get<1> () == 0)
     return property_traits< EdgeWeights >::reference (0, 0);
@@ -318,7 +317,7 @@
 }
 
 struct PredecessorsMap :
-  public std::map< ns3::Ptr< ns3::NdnGlobalRouter >, ns3::Ptr< ns3::NdnGlobalRouter > >
+    public std::map< ns3::Ptr< ns3::ndn::GlobalRouter >, ns3::Ptr< ns3::ndn::GlobalRouter > >
 {
 };
 
@@ -326,15 +325,15 @@
 struct property_traits< reference_wrapper<PredecessorsMap> >
 {
   // Metric property map
-  typedef ns3::Ptr< ns3::NdnGlobalRouter > value_type;
-  typedef ns3::Ptr< ns3::NdnGlobalRouter > reference;
-  typedef ns3::Ptr< ns3::NdnGlobalRouter > key_type;
+  typedef ns3::Ptr< ns3::ndn::GlobalRouter > value_type;
+  typedef ns3::Ptr< ns3::ndn::GlobalRouter > reference;
+  typedef ns3::Ptr< ns3::ndn::GlobalRouter > key_type;
   typedef read_write_property_map_tag category;
 };
 
 
 struct DistancesMap :
-  public std::map< ns3::Ptr< ns3::NdnGlobalRouter >, tuple< ns3::Ptr<ns3::NdnFace>, uint32_t > >
+    public std::map< ns3::Ptr< ns3::ndn::GlobalRouter >, tuple< ns3::Ptr<ns3::ndn::Face>, uint32_t > >
 {
 };
 
@@ -342,18 +341,18 @@
 struct property_traits< reference_wrapper<DistancesMap> >
 {
   // Metric property map
-  typedef tuple< ns3::Ptr<ns3::NdnFace>, uint32_t > value_type;
-  typedef tuple< ns3::Ptr<ns3::NdnFace>, uint32_t > reference;
-  typedef ns3::Ptr< ns3::NdnGlobalRouter > key_type;
+  typedef tuple< ns3::Ptr<ns3::ndn::Face>, uint32_t > value_type;
+  typedef tuple< ns3::Ptr<ns3::ndn::Face>, uint32_t > reference;
+  typedef ns3::Ptr< ns3::ndn::GlobalRouter > key_type;
   typedef read_write_property_map_tag category;
 };
 
-inline tuple< ns3::Ptr<ns3::NdnFace>, uint32_t >
-get (DistancesMap &map, ns3::Ptr<ns3::NdnGlobalRouter> key)
+inline tuple< ns3::Ptr<ns3::ndn::Face>, uint32_t >
+get (DistancesMap &map, ns3::Ptr<ns3::ndn::GlobalRouter> key)
 {
   boost::DistancesMap::iterator i = map.find (key);
   if (i == map.end ())
-    return tuple< ns3::Ptr<ns3::NdnFace>, uint32_t > (0, std::numeric_limits<uint32_t>::max ());
+    return tuple< ns3::Ptr<ns3::ndn::Face>, uint32_t > (0, std::numeric_limits<uint32_t>::max ());
   else
     return i->second;
 }
diff --git a/helper/ccnb-parser/ccnb-parser-common.h b/helper/ccnb-parser/common.h
similarity index 97%
rename from helper/ccnb-parser/ccnb-parser-common.h
rename to helper/ccnb-parser/common.h
index 528bcb0..260ae74 100644
--- a/helper/ccnb-parser/ccnb-parser-common.h
+++ b/helper/ccnb-parser/common.h
@@ -22,13 +22,14 @@
 #define _CCNB_PARSER_COMMON_H_
 
 namespace ns3 {
+namespace ndn {
 
 /**
- * \ingroup ccnx
- * \defgroup ccnx-ccnb CCNB decoding routines
+ * \ingroup ndn
+ * \defgroup ndn-ccnb CCNB decoding routines
  */
 /**
- * \ingroup ccnx-ccnb
+ * \ingroup ndn-ccnb
  * \brief Namespace for ccnb parer
  */
 namespace CcnbParser {
@@ -174,6 +175,7 @@
 };
 
 } // namespace CcnxParser
+} // namespace ndn
 } // namespace ns3
 
 #endif // _CCNB_PARSER_COMMON_H_
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-attr.cc b/helper/ccnb-parser/syntax-tree/attr.cc
similarity index 95%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-attr.cc
rename to helper/ccnb-parser/syntax-tree/attr.cc
index bdc1f0a..fda4c77 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-attr.cc
+++ b/helper/ccnb-parser/syntax-tree/attr.cc
@@ -18,10 +18,11 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-attr.h"
-#include "../ccnb-parser-common.h"
+#include "attr.h"
+#include "../common.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 // length length in octets of UTF-8 encoding of tag name - 1 (minimum tag name length is 1) 
@@ -42,3 +43,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-attr.h b/helper/ccnb-parser/syntax-tree/attr.h
similarity index 97%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-attr.h
rename to helper/ccnb-parser/syntax-tree/attr.h
index 1b7d5e8..6238aee 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-attr.h
+++ b/helper/ccnb-parser/syntax-tree/attr.h
@@ -21,10 +21,11 @@
 #ifndef _CCNB_PARSER_ATTR_H_
 #define _CCNB_PARSER_ATTR_H_
 
-#include "ccnb-parser-base-attr.h"
+#include "base-attr.h"
 #include <string>
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -56,5 +57,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_ATTR_H_
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-base-attr.h b/helper/ccnb-parser/syntax-tree/base-attr.h
similarity index 97%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-base-attr.h
rename to helper/ccnb-parser/syntax-tree/base-attr.h
index 9b20073..d6890a1 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-base-attr.h
+++ b/helper/ccnb-parser/syntax-tree/base-attr.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_BASE_ATTR_H_
 #define _CCNB_PARSER_BASE_ATTR_H_
 
-#include "ccnb-parser-udata.h"
+#include "udata.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -41,5 +42,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_BASE_ATTR_H_
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-base-tag.h b/helper/ccnb-parser/syntax-tree/base-tag.h
similarity index 97%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-base-tag.h
rename to helper/ccnb-parser/syntax-tree/base-tag.h
index 15310a5..403dcb4 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-base-tag.h
+++ b/helper/ccnb-parser/syntax-tree/base-tag.h
@@ -21,10 +21,11 @@
 #ifndef _CCNB_PARSER_BASE_TAG_H_
 #define _CCNB_PARSER_BASE_TAG_H_
 
-#include "ccnb-parser-block.h"
+#include "block.h"
 #include <list>
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -49,6 +50,7 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_BASE_TAG_H_
 
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-blob.cc b/helper/ccnb-parser/syntax-tree/blob.cc
similarity index 97%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-blob.cc
rename to helper/ccnb-parser/syntax-tree/blob.cc
index 159643f..6df6012 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-blob.cc
+++ b/helper/ccnb-parser/syntax-tree/blob.cc
@@ -18,9 +18,10 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-blob.h"
+#include "blob.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 Blob::Blob (Buffer::Iterator &start, uint32_t length)
@@ -47,3 +48,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-blob.h b/helper/ccnb-parser/syntax-tree/blob.h
similarity index 97%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-blob.h
rename to helper/ccnb-parser/syntax-tree/blob.h
index 195c84c..1745b1d 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-blob.h
+++ b/helper/ccnb-parser/syntax-tree/blob.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_BLOB_H_
 #define _CCNB_PARSER_BLOB_H_
 
-#include "ccnb-parser-block.h"
+#include "block.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -57,5 +58,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_BLOB_H_
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-block.cc b/helper/ccnb-parser/syntax-tree/block.cc
similarity index 89%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-block.cc
rename to helper/ccnb-parser/syntax-tree/block.cc
index 805582a..0d425dd 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-block.cc
+++ b/helper/ccnb-parser/syntax-tree/block.cc
@@ -18,21 +18,22 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-block.h"
+#include "block.h"
 
-#include "ccnb-parser-blob.h"
-#include "ccnb-parser-udata.h"
-#include "ccnb-parser-tag.h"
-#include "ccnb-parser-dtag.h"
-#include "ccnb-parser-attr.h"
-#include "ccnb-parser-dattr.h"
-#include "ccnb-parser-ext.h"
+#include "blob.h"
+#include "udata.h"
+#include "tag.h"
+#include "dtag.h"
+#include "attr.h"
+#include "dattr.h"
+#include "ext.h"
 
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("CcnbParserBlock");
+NS_LOG_COMPONENT_DEFINE ("ndn.CcnbParser.Block");
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /// @cond include_hidden
@@ -95,3 +96,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-block.h b/helper/ccnb-parser/syntax-tree/block.h
similarity index 91%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-block.h
rename to helper/ccnb-parser/syntax-tree/block.h
index 6ea5fba..23604f5 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-block.h
+++ b/helper/ccnb-parser/syntax-tree/block.h
@@ -26,12 +26,13 @@
 #include "ns3/ptr.h"
 
 // visitors
-#include "../visitors/ccnb-parser-void-no-argu-visitor.h"
-#include "../visitors/ccnb-parser-void-visitor.h"
-#include "../visitors/ccnb-parser-no-argu-visitor.h"
-#include "../visitors/ccnb-parser-visitor.h"
+#include "../visitors/void-no-argu-visitor.h"
+#include "../visitors/void-visitor.h"
+#include "../visitors/no-argu-visitor.h"
+#include "../visitors/visitor.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -81,5 +82,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_BLOCK_H_
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-dattr.cc b/helper/ccnb-parser/syntax-tree/dattr.cc
similarity index 96%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-dattr.cc
rename to helper/ccnb-parser/syntax-tree/dattr.cc
index bb6be82..dde424c 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-dattr.cc
+++ b/helper/ccnb-parser/syntax-tree/dattr.cc
@@ -18,9 +18,10 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-dattr.h"
+#include "dattr.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 // dictionary attributes are not used (yet?) in CCNx 
@@ -34,3 +35,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-dattr.h b/helper/ccnb-parser/syntax-tree/dattr.h
similarity index 97%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-dattr.h
rename to helper/ccnb-parser/syntax-tree/dattr.h
index 6775017..e4c622c 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-dattr.h
+++ b/helper/ccnb-parser/syntax-tree/dattr.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_DATTR_H_
 #define _CCNB_PARSER_DATTR_H_
 
-#include "ccnb-parser-base-attr.h"
+#include "base-attr.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -55,5 +56,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_DATTR_H_
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-dtag.cc b/helper/ccnb-parser/syntax-tree/dtag.cc
similarity index 96%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-dtag.cc
rename to helper/ccnb-parser/syntax-tree/dtag.cc
index e7d9b98..129b363 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-dtag.cc
+++ b/helper/ccnb-parser/syntax-tree/dtag.cc
@@ -18,12 +18,13 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-dtag.h"
+#include "dtag.h"
 
-#include "ccnb-parser-base-attr.h"
-#include "ccnb-parser-base-tag.h"
+#include "base-attr.h"
+#include "base-tag.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 Dtag::Dtag (Buffer::Iterator &start, uint32_t dtag)
@@ -85,3 +86,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-dtag.h b/helper/ccnb-parser/syntax-tree/dtag.h
similarity index 97%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-dtag.h
rename to helper/ccnb-parser/syntax-tree/dtag.h
index cca0bba..cf9871e 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-dtag.h
+++ b/helper/ccnb-parser/syntax-tree/dtag.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_DTAG_H_
 #define _CCNB_PARSER_DTAG_H_
 
-#include "ccnb-parser-base-tag.h"
+#include "base-tag.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -60,5 +61,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_DTAG_H_
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-ext.cc b/helper/ccnb-parser/syntax-tree/ext.cc
similarity index 96%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-ext.cc
rename to helper/ccnb-parser/syntax-tree/ext.cc
index 7d90019..b80743c 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-ext.cc
+++ b/helper/ccnb-parser/syntax-tree/ext.cc
@@ -18,9 +18,10 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-ext.h"
+#include "ext.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 Ext::Ext (Buffer::Iterator &start, uint32_t extSubtype)
@@ -30,3 +31,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-ext.h b/helper/ccnb-parser/syntax-tree/ext.h
similarity index 97%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-ext.h
rename to helper/ccnb-parser/syntax-tree/ext.h
index 568706b..072405c 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-ext.h
+++ b/helper/ccnb-parser/syntax-tree/ext.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_EXT_H_
 #define _CCNB_PARSER_EXT_H_
 
-#include "ccnb-parser-block.h"
+#include "block.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -55,5 +56,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_EXT_H_
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-tag.cc b/helper/ccnb-parser/syntax-tree/tag.cc
similarity index 96%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-tag.cc
rename to helper/ccnb-parser/syntax-tree/tag.cc
index 723c57e..5a0d96c 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-tag.cc
+++ b/helper/ccnb-parser/syntax-tree/tag.cc
@@ -18,11 +18,12 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-tag.h"
+#include "tag.h"
 
-#include "ccnb-parser-base-attr.h"
+#include "base-attr.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 Tag::Tag (Buffer::Iterator &start, uint32_t length)
@@ -64,3 +65,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-tag.h b/helper/ccnb-parser/syntax-tree/tag.h
similarity index 97%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-tag.h
rename to helper/ccnb-parser/syntax-tree/tag.h
index c80581d..94f4d32 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-tag.h
+++ b/helper/ccnb-parser/syntax-tree/tag.h
@@ -21,10 +21,11 @@
 #ifndef _CCNB_PARSER_TAG_H_
 #define _CCNB_PARSER_TAG_H_
 
-#include "ccnb-parser-base-tag.h"
+#include "base-tag.h"
 #include <string>
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -56,5 +57,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_TAG_H_
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-udata.cc b/helper/ccnb-parser/syntax-tree/udata.cc
similarity index 97%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-udata.cc
rename to helper/ccnb-parser/syntax-tree/udata.cc
index 91cba15..cd69aba 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-udata.cc
+++ b/helper/ccnb-parser/syntax-tree/udata.cc
@@ -18,9 +18,10 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-udata.h"
+#include "udata.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 Udata::Udata (Buffer::Iterator &start, uint32_t length)
@@ -44,3 +45,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-udata.h b/helper/ccnb-parser/syntax-tree/udata.h
similarity index 97%
rename from helper/ccnb-parser/syntax-tree/ccnb-parser-udata.h
rename to helper/ccnb-parser/syntax-tree/udata.h
index b6ef2c2..b589ea4 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-udata.h
+++ b/helper/ccnb-parser/syntax-tree/udata.h
@@ -21,10 +21,11 @@
 #ifndef _CCNB_PARSER_UDATA_H_
 #define _CCNB_PARSER_UDATA_H_
 
-#include "ccnb-parser-block.h"
+#include "block.h"
 #include <string>
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -54,5 +55,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_UDATA_H_
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-content-type-visitor.cc b/helper/ccnb-parser/visitors/content-type-visitor.cc
similarity index 93%
rename from helper/ccnb-parser/visitors/ccnb-parser-content-type-visitor.cc
rename to helper/ccnb-parser/visitors/content-type-visitor.cc
index 34608b1..a89b99c 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-content-type-visitor.cc
+++ b/helper/ccnb-parser/visitors/content-type-visitor.cc
@@ -18,10 +18,11 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-content-type-visitor.h"
-#include "../syntax-tree/ccnb-parser-blob.h"
+#include "content-type-visitor.h"
+#include "../syntax-tree/blob.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 boost::any
@@ -48,3 +49,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-content-type-visitor.h b/helper/ccnb-parser/visitors/content-type-visitor.h
similarity index 96%
rename from helper/ccnb-parser/visitors/ccnb-parser-content-type-visitor.h
rename to helper/ccnb-parser/visitors/content-type-visitor.h
index 0c3cc6c..2cbd883 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-content-type-visitor.h
+++ b/helper/ccnb-parser/visitors/content-type-visitor.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_CONTENT_TYPE_VISITOR_H_
 #define _CCNB_PARSER_CONTENT_TYPE_VISITOR_H_
 
-#include "ccnb-parser-no-argu-depth-first-visitor.h"
+#include "no-argu-depth-first-visitor.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -44,5 +45,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_CONTENT_TYPE_VISITOR_H_
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-depth-first-visitor.cc b/helper/ccnb-parser/visitors/depth-first-visitor.cc
similarity index 86%
rename from helper/ccnb-parser/visitors/ccnb-parser-depth-first-visitor.cc
rename to helper/ccnb-parser/visitors/depth-first-visitor.cc
index 9a89c19..305fff6 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-depth-first-visitor.cc
+++ b/helper/ccnb-parser/visitors/depth-first-visitor.cc
@@ -18,19 +18,20 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-depth-first-visitor.h"
+#include "depth-first-visitor.h"
 
-#include "../syntax-tree/ccnb-parser-blob.h"
-#include "../syntax-tree/ccnb-parser-udata.h"
-#include "../syntax-tree/ccnb-parser-tag.h"
-#include "../syntax-tree/ccnb-parser-dtag.h"
-#include "../syntax-tree/ccnb-parser-attr.h"
-#include "../syntax-tree/ccnb-parser-dattr.h"
-#include "../syntax-tree/ccnb-parser-ext.h"
+#include "../syntax-tree/blob.h"
+#include "../syntax-tree/udata.h"
+#include "../syntax-tree/tag.h"
+#include "../syntax-tree/dtag.h"
+#include "../syntax-tree/attr.h"
+#include "../syntax-tree/dattr.h"
+#include "../syntax-tree/ext.h"
 
 #include <boost/foreach.hpp>
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 boost::any
@@ -106,3 +107,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-depth-first-visitor.h b/helper/ccnb-parser/visitors/depth-first-visitor.h
similarity index 97%
rename from helper/ccnb-parser/visitors/ccnb-parser-depth-first-visitor.h
rename to helper/ccnb-parser/visitors/depth-first-visitor.h
index 98c3c96..2257802 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-depth-first-visitor.h
+++ b/helper/ccnb-parser/visitors/depth-first-visitor.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_DEPTH_FIRST_VISITOR_H_
 #define _CCNB_PARSER_DEPTH_FIRST_VISITOR_H_
 
-#include "ccnb-parser-visitor.h"
+#include "visitor.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -44,5 +45,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_DEPTH_FIRST_VISITOR_H_
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-interest-visitor.cc b/helper/ccnb-parser/visitors/interest-visitor.cc
similarity index 90%
rename from helper/ccnb-parser/visitors/ccnb-parser-interest-visitor.cc
rename to helper/ccnb-parser/visitors/interest-visitor.cc
index 5188f8d..175eaad 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-interest-visitor.cc
+++ b/helper/ccnb-parser/visitors/interest-visitor.cc
@@ -18,34 +18,35 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-interest-visitor.h"
+#include "interest-visitor.h"
 
-#include "../syntax-tree/ccnb-parser-block.h"
-#include "../syntax-tree/ccnb-parser-dtag.h"
+#include "../syntax-tree/block.h"
+#include "../syntax-tree/dtag.h"
 
 #include "ns3/ndn-name-components.h"
+#include "ns3/ndn-interest-header.h"
 
 #include "ns3/assert.h"
 #include "ns3/nstime.h"
 
-#include "ns3/ndn-interest-header.h"
-#include "ccnb-parser-name-components-visitor.h"
-#include "ccnb-parser-non-negative-integer-visitor.h"
-#include "ccnb-parser-timestamp-visitor.h"
-#include "ccnb-parser-uint32t-blob-visitor.h"
+#include "name-components-visitor.h"
+#include "non-negative-integer-visitor.h"
+#include "timestamp-visitor.h"
+#include "uint32t-blob-visitor.h"
 
 #include <boost/foreach.hpp>
 
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("CcnbParserInterestVisitor");
+NS_LOG_COMPONENT_DEFINE ("ndn.CcnbParser.InterestVisitor");
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 // We don't care about any other fields
 void
-InterestVisitor::visit (Dtag &n, boost::any param/*should be NdnInterestHeader* */)
+InterestVisitor::visit (Dtag &n, boost::any param/*should be InterestHeader* */)
 {
   // uint32_t n.m_dtag;
   // std::list<Ptr<Block> > n.m_nestedBlocks;
@@ -55,7 +56,7 @@
   static TimestampVisitor          timestampVisitor;
   static Uint32tBlobVisitor        nonceVisitor;
   
-  NdnInterestHeader &interest = *(boost::any_cast<NdnInterestHeader*> (param));
+  InterestHeader &interest = *(boost::any_cast<InterestHeader*> (param));
 
   switch (n.m_dtag)
     {
@@ -73,7 +74,7 @@
         NS_LOG_DEBUG ("Name");
 
         // process name components
-        Ptr<NdnNameComponents> name = Create<NdnNameComponents> ();
+        Ptr<NameComponents> name = Create<NameComponents> ();
         
         BOOST_FOREACH (Ptr<Block> block, n.m_nestedTags)
           {
@@ -106,7 +107,7 @@
       {
         NS_LOG_DEBUG ("Exclude");
         // process exclude components
-        Ptr<NdnNameComponents> exclude = Create<NdnNameComponents> ();
+        Ptr<NameComponents> exclude = Create<NameComponents> ();
         
         BOOST_FOREACH (Ptr<Block> block, n.m_nestedTags)
           {
@@ -183,4 +184,5 @@
 }
 
 } // namespace CcnbParser
+} // namespace ndn
 } // namespace ns3
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-interest-visitor.h b/helper/ccnb-parser/visitors/interest-visitor.h
similarity index 92%
rename from helper/ccnb-parser/visitors/ccnb-parser-interest-visitor.h
rename to helper/ccnb-parser/visitors/interest-visitor.h
index 35a1e13..f78d07f 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-interest-visitor.h
+++ b/helper/ccnb-parser/visitors/interest-visitor.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_INTEREST_VISITOR_H_
 #define _CCNB_PARSER_INTEREST_VISITOR_H_
 
-#include "ccnb-parser-void-depth-first-visitor.h"
+#include "void-depth-first-visitor.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -44,7 +45,8 @@
   virtual void visit (Dtag &n, boost::any param/*should be CcnxInterestHeader* */);
 };
 
-}
-}
+} // namespace CcnbParser
+} // namespace ndn
+} // namespace ns3
 
 #endif // _CCNB_PARSER_INTEREST_VISITOR_H_
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-name-components-visitor.cc b/helper/ccnb-parser/visitors/name-components-visitor.cc
similarity index 87%
rename from helper/ccnb-parser/visitors/ccnb-parser-name-components-visitor.cc
rename to helper/ccnb-parser/visitors/name-components-visitor.cc
index 387292b..ef87281 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-name-components-visitor.cc
+++ b/helper/ccnb-parser/visitors/name-components-visitor.cc
@@ -18,23 +18,25 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-name-components-visitor.h"
+#include "name-components-visitor.h"
 
-#include "ccnb-parser-string-visitor.h"
-#include "../syntax-tree/ccnb-parser-dtag.h"
+#include "string-visitor.h"
+#include "../syntax-tree/dtag.h"
+
 #include "ns3/ndn-name-components.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 void
-NameComponentsVisitor::visit (Dtag &n, boost::any param/*should be NdnNameComponents* */)
+NameComponentsVisitor::visit (Dtag &n, boost::any param/*should be NameComponents* */)
 {
   // uint32_t n.m_dtag;
   // std::list<Ptr<Block> > n.m_nestedBlocks;
   static StringVisitor stringVisitor; 
  
-  NdnNameComponents &components = *(boost::any_cast<NdnNameComponents*> (param));
+  NameComponents &components = *(boost::any_cast<NameComponents*> (param));
 
   switch (n.m_dtag)
     {
@@ -55,3 +57,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-name-components-visitor.h b/helper/ccnb-parser/visitors/name-components-visitor.h
similarity index 95%
rename from helper/ccnb-parser/visitors/ccnb-parser-name-components-visitor.h
rename to helper/ccnb-parser/visitors/name-components-visitor.h
index 70257c5..823de35 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-name-components-visitor.h
+++ b/helper/ccnb-parser/visitors/name-components-visitor.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_NAME_COMPONENTS_VISITOR_H_
 #define _CCNB_PARSER_NAME_COMPONENTS_VISITOR_H_
 
-#include "ccnb-parser-void-depth-first-visitor.h"
+#include "void-depth-first-visitor.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -38,6 +39,7 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_NAME_COMPONENTS_VISITOR_H_
 
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-no-argu-depth-first-visitor.cc b/helper/ccnb-parser/visitors/no-argu-depth-first-visitor.cc
similarity index 85%
rename from helper/ccnb-parser/visitors/ccnb-parser-no-argu-depth-first-visitor.cc
rename to helper/ccnb-parser/visitors/no-argu-depth-first-visitor.cc
index 12264fd..53f1122 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-no-argu-depth-first-visitor.cc
+++ b/helper/ccnb-parser/visitors/no-argu-depth-first-visitor.cc
@@ -18,19 +18,20 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-no-argu-depth-first-visitor.h"
+#include "no-argu-depth-first-visitor.h"
 
-#include "../syntax-tree/ccnb-parser-blob.h"
-#include "../syntax-tree/ccnb-parser-udata.h"
-#include "../syntax-tree/ccnb-parser-tag.h"
-#include "../syntax-tree/ccnb-parser-dtag.h"
-#include "../syntax-tree/ccnb-parser-attr.h"
-#include "../syntax-tree/ccnb-parser-dattr.h"
-#include "../syntax-tree/ccnb-parser-ext.h"
+#include "../syntax-tree/blob.h"
+#include "../syntax-tree/udata.h"
+#include "../syntax-tree/tag.h"
+#include "../syntax-tree/dtag.h"
+#include "../syntax-tree/attr.h"
+#include "../syntax-tree/dattr.h"
+#include "../syntax-tree/ext.h"
 
 #include <boost/foreach.hpp>
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 boost::any
@@ -106,3 +107,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-no-argu-depth-first-visitor.h b/helper/ccnb-parser/visitors/no-argu-depth-first-visitor.h
similarity index 96%
rename from helper/ccnb-parser/visitors/ccnb-parser-no-argu-depth-first-visitor.h
rename to helper/ccnb-parser/visitors/no-argu-depth-first-visitor.h
index 7d3841d..4b6c2e9 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-no-argu-depth-first-visitor.h
+++ b/helper/ccnb-parser/visitors/no-argu-depth-first-visitor.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_NO_ARGU_DEPTH_FIRST_VISITOR_H_
 #define _CCNB_PARSER_NO_ARGU_DEPTH_FIRST_VISITOR_H_
 
-#include "ccnb-parser-no-argu-visitor.h"
+#include "no-argu-visitor.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -44,5 +45,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_NO_ARGU_DEPTH_FIRST_VISITOR_H_
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-no-argu-visitor.h b/helper/ccnb-parser/visitors/no-argu-visitor.h
similarity index 97%
rename from helper/ccnb-parser/visitors/ccnb-parser-no-argu-visitor.h
rename to helper/ccnb-parser/visitors/no-argu-visitor.h
index 95be166..abbf843 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-no-argu-visitor.h
+++ b/helper/ccnb-parser/visitors/no-argu-visitor.h
@@ -21,10 +21,11 @@
 #ifndef _CCNB_PARSER_NO_ARGU_VISITOR_H_
 #define _CCNB_PARSER_NO_ARGU_VISITOR_H_
 
-#include "../ccnb-parser-common.h"
+#include "../common.h"
 #include <boost/any.hpp>
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -50,5 +51,6 @@
   
 }
 }
+}
 
 #endif // _CCNB_PARSER_NO_ARGU_VISITOR_H_
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-non-negative-integer-visitor.cc b/helper/ccnb-parser/visitors/non-negative-integer-visitor.cc
similarity index 90%
rename from helper/ccnb-parser/visitors/ccnb-parser-non-negative-integer-visitor.cc
rename to helper/ccnb-parser/visitors/non-negative-integer-visitor.cc
index a9aed41..d5fc041 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-non-negative-integer-visitor.cc
+++ b/helper/ccnb-parser/visitors/non-negative-integer-visitor.cc
@@ -18,13 +18,14 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-non-negative-integer-visitor.h"
+#include "non-negative-integer-visitor.h"
 
-#include "../syntax-tree/ccnb-parser-blob.h"
-#include "../syntax-tree/ccnb-parser-udata.h"
+#include "../syntax-tree/blob.h"
+#include "../syntax-tree/udata.h"
 #include <sstream>
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 boost::any
@@ -49,3 +50,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-non-negative-integer-visitor.h b/helper/ccnb-parser/visitors/non-negative-integer-visitor.h
similarity index 95%
rename from helper/ccnb-parser/visitors/ccnb-parser-non-negative-integer-visitor.h
rename to helper/ccnb-parser/visitors/non-negative-integer-visitor.h
index 7ecc3a9..2bb9f91 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-non-negative-integer-visitor.h
+++ b/helper/ccnb-parser/visitors/non-negative-integer-visitor.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_NON_NEGATIVE_INTEGER_VISITOR_H_
 #define _CCNB_PARSER_NON_NEGATIVE_INTEGER_VISITOR_H_
 
-#include "ccnb-parser-no-argu-depth-first-visitor.h"
+#include "no-argu-depth-first-visitor.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -41,5 +42,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_NON_NEGATIVE_INTEGER_VISITOR_H_
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-string-visitor.cc b/helper/ccnb-parser/visitors/string-visitor.cc
similarity index 89%
rename from helper/ccnb-parser/visitors/ccnb-parser-string-visitor.cc
rename to helper/ccnb-parser/visitors/string-visitor.cc
index 6fb5e6b..5f44bf3 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-string-visitor.cc
+++ b/helper/ccnb-parser/visitors/string-visitor.cc
@@ -18,11 +18,12 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-string-visitor.h"
-#include "../syntax-tree/ccnb-parser-udata.h"
-#include "../syntax-tree/ccnb-parser-blob.h"
+#include "string-visitor.h"
+#include "../syntax-tree/udata.h"
+#include "../syntax-tree/blob.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 boost::any
@@ -41,3 +42,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-string-visitor.h b/helper/ccnb-parser/visitors/string-visitor.h
similarity index 95%
rename from helper/ccnb-parser/visitors/ccnb-parser-string-visitor.h
rename to helper/ccnb-parser/visitors/string-visitor.h
index 2a1e8ed..ea285d1 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-string-visitor.h
+++ b/helper/ccnb-parser/visitors/string-visitor.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_STRING_VISITOR_H_
 #define _CCNB_PARSER_STRING_VISITOR_H_
 
-#include "ccnb-parser-no-argu-depth-first-visitor.h"
+#include "no-argu-depth-first-visitor.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -41,5 +42,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_STRING_VISITOR_H_
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-timestamp-visitor.cc b/helper/ccnb-parser/visitors/timestamp-visitor.cc
similarity index 95%
rename from helper/ccnb-parser/visitors/ccnb-parser-timestamp-visitor.cc
rename to helper/ccnb-parser/visitors/timestamp-visitor.cc
index 4569bb9..5917711 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-timestamp-visitor.cc
+++ b/helper/ccnb-parser/visitors/timestamp-visitor.cc
@@ -18,12 +18,13 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-timestamp-visitor.h"
-#include "../syntax-tree/ccnb-parser-blob.h"
+#include "timestamp-visitor.h"
+#include "../syntax-tree/blob.h"
 
 #include "ns3/nstime.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 boost::any/*Time*/
@@ -61,3 +62,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-timestamp-visitor.h b/helper/ccnb-parser/visitors/timestamp-visitor.h
similarity index 95%
rename from helper/ccnb-parser/visitors/ccnb-parser-timestamp-visitor.h
rename to helper/ccnb-parser/visitors/timestamp-visitor.h
index ff7e8c8..3884ff6 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-timestamp-visitor.h
+++ b/helper/ccnb-parser/visitors/timestamp-visitor.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_TIMESTAMP_VISITOR_H_
 #define _CCNB_PARSER_TIMESTAMP_VISITOR_H_
 
-#include "ccnb-parser-no-argu-depth-first-visitor.h"
+#include "no-argu-depth-first-visitor.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -41,5 +42,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_TIMESTAMP_VISITOR_H_
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-uint32t-blob-visitor.cc b/helper/ccnb-parser/visitors/uint32t-blob-visitor.cc
similarity index 92%
rename from helper/ccnb-parser/visitors/ccnb-parser-uint32t-blob-visitor.cc
rename to helper/ccnb-parser/visitors/uint32t-blob-visitor.cc
index fbeee6e..351cc36 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-uint32t-blob-visitor.cc
+++ b/helper/ccnb-parser/visitors/uint32t-blob-visitor.cc
@@ -18,10 +18,11 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-uint32t-blob-visitor.h"
-#include "../syntax-tree/ccnb-parser-blob.h"
+#include "uint32t-blob-visitor.h"
+#include "../syntax-tree/blob.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 boost::any
@@ -43,3 +44,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-uint32t-blob-visitor.h b/helper/ccnb-parser/visitors/uint32t-blob-visitor.h
similarity index 96%
rename from helper/ccnb-parser/visitors/ccnb-parser-uint32t-blob-visitor.h
rename to helper/ccnb-parser/visitors/uint32t-blob-visitor.h
index e06273f..de5f374 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-uint32t-blob-visitor.h
+++ b/helper/ccnb-parser/visitors/uint32t-blob-visitor.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_UINT32T_BLOB_VISITOR_H_
 #define _CCNB_PARSER_UINT32T_BLOB_VISITOR_H_
 
-#include "ccnb-parser-no-argu-depth-first-visitor.h"
+#include "no-argu-depth-first-visitor.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -44,5 +45,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_UINT32T_BLOB_VISITOR_H_
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-visitor.h b/helper/ccnb-parser/visitors/visitor.h
similarity index 95%
rename from helper/ccnb-parser/visitors/ccnb-parser-visitor.h
rename to helper/ccnb-parser/visitors/visitor.h
index bc858eb..76744ee 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-visitor.h
+++ b/helper/ccnb-parser/visitors/visitor.h
@@ -21,10 +21,11 @@
 #ifndef _CCNB_PARSER_VISITOR_H_
 #define _CCNB_PARSER_VISITOR_H_
 
-#include "../ccnb-parser-common.h"
+#include "../common.h"
 #include <boost/any.hpp>
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -48,7 +49,8 @@
   virtual ~Visitor () { }
 };                                                
                                                   
-}                                                 
+}
+}
 }                                                 
                                                   
 #endif // _CCNB_PARSER_VISITOR_H_                             
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-void-depth-first-visitor.cc b/helper/ccnb-parser/visitors/void-depth-first-visitor.cc
similarity index 85%
rename from helper/ccnb-parser/visitors/ccnb-parser-void-depth-first-visitor.cc
rename to helper/ccnb-parser/visitors/void-depth-first-visitor.cc
index 05218b5..1a1770a 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-void-depth-first-visitor.cc
+++ b/helper/ccnb-parser/visitors/void-depth-first-visitor.cc
@@ -18,19 +18,20 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-void-depth-first-visitor.h"
+#include "void-depth-first-visitor.h"
 
-#include "../syntax-tree/ccnb-parser-blob.h"
-#include "../syntax-tree/ccnb-parser-udata.h"
-#include "../syntax-tree/ccnb-parser-tag.h"
-#include "../syntax-tree/ccnb-parser-dtag.h"
-#include "../syntax-tree/ccnb-parser-attr.h"
-#include "../syntax-tree/ccnb-parser-dattr.h"
-#include "../syntax-tree/ccnb-parser-ext.h"
+#include "../syntax-tree/blob.h"
+#include "../syntax-tree/udata.h"
+#include "../syntax-tree/tag.h"
+#include "../syntax-tree/dtag.h"
+#include "../syntax-tree/attr.h"
+#include "../syntax-tree/dattr.h"
+#include "../syntax-tree/ext.h"
 
 #include <boost/foreach.hpp>
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 void
@@ -99,3 +100,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-void-depth-first-visitor.h b/helper/ccnb-parser/visitors/void-depth-first-visitor.h
similarity index 97%
rename from helper/ccnb-parser/visitors/ccnb-parser-void-depth-first-visitor.h
rename to helper/ccnb-parser/visitors/void-depth-first-visitor.h
index 35283d2..2e1862e 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-void-depth-first-visitor.h
+++ b/helper/ccnb-parser/visitors/void-depth-first-visitor.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_VOID_DEPTH_FIRST_VISITOR_H_
 #define _CCNB_PARSER_VOID_DEPTH_FIRST_VISITOR_H_
 
-#include "ccnb-parser-void-visitor.h"
+#include "void-visitor.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -44,5 +45,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_VOID_DEPTH_FIRST_VISITOR_H_
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-void-no-argu-depth-first-visitor.cc b/helper/ccnb-parser/visitors/void-no-argu-depth-first-visitor.cc
similarity index 84%
rename from helper/ccnb-parser/visitors/ccnb-parser-void-no-argu-depth-first-visitor.cc
rename to helper/ccnb-parser/visitors/void-no-argu-depth-first-visitor.cc
index 15519f2..439bf93 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-void-no-argu-depth-first-visitor.cc
+++ b/helper/ccnb-parser/visitors/void-no-argu-depth-first-visitor.cc
@@ -18,19 +18,20 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "ccnb-parser-void-no-argu-depth-first-visitor.h"
+#include "void-no-argu-depth-first-visitor.h"
 
-#include "../syntax-tree/ccnb-parser-blob.h"
-#include "../syntax-tree/ccnb-parser-udata.h"
-#include "../syntax-tree/ccnb-parser-tag.h"
-#include "../syntax-tree/ccnb-parser-dtag.h"
-#include "../syntax-tree/ccnb-parser-attr.h"
-#include "../syntax-tree/ccnb-parser-dattr.h"
-#include "../syntax-tree/ccnb-parser-ext.h"
+#include "../syntax-tree/blob.h"
+#include "../syntax-tree/udata.h"
+#include "../syntax-tree/tag.h"
+#include "../syntax-tree/dtag.h"
+#include "../syntax-tree/attr.h"
+#include "../syntax-tree/dattr.h"
+#include "../syntax-tree/ext.h"
 
 #include <boost/foreach.hpp>
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 void
@@ -99,3 +100,4 @@
 
 }
 }
+}
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-void-no-argu-depth-first-visitor.h b/helper/ccnb-parser/visitors/void-no-argu-depth-first-visitor.h
similarity index 96%
rename from helper/ccnb-parser/visitors/ccnb-parser-void-no-argu-depth-first-visitor.h
rename to helper/ccnb-parser/visitors/void-no-argu-depth-first-visitor.h
index e796c7f..995f90a 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-void-no-argu-depth-first-visitor.h
+++ b/helper/ccnb-parser/visitors/void-no-argu-depth-first-visitor.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_VOID_NO_ARGU_DEPTH_FIRST_VISITOR_H_
 #define _CCNB_PARSER_VOID_NO_ARGU_DEPTH_FIRST_VISITOR_H_
 
-#include "ccnb-parser-void-no-argu-visitor.h"
+#include "void-no-argu-visitor.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -44,5 +45,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_VOID_NO_ARGU_DEPTH_FIRST_VISITOR_H_
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-void-no-argu-visitor.h b/helper/ccnb-parser/visitors/void-no-argu-visitor.h
similarity index 97%
rename from helper/ccnb-parser/visitors/ccnb-parser-void-no-argu-visitor.h
rename to helper/ccnb-parser/visitors/void-no-argu-visitor.h
index 25f9e50..6dccf4e 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-void-no-argu-visitor.h
+++ b/helper/ccnb-parser/visitors/void-no-argu-visitor.h
@@ -21,9 +21,10 @@
 #ifndef _CCNB_PARSER_VOID_NO_ARGU_VISITOR_H_
 #define _CCNB_PARSER_VOID_NO_ARGU_VISITOR_H_
 
-#include "../ccnb-parser-common.h"
+#include "../common.h"
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -49,5 +50,6 @@
   
 }
 }
+}
 
 #endif // _CCNB_PARSER_VOID_NO_ARGU_VISITOR_H_
diff --git a/helper/ccnb-parser/visitors/ccnb-parser-void-visitor.h b/helper/ccnb-parser/visitors/void-visitor.h
similarity index 97%
rename from helper/ccnb-parser/visitors/ccnb-parser-void-visitor.h
rename to helper/ccnb-parser/visitors/void-visitor.h
index 1f9d1fa..6ad7eed 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-void-visitor.h
+++ b/helper/ccnb-parser/visitors/void-visitor.h
@@ -21,10 +21,11 @@
 #ifndef _CCNB_PARSER_VOID_VISITOR_H_
 #define _CCNB_PARSER_VOID_VISITOR_H_
 
-#include "../ccnb-parser-common.h"
+#include "../common.h"
 #include <boost/any.hpp>
 
 namespace ns3 {
+namespace ndn {
 namespace CcnbParser {
 
 /**
@@ -50,5 +51,6 @@
 
 }
 }
+}
 
 #endif // _CCNB_PARSER_VOID_VISITOR_H_
diff --git a/helper/ndn-app-helper.cc b/helper/ndn-app-helper.cc
index dcaee07..58f62d3 100644
--- a/helper/ndn-app-helper.cc
+++ b/helper/ndn-app-helper.cc
@@ -28,30 +28,30 @@
 #include "ns3/mpi-interface.h"
 #endif
 
-NS_LOG_COMPONENT_DEFINE ("NdnAppHelper");
+NS_LOG_COMPONENT_DEFINE ("ndn.AppHelper");
 
-namespace ns3 
-{
+namespace ns3 {
+namespace ndn {
 
-NdnAppHelper::NdnAppHelper (const std::string &app)
+AppHelper::AppHelper (const std::string &app)
 {
   m_factory.SetTypeId (app);
 }
 
 void
-NdnAppHelper::SetPrefix (const std::string &prefix)
+AppHelper::SetPrefix (const std::string &prefix)
 {
   m_factory.Set ("Prefix", StringValue(prefix));
 }
 
 void 
-NdnAppHelper::SetAttribute (std::string name, const AttributeValue &value)
+AppHelper::SetAttribute (std::string name, const AttributeValue &value)
 {
   m_factory.Set (name, value);
 }
     
 ApplicationContainer
-NdnAppHelper::Install (Ptr<Node> node)
+AppHelper::Install (Ptr<Node> node)
 {
   ApplicationContainer apps;
   Ptr<Application> app = InstallPriv (node);
@@ -62,14 +62,14 @@
 }
     
 ApplicationContainer
-NdnAppHelper::Install (std::string nodeName)
+AppHelper::Install (std::string nodeName)
 {
   Ptr<Node> node = Names::Find<Node> (nodeName);
   return Install (node);
 }
     
 ApplicationContainer
-NdnAppHelper::Install (NodeContainer c)
+AppHelper::Install (NodeContainer c)
 {
   ApplicationContainer apps;
   for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
@@ -83,7 +83,7 @@
 }
     
 Ptr<Application>
-NdnAppHelper::InstallPriv (Ptr<Node> node)
+AppHelper::InstallPriv (Ptr<Node> node)
 {
 #ifdef NS3_MPI
   if (MpiInterface::IsEnabled () &&
@@ -94,10 +94,11 @@
     }
 #endif
   
-  Ptr<NdnApp> app = m_factory.Create<NdnApp> ();        
+  Ptr<App> app = m_factory.Create<App> ();        
   node->AddApplication (app);
         
   return app;
 }
 
-}
+} // namespace ndn
+} // namespace ns3
diff --git a/helper/ndn-app-helper.h b/helper/ndn-app-helper.h
index 1a76c84..94d1046 100644
--- a/helper/ndn-app-helper.h
+++ b/helper/ndn-app-helper.h
@@ -27,14 +27,14 @@
 #include "ns3/application-container.h"
 #include "ns3/ptr.h"
 
-namespace ns3 
-{
+namespace ns3 {
+namespace ndn {
 
 /**
  * \brief A helper to make it easier to instantiate an ns3::NdnConsumer Application
  * on a set of nodes.
  */
-class NdnAppHelper
+class AppHelper
 {        
 public:
 
@@ -43,7 +43,7 @@
    *
    * \param app Class of the application
    */
-  NdnAppHelper (const std::string &prefix);
+  AppHelper (const std::string &prefix);
 
   /**
    * @brief Set the prefix consumer will be requesting
@@ -100,6 +100,7 @@
   ObjectFactory m_factory;
 };
 
+} // namespace ndn
 } // namespace ns3
 
 #endif // NDN_APP_HELPER_H
diff --git a/helper/ndn-decoding-helper.cc b/helper/ndn-decoding-helper.cc
index 4e5e6b8..89936c1 100644
--- a/helper/ndn-decoding-helper.cc
+++ b/helper/ndn-decoding-helper.cc
@@ -22,19 +22,20 @@
 
 #include "ns3/ndn-interest-header.h"
 
-#include "ccnb-parser/visitors/ccnb-parser-interest-visitor.h"
+#include "ccnb-parser/visitors/interest-visitor.h"
 
-#include "ccnb-parser/syntax-tree/ccnb-parser-block.h"
-#include "ccnb-parser/syntax-tree/ccnb-parser-dtag.h"
+#include "ccnb-parser/syntax-tree/block.h"
+#include "ccnb-parser/syntax-tree/dtag.h"
 
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("NdnDecodingHelper");
+NS_LOG_COMPONENT_DEFINE ("ndn.DecodingHelper");
 
 namespace ns3 {
+namespace ndn {
 
 size_t
-NdnDecodingHelper::Deserialize (Buffer::Iterator start, NdnInterestHeader &interest)
+DecodingHelper::Deserialize (Buffer::Iterator start, InterestHeader &interest)
 {
   static CcnbParser::InterestVisitor interestVisitor;
 
@@ -57,4 +58,5 @@
 //   return i.GetDistanceFrom (start);
 // }
 
+} // namespace ndn
 } // namespace ns3
diff --git a/helper/ndn-decoding-helper.h b/helper/ndn-decoding-helper.h
index f6ab9fa..9e1f5ef 100644
--- a/helper/ndn-decoding-helper.h
+++ b/helper/ndn-decoding-helper.h
@@ -25,14 +25,15 @@
 #include "ns3/buffer.h"
 
 namespace ns3 {
+namespace ndn {
 
-class NdnInterestHeader;
-class NdnContentObjectHeader;
+class InterestHeader;
+class ContentObjectHeader;
 
 /**
  * \brief Helper class to decode ccnb formatted Ndn message
  */
-class NdnDecodingHelper
+class DecodingHelper
 {
 public:
   /**
@@ -42,7 +43,7 @@
    * @return Number of bytes used for deserialization
    */
   static size_t
-  Deserialize (Buffer::Iterator start, NdnInterestHeader &interest);
+  Deserialize (Buffer::Iterator start, InterestHeader &interest);
 
   /**
    * \brief Deserialize Buffer::Iterator to NdnContentObjectHeader
@@ -50,9 +51,11 @@
    * @param contentObject Pointer to the NdnContentObjectHeader to hold deserialized value
    * @return Number of bytes used for deserialization
    */
-  static size_t
-  Deserialize (Buffer::Iterator start, NdnContentObjectHeader &contentObject);
+  // static size_t
+  // Deserialize (Buffer::Iterator start, ContentObjectHeader &contentObject);
 };
+
+} // namespace ndn
 } // namespace ns3
 
 #endif // _NDN_DECODING_HELPER_H_
diff --git a/helper/ndn-encoding-helper.cc b/helper/ndn-encoding-helper.cc
index 200072b..c9292ab 100644
--- a/helper/ndn-encoding-helper.cc
+++ b/helper/ndn-encoding-helper.cc
@@ -28,9 +28,10 @@
 #include <boost/foreach.hpp>
 
 namespace ns3 {
+namespace ndn {
 
 size_t
-NdnEncodingHelper::Serialize (Buffer::Iterator start, const NdnInterestHeader &interest)
+EncodingHelper::Serialize (Buffer::Iterator start, const InterestHeader &interest)
 {
   size_t written = 0;
   written += AppendBlockHeader (start, CcnbParser::CCN_DTAG_Interest, CcnbParser::CCN_DTAG); // <Interest>
@@ -99,7 +100,7 @@
 }
 
 size_t
-NdnEncodingHelper::GetSerializedSize (const NdnInterestHeader &interest)
+EncodingHelper::GetSerializedSize (const InterestHeader &interest)
 {
   size_t written = 0;
   written += EstimateBlockHeader (CcnbParser::CCN_DTAG_Interest); // <Interest>
@@ -176,7 +177,7 @@
 #define CCN_TT_HBIT ((unsigned char)(1 << 7))
 
 size_t
-NdnEncodingHelper::AppendBlockHeader (Buffer::Iterator &start, size_t val, CcnbParser::ccn_tt tt)
+EncodingHelper::AppendBlockHeader (Buffer::Iterator &start, size_t val, CcnbParser::ccn_tt tt)
 {
   unsigned char buf[1+8*((sizeof(val)+6)/7)];
   unsigned char *p = &(buf[sizeof(buf)-1]);
@@ -195,7 +196,7 @@
 }
 
 size_t
-NdnEncodingHelper::EstimateBlockHeader (size_t value)
+EncodingHelper::EstimateBlockHeader (size_t value)
 {
   value >>= (7-CCN_TT_BITS);
   size_t n = 1;
@@ -208,7 +209,7 @@
 }
 
 size_t
-NdnEncodingHelper::AppendNumber (Buffer::Iterator &start, uint32_t number)
+EncodingHelper::AppendNumber (Buffer::Iterator &start, uint32_t number)
 {
   std::ostringstream os;
   os << number;
@@ -222,7 +223,7 @@
 }
 
 size_t
-NdnEncodingHelper::EstimateNumber (uint32_t number)
+EncodingHelper::EstimateNumber (uint32_t number)
 {
   std::ostringstream os;
   os << number;
@@ -230,14 +231,14 @@
 }
   
 size_t
-NdnEncodingHelper::AppendCloser (Buffer::Iterator &start)
+EncodingHelper::AppendCloser (Buffer::Iterator &start)
 {
   start.WriteU8 (CcnbParser::CCN_CLOSE);
   return 1;
 }
 
 size_t
-NdnEncodingHelper::AppendNameComponents (Buffer::Iterator &start, const NdnNameComponents &name)
+EncodingHelper::AppendNameComponents (Buffer::Iterator &start, const NameComponents &name)
 {
   size_t written = 0;
   BOOST_FOREACH (const std::string &component, name.GetComponents())
@@ -249,7 +250,7 @@
 }
 
 size_t
-NdnEncodingHelper::EstimateNameComponents (const NdnNameComponents &name)
+EncodingHelper::EstimateNameComponents (const NameComponents &name)
 {
   size_t written = 0;
   BOOST_FOREACH (const std::string &component, name.GetComponents())
@@ -260,7 +261,7 @@
 }
 
 size_t
-NdnEncodingHelper::AppendTimestampBlob (Buffer::Iterator &start, const Time &time)
+EncodingHelper::AppendTimestampBlob (Buffer::Iterator &start, const Time &time)
 {
   // the original function implements Markers... thought not sure what are these markers for...
 
@@ -287,7 +288,7 @@
 }
 
 size_t
-NdnEncodingHelper::EstimateTimestampBlob (const Time &time)
+EncodingHelper::EstimateTimestampBlob (const Time &time)
 {
   int required_bytes = 2; // 12 bits for fractions of a second, 4 bits left for seconds. Sometimes it is enough
   intmax_t ts = time.ToInteger (Time::S) >> 4;
@@ -298,7 +299,7 @@
 }
 
 size_t
-NdnEncodingHelper::AppendTaggedBlob (Buffer::Iterator &start, CcnbParser::ccn_dtag dtag,
+EncodingHelper::AppendTaggedBlob (Buffer::Iterator &start, CcnbParser::ccn_dtag dtag,
                   const uint8_t *data, size_t size)
 {
   size_t written = AppendBlockHeader (start, dtag, CcnbParser::CCN_DTAG);
@@ -317,7 +318,7 @@
 }
 
 size_t
-NdnEncodingHelper::EstimateTaggedBlob (CcnbParser::ccn_dtag dtag, size_t size)
+EncodingHelper::EstimateTaggedBlob (CcnbParser::ccn_dtag dtag, size_t size)
 {
   if (size>0)
     return EstimateBlockHeader (dtag) + EstimateBlockHeader (size) + size + 1;
@@ -326,7 +327,7 @@
 }
 
 size_t
-NdnEncodingHelper::AppendString (Buffer::Iterator &start, CcnbParser::ccn_dtag dtag,
+EncodingHelper::AppendString (Buffer::Iterator &start, CcnbParser::ccn_dtag dtag,
                                   const std::string &string)
 {
   size_t written = AppendBlockHeader (start, dtag, CcnbParser::CCN_DTAG);
@@ -341,10 +342,11 @@
 }
 
 size_t
-NdnEncodingHelper::EstimateString (CcnbParser::ccn_dtag dtag, const std::string &string)
+EncodingHelper::EstimateString (CcnbParser::ccn_dtag dtag, const std::string &string)
 {
   return EstimateBlockHeader (dtag) + EstimateBlockHeader (string.size ()) + string.size () + 1;
 }
 
 
+} // namespace ndn
 } // namespace ns3
diff --git a/helper/ndn-encoding-helper.h b/helper/ndn-encoding-helper.h
index 90b3f57..66796c3 100644
--- a/helper/ndn-encoding-helper.h
+++ b/helper/ndn-encoding-helper.h
@@ -23,22 +23,23 @@
 
 #include <sys/types.h>
 
-#include "ccnb-parser/ccnb-parser-common.h"
+#include "ccnb-parser/common.h"
 #include "ns3/ptr.h"
 #include "ns3/nstime.h"
 #include "ns3/buffer.h"
 
 namespace ns3 {
+namespace ndn {
 
-class NdnNameComponents;
+class NameComponents;
 
-class NdnInterestHeader;
-class NdnContentObjectHeader;
+class InterestHeader;
+class ContentObjectHeader;
   
 /**
  * \brief Helper to encode/decode ccnb formatted Ndn message
  */
-class NdnEncodingHelper
+class EncodingHelper
 {
 public:
   /**
@@ -48,7 +49,7 @@
    * @return length of serialized NdnInterestHeader
    */
   static size_t
-  Serialize (Buffer::Iterator start, const NdnInterestHeader &interest);
+  Serialize (Buffer::Iterator start, const InterestHeader &interest);
 
   /**
    * \brief Compute the size of serialized NdnInterestHeader
@@ -56,7 +57,7 @@
    * @return length 
    */
   static size_t
-  GetSerializedSize (const NdnInterestHeader &interest);
+  GetSerializedSize (const InterestHeader &interest);
   
 public:
   /**
@@ -98,7 +99,7 @@
 
   /**
    * @brief Append CCNB closer tag (estimated size is 1)
-   * @param start Buffer to store serialized NdnInterestHeader
+   * @param start Buffer to store serialized InterestHeader
    *
    * @returns written length
    */
@@ -106,22 +107,22 @@
   AppendCloser (Buffer::Iterator &start);
 
   /**
-   * @brief Append NdnNameComponents in CCNB encoding
-   * @param start Buffer to store serialized NdnInterestHeader
-   * @param name constant reference to NdnNameComponents object
+   * @brief Append NameComponents in CCNB encoding
+   * @param start Buffer to store serialized InterestHeader
+   * @param name constant reference to NameComponents object
    *
    * @returns written length
    */
   static size_t
-  AppendNameComponents (Buffer::Iterator &start, const NdnNameComponents &name);
+  AppendNameComponents (Buffer::Iterator &start, const NameComponents &name);
 
   /**
-   * @brief Estimate size of NdnNameComponents in CCNB encoding
-   * @param name constant reference to NdnNameComponents object
+   * @brief Estimate size of NameComponents in CCNB encoding
+   * @param name constant reference to NameComponents object
    * @returns estimated length
    */
   static size_t
-  EstimateNameComponents (const NdnNameComponents &name);
+  EstimateNameComponents (const NameComponents &name);
 
   /**
    * Append a binary timestamp as a BLOB using the ccn binary
@@ -213,11 +214,12 @@
 
 template<class T>
 size_t
-NdnEncodingHelper::AppendTaggedBlob (Buffer::Iterator &start, CcnbParser::ccn_dtag dtag, const T &data)
+EncodingHelper::AppendTaggedBlob (Buffer::Iterator &start, CcnbParser::ccn_dtag dtag, const T &data)
 {
   return AppendTaggedBlob (start, dtag, reinterpret_cast<const uint8_t*> (&data), sizeof (data));
 }
 
+} // namespace ndn
 } // namespace ns3
 
 #endif // _NDN_ENCODING_HELPER_H_
diff --git a/helper/ndn-face-container.cc b/helper/ndn-face-container.cc
index 2e0ec33..888b9a8 100644
--- a/helper/ndn-face-container.cc
+++ b/helper/ndn-face-container.cc
@@ -25,18 +25,19 @@
 #include "ns3/ndn-face.h"
 
 namespace ns3 {
+namespace ndn {
 
-NdnFaceContainer::NdnFaceContainer ()
+FaceContainer::FaceContainer ()
 {
 }
 
-NdnFaceContainer::NdnFaceContainer (const NdnFaceContainer &other)
+FaceContainer::FaceContainer (const FaceContainer &other)
 {
   AddAll (other);
 }
 
-NdnFaceContainer&
-NdnFaceContainer::operator= (const NdnFaceContainer &other)
+FaceContainer&
+FaceContainer::operator= (const FaceContainer &other)
 {
   m_faces.clear ();
   AddAll (other);
@@ -46,38 +47,38 @@
 
   
 void
-NdnFaceContainer::AddAll (Ptr<NdnFaceContainer> other)
+FaceContainer::AddAll (Ptr<FaceContainer> other)
 {
   AddAll (*other);
 }
 
 void
-NdnFaceContainer::AddAll (const NdnFaceContainer &other)
+FaceContainer::AddAll (const FaceContainer &other)
 {
   m_faces.insert (m_faces.end (),
                   other.m_faces.begin (), other.m_faces.end ());
 }
 
-NdnFaceContainer::Iterator
-NdnFaceContainer::Begin (void) const
+FaceContainer::Iterator
+FaceContainer::Begin (void) const
 {
   return m_faces.begin ();
 }
 
-NdnFaceContainer::Iterator
-NdnFaceContainer::End (void) const
+FaceContainer::Iterator
+FaceContainer::End (void) const
 {
   return m_faces.end ();
 }
 
 uint32_t
-NdnFaceContainer::GetN (void) const
+FaceContainer::GetN (void) const
 {
   return m_faces.size ();
 }
 
 // void 
-// NdnFaceContainer::SetMetricToAll (uint16_t metric)
+// FaceContainer::SetMetricToAll (uint16_t metric)
 // {
 //   for (FaceContainer::iterator it=m_faces.begin ();
 //        it != m_faces.end ();
@@ -88,16 +89,16 @@
 // }
 
 void 
-NdnFaceContainer::Add (const Ptr<NdnFace> &face)
+FaceContainer::Add (const Ptr<Face> &face)
 {
   m_faces.push_back (face);
 }
 
-Ptr<NdnFace>
-NdnFaceContainer::Get (NdnFaceContainer::Iterator i) const
+Ptr<Face>
+FaceContainer::Get (FaceContainer::Iterator i) const
 {
   return *i;
 }
 
-
+} // namespace ndn
 } // namespace ns3
diff --git a/helper/ndn-face-container.h b/helper/ndn-face-container.h
index e1fd4b2..692daf6 100644
--- a/helper/ndn-face-container.h
+++ b/helper/ndn-face-container.h
@@ -29,6 +29,7 @@
 #include "ns3/ndn-face.h"
 
 namespace ns3 {
+namespace ndn {
 
 /**
  * \ingroup ndn-helpers
@@ -39,47 +40,47 @@
  *
  * \see NdnStackHelper
  */
-class NdnFaceContainer : public SimpleRefCount<NdnFaceContainer>
+class FaceContainer : public SimpleRefCount<FaceContainer>
 {
 private:
-  typedef std::vector<Ptr<NdnFace> > FaceContainer;
+  typedef std::vector< Ptr<Face> > Container;
 public:
-  typedef FaceContainer::const_iterator Iterator; ///< \brief Iterator over NdnFaceContainer
+  typedef Container::const_iterator Iterator; ///< \brief Iterator over FaceContainer
 
   /**
-   * \brief Create an empty NdnFaceContainer.
+   * \brief Create an empty FaceContainer.
    */
-  NdnFaceContainer ();
+  FaceContainer ();
 
   /**
-   * \brief Copy constructor for NdnFaceContainer. Calls AddAll method
+   * \brief Copy constructor for FaceContainer. Calls AddAll method
    *
-   * \see NdnFaceContainer::AddAll
+   * \see FaceContainer::AddAll
    */
-  NdnFaceContainer (const NdnFaceContainer &other);
+  FaceContainer (const FaceContainer &other);
 
   /**
-   * \brief Copy operator for NdnFaceContainer. Empties vector and calls AddAll method
+   * \brief Copy operator for FaceContainer. Empties vector and calls AddAll method
    *
    * All previously obtained iterators (Begin() and End()) will be invalidated
    *
-   * \see NdnFaceContainer::AddAll
+   * \see FaceContainer::AddAll
    */
-  NdnFaceContainer& operator= (const NdnFaceContainer &other);
+  FaceContainer& operator= (const FaceContainer &other);
   
   /**
    * \brief Add all entries from other container
    *
    * \param other smart pointer to a container
    */
-  void AddAll (Ptr<NdnFaceContainer> other);
+  void AddAll (Ptr<FaceContainer> other);
 
   /**
    * \brief Add all entries from other container
    *
    * \param other container
    */
-  void AddAll (const NdnFaceContainer &other);
+  void AddAll (const FaceContainer &other);
 
   /**
    * \brief Get an iterator which refers to the first pair in the
@@ -114,27 +115,28 @@
   /**
    * Add an entry to the container
    *
-   * \param face a smart pointer to a NdnFace-derived object
+   * \param face a smart pointer to a Face-derived object
    *
-   * @see NdnFace
+   * @see Face
    */
-  void Add (const Ptr<NdnFace> &face);
+  void Add (const Ptr<Face> &face);
 
   /**
-   * Get a smart pointer to NdnFace-derived object stored in the container
+   * Get a smart pointer to Face-derived object stored in the container
    *
    * \param i the iterator corresponding to the requested object
    *
    * This method is redundant and simple dereferencing of the iterator should be used instead
    *
-   * @see NdnFace
+   * @see Face
    */
-  Ptr<NdnFace> Get (Iterator i) const;
+  Ptr<Face> Get (Iterator i) const;
 
 private:
-  FaceContainer m_faces;
+  Container m_faces;
 };
 
+} // namespace ndn
 } // namespace ns3
 
 #endif /* NDN_FACE_CONTAINER_H */
diff --git a/helper/ndn-global-routing-helper.cc b/helper/ndn-global-routing-helper.cc
index c3c9968..4ee8f58 100644
--- a/helper/ndn-global-routing-helper.cc
+++ b/helper/ndn-global-routing-helper.cc
@@ -20,7 +20,7 @@
 
 #include "ndn-global-routing-helper.h"
 
-#include "ns3/ndn.h"
+#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"
@@ -45,34 +45,35 @@
 
 #include "boost-graph-ndn-global-routing-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("NdnGlobalRoutingHelper");
+NS_LOG_COMPONENT_DEFINE ("ndn.GlobalRoutingHelper");
 
 using namespace std;
 using namespace boost;
 
 namespace ns3 {
+namespace ndn {
 
 void
-NdnGlobalRoutingHelper::Install (Ptr<Node> node)
+GlobalRoutingHelper::Install (Ptr<Node> node)
 {
   NS_LOG_LOGIC ("Node: " << node->GetId ());
   
-  Ptr<Ndn> ndn = node->GetObject<Ndn> ();
-  NS_ASSERT_MSG (ndn != 0, "Cannot install NdnGlobalRoutingHelper before Ndn is installed on a node");
+  Ptr<L3Protocol> ndn = node->GetObject<L3Protocol> ();
+  NS_ASSERT_MSG (ndn != 0, "Cannot install GlobalRoutingHelper before Ndn is installed on a node");
 
-  Ptr<NdnGlobalRouter> gr = node->GetObject<NdnGlobalRouter> ();
+  Ptr<GlobalRouter> gr = node->GetObject<GlobalRouter> ();
   if (gr != 0)
     {
-      NS_LOG_DEBUG ("NdnGlobalRouter is already installed: " << gr);
+      NS_LOG_DEBUG ("GlobalRouter is already installed: " << gr);
       return; // already installed
     }
   
-  gr = CreateObject<NdnGlobalRouter> ();
+  gr = CreateObject<GlobalRouter> ();
   node->AggregateObject (gr);
   
   for (uint32_t faceId = 0; faceId < ndn->GetNFaces (); faceId++)
     {
-      Ptr<NdnNetDeviceFace> face = DynamicCast<NdnNetDeviceFace> (ndn->GetFace (faceId));
+      Ptr<NetDeviceFace> face = DynamicCast<NetDeviceFace> (ndn->GetFace (faceId));
       if (face == 0)
 	{
 	  NS_LOG_DEBUG ("Skipping non-netdevice face");
@@ -82,7 +83,7 @@
       Ptr<NetDevice> nd = face->GetNetDevice ();
       if (nd == 0)
 	{
-	  NS_LOG_DEBUG ("Not a NetDevice associated with NdnNetDeviceFace");
+	  NS_LOG_DEBUG ("Not a NetDevice associated with NetDeviceFace");
 	  continue;
 	}
       
@@ -104,24 +105,24 @@
 	      Ptr<Node> otherNode = otherSide->GetNode ();
 	      NS_ASSERT (otherNode != 0);
 	      
-	      Ptr<NdnGlobalRouter> otherGr = otherNode->GetObject<NdnGlobalRouter> ();
+	      Ptr<GlobalRouter> otherGr = otherNode->GetObject<GlobalRouter> ();
 	      if (otherGr == 0)
 		{
 		  Install (otherNode);
 		}
-	      otherGr = otherNode->GetObject<NdnGlobalRouter> ();
+	      otherGr = otherNode->GetObject<GlobalRouter> ();
 	      NS_ASSERT (otherGr != 0);
 	      gr->AddIncidency (face, otherGr);
 	    }
 	}
       else
 	{
-	  Ptr<NdnGlobalRouter> grChannel = ch->GetObject<NdnGlobalRouter> ();
+	  Ptr<GlobalRouter> grChannel = ch->GetObject<GlobalRouter> ();
 	  if (grChannel == 0)
 	    {
 	      Install (ch);
 	    }
-	  grChannel = ch->GetObject<NdnGlobalRouter> ();
+	  grChannel = ch->GetObject<GlobalRouter> ();
 	  
 	  gr->AddIncidency (0, grChannel);
 	}
@@ -129,15 +130,15 @@
 }
 
 void
-NdnGlobalRoutingHelper::Install (Ptr<Channel> channel)
+GlobalRoutingHelper::Install (Ptr<Channel> channel)
 {
   NS_LOG_LOGIC ("Channel: " << channel->GetId ());
 
-  Ptr<NdnGlobalRouter> gr = channel->GetObject<NdnGlobalRouter> ();
+  Ptr<GlobalRouter> gr = channel->GetObject<GlobalRouter> ();
   if (gr != 0)
     return;
 
-  gr = CreateObject<NdnGlobalRouter> ();
+  gr = CreateObject<GlobalRouter> ();
   channel->AggregateObject (gr);
   
   for (uint32_t deviceId = 0; deviceId < channel->GetNDevices (); deviceId ++)
@@ -147,12 +148,12 @@
       Ptr<Node> node = dev->GetNode ();
       NS_ASSERT (node != 0);
 
-      Ptr<NdnGlobalRouter> grOther = node->GetObject<NdnGlobalRouter> ();
+      Ptr<GlobalRouter> grOther = node->GetObject<GlobalRouter> ();
       if (grOther == 0)
 	{
 	  Install (node);
 	}
-      grOther = node->GetObject<NdnGlobalRouter> ();
+      grOther = node->GetObject<GlobalRouter> ();
       NS_ASSERT (grOther != 0);
 
       gr->AddIncidency (0, grOther);
@@ -160,7 +161,7 @@
 }
 
 void
-NdnGlobalRoutingHelper::Install (const NodeContainer &nodes)
+GlobalRoutingHelper::Install (const NodeContainer &nodes)
 {
   for (NodeContainer::Iterator node = nodes.Begin ();
        node != nodes.End ();
@@ -171,25 +172,25 @@
 }
 
 void
-NdnGlobalRoutingHelper::InstallAll ()
+GlobalRoutingHelper::InstallAll ()
 {
   Install (NodeContainer::GetGlobal ());
 }
 
 
 void
-NdnGlobalRoutingHelper::AddOrigin (const std::string &prefix, Ptr<Node> node)
+GlobalRoutingHelper::AddOrigin (const std::string &prefix, Ptr<Node> node)
 {
-  Ptr<NdnGlobalRouter> gr = node->GetObject<NdnGlobalRouter> ();
+  Ptr<GlobalRouter> gr = node->GetObject<GlobalRouter> ();
   NS_ASSERT_MSG (gr != 0,
-		 "NdnGlobalRouter is not installed on the node");
+		 "GlobalRouter is not installed on the node");
 
-  Ptr<NdnNameComponents> name = Create<NdnNameComponents> (boost::lexical_cast<NdnNameComponents> (prefix));
+  Ptr<NameComponents> name = Create<NameComponents> (boost::lexical_cast<NameComponents> (prefix));
   gr->AddLocalPrefix (name);  
 }
 
 void
-NdnGlobalRoutingHelper::AddOrigins (const std::string &prefix, const NodeContainer &nodes)
+GlobalRoutingHelper::AddOrigins (const std::string &prefix, const NodeContainer &nodes)
 {
   for (NodeContainer::Iterator node = nodes.Begin ();
        node != nodes.End ();
@@ -200,7 +201,7 @@
 }
 
 void
-NdnGlobalRoutingHelper::AddOrigin (const std::string &prefix, const std::string &nodeName)
+GlobalRoutingHelper::AddOrigin (const std::string &prefix, const std::string &nodeName)
 {
   Ptr<Node> node = Names::Find<Node> (nodeName);
   NS_ASSERT_MSG (node != 0, nodeName << "is not a Node");
@@ -209,7 +210,7 @@
 }
 
 void
-NdnGlobalRoutingHelper::CalculateRoutes ()
+GlobalRoutingHelper::CalculateRoutes ()
 {
   /**
    * Implementation of route calculation is heavily based on Boost Graph Library
@@ -227,10 +228,10 @@
   // is not obviously how implement in an efficient manner
   for (NodeList::Iterator node = NodeList::Begin (); node != NodeList::End (); node++)
     {
-      Ptr<NdnGlobalRouter> source = (*node)->GetObject<NdnGlobalRouter> ();
+      Ptr<GlobalRouter> source = (*node)->GetObject<GlobalRouter> ();
       if (source == 0)
 	{
-	  NS_LOG_DEBUG ("Node " << (*node)->GetId () << " does not export NdnGlobalRouter interface");
+	  NS_LOG_DEBUG ("Node " << (*node)->GetId () << " does not export GlobalRouter interface");
 	  continue;
 	}
   
@@ -252,7 +253,7 @@
 
       // NS_LOG_DEBUG (predecessors.size () << ", " << distances.size ());
 
-      Ptr<NdnFib>  fib  = source->GetObject<NdnFib> ();
+      Ptr<Fib>  fib  = source->GetObject<Fib> ();
       fib->InvalidateAll ();
       NS_ASSERT (fib != 0);
       
@@ -275,7 +276,7 @@
 		// cout << " reachable via face " << *i->second.get<0> ()
 		//      << " with distance " << i->second.get<1> () << endl;
 
-		BOOST_FOREACH (const Ptr<const NdnNameComponents> &prefix, i->first->GetLocalPrefixes ())
+		BOOST_FOREACH (const Ptr<const NameComponents> &prefix, i->first->GetLocalPrefixes ())
 		  {
 		    fib->Add (prefix, i->second.get<0> (), i->second.get<1> ());
 		  }
@@ -286,4 +287,5 @@
 }
 
 
-}
+} // namespace ndn
+} // namespace ns3
diff --git a/helper/ndn-global-routing-helper.h b/helper/ndn-global-routing-helper.h
index ac92641..17493d2 100644
--- a/helper/ndn-global-routing-helper.h
+++ b/helper/ndn-global-routing-helper.h
@@ -29,36 +29,38 @@
 class NodeContainer;
 class Channel;
 
+namespace ndn {
+
 /**
  * @ingroup ndn
- * @brief Helper for NdnGlobalRouter interface
+ * @brief Helper for GlobalRouter interface
  */
-class NdnGlobalRoutingHelper
+class GlobalRoutingHelper
 {
 public:
   /**
-   * @brief Install NdnGlobalRouter interface on a node
+   * @brief Install GlobalRouter interface on a node
    *
-   * Note that NdnGlobalRouter will also be installed on all connected nodes and channels
+   * Note that GlobalRouter will also be installed on all connected nodes and channels
    *
-   * @param node Node to install NdnGlobalRouter interface
+   * @param node Node to install GlobalRouter interface
    */
   void
   Install (Ptr<Node> node);
 
   
   /**
-   * @brief Install NdnGlobalRouter interface on nodes
+   * @brief Install GlobalRouter interface on nodes
    *
-   * Note that NdnGlobalRouter will also be installed on all connected nodes and channels
+   * Note that GlobalRouter will also be installed on all connected nodes and channels
    *
-   * @param nodes NodeContainer to install NdnGlobalRouter interface
+   * @param nodes NodeContainer to install GlobalRouter interface
    */
   void
   Install (const NodeContainer &nodes);
 
   /**
-   * @brief Install NdnGlobalRouter interface on all nodes
+   * @brief Install GlobalRouter interface on all nodes
    */
   void
   InstallAll ();
@@ -98,6 +100,7 @@
   Install (Ptr<Channel> channel);
 };
 
-}
+} // namespace ndn
+} // namespace ns3
 
 #endif // NDN_GLOBAL_ROUTING_HELPER_H
diff --git a/helper/ndn-header-helper.cc b/helper/ndn-header-helper.cc
index 58f8dde..8121764 100644
--- a/helper/ndn-header-helper.cc
+++ b/helper/ndn-header-helper.cc
@@ -29,32 +29,39 @@
 #include "ns3/ndn-content-object-header.h"
 #include <iomanip>
 
-NS_LOG_COMPONENT_DEFINE ("NdnHeaderHelper");
+NS_LOG_COMPONENT_DEFINE ("ndn.HeaderHelper");
+
+#define INTEREST_BYTE0 0x01
+#define INTEREST_BYTE1 0xD2
+
+#define CONTENT_OBJECT_BYTE0 0x04
+#define CONTENT_OBJECT_BYTE1 0x82
 
 
-namespace ns3
-{
+namespace ns3 {
+namespace ndn {
 
-NdnHeaderHelper::Type
-NdnHeaderHelper::GetNdnHeaderType (Ptr<const Packet> packet)
+HeaderHelper::Type
+HeaderHelper::GetNdnHeaderType (Ptr<const Packet> packet)
 {
   uint8_t type[2];
   uint32_t read=packet->CopyData (type,2);
 
-  if (read!=2) throw NdnUnknownHeaderException();
+  if (read!=2) throw UnknownHeaderException();
 
   NS_LOG_DEBUG (*packet);
   if (type[0] == INTEREST_BYTE0 && type[1] == INTEREST_BYTE1)
     {
-      return NdnHeaderHelper::INTEREST;
+      return HeaderHelper::INTEREST;
     }
   else if (type[0] == CONTENT_OBJECT_BYTE0 && type[1] == CONTENT_OBJECT_BYTE1)
     {
-      return NdnHeaderHelper::CONTENT_OBJECT;
+      return HeaderHelper::CONTENT_OBJECT;
     }
 
   NS_LOG_DEBUG (*packet);
-  throw NdnUnknownHeaderException();
+  throw UnknownHeaderException();
 }
 
+} // namespace ndn
 } // namespace ns3
diff --git a/helper/ndn-header-helper.h b/helper/ndn-header-helper.h
index 7f2e111..47d8ed4 100644
--- a/helper/ndn-header-helper.h
+++ b/helper/ndn-header-helper.h
@@ -23,18 +23,13 @@
 
 #include "ns3/ptr.h"
 
-#define INTEREST_BYTE0 0x01
-#define INTEREST_BYTE1 0xD2
-
-#define CONTENT_OBJECT_BYTE0 0x04
-#define CONTENT_OBJECT_BYTE1 0x82
-
-namespace ns3
-{
+namespace ns3 {
 
 class Header;
 class Packet;
 
+namespace ndn {
+
 /**
  * \ingroup ndn-helpers
  *
@@ -43,11 +38,11 @@
  *
  * Ndn doesn't really have a header, so we need this class to
  * determine type of Ndn packet and return corresponent header class,
- * NdnInterestHeader or NdnContentObjectHeader
+ * InterestHeader or ContentObjectHeader
  *
- * Throws NdnUnknownHeaderException if header type couldn't be determined
+ * Throws UnknownHeaderException if header type couldn't be determined
  */
-class NdnHeaderHelper
+class HeaderHelper
 {
 public:
   /**
@@ -89,8 +84,9 @@
    * \brief Exception thrown if Ndn stack receives unrecognized
    * message type
    */
-class NdnUnknownHeaderException {};
+class UnknownHeaderException {};
 
+} // namespace ndn
 } // namespace ns3
 
 #endif // _NDN_HEADER_HELPER_H_
diff --git a/helper/ndn-stack-helper.cc b/helper/ndn-stack-helper.cc
index 6b0a022..d88eeb2 100644
--- a/helper/ndn-stack-helper.cc
+++ b/helper/ndn-stack-helper.cc
@@ -56,30 +56,31 @@
 #include <boost/foreach.hpp>
 #include <boost/lexical_cast.hpp>
 
-NS_LOG_COMPONENT_DEFINE ("NdnStackHelper");
+NS_LOG_COMPONENT_DEFINE ("ndn.StackHelper");
 
 namespace ns3 {
+namespace ndn {
     
-NdnStackHelper::NdnStackHelper ()
+StackHelper::StackHelper ()
   : m_limitsEnabled (false)
   , m_needSetDefaultRoutes (false)
 {
-  m_ndnFactory.        SetTypeId ("ns3::NdnL3Protocol");
-  m_strategyFactory.    SetTypeId ("ns3::ndnSIM::Flooding");
-  m_contentStoreFactory.SetTypeId ("ns3::NdnContentStoreLru");
-  m_fibFactory.         SetTypeId ("ns3::NdnFib");
-  m_pitFactory.         SetTypeId ("ns3::NdnPit");
+  m_ndnFactory.         SetTypeId ("ns3::ndn::L3Protocol");
+  m_strategyFactory.    SetTypeId ("ns3::ndn::fw::Flooding");
+  m_contentStoreFactory.SetTypeId ("ns3::ndn::cs::Lru");
+  m_fibFactory.         SetTypeId ("ns3::ndn::fib::Default");
+  m_pitFactory.         SetTypeId ("ns3::ndn::pit::Persistent");
 }
     
-NdnStackHelper::~NdnStackHelper ()
+StackHelper::~StackHelper ()
 {
 }
 
 void
-NdnStackHelper::SetNdnAttributes (const std::string &attr1, const std::string &value1,
-                                    const std::string &attr2, const std::string &value2,
-                                    const std::string &attr3, const std::string &value3,
-                                    const std::string &attr4, const std::string &value4)
+StackHelper::SetStackAttributes (const std::string &attr1, const std::string &value1,
+                                 const std::string &attr2, const std::string &value2,
+                                 const std::string &attr3, const std::string &value3,
+                                 const std::string &attr4, const std::string &value4)
 {
   if (attr1 != "")
       m_ndnFactory.Set (attr1, StringValue (value1));
@@ -92,7 +93,7 @@
 }
 
 void 
-NdnStackHelper::SetForwardingStrategy (const std::string &strategy,
+StackHelper::SetForwardingStrategy (const std::string &strategy,
                                         const std::string &attr1, const std::string &value1,
                                         const std::string &attr2, const std::string &value2,
                                         const std::string &attr3, const std::string &value3,
@@ -110,7 +111,7 @@
 }
 
 void
-NdnStackHelper::SetContentStore (const std::string &contentStore,
+StackHelper::SetContentStore (const std::string &contentStore,
                                   const std::string &attr1, const std::string &value1,
                                   const std::string &attr2, const std::string &value2,
                                   const std::string &attr3, const std::string &value3,
@@ -128,7 +129,7 @@
 }
 
 void
-NdnStackHelper::SetPit (const std::string &pitClass,
+StackHelper::SetPit (const std::string &pitClass,
                          const std::string &attr1, const std::string &value1,
                          const std::string &attr2, const std::string &value2,
                          const std::string &attr3, const std::string &value3,
@@ -146,7 +147,7 @@
 }
 
 void
-NdnStackHelper::SetFib (const std::string &fibClass,
+StackHelper::SetFib (const std::string &fibClass,
                          const std::string &attr1, const std::string &value1,
                          const std::string &attr2, const std::string &value2,
                          const std::string &attr3, const std::string &value3,
@@ -164,14 +165,14 @@
 }
 
 void
-NdnStackHelper::SetDefaultRoutes (bool needSet)
+StackHelper::SetDefaultRoutes (bool needSet)
 {
   NS_LOG_FUNCTION (this << needSet);
   m_needSetDefaultRoutes = needSet;
 }
 
 void
-NdnStackHelper::EnableLimits (bool enable/* = true*/,
+StackHelper::EnableLimits (bool enable/* = true*/,
                                Time avgRtt/*=Seconds(0.1)*/,
                                uint32_t avgContentObject/*=1100*/,
                                uint32_t avgInterest/*=40*/)
@@ -183,10 +184,10 @@
   m_avgInterestSize = avgInterest;
 }
 
-Ptr<NdnFaceContainer>
-NdnStackHelper::Install (NodeContainer c) const
+Ptr<FaceContainer>
+StackHelper::Install (NodeContainer c) const
 {
-  Ptr<NdnFaceContainer> faces = Create<NdnFaceContainer> ();
+  Ptr<FaceContainer> faces = Create<FaceContainer> ();
   for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
     {
       faces->AddAll (Install (*i));
@@ -194,42 +195,42 @@
   return faces;
 }
 
-Ptr<NdnFaceContainer>
-NdnStackHelper::InstallAll (void) const
+Ptr<FaceContainer>
+StackHelper::InstallAll (void) const
 {
   return Install (NodeContainer::GetGlobal ());
 }
 
-Ptr<NdnFaceContainer>
-NdnStackHelper::Install (Ptr<Node> node) const
+Ptr<FaceContainer>
+StackHelper::Install (Ptr<Node> node) const
 {
   // NS_ASSERT_MSG (m_forwarding, "SetForwardingHelper() should be set prior calling Install() method");
-  Ptr<NdnFaceContainer> faces = Create<NdnFaceContainer> ();
+  Ptr<FaceContainer> faces = Create<FaceContainer> ();
   
-  if (node->GetObject<Ndn> () != 0)
+  if (node->GetObject<L3Protocol> () != 0)
     {
-      NS_FATAL_ERROR ("NdnStackHelper::Install (): Installing " 
+      NS_FATAL_ERROR ("StackHelper::Install (): Installing " 
                       "a NdnStack to a node with an existing Ndn object");
       return 0;
     }
 
-  // Create NdnL3Protocol
-  Ptr<Ndn> ndn = m_ndnFactory.Create<Ndn> ();
+  // Create L3Protocol
+  Ptr<L3Protocol> ndn = m_ndnFactory.Create<L3Protocol> ();
 
   // Create and aggregate FIB
-  Ptr<NdnFib> fib = m_fibFactory.Create<NdnFib> ();
+  Ptr<Fib> fib = m_fibFactory.Create<Fib> ();
   ndn->AggregateObject (fib);
 
   // Create and aggregate PIT
-  ndn->AggregateObject (m_pitFactory.Create<NdnPit> ());
+  ndn->AggregateObject (m_pitFactory.Create<Pit> ());
   
   // Create and aggregate forwarding strategy
-  ndn->AggregateObject (m_strategyFactory.Create<NdnForwardingStrategy> ());
+  ndn->AggregateObject (m_strategyFactory.Create<ForwardingStrategy> ());
 
   // Create and aggregate content store
-  ndn->AggregateObject (m_contentStoreFactory.Create<NdnContentStore> ());
+  ndn->AggregateObject (m_contentStoreFactory.Create<ContentStore> ());
 
-  // Aggregate NdnL3Protocol on node
+  // Aggregate L3Protocol on node
   node->AggregateObject (ndn);
   
   for (uint32_t index=0; index < node->GetNDevices (); index++)
@@ -240,10 +241,10 @@
       // if (DynamicCast<LoopbackNetDevice> (device) != 0)
       //   continue; // don't create face for a LoopbackNetDevice
 
-      Ptr<NdnNetDeviceFace> face = CreateObject<NdnNetDeviceFace> (node, device);
+      Ptr<NetDeviceFace> face = CreateObject<NetDeviceFace> (node, device);
 
       ndn->AddFace (face);
-      NS_LOG_LOGIC ("Node " << node->GetId () << ": added NdnNetDeviceFace as face #" << *face);
+      NS_LOG_LOGIC ("Node " << node->GetId () << ": added NetDeviceFace as face #" << *face);
 
       if (m_needSetDefaultRoutes)
         {
@@ -282,8 +283,8 @@
   return faces;
 }
 
-Ptr<NdnFaceContainer>
-NdnStackHelper::Install (std::string nodeName) const
+Ptr<FaceContainer>
+StackHelper::Install (std::string nodeName) const
 {
   Ptr<Node> node = Names::Find<Node> (nodeName);
   return Install (node);
@@ -291,43 +292,43 @@
 
 
 void
-NdnStackHelper::AddRoute (Ptr<Node> node, std::string prefix, Ptr<NdnFace> face, int32_t metric)
+StackHelper::AddRoute (Ptr<Node> node, std::string prefix, Ptr<Face> face, int32_t metric)
 {
   NS_LOG_LOGIC ("[" << node->GetId () << "]$ route add " << prefix << " via " << *face << " metric " << metric);
 
-  Ptr<NdnFib>  fib  = node->GetObject<NdnFib> ();
+  Ptr<Fib>  fib  = node->GetObject<Fib> ();
 
-  NdnNameComponentsValue prefixValue;
-  prefixValue.DeserializeFromString (prefix, MakeNdnNameComponentsChecker ());
+  NameComponentsValue prefixValue;
+  prefixValue.DeserializeFromString (prefix, MakeNameComponentsChecker ());
   fib->Add (prefixValue.Get (), face, metric);
 }
 
 void
-NdnStackHelper::AddRoute (Ptr<Node> node, std::string prefix, uint32_t faceId, int32_t metric)
+StackHelper::AddRoute (Ptr<Node> node, std::string prefix, uint32_t faceId, int32_t metric)
 {
-  Ptr<Ndn>     ndn = node->GetObject<Ndn> ();
+  Ptr<L3Protocol>     ndn = node->GetObject<L3Protocol> ();
   NS_ASSERT_MSG (ndn != 0, "Ndn stack should be installed on the node");
 
-  Ptr<NdnFace> face = ndn->GetFace (faceId);
+  Ptr<Face> face = ndn->GetFace (faceId);
   NS_ASSERT_MSG (face != 0, "Face with ID [" << faceId << "] does not exist on node [" << node->GetId () << "]");
 
   AddRoute (node, prefix, face, metric);
 }
 
 void
-NdnStackHelper::AddRoute (std::string nodeName, std::string prefix, uint32_t faceId, int32_t metric)
+StackHelper::AddRoute (std::string nodeName, std::string prefix, uint32_t faceId, int32_t metric)
 {
   Ptr<Node> node = Names::Find<Node> (nodeName);
   NS_ASSERT_MSG (node != 0, "Node [" << nodeName << "] does not exist");
   
-  Ptr<Ndn>     ndn = node->GetObject<Ndn> ();
+  Ptr<L3Protocol>     ndn = node->GetObject<L3Protocol> ();
   NS_ASSERT_MSG (ndn != 0, "Ndn stack should be installed on the node");
 
-  Ptr<NdnFace> face = ndn->GetFace (faceId);
+  Ptr<Face> face = ndn->GetFace (faceId);
   NS_ASSERT_MSG (face != 0, "Face with ID [" << faceId << "] does not exist on node [" << nodeName << "]");
 
   AddRoute (node, prefix, face, metric);
 }
 
-
+} // namespace ndn
 } // namespace ns3
diff --git a/helper/ndn-stack-helper.h b/helper/ndn-stack-helper.h
index 0bd69ad..3b7e3cf 100644
--- a/helper/ndn-stack-helper.h
+++ b/helper/ndn-stack-helper.h
@@ -30,8 +30,11 @@
 namespace ns3 {
 
 class Node;
-class NdnFaceContainer;
-class NdnFace;
+
+namespace ndn {
+
+class FaceContainer;
+class Face;
 
 /**
  * \ingroup ndn
@@ -54,27 +57,27 @@
  * attribute or a set of functionality that may be of interest to many other
  * classes.
  */
-class NdnStackHelper 
+class StackHelper 
 {
 public:
   /**
    * \brief Create a new NdnStackHelper with a default NDN_FLOODING forwarding stategy
    */
-  NdnStackHelper();
+  StackHelper();
   
   /**
    * \brief Destroy the NdnStackHelper
    */
-  virtual ~NdnStackHelper ();
+  virtual ~StackHelper ();
 
   /**
    * @brief Set parameters of NdnL3Protocol
    */
   void
-  SetNdnAttributes (const std::string &attr1 = "", const std::string &value1 = "",
-                     const std::string &attr2 = "", const std::string &value2 = "",
-                     const std::string &attr3 = "", const std::string &value3 = "",
-                     const std::string &attr4 = "", const std::string &value4 = "");
+  SetStackAttributes (const std::string &attr1 = "", const std::string &value1 = "",
+                      const std::string &attr2 = "", const std::string &value2 = "",
+                      const std::string &attr3 = "", const std::string &value3 = "",
+                      const std::string &attr4 = "", const std::string &value4 = "");
   
   
   /**
@@ -147,7 +150,7 @@
    * \returns list of installed faces in the form of a smart pointer
    * to NdnFaceContainer object
    */
-  Ptr<NdnFaceContainer>
+  Ptr<FaceContainer>
   Install (std::string nodeName) const;
 
   /**
@@ -159,9 +162,9 @@
    * \param node The node on which to install the stack.
    *
    * \returns list of installed faces in the form of a smart pointer
-   * to NdnFaceContainer object
+   * to FaceContainer object
    */
-  Ptr<NdnFaceContainer>
+  Ptr<FaceContainer>
   Install (Ptr<Node> node) const;
 
   /**
@@ -174,18 +177,18 @@
    * new stacks.
    *
    * \returns list of installed faces in the form of a smart pointer
-   * to NdnFaceContainer object
+   * to FaceContainer object
    */
-  Ptr<NdnFaceContainer>
+  Ptr<FaceContainer>
   Install (NodeContainer c) const;
 
   /**
    * \brief Install Ndn stack on all nodes in the simulation
    *
    * \returns list of installed faces in the form of a smart pointer
-   * to NdnFaceContainer object
+   * to FaceContainer object
    */
-  Ptr<NdnFaceContainer>
+  Ptr<FaceContainer>
   InstallAll () const;
 
   /**
@@ -219,7 +222,7 @@
    * \param metric Routing metric
    */
   static void
-  AddRoute (Ptr<Node> node, std::string prefix, Ptr<NdnFace> face, int32_t metric);
+  AddRoute (Ptr<Node> node, std::string prefix, Ptr<Face> face, int32_t metric);
 
   /**
    * \brief Set flag indicating necessity to install default routes in FIB
@@ -228,8 +231,8 @@
   SetDefaultRoutes (bool needSet);
 
 private:
-  NdnStackHelper (const NdnStackHelper &);
-  NdnStackHelper &operator = (const NdnStackHelper &o);
+  StackHelper (const StackHelper &);
+  StackHelper &operator = (const StackHelper &o);
   
 private:
   ObjectFactory m_ndnFactory;
@@ -245,6 +248,7 @@
   bool m_needSetDefaultRoutes;  
 };
 
+} // namespace ndn
 } // namespace ns3
 
 #endif /* NDN_STACK_HELPER_H */
