diff --git a/src/adjacent.cpp b/src/adjacent.cpp
index 55ddff5..78c71b5 100644
--- a/src/adjacent.cpp
+++ b/src/adjacent.cpp
@@ -17,15 +17,15 @@
  * You should have received a copy of the GNU General Public License along with
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  **/
+
+#include "adjacent.hpp"
+#include "logger.hpp"
+
 #include <iostream>
 #include <string>
 #include <cmath>
 #include <limits>
 
-
-#include "adjacent.hpp"
-#include "logger.hpp"
-
 namespace nlsr {
 
 INIT_LOGGER("Adjacent");
diff --git a/src/adjacent.hpp b/src/adjacent.hpp
index 29d7567..499e45e 100644
--- a/src/adjacent.hpp
+++ b/src/adjacent.hpp
@@ -17,6 +17,7 @@
  * You should have received a copy of the GNU General Public License along with
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  **/
+
 #include <string>
 #include <cmath>
 #include <boost/cstdint.hpp>
@@ -29,6 +30,11 @@
 
 namespace nlsr {
 
+/*! \brief A neighbor reachable over a Face.
+ *
+ * Represents another node that we expect to be running NLSR that we
+ * should be able to reach over a direct Face connection.
+ */
 class Adjacent
 {
 
@@ -120,6 +126,7 @@
     return m_faceId;
   }
 
+  /*! \brief Equality is when name, Face URI, and link cost are all equal. */
   bool
   operator==(const Adjacent& adjacent) const;
 
@@ -148,11 +155,18 @@
   static const float DEFAULT_LINK_COST;
 
 private:
+  /*! m_name The NLSR-configured router name of the neighbor */
   ndn::Name m_name;
+  /*! m_connectingFaceUri The NFD-level specification of the Face*/
   ndn::util::FaceUri m_faceUri;
+  /*! m_linkCost The semi-arbitrary cost to traverse the link. */
   double m_linkCost;
+  /*! m_status Whether the neighbor is active or not */
   Status m_status;
+  /*! m_interestTimedOutNo How many failed Hello interests we have sent since the last reply */
   uint32_t m_interestTimedOutNo;
+  /*! m_faceId The NFD-assigned ID for the neighbor, used to
+   * determine whether a Face is available */
   uint64_t m_faceId;
 };
 
diff --git a/src/common.hpp b/src/common.hpp
index 470d8b1..0d67efc 100644
--- a/src/common.hpp
+++ b/src/common.hpp
@@ -19,6 +19,11 @@
  *
  **/
 
+/*! \file
+ * Shared include file to provide a single point-of-entry, and
+ * hopefully improve compile times.
+ */
+
 #ifndef NLSR_COMMON_HPP
 #define NLSR_COMMON_HPP
 
diff --git a/src/communication/sync-logic-handler.hpp b/src/communication/sync-logic-handler.hpp
index 72a5487..6de6113 100644
--- a/src/communication/sync-logic-handler.hpp
+++ b/src/communication/sync-logic-handler.hpp
@@ -22,6 +22,8 @@
 #ifndef NLSR_SYNC_LOGIC_HANDLER_HPP
 #define NLSR_SYNC_LOGIC_HANDLER_HPP
 
+#include "test-access-control.hpp"
+
 #include <ndn-cxx/face.hpp>
 #include <ChronoSync/socket.hpp>
 
@@ -30,8 +32,6 @@
 #include <boost/cstdint.hpp>
 #include <boost/throw_exception.hpp>
 
-#include "test-access-control.hpp"
-
 class InterestManager;
 
 namespace nlsr {
@@ -39,6 +39,14 @@
 class ConfParameter;
 class Lsdb;
 
+/*! \brief NLSR-to-ChronoSync interaction point
+ *
+ * This class serves as the abstraction for the syncing portion of
+ * NLSR and its components. NLSR has no particular reliance on
+ * ChronoSync, except that the NLSR source would need to be modified
+ * for use with other sync protocols.
+ *
+ */
 class SyncLogicHandler
 {
 public:
@@ -54,45 +62,77 @@
 
   SyncLogicHandler(ndn::Face& face, Lsdb& lsdb, ConfParameter& conf);
 
-  /*! \brief Receive and parse update from Sync
-
-    Parses the router name the update came from and passes it to processUpdateFromSync
-
-    \param v The information that Sync has acquired.
+  /*! \brief Hook function to call whenever sync detects new data.
+   *
+   * This function packages the sync information into discrete updates
+   * and passes those off to another function, processUpdateFromSync.
+   * \sa processUpdateFromSync
+   *
+   * \param v A container with the new information sync has received
    */
   void
   onChronoSyncUpdate(const std::vector<chronosync::MissingDataInfo>& v);
 
-  /*! \brief Wrapper function to call publishSyncUpdate with correct LSA type
-
-    \param type The LSA type constant
-    \param seqNo The latest seqNo known to lsdb
+  /*! \brief Instruct ChronoSync to publish an update.
+   *
+   * This function instructs sync to push an update into the network,
+   * based on whatever the state of the sequencing manager is when
+   * this is called. Since each ChronoSync instance maintains its own
+   * PIT, doing this satisfies those interests so that other routers
+   * know a sync update is available.
+   * \sa publishSyncUpdate
    */
   void
   publishRoutingUpdate(const ndn::Name& type, const uint64_t& seqNo);
 
-  /*! \brief Creates ChronoSync socket and register additional sync nodes (user prefixes)
-
-    \param syncPrefix /localhop/NLSR/sync
+  /*! \brief Create and configure a socket to enable ChronoSync for this NLSR.
+   *
+   * In a typical situation this only needs to be called once, when NLSR starts.
+   * \param syncPrefix The sync prefix you want this ChronoSync to use
+   * \sa Nlsr::initialize
    */
   void
   createSyncSocket(const ndn::Name& syncPrefix);
 
 private:
+  /*! \brief Simple function to glue Name components together
+   */
   void
   buildUpdatePrefix();
 
+  /*! \brief Determine which kind of LSA was updated and fetch it.
+   *
+   * Checks that the received update is not from us, which can happen,
+   * and then inspects the update to determine which kind of LSA the
+   * update is for. Finally, it expresses interest for the correct LSA
+   * type.
+   * \throws SyncUpdate::Error If the sync update doesn't look like a sync LSA update.
+   */
   void
   processUpdateFromSync(const ndn::Name& originRouter,
                         const ndn::Name& updateName, const uint64_t& seqNo);
 
+  /*! \brief Consults the LSDB to determine if a sync update has a new LSA.
+   *
+   * Given some information about an LSA, consult the LSDB to
+   * determine if the sequence number represents a new LSA from the
+   * origin router.
+   */
   bool
   isLsaNew(const ndn::Name& originRouter, const std::string& lsaType,
            const uint64_t& seqNo);
 
+  /*! \brief Fetch an LSA of a certain type, with a certain sequence number.
+   */
   void
   expressInterestForLsa(const ndn::Name& updateName, const uint64_t& seqNo);
 
+  /*! \brief Instruct ChronoSync, via the sync socket, to publish an update.
+   *
+   * Each ChronoSync instance maintains its own PIT for sync
+   * updates. This function creates a data that satisfies that update,
+   * so that the interested routers will know new data is available.
+   */
   void
   publishSyncUpdate(const ndn::Name& updatePrefix, uint64_t seqNo);
 
@@ -103,7 +143,7 @@
 
 private:
   Lsdb& m_lsdb;
-  ConfParameter& m_confParam;
+  const ConfParameter& m_confParam;
 
 PUBLIC_WITH_TESTS_ELSE_PRIVATE:
   ndn::Name m_nameLsaUserPrefix;
diff --git a/src/conf-file-processor.cpp b/src/conf-file-processor.cpp
index c80f439..e48158c 100644
--- a/src/conf-file-processor.cpp
+++ b/src/conf-file-processor.cpp
@@ -19,8 +19,8 @@
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  **/
 
-#include "conf-parameter.hpp"
 #include "conf-file-processor.hpp"
+#include "conf-parameter.hpp"
 #include "adjacent.hpp"
 #include "utility/name-helper.hpp"
 #include "update/prefix-update-processor.hpp"
diff --git a/src/conf-file-processor.hpp b/src/conf-file-processor.hpp
index d6cdcbe..1f0918a 100644
--- a/src/conf-file-processor.hpp
+++ b/src/conf-file-processor.hpp
@@ -21,14 +21,27 @@
 #ifndef NLSR_CONF_FILE_PROCESSOR_HPP
 #define NLSR_CONF_FILE_PROCESSOR_HPP
 
+#include "nlsr.hpp"
+
 #include <boost/smart_ptr/shared_ptr.hpp>
 #include <boost/property_tree/ptree.hpp>
 #include <boost/cstdint.hpp>
 
-#include "nlsr.hpp"
-
 namespace nlsr {
 
+/*! \brief A class containing methods to parse an NLSR configuration file
+ *
+ * This class contains methods to parse an NLSR configuration file and
+ * set all the parameters in NLSR to the received values. There are
+ * defaults for any unconfigured settings.
+ *
+ * This is currently called by the wrapper class NlsrRunner to
+ * populate the NLSR object with its configuration before NLSR is
+ * started.
+ *
+ * \sa nlsr::ConfParameter
+ * \sa NlsrRunner::run
+ */
 class ConfFileProcessor
 {
 public:
@@ -38,38 +51,80 @@
   {
   }
 
+  /*! \brief Load and parse the configuration file, then populate NLSR.
+   *
+   * Entry-point function that chains all the necessary steps together
+   * to configure an NLSR object.
+   *
+   * \return A boolean for whether configuration was successful.
+   */
   bool
   processConfFile();
 
 private:
   typedef boost::property_tree::ptree ConfigSection;
 
+  /*! \brief Parse the configuration file into a tree and process the nodes.
+   *
+   * Reads the configuration file as a property tree, and then iterates
+   * over them, attempting to parse each node. The nodes themselves
+   * are passed to another function that determines what kind of
+   * section it is and handles it appropriately. On any error in
+   * reading the file, return false.
+   *
+   * \return Whether configuration was successful.
+   */
   bool
   load(std::istream& input);
 
+  /*! \brief A dispatcher-like function to send configuration tree nodes to the right subfunction.
+   */
   bool
   processSection(const std::string& sectionName, const ConfigSection& section);
 
+  /*! \brief Parse general options, including router name, logging directory, LSA refresh.
+   */
   bool
   processConfSectionGeneral(const ConfigSection& section);
 
+  /*! \brief Configure options relating to neighbor configuration and detection.
+   *
+   * Parse options that control NLSR's behavior about neighbors. Such
+   * things include how many hello interests are sent and what their
+   * timeout is, as well as parsing neighbor specifications. Neighbor
+   * Face URIs are parsed and confirmed as valid here by ndn-cxx.
+   */
   bool
   processConfSectionNeighbors(const ConfigSection& section);
 
+  /*! \brief Set the state of hyperbolic routing: off, on, dry-run.
+   */
   bool
   processConfSectionHyperbolic(const ConfigSection& section);
 
+  /*! \brief Set options for the FIB: nexthops per prefix, routing calculation interval.
+   */
   bool
   processConfSectionFib(const ConfigSection& section);
 
+  /*! \brief Set prefixes that NLSR is supposed to advertise immediately.
+   */
   bool
   processConfSectionAdvertising(const ConfigSection& section);
 
+  /*! \brief Parse and set rules for the validator.
+   *
+   * This section parses and sets rules for the validators, which
+   * control what criteria Interest and Data need to follow to be
+   * considered valid by this NLSR.
+   */
   bool
   processConfSectionSecurity(const ConfigSection& section);
 
 private:
+  /*! m_confFileName The full path of the configuration file to parse. */
   std::string m_confFileName;
+  /*! m_nlsr The NLSR object to configure upon successful parsing. */
   Nlsr& m_nlsr;
 };
 
diff --git a/src/conf-parameter.hpp b/src/conf-parameter.hpp
index e21e547..29f9f9c 100644
--- a/src/conf-parameter.hpp
+++ b/src/conf-parameter.hpp
@@ -106,6 +106,17 @@
   HYPERBOLIC_STATE_DEFAULT = 0
 };
 
+/*! \brief A class to house all the configuration parameters for NLSR.
+ *
+ * This class is conceptually a singleton (but not mechanically) which
+ * is just a collection of attributes that serve as a
+ * separation-of-data for NLSR's configuration variables. NLSR refers
+ * to an instance of this class for all its configuration
+ * parameters. This object is typically populated by a
+ * ConfFileProcessor reading a configuration file.
+ *
+ * \sa nlsr::ConfFileProcessor
+ */
 class ConfParameter
 {
 
@@ -441,6 +452,8 @@
     return m_log4CxxConfPath;
   }
 
+  /*! \brief Dump the current state of all attributes to the log.
+   */
   void
   writeLog();
 
diff --git a/src/hello-protocol.cpp b/src/hello-protocol.cpp
index 2e17e16..afbd564 100644
--- a/src/hello-protocol.cpp
+++ b/src/hello-protocol.cpp
@@ -16,8 +16,8 @@
  *
  * You should have received a copy of the GNU General Public License along with
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- *
  **/
+#include "hello-protocol.hpp"
 
 #include "hello-protocol.hpp"
 #include "nlsr.hpp"
@@ -150,7 +150,7 @@
     m_nlsr.getAdjacencyList().getTimedOutInterestCount(neighbor);
   _LOG_DEBUG("Status: " << status);
   _LOG_DEBUG("Info Interest Timed out: " << infoIntTimedOutCount);
-  if ((infoIntTimedOutCount < m_nlsr.getConfParameter().getInterestRetryNumber())) {
+  if (infoIntTimedOutCount < m_nlsr.getConfParameter().getInterestRetryNumber()) {
     // interest name: /<neighbor>/NLSR/INFO/<router>
     ndn::Name interestName(neighbor);
     interestName.append(NLSR_COMPONENT);
@@ -188,11 +188,6 @@
                                            this, _1, _2));
 }
 
-  // A validator is called on the incoming data, and if the data
-  // passes the validator's description/definitions, this function is
-  // called. Set the neighbor's status to active and refresh its
-  // LSA. If there was a change in status, we schedule an adjacency
-  // LSA build.
 void
 HelloProtocol::onContentValidated(const std::shared_ptr<const ndn::Data>& data)
 {
@@ -223,8 +218,6 @@
   hpIncrementSignal(Statistics::PacketType::RCV_HELLO_DATA);
 }
 
-  // Simply logs a debug message that the content could not be
-  // validated (and is implicitly being discarded as a result).
 void
 HelloProtocol::onContentValidationFailed(const std::shared_ptr<const ndn::Data>& data,
                                          const std::string& msg)
diff --git a/src/hello-protocol.hpp b/src/hello-protocol.hpp
index dbc12d0..29b2c05 100644
--- a/src/hello-protocol.hpp
+++ b/src/hello-protocol.hpp
@@ -44,53 +44,60 @@
   {
   }
 
-  /*! \brief Schedules a hello Interest event.
-
-    \param seconds The number of seconds to wait before calling the event.
+  /*! \brief Schedules a Hello Interest event.
+   *
+   * This function serves as the Hello Interest loop, and must be
+   * explicitly called to start the Hello cycle. This is done at
+   * NLSR's initialization.
+   *
+   * \sa Nlsr::initialize
+   * \param seconds The number of seconds to wait before calling the event.
    */
   void
   scheduleInterest(uint32_t seconds);
 
-  /*! \brief Sends a hello Interest packet.
-
-    \param interestNamePrefix The name of the router that has published the
-    update we want.  Here that should be: \<router name\>/NLSR/INFO
-
-    \param seconds The lifetime of the Interest we construct, in seconds
-
-    This function attempts to contact neighboring routers to
-    determine their status (which currently is one of: ACTIVE,
-    INACTIVE, or UNKNOWN)
+  /*! \brief Sends a Hello Interest packet.
+   *
+   * \param interestNamePrefix The name of the router that has published the
+   * update we want. Here that should be: \<router name\>/NLSR/INFO
+   *
+   * \param seconds The lifetime of the Interest we construct, in seconds
+   *
+   * This function attempts to contact neighboring routers to
+   * determine their status (which currently is one of: ACTIVE,
+   * INACTIVE, or UNKNOWN)
    */
   void
   expressInterest(const ndn::Name& interestNamePrefix, uint32_t seconds);
 
-  /*! \brief Sends a hello Interest packet that was previously scheduled.
-
-    \param seconds (ignored)
-
-    This function is called as part of a schedule to regularly
-    determine the adjacency status of neighbors. This function checks
-    if the specified neighbor has a Face, and if not creates one. If
-    the neighbor had a Face, it calls \c expressInterest, else it will
-    attempt to create a Face, which will itself attempt to contact the
-    neighbor. Then the function schedules for this function to be invoked again.
+  /*! \brief Sends Hello Interests to all neighbors
+   *
+   * \param seconds (ignored)
+   *
+   * This function is called as part of a schedule to regularly
+   * determine the adjacency status of neighbors. This function
+   * creates and sends a Hello Interest to each neighbor in
+   * Nlsr::m_adjacencyList. If the neighbor has not been contacted
+   * before and curerntly has no Face in NFD, this method will call a
+   * different pipeline that creates the Face first, then registers
+   * prefixes.
    */
   void
   sendScheduledInterest(uint32_t seconds);
 
-  /*! \brief Processes a hello Interest from a neighbor.
-
-    \param name (ignored)
-
-    \param interest The Interest object that we have received and need to
-    process.
-
-    Processes a hello Interest that this router receives from one of
-    its neighbors. If the neighbor that sent the Interest does not
-    have a Face, NLSR will attempt to register one. Also, if the
-    neighbor that sent the Interest was previously marked as INACTIVE,
-    NLSR will attempt to contact it with its own hello Interest.
+  /*! \brief Processes a Hello Interest from a neighbor.
+   *
+   * \param name (ignored)
+   *
+   * \param interest The Interest object that we have received and need to
+   * process.
+   *
+   * Processes a Hello Interest that this router receives from one of
+   * its neighbors. If the neighbor that sent the Interest does not
+   * have a Face, NLSR will attempt to create one. Also, if the
+   * neighbor that sent the Interest was previously marked as
+   * INACTIVE, NLSR will attempt to contact it with its own Hello
+   * Interest.
    */
   void
   processInterest(const ndn::Name& name, const ndn::Interest& interest);
@@ -98,29 +105,75 @@
   ndn::util::signal::Signal<HelloProtocol, Statistics::PacketType> hpIncrementSignal;
 
 private:
+  /*! \brief Try to contact a neighbor via Hello protocol again
+   *
+   * This function will re-send Hello Interests a configured number
+   * of times. After that many failures, HelloProtocol will mark the neighbor as
+   * inactive and will not attempt to contact them until the next time
+   * HelloProtocol::sendScheduledInterest is called.
+   *
+   * \sa nlsr::ConfParameter::getInterestRetryNumber
+   */
   void
   processInterestTimedOut(const ndn::Interest& interest);
 
+  /*! \brief Verify signatures and validate incoming Hello data.
+   */
   void
   onContent(const ndn::Interest& interest, const ndn::Data& data);
 
 PUBLIC_WITH_TESTS_ELSE_PRIVATE:
+
+  /*! \brief Change a neighbor's status
+   *
+   * Whenever incoming Hello data is verified and validated, change
+   * the status of this neighbor and then schedule an adjacency LSA
+   * build for us. This also resets the number of times we've failed
+   * to contact this neighbor so that we will retry later.
+   */
   void
   onContentValidated(const std::shared_ptr<const ndn::Data>& data);
 
 private:
+  /*! \brief Log that incoming data couldn't be validated, but do nothing else.
+   */
   void
   onContentValidationFailed(const std::shared_ptr<const ndn::Data>& data,
                             const std::string& msg);
 
+  /*! \brief Treat a failed Face registration as an INACTIVE neighbor.
+   *
+   * If NLSR fails to register a Face when contacting a neighbor, it
+   * will instantly toggle that neighbor to INACTIVE. This is
+   * necessary because NLSR will put off building its own adjacency
+   * LSA until the status of each neighbor is definitively
+   * known. Without this, NLSR might have to wait many scheduled Hello
+   * intervals to finish building an adjacency LSA.
+   */
   void
   onRegistrationFailure(const ndn::nfd::ControlResponse& response,
                         const ndn::Name& name);
 
+  /*! \brief Set up a Face for NLSR use.
+   *
+   * When NLSR receives a Hello Interest from a neighbor that it has
+   * not seen before, it may need to create a Face for that
+   * neighbor. After doing so, it will be necessary to inform NFD
+   * about the standard prefixes that NLSR needs a node to have in
+   * order to conduct normal operations. This function accomplishes
+   * that, and then sends its own Hello Interest to confirm the
+   * contact.
+   */
   void
   onRegistrationSuccess(const ndn::nfd::ControlParameters& commandSuccessResult,
                         const ndn::Name& neighbor, const ndn::time::milliseconds& timeout);
 
+  /*! \brief Create a Face for an adjacency
+   * \sa HelloProtocol::onRegistrationSuccess
+   */
+  void
+  registerPrefixes(const ndn::Name& adjName, const std::string& faceUri,
+                   double linkCost, const ndn::time::milliseconds& timeout);
 private:
   Nlsr& m_nlsr;
   ndn::Scheduler& m_scheduler;
diff --git a/src/logger.cpp b/src/logger.cpp
index 580fc3f..c51cd93 100644
--- a/src/logger.cpp
+++ b/src/logger.cpp
@@ -16,10 +16,10 @@
  *
  * You should have received a copy of the GNU General Public License along with
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- *
- * \author A K M Mahmudul Hoque <ahoque1@memphis.edu>
- *
  **/
+
+#include "logger.hpp"
+
 #include <log4cxx/logger.h>
 #include <log4cxx/basicconfigurator.h>
 #include <log4cxx/xml/domconfigurator.h>
@@ -32,8 +32,6 @@
 #include <boost/algorithm/string.hpp>
 #include <boost/filesystem.hpp>
 
-#include "logger.hpp"
-
 void
 INIT_LOG4CXX(const std::string& log4cxxConfPath)
 {
diff --git a/src/logger.hpp b/src/logger.hpp
index cf171a9..d75687c 100644
--- a/src/logger.hpp
+++ b/src/logger.hpp
@@ -16,11 +16,17 @@
  *
  * You should have received a copy of the GNU General Public License along with
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- *
- * \author A K M Mahmudul Hoque <ahoque1@memphis.edu>
- *
  **/
 
+/*! \file logger.hpp
+ * \brief Define macros and auxiliary functions for logging.
+ *
+ * This file defines the macros that NLSR uses for logging
+ * messages. An intrepid hacker could replace this system cleanly by
+ * providing a system that redefines all of the _LOG_* macros with an
+ * arbitrary system, as long as the underlying system accepts strings.
+ */
+
 #ifndef NLSR_LOGGER_HPP
 #define NLSR_LOGGER_HPP
 
diff --git a/src/nlsr-runner.hpp b/src/nlsr-runner.hpp
index 80ee8d6..7d4505e 100644
--- a/src/nlsr-runner.hpp
+++ b/src/nlsr-runner.hpp
@@ -32,6 +32,15 @@
 
 namespace nlsr {
 
+/*! \brief A wrapper class to instantiate and configure an NLSR object.
+ *
+ * As its name suggests, this class is responsible for running
+ * NLSR. It creates an nlsr::ConfFileProcessor to read a configuration
+ * file and uses that to configure and then start an NLSR process. It
+ * also initializes loggers and optionally daemonizes the NLSR
+ * process. This class only exists to provide this functionality, and
+ * there is no special reliance of NLSR on this class.
+ */
 class NlsrRunner
 {
 public:
@@ -47,6 +56,18 @@
 
   NlsrRunner(std::string& configFileName, bool isDaemonProcess);
 
+  /*! \brief Instantiate, configure, and start the NLSR process.
+   *
+   * Each NlsrRunner is uniquely paired to the Face it's instantiated
+   * with. This is *not* a factory-type class, but a one-to-one
+   * relationship. If one wants to create multiple NLSR classes,
+   * multiple NLSR runners need to be created, too.
+   *
+   * \throws Error If the configuration file cannot be processed. NLSR
+   * is not started.
+   *
+   * \sa Nlsr::canonizeNeighborUris
+   */
   void
   run();
 
diff --git a/src/nlsr.hpp b/src/nlsr.hpp
index 54af8b4..89410e9 100644
--- a/src/nlsr.hpp
+++ b/src/nlsr.hpp
@@ -40,7 +40,9 @@
 #include "utility/name-helper.hpp"
 #include "stats-collector.hpp"
 
+#include <boost/cstdint.hpp>
 #include <stdexcept>
+#include <boost/throw_exception.hpp>
 
 #include <ndn-cxx/face.hpp>
 #include <ndn-cxx/security/key-chain.hpp>
@@ -53,9 +55,6 @@
 #include <ndn-cxx/data.hpp>
 #include <ndn-cxx/encoding/block.hpp>
 
-#include <boost/cstdint.hpp>
-#include <boost/throw_exception.hpp>
-
 namespace nlsr {
 
 static ndn::Name DEFAULT_BROADCAST_PREFIX("/ndn/broadcast");
@@ -292,12 +291,24 @@
     return m_validator;
   }
 
+  /*! \brief Add a certificate NLSR claims to be authoritative for to the certificate store.
+   *
+   * \sa CertificateStore
+   */
   void
   loadCertToPublish(std::shared_ptr<ndn::IdentityCertificate> certificate)
   {
     m_certStore.insert(certificate);
   }
 
+  /*! \brief Find a certificate
+   *
+   * Find a certificate that NLSR has. First it checks against the
+   * certificates this NLSR claims to be authoritative for, usually
+   * something like this specific router's certificate, and then
+   * checks the cache of certficates it has already fetched. If none
+   * can be found, it will return an empty pointer.
+   */
   std::shared_ptr<const ndn::IdentityCertificate>
   getCertificate(const ndn::Name& certificateNameWithoutVersion)
   {
@@ -399,18 +410,28 @@
   }
 
 private:
+  /*! \brief Registers the prefix that NLSR will use for key/certificate interests.
+   */
   void
   registerKeyPrefix();
 
+  /*! \brief Registers the prefix that NLSR will consider to be the machine-local, secure prefix.
+   */
   void
   registerLocalhostPrefix();
 
+  /*! \brief Attempts to satisfy an Interest for a certificate, and send it back.
+   */
   void
   onKeyInterest(const ndn::Name& name, const ndn::Interest& interest);
 
+  /*! \brief Do nothing.
+   */
   void
   onKeyPrefixRegSuccess(const ndn::Name& name);
 
+  /*! \brief Do nothing.
+   */
   void
   onFaceEventNotification(const ndn::nfd::FaceEventNotification& faceEventNotification);
 
@@ -463,7 +484,13 @@
   HelloProtocol m_helloProtocol;
 
 private:
+  /*! \brief Where NLSR caches certificates it has fetched to validate
+   * Data signatures.
+   */
   std::shared_ptr<ndn::CertificateCacheTtl> m_certificateCache;
+  /*! \brief Where NLSR stores certificates it claims to be
+   * authoritative for. Usually the router certificate.
+   */
   security::CertificateStore m_certStore;
 
 PUBLIC_WITH_TESTS_ELSE_PRIVATE:
diff --git a/src/publisher/lsa-publisher.hpp b/src/publisher/lsa-publisher.hpp
index 1c33242..6726b5a 100644
--- a/src/publisher/lsa-publisher.hpp
+++ b/src/publisher/lsa-publisher.hpp
@@ -44,7 +44,9 @@
                         ndn::Face& face,
                         ndn::KeyChain& keyChain);
 
-  /*! \brief Returns the adj. LSAs represented by this object. */
+  /*! \brief Generates an TLV-format AdjacencyLsa from AdjacencyLsas
+   * and their Adjacents.
+   */
   std::list<tlv::AdjacencyLsa>
   getTlvLsas();
 
@@ -65,7 +67,9 @@
                         ndn::Face& face,
                         ndn::KeyChain& keyChain);
 
-  /*! \brief Returns the cor. LSAs represented by this object. */
+  /*! \brief Generates a TLV-format CoordinateLsa from CoordinateLsas
+   * and their hyperbolic coordinates.
+   */
   std::list<tlv::CoordinateLsa>
   getTlvLsas();
 
@@ -85,7 +89,10 @@
   NameLsaPublisher(Lsdb& lsdb,
                    ndn::Face& face,
                    ndn::KeyChain& keyChain);
-  /*! \brief Returns the name LSAs represented by this object. */
+
+  /*! \brief Generates a TLV-format NameLsa from NameLsas and their
+   * list of name prefixes.
+   */
   std::list<tlv::NameLsa>
   getTlvLsas();
 
diff --git a/src/publisher/lsdb-dataset-interest-handler.hpp b/src/publisher/lsdb-dataset-interest-handler.hpp
index f8aa025..b92a72f 100644
--- a/src/publisher/lsdb-dataset-interest-handler.hpp
+++ b/src/publisher/lsdb-dataset-interest-handler.hpp
@@ -69,7 +69,8 @@
   }
 
 private:
-  /*! \brief set dispatcher for localhost/router name.
+  /*! \brief Capture-point for Interests to verify Interests are
+   * valid, and then process them.
    */
   void
   setDispatcher(ndn::mgmt::Dispatcher& dispatcher);
diff --git a/src/publisher/segment-publisher.hpp b/src/publisher/segment-publisher.hpp
index 82109eb..59c44b4 100644
--- a/src/publisher/segment-publisher.hpp
+++ b/src/publisher/segment-publisher.hpp
@@ -52,6 +52,8 @@
   {
   }
 
+  /*! \brief Define the max segment size as half the max NDN packet size.
+   */
   static size_t
   getMaxSegmentSize()
   {
@@ -65,7 +67,12 @@
     return ndn::time::milliseconds(1000);
   }
 
-  /*! \brief Publish data under provided prefix
+  /*! \brief Publish data under the provided prefix
+   *
+   * Processes whatever is provided from SegmentPublisher::generate,
+   * by breaking it into segments of MAX_SEGMENT_SIZE and sending each
+   * one individually. The last segment is distinguished by having the
+   * final block ID set to a timestamp.
    */
   void
   publish(const ndn::Name& prefix,
@@ -112,6 +119,8 @@
   generate(ndn::EncodingBuffer& outBuffer) = 0;
 
 private:
+  /*! \brief Helper function to sign and put data on a Face.
+   */
   void
   publishSegment(std::shared_ptr<ndn::Data>& data, const ndn::security::SigningInfo& signingInfo)
   {
diff --git a/src/route/fib.cpp b/src/route/fib.cpp
index 0eb6d16..de73310 100644
--- a/src/route/fib.cpp
+++ b/src/route/fib.cpp
@@ -48,6 +48,7 @@
            (it->second).getNexthopList().getNextHops().begin();
          nhit != (it->second).getNexthopList().getNextHops().end(); nhit++) {
       //remove entry from NDN-FIB
+      // Only unregister the prefix if it ISN'T a neighbor.
       if (isPrefixUpdatable((it->second).getName())) {
         unregisterPrefix((it->second).getName(), nhit->getConnectingFaceUri());
       }
diff --git a/src/route/fib.hpp b/src/route/fib.hpp
index 4f15655..5761a3d 100644
--- a/src/route/fib.hpp
+++ b/src/route/fib.hpp
@@ -38,6 +38,19 @@
 class ConfParameter;
 class FibEntry;
 
+/*! \brief Maps names to lists of next hops, and exports this information to NFD.
+ *
+ * The FIB (Forwarding Information Base) is the "authoritative" source
+ * of how to route Interests on this router to other nodes running
+ * NLSR. In essence, the FIB is a map that takes name prefixes to a
+ * list of next-hops out of this router. This class also contains
+ * methods to inform NFD about these relationships. The FIB has its
+ * entries populated by the NamePrefixTable
+ *
+ * \sa nlsr::NamePrefixTable
+ * \sa nlsr::NamePrefixTable::addEntry
+ * \sa nlsr::NamePrefixTable::updateWithNewRoute
+ */
 class Fib
 {
 public:
@@ -51,15 +64,42 @@
   {
   }
 
-  FibEntry*
-  processUpdate(const ndn::Name& name, NexthopList& allHops);
-
+  /*! \brief Completely remove a name prefix from the FIB.
+   *
+   * If a name prefix is found to no longer be reachable from this
+   * router, it will be removed from the FIB and all of its next-hops
+   * will be unregistered from NFD.
+   *
+   * \sa nlsr::NamePrefixTable::removeEntry
+   */
   VIRTUAL_WITH_TESTS void
   remove(const ndn::Name& name);
 
+  /*! \brief Set the nexthop list of a name.
+   *
+   * This method is the entry for others to add next-hop information
+   * to the FIB. Formally put, this method registers in NFD all
+   * next-hops in allHops, and unregisters the set difference of
+   * newHops - oldHops. This method also schedules the regular refresh
+   * of those next hops.
+   *
+   * \param name The name prefix that the next-hops apply to
+   * \param allHops A complete list of next-hops to associate with name.
+   */
   VIRTUAL_WITH_TESTS void
   update(const ndn::Name& name, NexthopList& allHops);
 
+  /*! \brief Remove all entries from the FIB.
+   *
+   * This method is called before terminating NLSR to minimize the
+   * time NFD spends routing on now-invalid information. This is not
+   * strictly necessary, because eventually those prefix registrations
+   * will expire, but cleaning up after ourselves improves
+   * performance.
+   *
+   * \sa NlsrRunner::run
+   *
+   */
   void
   clean();
 
@@ -69,6 +109,26 @@
     m_refreshTime = fert;
   }
 
+  /*! \brief Inform NFD of a next-hop
+   *
+   * This method informs NFD of a next-hop for some name prefix. This
+   * method actually submits the information to NFD's RIB, which then
+   * aggregates its own best hops and updates NFD's (the actual)
+   * FIB. Typically, NLSR's FIB and NFD's FIB will be almost the
+   * same. However, this is not necessarily the case and there may be
+   * cases when other sources of information provide better next-hops
+   * to NFD that NLSR doesn't know about. For example, an operator
+   * could set up a direct link to a node that isn't running NLSR.
+   *
+   * \param namePrefix The name prefix to register a next-hop for
+   * \param faceUri The faceUri of the adjacent that this prefix can be reached through
+   * \param faceCost The cost to reach namePrefix through faceUri
+   * \param timeout How long this registration should last
+   * \param flags Route inheritance flags (CAPTURE, CHILD_INHERIT)
+   * \param times How many times we have failed to register this prefix since the last success.
+   *
+   * \sa Fib::registerPrefixInNfd
+   */
   void
   registerPrefix(const ndn::Name& namePrefix,
                  const ndn::util::FaceUri& faceUri,
@@ -84,22 +144,39 @@
   writeLog();
 
 private:
+  /*! \brief Indicates whether a prefix is a direct neighbor or not.
+   *
+   * \return Whether the name is NOT associated with a direct neighbor
+   */
   bool
   isPrefixUpdatable(const ndn::Name& name);
 
+  /*! \brief Does one half of the updating of a FibEntry with new next-hops.
+   *
+   * Adds nexthops to a FibEntry and registers them in NFD.
+   * \sa Fib::update
+   * \sa Fib::removeOldNextHopsFromFibEntryAndNfd
+   */
   void
   addNextHopsToFibEntryAndNfd(FibEntry& entry, NexthopList& hopsToAdd);
 
   unsigned int
   getNumberOfFacesForName(NexthopList& nextHopList);
 
+  /*! \brief Unregisters a prefix from NFD's RIB.
+   *
+   */
   void
   unregisterPrefix(const ndn::Name& namePrefix, const std::string& faceUri);
 
+  /*! \brief Log registration success, and update the Face ID associated with a URI.
+   */
   void
   onRegistrationSuccess(const ndn::nfd::ControlParameters& commandSuccessResult,
                         const std::string& message, const ndn::util::FaceUri& faceUri);
 
+  /*! \brief Retry a prefix (next-hop) registration up to three (3) times.
+   */
   void
   onRegistrationFailure(const ndn::nfd::ControlResponse& response,
                         const std::string& message,
@@ -107,18 +184,26 @@
                         const ndn::util::FaceUri& faceUri,
                         uint8_t times);
 
+  /*! \brief Log a successful unregistration.
+   */
   void
   onUnregistrationSuccess(const ndn::nfd::ControlParameters& commandSuccessResult,
                           const std::string& message);
 
+  /*! \brief Log an unregistration failure. Does not retry.
+   */
   void
   onUnregistrationFailure(const ndn::nfd::ControlResponse& response,
                                const std::string& message);
 
+  /*! \brief Log a successful strategy setting.
+   */
   void
   onSetStrategySuccess(const ndn::nfd::ControlParameters& commandSuccessResult,
                        const std::string& message);
 
+  /*! \brief Retry a strategy setting up to three (3) times.
+   */
   void
   onSetStrategyFailure(const ndn::nfd::ControlResponse& response,
                        const ndn::nfd::ControlParameters& parameters,
@@ -126,16 +211,45 @@
                        const std::string& message);
 
 PUBLIC_WITH_TESTS_ELSE_PRIVATE:
+  /*! \brief Internal portion of Fib::update.
+   * \sa Fib::update
+   */
+  FibEntry*
+  processUpdate(const ndn::Name& name, NexthopList& allHops);
+
+  /*! \brief Schedule a refresh event for an entry.
+   *
+   * Schedules a refresh event for an entry. In order to form a
+   * perpetual loop, refreshCallback needs to call
+   * Fib::scheduleEntryRefresh in some way, with refreshCallback being
+   * the same each time. In the current implementation, this is
+   * accomplished by having a separate function, Fib::scheduleLoop,
+   * that does this work.
+   * \sa Fib::scheduleLoop
+   */
   void
   scheduleEntryRefresh(FibEntry& entry, const afterRefreshCallback& refreshCb);
 
 private:
+  /*! \brief Continue the entry refresh cycle.
+   */
   void
   scheduleLoop(FibEntry& entry);
 
+  /*! \brief Cancel an entry's refresh event.
+   *
+   * Cancel an entry's refresh event. This only needs to be done when
+   * an entry is removed. Typically this happens when NLSR is
+   * terminated or crashes, and we don't want the scheduler to crash
+   * because it's referencing memory that has no valid function.
+   *
+   * \sa NlsrRunner::run
+   */
   void
   cancelEntryRefresh(const FibEntry& entry);
 
+  /*! \brief Refreshes an entry in NFD.
+   */
   void
   refreshEntry(const ndn::Name& name, afterRefreshCallback refreshCb);
 
@@ -152,6 +266,10 @@
   AdjacencyList& m_adjacencyList;
   ConfParameter& m_confParameter;
 
+  /*! GRACE_PERIOD A "window" we append to the timeout time to
+   * allow for things like stuttering prefix registrations and
+   * processing time when refreshing events.
+   */
   static const uint64_t GRACE_PERIOD;
 };
 
diff --git a/src/route/map-entry.hpp b/src/route/map-entry.hpp
index ab8ba98..84f3dd1 100644
--- a/src/route/map-entry.hpp
+++ b/src/route/map-entry.hpp
@@ -17,9 +17,8 @@
  * You should have received a copy of the GNU General Public License along with
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
- * \author A K M Mahmudul Hoque <ahoque1@memphis.edu>
- *
  **/
+
 #ifndef NLSR_MAP_ENTRY_HPP
 #define NLSR_MAP_ENTRY_HPP
 
diff --git a/src/route/name-prefix-table-entry.hpp b/src/route/name-prefix-table-entry.hpp
index e88166b..b345231 100644
--- a/src/route/name-prefix-table-entry.hpp
+++ b/src/route/name-prefix-table-entry.hpp
@@ -56,6 +56,9 @@
     return m_rteList;
   }
 
+  /*! \brief Resets the next hop lists of all routing table entries
+   * that advertise this name prefix.
+   */
   void
   resetRteListNextHop()
   {
@@ -78,24 +81,25 @@
     return m_nexthopList;
   }
 
-  /*! \brief Generates a next-hop list from routing table entries. */
+  /*! \brief Collect all next-hops that are advertised by this entry's
+   * routing entries.
+   */
   void
   generateNhlfromRteList();
 
   /*! \brief Removes a routing entry from this NPT entry.
-    \param rtpePtr The routing entry
-    \return The remaining number of other NPTs using the removed routing entry.
-  */
+   * \return The number of NPTs using the just-removed routing entry.
+   */
   uint64_t
   removeRoutingTableEntry(std::shared_ptr<RoutingTablePoolEntry> rtpePtr);
 
   /*! \brief Adds a routing entry to this NPT entry.
-    \param rtpePtr The routing entry.
-
-    Adds a routing table pool entry to this NPT entry's list
-    (reminder: each RTPE has a next-hop list). They are used to
-    calculate this entry's overall next-hop list.
-  */
+   * \param rtpePtr The routing entry.
+   *
+   * Adds a routing table pool entry to this NPT entry's list
+   * (reminder: each RTPE has a next-hop list). They are used to
+   * calculate this entry's overall next-hop list.
+   */
   void
   addRoutingTableEntry(std::shared_ptr<RoutingTablePoolEntry> rtpePtr);
 
diff --git a/src/route/nexthop-list.hpp b/src/route/nexthop-list.hpp
index 918cab2..b35f3bf 100644
--- a/src/route/nexthop-list.hpp
+++ b/src/route/nexthop-list.hpp
@@ -17,18 +17,19 @@
  * You should have received a copy of the GNU General Public License along with
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  **/
+
 #ifndef NLSR_NEXTHOP_LIST_HPP
 #define NLSR_NEXTHOP_LIST_HPP
 
+#include "nexthop.hpp"
+#include "adjacent.hpp"
+
 #include <set>
 #include <iostream>
 #include <boost/cstdint.hpp>
 
 #include <ndn-cxx/face.hpp>
 
-#include "nexthop.hpp"
-#include "adjacent.hpp"
-
 namespace nlsr {
 
 struct NextHopComparator {
@@ -144,4 +145,4 @@
 
 } // namespace nlsr
 
-#endif //NLSR_NEXTHOP_LIST_HPP
+#endif // NLSR_NEXTHOP_LIST_HPP
diff --git a/src/route/routing-table-entry.hpp b/src/route/routing-table-entry.hpp
index b553fa1..6e01c45 100644
--- a/src/route/routing-table-entry.hpp
+++ b/src/route/routing-table-entry.hpp
@@ -17,15 +17,15 @@
  * You should have received a copy of the GNU General Public License along with
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
- * \author A K M Mahmudul Hoque <ahoque1@memphis.edu>
- *
  **/
+
 #ifndef NLSR_ROUTING_TABLE_ENTRY_HPP
 #define NLSR_ROUTING_TABLE_ENTRY_HPP
 
+#include "nexthop-list.hpp"
+
 #include <iostream>
 #include <ndn-cxx/name.hpp>
-#include "nexthop-list.hpp"
 
 namespace nlsr {
 
diff --git a/src/route/routing-table-pool-entry.hpp b/src/route/routing-table-pool-entry.hpp
index 0e64386..ff84dfe 100644
--- a/src/route/routing-table-pool-entry.hpp
+++ b/src/route/routing-table-pool-entry.hpp
@@ -17,19 +17,32 @@
  * You should have received a copy of the GNU General Public License along with
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
- * \author Nicholas Gordon <nmgordon@memphis.edu>
- *
  **/
 
 #ifndef NLSR_ROUTING_TABLE_POOL_ENTRY_HPP
 #define NLSR_ROUTING_TABLE_POOL_ENTRY_HPP
 
+#include "routing-table-entry.hpp"
+#include "nexthop-list.hpp"
+
 #include <iostream>
 #include <ndn-cxx/name.hpp>
-#include "nexthop-list.hpp"
-#include "routing-table-entry.hpp"
 
 namespace nlsr {
+
+/*! \brief A deduplication system for the NamePrefixTable
+ *
+ * The NamePrefixTable associates name prefixes to a router. To do
+ * this, it needs to know if certain routers are reachable. This in
+ * turn requires access to entries from the RoutingTable, which are
+ * associated with name prefixes. Doing this naively copies the entry
+ * from the RoutingTable each time, which is costly. This class
+ * provides a deduplication system where the NamePrefixTable can
+ * maintain a collection of RoutingTablePoolEntries. Then, this new
+ * class can be associated with the name prefixes instead of the
+ * original entries, which provides a minimal memory solution.
+ * \sa NamePrefixTable
+ */
 class RoutingTablePoolEntry : public RoutingTableEntry
 {
 public:
diff --git a/src/route/routing-table.hpp b/src/route/routing-table.hpp
index 903ca79..b138c9d 100644
--- a/src/route/routing-table.hpp
+++ b/src/route/routing-table.hpp
@@ -23,15 +23,15 @@
 #ifndef NLSR_ROUTING_TABLE_HPP
 #define NLSR_ROUTING_TABLE_HPP
 
+#include "conf-parameter.hpp"
+#include "routing-table-entry.hpp"
+
 #include <iostream>
 #include <utility>
 #include <string>
 #include <boost/cstdint.hpp>
 #include <ndn-cxx/util/scheduler.hpp>
 
-#include "conf-parameter.hpp"
-#include "routing-table-entry.hpp"
-
 namespace nlsr {
 
 class Nlsr;
@@ -48,33 +48,34 @@
   }
 
   /*! \brief Calculates a list of next hops for each router in the network.
-    \param pnlsr The NLSR object that contains the LSAs needed for adj. info.
-
-    Calculates the list of next hops to every other router in the network.
-  */
+   * \param pnlsr The NLSR object that contains the LSAs needed for adj. info.
+   *
+   * Calculates the list of next hops to every other router in the network.
+   */
   void
   calculate(Nlsr& pnlsr);
 
   /*! \brief Adds a next hop to a routing table entry.
-    \param destRouter The destination router whose RTE we want to modify.
-    \param nh The next hop to add to the RTE.
-  */
+   * \param destRouter The destination router whose RTE we want to modify.
+   * \param nh The next hop to add to the RTE.
+   */
   void
   addNextHop(const ndn::Name& destRouter, NextHop& nh);
 
   /*! \brief Adds a next hop to a routing table entry in a dry run scenario.
-    \param destRouter The destination router whose RTE we want to modify.
-    \param nh The next hop to add to the router.
-  */
+   * \param destRouter The destination router whose RTE we want to modify.
+   * \param nh The next hop to add to the router.
+   */
   void
   addNextHopToDryTable(const ndn::Name& destRouter, NextHop& nh);
 
   RoutingTableEntry*
   findRoutingTableEntry(const ndn::Name& destRouter);
 
-  /*! \brief Schedules a calculation event in the event scheduler.
-    \param pnlsr The NLSR whose scheduling status is needed.
-  */
+  /*! \brief Schedules a calculation event in the event scheduler only
+   * if one isn't already scheduled.
+   * \param pnlsr The NLSR whose scheduling status is needed.
+   */
   void
   scheduleRoutingTableCalculation(Nlsr& pnlsr);
 
@@ -131,4 +132,4 @@
 
 } // namespace nlsr
 
-#endif //NLSR_ROUTING_TABLE_HPP
+#endif // NLSR_ROUTING_TABLE_HPP
diff --git a/src/security/certificate-store.hpp b/src/security/certificate-store.hpp
index b591fe7..4b84df6 100644
--- a/src/security/certificate-store.hpp
+++ b/src/security/certificate-store.hpp
@@ -31,6 +31,13 @@
 namespace nlsr {
 namespace security {
 
+/*! \brief Store certificates for names
+ *
+ * Stores certificates that this router claims to be authoritative
+ * for. That is, this stores only the certificates that we will reply
+ * to KEY interests with, e.g. when other routers are verifying data
+ * we have sent.
+ */
 class CertificateStore
 {
 public:
diff --git a/src/tlv/adjacency-lsa.hpp b/src/tlv/adjacency-lsa.hpp
index 217366a..f1854a4 100644
--- a/src/tlv/adjacency-lsa.hpp
+++ b/src/tlv/adjacency-lsa.hpp
@@ -43,7 +43,7 @@
                      LsaInfo
                      Adjacency*
 
-   \sa http://redmine.named-data.net/projects/nlsr/wiki/LSDB_DataSet
+   \sa https://redmine.named-data.net/projects/nlsr/wiki/LSDB_DataSet
  */
 class AdjacencyLsa
 {
@@ -109,13 +109,33 @@
     return *this;
   }
 
+  /*! \brief Encodes the Adjacent objects and some info using the method in TAG.
+   *
+   * This function will TLV-format the Adjacent objects and some LSA
+   * info using the implementation speciifed by TAG. Usually this is
+   * called with an estimator first to guess how long the buffer needs
+   * to be, then with an encoder to do the real work. This process is
+   * automated by the other wireEncode.
+   * \sa AdjacencyLsa::wireEncode()
+   */
   template<ndn::encoding::Tag TAG>
   size_t
   wireEncode(ndn::EncodingImpl<TAG>& block) const;
 
+  /*! \brief Create a TLV encoding of this object.
+   *
+   * Create a block containing the TLV encoding of this object. That
+   * involves two steps: estimating the size that the information will
+   * take up, and then creating a buffer of that size and encoding the
+   * information into it. Both steps are accomplished by
+   * AdjacencyLsa::wireEncode(ndn::EncodingImpl<TAG>&)
+   */
   const ndn::Block&
   wireEncode() const;
 
+  /*! \brief Populate this object by decoding the one contained in the
+   * given block.
+   */
   void
   wireDecode(const ndn::Block& wire);
 
diff --git a/src/tlv/adjacency.hpp b/src/tlv/adjacency.hpp
index 5767ce6..2e5dec7 100644
--- a/src/tlv/adjacency.hpp
+++ b/src/tlv/adjacency.hpp
@@ -39,7 +39,7 @@
                   Uri
                   Cost
 
-   \sa http://redmine.named-data.net/projects/nlsr/wiki/LSDB_DataSet
+   \sa https://redmine.named-data.net/projects/nlsr/wiki/LSDB_DataSet
  */
 class Adjacency
 {
@@ -101,13 +101,31 @@
     return *this;
   }
 
+  /*! \brief TLV-encode this object using the implementation in from TAG.
+   *
+   * This method TLV-encodes this Adjacency object using the
+   * implementation given by TAG. Usually two implementations are
+   * provided: a size estimator and a real encoder, which are used in
+   * sequence to allocate the necessary block size and then encode it.
+   * \sa Adjacency::wireEncode()
+   */
   template<ndn::encoding::Tag TAG>
   size_t
   wireEncode(ndn::EncodingImpl<TAG>& block) const;
 
+  /*! \brief Create a TLV encoding of this object.
+   *
+   * This function automates the process of guessing the necessary
+   * size of a block containing this object, and then creating a block
+   * and putting the TLV encoding into it.
+   * \sa Adjacency::wireEncode(ndn::EncodingImpl<TAG>&)
+   */
   const ndn::Block&
   wireEncode() const;
 
+  /*! \brief Populate this object by decoding the object contained in
+   * the given block.
+   */
   void
   wireDecode(const ndn::Block& wire);
 
diff --git a/src/tlv/coordinate-lsa.hpp b/src/tlv/coordinate-lsa.hpp
index 0568cc1..18c32ab 100644
--- a/src/tlv/coordinate-lsa.hpp
+++ b/src/tlv/coordinate-lsa.hpp
@@ -103,13 +103,33 @@
     return *this;
   }
 
+  /*! \brief Encodes the hyperbolic coordinates and some info using the method in TAG.
+   *
+   * This function will TLV-format the hyperbolic coordinates objects and some LSA
+   * info using the implementation speciifed by TAG. Usually this is
+   * called with an estimator first to guess how long the buffer needs
+   * to be, then with an encoder to do the real work. This process is
+   * automated by the other wireEncode.
+   * \sa CoordinateLsa::wireEncode()
+   */
   template<ndn::encoding::Tag TAG>
   size_t
   wireEncode(ndn::EncodingImpl<TAG>& block) const;
 
+  /*! \brief Create a TLV encoding of this object.
+   *
+   * Create a block containing the TLV encoding of this object. That
+   * involves two steps: estimating the size that the information will
+   * take up, and then creating a buffer of that size and encoding the
+   * information into it. Both steps are accomplished by
+   * CoordinateLsa::wireEncode(ndn::EncodingImpl<TAG>&)
+   */
   const ndn::Block&
   wireEncode() const;
 
+  /*! \brief Populate this object by decoding the one contained in the
+   * given block.
+   */
   void
   wireDecode(const ndn::Block& wire);
 
diff --git a/src/tlv/lsa-info.hpp b/src/tlv/lsa-info.hpp
index ef2142a..4573661 100644
--- a/src/tlv/lsa-info.hpp
+++ b/src/tlv/lsa-info.hpp
@@ -22,6 +22,8 @@
 #ifndef NLSR_TLV_LSA_INFO_HPP
 #define NLSR_TLV_LSA_INFO_HPP
 
+#include "lsa.hpp"
+
 #include <ndn-cxx/util/time.hpp>
 #include <ndn-cxx/encoding/block.hpp>
 #include <ndn-cxx/encoding/encoding-buffer.hpp>
@@ -29,8 +31,6 @@
 #include <ndn-cxx/name.hpp>
 #include <boost/throw_exception.hpp>
 
-#include "lsa.hpp"
-
 namespace nlsr {
 namespace tlv {
 
@@ -115,13 +115,33 @@
     return m_hasInfiniteExpirationPeriod;
   }
 
+  /*! \brief Encodes LSA info using the method in TAG.
+   *
+   * This function will TLV-format LSA info using the implementation
+   * speciifed by TAG. Usually this is called with an estimator first
+   * to guess how long the buffer needs to be, then with an encoder to
+   * do the real work. This process is automated by the other
+   * wireEncode.
+   * \sa LsaInfo::wireEncode()
+   */
   template<ndn::encoding::Tag TAG>
   size_t
   wireEncode(ndn::EncodingImpl<TAG>& block) const;
 
+  /*! \brief Create a TLV encoding of this object.
+   *
+   * Create a block containing the TLV encoding of this object. That
+   * involves two steps: estimating the size that the information will
+   * take up, and then creating a buffer of that size and encoding the
+   * information into it. Both steps are accomplished by
+   * LsaInfo::wireEncode(ndn::EncodingImpl<TAG>&)
+   */
   const ndn::Block&
   wireEncode() const;
 
+  /*! \brief Populate this object by decoding the one contained in the
+   * given block.
+   */
   void
   wireDecode(const ndn::Block& wire);
 
diff --git a/src/tlv/lsdb-status.hpp b/src/tlv/lsdb-status.hpp
index 5fc8f8c..fb494e6 100644
--- a/src/tlv/lsdb-status.hpp
+++ b/src/tlv/lsdb-status.hpp
@@ -45,7 +45,7 @@
                    CoordinateLsa*
                    NameLsa*
 
-   \sa http://redmine.named-data.net/projects/nlsr/wiki/LSDB_DataSet
+   \sa https://redmine.named-data.net/projects/nlsr/wiki/LSDB_DataSet
  */
 class LsdbStatus
 {
@@ -156,13 +156,34 @@
     return m_hasNameLsas;
   }
 
+  /*! \brief Encodes the LSA objects and some info for each LSA using
+   * the method in TAG.
+   *
+   * This function will TLV-format the LSA objects and some LSA
+   * info using the implementation specified by TAG. Usually this is
+   * called with an estimator first to guess how long the buffer needs
+   * to be, then with an encoder to do the real work. This process is
+   * automated by the other wireEncode.
+   * \sa LsdbStatus::wireEncode()
+   */
   template<ndn::encoding::Tag TAG>
   size_t
   wireEncode(ndn::EncodingImpl<TAG>& block) const;
 
+  /*! \brief Create a TLV encoding of this object.
+   *
+   * Create a block containing the TLV encoding of this object. That
+   * involves two steps: estimating the size that the information will
+   * take up, and then creating a buffer of that size and encoding the
+   * information into it. Both steps are accomplished by
+   * LsdbStatus::wireEncode(ndn::EncodingImpl<TAG>&)
+   */
   const ndn::Block&
   wireEncode() const;
 
+  /*! \brief Populate this object by decoding the one contained in the
+   * given block.
+   */
   void
   wireDecode(const ndn::Block& wire);
 
diff --git a/src/tlv/name-lsa.hpp b/src/tlv/name-lsa.hpp
index e120af8..2e137be 100644
--- a/src/tlv/name-lsa.hpp
+++ b/src/tlv/name-lsa.hpp
@@ -42,7 +42,7 @@
                 LsaInfo
                 Name+
 
-   \sa http://redmine.named-data.net/projects/nlsr/wiki/LSDB_DataSet
+   \sa https://redmine.named-data.net/projects/nlsr/wiki/LSDB_DataSet
  */
 class NameLsa
 {
@@ -108,13 +108,33 @@
     return *this;
   }
 
+  /*! \brief Encodes the Name objects and some info using the method in TAG.
+   *
+   * This function will TLV-format the Name objects and some LSA
+   * info using the implementation speciifed by TAG. Usually this is
+   * called with an estimator first to guess how long the buffer needs
+   * to be, then with an encoder to do the real work. This process is
+   * automated by the other wireEncode.
+   * \sa NameLsa::wireEncode()
+   */
   template<ndn::encoding::Tag TAG>
   size_t
   wireEncode(ndn::EncodingImpl<TAG>& block) const;
 
+  /*! \brief Create a TLV encoding of this object.
+   *
+   * Create a block containing the TLV encoding of this object. That
+   * involves two steps: estimating the size that the information will
+   * take up, and then creating a buffer of that size and encoding the
+   * information into it. Both steps are accomplished by
+   * NameLsa::wireEncode(ndn::EncodingImpl<TAG>&)
+   */
   const ndn::Block&
   wireEncode() const;
 
+  /*! \brief Populate this object by decoding the one contained in the
+   * given block.
+   */
   void
   wireDecode(const ndn::Block& wire);
 
diff --git a/src/tlv/tlv-nlsr.hpp b/src/tlv/tlv-nlsr.hpp
index e202b64..4a52b1b 100644
--- a/src/tlv/tlv-nlsr.hpp
+++ b/src/tlv/tlv-nlsr.hpp
@@ -24,11 +24,15 @@
 
 #include <ndn-cxx/encoding/tlv.hpp>
 
-namespace ndn  {
-namespace tlv  {
+namespace ndn {
+namespace tlv {
 namespace nlsr {
 
-// LSDB DataSet
+/*! The TLV block types that NLSR uses to encode/decode LSA types. The
+ *  way NLSR encodes LSAs to TLV is by encoding each element of the
+ *  LSA as a separate TLV block. So, block types are needed. These are
+ *  used in the LSDB Status Dataset.
+ */
 enum {
   LsaInfo          = 128,
   OriginRouter     = 129,
diff --git a/src/update/nfd-rib-commands.hpp b/src/update/nfd-rib-commands.hpp
index 39ecb5f..b259b7e 100644
--- a/src/update/nfd-rib-commands.hpp
+++ b/src/update/nfd-rib-commands.hpp
@@ -19,6 +19,21 @@
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  **/
 
+/*! \file
+ * Define parameters for NFD RIB commands
+ *
+ * When validating an NFD RIB command, NLSR is only concerned with the
+ * name in the command. However, a request is rejected if it has
+ * unsolicited fields, so the origin, which is set by NFD's RIB, must
+ * be considered optional. We consider these to be secure because they
+ * are currently only received over the localhost prefix. These serve
+ * to support NFD RIB to NLSR route readvertising.
+ *
+ * \sa NfdRibCommandProcessor
+ * \sa nlsr::Nlsr::LOCALHOST_PREFIX
+ * \sa nlsr::Nlsr::getDispatcher
+ */
+
 #ifndef UPDATE_NFD_RIB_COMMANDS_HPP
 #define UPDATE_NFD_RIB_COMMANDS_HPP
 
diff --git a/src/update/prefix-update-commands.hpp b/src/update/prefix-update-commands.hpp
index 9cb2790..ce851a9 100644
--- a/src/update/prefix-update-commands.hpp
+++ b/src/update/prefix-update-commands.hpp
@@ -19,6 +19,18 @@
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  **/
 
+/*! \file
+ * Define parameters for commands to manipulate advertised name prefixes
+ *
+ * These classes serve to define what parameters are required for
+ * Prefix Update commands. We assume these commands are secure because
+ * they are received on the localhost prefix. We require that a name
+ * be present to action upon, and also that our response have a
+ * name. Responses are only sent on failures.
+ *
+ * \sa PrefixUpdateProcessor
+ */
+
 #ifndef NLSR_UPDATE_PREFIX_UPDATE_COMMANDS_HPP
 #define NLSR_UPDATE_PREFIX_UPDATE_COMMANDS_HPP
 
diff --git a/src/update/prefix-update-processor.hpp b/src/update/prefix-update-processor.hpp
index 6ee9506..52780e6 100644
--- a/src/update/prefix-update-processor.hpp
+++ b/src/update/prefix-update-processor.hpp
@@ -55,6 +55,18 @@
                         ndn::KeyChain& keyChain,
                         std::shared_ptr<ndn::CertificateCacheTtl> certificateCache,
                         security::CertificateStore& certStore);
+
+  /*! \brief Load the validator's configuration from a section of a
+   * configuration file.
+   * \sa ConfFileProcessor::processConfFile
+   * \sa ConfFileProcessor::processConfSectionSecurity
+   *
+   * Loads the state of the validator for prefix update commands by
+   * reading a section from a configuration file. This function is
+   * expecting the section to be from a Boost property tree object.
+   *
+   * \throws PrefixUpdateProcessor::Error If configuration fails to load successfully
+   */
   void
   loadValidator(ConfigSection section, const std::string& filename);
 
