diff --git a/src/conf-file-processor.cpp b/src/conf-file-processor.cpp
index c893e39..18108b7 100644
--- a/src/conf-file-processor.cpp
+++ b/src/conf-file-processor.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  The University of Memphis,
+ * Copyright (c) 2014-2019,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -458,7 +458,24 @@
 
         ndn::FaceUri faceUri;
         if (! faceUri.parse(uriString)) {
-          std::cerr << "parsing failed!" << std::endl;
+          std::cerr << "Parsing failed!" << std::endl;
+          return false;
+        }
+
+        bool failedToCanonize = false;
+        faceUri.canonize([&faceUri] (ndn::FaceUri canonicalUri) {
+                           faceUri = canonicalUri;
+                         },
+                         [&faceUri, &failedToCanonize] (const std::string& reason) {
+                           failedToCanonize = true;
+                           std::cerr << "Could not canonize URI: " << faceUri
+                                     << "because: " << reason << std::endl;
+                         },
+                         m_io,
+                         TIME_ALLOWED_FOR_CANONIZATION);
+        m_io.run();
+
+        if (failedToCanonize) {
           return false;
         }
 
diff --git a/src/conf-file-processor.hpp b/src/conf-file-processor.hpp
index 4218657..0bcb7e8 100644
--- a/src/conf-file-processor.hpp
+++ b/src/conf-file-processor.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  The University of Memphis,
+ * Copyright (c) 2014-2019,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -127,6 +127,8 @@
   std::string m_confFileName;
   /*! m_nlsr The NLSR object to configure upon successful parsing. */
   Nlsr& m_nlsr;
+  /*! m_io For canonization of faceUri. */
+  boost::asio::io_service m_io;
 };
 
 } // namespace nlsr
diff --git a/src/nlsr-runner.cpp b/src/nlsr-runner.cpp
index 57066e9..b5ff594 100644
--- a/src/nlsr-runner.cpp
+++ b/src/nlsr-runner.cpp
@@ -41,15 +41,7 @@
     BOOST_THROW_EXCEPTION(ConfFileError("Error in configuration file processing"));
   }
 
-  // Because URI canonization needs to occur before initialization,
-  // we have to pass initialize as the finally() in neighbor canonization.
-  m_nlsr.canonizeNeighborUris(m_nlsr.getAdjacencyList().getAdjList().begin(),
-                              [this] (std::list<Adjacent>::iterator iterator) {
-                                m_nlsr.canonizeContinuation(iterator, [this] { m_nlsr.initialize(); });
-                              },
-                              [this] {
-                                m_nlsr.initialize();
-                              });
+  m_nlsr.initialize();
 
   try {
     m_nlsr.startEventLoop();
diff --git a/src/nlsr.cpp b/src/nlsr.cpp
index 6045935..214e6ec 100644
--- a/src/nlsr.cpp
+++ b/src/nlsr.cpp
@@ -151,43 +151,6 @@
 }
 
 void
-Nlsr::canonizeContinuation(std::list<Adjacent>::iterator iterator,
-                           std::function<void(void)> finally)
-{
-  canonizeNeighborUris(iterator, [this, finally] (std::list<Adjacent>::iterator iterator) {
-      canonizeContinuation(iterator, finally);
-    },
-    finally);
-}
-
-void
-Nlsr::canonizeNeighborUris(std::list<Adjacent>::iterator currentNeighbor,
-                           std::function<void(std::list<Adjacent>::iterator)> then,
-                           std::function<void(void)> finally)
-{
-  if (currentNeighbor != m_adjacencyList.getAdjList().end()) {
-    ndn::FaceUri uri(currentNeighbor->getFaceUri());
-    uri.canonize([then, currentNeighbor] (ndn::FaceUri canonicalUri) {
-        NLSR_LOG_DEBUG("Canonized URI: " << currentNeighbor->getFaceUri()
-                   << " to: " << canonicalUri);
-        currentNeighbor->setFaceUri(canonicalUri);
-        then(std::next(currentNeighbor));
-      },
-      [then, currentNeighbor] (const std::string& reason) {
-        NLSR_LOG_ERROR("Could not canonize URI: " << currentNeighbor->getFaceUri()
-                   << " because: " << reason);
-        then(std::next(currentNeighbor));
-      },
-      m_nlsrFace.getIoService(),
-      TIME_ALLOWED_FOR_CANONIZATION);
-  }
-  // We have finished canonizing all neighbors, so call finally()
-  else {
-    finally();
-  }
-}
-
-void
 Nlsr::loadCertToPublish(const ndn::security::v2::Certificate& certificate)
 {
   NLSR_LOG_TRACE("Loading cert to publish.");
diff --git a/src/nlsr.hpp b/src/nlsr.hpp
index 476650f..4614ccb 100644
--- a/src/nlsr.hpp
+++ b/src/nlsr.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2018,  The University of Memphis,
+ * Copyright (c) 2014-2019,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -391,26 +391,6 @@
     return m_firstHelloInterval;
   }
 
-  /*! \brief Canonize the URI for this and all proceeding neighbors in a list.
-   *
-   * This function canonizes the URI of the Adjacent object pointed to
-   * by currentNeighbor. It then executes the then callback, providing
-   * the next iterator in the list to the callback. A standard
-   * invocation would be to pass the begin() iterator of NLSR's
-   * adjacency list, and to provide Nlsr::canonizeContinuation as the
-   * callback. Because every URI must be canonical before we begin
-   * operations, the canonize function provides a finally() function
-   * to resume whatever needs to occur.
-   *
-   * \sa Nlsr::canonizeContinuation
-   * \sa Nlsr::initialize
-   * \sa NlsrRunner::run
-   */
-  void
-  canonizeNeighborUris(std::list<Adjacent>::iterator currentNeighbor,
-                       std::function<void(std::list<Adjacent>::iterator)> then,
-                       std::function<void(void)> finally);
-
   StatsCollector&
   getStatsCollector()
   {
@@ -462,17 +442,6 @@
     m_firstHelloInterval = interval;
   }
 
-  /*! \brief Continues canonizing neighbor URIs.
-   *
-   * For testability reasons, we want what each instance of
-   * canonization does after completion to be controllable. The best
-   * way to do this is to control that by simply passing a
-   * continuation function.
-   */
-  void
-  canonizeContinuation(std::list<Adjacent>::iterator iterator,
-                       std::function<void(void)> finally);
-
   void
   scheduleDatasetFetch();
 
