docs: Update documentation and Doxygen documentation generation
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>