diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-attr.cc b/helper/ccnb-parser/syntax-tree/ccnb-parser-attr.cc
index 3fe986e..397e940 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-attr.cc
+++ b/helper/ccnb-parser/syntax-tree/ccnb-parser-attr.cc
@@ -19,6 +19,7 @@
  */
 
 #include "ccnb-parser-attr.h"
+#include "ns3/ccnb-parser-common.h"
 
 namespace ns3 {
 namespace CcnbParser {
@@ -33,7 +34,7 @@
     }
   m_value = DynamicCast<Udata> (Block::ParseBlock (start));
   if (m_value == 0)
-    throw CcnxDecodingException (); // "ATTR must be followed by UDATA field"
+    throw CcnbDecodingException (); // "ATTR must be followed by UDATA field"
 }
 
 }
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-attr.h b/helper/ccnb-parser/syntax-tree/ccnb-parser-attr.h
index 7864459..1b7d5e8 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-attr.h
+++ b/helper/ccnb-parser/syntax-tree/ccnb-parser-attr.h
@@ -46,10 +46,10 @@
    */
   Attr (Buffer::Iterator &start, uint32_t length);
   
-  virtual void accept( Visitor &v )                           { v.visit( *this ); }
-  virtual void accept( GJVoidVisitor &v, boost::any param )   { v.visit( *this, param ); }
-  virtual boost::any accept( GJNoArguVisitor &v )             { return v.visit( *this ); }
-  virtual boost::any accept( GJVisitor &v, boost::any param ) { return v.visit( *this, param ); }
+  virtual void accept( VoidNoArguVisitor &v )               { v.visit( *this ); }
+  virtual void accept( VoidVisitor &v, boost::any param )   { v.visit( *this, param ); }
+  virtual boost::any accept( NoArguVisitor &v )             { return v.visit( *this ); }
+  virtual boost::any accept( Visitor &v, boost::any param ) { return v.visit( *this, param ); }
 
   std::string m_attr; ///< field holding name of the attribute
 };
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-base-attr.h b/helper/ccnb-parser/syntax-tree/ccnb-parser-base-attr.h
index f83f77e..9b20073 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-base-attr.h
+++ b/helper/ccnb-parser/syntax-tree/ccnb-parser-base-attr.h
@@ -21,7 +21,6 @@
 #ifndef _CCNB_PARSER_BASE_ATTR_H_
 #define _CCNB_PARSER_BASE_ATTR_H_
 
-#include "ccnb-parser-block.h"
 #include "ccnb-parser-udata.h"
 
 namespace ns3 {
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-base-tag.h b/helper/ccnb-parser/syntax-tree/ccnb-parser-base-tag.h
index bfd1f5b..6b7fe76 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-base-tag.h
+++ b/helper/ccnb-parser/syntax-tree/ccnb-parser-base-tag.h
@@ -47,5 +47,8 @@
   BaseTag() { }
 };
 
+}
+}
+
 #endif // _CCNB_PARSER_BASE_TAG_H_
 
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-blob.h b/helper/ccnb-parser/syntax-tree/ccnb-parser-blob.h
index 1693fbe..4b22d62 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-blob.h
+++ b/helper/ccnb-parser/syntax-tree/ccnb-parser-blob.h
@@ -18,10 +18,11 @@
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#ifndef _CCNB_PARSER_BLOCK_H_
-#define _CCNB_PARSER_BLOCK_H_
+#ifndef _CCNB_PARSER_BLOB_H_
+#define _CCNB_PARSER_BLOB_H_
 
 #include "ccnb-parser-block.h"
+#include "ns3/buffer.h"
 
 namespace ns3 {
 namespace CcnbParser {
@@ -45,10 +46,10 @@
    */
   Blob (Buffer::Iterator &start, uint32_t length);
   
-  virtual void accept( Visitor &v )                           { v.visit( *this ); }
-  virtual void accept( GJVoidVisitor &v, boost::any param )   { v.visit( *this, param ); }
-  virtual boost::any accept( GJNoArguVisitor &v )             { return v.visit( *this ); }
-  virtual boost::any accept( GJVisitor &v, boost::any param ) { return v.visit( *this, param ); }
+  virtual void accept( VoidNoArguVisitor &v )               { v.visit( *this ); }
+  virtual void accept( VoidVisitor &v, boost::any param )   { v.visit( *this, param ); }
+  virtual boost::any accept( NoArguVisitor &v )             { return v.visit( *this ); }
+  virtual boost::any accept( Visitor &v, boost::any param ) { return v.visit( *this, param ); }
 
   Buffer m_blob; ///< \brief field holding a parsed BLOB value of the block
 };
@@ -56,4 +57,4 @@
 }
 }
 
-#endif // _CCNB_PARSER_BLOCK_H_
+#endif // _CCNB_PARSER_BLOB_H_
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-block.cc b/helper/ccnb-parser/syntax-tree/ccnb-parser-block.cc
index 81d137f..e1e09fd 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-block.cc
+++ b/helper/ccnb-parser/syntax-tree/ccnb-parser-block.cc
@@ -19,7 +19,14 @@
  */
 
 #include "ccnb-parser-block.h"
-#include "ns3/ccnb-parser-common.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"
 
 namespace ns3 {
 namespace CcnbParser {
@@ -61,7 +68,7 @@
     case CCN_EXT:
       return Create<Ext> (start, value);
     default:
-      throw CcnxDecodingException ();
+      throw CcnbDecodingException ();
     }
 }
 
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-block.h b/helper/ccnb-parser/syntax-tree/ccnb-parser-block.h
index 6cbb6b3..1ff614b 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-block.h
+++ b/helper/ccnb-parser/syntax-tree/ccnb-parser-block.h
@@ -56,10 +56,10 @@
   static Ptr<Block>
   ParseBlock (Buffer::Iterator &start);
   
-  virtual void accept (VoidNoArguVisitor &v )               =0; ///< \brief Method to dispatch VoidNoArguVisitor
-  virtual void accept (VoidVisitor &v, boost::any param)    =0; ///< \brief Method to dispatch VoidVisitor
-  virtual boost::any accept (NoArguVisitor &v )             =0; ///< \brief Method to dispatch NoArguVisitor 
-  virtual boost::any accept (Visitor &v, boost::any param ) =0; ///< \brief Method to dispatch Visitor
+  virtual void accept( VoidNoArguVisitor &v )               = 0;
+  virtual void accept( VoidVisitor &v, boost::any param )   = 0;
+  virtual boost::any accept( NoArguVisitor &v )             = 0;
+  virtual boost::any accept( Visitor &v, boost::any param ) = 0;
 };
 
 }
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-dattr.cc b/helper/ccnb-parser/syntax-tree/ccnb-parser-dattr.cc
index b8ef685..bb6be82 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-dattr.cc
+++ b/helper/ccnb-parser/syntax-tree/ccnb-parser-dattr.cc
@@ -29,7 +29,7 @@
   m_dattr = dattr;
   m_value = DynamicCast<Udata> (Block::ParseBlock (start));
   if (m_value == 0)
-    throw CcnxDecodingException (); // "ATTR must be followed by UDATA field"
+    throw CcnbDecodingException (); // "ATTR must be followed by UDATA field"
 }
 
 }
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-dattr.h b/helper/ccnb-parser/syntax-tree/ccnb-parser-dattr.h
index 42de5f6..6775017 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-dattr.h
+++ b/helper/ccnb-parser/syntax-tree/ccnb-parser-dattr.h
@@ -45,10 +45,10 @@
    */
   Dattr (Buffer::Iterator &start, uint32_t dattr);
 
-  virtual void accept( Visitor &v )                           { v.visit( *this ); }
-  virtual void accept( GJVoidVisitor &v, boost::any param )   { v.visit( *this, param ); }
-  virtual boost::any accept( GJNoArguVisitor &v )             { return v.visit( *this ); }
-  virtual boost::any accept( GJVisitor &v, boost::any param ) { return v.visit( *this, param ); }
+  virtual void accept( VoidNoArguVisitor &v )               { v.visit( *this ); }
+  virtual void accept( VoidVisitor &v, boost::any param )   { v.visit( *this, param ); }
+  virtual boost::any accept( NoArguVisitor &v )             { return v.visit( *this ); }
+  virtual boost::any accept( Visitor &v, boost::any param ) { return v.visit( *this, param ); }
 
   uint32_t m_dattr; ///< \brief Dictionary code of DATTR
 };
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-dtag.cc b/helper/ccnb-parser/syntax-tree/ccnb-parser-dtag.cc
index 0cfe4bd..8d9ecf7 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-dtag.cc
+++ b/helper/ccnb-parser/syntax-tree/ccnb-parser-dtag.cc
@@ -19,7 +19,9 @@
  */
 
 #include "ccnb-parser-dtag.h"
-#include "ns3/ccnb-parser-common.h"
+
+#include "ccnb-parser-base-attr.h"
+#include "ccnb-parser-base-tag.h"
 
 namespace ns3 {
 namespace CcnbParser {
@@ -35,7 +37,7 @@
    * content (including virtual payload) will be stored in Packet
    * buffer
    */
-  if (dtag == Ccnx::CCN_DTAG_Content)
+  if (dtag == CCN_DTAG_Content)
     return; // hack #1. Do not process nesting block for <Content>
   
   // parse attributes until first nested block reached
@@ -55,17 +57,17 @@
   while (!start.IsEnd () && start.PeekU8 ()!=CCN_CLOSE)
     {
       // hack #2. Stop processing nested blocks if last block was <Content>
-      if (m_dtag == Ccnx::CCN_DTAG_ContentObject && // we are in <ContentObject>
-          DynamicCast<Dtag> (m_nestedBlocks.back())!=0 && // last block is DTAG
-          DynamicCast<Dtag> (m_nestedBlocks.back())->m_dtag == CCN_DTAG_Content) 
+      if (m_dtag == CCN_DTAG_ContentObject && // we are in <ContentObject>
+          DynamicCast<Dtag> (m_nestedTags.back())!=0 && // last block is DTAG
+          DynamicCast<Dtag> (m_nestedTags.back())->m_dtag == CCN_DTAG_Content) 
         {
           return; 
         }
 
-      m_nestedBlocks.push_back (Block::ParseBlock (start));
+      m_nestedTags.push_back (Block::ParseBlock (start));
     }
   if (start.IsEnd ())
-      throw CcnxDecodingException ();
+      throw CcnbDecodingException ();
 
   start.ReadU8 (); // read CCN_CLOSE
 }
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-dtag.h b/helper/ccnb-parser/syntax-tree/ccnb-parser-dtag.h
index 65a84f5..1ff75e3 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-dtag.h
+++ b/helper/ccnb-parser/syntax-tree/ccnb-parser-dtag.h
@@ -50,10 +50,10 @@
    */
   Dtag (Buffer::Iterator &start, uint32_t dtag);
 
-  virtual void accept( Visitor &v )                           { v.visit( *this ); }
-  virtual void accept( GJVoidVisitor &v, boost::any param )   { v.visit( *this, param ); }
-  virtual boost::any accept( GJNoArguVisitor &v )             { return v.visit( *this ); }
-  virtual boost::any accept( GJVisitor &v, boost::any param ) { return v.visit( *this, param ); }
+  virtual void accept( VoidNoArguVisitor &v )               { v.visit( *this ); }
+  virtual void accept( VoidVisitor &v, boost::any param )   { v.visit( *this, param ); }
+  virtual boost::any accept( NoArguVisitor &v )             { return v.visit( *this ); }
+  virtual boost::any accept( Visitor &v, boost::any param ) { return v.visit( *this, param ); }
 
   uint32_t m_dtag; ///< \brief Dictionary code for DTAG
 };
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-ext.h b/helper/ccnb-parser/syntax-tree/ccnb-parser-ext.h
index 9a2f2c8..568706b 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-ext.h
+++ b/helper/ccnb-parser/syntax-tree/ccnb-parser-ext.h
@@ -21,7 +21,7 @@
 #ifndef _CCNB_PARSER_EXT_H_
 #define _CCNB_PARSER_EXT_H_
 
-#include "ccnb-parser-ext.h"
+#include "ccnb-parser-block.h"
 
 namespace ns3 {
 namespace CcnbParser {
@@ -45,10 +45,10 @@
    */
   Ext (Buffer::Iterator &start, uint32_t extSubtype);
 
-  virtual void accept( Visitor &v )                           { v.visit( *this ); }
-  virtual void accept( GJVoidVisitor &v, boost::any param )   { v.visit( *this, param ); }
-  virtual boost::any accept( GJNoArguVisitor &v )             { return v.visit( *this ); }
-  virtual boost::any accept( GJVisitor &v, boost::any param ) { return v.visit( *this, param ); }
+  virtual void accept( VoidNoArguVisitor &v )               { v.visit( *this ); }
+  virtual void accept( VoidVisitor &v, boost::any param )   { v.visit( *this, param ); }
+  virtual boost::any accept( NoArguVisitor &v )             { return v.visit( *this ); }
+  virtual boost::any accept( Visitor &v, boost::any param ) { return v.visit( *this, param ); }
 
   uint64_t m_extSubtype; ///< \brief Extension type
 };
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-tag.cc b/helper/ccnb-parser/syntax-tree/ccnb-parser-tag.cc
index f045d55..c288be9 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-tag.cc
+++ b/helper/ccnb-parser/syntax-tree/ccnb-parser-tag.cc
@@ -19,7 +19,8 @@
  */
 
 #include "ccnb-parser-tag.h"
-#include "ns3/ccnb-parser-common.h"
+
+#include "ccnb-parser-base-attr.h"
 
 namespace ns3 {
 namespace CcnbParser {
@@ -53,7 +54,7 @@
     }
   
   if (start.IsEnd ()) //should not be the end
-      throw CcnxDecodingException ();
+      throw CcnbDecodingException ();
 
   start.ReadU8 (); // read CCN_CLOSE
 }
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-tag.h b/helper/ccnb-parser/syntax-tree/ccnb-parser-tag.h
index aea0bcc..c80581d 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-tag.h
+++ b/helper/ccnb-parser/syntax-tree/ccnb-parser-tag.h
@@ -46,10 +46,10 @@
    */
   Tag (Buffer::Iterator &start, uint32_t length);
 
-  virtual void accept( Visitor &v )                           { v.visit( *this ); }
-  virtual void accept( GJVoidVisitor &v, boost::any param )   { v.visit( *this, param ); }
-  virtual boost::any accept( GJNoArguVisitor &v )             { return v.visit( *this ); }
-  virtual boost::any accept( GJVisitor &v, boost::any param ) { return v.visit( *this, param ); }
+  virtual void accept( VoidNoArguVisitor &v )               { v.visit( *this ); }
+  virtual void accept( VoidVisitor &v, boost::any param )   { v.visit( *this, param ); }
+  virtual boost::any accept( NoArguVisitor &v )             { return v.visit( *this ); }
+  virtual boost::any accept( Visitor &v, boost::any param ) { return v.visit( *this, param ); }
 
   std::string m_tag; ///< \brief Name of TAG block
 };
diff --git a/helper/ccnb-parser/syntax-tree/ccnb-parser-udata.h b/helper/ccnb-parser/syntax-tree/ccnb-parser-udata.h
index c75fc9d..b6ef2c2 100644
--- a/helper/ccnb-parser/syntax-tree/ccnb-parser-udata.h
+++ b/helper/ccnb-parser/syntax-tree/ccnb-parser-udata.h
@@ -44,10 +44,10 @@
    */
   Udata (Buffer::Iterator &start, uint32_t length);
   
-  virtual void accept( Visitor &v )                           { v.visit( *this ); }
-  virtual void accept( GJVoidVisitor &v, boost::any param )   { v.visit( *this, param ); }
-  virtual boost::any accept( GJNoArguVisitor &v )             { return v.visit( *this ); }
-  virtual boost::any accept( GJVisitor &v, boost::any param ) { return v.visit( *this, param ); }
+  virtual void accept( VoidNoArguVisitor &v )               { v.visit( *this ); }
+  virtual void accept( VoidVisitor &v, boost::any param )   { v.visit( *this, param ); }
+  virtual boost::any accept( NoArguVisitor &v )             { return v.visit( *this ); }
+  virtual boost::any accept( Visitor &v, boost::any param ) { return v.visit( *this, param ); }
 
   std::string m_udata; ///< \brief field holding a parsed UDATA value of the block
 };
