diff --git a/src/nlsr-runner.cpp b/src/nlsr-runner.cpp
index 827593a..84ec812 100644
--- a/src/nlsr-runner.cpp
+++ b/src/nlsr-runner.cpp
@@ -57,15 +57,18 @@
     m_nlsr.daemonize();
   }
 
-  /**
-   * This really should be part of Nlsr::initialize, but because URI
-   * canonization happens asynchronously and we need to ensure that it
-   * happens before we proceed, the canonization function has to be
-   * the one to call initialize.
-   */
+  /** 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);
+                                m_nlsr.canonizeContinuation(iterator, [this] {
+                                    m_nlsr.initialize();
+                                  });
+                              },
+                              [this] {
+                                m_nlsr.initialize();
                               });
   try {
     m_nlsr.startEventLoop();
diff --git a/src/nlsr.cpp b/src/nlsr.cpp
index 02915e4..a54f737 100644
--- a/src/nlsr.cpp
+++ b/src/nlsr.cpp
@@ -192,16 +192,19 @@
 }
 
 void
-Nlsr::canonizeContinuation(std::list<Adjacent>::iterator iterator)
+Nlsr::canonizeContinuation(std::list<Adjacent>::iterator iterator,
+                           std::function<void(void)> finally)
 {
-  canonizeNeighborUris(iterator, [this] (std::list<Adjacent>::iterator iterator) {
-      canonizeContinuation(iterator);
-  });
+  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(std::list<Adjacent>::iterator)> then,
+                           std::function<void(void)> finally)
 {
   if (currentNeighbor != m_adjacencyList.getAdjList().end()) {
     ndn::util::FaceUri uri(currentNeighbor->getFaceUri());
@@ -219,9 +222,9 @@
       m_nlsrFace.getIoService(),
       TIME_ALLOWED_FOR_CANONIZATION);
   }
-  // We have finished canonizing all neighbors, so initialize NLSR.
+  // We have finished canonizing all neighbors, so call finally()
   else {
-    initialize();
+    finally();
   }
 }
 
diff --git a/src/nlsr.hpp b/src/nlsr.hpp
index 89410e9..c3ed420 100644
--- a/src/nlsr.hpp
+++ b/src/nlsr.hpp
@@ -378,7 +378,8 @@
    * 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 must call initialize itself.
+   * operations, the canonize function provides a finally() function
+   * to resume whatever needs to occur.
    *
    * \sa Nlsr::canonizeContinuation
    * \sa Nlsr::initialize
@@ -386,7 +387,8 @@
    */
   void
   canonizeNeighborUris(std::list<Adjacent>::iterator currentNeighbor,
-                       std::function<void(std::list<Adjacent>::iterator)> then);
+                       std::function<void(std::list<Adjacent>::iterator)> then,
+                       std::function<void(void)> finally);
 
   StatsCollector&
   getStatsCollector()
@@ -449,7 +451,8 @@
    * continuation function.
    */
   void
-  canonizeContinuation(std::list<Adjacent>::iterator iterator);
+  canonizeContinuation(std::list<Adjacent>::iterator iterator,
+                       std::function<void(void)> finally);
 
   void
   scheduleDatasetFetch();
