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 02434b5..600b703 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
@@ -66,6 +66,7 @@
 
     // Inventory of configuration factories
     private final Map<ConfigKey, ConfigFactory> factories = Maps.newConcurrentMap();
+    private final Map<ConfigKey, Integer> factoryCounters = Maps.newConcurrentMap();
 
     // Secondary indices to retrieve subject and config classes by keys
     private final Map<String, SubjectFactory> subjectClasses = Maps.newConcurrentMap();
@@ -97,24 +98,36 @@
     @SuppressWarnings("unchecked")
     public void registerConfigFactory(ConfigFactory configFactory) {
         checkNotNull(configFactory, NULL_FACTORY_MSG);
-        factories.put(key(configFactory), configFactory);
-        configClasses.put(identifier(configFactory), configFactory.configClass());
+        if (factoryCounters.containsKey(key(configFactory))) {
+            factoryCounters.replace(key(configFactory), (factoryCounters.get(key(configFactory)) + 1));
+        } else {
+            factories.put(key(configFactory), configFactory);
+            factoryCounters.put(key(configFactory), 1);
 
-        SubjectFactory subjectFactory = configFactory.subjectFactory();
-        subjectClasses.putIfAbsent(subjectFactory.subjectClassKey(), subjectFactory);
-        subjectClassKeys.putIfAbsent(subjectFactory.subjectClass(), subjectFactory);
+            configClasses.put(identifier(configFactory), configFactory.configClass());
 
-        store.addConfigFactory(configFactory);
+            SubjectFactory subjectFactory = configFactory.subjectFactory();
+            subjectClasses.putIfAbsent(subjectFactory.subjectClassKey(), subjectFactory);
+            subjectClassKeys.putIfAbsent(subjectFactory.subjectClass(), subjectFactory);
+
+            store.addConfigFactory(configFactory);
+        }
     }
 
     @Override
     public void unregisterConfigFactory(ConfigFactory configFactory) {
         checkNotNull(configFactory, NULL_FACTORY_MSG);
-        factories.remove(key(configFactory));
-        configClasses.remove(identifier(configFactory));
+        Integer factoryCounter = factoryCounters.get(key(configFactory));
+        if (factoryCounter > 1) {
+            factoryCounters.replace(key(configFactory), (factoryCounter - 1));
+        } else {
+            factoryCounters.remove(key(configFactory));
+            factories.remove(key(configFactory));
+            configClasses.remove(identifier(configFactory));
 
-        // Note that we are deliberately not removing subject factory key bindings.
-        store.removeConfigFactory(configFactory);
+            // Note that we are deliberately not removing subject factory key bindings.
+            store.removeConfigFactory(configFactory);
+        }
     }
 
     @Override
