diff --git a/app/src/main/jni/Android.mk b/app/src/main/jni/Android.mk
index 7bae03f..bee4601 100644
--- a/app/src/main/jni/Android.mk
+++ b/app/src/main/jni/Android.mk
@@ -3,10 +3,12 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := nfd-wrapper
-LOCAL_SRC_FILES := android-logger-streambuf.cpp nfd-wrapper.cpp
+LOCAL_SRC_FILES := nfd-wrapper.cpp
+LOCAL_SHARED_LIBRARIES := nfd-daemon ndn-cxx boost_system_shared
 LOCAL_LDLIBS := -llog
-LOCAL_SHARED_LIBRARIES := nfd-daemon
 include $(BUILD_SHARED_LIBRARY)
 
 include $(LOCAL_PATH_SAVED)/ndn-cxx.mk
 include $(LOCAL_PATH_SAVED)/nfd.mk
+
+$(call import-module,boost/1.57.0)
diff --git a/app/src/main/jni/NFD b/app/src/main/jni/NFD
index e46279d..6f570de 160000
--- a/app/src/main/jni/NFD
+++ b/app/src/main/jni/NFD
@@ -1 +1 @@
-Subproject commit e46279dc8382316fb933697346b66f22cad1ee5e
+Subproject commit 6f570de8d7fdf36703cab0d1bf61c5ccff3b0143
diff --git a/app/src/main/jni/android-logger-streambuf.cpp b/app/src/main/jni/android-logger-streambuf.cpp
deleted file mode 100644
index f693501..0000000
--- a/app/src/main/jni/android-logger-streambuf.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2015,  Regents of the University of California,
- *                           Arizona Board of Regents,
- *                           Colorado State University,
- *                           University Pierre & Marie Curie, Sorbonne University,
- *                           Washington University in St. Louis,
- *                           Beijing Institute of Technology,
- *                           The University of Memphis.
- *
- * This file is part of NFD (Named Data Networking Forwarding Daemon).
- * See AUTHORS.md for complete list of NFD authors and contributors.
- *
- * NFD is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE.  See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "android-logger-streambuf.hpp"
-
-#include <android/log.h>
-
-namespace nfd_android {
-
-AndroidLoggerStreambuf::AndroidLoggerStreambuf()
-{
-  this->setp(buffer, buffer + MAX_BUF_SIZE - 1);
-}
-
-int
-AndroidLoggerStreambuf::overflow(int c)
-{
-  if (c == traits_type::eof()) {
-    *this->pptr() = traits_type::to_char_type(c);
-    this->sbumpc();
-  }
-  return this->sync()? traits_type::eof(): traits_type::not_eof(c);
-}
-
-int
-AndroidLoggerStreambuf::sync()
-{
-  int rc = 0;
-  if (this->pbase() != this->pptr()) {
-    __android_log_print(ANDROID_LOG_INFO, "Native", "%s",
-                        std::string(this->pbase(), this->pptr() - this->pbase()).c_str());
-    rc = 0;
-    this->setp(buffer, buffer + MAX_BUF_SIZE - 1);
-  }
-  return rc;
-}
-
-} // namespace nfd_android
diff --git a/app/src/main/jni/ndn-cxx b/app/src/main/jni/ndn-cxx
index cf3a667..ea71967 160000
--- a/app/src/main/jni/ndn-cxx
+++ b/app/src/main/jni/ndn-cxx
@@ -1 +1 @@
-Subproject commit cf3a667634ef93c47c0ef3056a01c47112e49427
+Subproject commit ea71967f812be196a43c7704bf7fcf053f8533a7
diff --git a/app/src/main/jni/ndn-cxx.mk b/app/src/main/jni/ndn-cxx.mk
index 1e93bdb..0419abc 100644
--- a/app/src/main/jni/ndn-cxx.mk
+++ b/app/src/main/jni/ndn-cxx.mk
@@ -6,7 +6,86 @@
 NDN_CXX_BOOST_LIBS = system filesystem date_time iostreams program_options chrono random
 LOCAL_SHARED_LIBRARIES := cryptopp $(addsuffix _shared,$(addprefix boost_,$(NDN_CXX_BOOST_LIBS)))
 LOCAL_STATIC_LIBRARIES := sqlite3 boost_regex_static
-NDN_CXX_SRC_FILES := name.cpp util/dns.cpp util/time-unit-test-clock.cpp util/segment-fetcher.cpp util/config-file.cpp util/in-memory-storage.cpp util/in-memory-storage-lfu.cpp util/in-memory-storage-fifo.cpp util/ethernet.cpp util/crypto.cpp util/regex/regex-top-matcher.cpp util/signal-scoped-connection.cpp util/dummy-client-face.cpp util/scheduler.cpp util/indented-stream.cpp util/signal-connection.cpp util/in-memory-storage-persistent.cpp util/digest.cpp util/in-memory-storage-lru.cpp util/in-memory-storage-entry.cpp util/time.cpp util/random.cpp util/face-uri.cpp interest-filter.cpp signature.cpp transport/tcp-transport.cpp transport/unix-transport.cpp management/nfd-face-event-notification.cpp management/nfd-control-command.cpp management/nfd-command-options.cpp management/nfd-face-status.cpp management/nfd-control-response.cpp management/nfd-rib-entry.cpp management/nfd-controller.cpp management/nfd-forwarder-status.cpp management/nfd-channel-status.cpp management/nfd-fib-entry.cpp management/nfd-strategy-choice.cpp management/nfd-face-query-filter.cpp management/nfd-control-parameters.cpp exclude.cpp name-component.cpp face.cpp key-locator.cpp data.cpp interest.cpp selectors.cpp meta-info.cpp signature-info.cpp encoding/nfd-constants.cpp encoding/oid.cpp encoding/cryptopp/asn_ext.cpp encoding/block.cpp encoding/buffer.cpp security/sec-public-info-sqlite3.cpp security/signature-sha256-with-rsa.cpp security/public-key.cpp security/certificate-cache-ttl.cpp security/sec-rule-specific.cpp security/sec-tpm-file.cpp security/digest-sha256.cpp security/sec-public-info.cpp security/certificate.cpp security/identity-certificate.cpp security/certificate-subject-description.cpp security/certificate-extension.cpp security/sec-tpm.cpp security/validator.cpp security/sec-rule-relative.cpp security/key-params.cpp security/secured-bag.cpp security/key-chain.cpp security/signature-sha256-with-ecdsa.cpp security/validator-config.cpp security/validator-regex.cpp
+NDN_CXX_SRC_FILES := \
+    data.cpp \
+    encoding/block.cpp \
+    encoding/buffer.cpp \
+    encoding/cryptopp/asn_ext.cpp \
+    encoding/encoder.cpp \
+    encoding/estimator.cpp \
+    encoding/nfd-constants.cpp \
+    encoding/oid.cpp \
+    exclude.cpp \
+    face.cpp \
+    interest-filter.cpp \
+    interest.cpp \
+    key-locator.cpp \
+    management/nfd-channel-status.cpp \
+    management/nfd-command-options.cpp \
+    management/nfd-control-command.cpp \
+    management/nfd-control-parameters.cpp \
+    management/nfd-control-response.cpp \
+    management/nfd-controller.cpp \
+    management/nfd-face-event-notification.cpp \
+    management/nfd-face-query-filter.cpp \
+    management/nfd-face-status.cpp \
+    management/nfd-fib-entry.cpp \
+    management/nfd-forwarder-status.cpp \
+    management/nfd-rib-entry.cpp \
+    management/nfd-strategy-choice.cpp \
+    meta-info.cpp \
+    name-component.cpp \
+    name.cpp \
+    security/certificate-cache-ttl.cpp \
+    security/certificate-extension.cpp \
+    security/certificate-subject-description.cpp \
+    security/certificate.cpp \
+    security/digest-sha256.cpp \
+    security/identity-certificate.cpp \
+    security/key-chain.cpp \
+    security/key-params.cpp \
+    security/public-key.cpp \
+    security/sec-public-info-sqlite3.cpp \
+    security/sec-public-info.cpp \
+    security/sec-rule-relative.cpp \
+    security/sec-rule-specific.cpp \
+    security/sec-tpm-file.cpp \
+    security/sec-tpm.cpp \
+    security/secured-bag.cpp \
+    security/signature-sha256-with-ecdsa.cpp \
+    security/signature-sha256-with-rsa.cpp \
+    security/validator-config.cpp \
+    security/validator-regex.cpp \
+    security/validator.cpp \
+    selectors.cpp \
+    signature-info.cpp \
+    signature.cpp \
+    transport/tcp-transport.cpp \
+    transport/unix-transport.cpp \
+    util/config-file.cpp \
+    util/crypto.cpp \
+    util/digest.cpp \
+    util/dns.cpp \
+    util/dummy-client-face.cpp \
+    util/ethernet.cpp \
+    util/face-uri.cpp \
+    util/in-memory-storage-entry.cpp \
+    util/in-memory-storage-fifo.cpp \
+    util/in-memory-storage-lfu.cpp \
+    util/in-memory-storage-lru.cpp \
+    util/in-memory-storage-persistent.cpp \
+    util/in-memory-storage.cpp \
+    util/indented-stream.cpp \
+    util/network-monitor.cpp \
+    util/random.cpp \
+    util/regex/regex-top-matcher.cpp \
+    util/scheduler-scoped-event-id.cpp \
+    util/scheduler.cpp \
+    util/segment-fetcher.cpp \
+    util/signal-connection.cpp \
+    util/signal-scoped-connection.cpp \
+    util/time-unit-test-clock.cpp \
+    util/time.cpp
 LOCAL_SRC_FILES := $(addprefix ndn-cxx/src/,$(NDN_CXX_SRC_FILES))
 LOCAL_CPPFLAGS := -I$(LOCAL_PATH)/ndn-cxx/src -I$(LOCAL_PATH)/ndn-cxx-android
 LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/ndn-cxx-android
diff --git a/app/src/main/jni/nfd-android/config.hpp b/app/src/main/jni/nfd-android/config.hpp
index 78b3f8b..f26c0f6 100644
--- a/app/src/main/jni/nfd-android/config.hpp
+++ b/app/src/main/jni/nfd-android/config.hpp
@@ -8,5 +8,6 @@
 #define HAVE_LIBRESOLV
 /*#undef HAVE_UNIX_SOCKETS*/
 #define DEFAULT_CONFIG_FILE "./nfd.conf"
+#define HAVE_CUSTOM_LOGGER 1
 
 #endif /* W_CONFIG_HPP_WAF */
diff --git a/app/src/main/jni/nfd-android/custom-logger-factory.cpp b/app/src/main/jni/nfd-android/custom-logger-factory.cpp
new file mode 100644
index 0000000..f84a663
--- /dev/null
+++ b/app/src/main/jni/nfd-android/custom-logger-factory.cpp
@@ -0,0 +1,213 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014  Regents of the University of California,
+ *                     Arizona Board of Regents,
+ *                     Colorado State University,
+ *                     University Pierre & Marie Curie, Sorbonne University,
+ *                     Washington University in St. Louis,
+ *                     Beijing Institute of Technology
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+#include "custom-logger-factory.hpp"
+
+namespace nfd {
+
+NFD_LOG_INIT("LoggerFactory");
+
+LoggerFactory&
+LoggerFactory::getInstance()
+{
+  static LoggerFactory globalLoggerFactory;
+
+  return globalLoggerFactory;
+}
+
+LoggerFactory::LoggerFactory()
+  : m_defaultLevel(LOG_INFO)
+{
+  m_levelNames["NONE"] = LOG_NONE;
+  m_levelNames["ERROR"] = LOG_ERROR;
+  m_levelNames["WARN"] = LOG_WARN;
+  m_levelNames["INFO"] = LOG_INFO;
+  m_levelNames["DEBUG"] = LOG_DEBUG;
+  m_levelNames["TRACE"] = LOG_TRACE;
+  m_levelNames["ALL"] = LOG_ALL;
+}
+
+void
+LoggerFactory::setConfigFile(ConfigFile& config)
+{
+  config.addSectionHandler("log", bind(&LoggerFactory::onConfig, this, _1, _2, _3));
+}
+
+LogLevel
+LoggerFactory::parseLevel(const std::string& level)
+{
+  std::string upperLevel = level;
+  boost::to_upper(upperLevel);
+
+  // std::cerr << "parsing level: " << upperLevel << std::endl;;
+  // std::cerr << "# levels: " << m_levelNames.size() << std::endl;
+  // std::cerr << m_levelNames.begin()->first << std::endl;
+
+  LevelMap::const_iterator levelIt = m_levelNames.find(upperLevel);
+  if (levelIt != m_levelNames.end())
+    {
+      return levelIt->second;
+    }
+  try
+    {
+      uint32_t levelNo = boost::lexical_cast<uint32_t>(level);
+
+      if ((boost::lexical_cast<uint32_t>(LOG_NONE) <= levelNo &&
+           levelNo <= boost::lexical_cast<uint32_t>(LOG_TRACE)) ||
+          levelNo == LOG_ALL)
+        {
+          return static_cast<LogLevel>(levelNo);
+        }
+    }
+  catch (const boost::bad_lexical_cast& error)
+    {
+    }
+  throw LoggerFactory::Error("Unsupported logging level \"" +
+                             level + "\"");
+}
+
+LogLevel
+LoggerFactory::extractLevel(const ConfigSection& item, const std::string& key)
+{
+  std::string levelString;
+  try
+    {
+      levelString = item.get_value<std::string>();
+    }
+  catch (const boost::property_tree::ptree_error& error)
+    {
+    }
+
+  if (levelString.empty())
+    {
+      throw LoggerFactory::Error("No logging level found for option \"" + key + "\"");
+    }
+
+  return parseLevel(levelString);
+}
+
+void
+LoggerFactory::onConfig(const ConfigSection& section,
+                        bool isDryRun,
+                        const std::string& filename)
+{
+// log
+// {
+//   ; default_level specifies the logging level for modules
+//   ; that are not explicitly named. All debugging levels
+//   ; listed above the selected value are enabled.
+//
+//   default_level INFO
+//
+//   ; You may also override the default for specific modules:
+//
+//   FibManager DEBUG
+//   Forwarder WARN
+// }
+
+  if (!isDryRun)
+    {
+      ConfigSection::const_assoc_iterator item = section.find("default_level");
+      if (item != section.not_found())
+        {
+          LogLevel level = extractLevel(item->second, "default_level");
+          setDefaultLevel(level);
+        }
+      else
+        {
+          setDefaultLevel(LOG_INFO);
+        }
+    }
+
+  for (ConfigSection::const_iterator item = section.begin();
+       item != section.end();
+       ++item)
+    {
+      LogLevel level = extractLevel(item->second, item->first);
+
+      if (item->first == "default_level")
+        {
+          // do nothing
+        }
+      else
+        {
+          LoggerMap::iterator loggerIt = m_loggers.find(item->first);
+          if (loggerIt == m_loggers.end())
+            {
+              NFD_LOG_DEBUG("Failed to configure logging level for module \"" <<
+                            item->first << "\" (module not found)");
+            }
+          else if (!isDryRun)
+            {
+              // std::cerr << "changing level for module " << item->first << " to " << level << std::endl;
+              loggerIt->second.setLogLevel(level);
+            }
+        }
+    }
+}
+
+void
+LoggerFactory::setDefaultLevel(LogLevel level)
+{
+  // std::cerr << "changing to default_level " << level << std::endl;
+
+  m_defaultLevel = level;
+  for (LoggerMap::iterator i = m_loggers.begin(); i != m_loggers.end(); ++i)
+    {
+      // std::cerr << "changing " << i->first << " to default " << m_defaultLevel << std::endl;
+      i->second.setLogLevel(m_defaultLevel);
+    }
+}
+
+Logger&
+LoggerFactory::create(const std::string& moduleName)
+{
+  return LoggerFactory::getInstance().createLogger(moduleName);
+}
+
+Logger&
+LoggerFactory::createLogger(const std::string& moduleName)
+{
+  // std::cerr << "creating logger for " << moduleName
+  //           << " with level " << m_defaultLevel << std::endl;
+
+  std::pair<LoggerMap::iterator, bool> loggerIt =
+    m_loggers.insert(NameAndLogger(moduleName, Logger(moduleName, m_defaultLevel)));
+
+  return loggerIt.first->second;
+}
+
+std::list<std::string>
+LoggerFactory::getModules() const
+{
+  std::list<std::string> modules;
+  for (LoggerMap::const_iterator i = m_loggers.begin(); i != m_loggers.end(); ++i)
+    {
+      modules.push_back(i->first);
+    }
+
+  return modules;
+}
+
+} // namespace nfd
diff --git a/app/src/main/jni/nfd-android/custom-logger-factory.hpp b/app/src/main/jni/nfd-android/custom-logger-factory.hpp
new file mode 100644
index 0000000..394c90b
--- /dev/null
+++ b/app/src/main/jni/nfd-android/custom-logger-factory.hpp
@@ -0,0 +1,111 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014  Regents of the University of California,
+ *                     Arizona Board of Regents,
+ *                     Colorado State University,
+ *                     University Pierre & Marie Curie, Sorbonne University,
+ *                     Washington University in St. Louis,
+ *                     Beijing Institute of Technology
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+#ifndef NFD_ANDROID_CUSTOM_LOGGER_FACTORY_HPP
+#define NFD_ANDROID_CUSTOM_LOGGER_FACTORY_HPP
+
+#include "common.hpp"
+
+#include "config-file.hpp"
+#include "logger.hpp"
+
+namespace nfd {
+
+class LoggerFactory : noncopyable
+{
+public:
+
+  class Error : public std::runtime_error
+  {
+  public:
+    explicit
+    Error(const std::string& error)
+      : std::runtime_error(error)
+    {
+    }
+  };
+
+  static LoggerFactory&
+  getInstance();
+
+  void
+  setConfigFile(ConfigFile& config);
+
+  void
+  onConfig(const ConfigSection& section, bool isDryRun, const std::string& filename);
+
+  std::list<std::string>
+  getModules() const;
+
+  static Logger&
+  create(const std::string& moduleName);
+
+
+PUBLIC_WITH_TESTS_ELSE_PRIVATE:
+
+  // these methods are used during unit-testing
+
+  LogLevel
+  getDefaultLevel() const;
+
+  void
+  setDefaultLevel(LogLevel level);
+
+private:
+
+  LoggerFactory();
+
+  Logger&
+  createLogger(const std::string& moduleName);
+
+  LogLevel
+  parseLevel(const std::string& level);
+
+  LogLevel
+  extractLevel(const ConfigSection& item, const std::string& key);
+
+private:
+
+  typedef std::map<std::string, LogLevel> LevelMap;
+  typedef std::pair<std::string, LogLevel> NameAndLevel;
+
+  LevelMap m_levelNames;
+
+  typedef std::map<std::string, Logger> LoggerMap;
+  typedef std::pair<std::string, Logger> NameAndLogger;
+
+  LoggerMap m_loggers;
+
+  LogLevel m_defaultLevel;
+};
+
+inline LogLevel
+LoggerFactory::getDefaultLevel() const
+{
+  return m_defaultLevel;
+}
+
+} // namespace nfd
+
+#endif // NFD_ANDROID_CUSTOM_LOGGER_FACTORY_HPP
diff --git a/app/src/main/jni/android-logger-streambuf.hpp b/app/src/main/jni/nfd-android/custom-logger.cpp
similarity index 68%
rename from app/src/main/jni/android-logger-streambuf.hpp
rename to app/src/main/jni/nfd-android/custom-logger.cpp
index 6ca2500..6b5d3ae 100644
--- a/app/src/main/jni/android-logger-streambuf.hpp
+++ b/app/src/main/jni/nfd-android/custom-logger.cpp
@@ -23,35 +23,14 @@
  * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef NFD_ANDROID_JNI_ANDROID_LOG_HPP
-#define NFD_ANDROID_JNI_ANDROID_LOG_HPP
+#include "custom-logger.hpp"
 
-#include <streambuf>
+namespace nfd {
 
-namespace nfd_android {
-
-/**
- * @brief Streambuf implementation to redirect to streams to Android logging facility
- *
- * Based on code from http://stackoverflow.com/a/8870278/2150331
- */
-class AndroidLoggerStreambuf : public std::streambuf
+Logger::Logger(const std::string& name, LogLevel level)
+  : m_moduleName(name)
+  , m_enabledLogLevel(level)
 {
-public:
-  AndroidLoggerStreambuf();
+}
 
-protected:
-  virtual int
-  overflow(int c);
-
-  virtual int
-  sync();
-
-private:
-  enum { MAX_BUF_SIZE = 1024 };
-  char buffer[MAX_BUF_SIZE];
-};
-
-} // namespace nfd_android
-
-#endif // NFD_ANDROID_JNI_ANDROID_LOG_HPP
+} // namespace nfd
diff --git a/app/src/main/jni/nfd-android/custom-logger.hpp b/app/src/main/jni/nfd-android/custom-logger.hpp
new file mode 100644
index 0000000..5355657
--- /dev/null
+++ b/app/src/main/jni/nfd-android/custom-logger.hpp
@@ -0,0 +1,140 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014,  Regents of the University of California,
+ *                      Arizona Board of Regents,
+ *                      Colorado State University,
+ *                      University Pierre & Marie Curie, Sorbonne University,
+ *                      Washington University in St. Louis,
+ *                      Beijing Institute of Technology,
+ *                      The University of Memphis
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NFD_ANDROID_CUSTOM_LOGGER_HPP
+#define NFD_ANDROID_CUSTOM_LOGGER_HPP
+
+#include "common.hpp"
+#include <android/log.h>
+
+namespace nfd {
+
+/** \brief indicates a log level
+ *  \note This type is internal. Logger should be accessed through NFD_LOG_* macros.
+ */
+enum LogLevel {
+  LOG_FATAL          = -1, // fatal (will be logged unconditionally)
+  LOG_NONE           = 0, // no messages
+  LOG_ERROR          = 1, // serious error messages
+  LOG_WARN           = 2, // warning messages
+  LOG_INFO           = 3, // informational messages
+  LOG_DEBUG          = 4, // debug messages
+  LOG_TRACE          = 5, // trace messages (most verbose)
+  LOG_ALL            = 255 // all messages
+};
+
+/** \brief provides logging for a module
+ *  \note This type is internal. Logger should be accessed through NFD_LOG_* macros.
+ *  \note This type is copyable because logger can be declared as a field of
+ *        (usually template) classes, and shouldn't prevent those classes to be copyable.
+ */
+class Logger
+{
+public:
+  Logger(const std::string& name, LogLevel level);
+
+  bool
+  isEnabled(LogLevel level) const
+  {
+    return m_enabledLogLevel >= level;
+  }
+
+  void
+  setLogLevel(LogLevel level)
+  {
+    m_enabledLogLevel = level;
+  }
+
+  const std::string&
+  getName() const
+  {
+    return m_moduleName;
+  }
+
+  void
+  setName(const std::string& name)
+  {
+    m_moduleName = name;
+  }
+
+private:
+  std::string m_moduleName;
+  LogLevel    m_enabledLogLevel;
+};
+
+inline std::ostream&
+operator<<(std::ostream& output, const Logger& logger)
+{
+  output << logger.getName();
+  return output;
+}
+
+} // namespace nfd
+
+#include "core/logger-factory.hpp"
+
+namespace nfd {
+
+#define NFD_LOG_INIT(name) \
+static nfd::Logger& g_logger = nfd::LoggerFactory::create(name)
+
+#define NFD_LOG_INCLASS_DECLARE() \
+static nfd::Logger& g_logger
+
+#define NFD_LOG_INCLASS_DEFINE(cls, name) \
+nfd::Logger& cls::g_logger = nfd::LoggerFactory::create(name)
+
+#define NFD_LOG_INCLASS_TEMPLATE_DEFINE(cls, name) \
+template<class T>                                  \
+nfd::Logger& cls<T>::g_logger = nfd::LoggerFactory::create(name)
+
+#define NFD_LOG_INCLASS_TEMPLATE_SPECIALIZATION_DEFINE(cls, specialization, name) \
+template<>                                                                        \
+nfd::Logger& cls<specialization>::g_logger = nfd::LoggerFactory::create(name)
+
+#define NFD_LOG_INCLASS_2TEMPLATE_SPECIALIZATION_DEFINE(cls, s1, s2, name) \
+template<>                                                                 \
+nfd::Logger& cls<s1, s2>::g_logger = nfd::LoggerFactory::create(name)
+
+#define NFD_LOG(nfdLevel, androidLevel, msg, expression)                \
+do {                                                                    \
+  if (g_logger.isEnabled(::nfd::LOG_##nfdLevel)) {                      \
+    std::ostringstream os;                                              \
+    os << expression;                                                   \
+    __android_log_print(ANDROID_LOG_##androidLevel,                     \
+                        g_logger.getName().c_str(), "%s", os.str().c_str()); \
+  }                                                                     \
+} while (false)
+
+#define NFD_LOG_TRACE(expression) NFD_LOG(TRACE, VERBOSE, TRACE, expression)
+#define NFD_LOG_DEBUG(expression) NFD_LOG(DEBUG, DEBUG, DEBUG,   expression)
+#define NFD_LOG_INFO(expression)  NFD_LOG(INFO,  INFO,  INFO,    expression)
+#define NFD_LOG_WARN(expression)  NFD_LOG(WARN,  WARN,  WARNING, expression)
+#define NFD_LOG_ERROR(expression) NFD_LOG(ERROR, ERROR, ERROR,   expression)
+#define NFD_LOG_FATAL(expression) NFD_LOG(FATAL, FATAL, FATAL,   expression)
+
+} // namespace nfd
+
+#endif // NFD_ANDROID_CUSTOM_LOGGER_HPP
diff --git a/app/src/main/jni/nfd-android/version.hpp b/app/src/main/jni/nfd-android/version.hpp
index d9aa54a..afa7ae1 100644
--- a/app/src/main/jni/nfd-android/version.hpp
+++ b/app/src/main/jni/nfd-android/version.hpp
@@ -38,13 +38,13 @@
  *
  *  MAJOR*1000000 + MINOR*1000 + PATCH
  */
-#define NFD_VERSION 2000
+#define NFD_VERSION 3000
 
 /** \brief NFD version represented as a string
  *
  *  MAJOR.MINOR.PATCH
  */
-#define NFD_VERSION_STRING "0.2.0"
+#define NFD_VERSION_STRING "0.3.0"
 
 /** \brief NFD version string, including git commit information, if NFD is build from
  *         specific git commit
@@ -60,12 +60,12 @@
  *
  * Example, 0.1.0-rc1-1-g5c86570
  */
-#define NFD_VERSION_BUILD_STRING "0.2.0-134-gde88b46"
+#define NFD_VERSION_BUILD_STRING "0.3.0-8-g6f570de"
 
 /// MAJOR version
 #define NFD_VERSION_MAJOR 0
 /// MINOR version
-#define NFD_VERSION_MINOR 2
+#define NFD_VERSION_MINOR 3
 /// PATCH version
 #define NFD_VERSION_PATCH 0
 
diff --git a/app/src/main/jni/nfd-wrapper.cpp b/app/src/main/jni/nfd-wrapper.cpp
index 6a6e3cd..8b8dafc 100644
--- a/app/src/main/jni/nfd-wrapper.cpp
+++ b/app/src/main/jni/nfd-wrapper.cpp
@@ -18,23 +18,154 @@
  */
 
 #include "nfd-wrapper.hpp"
-#include "android-logger-streambuf.hpp"
 
-extern "C" {
-int
-main(int argc, char** argv);
-}
+#include "daemon/nfd.hpp"
+#include "rib/nrd.hpp"
 
-#include <iostream>
+#include "core/global-io.hpp"
+#include "core/config-file.hpp"
+#include "core/logger.hpp"
+
+#include <boost/property_tree/info_parser.hpp>
+
+NFD_LOG_INIT("NfdWrapper");
+
+namespace nfd {
+
+class Runner
+{
+public:
+  Runner()
+  {
+    std::string initialConfig =
+      "general\n"
+      "{\n"
+      "}\n"
+      "\n"
+      "log\n"
+      "{\n"
+      "  default_level INFO\n"
+      "}\n"
+      "tables\n"
+      "{\n"
+      "  cs_max_packets 100\n"
+      "\n"
+      "  strategy_choice\n"
+      "  {\n"
+      "    /               /localhost/nfd/strategy/best-route\n"
+      "    /localhost      /localhost/nfd/strategy/broadcast\n"
+      "    /localhost/nfd  /localhost/nfd/strategy/best-route\n"
+      "    /ndn/broadcast  /localhost/nfd/strategy/broadcast\n"
+      "  }\n"
+      "}\n"
+      "\n"
+      "face_system\n"
+      "{\n"
+      "  tcp\n"
+      "  {\n"
+      "    port 6363\n"
+      "  }\n"
+      "\n"
+      "  udp\n"
+      "  {\n"
+      "    port 6363\n"
+      "    idle_timeout 600\n"
+      "    keep_alive_interval 25\n"
+      "    mcast no\n"
+      "  }\n"
+      "}\n"
+      "\n"
+      "authorizations\n"
+      "{\n"
+      "  authorize\n"
+      "  {\n"
+      "    certfile any\n"
+      "    privileges\n"
+      "    {\n"
+      "      faces\n"
+      "      fib\n"
+      "      strategy-choice\n"
+      "    }\n"
+      "  }\n"
+      "}\n"
+      "\n"
+      "rib\n"
+      "{\n"
+      "  localhost_security\n"
+      "  {\n"
+      "    trust-anchor\n"
+      "    {\n"
+      "      type any\n"
+      "    }\n"
+      "  }\n"
+      "}\n"
+      "  remote_register\n"
+      "  {\n"
+      "    cost 15\n"
+      "    timeout 10000\n"
+      "    retry 0\n"
+      "    refresh_interval 300\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));
+
+    m_nfd->initialize();
+    m_nrd->initialize();
+  }
+
+  void
+  run()
+  {
+  }
+
+  void
+  stop()
+  {
+  }
+
+private:
+  ndn::KeyChain m_keyChain;
+  unique_ptr<Nfd> m_nfd; // will use globalIoService
+  unique_ptr<rib::Nrd> m_nrd; // will use globalIoService
+
+  nfd::ConfigSection m_config;
+};
+
+static unique_ptr<Runner> g_runner;
+
+} // namespace nfd
 
 JNIEXPORT void JNICALL
 Java_net_named_1data_nfd_wrappers_NfdWrapper_startNfd(JNIEnv *, jclass)
 {
+  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());
+    }
+  }
 
+  if (nfd::g_runner.get() == nullptr) {
+    return;
+  }
+
+  nfd::g_runner->run();
 }
 
 JNIEXPORT void JNICALL
 Java_net_named_1data_nfd_wrappers_NfdWrapper_stopNfd(JNIEnv *, jclass)
 {
-
+  if (nfd::g_runner.get() == nullptr) {
+    return;
+  }
+  nfd::g_runner->stop();
+  nfd::g_runner.reset();
 }
diff --git a/app/src/main/jni/nfd.mk b/app/src/main/jni/nfd.mk
index 04cf7e3..2cacc03 100644
--- a/app/src/main/jni/nfd.mk
+++ b/app/src/main/jni/nfd.mk
@@ -7,8 +7,18 @@
 include $(CLEAR_VARS)
 LOCAL_MODULE := nfd-core
 LOCAL_SHARED_LIBRARIES := cryptopp ndn-cxx $(addsuffix _shared,$(addprefix boost_,$(NFD_BOOST_LIBS)))
-NFD_CORE_SRC_FILES := core/network.cpp core/config-file.cpp core/network-interface.cpp core/logger-factory.cpp core/privilege-helper.cpp core/city-hash.cpp core/scheduler.cpp core/global-io.cpp core/logger.cpp core/random.cpp
-LOCAL_SRC_FILES := $(addprefix NFD/,$(NFD_CORE_SRC_FILES))
+NFD_CORE_SRC_FILES := \
+    core/city-hash.cpp \
+    core/config-file.cpp \
+    core/global-io.cpp \
+    core/network-interface.cpp \
+    core/network.cpp \
+    core/privilege-helper.cpp \
+    core/random.cpp \
+    core/scheduler.cpp
+LOCAL_SRC_FILES := $(addprefix NFD/,$(NFD_CORE_SRC_FILES)) \
+    nfd-android/custom-logger.cpp \
+    nfd-android/custom-logger-factory.cpp
 LOCAL_CPPFLAGS := -I$(LOCAL_PATH)/nfd-android -I$(LOCAL_PATH)/NFD -I$(LOCAL_PATH)/NFD/core
 LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/nfd-android $(LOCAL_PATH)/NFD $(LOCAL_PATH)/NFD/core
 include $(BUILD_STATIC_LIBRARY)
@@ -18,17 +28,78 @@
 LOCAL_MODULE := nfd-daemon
 LOCAL_SHARED_LIBRARIES := cryptopp ndn-cxx $(addsuffix _shared,$(addprefix boost_,$(NFD_BOOST_LIBS)))
 LOCAL_STATIC_LIBRARIES := nfd-core
-NFD_DAEMON_SRC_FILES := daemon/face/ndnlp-sequence-generator.cpp daemon/face/udp-channel.cpp daemon/face/ndnlp-partial-message-store.cpp daemon/face/ndnlp-parse.cpp daemon/face/face.cpp daemon/face/null-face.cpp daemon/face/tcp-factory.cpp daemon/face/ndnlp-slicer.cpp daemon/face/udp-face.cpp daemon/face/multicast-udp-face.cpp daemon/face/channel.cpp daemon/face/tcp-channel.cpp daemon/face/tcp-face.cpp daemon/face/udp-factory.cpp daemon/main.cpp daemon/table/measurements-accessor.cpp daemon/table/pit-out-record.cpp daemon/table/fib-entry.cpp daemon/table/pit-in-record.cpp daemon/table/measurements-entry.cpp daemon/table/strategy-choice.cpp daemon/table/cs-entry.cpp daemon/table/pit.cpp daemon/table/measurements.cpp daemon/table/strategy-info-host.cpp daemon/table/pit-face-record.cpp daemon/table/fib.cpp daemon/table/cs-entry-impl.cpp daemon/table/fib-nexthop.cpp daemon/table/name-tree.cpp daemon/table/name-tree-entry.cpp daemon/table/cs.cpp daemon/table/pit-entry.cpp daemon/table/strategy-choice-entry.cpp daemon/table/cs-skip-list-entry.cpp daemon/table/dead-nonce-list.cpp daemon/fw/access-strategy.cpp daemon/fw/retransmission-suppression.cpp daemon/fw/strategy.cpp daemon/fw/rtt-estimator.cpp daemon/fw/broadcast-strategy.cpp daemon/fw/client-control-strategy.cpp daemon/fw/best-route-strategy.cpp daemon/fw/face-table.cpp daemon/fw/ncc-strategy.cpp daemon/fw/forwarder.cpp daemon/fw/best-route-strategy2.cpp daemon/fw/available-strategies.cpp daemon/mgmt/status-server.cpp daemon/mgmt/tables-config-section.cpp daemon/mgmt/channel-status-publisher.cpp daemon/mgmt/strategy-choice-publisher.cpp daemon/mgmt/general-config-section.cpp daemon/mgmt/command-validator.cpp daemon/mgmt/internal-face.cpp daemon/mgmt/fib-enumeration-publisher.cpp daemon/mgmt/face-manager.cpp daemon/mgmt/manager-base.cpp daemon/mgmt/face-status-publisher.cpp daemon/mgmt/strategy-choice-manager.cpp daemon/mgmt/face-query-status-publisher.cpp daemon/mgmt/fib-manager.cpp
+NFD_DAEMON_SRC_FILES := \
+    daemon/face/channel.cpp \
+    daemon/face/face.cpp \
+    daemon/face/multicast-udp-face.cpp \
+    daemon/face/ndnlp-parse.cpp \
+    daemon/face/ndnlp-partial-message-store.cpp \
+    daemon/face/ndnlp-sequence-generator.cpp \
+    daemon/face/ndnlp-slicer.cpp \
+    daemon/face/null-face.cpp \
+    daemon/face/tcp-channel.cpp \
+    daemon/face/tcp-face.cpp \
+    daemon/face/tcp-factory.cpp \
+    daemon/face/udp-channel.cpp \
+    daemon/face/udp-face.cpp \
+    daemon/face/udp-factory.cpp \
+    daemon/fw/access-strategy.cpp \
+    daemon/fw/available-strategies.cpp \
+    daemon/fw/best-route-strategy.cpp \
+    daemon/fw/best-route-strategy2.cpp \
+    daemon/fw/broadcast-strategy.cpp \
+    daemon/fw/client-control-strategy.cpp \
+    daemon/fw/face-table.cpp \
+    daemon/fw/forwarder.cpp \
+    daemon/fw/ncc-strategy.cpp \
+    daemon/fw/retx-suppression-fixed.cpp \
+    daemon/fw/rtt-estimator.cpp \
+    daemon/fw/strategy.cpp \
+    daemon/nfd.cpp \
+    daemon/mgmt/channel-status-publisher.cpp \
+    daemon/mgmt/command-validator.cpp \
+    daemon/mgmt/face-manager.cpp \
+    daemon/mgmt/face-query-status-publisher.cpp \
+    daemon/mgmt/face-status-publisher.cpp \
+    daemon/mgmt/fib-enumeration-publisher.cpp \
+    daemon/mgmt/fib-manager.cpp \
+    daemon/mgmt/general-config-section.cpp \
+    daemon/mgmt/internal-face.cpp \
+    daemon/mgmt/manager-base.cpp \
+    daemon/mgmt/status-server.cpp \
+    daemon/mgmt/strategy-choice-manager.cpp \
+    daemon/mgmt/strategy-choice-publisher.cpp \
+    daemon/mgmt/tables-config-section.cpp \
+    daemon/table/cs-entry-impl.cpp \
+    daemon/table/cs-entry.cpp \
+    daemon/table/cs-skip-list-entry.cpp \
+    daemon/table/cs.cpp \
+    daemon/table/dead-nonce-list.cpp \
+    daemon/table/fib-entry.cpp \
+    daemon/table/fib-nexthop.cpp \
+    daemon/table/fib.cpp \
+    daemon/table/measurements-accessor.cpp \
+    daemon/table/measurements-entry.cpp \
+    daemon/table/measurements.cpp \
+    daemon/table/name-tree-entry.cpp \
+    daemon/table/name-tree.cpp \
+    daemon/table/pit-entry.cpp \
+    daemon/table/pit-face-record.cpp \
+    daemon/table/pit-in-record.cpp \
+    daemon/table/pit-out-record.cpp \
+    daemon/table/pit.cpp \
+    daemon/table/strategy-choice-entry.cpp \
+    daemon/table/strategy-choice.cpp \
+    daemon/table/strategy-info-host.cpp \
+    \
+    rib/fib-update.cpp \
+    rib/nrd.cpp \
+    rib/remote-registrator.cpp \
+    rib/rib-entry.cpp \
+    rib/rib-manager.cpp \
+    rib/rib-status-publisher.cpp \
+    rib/rib.cpp
 LOCAL_SRC_FILES := $(addprefix NFD/,$(NFD_DAEMON_SRC_FILES))
-LOCAL_CPPFLAGS := -I$(LOCAL_PATH)/NFD/daemon
-include $(BUILD_SHARED_LIBRARY)
-
-# rib manager
-include $(CLEAR_VARS)
-LOCAL_MODULE := nfd-rib
-LOCAL_SHARED_LIBRARIES := cryptopp ndn-cxx $(addsuffix _shared,$(addprefix boost_,$(NFD_BOOST_LIBS)))
-LOCAL_STATIC_LIBRARIES := nfd-core
-NFD_DAEMON_SRC_FILES := rib/fib-update.cpp rib/main.cpp rib/remote-registrator.cpp rib/rib-entry.cpp rib/rib-manager.cpp rib/rib-status-publisher.cpp rib/rib.cpp
-LOCAL_SRC_FILES := $(addprefix NFD/,$(NFD_DAEMON_SRC_FILES))
-LOCAL_CPPFLAGS := -I$(LOCAL_PATH)/NFD/rib
+LOCAL_CPPFLAGS := -I$(LOCAL_PATH)/NFD/daemon -I$(LOCAL_PATH)/NFD/rib
+LOCAL_LDLIBS := -llog
 include $(BUILD_SHARED_LIBRARY)
