diff --git a/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceProvider.java b/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceProvider.java
index 2a36950..fb77c70 100644
--- a/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceProvider.java
+++ b/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceProvider.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.provider.snmp.device.impl;
 
+import com.google.common.collect.ImmutableList;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -36,6 +37,7 @@
 import org.onosproject.net.config.NetworkConfigEvent;
 import org.onosproject.net.config.NetworkConfigListener;
 import org.onosproject.net.config.NetworkConfigRegistry;
+import org.onosproject.net.config.basics.SubjectFactories;
 import org.onosproject.net.device.DefaultDeviceDescription;
 import org.onosproject.net.device.DeviceDescription;
 import org.onosproject.net.device.DeviceDescriptionDiscovery;
@@ -52,6 +54,8 @@
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 
+import java.util.List;
+import java.util.Set;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
@@ -72,7 +76,7 @@
 
     private static final String UNKNOWN = "unknown";
     private static final String APP_NAME = "org.onosproject.snmp";
-    private static final String SCHEME = "snmp";
+    protected static final String SCHEME = "snmp";
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected SnmpController controller;
@@ -102,7 +106,7 @@
     protected final NetworkConfigListener cfgLister = new InternalNetworkConfigListener();
 
 
-    protected final ConfigFactory factory =
+    protected final List<ConfigFactory> factories = ImmutableList.of(
             new ConfigFactory<ApplicationId, SnmpProviderConfig>(APP_SUBJECT_FACTORY,
                                                                  SnmpProviderConfig.class,
                                                                  "devices",
@@ -111,7 +115,15 @@
                 public SnmpProviderConfig createConfig() {
                     return new SnmpProviderConfig();
                 }
-            };
+            },
+            new ConfigFactory<DeviceId, SnmpDeviceConfig>(SubjectFactories.DEVICE_SUBJECT_FACTORY,
+                                                          SnmpDeviceConfig.class,
+                                                          SCHEME) {
+                @Override
+                public SnmpDeviceConfig createConfig() {
+                    return new SnmpDeviceConfig();
+                }
+            });
 
 
     /**
@@ -127,8 +139,10 @@
 
         providerService = providerRegistry.register(this);
         appId = coreService.registerApplication(APP_NAME);
-        netCfgService.registerConfigFactory(factory);
+        factories.forEach(netCfgService::registerConfigFactory);
         netCfgService.addListener(cfgLister);
+        connectDevices();
+        addOrRemoveDevicesConfig();
         modified(context);
         log.info("Started");
     }
@@ -145,7 +159,7 @@
             log.error("Device builder did not terminate");
         }
         deviceBuilderExecutor.shutdownNow();
-        netCfgService.unregisterConfigFactory(factory);
+        factories.forEach(netCfgService::unregisterConfigFactory);
         netCfgService.removeListener(cfgLister);
         providerRegistry.unregister(this);
         providerService = null;
@@ -157,14 +171,16 @@
         log.info("Modified");
     }
 
+    //Old method to register devices provided via net-cfg under apps/snmp/ tree
     private void addOrRemoveDevicesConfig() {
         SnmpProviderConfig cfg = netCfgService.getConfig(appId, SnmpProviderConfig.class);
         if (cfg != null) {
             try {
                 cfg.getDevicesInfo().forEach(info -> {
-                    SnmpDevice device = new DefaultSnmpDevice(info.ip().toString(),
-                                                              info.port(), info.username(), info.password());
-                    buildDevice(device);
+                    buildDevice(new DefaultSnmpDevice(info.ip().toString(),
+                                                      info.port(), info.username(),
+                                                      info.password()));
+
                 });
             } catch (ConfigException e) {
                 log.error("Cannot read config error " + e);
@@ -172,6 +188,18 @@
         }
     }
 
+    //Method to register devices provided via net-cfg under devices/ tree
+    private void connectDevices() {
+        Set<DeviceId> deviceSubjects =
+                netCfgService.getSubjects(DeviceId.class, SnmpDeviceConfig.class);
+        deviceSubjects.forEach(deviceId -> {
+            SnmpDeviceConfig config =
+                    netCfgService.getConfig(deviceId, SnmpDeviceConfig.class);
+            buildDevice(new DefaultSnmpDevice(config.ip().toString(),
+                                              config.port(), config.username(), config.password()));
+        });
+    }
+
     private void buildDevice(SnmpDevice device) {
         if (device != null) {
             log.debug("Device Detail:host={}, port={}, state={}",
@@ -310,12 +338,19 @@
 
         @Override
         public void event(NetworkConfigEvent event) {
-            addOrRemoveDevicesConfig();
+            if (event.configClass().equals(SnmpDeviceConfig.class)) {
+                connectDevices();
+            } else {
+                log.warn("Injecting device via this Json is deprecated, " +
+                                 "please put configuration under devices/");
+                addOrRemoveDevicesConfig();
+            }
         }
 
         @Override
         public boolean isRelevant(NetworkConfigEvent event) {
-            return event.configClass().equals(SnmpProviderConfig.class) &&
+            return (event.configClass().equals(SnmpDeviceConfig.class) ||
+                    event.configClass().equals(SnmpProviderConfig.class)) &&
                     (event.type() == NetworkConfigEvent.Type.CONFIG_ADDED ||
                             event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED);
         }
