diff --git a/src/util/network-monitor.cpp b/src/util/network-monitor.cpp
new file mode 100644
index 0000000..b16e473
--- /dev/null
+++ b/src/util/network-monitor.cpp
@@ -0,0 +1,182 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2015 Regents of the University of California.
+ *
+ * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
+ *
+ * ndn-cxx library is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * ndn-cxx library 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 Lesser General Public License for more details.
+ *
+ * You should have received copies of the GNU General Public License and GNU Lesser
+ * General Public License along with ndn-cxx, e.g., in COPYING.md file.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
+ *
+ *
+ * Parts of this implementation is based on daemondo command of MacPorts
+ * (https://www.macports.org/):
+ *
+ *    Copyright (c) 2005-2007 James Berry <jberry@macports.org>
+ *   All rights reserved.
+ *
+ *   Redistribution and use in source and binary forms, with or without
+ *   modification, are permitted provided that the following conditions
+ *   are met:
+ *   1. Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *   2. Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *   3. Neither the name of The MacPorts Project nor the names of its contributors
+ *      may be used to endorse or promote products derived from this software
+ *      without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ *   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ *   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ *   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ *   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ *   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ *   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ *   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ *   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ *   POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "ndn-cxx-config.hpp"
+
+#include "network-monitor.hpp"
+#include "scheduler.hpp"
+#include "scheduler-scoped-event-id.hpp"
+
+#if defined(NDN_CXX_HAVE_COREFOUNDATION_COREFOUNDATION_H)
+
+#include <CoreFoundation/CoreFoundation.h>
+#include <SystemConfiguration/SystemConfiguration.h>
+
+namespace ndn {
+namespace util {
+
+class NetworkMonitor::Impl
+{
+public:
+  Impl(boost::asio::io_service& io)
+    : scheduler(io)
+    , cfLoopEvent(scheduler)
+  {
+  }
+
+  void
+  scheduleCfLoop()
+  {
+    // poll each second for new events
+    cfLoopEvent = scheduler.scheduleEvent(time::seconds(1), bind(&Impl::pollCfLoop, this));
+  }
+
+  static void
+  afterNotificationCenterEvent(CFNotificationCenterRef center, void *observer, CFStringRef name,
+                               const void *object, CFDictionaryRef userInfo)
+  {
+    static_cast<NetworkMonitor*>(observer)->onNetworkStateChanged();
+  }
+
+private:
+
+  void
+  pollCfLoop()
+  {
+    // this should dispatch ready events and exit
+    CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, true);
+    scheduleCfLoop();
+  }
+
+private:
+  Scheduler scheduler;
+  scheduler::ScopedEventId cfLoopEvent;
+};
+
+NetworkMonitor::NetworkMonitor(boost::asio::io_service& io)
+  : m_impl(new Impl(io))
+{
+  m_impl->scheduleCfLoop();
+
+  // Potentially useful System Configuration regex patterns:
+  //
+  // State:/Network/Interface/.*/Link
+  // State:/Network/Interface/.*/IPv4
+  // State:/Network/Interface/.*/IPv6
+  //
+  // State:/Network/Global/DNS
+  // State:/Network/Global/IPv4
+  //
+  // Potentially useful notifications from Darwin Notify Center:
+  //
+  // com.apple.system.config.network_change
+
+  // network change observations
+  CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),
+                                  static_cast<void*>(this),
+                                  &NetworkMonitor::Impl::afterNotificationCenterEvent,
+                                  CFSTR("com.apple.system.config.network_change"),
+                                  nullptr, // object to observe
+                                  CFNotificationSuspensionBehaviorDeliverImmediately);
+}
+
+NetworkMonitor::~NetworkMonitor()
+{
+  CFNotificationCenterRemoveEveryObserver(CFNotificationCenterGetDarwinNotifyCenter(),
+                                          static_cast<void*>(this));
+}
+
+} // namespace util
+} // namespace ndn
+
+// done with defined(NDN_CXX_HAVE_COREFOUNDATION_COREFOUNDATION_H)
+#elif defined(HAVE_DBUS)
+
+namespace ndn {
+namespace util {
+
+NetworkMonitor::NetworkMonitor(boost::asio::io_service&)
+{
+  throw Error("Not implemented yet");
+}
+
+NetworkMonitor::~NetworkMonitor()
+{
+}
+
+} // namespace util
+} // namespace ndn
+
+// done with defined(HAVE_DBUS)
+#else // do not support network monitoring operations
+
+namespace ndn {
+namespace util {
+
+class NetworkMonitor::Impl
+{
+public:
+};
+
+NetworkMonitor::NetworkMonitor(boost::asio::io_service&)
+{
+  throw Error("Network monitoring is not supported on this platform");
+}
+
+NetworkMonitor::~NetworkMonitor()
+{
+}
+
+} // namespace util
+} // namespace ndn
+
+#endif // do not support network monitoring operations
diff --git a/src/util/network-monitor.hpp b/src/util/network-monitor.hpp
new file mode 100644
index 0000000..9c7dc31
--- /dev/null
+++ b/src/util/network-monitor.hpp
@@ -0,0 +1,84 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2015 Regents of the University of California.
+ *
+ * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
+ *
+ * ndn-cxx library is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * ndn-cxx library 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 Lesser General Public License for more details.
+ *
+ * You should have received copies of the GNU General Public License and GNU Lesser
+ * General Public License along with ndn-cxx, e.g., in COPYING.md file.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
+ */
+
+#ifndef NDN_UTIL_NETWORK_MONITOR_HPP
+#define NDN_UTIL_NETWORK_MONITOR_HPP
+
+#include "signal.hpp"
+
+#include <boost/asio/io_service.hpp>
+
+namespace ndn {
+namespace util {
+
+/**
+ * @brief Network state change monitor
+ *
+ * When network change is detected, onNetworkStateChanged signal will be fired.
+ * Monitoring is run for the lifetime of the NetworkMonitor instance.
+ *
+ * @note Implementation of this class is platform dependent and not all supported platforms
+ *       are supported:
+ *       - OS X: CFNotificationCenterAddObserver
+ *       - Linux: NetworkManager notifications through DBus IPC
+ *
+ * Network state change detection is not guaranteed to be precise and (zero or more)
+ * notifications are expected to be fired for the following events:
+ * - any network interface going up or down
+ * - IPv4 or IPv6 address changes on any of the interfaces
+ */
+class NetworkMonitor : boost::noncopyable
+{
+public:
+  class Error : public std::runtime_error
+  {
+  public:
+    explicit
+    Error(const std::string& what)
+      : std::runtime_error(what)
+    {
+    }
+  };
+
+  /**
+   * @brief Construct instance and start monitoring for network state changes
+   * @param io io_service thread that will dispatch events
+   * @throw Error when network monitoring is not supported or there is an error starting monitoring
+   */
+  explicit
+  NetworkMonitor(boost::asio::io_service& io);
+
+  /**
+   * @brief Terminate network state monitoring
+   */
+  ~NetworkMonitor();
+
+  Signal<NetworkMonitor> onNetworkStateChanged;
+
+private:
+  class Impl;
+  std::unique_ptr<Impl> m_impl;
+};
+
+} // namespace util
+} // namespace autoconfig
+
+#endif // NDN_UTIL_NETWORK_MONITOR_HPP
diff --git a/tests/integrated/test-faces.cpp b/tests/integrated/face.cpp
similarity index 98%
rename from tests/integrated/test-faces.cpp
rename to tests/integrated/face.cpp
index 0cb34eb..2666c48 100644
--- a/tests/integrated/test-faces.cpp
+++ b/tests/integrated/face.cpp
@@ -19,6 +19,10 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
+#define BOOST_TEST_MAIN 1
+#define BOOST_TEST_DYN_LINK 1
+#define BOOST_TEST_MODULE ndn-cxx Integrated Tests (Face)
+
 #include "face.hpp"
 #include "util/scheduler.hpp"
 #include "security/key-chain.hpp"
diff --git a/tests/integrated/network-monitor.cpp b/tests/integrated/network-monitor.cpp
new file mode 100644
index 0000000..9ed4bb3
--- /dev/null
+++ b/tests/integrated/network-monitor.cpp
@@ -0,0 +1,56 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2015 Regents of the University of California.
+ *
+ * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
+ *
+ * ndn-cxx library is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * ndn-cxx library 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 Lesser General Public License for more details.
+ *
+ * You should have received copies of the GNU General Public License and GNU Lesser
+ * General Public License along with ndn-cxx, e.g., in COPYING.md file.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
+ */
+
+#define BOOST_TEST_MAIN 1
+#define BOOST_TEST_DYN_LINK 1
+#define BOOST_TEST_MODULE ndn-cxx Integrated Tests (Network Monitor)
+
+#include "util/network-monitor.hpp"
+
+#include "boost-test.hpp"
+#include <cstdlib>
+#include <iostream>
+#include "util/time.hpp"
+
+namespace ndn {
+namespace util {
+
+BOOST_AUTO_TEST_SUITE(UtilNetworkMonitor)
+
+BOOST_AUTO_TEST_CASE(Basic)
+{
+  boost::asio::io_service io;
+  BOOST_REQUIRE_NO_THROW((NetworkMonitor(io)));
+
+  NetworkMonitor monitor(io);
+
+  monitor.onNetworkStateChanged.connect([] {
+      std::cout << time::toString(time::system_clock::now())
+                << "\tReceived network state change event" << std::endl;
+    });
+
+  io.run();
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} // namespace util
+} // namespace ndn
diff --git a/tests/integrated/wscript b/tests/integrated/wscript
index d5d9af7..311059d 100644
--- a/tests/integrated/wscript
+++ b/tests/integrated/wscript
@@ -5,25 +5,16 @@
 top = '..'
 
 def build(bld):
-    unittests = bld(
-        target="integrated-test-objects",
-        name="integrated-test-objects",
-        features="cxx",
-        source=bld.path.ant_glob(['**/*.cpp'],
-                                 excl=['main.cpp', '**/*-osx.cpp', '**/*-sqlite3.cpp']),
-        use='tests-base',
-        includes='.',
-        install_path=None,
-        )
+    bld(features="cxx cxxprogram",
+        target="face",
+        source="face.cpp",
+        use='ndn-cxx boost-tests-base BOOST',
+        includes='..',
+        install_path=None)
 
-    if bld.env['HAVE_OSX_SECURITY']:
-        unittests.source += bld.path.ant_glob('**/*-osx.cpp')
-
-    # In case we want to make it optional later
-    unittests.source += bld.path.ant_glob('**/*-sqlite3.cpp')
-
-    bld.program(
-        target="../integrated-tests",
-        use="integrated-test-objects",
-        source="main.cpp",
+    bld(features="cxx cxxprogram",
+        target="network-monitor",
+        source="network-monitor.cpp",
+        use='ndn-cxx boost-tests-base BOOST',
+        includes='..',
         install_path=None)
diff --git a/tests/main.cpp b/tests/main.cpp
index 3d3a773..63720bb 100644
--- a/tests/main.cpp
+++ b/tests/main.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2014 Regents of the University of California.
+ * Copyright (c) 2013-2015 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -21,5 +21,6 @@
 
 #define BOOST_TEST_MAIN 1
 #define BOOST_TEST_DYN_LINK 1
+#define BOOST_TEST_MODULE ndn-cxx Unit Tests
 
 #include "boost-test.hpp"
diff --git a/tests/wscript b/tests/wscript
index c4cbfbf..cf43382 100644
--- a/tests/wscript
+++ b/tests/wscript
@@ -5,66 +5,45 @@
 top = '..'
 
 def build(bld):
+    # precompiled headers (if enabled)
     bld(features=['cxx', 'pch'],
         name='tests-base',
         target='tests-base',
         headers=['../src/common-pch.hpp', 'boost-test.hpp'],
-        use='ndn-cxx',
-        includes='.',
-        )
+        use='ndn-cxx BOOST',
+        includes='.')
 
+    # core modules that can be shared between unit and integrated tests
+    bld(features="cxx",
+        target="boost-tests-base",
+        source="identity-management-fixture.cpp",
+        use='ndn-cxx tests-base BOOST',
+        includes='.',
+        install_path=None)
+
+    # unit test objects
     unit_tests = bld(
         target="unit-test-objects",
         name="unit-test-objects",
         features="cxx",
         source=bld.path.ant_glob(['unit-tests/**/*.cpp'],
                                  excl=['**/*-osx.cpp', '**/*-sqlite3.cpp']),
-        use='tests-base',
+        use='ndn-cxx tests-base BOOST',
         includes='.',
-        install_path=None,
-        )
-
-    integrated = bld(
-        target="integrated-test-objects",
-        name="integrated-test-objects",
-        features="cxx",
-        source=bld.path.ant_glob(['integrated/**/*.cpp'],
-                                 excl=['**/*-osx.cpp', '**/*-sqlite3.cpp']),
-        use='tests-base',
-        includes='.',
-        install_path=None,
-        )
+        install_path=None)
 
     if bld.env['HAVE_OSX_SECURITY']:
         unit_tests.source += bld.path.ant_glob('unit-tests/**/*-osx.cpp')
-        integrated.source += bld.path.ant_glob('integrated/**/*-osx.cpp')
 
     # In case we want to make it optional later
     unit_tests.source += bld.path.ant_glob('unit-tests/**/*-sqlite3.cpp')
-    integrated.source += bld.path.ant_glob('integrated/**/*-sqlite3.cpp')
 
-    bld(features='cxx',
-        target='unit-tests-main-unit',
+    # unit test app
+    bld(features='cxx cxxprogram',
+        target='../unit-tests',
         name='unit-tests-main-unit',
-        source=bld.path.ant_glob(['*.cpp']),
-        use='ndn-cxx',
-        defines=['BOOST_TEST_MODULE=ndn-cxx Unit Tests'],
-    )
-
-    bld(features='cxx',
-        target='unit-tests-main-integrated',
-        name='unit-tests-main-integrated',
-        source=bld.path.ant_glob(['*.cpp']),
-        use='ndn-cxx',
-        defines=['BOOST_TEST_MODULE=ndn-cxx Integrated Tests'],
-    )
-
-    bld(features="cxx cxxprogram",
-        target="../unit-tests",
-        use="unit-test-objects unit-tests-main-unit",
+        source="main.cpp",
+        use='ndn-cxx unit-test-objects boost-tests-base BOOST',
         install_path=None)
 
-    bld(features="cxx cxxprogram",
-        target="../integrated-tests",
-        use="integrated-test-objects unit-tests-main-integrated",
-        install_path=None)
+    bld.recurse('integrated')
