diff --git a/app/src/main/jni/Android.mk b/app/src/main/jni/Android.mk
index 9310d31..6b99cba 100644
--- a/app/src/main/jni/Android.mk
+++ b/app/src/main/jni/Android.mk
@@ -9,4 +9,4 @@
 LOCAL_CFLAGS := -DBOOST_LOG_DYN_LINK=1
 include $(BUILD_SHARED_LIBRARY)
 
-$(call import-module,../packages/nfd/0.6.2-11-gd657d53)
+$(call import-module,../packages/nfd/0.6.5)
diff --git a/app/src/main/jni/nfd-wrapper.cpp b/app/src/main/jni/nfd-wrapper.cpp
index 918efce..64c16f1 100644
--- a/app/src/main/jni/nfd-wrapper.cpp
+++ b/app/src/main/jni/nfd-wrapper.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2015-2018 Regents of the University of California
+ * Copyright (c) 2015-2019 Regents of the University of California
  *
  * This file is part of NFD (Named Data Networking Forwarding Daemon) Android.
  * See AUTHORS.md for complete list of NFD Android authors and contributors.
@@ -70,6 +70,7 @@
           /localhost/nfd  /localhost/nfd/strategy/best-route
           /ndn/broadcast  /localhost/nfd/strategy/multicast
           /ndn/multicast  /localhost/nfd/strategy/multicast
+          /sl             /localhost/nfd/strategy/self-learning
         }
       }
       face_system
@@ -104,40 +105,47 @@
             type any
           }
         }
+        ; localhop_security
+        ; {
+        ;   trust-anchor
+        ;   {
+        ;     type any
+        ;   }
+        ; }
         auto_prefix_propagate
         {
           refresh_interval 300
         }
       }
-  )CONF";
+    )CONF";
 
     std::istringstream input(initialConfig);
     boost::property_tree::read_info(input, m_config);
 
-    std::unique_lock<std::mutex> lock(m_pointerMutex);
     m_nfd.reset(new Nfd(m_config, m_keyChain));
-    m_nrd.reset(new rib::Service(m_config, m_keyChain));
+    m_ribService.reset(new rib::Service(m_config, m_keyChain));
 
     m_nfd->initialize();
-    m_nrd->initialize();
-  }
-
-  ~Runner()
-  {
-    stop();
-    m_io->reset();
   }
 
   void
-  start()
+  run()
   {
     {
       std::unique_lock<std::mutex> lock(m_pointerMutex);
       m_io = &getGlobalIoService();
     }
 
+    setMainIoService(m_io);
+    setRibIoService(m_io);
+
     m_io->run();
     m_io->reset();
+
+    m_ribService.reset();
+    m_nfd.reset();
+
+    m_io = nullptr;
   }
 
   void
@@ -145,19 +153,17 @@
   {
     std::unique_lock<std::mutex> lock(m_pointerMutex);
 
-    m_io->post([this] {
-        m_io->stop();
-        this->m_nrd.reset();
-        this->m_nfd.reset();
-      });
+    if (m_io != nullptr) {
+      m_io->stop();
+    }
   }
 
 private:
   std::mutex m_pointerMutex;
   boost::asio::io_service* m_io;
   ndn::KeyChain m_keyChain;
-  unique_ptr<Nfd> m_nfd; // will use globalIoService
-  unique_ptr<rib::Service> m_nrd; // will use globalIoService
+  unique_ptr<Nfd> m_nfd;
+  unique_ptr<rib::Service> m_ribService;
 
   nfd::ConfigSection m_config;
 };
@@ -227,7 +233,7 @@
         NFD_LOG_INFO("Starting NFD...");
         try {
           nfd::g_runner.reset(new nfd::Runner());
-          nfd::g_runner->start();
+          nfd::g_runner->run();
         }
         catch (const std::exception& e) {
           NFD_LOG_FATAL(e.what());
@@ -260,22 +266,5 @@
 JNIEXPORT jboolean JNICALL
 Java_net_named_1data_nfd_service_NfdService_isNfdRunning(JNIEnv*, jclass)
 {
-    return nfd::g_runner.get() != nullptr;
-}
-
-JNIEXPORT jobject JNICALL
-Java_net_named_1data_nfd_service_NfdService_getNfdLogModules(JNIEnv* env, jclass)
-{
-  jclass jcLinkedList = env->FindClass("java/util/LinkedList");
-  jmethodID jcLinkedListConstructor = env->GetMethodID(jcLinkedList, "<init>", "()V");
-  jmethodID jcLinkedListAdd = env->GetMethodID(jcLinkedList, "add", "(Ljava/lang/Object;)Z");
-
-  jobject jModules = env->NewObject(jcLinkedList, jcLinkedListConstructor);
-
-  for (const auto& module : ndn::util::Logging::getLoggerNames()) {
-    jstring jModule = env->NewStringUTF(module.c_str());
-    env->CallBooleanMethod(jModules, jcLinkedListAdd, jModule);
-  }
-
-  return jModules;
+  return nfd::g_runner.get() != nullptr;
 }
diff --git a/app/src/main/jni/nfd-wrapper.hpp b/app/src/main/jni/nfd-wrapper.hpp
index 69a0ab5..c3e11dc 100644
--- a/app/src/main/jni/nfd-wrapper.hpp
+++ b/app/src/main/jni/nfd-wrapper.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2015-2016 Regents of the University of California
+ * Copyright (c) 2015-2019 Regents of the University of California
  *
  * This file is part of NFD (Named Data Networking Forwarding Daemon) Android.
  * See AUTHORS.md for complete list of NFD Android authors and contributors.
@@ -51,14 +51,6 @@
 JNIEXPORT jboolean JNICALL
 Java_net_named_1data_nfd_service_NfdService_isNfdRunning(JNIEnv*, jclass);
 
-/*
- * Class:     net_named_data_nfd_service_NfdService
- * Method:    getNfdLogModules
- * Signature: ()Ljava/util/List;
- */
-JNIEXPORT jobject JNICALL
-Java_net_named_1data_nfd_service_NfdService_getNfdLogModules(JNIEnv*, jclass);
-
 #ifdef __cplusplus
 }
 #endif
