diff --git a/docs/doxygen.conf.in b/docs/doxygen.conf.in
index 67c4978..4626588 100644
--- a/docs/doxygen.conf.in
+++ b/docs/doxygen.conf.in
@@ -1441,17 +1441,6 @@
 
 FORMULA_FONTSIZE       = 10
 
-# Use the FORMULA_TRANPARENT tag to determine whether or not the images
-# generated for formulas are transparent PNGs. Transparent PNGs are not
-# supported properly for IE 6.0, but are supported on all modern browsers.
-#
-# Note that when changing this option you need to delete any form_*.png files in
-# the HTML output directory before the changes have effect.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_TRANSPARENT    = YES
-
 # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
 # http://www.mathjax.org) which uses client side Javascript for the rendering
 # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
diff --git a/ndn-cxx/mgmt/dispatcher.hpp b/ndn-cxx/mgmt/dispatcher.hpp
index 27dc529..5319fa1 100644
--- a/ndn-cxx/mgmt/dispatcher.hpp
+++ b/ndn-cxx/mgmt/dispatcher.hpp
@@ -35,10 +35,11 @@
 
 // ---- AUTHORIZATION ----
 
-/** \brief A function to be called if authorization is successful.
- *  \param requester a string that indicates the requester, whose semantics is determined by
- *                   the Authorization function; this value is intended for logging only,
- *                   and should not affect how the request is processed
+/**
+ * \brief A function to be called if authorization is successful.
+ * \param requester A string that indicates the requester, whose semantics is determined by
+ *                  the Authorization function; this value is intended for logging only,
+ *                  and should not affect how the request is processed.
  */
 using AcceptContinuation = std::function<void(const std::string& requester)>;
 
@@ -61,17 +62,17 @@
  */
 using RejectContinuation = std::function<void(RejectReply)>;
 
-/** \brief A function that performs authorization.
- *  \param prefix top-level prefix, e.g., `/localhost/nfd`;
- *                This argument can be inspected to allow Interests only under a subset of
- *                top-level prefixes (e.g., allow "/localhost/nfd" only),
- *                or to use different trust model regarding to the prefix.
- *  \param interest incoming Interest
- *  \param params parsed ControlParameters for ControlCommand, otherwise nullptr;
- *                This is guaranteed to be not-null and have correct type for the command,
- *                but may not be valid (e.g., can have missing fields).
- *
- *  Either \p accept or \p reject must be called after authorization completes.
+/**
+ * \brief A function that performs authorization.
+ * \param prefix Top-level prefix, e.g., `/localhost/nfd`.
+ *               This argument can be inspected to allow Interests only under a subset of
+ *               top-level prefixes (e.g., allow "/localhost/nfd" only),
+ *               or to use different trust model regarding to the prefix.
+ * \param interest Incoming Interest.
+ * \param params The parsed ControlParameters for ControlCommand, otherwise nullptr.
+ *               The object is guaranteed to have the correct type for the command,
+ *               but may not be valid (e.g., can have missing fields).
+ * \note Either \p accept or \p reject must be called after authorization completes.
  */
 using Authorization = std::function<void(const Name& prefix, const Interest& interest,
                                          const ControlParametersBase* params,
@@ -113,12 +114,13 @@
 
 // ---- STATUS DATASET ----
 
-/** \brief A function to handle a StatusDataset request.
- *  \param prefix top-level prefix, e.g., "/localhost/nfd";
- *  \param interest incoming Interest; its Name doesn't contain version and segment components
+/**
+ * \brief A function to handle a StatusDataset request.
+ * \param prefix Top-level prefix, e.g., `/localhost/nfd`.
+ * \param interest Incoming Interest; its Name will not contain version and segment components.
  *
- *  This function can generate zero or more blocks and pass them to \p append,
- *  and must call \p end upon completion.
+ * This function can generate zero or more blocks and pass them to StatusDatasetContext::append,
+ * and must call StatusDatasetContext::end upon completion.
  */
 using StatusDatasetHandler = std::function<void(const Name& prefix, const Interest& interest,
                                                 StatusDatasetContext& context)>;
@@ -138,46 +140,48 @@
 class Dispatcher : noncopyable
 {
 public:
-  /** \brief Constructor.
-   *  \param face the Face on which the dispatcher operates
-   *  \param keyChain a KeyChain to sign Data
-   *  \param signingInfo signing parameters to sign Data with \p keyChain
-   *  \param imsCapacity capacity of the internal InMemoryStorage used by dispatcher
+  /**
+   * \brief Constructor.
+   * \param face the Face on which the dispatcher operates
+   * \param keyChain a KeyChain to sign Data
+   * \param signingInfo signing parameters to sign Data with \p keyChain
+   * \param imsCapacity capacity of the internal InMemoryStorage used by dispatcher
    */
   Dispatcher(Face& face, KeyChain& keyChain,
              const security::SigningInfo& signingInfo = security::SigningInfo(),
              size_t imsCapacity = 256);
 
-  /** \brief Add a top-level prefix.
-   *  \param prefix a top-level prefix, e.g., "/localhost/nfd"
-   *  \param wantRegister whether prefix registration should be performed through the Face
-   *  \param signingInfo signing parameters to sign the prefix registration command
-   *  \throw std::out_of_range \p prefix overlaps with an existing top-level prefix
+  /**
+   * \brief Add a top-level prefix.
+   * \param prefix top-level prefix to add, e.g., "/localhost/nfd"
+   * \param wantRegister whether prefix registration should be performed through the Face
+   * \param signingInfo signing parameters to sign the prefix registration command
+   * \throw std::out_of_range \p prefix overlaps with an existing top-level prefix
    *
-   *  Procedure for adding a top-level prefix:
-   *  1. if the new top-level prefix overlaps with an existing top-level prefix
-   *     (one top-level prefix is a prefix of another top-level prefix), throw std::domain_error.
-   *  2. if \p wantRegister is true, invoke Face::registerPrefix for the top-level prefix;
-   *     the returned RegisteredPrefixHandle shall be recorded internally, indexed by the top-level
-   *     prefix.
-   *  3. for each `relPrefix` from ControlCommands and StatusDatasets,
-   *     join the top-level prefix with `relPrefix` to obtain the full prefix,
-   *     and invoke non-registering overload of Face::setInterestFilter,
-   *     with the InterestHandler set to an appropriate private method to handle incoming Interests
-   *     for the ControlCommand or StatusDataset; the returned InterestFilterHandle shall be
-   *     recorded internally, indexed by the top-level prefix.
+   * Procedure for adding a top-level prefix:
+   * 1. If the new top-level prefix overlaps with an existing top-level prefix (one top-level
+   *    prefix is a prefix of another top-level prefix), throw `std::out_of_range`.
+   * 2. If \p wantRegister is true, invoke Face::registerPrefix for the top-level prefix.
+   *    The returned RegisteredPrefixHandle shall be recorded internally, indexed by the top-level
+   *    prefix.
+   * 3. For each `relPrefix` from ControlCommands and StatusDatasets, join the top-level prefix
+   *    with `relPrefix` to obtain the full prefix and invoke the non-registering overload of
+   *    Face::setInterestFilter, with the InterestHandler set to an appropriate function to
+   *    handle incoming Interests for the ControlCommand or StatusDataset. The returned
+   *    InterestFilterHandle shall be recorded internally, indexed by the top-level prefix.
    */
   void
   addTopPrefix(const Name& prefix, bool wantRegister = true,
                const security::SigningInfo& signingInfo = security::SigningInfo());
 
-  /** \brief Remove a top-level prefix.
-   *  \param prefix a top-level prefix, e.g., "/localhost/nfd"
+  /**
+   * \brief Remove a top-level prefix.
+   * \param prefix top-level prefix to remove, e.g., "/localhost/nfd"
    *
-   *  Procedure for removing a top-level prefix:
-   *  1. if the top-level prefix has not been added, abort these steps.
-   *  2. if the top-level prefix has been added with `wantRegister`, unregister the prefix.
-   *  3. clear all Interest filters set during addTopPrefix().
+   * Procedure for removing a top-level prefix:
+   * 1. If the top-level prefix has not been added, abort these steps.
+   * 2. If the top-level prefix has been added with `wantRegister`, unregister the prefix.
+   * 3. Clear all Interest filters previously set by addTopPrefix().
    */
   void
   removeTopPrefix(const Name& prefix);
@@ -198,17 +202,17 @@
    * \throw std::domain_error One or more top-level prefixes have been added.
    *
    * Procedure for processing a ControlCommand registered through this function:
-   *  1. Extract the NameComponent containing ControlParameters (the component after relPrefix),
-   *     and parse ControlParameters into ParametersType; if parsing fails, abort these steps.
-   *  2. Perform authorization; if the authorization is rejected, perform the RejectReply action
-   *     and abort these steps.
-   *  3. Validate the ControlParameters; if validation fails, create a ControlResponse with
-   *     StatusCode 400 and go to step 5.
-   *  4. Invoke the command handler, wait until CommandContinuation is called.
-   *  5. Encode the ControlResponse into one Data packet.
-   *  6. Sign the Data packet.
-   *  7. If the Data packet is too large, log an error and abort these steps.
-   *  8. Send the signed Data packet.
+   * 1. Extract the NameComponent containing ControlParameters (the component after relPrefix),
+   *    and parse ControlParameters into ParametersType; if parsing fails, abort these steps.
+   * 2. Perform authorization; if the authorization is rejected, perform the RejectReply action
+   *    and abort these steps.
+   * 3. Validate the ControlParameters; if validation fails, create a ControlResponse with
+   *    StatusCode 400 and go to step 5.
+   * 4. Invoke the command handler, wait until CommandContinuation is called.
+   * 5. Encode the ControlResponse into one Data packet.
+   * 6. Sign the Data packet.
+   * 7. If the Data packet is too large, log an error and abort these steps.
+   * 8. Send the signed Data packet.
    */
   template<typename ParametersType,
            std::enable_if_t<std::is_convertible_v<ParametersType*, ControlParametersBase*>, int> = 0>
@@ -246,17 +250,17 @@
    * \throw std::domain_error One or more top-level prefixes have been added.
    *
    * Procedure for processing a ControlCommand registered through this function:
-   *  1. Extract the parameters from the request by invoking `Command::parseRequest` on the
-   *     incoming Interest; if parsing fails, abort these steps.
-   *  2. Perform authorization; if the authorization is rejected, perform the RejectReply action
-   *     and abort these steps.
-   *  3. Validate the parameters with `Command::validateRequest`.
-   *  4. Normalize the parameters with `Command::applyDefaultsToRequest`.
-   *  5. If either step 3 or 4 fails, create a ControlResponse with StatusCode 400 and go to step 7.
-   *  6. Invoke the command handler, wait until CommandContinuation is called.
-   *  7. Encode the ControlResponse into one Data packet.
-   *  8. Sign the Data packet.
-   *  9. If the Data packet is too large, log an error and abort these steps.
+   * 1. Extract the parameters from the request by invoking `Command::parseRequest` on the
+   *    incoming Interest; if parsing fails, abort these steps.
+   * 2. Perform authorization; if the authorization is rejected, perform the RejectReply action
+   *    and abort these steps.
+   * 3. Validate the parameters with `Command::validateRequest`.
+   * 4. Normalize the parameters with `Command::applyDefaultsToRequest`.
+   * 5. If either step 3 or 4 fails, create a ControlResponse with StatusCode 400 and go to step 7.
+   * 6. Invoke the command handler, wait until CommandContinuation is called.
+   * 7. Encode the ControlResponse into one Data packet.
+   * 8. Sign the Data packet.
+   * 9. If the Data packet is too large, log an error and abort these steps.
    * 10. Send the signed Data packet.
    */
   template<typename Command>
@@ -303,21 +307,21 @@
    * data packet size.
    *
    * Procedure for processing a StatusDataset request:
-   *  1. If the request Interest contains version or segment components, abort these steps
-   *     (note: the request may contain more components after relPrefix, e.g., a query condition).
-   *  2. Perform authorization; if the authorization is rejected, perform the RejectReply action
-   *     and abort these steps.
-   *  3. Invoke the handler, store blocks passed to StatusDatasetAppend calls in a buffer,
-   *     wait until StatusDatasetEnd is called.
-   *  4. Allocate a version.
-   *  5. Segment the buffer into one or more segments under the allocated version,
-   *     such that the Data packets will not become too large after signing.
-   *  6. Set FinalBlockId on at least the last segment.
-   *  7. Sign the Data packets.
-   *  8. Send the signed Data packets.
+   * 1. If the request Interest contains version or segment components, abort these steps
+   *    (note: the request may contain more components after relPrefix, e.g., a query condition).
+   * 2. Perform authorization; if the authorization is rejected, perform the RejectReply action
+   *    and abort these steps.
+   * 3. Invoke the handler, store blocks passed to StatusDatasetContext::append calls in a buffer,
+   *    wait until StatusDatasetContext::end is called.
+   * 4. Allocate a version.
+   * 5. Segment the buffer into one or more segments under the allocated version,
+   *    such that the Data packets will not become too large after signing.
+   * 6. Set FinalBlockId on at least the last segment.
+   * 7. Sign the Data packets.
+   * 8. Send the signed Data packets.
    *
    * As an optimization, a Data packet may be sent as soon as enough octets have been collected
-   * through StatusDatasetAppend calls.
+   * through StatusDatasetContext::append calls.
    */
   void
   addStatusDataset(const PartialName& relPrefix,
@@ -331,19 +335,19 @@
    *                  e.g., "faces/events". The prefixes across all ControlCommands,
    *                  StatusDatasets, and NotificationStreams must not overlap (no relPrefix
    *                  is a prefix of another relPrefix).
-   * \return A function into which notifications can be posted.
+   * \return A function object that can be called to post a notification.
    * \pre No top-level prefix has been added.
    * \throw std::out_of_range \p relPrefix overlaps with an existing relPrefix.
    * \throw std::domain_error One or more top-level prefixes have been added.
    *
    * Procedure for posting a notification:
-   *  1. If no top-level prefix has been added, or more than one top-level prefixes have been
-   *     added, abort these steps and log an error.
-   *  2. Assign the next sequence number to the notification.
-   *  3. Place the notification block into one Data packet under the sole top-level prefix.
-   *  4. Sign the Data packet.
-   *  5. If the Data packet is too large, abort these steps and log an error.
-   *  6. Send the signed Data packet.
+   * 1. If no top-level prefix has been added, or more than one top-level prefixes have been
+   *    added, log an error and abort these steps.
+   * 2. Assign the next sequence number to the notification.
+   * 3. Place the notification block into one Data packet under the sole top-level prefix.
+   * 4. Sign the Data packet.
+   * 5. If the Data packet is too large, log an error and abort these steps.
+   * 6. Send the signed Data packet.
    */
   PostNotification
   addNotificationStream(const PartialName& relPrefix);
