diff --git a/src/lsa/adj-lsa.cpp b/src/lsa/adj-lsa.cpp
index e7dbf95..f3b04da 100644
--- a/src/lsa/adj-lsa.cpp
+++ b/src/lsa/adj-lsa.cpp
@@ -24,7 +24,7 @@
 
 namespace nlsr {
 
-AdjLsa::AdjLsa(const ndn::Name& originRouter, uint32_t seqNo,
+AdjLsa::AdjLsa(const ndn::Name& originRouter, uint64_t seqNo,
                const ndn::time::system_clock::TimePoint& timepoint,
                uint32_t noLink, AdjacencyList& adl)
   : Lsa(originRouter, seqNo, timepoint)
@@ -72,7 +72,7 @@
 const ndn::Block&
 AdjLsa::wireEncode() const
 {
-  if (m_wire.hasWire() && m_baseWire.hasWire()) {
+  if (m_wire.hasWire()) {
     return m_wire;
   }
 
@@ -99,7 +99,7 @@
 
   m_wire.parse();
 
-  ndn::Block::element_const_iterator val = m_wire.elements_begin();
+  auto val = m_wire.elements_begin();
 
   if (val != m_wire.elements_end() && val->type() == ndn::tlv::nlsr::Lsa) {
     Lsa::wireDecode(*val);
@@ -123,22 +123,29 @@
   m_adl = adl;
 }
 
-std::ostream&
-operator<<(std::ostream& os, const AdjLsa& lsa)
+std::string
+AdjLsa::toString() const
 {
-  os << lsa.toString();
-  os << "      Adjacents:\n";
+  std::ostringstream os;
+  os << Lsa::toString();
+  os << "      Adjacent(s):\n";
 
   int adjacencyIndex = 0;
 
-  for (const Adjacent& adjacency : lsa.getAdl()) {
-  os << "        Adjacent " << adjacencyIndex++
-     << ": (name=" << adjacency.getName()
-     << ", uri="   << adjacency.getFaceUri()
-     << ", cost="  << adjacency.getLinkCost() << ")\n";
+  for (const auto& adjacency : m_adl) {
+    os << "        Adjacent " << adjacencyIndex++
+       << ": (name=" << adjacency.getName()
+       << ", uri="   << adjacency.getFaceUri()
+       << ", cost="  << adjacency.getLinkCost() << ")\n";
   }
 
-  return os;
+  return os.str();
+}
+
+std::ostream&
+operator<<(std::ostream& os, const AdjLsa& lsa)
+{
+  return os << lsa.toString();
 }
 
 } // namespace nlsr
