diff --git a/helper/ndn-app-helper.hpp b/helper/ndn-app-helper.hpp
index 2b65f18..88051d4 100644
--- a/helper/ndn-app-helper.hpp
+++ b/helper/ndn-app-helper.hpp
@@ -33,8 +33,8 @@
 
 /**
  * @ingroup ndn-helpers
- * \brief A helper to make it easier to instantiate an ns3::NdnConsumer Application
- * on a set of nodes.
+ * @brief A helper to make it easier to instantiate an ns3::ndn::App applications
+ *        on a set of nodes
  */
 class AppHelper {
 public:
diff --git a/helper/ndn-face-container.hpp b/helper/ndn-face-container.hpp
index 02ce59c..84d8e7f 100644
--- a/helper/ndn-face-container.hpp
+++ b/helper/ndn-face-container.hpp
@@ -34,12 +34,12 @@
 
 /**
  * @ingroup ndn-helpers
- * \brief A pool for Ndn faces
+ * @brief A pool for Ndn faces
  *
- * Provides tools to perform basic manipulation on faces, such as
- * setting metrics and states on faces
+ * Provides tools to perform basic manipulation on faces, such as setting metrics and
+ * states on faces
  *
- * \see NdnStackHelper
+ * @see ndn::StackHelper
  */
 class FaceContainer : public SimpleRefCount<FaceContainer> {
 private:
diff --git a/helper/ndn-fib-helper.hpp b/helper/ndn-fib-helper.hpp
index 3819049..1385e31 100644
--- a/helper/ndn-fib-helper.hpp
+++ b/helper/ndn-fib-helper.hpp
@@ -34,6 +34,14 @@
 
 using ::ndn::nfd::ControlParameters;
 
+/**
+ * @ingroup ndn-helpers
+ * @brief Forwarding Information Base (FIB) helper
+ *
+ * The FIB helper interacts with the FIB manager of NFD by sending special Interest
+ * commands to the manager in order to add/remove a next hop from FIB entries or add
+ * routes to the FIB manually (manual configuration of FIB).
+ */
 class FibHelper {
 public:
   /**
diff --git a/helper/ndn-link-control-helper.hpp b/helper/ndn-link-control-helper.hpp
index 9d8c800..326aede 100644
--- a/helper/ndn-link-control-helper.hpp
+++ b/helper/ndn-link-control-helper.hpp
@@ -31,7 +31,7 @@
 /**
  * @ingroup ndn-helpers
  * @brief Helper class to control the up or down statuss of an NDN link connecting two specific
- * nodes
+ *        nodes
  */
 class LinkControlHelper {
 public:
diff --git a/helper/ndn-stack-helper.hpp b/helper/ndn-stack-helper.hpp
index 836a6b4..a05e520 100644
--- a/helper/ndn-stack-helper.hpp
+++ b/helper/ndn-stack-helper.hpp
@@ -41,25 +41,12 @@
 class L3Protocol;
 
 /**
- * \ingroup ndn
- * \defgroup ndn-helpers Helpers
+ * @ingroup ndn
+ * @defgroup ndn-helpers Helpers
  */
 /**
- * \ingroup ndn-helpers
- * \brief Adding Ndn functionality to existing Nodes.
- *
- * This helper enables pcap and ascii tracing of events in the ndn stack
- * associated with a node.  This is substantially similar to the tracing that
- * happens in device helpers, but the important difference is that, well, there
- * is no device.  This means that the creation of output file names will change,
- * and also the user-visible methods will not reference devices and therefore
- * the number of trace enable methods is reduced.
- *
- * Normally we eschew multiple inheritance, however, the classes
- * PcapUserHelperForNdn and AsciiTraceUserHelperForNdn are treated as
- * "mixins".  A mixin is a self-contained class that encapsulates a general
- * attribute or a set of functionality that may be of interest to many other
- * classes.
+ * @ingroup ndn-helpers
+ * @brief Helper class to install NDN stack and configure its parameters
  */
 class StackHelper : boost::noncopyable {
 public:
@@ -83,8 +70,16 @@
                      const std::string& attr4 = "", const std::string& value4 = "");
 
   /**
-   * @brief Set content store class and its attributes
+   * @brief Set maximum size for NFD's Content Store (in number of packets)
+   */
+  void
+  setCsSize(size_t maxSize);
+
+  /**
+   * @brief Set ndnSIM 1.0 content store implementation and its attributes
    * @param contentStoreClass string, representing class of the content store
+   * @note ndnSIM 1.0 content store implementation have limited support for Interest selectors
+   *       Do not use these implementations if your scenario relies on proper selector processing.
    */
   void
   SetOldContentStore(const std::string& contentStoreClass, const std::string& attr1 = "",
@@ -93,9 +88,6 @@
                   const std::string& value3 = "", const std::string& attr4 = "",
                   const std::string& value4 = "");
 
-  void
-  setCsSize(size_t maxSize);
-
   typedef Callback<shared_ptr<NetDeviceFace>, Ptr<Node>, Ptr<L3Protocol>, Ptr<NetDevice>>
     NetDeviceFaceCreateCallback;
 
diff --git a/helper/ndn-strategy-choice-helper.hpp b/helper/ndn-strategy-choice-helper.hpp
index 8e7e32f..29d16ae 100644
--- a/helper/ndn-strategy-choice-helper.hpp
+++ b/helper/ndn-strategy-choice-helper.hpp
@@ -48,6 +48,14 @@
 
 using ::ndn::nfd::ControlParameters;
 
+/**
+ * @ingroup ndn-helpers
+ * @brief NFD Strategy Choice Helper (FIB) helper
+ *
+ * The Strategy Choice helper interacts with the Strategy Choice manager of NFD by sending
+ * special Interest commands to the manager in order to specify the desired per-name
+ * prefix forwarding strategy for one, more or all the nodes of a topology.
+ */
 class StrategyChoiceHelper {
 public:
   static void
