diff --git a/src/lsa/adj-lsa.cpp b/src/lsa/adj-lsa.cpp
index ac583e4..f143499 100644
--- a/src/lsa/adj-lsa.cpp
+++ b/src/lsa/adj-lsa.cpp
@@ -112,23 +112,18 @@
   m_adl = adl;
 }
 
-std::string
-AdjLsa::toString() const
+void
+AdjLsa::print(std::ostream& os) const
 {
-  std::ostringstream os;
-  os << getString();
   os << "      Adjacent(s):\n";
 
   int adjacencyIndex = 0;
-
   for (const auto& adjacency : m_adl) {
     os << "        Adjacent " << adjacencyIndex++
        << ": (name=" << adjacency.getName()
        << ", uri="   << adjacency.getFaceUri()
        << ", cost="  << adjacency.getLinkCost() << ")\n";
   }
-
-  return os.str();
 }
 
 std::tuple<bool, std::list<ndn::Name>, std::list<ndn::Name>>
@@ -145,10 +140,4 @@
   return {false, std::list<ndn::Name>{}, std::list<ndn::Name>{}};
 }
 
-std::ostream&
-operator<<(std::ostream& os, const AdjLsa& lsa)
-{
-  return os << lsa.toString();
-}
-
 } // namespace nlsr
diff --git a/src/lsa/adj-lsa.hpp b/src/lsa/adj-lsa.hpp
index 133e95c..8c6354d 100644
--- a/src/lsa/adj-lsa.hpp
+++ b/src/lsa/adj-lsa.hpp
@@ -30,23 +30,27 @@
 
 namespace nlsr {
 
-/*!
-   \brief Data abstraction for AdjLsa
-   AdjacencyLsa := ADJACENCY-LSA-TYPE TLV-LENGTH
-                     Lsa
-                     Adjacency*
-
+/**
+ * @brief Represents an LSA of adjacencies of the origin router in link-state mode.
+ *
+ * AdjLsa is encoded as:
+ * @code{.abnf}
+ * AdjLsa = ADJACENCY-LSA-TYPE TLV-LENGTH
+ *            Lsa
+ *            *Adjacency
+ * @endcode
  */
 class AdjLsa : public Lsa, private boost::equality_comparable<AdjLsa>
 {
 public:
-  typedef AdjacencyList::const_iterator const_iterator;
+  using const_iterator = AdjacencyList::const_iterator;
 
   AdjLsa() = default;
 
   AdjLsa(const ndn::Name& originR, uint64_t seqNo,
          const ndn::time::system_clock::time_point& timepoint, AdjacencyList& adl);
 
+  explicit
   AdjLsa(const ndn::Block& block);
 
   Lsa::Type
@@ -103,12 +107,13 @@
   void
   wireDecode(const ndn::Block& wire);
 
-  std::string
-  toString() const override;
-
   std::tuple<bool, std::list<ndn::Name>, std::list<ndn::Name>>
   update(const std::shared_ptr<Lsa>& lsa) override;
 
+private:
+  void
+  print(std::ostream& os) const override;
+
 private: // non-member operators
   // NOTE: the following "hidden friend" operators are available via
   //       argument-dependent lookup only and must be defined inline.
@@ -126,9 +131,6 @@
 
 NDN_CXX_DECLARE_WIRE_ENCODE_INSTANTIATIONS(AdjLsa);
 
-std::ostream&
-operator<<(std::ostream& os, const AdjLsa& lsa);
-
 } // namespace nlsr
 
 #endif // NLSR_LSA_ADJ_LSA_HPP
diff --git a/src/lsa/coordinate-lsa.cpp b/src/lsa/coordinate-lsa.cpp
index be42d9e..11428f8 100644
--- a/src/lsa/coordinate-lsa.cpp
+++ b/src/lsa/coordinate-lsa.cpp
@@ -119,18 +119,14 @@
   m_hyperbolicAngles = angles;
 }
 
-std::string
-CoordinateLsa::toString() const
+void
+CoordinateLsa::print(std::ostream& os) const
 {
-  std::ostringstream os;
-  os << getString();
   os << "      Hyperbolic Radius  : " << m_hyperbolicRadius << "\n";
   int i = 0;
   for (const auto& value : m_hyperbolicAngles) {
     os << "      Hyperbolic Theta " << i++ << " : " << value << "\n";
   }
-
-  return os.str();
 }
 
 std::tuple<bool, std::list<ndn::Name>, std::list<ndn::Name>>
@@ -148,10 +144,4 @@
   return {false, std::list<ndn::Name>{}, std::list<ndn::Name>{}};
 }
 
-std::ostream&
-operator<<(std::ostream& os, const CoordinateLsa& lsa)
-{
-  return os << lsa.toString();
-}
-
 } // namespace nlsr
diff --git a/src/lsa/coordinate-lsa.hpp b/src/lsa/coordinate-lsa.hpp
index c9e3904..3e7f0a1 100644
--- a/src/lsa/coordinate-lsa.hpp
+++ b/src/lsa/coordinate-lsa.hpp
@@ -29,12 +29,22 @@
 
 namespace nlsr {
 
-/*!
-   \brief Data abstraction for CoordinateLsa
-   CoordinateLsa := COORDINATE-LSA-TYPE TLV-LENGTH
-                      Lsa
-                      HyperbolicRadius
-                      HyperbolicAngle+
+/**
+ * @brief Represents an LSA of hyperbolic coordinates of the origin router.
+ *
+ * CoordinateLsa is encoded as:
+ * @code{.abnf}
+ * CoordinateLsa = COORDINATE-LSA-TYPE TLV-LENGTH
+ *                   Lsa
+ *                   HyperbolicRadius
+ *                   1*HyperbolicAngle ; theta
+ *
+ * HyperbolicRadius = HYPERBOLIC-RADIUS-TYPE TLV-LENGTH
+ *                      Double ; IEEE754 double precision
+ *
+ * HyperbolicAngle = HYPERBOLIC-ANGLE-TYPE TLV-LENGTH
+ *                     Double ; IEEE754 double precision
+ * @endcode
  */
 class CoordinateLsa : public Lsa, private boost::equality_comparable<CoordinateLsa>
 {
@@ -45,6 +55,7 @@
                 const ndn::time::system_clock::time_point& timepoint,
                 double radius, std::vector<double> angles);
 
+  explicit
   CoordinateLsa(const ndn::Block& block);
 
   Lsa::Type
@@ -95,12 +106,13 @@
   void
   wireDecode(const ndn::Block& wire);
 
-  std::string
-  toString() const override;
-
   std::tuple<bool, std::list<ndn::Name>, std::list<ndn::Name>>
   update(const std::shared_ptr<Lsa>& lsa) override;
 
+private:
+  void
+  print(std::ostream& os) const override;
+
 private: // non-member operators
   // NOTE: the following "hidden friend" operators are available via
   //       argument-dependent lookup only and must be defined inline.
@@ -122,9 +134,6 @@
 
 NDN_CXX_DECLARE_WIRE_ENCODE_INSTANTIATIONS(CoordinateLsa);
 
-std::ostream&
-operator<<(std::ostream& os, const CoordinateLsa& lsa);
-
 } // namespace nlsr
 
 #endif // NLSR_LSA_COORDINATE_LSA_HPP
diff --git a/src/lsa/lsa.cpp b/src/lsa/lsa.cpp
index 26fdad3..8d5a3dc 100644
--- a/src/lsa/lsa.cpp
+++ b/src/lsa/lsa.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -98,6 +98,19 @@
 }
 
 std::ostream&
+operator<<(std::ostream& os, const Lsa& lsa)
+{
+  auto duration = lsa.m_expirationTimePoint - ndn::time::system_clock::now();
+  os << "    " << lsa.getType() << " LSA:\n"
+     << "      Origin Router      : " << lsa.m_originRouter << "\n"
+     << "      Sequence Number    : " << lsa.m_seqNo << "\n"
+     << "      Expires in         : " << ndn::time::duration_cast<ndn::time::milliseconds>(duration)
+     << "\n";
+  lsa.print(os);
+  return os;
+}
+
+std::ostream&
 operator<<(std::ostream& os, const Lsa::Type& type)
 {
   switch (type) {
@@ -137,17 +150,4 @@
   return is;
 }
 
-std::string
-Lsa::getString() const
-{
-  std::ostringstream os;
-  auto duration = m_expirationTimePoint - ndn::time::system_clock::now();
-  os << "    " << getType() << " LSA:\n"
-     << "      Origin Router      : " << m_originRouter << "\n"
-     << "      Sequence Number    : " << m_seqNo << "\n"
-     << "      Expires in         : " << ndn::time::duration_cast<ndn::time::milliseconds>(duration)
-     << "\n";
-  return os.str();
-}
-
 } // namespace nlsr
diff --git a/src/lsa/lsa.hpp b/src/lsa/lsa.hpp
index 8404355..e482a92 100644
--- a/src/lsa/lsa.hpp
+++ b/src/lsa/lsa.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -31,12 +31,16 @@
 
 namespace nlsr {
 
-/*!
-   \brief Data abstraction for Lsa
-   Lsa := LSA-TYPE TLV-LENGTH
-            Name
-            SequenceNumber
-            ExpirationTimePoint
+/**
+ * @brief Represents a Link State Announcement (LSA).
+ *
+ * The base level LSA is encoded as:
+ * @code{.abnf}
+ * Lsa = LSA-TYPE TLV-LENGTH
+ *         Name ; origin router
+ *         SequenceNumber
+ *         ExpirationTime
+ * @endcode
  */
 class Lsa
 {
@@ -55,11 +59,12 @@
   };
 
 protected:
+  Lsa() = default;
+
   Lsa(const ndn::Name& originRouter, uint64_t seqNo,
       ndn::time::system_clock::time_point expirationTimePoint);
 
-  Lsa() = default;
-
+  explicit
   Lsa(const Lsa& lsa);
 
 public:
@@ -88,12 +93,6 @@
     return m_originRouter;
   }
 
-  ndn::Name
-  getOriginRouterCopy() const
-  {
-    return m_originRouter;
-  }
-
   const ndn::time::system_clock::time_point&
   getExpirationTimePoint() const
   {
@@ -113,11 +112,6 @@
     m_expiringEventId = eid;
   }
 
-  /*! Get data common to all LSA types for printing purposes.
-   */
-  virtual std::string
-  toString() const = 0;
-
   virtual std::tuple<bool, std::list<ndn::Name>, std::list<ndn::Name>>
   update(const std::shared_ptr<Lsa>& lsa) = 0;
 
@@ -132,8 +126,12 @@
   void
   wireDecode(const ndn::Block& wire);
 
-  std::string
-  getString() const;
+private:
+  virtual void
+  print(std::ostream& os) const = 0;
+
+  friend std::ostream&
+  operator<<(std::ostream& os, const Lsa& lsa);
 
 PUBLIC_WITH_TESTS_ELSE_PROTECTED:
   ndn::Name m_originRouter;
diff --git a/src/lsa/name-lsa.cpp b/src/lsa/name-lsa.cpp
index ce743a3..7867b68 100644
--- a/src/lsa/name-lsa.cpp
+++ b/src/lsa/name-lsa.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -112,18 +112,14 @@
   m_npl = npl;
 }
 
-std::string
-NameLsa::toString() const
+void
+NameLsa::print(std::ostream& os) const
 {
-  std::ostringstream os;
-  os << getString();
   os << "      Names:\n";
   int i = 0;
   for (const auto& name : m_npl.getNames()) {
     os << "        Name " << i++ << ": " << name << "\n";
   }
-
-  return os.str();
 }
 
 std::tuple<bool, std::list<ndn::Name>, std::list<ndn::Name>>
@@ -156,10 +152,4 @@
   return {updated, namesToAdd, namesToRemove};
 }
 
-std::ostream&
-operator<<(std::ostream& os, const NameLsa& lsa)
-{
-  return os << lsa.toString();
-}
-
 } // namespace nlsr
diff --git a/src/lsa/name-lsa.hpp b/src/lsa/name-lsa.hpp
index 7c82b90..625bbb7 100644
--- a/src/lsa/name-lsa.hpp
+++ b/src/lsa/name-lsa.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -29,11 +29,15 @@
 
 namespace nlsr {
 
-/*!
-   \brief Data abstraction for NameLsa
-   NameLsa := NAME-LSA-TYPE TLV-LENGTH
-                Lsa
-                Name+
+/**
+ * @brief Represents an LSA of name prefixes announced by the origin router.
+ *
+ * NameLsa is encoded as:
+ * @code{.abnf}
+ * NameLsa = NAME-LSA-TYPE TLV-LENGTH
+ *             Lsa
+ *             1*Name
+ * @endcode
  */
 class NameLsa : public Lsa, private boost::equality_comparable<NameLsa>
 {
@@ -44,6 +48,7 @@
           const ndn::time::system_clock::time_point& timepoint,
           const NamePrefixList& npl);
 
+  explicit
   NameLsa(const ndn::Block& block);
 
   Lsa::Type
@@ -94,12 +99,13 @@
   void
   wireDecode(const ndn::Block& wire);
 
-  std::string
-  toString() const override;
-
   std::tuple<bool, std::list<ndn::Name>, std::list<ndn::Name>>
   update(const std::shared_ptr<Lsa>& lsa) override;
 
+private:
+  void
+  print(std::ostream& os) const override;
+
 private: // non-member operators
   // NOTE: the following "hidden friend" operators are available via
   //       argument-dependent lookup only and must be defined inline.
@@ -117,9 +123,6 @@
 
 NDN_CXX_DECLARE_WIRE_ENCODE_INSTANTIATIONS(NameLsa);
 
-std::ostream&
-operator<<(std::ostream& os, const NameLsa& lsa);
-
 } // namespace nlsr
 
 #endif // NLSR_LSA_NAME_LSA_HPP
