diff --git a/src/adjacency-list.hpp b/src/adjacency-list.hpp
index 76c9e5f..2325f49 100644
--- a/src/adjacency-list.hpp
+++ b/src/adjacency-list.hpp
@@ -1,7 +1,8 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  University of Memphis,
- *                     Regents of the University of California
+ * Copyright (c) 2014-2015,  The University of Memphis,
+ *                           Regents of the University of California,
+ *                           Arizona Board of Regents.
  *
  * This file is part of NLSR (Named-data Link State Routing).
  * See AUTHORS.md for complete list of NLSR authors and contributors.
@@ -16,10 +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_ADJACENCY_LIST_HPP
 #define NLSR_ADJACENCY_LIST_HPP
 
@@ -34,8 +33,10 @@
 
 class AdjacencyList
 {
-
 public:
+  typedef std::list<Adjacent>::const_iterator const_iterator;
+  typedef std::list<Adjacent>::iterator iterator;
+
   AdjacencyList();
   ~AdjacencyList();
 
@@ -110,8 +111,21 @@
   void
   writeLog();
 
+public:
+  const_iterator
+  begin() const
+  {
+    return m_adjList.begin();
+  }
+
+  const_iterator
+  end() const
+  {
+    return m_adjList.end();
+  }
+
 private:
-  std::list<Adjacent>::iterator
+  iterator
   find(const ndn::Name& adjName);
 
 private:
diff --git a/src/lsa.cpp b/src/lsa.cpp
index 7b96db2..8830951 100644
--- a/src/lsa.cpp
+++ b/src/lsa.cpp
@@ -320,22 +320,30 @@
 void
 AdjLsa::writeLog()
 {
-  _LOG_DEBUG("Adj Lsa: ");
-  _LOG_DEBUG("  Origination Router: " << m_origRouter);
-  _LOG_DEBUG("  Ls Type: " << m_lsType);
-  _LOG_DEBUG("  Ls Seq No: " << m_lsSeqNo);
-  _LOG_DEBUG("  Ls Lifetime: " << m_expirationTimePoint);
-  _LOG_DEBUG("  Adjacents: ");
-  int i = 1;
-  std::list<Adjacent> al = m_adl.getAdjList();
-  for (std::list<Adjacent>::iterator it = al.begin(); it != al.end(); it++)
-  {
-    _LOG_DEBUG("    Adjacent " << i << ": ");;
-    _LOG_DEBUG("      Adjacent Name: " << (*it).getName());
-    _LOG_DEBUG("      Connecting FaceUri: " << (*it).getConnectingFaceUri());
-    _LOG_DEBUG("      Link Cost: " << (*it).getLinkCost());
-  }
-  _LOG_DEBUG("adj_lsa_end");
+  _LOG_DEBUG(*this);
 }
 
-}//namespace nlsr
+std::ostream&
+operator<<(std::ostream& os, const AdjLsa& adjLsa)
+{
+  os << "Adj Lsa:\n"
+     << "  Origination Router: " << adjLsa.getOrigRouter() << "\n"
+     << "  Ls Type: " << adjLsa.getLsType() << "\n"
+     << "  Ls Seq No: " << adjLsa.getLsSeqNo() << "\n"
+     << "  Ls Lifetime: " << adjLsa.getExpirationTimePoint() << "\n"
+     << "  Adjacents: \n";
+
+  int adjacencyIndex = 1;
+
+  for (const Adjacent& adjacency : adjLsa) {
+  os << "    Adjacent " << adjacencyIndex++ << ":\n"
+     << "      Adjacent Name: " << adjacency.getName() << "\n"
+     << "      Connecting FaceUri: " << adjacency.getConnectingFaceUri() << "\n"
+     << "      Link Cost: " << adjacency.getLinkCost() << "\n";
+  }
+  os << "adj_lsa_end";
+
+  return os;
+}
+
+} // namespace nlsr
diff --git a/src/lsa.hpp b/src/lsa.hpp
index dcf5f01..544f01d 100644
--- a/src/lsa.hpp
+++ b/src/lsa.hpp
@@ -165,6 +165,8 @@
 class AdjLsa: public Lsa
 {
 public:
+  typedef AdjacencyList::const_iterator const_iterator;
+
   AdjLsa()
     : Lsa()
     , m_adl()
@@ -215,6 +217,19 @@
   void
   writeLog();
 
+public:
+  const_iterator
+  begin() const
+  {
+    return m_adl.begin();
+  }
+
+  const_iterator
+  end() const
+  {
+    return m_adl.end();
+  }
+
 private:
   uint32_t m_noLink;
   AdjacencyList m_adl;
@@ -285,6 +300,9 @@
   static const std::string TYPE_STRING;
 };
 
+std::ostream&
+operator<<(std::ostream& os, const AdjLsa& adjLsa);
+
 }//namespace nlsr
 
 #endif //NLSR_LSA_HPP
diff --git a/tests/test-lsa.cpp b/tests/test-lsa.cpp
index ca6d05b..57fa403 100644
--- a/tests/test-lsa.cpp
+++ b/tests/test-lsa.cpp
@@ -19,14 +19,19 @@
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  **/
 
+#include "test-common.hpp"
+
+#include "adjacent.hpp"
 #include "lsa.hpp"
 #include "name-prefix-list.hpp"
-#include "adjacent.hpp"
-#include <boost/test/unit_test.hpp>
+
 #include <ndn-cxx/util/time.hpp>
 
+#include <sstream>
+
 namespace nlsr {
 namespace test {
+
 BOOST_AUTO_TEST_SUITE(TestLsa)
 
 BOOST_AUTO_TEST_CASE(NameLsaBasic)
@@ -91,7 +96,51 @@
   BOOST_CHECK_EQUAL(clsa1.getData(), clsa2.getData());
 }
 
+BOOST_AUTO_TEST_CASE(IncrementAdjacentNumber)
+{
+  Adjacent adj1("adjacent1");
+  Adjacent adj2("adjacent2");
+
+  adj1.setStatus(Adjacent::STATUS_ACTIVE);
+  adj2.setStatus(Adjacent::STATUS_ACTIVE);
+
+  AdjacencyList adjList;
+  adjList.insert(adj1);
+  adjList.insert(adj2);
+
+  ndn::time::system_clock::TimePoint testTimePoint = ndn::time::system_clock::now();
+
+  std::ostringstream ss;
+  ss << testTimePoint;
+
+  const std::string TEST_TIME_POINT_STRING = ss.str();
+
+  AdjLsa lsa("router1", AdjLsa::TYPE_STRING, 12, testTimePoint, 1, adjList);
+
+  std::string EXPECTED_OUTPUT =
+    "Adj Lsa:\n"
+    "  Origination Router: /router1\n"
+    "  Ls Type: adjacency\n"
+    "  Ls Seq No: 12\n"
+    "  Ls Lifetime: " + TEST_TIME_POINT_STRING + "\n"
+    "  Adjacents: \n"
+    "    Adjacent 1:\n"
+    "      Adjacent Name: /adjacent1\n"
+    "      Connecting FaceUri: \n"
+    "      Link Cost: 10\n"
+    "    Adjacent 2:\n"
+    "      Adjacent Name: /adjacent2\n"
+    "      Connecting FaceUri: \n"
+    "      Link Cost: 10\n"
+    "adj_lsa_end";
+
+  std::ostringstream os;
+  os << lsa;
+
+  BOOST_CHECK_EQUAL(os.str(), EXPECTED_OUTPUT);
+}
+
 BOOST_AUTO_TEST_SUITE_END()
 
-} //namespace test
-} //namespace nlsr
+} // namespace test
+} // namespace nlsr
