diff --git a/tools/nfdc/channel-module.hpp b/tools/nfdc/channel-module.hpp
index 6698ae8..02b01ad 100644
--- a/tools/nfdc/channel-module.hpp
+++ b/tools/nfdc/channel-module.hpp
@@ -32,7 +32,7 @@
 
 using ndn::nfd::ChannelStatus;
 
-/** \brief provides access to NFD channel dataset
+/** \brief Provides access to NFD channel dataset.
  *  \sa https://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Channel-Dataset
  */
 class ChannelModule : public Module, noncopyable
@@ -47,7 +47,7 @@
   void
   formatStatusXml(std::ostream& os) const override;
 
-  /** \brief format a single status item as XML
+  /** \brief Format a single status item as XML.
    *  \param os output stream
    *  \param item status item
    */
@@ -57,7 +57,7 @@
   void
   formatStatusText(std::ostream& os) const override;
 
-  /** \brief format a single status item as text
+  /** \brief Format a single status item as text.
    *  \param os output stream
    *  \param item status item
    */
diff --git a/tools/nfdc/command-arguments.hpp b/tools/nfdc/command-arguments.hpp
index 6dc060a..91d17e0 100644
--- a/tools/nfdc/command-arguments.hpp
+++ b/tools/nfdc/command-arguments.hpp
@@ -38,7 +38,7 @@
 using ndn::nfd::FacePersistency;
 using ndn::nfd::RouteOrigin;
 
-/** \brief contains named command arguments
+/** \brief Contains named command arguments.
  */
 class CommandArguments : public std::map<std::string, std::any, std::less<>>
 {
@@ -62,7 +62,7 @@
     return getOptional<T>(key).value_or(defaultValue);
   }
 
-  /** \brief get an optional boolean argument as tribool
+  /** \brief Get an optional boolean argument as tribool.
    *  \return the argument value, or boost::logic::indeterminate if the argument is omitted on command line
    */
   boost::logic::tribool
diff --git a/tools/nfdc/command-definition.hpp b/tools/nfdc/command-definition.hpp
index 26e309b..07ecd15 100644
--- a/tools/nfdc/command-definition.hpp
+++ b/tools/nfdc/command-definition.hpp
@@ -30,73 +30,73 @@
 
 namespace nfd::tools::nfdc {
 
-/** \brief indicates argument value type
+/** \brief Indicates argument value type.
  */
 enum class ArgValueType {
-  /** \brief boolean argument without value
+  /** \brief Boolean argument without value.
    *
    *  The argument appears in CommandArguments as bool value `true`.
    *  It must not be declared as positional.
    */
   NONE,
 
-  /** \brief any arguments
+  /** \brief Any arguments.
    *
    *  The argument appears in CommandArguments as std::vector<std::string>.
    *  It must be declared as positional, and will consume all subsequent tokens.
    */
   ANY,
 
-  /** \brief boolean
+  /** \brief Boolean.
    *
    * The argument appears in CommandArguments as bool.
    */
   BOOLEAN,
 
-  /** \brief non-negative integer
+  /** \brief Non-negative integer.
    *
    *  The argument appears in CommandArguments as uint64_t.
    *  Acceptable input range is [0, std::numeric_limits<int64_t>::max()].
    */
   UNSIGNED,
 
-  /** \brief arbitrary string
+  /** \brief Arbitrary string.
    *
    *  The argument appears in CommandArguments as std::string.
    */
   STRING,
 
-  /** \brief report format 'xml' or 'text'
+  /** \brief Report format 'xml' or 'text'.
    *
    *  The argument appears in CommandArguments as nfd::tools::nfdc::ReportFormat.
    */
   REPORT_FORMAT,
 
-  /** \brief Name prefix
+  /** \brief Name prefix.
    *
    *  The argument appears in CommandArguments as ndn::Name.
    */
   NAME,
 
-  /** \brief FaceUri
+  /** \brief FaceUri.
    *
    *  The argument appears in CommandArguments as ndn::FaceUri.
    */
   FACE_URI,
 
-  /** \brief FaceId or FaceUri
+  /** \brief FaceId or FaceUri.
    *
    *  The argument appears in CommandArguments as either uint64_t or ndn::FaceUri.
    */
   FACE_ID_OR_URI,
 
-  /** \brief face persistency 'persistent' or 'permanent'
+  /** \brief Face persistency 'persistent' or 'permanent'.
    *
    *  The argument appears in CommandArguments as ndn::nfd::FacePersistency.
    */
   FACE_PERSISTENCY,
 
-  /** \brief route origin
+  /** \brief Route origin.
    *
    *  The argument appears in CommandArguments as ndn::nfd::RouteOrigin.
    */
@@ -106,14 +106,14 @@
 std::ostream&
 operator<<(std::ostream& os, ArgValueType vt);
 
-/** \brief indicates whether an argument is required
+/** \brief Indicates whether an argument is required.
  */
 enum class Required {
   NO = false, ///< argument is optional
   YES = true  ///< argument is required
 };
 
-/** \brief indicates whether an argument can be specified as positional
+/** \brief Indicates whether an argument can be specified as positional.
  */
 enum class Positional {
   NO = false, ///< argument must be named
@@ -121,7 +121,7 @@
 };
 
 /**
- * \brief Defines a command
+ * \brief Defines a command.
  */
 class CommandDefinition
 {
@@ -157,7 +157,7 @@
     return m_title;
   }
 
-  /** \brief set one-line description
+  /** \brief Set one-line description.
    *  \param title one-line description, written in lower case
    */
   CommandDefinition&
@@ -168,7 +168,7 @@
   }
 
 public: // arguments
-  /** \brief declare an argument
+  /** \brief Declare an argument.
    *  \param name argument name, must be unique
    *  \param valueType argument value type
    *  \param isRequired whether the argument is required
@@ -181,7 +181,7 @@
          Positional allowPositional = Positional::NO,
          const std::string& metavar = "");
 
-  /** \brief parse a command line
+  /** \brief Parse a command line.
    *  \param tokens command line tokens
    *  \param start command line start position, after noun and verb
    *  \throw Error command line is invalid
diff --git a/tools/nfdc/command-parser.hpp b/tools/nfdc/command-parser.hpp
index 52ba292..e7046e0 100644
--- a/tools/nfdc/command-parser.hpp
+++ b/tools/nfdc/command-parser.hpp
@@ -33,7 +33,7 @@
 
 namespace nfd::tools::nfdc {
 
-/** \brief indicates which modes is a command allowed
+/** \brief Indicates which modes is a command allowed.
  */
 enum AvailableIn : uint8_t {
   AVAILABLE_IN_NONE     = 0,
@@ -46,7 +46,7 @@
 std::ostream&
 operator<<(std::ostream& os, AvailableIn modes);
 
-/** \brief indicates which mode is the parser operated in
+/** \brief Indicates which mode is the parser operated in.
  */
 enum class ParseMode : uint8_t {
   ONE_SHOT = AVAILABLE_IN_ONE_SHOT, ///< one-shot mode
@@ -56,7 +56,7 @@
 std::ostream&
 operator<<(std::ostream& os, ParseMode mode);
 
-/** \brief parses a command
+/** \brief Parses a command.
  */
 class CommandParser : noncopyable
 {
@@ -70,7 +70,7 @@
     }
   };
 
-  /** \brief add an available command
+  /** \brief Add an available command.
    *  \param def command semantics definition
    *  \param execute a function to execute the command
    *  \param modes parse modes this command should be available in, must not be AVAILABLE_IN_NONE
@@ -79,13 +79,13 @@
   addCommand(const CommandDefinition& def, const ExecuteCommand& execute,
              std::underlying_type_t<AvailableIn> modes = AVAILABLE_IN_ALL);
 
-  /** \brief add an alias "noun verb2" to existing command "noun verb"
+  /** \brief Add an alias "noun verb2" to existing command "noun verb".
    *  \throw std::out_of_range "noun verb" does not exist
    */
   CommandParser&
   addAlias(const std::string& noun, const std::string& verb, const std::string& verb2);
 
-  /** \brief list known commands for help
+  /** \brief List known commands for help.
    *  \param noun if not empty, filter results by this noun
    *  \param mode include commands for the specified parse mode
    *  \return commands in insertion order
@@ -93,7 +93,7 @@
   std::vector<const CommandDefinition*>
   listCommands(std::string_view noun, ParseMode mode) const;
 
-  /** \brief parse a command line
+  /** \brief Parse a command line.
    *  \param tokens command line
    *  \param mode parser mode, must be ParseMode::ONE_SHOT, other modes are not implemented
    *  \throw NoSuchCommandError command not found
@@ -113,12 +113,12 @@
     AvailableIn modes;
   };
 
-  /** \brief map from command name or alias to command definition
+  /** \brief Map from command name or alias to command definition.
    */
   using CommandContainer = std::map<CommandName, shared_ptr<Command>>;
   CommandContainer m_commands;
 
-  /** \brief commands in insertion order
+  /** \brief Commands in insertion order.
    */
   std::vector<CommandContainer::const_iterator> m_commandOrder;
 };
diff --git a/tools/nfdc/cs-module.hpp b/tools/nfdc/cs-module.hpp
index 3c78765..f2cbef9 100644
--- a/tools/nfdc/cs-module.hpp
+++ b/tools/nfdc/cs-module.hpp
@@ -33,23 +33,23 @@
 
 using ndn::nfd::CsInfo;
 
-/** \brief provides access to NFD CS management
+/** \brief Provides access to NFD CS management.
  *  \sa https://redmine.named-data.net/projects/nfd/wiki/CsMgmt
  */
 class CsModule : public Module, noncopyable
 {
 public:
-  /** \brief register 'cs config' command
+  /** \brief Register 'cs config' command.
    */
   static void
   registerCommands(CommandParser& parser);
 
-  /** \brief the 'cs config' command
+  /** \brief The 'cs config' command.
    */
   static void
   config(ExecuteContext& ctx);
 
-  /** \brief the 'cs erase' command
+  /** \brief The 'cs erase' command.
    */
   static void
   erase(ExecuteContext& ctx);
diff --git a/tools/nfdc/face-helpers.hpp b/tools/nfdc/face-helpers.hpp
index 5c4ea18..1ceb976 100644
--- a/tools/nfdc/face-helpers.hpp
+++ b/tools/nfdc/face-helpers.hpp
@@ -34,7 +34,7 @@
 using ndn::nfd::FaceStatus;
 
 /**
- * \brief Procedure to find a face
+ * \brief Procedure to find a face.
  */
 class FindFace : noncopyable
 {
@@ -57,19 +57,19 @@
   explicit
   FindFace(ExecuteContext& ctx);
 
-  /** \brief find face by FaceUri
+  /** \brief Find face by FaceUri.
    *  \pre execute has not been invoked
    */
   Code
   execute(const FaceUri& faceUri, bool allowMulti = false);
 
-  /** \brief find face by FaceId
+  /** \brief Find face by FaceId.
    *  \pre execute has not been invoked
    */
   Code
   execute(uint64_t faceId);
 
-  /** \brief find face by FaceId or FaceUri
+  /** \brief Find face by FaceId or FaceUri.
    *  \param faceIdOrUri either a FaceId (uint64_t) or a FaceUri
    *  \param allowMulti effective only if \p faceIdOrUri contains a FaceUri
    *  \throw ndn::bad_any_cast faceIdOrUri is neither uint64_t nor FaceUri
@@ -77,7 +77,7 @@
   Code
   execute(const std::any& faceIdOrUri, bool allowMulti = false);
 
-  /** \brief find face by FaceQueryFilter
+  /** \brief Find face by FaceQueryFilter.
    *  \pre execute has not been invoked
    */
   Code
@@ -114,7 +114,7 @@
     return m_errorReason;
   }
 
-  /** \brief print results for disambiguation
+  /** \brief Print results for disambiguation.
    */
   void
   printDisambiguation(std::ostream& os, DisambiguationStyle style) const;
@@ -123,7 +123,7 @@
   std::optional<FaceUri>
   canonize(const std::string& fieldName, const FaceUri& uri);
 
-  /** \brief retrieve FaceStatus from filter
+  /** \brief Retrieve FaceStatus from filter.
    *  \post m_res == Code::OK and m_results is populated if retrieval succeeds
    *  \post m_res == Code::ERROR and m_errorReason is set if retrieval fails
    */
@@ -139,14 +139,14 @@
 };
 
 /**
- * \brief Canonize a FaceUri
+ * \brief Canonize a FaceUri.
  * \return canonical FaceUri (nullopt on failure) and error string
  */
 std::pair<std::optional<FaceUri>, std::string>
 canonize(ExecuteContext& ctx, const FaceUri& uri);
 
 /**
- * \brief Helper to generate exit code and error message for face canonization failures
+ * \brief Helper to generate exit code and error message for face canonization failures.
  * \param uri The FaceUri
  * \param error The error string returned by the canonization process
  * \param field An optional field identifier to include with the message
diff --git a/tools/nfdc/face-module.cpp b/tools/nfdc/face-module.cpp
index 446a281..136a4f9 100644
--- a/tools/nfdc/face-module.cpp
+++ b/tools/nfdc/face-module.cpp
@@ -131,7 +131,7 @@
   }
 }
 
-/** \brief order persistency in NONE < ON_DEMAND < PERSISTENCY < PERMANENT
+/** \brief Order persistency in NONE < ON_DEMAND < PERSISTENCY < PERMANENT.
  */
 static bool
 persistencyLessThan(FacePersistency x, FacePersistency y)
diff --git a/tools/nfdc/face-module.hpp b/tools/nfdc/face-module.hpp
index 1d3eac8..1f7393a 100644
--- a/tools/nfdc/face-module.hpp
+++ b/tools/nfdc/face-module.hpp
@@ -34,33 +34,33 @@
 
 using ndn::nfd::FaceStatus;
 
-/** \brief provides access to NFD face management
+/** \brief Provides access to NFD face management.
  *  \sa https://redmine.named-data.net/projects/nfd/wiki/FaceMgmt
  */
 class FaceModule : public Module, noncopyable
 {
 public:
-  /** \brief register 'face list', 'face show', 'face create', 'face destroy' commands
+  /** \brief Register 'face list', 'face show', 'face create', 'face destroy' commands.
    */
   static void
   registerCommands(CommandParser& parser);
 
-  /** \brief the 'face list' command
+  /** \brief The 'face list' command.
    */
   static void
   list(ExecuteContext& ctx);
 
-  /** \brief the 'face show' command
+  /** \brief The 'face show' command.
    */
   static void
   show(ExecuteContext& ctx);
 
-  /** \brief the 'face create' command
+  /** \brief The 'face create' command.
    */
   static void
   create(ExecuteContext& ctx);
 
-  /** \brief the 'face destroy' command
+  /** \brief The 'face destroy' command.
    */
   static void
   destroy(ExecuteContext& ctx);
@@ -74,7 +74,7 @@
   void
   formatStatusXml(std::ostream& os) const override;
 
-  /** \brief format a single status item as XML
+  /** \brief Format a single status item as XML.
    *  \param os output stream
    *  \param item status item
    */
@@ -84,7 +84,7 @@
   void
   formatStatusText(std::ostream& os) const override;
 
-  /** \brief format a single status item as text
+  /** \brief Format a single status item as text.
    *  \param os output stream
    *  \param item status item
    *  \param wantMultiLine use multi-line style
@@ -92,7 +92,7 @@
   static void
   formatItemText(std::ostream& os, const FaceStatus& item, bool wantMultiLine);
 
-  /** \brief print face action success message to specified ostream
+  /** \brief Print face action success message to specified ostream.
    *  \param os output stream
    *  \param actionSummary description of action taken
    *  \param resp response control parameters to print
@@ -100,7 +100,7 @@
   static void
   printSuccess(std::ostream& os, const std::string& actionSummary, const ControlParameters& resp);
 
-  /** \brief print face response parameters to specified ostream
+  /** \brief Print face response parameters to specified ostream.
    *  \param os output stream
    *  \param ia ItemAttributes used to format output
    *  \param resp response control parameters to print
diff --git a/tools/nfdc/fib-module.hpp b/tools/nfdc/fib-module.hpp
index e182f59..50200cb 100644
--- a/tools/nfdc/fib-module.hpp
+++ b/tools/nfdc/fib-module.hpp
@@ -33,7 +33,7 @@
 using ndn::nfd::FibEntry;
 using ndn::nfd::NextHopRecord;
 
-/** \brief provides access to NFD FIB management
+/** \brief Provides access to NFD FIB management.
  *  \sa https://redmine.named-data.net/projects/nfd/wiki/FibMgmt
  */
 class FibModule : public Module, noncopyable
@@ -48,7 +48,7 @@
   void
   formatStatusXml(std::ostream& os) const override;
 
-  /** \brief format a single status item as XML
+  /** \brief Format a single status item as XML.
    *  \param os output stream
    *  \param item status item
    */
@@ -58,7 +58,7 @@
   void
   formatStatusText(std::ostream& os) const override;
 
-  /** \brief format a single status item as text
+  /** \brief Format a single status item as text.
    *  \param os output stream
    *  \param item status item
    */
diff --git a/tools/nfdc/format-helpers.hpp b/tools/nfdc/format-helpers.hpp
index 2ee28ba..0f04c16 100644
--- a/tools/nfdc/format-helpers.hpp
+++ b/tools/nfdc/format-helpers.hpp
@@ -43,12 +43,12 @@
   const std::string& s;
 };
 
-/** \brief print XML text with special character represented as predefined entities
+/** \brief Print XML text with special character represented as predefined entities.
  */
 std::ostream&
 operator<<(std::ostream& os, const Text& text);
 
-/** \brief print true as an empty element and false as nothing
+/** \brief Print true as an empty element and false as nothing.
  */
 struct Flag
 {
@@ -77,7 +77,7 @@
 
 namespace text {
 
-/** \brief print a number of whitespaces
+/** \brief Print a number of whitespaces.
  */
 struct Spaces
 {
@@ -87,7 +87,7 @@
 std::ostream&
 operator<<(std::ostream& os, const Spaces& spaces);
 
-/** \brief print different string on first and subsequent usage
+/** \brief Print different string on first and subsequent usage.
  *
  *  \code
  *  Separator sep(",");
@@ -122,7 +122,7 @@
 std::ostream&
 operator<<(std::ostream& os, Separator& sep);
 
-/** \brief print attributes of an item
+/** \brief Print attributes of an item.
  *
  *  \code
  *  ItemAttributes ia(wantMultiLine, 3);
@@ -141,7 +141,7 @@
 class ItemAttributes : noncopyable
 {
 public:
-  /** \brief constructor
+  /** \brief Constructor.
    *  \param wantMultiLine true to select multi-line style, false to use single-line style
    *  \param maxAttributeWidth maximum width of attribute names, for alignment in multi-line style
    */
@@ -174,7 +174,7 @@
 std::ostream&
 operator<<(std::ostream& os, const ItemAttributes::Attribute& attr);
 
-/** \brief print boolean as 'on' or 'off'
+/** \brief Print boolean as 'on' or 'off'.
  */
 struct OnOff
 {
@@ -184,7 +184,7 @@
 std::ostream&
 operator<<(std::ostream& os, OnOff v);
 
-/** \brief print boolean as 'yes' or 'no'
+/** \brief Print boolean as 'yes' or 'no'.
  */
 struct YesNo
 {
diff --git a/tools/nfdc/forwarder-general-module.hpp b/tools/nfdc/forwarder-general-module.hpp
index 239cea6..6b1b49b 100644
--- a/tools/nfdc/forwarder-general-module.hpp
+++ b/tools/nfdc/forwarder-general-module.hpp
@@ -32,7 +32,7 @@
 
 using ndn::nfd::ForwarderStatus;
 
-/** \brief provides access to NFD forwarder general status
+/** \brief Provides access to NFD forwarder general status.
  *  \sa https://redmine.named-data.net/projects/nfd/wiki/ForwarderStatus
  */
 class ForwarderGeneralModule : public Module, noncopyable
@@ -47,7 +47,7 @@
   void
   formatStatusXml(std::ostream& os) const override;
 
-  /** \brief format a single status item as XML
+  /** \brief Format a single status item as XML.
    *  \param os output stream
    *  \param item status item
    */
@@ -57,7 +57,7 @@
   void
   formatStatusText(std::ostream& os) const override;
 
-  /** \brief format a single status item as text
+  /** \brief Format a single status item as text.
    *  \param os output stream
    *  \param item status item
    */
diff --git a/tools/nfdc/help.hpp b/tools/nfdc/help.hpp
index 19df8c1..80b37fe 100644
--- a/tools/nfdc/help.hpp
+++ b/tools/nfdc/help.hpp
@@ -30,7 +30,7 @@
 
 namespace nfd::tools::nfdc {
 
-/** \brief writes the list of available commands to a stream
+/** \brief Writes the list of available commands to a stream.
  *  \param os the output stream to write the list to
  *  \param parser instance of CommandParser containing the commands to list
  *  \param mode only the commands available in this mode are listed
@@ -40,7 +40,7 @@
 helpList(std::ostream& os, const CommandParser& parser,
          ParseMode mode = ParseMode::ONE_SHOT, std::string_view noun = "");
 
-/** \brief tries to help the user, if requested on the command line
+/** \brief Tries to help the user, if requested on the command line.
  *
  *  Depending on the provided command line arguments \p args, this function can either
  *  open the man page for a specific command, or list all commands available in \p parser.
diff --git a/tools/nfdc/module.hpp b/tools/nfdc/module.hpp
index 6793b3e..af0f651 100644
--- a/tools/nfdc/module.hpp
+++ b/tools/nfdc/module.hpp
@@ -35,7 +35,7 @@
 using ndn::nfd::CommandOptions;
 using ndn::nfd::Controller;
 
-/** \brief provides access to an NFD management module
+/** \brief Provides access to an NFD management module.
  *  \note This type is an interface. It should not have member fields.
  */
 class Module
@@ -44,7 +44,7 @@
   virtual
   ~Module() = default;
 
-  /** \brief collect status from NFD
+  /** \brief Collect status from NFD.
    *  \pre no other fetchStatus is in progress
    *  \param controller a controller through which StatusDataset can be requested
    *  \param onSuccess invoked when status has been collected into this instance
@@ -57,14 +57,14 @@
               const Controller::DatasetFailCallback& onFailure,
               const CommandOptions& options) = 0;
 
-  /** \brief format collected status as XML
+  /** \brief Format collected status as XML.
    *  \pre fetchStatus has been successful
    *  \param os output stream
    */
   virtual void
   formatStatusXml(std::ostream& os) const = 0;
 
-  /** \brief format collected status as text
+  /** \brief Format collected status as text.
    *  \pre fetchStatus has been successful
    *  \param os output stream
    */
diff --git a/tools/nfdc/rib-module.hpp b/tools/nfdc/rib-module.hpp
index 22d4e76..d81f6a7 100644
--- a/tools/nfdc/rib-module.hpp
+++ b/tools/nfdc/rib-module.hpp
@@ -34,33 +34,33 @@
 using ndn::nfd::RibEntry;
 using ndn::nfd::Route;
 
-/** \brief provides access to NFD RIB management
+/** \brief Provides access to NFD RIB management.
  *  \sa https://redmine.named-data.net/projects/nfd/wiki/RibMgmt
  */
 class RibModule : public Module, noncopyable
 {
 public:
-  /** \brief register 'route list', 'route show', 'route add', 'route remove' commands
+  /** \brief Register 'route list', 'route show', 'route add', 'route remove' commands.
    */
   static void
   registerCommands(CommandParser& parser);
 
-  /** \brief the 'route list' command
+  /** \brief The 'route list' command.
    */
   static void
   list(ExecuteContext& ctx);
 
-  /** \brief the 'route show' command
+  /** \brief The 'route show' command.
    */
   static void
   show(ExecuteContext& ctx);
 
-  /** \brief the 'route add' command
+  /** \brief The 'route add' command.
    */
   static void
   add(ExecuteContext& ctx);
 
-  /** \brief the 'route remove' command
+  /** \brief The 'route remove' command.
    */
   static void
   remove(ExecuteContext& ctx);
@@ -83,21 +83,21 @@
   static void
   listRoutesImpl(ExecuteContext& ctx, const RoutePredicate& filter);
 
-  /** \brief format a single status item as XML
+  /** \brief Format a single status item as XML.
    *  \param os output stream
    *  \param item status item
    */
   void
   formatItemXml(std::ostream& os, const RibEntry& item) const;
 
-  /** \brief format a RibEntry as text
+  /** \brief Format a RibEntry as text.
    *  \param os output stream
    *  \param entry RIB entry
    */
   static void
   formatEntryText(std::ostream& os, const RibEntry& entry);
 
-  /** \brief format a Route as text
+  /** \brief Format a Route as text.
    *  \param os output stream
    *  \param entry RIB entry
    *  \param route RIB route within \p entry
diff --git a/tools/nfdc/status-report.hpp b/tools/nfdc/status-report.hpp
index 67ff429..f1a84a6 100644
--- a/tools/nfdc/status-report.hpp
+++ b/tools/nfdc/status-report.hpp
@@ -46,7 +46,7 @@
 std::ostream&
 operator<<(std::ostream& os, ReportFormat fmt);
 
-/** \brief collects and prints NFD status report
+/** \brief Collects and prints NFD status report.
  */
 class StatusReport : noncopyable
 {
@@ -56,7 +56,7 @@
   ~StatusReport() = default;
 #endif
 
-  /** \brief collect status via chosen \p sections
+  /** \brief Collect status via chosen \p sections.
    *
    *  This function is blocking. It has exclusive use of \p face.
    *
@@ -66,13 +66,13 @@
   uint32_t
   collect(Face& face, KeyChain& keyChain, Validator& validator, const CommandOptions& options);
 
-  /** \brief print an XML report
+  /** \brief Print an XML report.
    *  \param os output stream
    */
   void
   formatXml(std::ostream& os) const;
 
-  /** \brief print a text report
+  /** \brief Print a text report.
    *  \param os output stream
    */
   void
@@ -83,7 +83,7 @@
   processEvents(Face& face);
 
 public:
-  /** \brief modules through which status is collected
+  /** \brief Modules through which status is collected.
    */
   std::vector<unique_ptr<Module>> sections;
 };
diff --git a/tools/nfdc/status.cpp b/tools/nfdc/status.cpp
index 081eea9..f0e4f9d 100644
--- a/tools/nfdc/status.cpp
+++ b/tools/nfdc/status.cpp
@@ -92,7 +92,7 @@
   }
 }
 
-/** \brief single-section status command
+/** \brief Single-section status command.
  */
 static void
 reportStatusSingleSection(ExecuteContext& ctx, bool StatusReportOptions::*wantSection)
@@ -102,7 +102,7 @@
   reportStatus(ctx, options);
 }
 
-/** \brief the 'status report' command
+/** \brief The 'status report' command.
  */
 static void
 reportStatusComprehensive(ExecuteContext& ctx)
diff --git a/tools/nfdc/status.hpp b/tools/nfdc/status.hpp
index c563ad7..2a1972c 100644
--- a/tools/nfdc/status.hpp
+++ b/tools/nfdc/status.hpp
@@ -43,12 +43,12 @@
   bool wantStrategyChoice = false;
 };
 
-/** \brief collect a status report and write to stdout
+/** \brief Collect a status report and write to stdout.
  */
 void
 reportStatus(ExecuteContext& ctx, const StatusReportOptions& options);
 
-/** \brief registers status commands
+/** \brief Registers status commands.
  *
  *  Providing the following commands:
  *  \li status report
diff --git a/tools/nfdc/strategy-choice-module.hpp b/tools/nfdc/strategy-choice-module.hpp
index 502d66b..43ac78b 100644
--- a/tools/nfdc/strategy-choice-module.hpp
+++ b/tools/nfdc/strategy-choice-module.hpp
@@ -33,33 +33,33 @@
 
 using ndn::nfd::StrategyChoice;
 
-/** \brief provides access to NFD Strategy Choice management
+/** \brief Provides access to NFD Strategy Choice management.
  *  \sa https://redmine.named-data.net/projects/nfd/wiki/StrategyChoice
  */
 class StrategyChoiceModule : public Module, noncopyable
 {
 public:
-  /** \brief register 'strategy list', 'strategy show', 'strategy set', 'strategy unset' commands
+  /** \brief Register 'strategy list', 'strategy show', 'strategy set', 'strategy unset' commands.
    */
   static void
   registerCommands(CommandParser& parser);
 
-  /** \brief the 'strategy list' command
+  /** \brief The 'strategy list' command.
    */
   static void
   list(ExecuteContext& ctx);
 
-  /** \brief the 'strategy show' command
+  /** \brief The 'strategy show' command.
    */
   static void
   show(ExecuteContext& ctx);
 
-  /** \brief the 'strategy set' command
+  /** \brief The 'strategy set' command.
    */
   static void
   set(ExecuteContext& ctx);
 
-  /** \brief the 'strategy unset' command
+  /** \brief The 'strategy unset' command.
    */
   static void
   unset(ExecuteContext& ctx);
@@ -73,7 +73,7 @@
   void
   formatStatusXml(std::ostream& os) const override;
 
-  /** \brief format a single status item as XML
+  /** \brief Format a single status item as XML.
    *  \param os output stream
    *  \param item status item
    */
@@ -83,7 +83,7 @@
   void
   formatStatusText(std::ostream& os) const override;
 
-  /** \brief format a single status item as text
+  /** \brief Format a single status item as text.
    *  \param os output stream
    *  \param item status item
    *  \param wantMultiLine use multi-line style
