diff --git a/app/src/main/jni/Android.mk b/app/src/main/jni/Android.mk
index bee4601..3eed95a 100644
--- a/app/src/main/jni/Android.mk
+++ b/app/src/main/jni/Android.mk
@@ -4,7 +4,7 @@
 include $(CLEAR_VARS)
 LOCAL_MODULE := nfd-wrapper
 LOCAL_SRC_FILES := nfd-wrapper.cpp
-LOCAL_SHARED_LIBRARIES := nfd-daemon ndn-cxx boost_system_shared
+LOCAL_SHARED_LIBRARIES := nfd-daemon ndn-cxx boost_system_shared boost_thread_shared
 LOCAL_LDLIBS := -llog
 include $(BUILD_SHARED_LIBRARY)
 
diff --git a/app/src/main/jni/NFD b/app/src/main/jni/NFD
index 6f570de..90c20fa 160000
--- a/app/src/main/jni/NFD
+++ b/app/src/main/jni/NFD
@@ -1 +1 @@
-Subproject commit 6f570de8d7fdf36703cab0d1bf61c5ccff3b0143
+Subproject commit 90c20face84003b5a646f130e35bd04d60d70fdb
diff --git a/app/src/main/jni/nfd-android/version.hpp b/app/src/main/jni/nfd-android/version.hpp
index afa7ae1..c945a45 100644
--- a/app/src/main/jni/nfd-android/version.hpp
+++ b/app/src/main/jni/nfd-android/version.hpp
@@ -60,7 +60,7 @@
  *
  * Example, 0.1.0-rc1-1-g5c86570
  */
-#define NFD_VERSION_BUILD_STRING "0.3.0-8-g6f570de"
+#define NFD_VERSION_BUILD_STRING "0.3.0-18-g9a36c76"
 
 /// MAJOR version
 #define NFD_VERSION_MAJOR 0
diff --git a/app/src/main/jni/nfd-wrapper.cpp b/app/src/main/jni/nfd-wrapper.cpp
index 8b8dafc..5142965 100644
--- a/app/src/main/jni/nfd-wrapper.cpp
+++ b/app/src/main/jni/nfd-wrapper.cpp
@@ -25,17 +25,35 @@
 #include "core/global-io.hpp"
 #include "core/config-file.hpp"
 #include "core/logger.hpp"
+#include "core/privilege-helper.hpp"
 
+#include <stdlib.h>
 #include <boost/property_tree/info_parser.hpp>
+#include <boost/thread.hpp>
+#include <mutex>
 
 NFD_LOG_INIT("NfdWrapper");
 
 namespace nfd {
 
+
+// A little bit of cheating to make sure NFD can be properly restarted
+
+namespace scheduler {
+// defined in scheduler.cpp
+void
+resetGlobalScheduler();
+} // namespace scheduler
+
+void
+resetGlobalIoService();
+
+
 class Runner
 {
 public:
   Runner()
+    : m_io(nullptr)
   {
     std::string initialConfig =
       "general\n"
@@ -44,7 +62,13 @@
       "\n"
       "log\n"
       "{\n"
-      "  default_level INFO\n"
+      "  default_level ALL\n"
+      "  NameTree INFO\n"
+      "  BestRouteStrategy2 INFO\n"
+      "  InternalFace INFO\n"
+      "  Forwarder INFO\n"
+      "  ContentStore INFO\n"
+      "  DeadNonceList INFO\n"
       "}\n"
       "tables\n"
       "{\n"
@@ -98,7 +122,7 @@
       "      type any\n"
       "    }\n"
       "  }\n"
-      "}\n"
+      "\n"
       "  remote_register\n"
       "  {\n"
       "    cost 15\n"
@@ -106,29 +130,52 @@
       "    retry 0\n"
       "    refresh_interval 300\n"
       "  }\n"
+      "}\n"
       "\n";
 
     std::istringstream input(initialConfig);
     boost::property_tree::read_info(input, m_config);
 
-    m_nfd.reset(new Nfd(initialConfig, m_keyChain));
-    m_nrd.reset(new rib::Nrd(initialConfig, m_keyChain));
+    std::unique_lock<std::mutex> lock(m_pointerMutex);
+    m_nfd.reset(new Nfd(m_config, m_keyChain));
+    m_nrd.reset(new rib::Nrd(m_config, m_keyChain));
 
     m_nfd->initialize();
     m_nrd->initialize();
   }
 
-  void
-  run()
+  ~Runner()
   {
+    stop();
+    m_io->reset();
+  }
+
+  void
+  start()
+  {
+    {
+      std::unique_lock<std::mutex> lock(m_pointerMutex);
+      m_io = &getGlobalIoService();
+    }
+    m_io->run();
+    m_io->reset();
   }
 
   void
   stop()
   {
+    std::unique_lock<std::mutex> lock(m_pointerMutex);
+
+    m_io->post([this] {
+        m_io->stop();
+        this->m_nrd.reset();
+        this->m_nfd.reset();
+      });
   }
 
 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::Nrd> m_nrd; // will use globalIoService
@@ -137,35 +184,50 @@
 };
 
 static unique_ptr<Runner> g_runner;
+static boost::thread g_thread;
 
 } // namespace nfd
 
 JNIEXPORT void JNICALL
-Java_net_named_1data_nfd_wrappers_NfdWrapper_startNfd(JNIEnv *, jclass)
+Java_net_named_1data_nfd_wrappers_NfdWrapper_startNfd(JNIEnv* env, jclass, jstring homePathJ)
 {
   if (nfd::g_runner.get() == nullptr) {
-    try {
-      nfd::g_runner.reset(new nfd::Runner());
-      nfd::g_runner.reset();
-    }
-    catch (const std::exception& e) {
-      NFD_LOG_FATAL(e.what());
-    }
-  }
+    // set/update HOME environment variable
+    const char* homePath = env->GetStringUTFChars(homePathJ, nullptr);
+    ::setenv("HOME", homePath, true);
+    env->ReleaseStringUTFChars(homePathJ, homePath);
+    NFD_LOG_INFO("Use [" << homePath << "] as a security storage");
 
-  if (nfd::g_runner.get() == nullptr) {
-    return;
-  }
+    nfd::g_thread = boost::thread([] {
+        NFD_LOG_INFO("Starting NFD...");
+        try {
+          nfd::g_runner.reset(new nfd::Runner());
+          nfd::g_runner->start();
+        }
+        catch (const std::exception& e) {
+          NFD_LOG_FATAL(e.what());
+        }
+        catch (const nfd::PrivilegeHelper::Error& e) {
+          NFD_LOG_FATAL("PrivilegeHelper: " << e.what());
+        }
+        catch (...) {
+          NFD_LOG_FATAL("Unknown fatal error");
+        }
 
-  nfd::g_runner->run();
+        nfd::g_runner.reset();
+        nfd::scheduler::resetGlobalScheduler();
+        nfd::resetGlobalIoService();
+        NFD_LOG_INFO("NFD stopped");
+      });
+  }
 }
 
 JNIEXPORT void JNICALL
-Java_net_named_1data_nfd_wrappers_NfdWrapper_stopNfd(JNIEnv *, jclass)
+Java_net_named_1data_nfd_wrappers_NfdWrapper_stopNfd(JNIEnv*, jclass)
 {
-  if (nfd::g_runner.get() == nullptr) {
-    return;
+  if (nfd::g_runner.get() != nullptr) {
+    NFD_LOG_INFO("Stopping NFD...");
+    nfd::g_runner->stop();
+    // do not block anything
   }
-  nfd::g_runner->stop();
-  nfd::g_runner.reset();
 }
diff --git a/app/src/main/jni/nfd-wrapper.hpp b/app/src/main/jni/nfd-wrapper.hpp
index f709a21..2b9523e 100644
--- a/app/src/main/jni/nfd-wrapper.hpp
+++ b/app/src/main/jni/nfd-wrapper.hpp
@@ -31,16 +31,16 @@
  * Method:    startNfd
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_net_named_1data_nfd_wrappers_NfdWrapper_startNfd
-  (JNIEnv *, jclass);
+JNIEXPORT void JNICALL
+Java_net_named_1data_nfd_wrappers_NfdWrapper_startNfd(JNIEnv*, jclass, jstring);
 
 /*
  * Class:     net_named_data_nfd_wrappers_NfdWrapper
  * Method:    stopNfd
  * Signature: ()V
  */
-JNIEXPORT void JNICALL Java_net_named_1data_nfd_wrappers_NfdWrapper_stopNfd
-  (JNIEnv *, jclass);
+JNIEXPORT void JNICALL
+Java_net_named_1data_nfd_wrappers_NfdWrapper_stopNfd(JNIEnv*, jclass);
 
 #ifdef __cplusplus
 }
diff --git a/app/src/main/jni/nfd.mk b/app/src/main/jni/nfd.mk
index 2cacc03..ad7d0f2 100644
--- a/app/src/main/jni/nfd.mk
+++ b/app/src/main/jni/nfd.mk
@@ -1,7 +1,7 @@
 LOCAL_PATH := $(call my-dir)
 LOCAL_PATH_SAVED := $(LOCAL_PATH)
 
-NFD_BOOST_LIBS = system filesystem chrono program_options random
+NFD_BOOST_LIBS = system filesystem chrono program_options random thread
 
 # core
 include $(CLEAR_VARS)
