diff --git a/core/net/src/main/java/org/onosproject/net/config/impl/NetworkConfigManager.java b/core/net/src/main/java/org/onosproject/net/config/impl/NetworkConfigManager.java
index 151ea3d..bf33a25 100644
--- a/core/net/src/main/java/org/onosproject/net/config/impl/NetworkConfigManager.java
+++ b/core/net/src/main/java/org/onosproject/net/config/impl/NetworkConfigManager.java
@@ -261,6 +261,18 @@
          }
     }
 
+     @Override
+     public <S> void removeConfig(S subject) {
+        checkPermission(CONFIG_WRITE);
+        store.clearConfig(subject);
+     }
+
+     @Override
+     public <S> void removeConfig() {
+         checkPermission(CONFIG_WRITE);
+         store.clearConfig();
+     }
+
     // Auxiliary store delegate to receive notification about changes in
     // the network configuration store state - by the store itself.
     private class InternalStoreDelegate implements NetworkConfigStoreDelegate {
diff --git a/core/net/src/test/java/org/onosproject/net/config/impl/NetworkConfigManagerTest.java b/core/net/src/test/java/org/onosproject/net/config/impl/NetworkConfigManagerTest.java
index 2c52de6..3b5f3a0 100644
--- a/core/net/src/test/java/org/onosproject/net/config/impl/NetworkConfigManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/config/impl/NetworkConfigManagerTest.java
@@ -239,4 +239,43 @@
         assertThat(configService.getSubjectFactory(String.class), notNullValue());
         assertThat(configService.getSubjectFactory("key1"), notNullValue());
     }
+
+    /**
+     * Tests creation, query and removal of a configuration including queued.
+     */
+    @Test
+    public void testRemoveConfig() {
+
+        assertThat(configService.getSubjectFactory(String.class), nullValue());
+        assertThat(configService.getSubjectFactory("key"), nullValue());
+
+        registry.registerConfigFactory(config1Factory);
+        registry.registerConfigFactory(config2Factory);
+        configService.applyConfig("configKey", BasicConfig1.class, new ObjectMapper().createObjectNode());
+
+        configService.applyConfig("key1", "key", "config1", new ObjectMapper().createObjectNode());
+        configService.applyConfig("key1", "keyxx", "config3", new ObjectMapper().createObjectNode());
+        configService.applyConfig("key2", "key1", "config4", new ObjectMapper().createObjectNode());
+
+        configService.removeConfig();
+
+        Set<String> subjects = configService.getSubjects(factory1.subjectClass());
+        assertThat(subjects.size(), is(0));
+
+        Set<String> subjects2 = configService.getSubjects(factory2.subjectClass());
+        assertThat(subjects2.size(), is(0));
+
+        configService.applyConfig("key1", "key", "config1", new ObjectMapper().createObjectNode());
+        configService.applyConfig("key1", "keyxx", "config3", new ObjectMapper().createObjectNode());
+        configService.applyConfig("key1", "key1", "config4", new ObjectMapper().createObjectNode());
+
+        @SuppressWarnings("unchecked")
+        Set<String> configs = configService.getSubjects(
+        configService.getSubjectFactory("key1").subjectClass());
+
+        configs.forEach(c -> configService.removeConfig(c));
+        Set<String> newConfig1 = configService.getSubjects(factory1.subjectClass());
+
+        assertThat(newConfig1, notNullValue());
+    }
 }
