diff --git a/apps/test/netcfg-monitor/BUCK b/apps/test/netcfg-monitor/BUCK
new file mode 100644
index 0000000..7b6a8a4
--- /dev/null
+++ b/apps/test/netcfg-monitor/BUCK
@@ -0,0 +1,14 @@
+COMPILE_DEPS = [
+    '//lib:CORE_DEPS',
+]
+
+osgi_jar_with_tests (
+    deps = COMPILE_DEPS,
+)
+
+onos_app (
+    title = 'Network Configuration Monitor Test App',
+    category = 'Test',
+    url = 'http://onosproject.org',
+    description = 'Network configuration monitor test application.',
+)
diff --git a/apps/test/netcfg-monitor/pom.xml b/apps/test/netcfg-monitor/pom.xml
new file mode 100644
index 0000000..434a6a2
--- /dev/null
+++ b/apps/test/netcfg-monitor/pom.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2016-present Open Networking Laboratory
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onosproject</groupId>
+        <artifactId>onos-apps-test</artifactId>
+        <version>1.7.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>onos-app-netcfg-monitor</artifactId>
+    <packaging>bundle</packaging>
+
+    <description>Network configuration monitor test application</description>
+
+    <properties>
+        <onos.app.name>org.onosproject.netcfgmonitor</onos.app.name>
+        <onos.app.title>Network Config Test App</onos.app.title>
+        <onos.app.category>Test</onos.app.category>
+        <onos.app.url>http://onosproject.org</onos.app.url>
+        <onos.app.readme>Network configuration monitor test application.</onos.app.readme>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-api</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+            <classifier>tests</classifier>
+        </dependency>
+
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+        </dependency>
+
+    </dependencies>
+
+</project>
diff --git a/apps/test/netcfg-monitor/src/main/java/org/onosproject/netcfgmonitor/NetCfgEventMonitor.java b/apps/test/netcfg-monitor/src/main/java/org/onosproject/netcfgmonitor/NetCfgEventMonitor.java
new file mode 100644
index 0000000..eb96857
--- /dev/null
+++ b/apps/test/netcfg-monitor/src/main/java/org/onosproject/netcfgmonitor/NetCfgEventMonitor.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.netcfgmonitor;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.onosproject.net.config.NetworkConfigEvent;
+import org.onosproject.net.config.NetworkConfigListener;
+import org.onosproject.net.config.NetworkConfigService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Network configuration monitor.
+ */
+@Component(immediate = true)
+public class NetCfgEventMonitor {
+
+    private Logger log = LoggerFactory.getLogger(getClass());
+
+    @Reference
+    protected NetworkConfigService networkConfigService;
+
+    private final NetworkConfigListener listener = new InternalListener();
+
+    @Activate
+    protected void activate() {
+        networkConfigService.addListener(listener);
+    }
+
+    @Deactivate
+    protected void deactivate() {
+        networkConfigService.removeListener(listener);
+    }
+
+    private class InternalListener implements NetworkConfigListener {
+        @Override
+        public void event(NetworkConfigEvent event) {
+            log.info("Received event {}", event);
+        }
+    }
+}
diff --git a/apps/test/netcfg-monitor/src/main/java/org/onosproject/netcfgmonitor/package-info.java b/apps/test/netcfg-monitor/src/main/java/org/onosproject/netcfgmonitor/package-info.java
new file mode 100644
index 0000000..a41e935
--- /dev/null
+++ b/apps/test/netcfg-monitor/src/main/java/org/onosproject/netcfgmonitor/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Network configuration event monitor app.
+ */
+package org.onosproject.netcfgmonitor;
\ No newline at end of file
diff --git a/apps/test/pom.xml b/apps/test/pom.xml
index 8fd6830..dfde9fb 100644
--- a/apps/test/pom.xml
+++ b/apps/test/pom.xml
@@ -38,6 +38,7 @@
         <module>flow-perf</module>
         <module>demo</module>
         <module>distributed-primitives</module>
+        <module>netcfg-monitor</module>
     </modules>
 
 </project>
diff --git a/modules.defs b/modules.defs
index a258519..22b7adf 100644
--- a/modules.defs
+++ b/modules.defs
@@ -139,6 +139,7 @@
     '//apps/test/flow-perf:onos-apps-test-flow-perf-oar',
     '//apps/test/intent-perf:onos-apps-test-intent-perf-oar',
     '//apps/test/loadtest:onos-apps-test-loadtest-oar',
+    '//apps/test/netcfg-monitor:onos-apps-test-netcfg-monitor-oar',
     '//apps/test/messaging-perf:onos-apps-test-messaging-perf-oar',
     '//apps/virtualbng:onos-apps-virtualbng-oar',
     '//apps/vpls:onos-apps-vpls-oar',
