docs: Update documentation and Doxygen documentation generation
diff --git a/apps/callback-based-app.h b/apps/callback-based-app.h
index 8cec638..1d7e74d 100644
--- a/apps/callback-based-app.h
+++ b/apps/callback-based-app.h
@@ -19,7 +19,7 @@
 namespace ns3 {
 
 /**
- * @ingroup ndn
+ * @ingroup ndn-apps
  * @brief A meta application that can be used to create custom apps within Python bindings 
  */
 class CallbackBasedApp: public Application
diff --git a/apps/ndn-app.h b/apps/ndn-app.h
index fd29ab0..bbe5668 100644
--- a/apps/ndn-app.h
+++ b/apps/ndn-app.h
@@ -38,7 +38,11 @@
 class Face;
 
 /**
- * @ingroup ndn
+ * \ingroup ndn
+ * \defgroup ndn-apps NDN applications
+ */
+/**
+ * @ingroup ndn-apps
  * @brief Base class that all NDN applications should be derived from.
  * 
  * The class implements virtual calls onInterest, onNack, and onContentObject
diff --git a/apps/ndn-consumer-batches.h b/apps/ndn-consumer-batches.h
index 22b9b0c..23a75c9 100644
--- a/apps/ndn-consumer-batches.h
+++ b/apps/ndn-consumer-batches.h
@@ -29,7 +29,7 @@
 namespace ndn {
 
 /**
- * @ingroup ndn
+ * @ingroup ndn-apps
  * \brief Ndn application for sending out Interest packets in batches
  */
 class ConsumerBatches: public Consumer
diff --git a/apps/ndn-consumer-cbr.h b/apps/ndn-consumer-cbr.h
index 6143268..7076e7d 100644
--- a/apps/ndn-consumer-cbr.h
+++ b/apps/ndn-consumer-cbr.h
@@ -28,8 +28,8 @@
 namespace ndn {
 
 /**
- * @ingroup ndn
- * \brief Ndn application for sending out Interest packets at a "constant" rate (Poisson process)
+ * @ingroup ndn-apps
+ * @brief Ndn application for sending out Interest packets at a "constant" rate (Poisson process)
  */
 class ConsumerCbr: public Consumer
 {
diff --git a/apps/ndn-consumer-window.h b/apps/ndn-consumer-window.h
index 42ee006..1064f54 100644
--- a/apps/ndn-consumer-window.h
+++ b/apps/ndn-consumer-window.h
@@ -29,7 +29,7 @@
 namespace ndn {
 
 /**
- * @ingroup ndn
+ * @ingroup ndn-apps
  * \brief Ndn application for sending out Interest packets (window-based)
  *
  * !!! ATTENTION !!! This is highly experimental and relies on experimental features of the simulator.
diff --git a/apps/ndn-consumer-zipf-mandelbrot.h b/apps/ndn-consumer-zipf-mandelbrot.h
index b9f4d17..d9333b3 100644
--- a/apps/ndn-consumer-zipf-mandelbrot.h
+++ b/apps/ndn-consumer-zipf-mandelbrot.h
@@ -38,7 +38,7 @@
 namespace ndn {
 
 /**
- * @ingroup ndn
+ * @ingroup ndn-apps
  * @brief NDN app requesting contents following Zipf-Mandelbrot Distbituion
  *
  * The class implements an app which requests contents following Zipf-Mandelbrot Distribution
diff --git a/apps/ndn-consumer.h b/apps/ndn-consumer.h
index bb9e30a..baa6ba3 100644
--- a/apps/ndn-consumer.h
+++ b/apps/ndn-consumer.h
@@ -41,7 +41,7 @@
 namespace ndn {
 
 /**
- * @ingroup ndn
+ * @ingroup ndn-apps
  * \brief NDN application for sending out Interest packets
  */
 class Consumer: public App
diff --git a/apps/ndn-producer.h b/apps/ndn-producer.h
index 8349ea2..1cf21fe 100644
--- a/apps/ndn-producer.h
+++ b/apps/ndn-producer.h
@@ -32,6 +32,7 @@
 namespace ndn {
 
 /**
+ * @ingroup ndn-apps
  * @brief A simple Interest-sink applia simple Interest-sink application
  *
  * A simple Interest-sink applia simple Interest-sink application,
diff --git a/docs/Doxyfile b/docs/Doxyfile
index 8ca2128..ebe4bb0 100644
--- a/docs/Doxyfile
+++ b/docs/Doxyfile
@@ -570,9 +570,9 @@
 # directories like "/usr/src/myproject". Separate the files or directories
 # with spaces.
 
-INPUT                  = ../model ../helper ../utils ../apps \
-						 ../plugins/topology ../plugins/mobility \
-						 introspected-doxygen.h doxygen.h
+INPUT                  = ../model ../ndn.cxx ../helper ../utils ../apps \
+                       ../plugins/topology ../plugins/ip-faces \
+                       introspected-doxygen.h doxygen.h
 
 # introspected-doxygen.h should be manually created:
 # For example:
@@ -1259,7 +1259,7 @@
 # contain include files that are not input files but should be processed by
 # the preprocessor.
 
-INCLUDE_PATH           =
+INCLUDE_PATH           = ../../../build
 
 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
 # patterns (like *.h and *.hpp) to filter out the header-files in the
@@ -1278,7 +1278,10 @@
 
 PREDEFINED             = NS3_ASSERT_ENABLE \
                          NS3_LOG_ENABLE \
-                         DOXYGEN
+                         DOXYGEN \
+                         "NDN_NAMESPACE_BEGIN=namespace ns3 { namespace ndn {" \
+                         "NDN_NAMESPACE_END="}}"
+
 
 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
 # this tag can be used to specify a list of macro names that should be expanded.
diff --git a/docs/ns3_html_theme/static/doxygen.css b/docs/ns3_html_theme/static/doxygen.css
index 8e096b1..5cac435 100644
--- a/docs/ns3_html_theme/static/doxygen.css
+++ b/docs/ns3_html_theme/static/doxygen.css
@@ -105,9 +105,9 @@
 	text-decoration: none;
 }
 
-.contents a:visited {
+/*.contents a:visited {
 	color: #686868;
-}
+}*/
 
 a:hover {
 	text-decoration: underline;
diff --git a/docs/ns3_html_theme/static/ns3_stylesheet.css b/docs/ns3_html_theme/static/ns3_stylesheet.css
index c900197..fb55460 100644
--- a/docs/ns3_html_theme/static/ns3_stylesheet.css
+++ b/docs/ns3_html_theme/static/ns3_stylesheet.css
@@ -11,6 +11,11 @@
     font-weight: bold;
 }
 
+a:visited {
+    color: #91A501;
+    font-weight: bold;
+}
+
 /* Sphinx headings */
 div.body h1,
 div.body h2,
diff --git a/docs/source/intro.rst b/docs/source/intro.rst
index 1ef79b3..ccd8351 100644
--- a/docs/source/intro.rst
+++ b/docs/source/intro.rst
@@ -32,10 +32,10 @@
 		     ^ 					    ^
     .................|......................................|......................
     .		     v			     	            v			  .
-    .		+------------------+	     +----------------------+		  .
-    .           |      "Face"      |	     |        "Face"        |		  .
-    .           |    "(AppFace)"   |	     |   "(NetDeviceFace)"  |		  .
-    .		+------------------+         +----------------------+		  .
+    .         +----------------------+	     +----------------------+		  .
+    .         |      "Face"          |	     |        "Face"        |		  .
+    .         | "(AppFace, ApiFace)" |       |   "(NetDeviceFace)"  |		  .
+    .         +----------------------+       +----------------------+		  .
     .		               ^                   ^				  .
     .			       |                   |				  .
     .			       v                   v				  .
diff --git a/helper/ndn-app-helper.h b/helper/ndn-app-helper.h
index 94d1046..e559260 100644
--- a/helper/ndn-app-helper.h
+++ b/helper/ndn-app-helper.h
@@ -31,6 +31,7 @@
 namespace ndn {
 
 /**
+ * @ingroup ndn-helpers
  * \brief A helper to make it easier to instantiate an ns3::NdnConsumer Application
  * on a set of nodes.
  */
diff --git a/helper/ndn-face-container.h b/helper/ndn-face-container.h
index 692daf6..e1566e6 100644
--- a/helper/ndn-face-container.h
+++ b/helper/ndn-face-container.h
@@ -32,7 +32,7 @@
 namespace ndn {
 
 /**
- * \ingroup ndn-helpers
+ * @ingroup ndn-helpers
  * \brief A pool for Ndn faces
  * 
  * Provides tools to perform basic manipulation on faces, such as
diff --git a/helper/ndn-global-routing-helper.h b/helper/ndn-global-routing-helper.h
index f233e89..53c7b15 100644
--- a/helper/ndn-global-routing-helper.h
+++ b/helper/ndn-global-routing-helper.h
@@ -32,7 +32,7 @@
 namespace ndn {
 
 /**
- * @ingroup ndn
+ * @ingroup ndn-helpers
  * @brief Helper for GlobalRouter interface
  */
 class GlobalRoutingHelper
diff --git a/helper/ndn-header-helper.h b/helper/ndn-header-helper.h
index 0e39c0c..1e3e086 100644
--- a/helper/ndn-header-helper.h
+++ b/helper/ndn-header-helper.h
@@ -34,7 +34,7 @@
 typedef Name NameComponents;
 
 /**
- * \ingroup ndn-helpers
+ * @ingroup ndn-helpers
  *
  * \brief Class implementing functionality to detect Ndn packet type and
  * create the corresponding object
@@ -94,13 +94,7 @@
 };
 
   /**
-   * \ingroup ndn
-   * \defgroup ndn-exceptions Exceptions
-   */
-  /**
-   * \ingroup ndn-exceptions
-   * \brief Exception thrown if Ndn stack receives unrecognized
-   * message type
+   * \brief Exception thrown if NDN stack receives unrecognized message type
    */
 class UnknownHeaderException {};
 
diff --git a/helper/ndn-link-control-helper.h b/helper/ndn-link-control-helper.h
index 619fb1c..1fb3251 100644
--- a/helper/ndn-link-control-helper.h
+++ b/helper/ndn-link-control-helper.h
@@ -29,8 +29,8 @@
 namespace ndn {
 
 /**
+ * @ingroup ndn-helpers
  * @brief Helper class to control the up or down statuss of an NDN link connecting two specific nodes
- * @ingroup Ndn
  */
 class LinkControlHelper
 { 
diff --git a/model/cs/content-store-impl.h b/model/cs/content-store-impl.h
index 90d0c95..7058009 100644
--- a/model/cs/content-store-impl.h
+++ b/model/cs/content-store-impl.h
@@ -37,6 +37,10 @@
 namespace ndn {
 namespace cs {
 
+/**
+ * @ingroup ndn-cs
+ * @brief Cache entry implementation with additional references to the base container
+ */
 template<class CS>
 class EntryImpl : public Entry
 {
@@ -65,6 +69,10 @@
 
 
 
+/**
+ * @ingroup ndn-cs
+ * @brief Base implementation of NDN content store
+ */
 template<class Policy>
 class ContentStoreImpl : public ContentStore,
                          protected ndnSIM::trie_with_policy< Name,
@@ -179,7 +187,6 @@
 {
   NS_LOG_FUNCTION (this << interest->GetName ());
 
-  /// @todo Change to search with predicate
   typename super::const_iterator node;
   if (interest->GetExclude () == 0)
     {
diff --git a/model/cs/content-store-nocache.h b/model/cs/content-store-nocache.h
index 79d1284..98c1850 100644
--- a/model/cs/content-store-nocache.h
+++ b/model/cs/content-store-nocache.h
@@ -29,8 +29,8 @@
 namespace cs {
 
 /**
- * \ingroup ndn
- * \brief Implementation of ContentStore that completely disables caching
+ * @ingroup ndn-cs
+ * @brief Implementation of ContentStore that completely disables caching
  */
 class Nocache : public ContentStore
 {
diff --git a/model/cs/content-store-with-freshness.h b/model/cs/content-store-with-freshness.h
index 22242b9..d9fa1ba 100644
--- a/model/cs/content-store-with-freshness.h
+++ b/model/cs/content-store-with-freshness.h
@@ -30,6 +30,10 @@
 namespace ndn {
 namespace cs {
 
+/**
+ * @ingroup ndn-cs
+ * @brief Special content store realization that honors Freshness parameter in Data packets
+ */
 template<class Policy>
 class ContentStoreWithFreshness :
     public ContentStoreImpl< ndnSIM::multi_policy_traits< boost::mpl::vector2< Policy, ndnSIM::freshness_policy_traits > > >
diff --git a/model/cs/content-store-with-stats.h b/model/cs/content-store-with-stats.h
index 3bdb9ec..a3f5fdd 100644
--- a/model/cs/content-store-with-stats.h
+++ b/model/cs/content-store-with-stats.h
@@ -30,6 +30,10 @@
 namespace ndn {
 namespace cs {
 
+/**
+ * @ingroup ndn-cs
+ * @brief Special content store realization that provides ability to track stats of CS operations
+ */
 template<class Policy>
 class ContentStoreWithStats :
     public ContentStoreImpl< ndnSIM::multi_policy_traits< boost::mpl::vector2< Policy, ndnSIM::lifetime_stats_policy_traits > > >
diff --git a/model/cs/ndn-content-store.h b/model/cs/ndn-content-store.h
index 66e7667..10a7bd3 100644
--- a/model/cs/ndn-content-store.h
+++ b/model/cs/ndn-content-store.h
@@ -39,11 +39,20 @@
 class Name;
 class ContentStore;
 
+/**
+ * @ingroup ndn
+ * @defgroup ndn-cs Content Store
+ */
+
+/**
+ * @ingroup ndn-cs
+ * @brief Namespace for ContentStore operations
+ */
 namespace cs {
 
 /**
- * \ingroup ndn
- * \brief NDN content store entry
+ * @ingroup ndn-cs
+ * @brief NDN content store entry
  */
 class Entry : public SimpleRefCount<Entry>
 {
@@ -88,7 +97,7 @@
 
 
 /**
- * \ingroup ndn
+ * @ingroup ndn-cs
  * \brief Base class for NDN content store
  *
  * Particular implementations should implement Lookup, Add, and Print methods
diff --git a/model/fib/ndn-fib-entry.h b/model/fib/ndn-fib-entry.h
index 0b1a6bc..2f42259 100644
--- a/model/fib/ndn-fib-entry.h
+++ b/model/fib/ndn-fib-entry.h
@@ -45,10 +45,14 @@
 
 class Fib;
 
+/**
+ * @ingroup ndn-fib
+ * @brief Namespace for FIB operations
+ */
 namespace fib {
 
 /**
- * \ingroup ndn
+ * @ingroup ndn-fib
  * \brief Structure holding various parameters associated with a (FibEntry, Face) tuple
  */
 class FaceMetric
@@ -191,8 +195,8 @@
 
 
 /**
- * \ingroup ndn
- * \brief Typedef for indexed face container of Entry
+ * @ingroup ndn-fib
+ * @brief Typedef for indexed face container of Entry
  *
  * Currently, there are 2 indexes:
  * - by face (used to find record and update metric)
@@ -232,7 +236,7 @@
 };
 
 /**
- * \ingroup ndn
+ * @ingroup ndn-fib
  * \brief Structure for FIB table entry, holding indexed list of
  *        available faces and their respective metrics
  */
diff --git a/model/fib/ndn-fib-impl.h b/model/fib/ndn-fib-impl.h
index 3054420..b221d48 100644
--- a/model/fib/ndn-fib-impl.h
+++ b/model/fib/ndn-fib-impl.h
@@ -31,6 +31,10 @@
 namespace ndn {
 namespace fib {
 
+/**
+ * @ingroup ndn-fib
+ * @brief FIB entry implementation with with additional references to the base container
+ */
 class EntryImpl : public Entry
 {
 public:
@@ -60,7 +64,7 @@
 };
 
 /**
- * \ingroup ndn
+ * @ingroup ndn-fib
  * \brief Class implementing FIB functionality
  */
 class FibImpl : public Fib,
diff --git a/model/fib/ndn-fib.h b/model/fib/ndn-fib.h
index 490cdfd..b5e8e40 100644
--- a/model/fib/ndn-fib.h
+++ b/model/fib/ndn-fib.h
@@ -33,8 +33,13 @@
 typedef Interest InterestHeader;
 
 /**
- * \ingroup ndn
- * \brief Class implementing FIB functionality
+ * @ingroup ndn
+ * @defgroup ndn-fib FIB
+ */
+
+/**
+ * @ingroup ndn-fib
+ * @brief Class implementing FIB functionality
  */
 class Fib : public Object
 {
diff --git a/model/fw/best-route.h b/model/fw/best-route.h
index 6648acb..1939a84 100644
--- a/model/fw/best-route.h
+++ b/model/fw/best-route.h
@@ -31,8 +31,8 @@
 namespace fw {
 
 /**
- * \ingroup ndn
- * \brief Best route strategy
+ * @ingroup ndn-fw
+ * @brief Best route strategy
  */
 class BestRoute :
     public GreenYellowRed
diff --git a/model/fw/flooding.h b/model/fw/flooding.h
index f7ce55a..1aa50b0 100644
--- a/model/fw/flooding.h
+++ b/model/fw/flooding.h
@@ -30,10 +30,18 @@
 namespace fw {
 
 /**
- * \ingroup ndn
- * \brief Flooding strategy
+ * @ingroup ndn-fw
+ * @brief Simple flooding strategy
  *
- * \todo Describe
+ * Interests will be forwarded to all available faces available for a route (FIB entry).
+ * If there are no available GREEN or YELLOW faces, interests is dropped.
+ *
+ * Usage example:
+ * @code
+ *     ndnHelper.SetForwardingStrategy ("ns3::ndn::fw::Flooding");
+ *     ...
+ *     ndnHelper.Install (nodes);
+ * @endcode
  */
 class Flooding :
     public Nacks
diff --git a/model/fw/green-yellow-red.h b/model/fw/green-yellow-red.h
index 11817bf..57f17dd 100644
--- a/model/fw/green-yellow-red.h
+++ b/model/fw/green-yellow-red.h
@@ -28,7 +28,8 @@
 namespace fw {
 
 /**
- * \ingroup ndn
+ * @ingroup ndn-fw
+ * @brief Forwarding strategy extensions to track simple link status based on data plane performance
  */
 class GreenYellowRed :
     public Nacks
diff --git a/model/fw/nacks.h b/model/fw/nacks.h
index 7855e19..f9f8bb1 100644
--- a/model/fw/nacks.h
+++ b/model/fw/nacks.h
@@ -27,8 +27,8 @@
 namespace fw {
 
 /**
- * \ingroup ndn
- * \brief Implementation of experimental NACK messages (enables with EnableNACKs option)
+ * @ingroup ndn-fw
+ * @brief Implementation of experimental NACK messages (enables with EnableNACKs option)
  */
 class Nacks :
     public ForwardingStrategy
diff --git a/model/fw/ndn-forwarding-strategy.h b/model/fw/ndn-forwarding-strategy.h
index 49b034b..bfed748 100644
--- a/model/fw/ndn-forwarding-strategy.h
+++ b/model/fw/ndn-forwarding-strategy.h
@@ -29,6 +29,19 @@
 namespace ns3 {
 namespace ndn {
 
+/**
+ * @ingroup ndn
+ * @defgroup ndn-fw NDN forwarding strategies
+ */
+
+
+/**
+ * @ingroup ndn-fw
+ * @brief Namespace for Forwarding Strategy operations
+ */
+namespace fw {
+}
+
 class Face;
 
 class Interest;
@@ -42,8 +55,8 @@
 class ContentStore;
 
 /**
- * \ingroup ndn
- * \brief Abstract base class for Ndn forwarding strategies
+ * @ingroup ndn-fw
+ * @brief Abstract base class for Ndn forwarding strategies
  */
 class ForwardingStrategy :
     public Object
diff --git a/model/fw/ndn-fw-tag.h b/model/fw/ndn-fw-tag.h
index 3407a07..5d02b31 100644
--- a/model/fw/ndn-fw-tag.h
+++ b/model/fw/ndn-fw-tag.h
@@ -27,8 +27,8 @@
 namespace fw {
 
 /**
- * \ingroup ndn
- * \brief Abstract class for the forwarding strategy tag, which can be added to PIT entries
+ * @ingroup ndn-fw
+ * @brief Abstract class for the forwarding strategy tag, which can be added to PIT entries
  */
 class Tag
 {
diff --git a/model/fw/per-fib-limits.h b/model/fw/per-fib-limits.h
index 560432a..89ce352 100644
--- a/model/fw/per-fib-limits.h
+++ b/model/fw/per-fib-limits.h
@@ -38,8 +38,8 @@
 namespace fw {
 
 /**
- * \ingroup ndn
- * \brief Strategy implementing per-FIB entry limits
+ * @ingroup ndn-fw
+ * @brief Strategy implementing per-FIB entry limits
  */
 template<class Parent>
 class PerFibLimits :
diff --git a/model/fw/per-out-face-limits.h b/model/fw/per-out-face-limits.h
index fcdd43f..2f8f662 100644
--- a/model/fw/per-out-face-limits.h
+++ b/model/fw/per-out-face-limits.h
@@ -38,8 +38,8 @@
 namespace fw {
 
 /**
- * \ingroup ndn
- * \brief Strategy implementing per-outgoing face limits
+ * @ingroup ndn-fw
+ * @brief Strategy implementing per-outgoing face limits
  */
 template<class Parent>
 class PerOutFaceLimits :
diff --git a/model/fw/smart-flooding.h b/model/fw/smart-flooding.h
index 9263172..b764de8 100644
--- a/model/fw/smart-flooding.h
+++ b/model/fw/smart-flooding.h
@@ -29,7 +29,8 @@
 namespace fw {
 
 /**
- * \ingroup ccnx
+ * @ingroup ndn-fw
+ * @brief Smart flooding forwarding strategy
  */
 class SmartFlooding :
     public GreenYellowRed
diff --git a/model/ndn-common.h b/model/ndn-common.h
index de21c29..8bfc4f9 100644
--- a/model/ndn-common.h
+++ b/model/ndn-common.h
@@ -19,6 +19,19 @@
 #define NDN_NAMESPACE_BEGIN  namespace ns3 { namespace ndn {
 #define NDN_NAMESPACE_END    } /*ndn*/ } /*ns3*/ 
 
+/**
+ * @brief NS-3 namespace
+ */
+namespace ns3 {
+
+/**
+ * @brief ndnSIM namespace
+ */
+namespace ndn {
+}
+
+}
+
 NDN_NAMESPACE_BEGIN
 
 typedef Time TimeInterval;
diff --git a/model/ndn-content-object.h b/model/ndn-content-object.h
index 58e88a3..859543b 100644
--- a/model/ndn-content-object.h
+++ b/model/ndn-content-object.h
@@ -33,7 +33,7 @@
 namespace ndn {
 
 /**
- * @ingroup Ndn
+ * @ingroup ndn
  * @brief ContentObject header
  */
 class ContentObject : public SimpleRefCount<ContentObject>
@@ -198,7 +198,6 @@
 }
 
 /**
- * @ingroup ndn-exceptions
  * @brief Class for ContentObject parsing exception
  */
 class ContentObjectException {};
diff --git a/model/ndn-global-router.h b/model/ndn-global-router.h
index 1ef6329..dad2180 100644
--- a/model/ndn-global-router.h
+++ b/model/ndn-global-router.h
@@ -40,6 +40,7 @@
 typedef Name NameComponents;
 
 /**
+ * @ingroup ndn
  * @brief Class representing global router interface for ndnSIM
  */
 class GlobalRouter : public Object
diff --git a/model/ndn-interest.h b/model/ndn-interest.h
index 748e2d9..d7ab5df 100644
--- a/model/ndn-interest.h
+++ b/model/ndn-interest.h
@@ -37,8 +37,8 @@
 namespace ndn {
 
 /**
+ * @ingroup ndn
  * @brief NDN Interest (wire formats are defined in wire)
- *
  **/
 class Interest : public SimpleRefCount<Interest>
 {
@@ -266,7 +266,6 @@
 }
 
 /**
- * @ingroup ndn-exceptions
  * @brief Class for Interest parsing exception 
  */
 class InterestException {};
diff --git a/model/pit/ndn-pit-entry-impl.h b/model/pit/ndn-pit-entry-impl.h
index 751402f..f3e8c62 100644
--- a/model/pit/ndn-pit-entry-impl.h
+++ b/model/pit/ndn-pit-entry-impl.h
@@ -28,6 +28,10 @@
 
 namespace pit {
 
+/**
+ * @ingroup ndn-pit
+ * @brief PIT entry implementation with additional pointers to the underlying container
+ */
 template<class Pit>
 class EntryImpl : public Entry
 {
@@ -89,6 +93,7 @@
   typename Pit::super::iterator item_;
 };
 
+/// @cond include_hidden
 template<class T>
 struct TimestampIndex
 {
@@ -98,6 +103,7 @@
     return a.GetExpireTime () < b.GetExpireTime ();
   }
 };
+/// @endcond
 
 } // namespace pit
 } // namespace ndn
diff --git a/model/pit/ndn-pit-entry-incoming-face.h b/model/pit/ndn-pit-entry-incoming-face.h
index fb3987e..4597f58 100644
--- a/model/pit/ndn-pit-entry-incoming-face.h
+++ b/model/pit/ndn-pit-entry-incoming-face.h
@@ -31,8 +31,8 @@
 namespace pit {
 
 /**
- * \ingroup ndn
- * \brief PIT state component for each incoming interest (not including duplicates)
+ * @ingroup ndn-pit
+ * @brief PIT state component for each incoming interest (not including duplicates)
  */
 struct IncomingFace
 {
diff --git a/model/pit/ndn-pit-entry-outgoing-face.h b/model/pit/ndn-pit-entry-outgoing-face.h
index 20dfdaf..6b498a8 100644
--- a/model/pit/ndn-pit-entry-outgoing-face.h
+++ b/model/pit/ndn-pit-entry-outgoing-face.h
@@ -31,8 +31,8 @@
 namespace pit {
 
 /**
- * \ingroup ndn
- * \brief PIT state component for each outgoing interest
+ * @ingroup ndn-pit
+ * @brief PIT state component for each outgoing interest
  */
 struct OutgoingFace
 {
diff --git a/model/pit/ndn-pit-entry.h b/model/pit/ndn-pit-entry.h
index 3cb5371..dd90b9f 100644
--- a/model/pit/ndn-pit-entry.h
+++ b/model/pit/ndn-pit-entry.h
@@ -48,43 +48,9 @@
 
 namespace pit {
 
-/// @cond include_hidden
-class i_face {};
-class i_retx {};
-/// @endcond
-
 /**
- * \ingroup ndn
- * \brief Typedef for indexed face container of PitEntryOutgoingFace
- *
- * Indexes:
- * - by face (may be it will be possible to replace with just the std::map)
- */
-// struct OutgoingFaceContainer
-// {
-//   /// @cond include_hidden
-//   typedef boost::multi_index::multi_index_container<
-//     OutgoingFace,
-//     boost::multi_index::indexed_by<
-//       // For fast access to elements using NdnFace
-//       boost::multi_index::ordered_unique<
-//         boost::multi_index::tag<i_face>,
-//         boost::multi_index::member<OutgoingFace, Ptr<Face>, &OutgoingFace::m_face>
-//       >
-//       // ,
-//       // boost::multi_index::ordered_non_unique<
-//       //   boost::multi_index::tag<i_retx>,
-//       //   boost::multi_index::member<OutgoingFace, uint32_t, &OutgoingFace::m_retxCount>
-//       // >
-//     >
-//    > type;
-//   /// @endcond
-// };
-
-
-/**
- * \ingroup ndn
- * \brief structure for PIT entry
+ * @ingroup ndn-pit
+ * @brief structure for PIT entry
  *
  * All set-methods are virtual, in case index rearrangement is necessary in the derived classes
  */
@@ -315,6 +281,7 @@
   std::list< boost::shared_ptr<fw::Tag> > m_fwTags; ///< @brief Forwarding strategy tags
 };
 
+/// @cond include_hidden
 struct EntryIsNotEmpty
 {
   bool
@@ -323,6 +290,7 @@
     return !entry->GetIncoming ().empty ();
   }
 };
+/// @endcond
 
 std::ostream& operator<< (std::ostream& os, const Entry &entry);
 
diff --git a/model/pit/ndn-pit-impl.h b/model/pit/ndn-pit-impl.h
index 26e3a6b..6a8dfcd 100644
--- a/model/pit/ndn-pit-impl.h
+++ b/model/pit/ndn-pit-impl.h
@@ -43,8 +43,8 @@
 namespace pit {
 
 /**
- * \ingroup ndn
- * \brief Class implementing Pending Interests Table
+ * @ingroup ndn-pit
+ * @brief Class implementing Pending Interests Table
  */
 template<class Policy>
 class PitImpl : public Pit
diff --git a/model/pit/ndn-pit.h b/model/pit/ndn-pit.h
index 4c07fd2..0699479 100644
--- a/model/pit/ndn-pit.h
+++ b/model/pit/ndn-pit.h
@@ -30,6 +30,18 @@
 namespace ns3 {
 namespace ndn {
 
+/**
+ * @ingroup ndn
+ * @defgroup ndn-pit PIT
+ */
+
+/**
+ * @ingroup ndn-pit
+ * @brief Namespace for PIT operations
+ */
+namespace pit {
+}
+
 class L3Protocol;
 class Face;
 class ContentObject;
@@ -42,8 +54,8 @@
 ////////////////////////////////////////////////////////////////////////
 
 /**
- * \ingroup ndn
- * \brief Class implementing Pending Interests Table
+ * @ingroup ndn-pit
+ * @brief Class implementing Pending Interests Table
  */
 class Pit : public Object
 {
diff --git a/model/wire/ccnb.h b/model/wire/ccnb.h
index 893d481..9b920b9 100644
--- a/model/wire/ccnb.h
+++ b/model/wire/ccnb.h
@@ -18,6 +18,10 @@
 NDN_NAMESPACE_BEGIN
 
 namespace wire {
+
+/**
+ * @brief Namespace for CCNb wire format operations
+ */
 namespace ccnb {
 
 /**
diff --git a/model/wire/ccnb/ccnb-parser/common.h b/model/wire/ccnb/ccnb-parser/common.h
index aa3f68a..531cd87 100644
--- a/model/wire/ccnb/ccnb-parser/common.h
+++ b/model/wire/ccnb/ccnb-parser/common.h
@@ -31,14 +31,6 @@
 
 namespace wire {
 
-/**
- * \ingroup ndn
- * \defgroup ndn-ccnb CCNB decoding routines
- */
-/**
- * \ingroup ndn-ccnb
- * \brief Namespace for ccnb parer
- */
 namespace CcnbParser {
 
 // forward declarations
@@ -54,8 +46,6 @@
 
 /**
  * \brief Exception thrown if there is a parsing error
- *
- * \todo inherit this class from some exception class and provide meaningful error messages
  */
 class CcnbDecodingException {};
 
diff --git a/model/wire/ndnsim.h b/model/wire/ndnsim.h
index 186335e..417edba 100644
--- a/model/wire/ndnsim.h
+++ b/model/wire/ndnsim.h
@@ -17,7 +17,14 @@
 
 NDN_NAMESPACE_BEGIN
 
+/**
+ * @brief Namespace encapsulating wire operations
+ */
 namespace wire {
+
+/**
+ * @brief Namespace for ndnSIM wire format operations
+ */
 namespace ndnSIM {
 
 /**
diff --git a/ndn.cxx/blob.h b/ndn.cxx/blob.h
index 4b488b3..1b1aa2d 100644
--- a/ndn.cxx/blob.h
+++ b/ndn.cxx/blob.h
@@ -20,6 +20,7 @@
 NDN_NAMESPACE_BEGIN
 
 /**
+ * @ingroup ndn-cxx
  * @brief Class representing a general-use binary blob
  */
 class Blob
diff --git a/ndn.cxx/detail/error.h b/ndn.cxx/detail/error.h
index a1f1e34..db6b751 100644
--- a/ndn.cxx/detail/error.h
+++ b/ndn.cxx/detail/error.h
@@ -35,6 +35,10 @@
 
 NDN_NAMESPACE_BEGIN
 
+/**
+ * @ingroup ndn-cxx
+ * @brief Namespace holding all errors from NDN.cxx API
+ */
 namespace error
 {
 
diff --git a/ndn.cxx/exclude.h b/ndn.cxx/exclude.h
index 8315f34..fcdcbb3 100644
--- a/ndn.cxx/exclude.h
+++ b/ndn.cxx/exclude.h
@@ -19,6 +19,7 @@
 NDN_NAMESPACE_BEGIN
 
 /**
+ * @ingroup ndn-cxx
  * @brief Class to represent Exclude component in NDN interests
  */
 class Exclude : public SimpleRefCount<Exclude>
diff --git a/ndn.cxx/name-component.h b/ndn.cxx/name-component.h
index 7f523e0..0de0442 100644
--- a/ndn.cxx/name-component.h
+++ b/ndn.cxx/name-component.h
@@ -18,6 +18,7 @@
 namespace name {
 
 /**
+ * @ingroup ndn-cxx
  * @brief Class to representing binary blob of NDN name component
  *
  * This class is based on Blob (std::vector<char>) and just provides several helpers
diff --git a/ndn.cxx/name.h b/ndn.cxx/name.h
index 8731323..731202d 100644
--- a/ndn.cxx/name.h
+++ b/ndn.cxx/name.h
@@ -23,6 +23,7 @@
 NDN_NAMESPACE_BEGIN
 
 /**
+ * @ingroup ndn-cxx
  * @brief Class for NDN Name
  */
 class Name : public SimpleRefCount<Name>
diff --git a/ndn.cxx/ndn-api-face.h b/ndn.cxx/ndn-api-face.h
index 78f482a..ac735c9 100644
--- a/ndn.cxx/ndn-api-face.h
+++ b/ndn.cxx/ndn-api-face.h
@@ -37,9 +37,16 @@
 class ApiFacePriv;
 
 /**
- * \ingroup sync
- * @brief A handler for NDN; clients of this code do not need to deal
- * with NDN API directly
+ * @ingroup ndn
+ * @defgroup ndn-cxx NDN.cxx API
+ */
+
+/**
+ * @ingroup ndn-face
+ * @ingroup ndn-cxx
+ * @brief An application NDN face, providing richer API interface, compared to ndn::AppFace
+ *
+ * @see ndn::AppFace
  */
 class ApiFace
   : public ns3::ndn::Face
diff --git a/plugins/ip-faces/ndn-ip-faces-helper.h b/plugins/ip-faces/ndn-ip-faces-helper.h
index ccaf3cd..873fd8e 100644
--- a/plugins/ip-faces/ndn-ip-faces-helper.h
+++ b/plugins/ip-faces/ndn-ip-faces-helper.h
@@ -35,7 +35,7 @@
 namespace ndn {
 
 /**
- * @ingroup ndn
+ * @ingroup ndn-helpers
  * @brief Helper for NDN IP-based face creation
  */
 class IpFacesHelper
diff --git a/utils/batches.h b/utils/batches.h
index 7074640..526ae29 100644
--- a/utils/batches.h
+++ b/utils/batches.h
@@ -30,6 +30,7 @@
 namespace ns3 {
 
 /**
+ * @ingroup ndn-apps
  * @brief Class representing sets of (time, number) tuples with support of reading writing to streams
  */
 class Batches : public std::list<boost::tuple<Time, uint32_t> >
diff --git a/utils/mem-usage.h b/utils/mem-usage.h
index 788a45e..a18448a 100644
--- a/utils/mem-usage.h
+++ b/utils/mem-usage.h
@@ -39,6 +39,7 @@
 #endif
 
 /**
+ * @ingroup ndn-helpers
  * @brief Utility class to evaluate current usage of RAM
  */
 class MemUsage
diff --git a/utils/ndn-fw-hop-count-tag.h b/utils/ndn-fw-hop-count-tag.h
index 0ed62f0..f530961 100644
--- a/utils/ndn-fw-hop-count-tag.h
+++ b/utils/ndn-fw-hop-count-tag.h
@@ -27,6 +27,7 @@
 namespace ndn {
 
 /**
+ * @ingroup ndn-fw
  * @brief Packet tag that is used to track hop count for Interest-Data pairs
  */
 class FwHopCountTag : public Tag
diff --git a/utils/ndn-limits-rate.h b/utils/ndn-limits-rate.h
index b21184a..0823cc7 100644
--- a/utils/ndn-limits-rate.h
+++ b/utils/ndn-limits-rate.h
@@ -28,7 +28,7 @@
 namespace ndn {
 
 /**
- * \ingroup ndn
+ * \ingroup ndn-fw
  * \brief Structure to manage limits for outstanding interests
  */
 class LimitsRate :
diff --git a/utils/ndn-limits-window.h b/utils/ndn-limits-window.h
index 655b8ef..1c1ed49 100644
--- a/utils/ndn-limits-window.h
+++ b/utils/ndn-limits-window.h
@@ -27,7 +27,7 @@
 namespace ndn {
 
 /**
- * \ingroup ndn
+ * \ingroup ndn-fw
  * \brief Structure to manage limits for outstanding interests (window-based limiting)
  */
 class LimitsWindow :
diff --git a/utils/ndn-limits.h b/utils/ndn-limits.h
index d1daa10..d8f848b 100644
--- a/utils/ndn-limits.h
+++ b/utils/ndn-limits.h
@@ -29,7 +29,7 @@
 namespace ndn {
 
 /**
- * \ingroup ndn
+ * \ingroup ndn-fw
  * \brief Abstract class to manage Interest limits 
  */
 class Limits :
diff --git a/utils/ndn-local-info-tag.h b/utils/ndn-local-info-tag.h
index 1ff6117..ba7aa92 100644
--- a/utils/ndn-local-info-tag.h
+++ b/utils/ndn-local-info-tag.h
@@ -30,6 +30,7 @@
 class Face;
 
 /**
+ * @ingroup ndn-fw
  * @brief Packet tag that is used to keep information about face from which packet was received
  *
  * This tag may be extended later to include more information, if necessary
diff --git a/utils/ndn-rtt-estimator.h b/utils/ndn-rtt-estimator.h
index 287452e..8da703b 100644
--- a/utils/ndn-rtt-estimator.h
+++ b/utils/ndn-rtt-estimator.h
@@ -36,7 +36,7 @@
 namespace ndn {
 
 /**
- * \ingroup tcp
+ * \ingroup ndn-apps
  *
  * \brief Helper class to store RTT measurements
  */
diff --git a/utils/ndn-rtt-mean-deviation.h b/utils/ndn-rtt-mean-deviation.h
index 02d8fac..fc48173 100644
--- a/utils/ndn-rtt-mean-deviation.h
+++ b/utils/ndn-rtt-mean-deviation.h
@@ -35,7 +35,7 @@
 namespace ndn {
 
 /**
- * \ingroup ndn
+ * \ingroup ndn-apps
  *
  * \brief The modified version of "Mean--Deviation" RTT estimator, as discussed by Van Jacobson that better suits NDN communication model
  *
diff --git a/utils/tracers/ipv4-app-tracer.h b/utils/tracers/ipv4-app-tracer.h
index 0322d96..d574117 100644
--- a/utils/tracers/ipv4-app-tracer.h
+++ b/utils/tracers/ipv4-app-tracer.h
@@ -29,6 +29,10 @@
 
 class Ipv4Header;
 
+/**
+ * @ingroup ndn-tracers
+ * @brief Base class for IPv4/TCP based applications
+ */
 class Ipv4AppTracer : public SimpleRefCount<Ipv4AppTracer>
 {
 public:
diff --git a/utils/tracers/ipv4-l3-tracer.h b/utils/tracers/ipv4-l3-tracer.h
index 2e08054..b63dc01 100644
--- a/utils/tracers/ipv4-l3-tracer.h
+++ b/utils/tracers/ipv4-l3-tracer.h
@@ -29,6 +29,10 @@
 
 class Node;
 
+/**
+ * @ingroup ndn-tracers
+ * @brief Base class for IPv4 network-layer tracers
+ */
 class Ipv4L3Tracer : public SimpleRefCount<Ipv4L3Tracer>
 {
 public:
diff --git a/utils/tracers/ipv4-rate-l3-tracer.h b/utils/tracers/ipv4-rate-l3-tracer.h
index d4be0a9..b039822 100644
--- a/utils/tracers/ipv4-rate-l3-tracer.h
+++ b/utils/tracers/ipv4-rate-l3-tracer.h
@@ -34,8 +34,8 @@
 namespace ns3 {
 
 /**
- * @ingroup ccnx
- * @brief CCNx network-layer rate tracer
+ * @ingroup ndn-tracers
+ * @brief IPv4 network-layer rate tracer
  */
 class Ipv4RateL3Tracer : public Ipv4L3Tracer
 {
diff --git a/utils/tracers/ipv4-seqs-app-tracer.h b/utils/tracers/ipv4-seqs-app-tracer.h
index 5baa9f5..5a64a5a 100644
--- a/utils/tracers/ipv4-seqs-app-tracer.h
+++ b/utils/tracers/ipv4-seqs-app-tracer.h
@@ -27,6 +27,10 @@
 
 namespace ns3 {
 
+/**
+ * @ingroup ndn-tracers
+ * @brief Helper to track application-level sequence numbers (approximated from TCP ACKs)
+ */
 class Ipv4SeqsAppTracer : public Ipv4AppTracer
 {
 public:
diff --git a/utils/tracers/l2-rate-tracer.h b/utils/tracers/l2-rate-tracer.h
index 48105ac..de6ffcb 100644
--- a/utils/tracers/l2-rate-tracer.h
+++ b/utils/tracers/l2-rate-tracer.h
@@ -33,7 +33,10 @@
 namespace ns3 {
 
 /**
- * @ingroup ndn
+ * @ingroup ndn-tracers
+ * @brief Tracer to collect link-layer rate information about links
+ *
+ * @todo Finish implementation
  */
 class L2RateTracer : public L2Tracer
 {
diff --git a/utils/tracers/l2-tracer.h b/utils/tracers/l2-tracer.h
index a937d66..e6378b5 100644
--- a/utils/tracers/l2-tracer.h
+++ b/utils/tracers/l2-tracer.h
@@ -29,6 +29,12 @@
 
 class Node;
 
+/**
+ * @ingroup ndn-tracers
+ * @brief Link-layer tracer
+ *
+ * @todo Finish implementation
+ */
 class L2Tracer : public SimpleRefCount<L2Tracer>
 {
 public:
diff --git a/utils/tracers/ndn-app-delay-tracer.h b/utils/tracers/ndn-app-delay-tracer.h
index 7312225..dfbe5ea 100644
--- a/utils/tracers/ndn-app-delay-tracer.h
+++ b/utils/tracers/ndn-app-delay-tracer.h
@@ -41,8 +41,8 @@
 class App;
 
 /**
- * @ingroup ndn
- * @brief  network-layer tracer for aggregate packet counts
+ * @ingroup ndn-tracers
+ * @brief Tracer to obtain application-level delays
  */
 class AppDelayTracer : public SimpleRefCount<AppDelayTracer>
 {
diff --git a/utils/tracers/ndn-cs-tracer.h b/utils/tracers/ndn-cs-tracer.h
index 87c290e..906e85a 100644
--- a/utils/tracers/ndn-cs-tracer.h
+++ b/utils/tracers/ndn-cs-tracer.h
@@ -48,6 +48,7 @@
 
 namespace cs {
 
+/// @cond include_hidden
 struct Stats
 {
   inline void Reset ()
@@ -58,11 +59,12 @@
   double m_cacheHits;
   double m_cacheMisses;
 };
+/// @endcond
 
 }  
 
 /**
- * @ingroup ndn
+ * @ingroup ndn-tracers
  * @brief NDN tracer for cache performance (hits and misses)
  */
 class CsTracer : public SimpleRefCount<CsTracer>
diff --git a/utils/tracers/ndn-l3-aggregate-tracer.h b/utils/tracers/ndn-l3-aggregate-tracer.h
index 98e6731..fdbf23c 100644
--- a/utils/tracers/ndn-l3-aggregate-tracer.h
+++ b/utils/tracers/ndn-l3-aggregate-tracer.h
@@ -36,8 +36,8 @@
 namespace ndn {
 
 /**
- * @ingroup ndn
- * @brief CCNx network-layer tracer for aggregate packet counts
+ * @ingroup ndn-tracers
+ * @brief NDN network-layer tracer for aggregate packet counts
  */
 class L3AggregateTracer : public L3Tracer
 {
diff --git a/utils/tracers/ndn-l3-rate-tracer.h b/utils/tracers/ndn-l3-rate-tracer.h
index 60bb616..9df79b1 100644
--- a/utils/tracers/ndn-l3-rate-tracer.h
+++ b/utils/tracers/ndn-l3-rate-tracer.h
@@ -36,8 +36,8 @@
 namespace ndn {
 
 /**
- * @ingroup ndn
- * @brief CCNx network-layer rate tracer
+ * @ingroup ndn-tracers
+ * @brief NDN network-layer rate tracer
  */
 class L3RateTracer : public L3Tracer
 {
diff --git a/utils/tracers/ndn-l3-tracer.h b/utils/tracers/ndn-l3-tracer.h
index 260fe61..ee525ed 100644
--- a/utils/tracers/ndn-l3-tracer.h
+++ b/utils/tracers/ndn-l3-tracer.h
@@ -24,6 +24,11 @@
 #include "ns3/ptr.h"
 #include "ns3/simple-ref-count.h"
 
+/**
+ * @ingroup ndn-helpers
+ * @defgroup ndn-tracers Helpers to simplify metric collection
+ */
+
 namespace ns3 {
 
 class Node;
@@ -41,6 +46,7 @@
 class ContentObject;
 
 /**
+ * @ingroup ndn-tracers
  * @brief Base class for network-layer (incoming/outgoing Interests and Data) tracing of NDN stack
  */
 class L3Tracer : public SimpleRefCount<L3Tracer>