diff --git a/src/route/map.cpp b/src/route/map.cpp
index a97be11..544976e 100644
--- a/src/route/map.cpp
+++ b/src/route/map.cpp
@@ -16,19 +16,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/>.
- *
- * \author A K M Mahmudul Hoque <ahoque1@memphis.edu>
- *
  **/
-#include <iostream>
-#include <list>
 
+#include "map.hpp"
 #include "nlsr.hpp"
 #include "adjacent.hpp"
 #include "lsa.hpp"
 #include "lsdb.hpp"
-#include "map.hpp"
+
 #include "logger.hpp"
+
+#include <iostream>
+#include <list>
+
 namespace nlsr {
 
 INIT_LOGGER("Map");
@@ -98,29 +98,6 @@
 }
 
 void
-Map::createFromAdjLsdb(Nlsr& pnlsr)
-{
-  std::list<AdjLsa> adjLsdb = pnlsr.getLsdb().getAdjLsdb();
-  for (std::list<AdjLsa>::iterator it = adjLsdb.begin();
-       it != adjLsdb.end() ; it++) {
-    addEntry((*it).getOrigRouter());
-    std::list<Adjacent> adl = (*it).getAdl().getAdjList();
-    for (std::list<Adjacent>::iterator itAdl = adl.begin();
-         itAdl != adl.end() ; itAdl++) {
-      addEntry((*itAdl).getName());
-    }
-  }
-}
-
-void
-Map::createFromCoordinateLsdb(Nlsr& nlsr)
-{
-  for (CoordinateLsa lsa : nlsr.getLsdb().getCoordinateLsdb()) {
-    addEntry(lsa.getOrigRouter());
-  }
-}
-
-void
 Map::reset()
 {
   m_table.clear();
diff --git a/src/route/map.hpp b/src/route/map.hpp
index 45e6b96..262fe52 100644
--- a/src/route/map.hpp
+++ b/src/route/map.hpp
@@ -16,21 +16,18 @@
  *
  * 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_HPP
 #define NLSR_MAP_HPP
 
+#include "common.hpp"
+#include "map-entry.hpp"
+
 #include <iostream>
 #include <list>
 #include <boost/cstdint.hpp>
 
-#include <ndn-cxx/common.hpp>
-
-#include "map-entry.hpp"
-
 namespace nlsr {
 
 class Nlsr;
@@ -52,11 +49,36 @@
   void
   addEntry(const ndn::Name& rtrName);
 
-  void
-  createFromAdjLsdb(Nlsr& pnlsr);
+  /*! Populates the Map with AdjacencyLsas.
 
+    \note IteratorType must an iterator type, and begin to end must represent a valid range.
+  */
+  template<typename IteratorType>
   void
-  createFromCoordinateLsdb(Nlsr& nlsr);
+  createFromAdjLsdb(IteratorType begin, IteratorType end)
+  {
+    BOOST_STATIC_ASSERT_MSG(is_iterator<IteratorType>::value, "IteratorType must be an iterator!");
+    for (auto lsa = begin; lsa != end; lsa++) {
+      addEntry(lsa->getOrigRouter());
+      for (const auto& adjacent : lsa->getAdl().getAdjList()) {
+        addEntry(adjacent.getName());
+      }
+    }
+  }
+
+  /*! Populates the Map with CoordinateLsas.
+
+    \note IteratorType must an iterator type, and begin to end must represent a valid range.
+  */
+  template<typename IteratorType>
+  void
+  createFromCoordinateLsdb(IteratorType begin, IteratorType end)
+  {
+    BOOST_STATIC_ASSERT_MSG(is_iterator<IteratorType>::value, "IteratorType must be an iterator!");
+    for (auto lsa = begin; lsa != end; lsa++) {
+      addEntry(lsa->getOrigRouter());
+    }
+  }
 
   const ndn::Name
   getRouterNameByMappingNo(int32_t mn);
@@ -91,4 +113,5 @@
 };
 
 } // namespace nlsr
-#endif //NLSR_MAP_HPP
+
+#endif // NLSR_MAP_HPP
diff --git a/src/route/routing-table.cpp b/src/route/routing-table.cpp
index b1e02dc..708e3dd 100644
--- a/src/route/routing-table.cpp
+++ b/src/route/routing-table.cpp
@@ -16,13 +16,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/>.
- *
- * \author A K M Mahmudul Hoque <ahoque1@memphis.edu>
- *
  **/
-#include <iostream>
-#include <string>
-#include <list>
 
 #include "routing-table.hpp"
 #include "nlsr.hpp"
@@ -33,6 +27,10 @@
 #include "name-prefix-table.hpp"
 #include "logger.hpp"
 
+#include <iostream>
+#include <string>
+#include <list>
+
 namespace nlsr {
 
 INIT_LOGGER("RoutingTable");
@@ -123,7 +121,7 @@
   _LOG_DEBUG("RoutingTable::calculateLsRoutingTable Called");
 
   Map map;
-  map.createFromAdjLsdb(nlsr);
+  map.createFromAdjLsdb(nlsr.getLsdb().getAdjLsdb().begin(), nlsr.getLsdb().getAdjLsdb().end());
   map.writeLog();
 
   size_t nRouters = map.getMapSize();
@@ -137,7 +135,8 @@
 RoutingTable::calculateHypRoutingTable(Nlsr& nlsr)
 {
   Map map;
-  map.createFromCoordinateLsdb(nlsr);
+  map.createFromCoordinateLsdb(nlsr.getLsdb().getCoordinateLsdb().begin(),
+                               nlsr.getLsdb().getCoordinateLsdb().end());
   map.writeLog();
 
   size_t nRouters = map.getMapSize();
@@ -153,7 +152,7 @@
 RoutingTable::calculateHypDryRoutingTable(Nlsr& nlsr)
 {
   Map map;
-  map.createFromAdjLsdb(nlsr);
+  map.createFromAdjLsdb(nlsr.getLsdb().getAdjLsdb().begin(), nlsr.getLsdb().getAdjLsdb().end());
   map.writeLog();
 
   size_t nRouters = map.getMapSize();
