diff --git a/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceConfig.java b/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceConfig.java
new file mode 100644
index 0000000..293f5cd
--- /dev/null
+++ b/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceConfig.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2017-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.provider.snmp.device.impl;
+
+import com.google.common.annotations.Beta;
+import org.apache.commons.lang3.tuple.Pair;
+import org.onlab.packet.IpAddress;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.config.Config;
+
+/**
+ * Configuration to push devices to the SNMP provider.
+ */
+@Beta
+public class SnmpDeviceConfig extends Config<DeviceId> {
+
+    private static final String IP = "ip";
+    private static final String PORT = "port";
+    private static final String USERNAME = "username";
+    private static final String PASSWORD = "password";
+
+    @Override
+    public boolean isValid() {
+        return hasOnlyFields(IP, PORT, USERNAME, PASSWORD) &&
+                ip() != null;
+    }
+
+    /**
+     * Gets the Ip of the SNMP device.
+     *
+     * @return ip
+     */
+    public IpAddress ip() {
+        return IpAddress.valueOf(get(IP, extractIpPort().getKey()));
+    }
+
+    /**
+     * Gets the port of the SNMP device.
+     *
+     * @return port
+     */
+    public int port() {
+        return get(PORT, extractIpPort().getValue());
+    }
+
+    /**
+     * Gets the username of the SNMP device.
+     *
+     * @return username
+     */
+    public String username() {
+        return get(USERNAME, "");
+    }
+
+    /**
+     * Gets the password of the SNMP device.
+     *
+     * @return password
+     */
+    public String password() {
+        return get(PASSWORD, "");
+    }
+
+
+    private Pair<String, Integer> extractIpPort() {
+        String info = subject.toString();
+        if (info.startsWith(SnmpDeviceProvider.SCHEME)) {
+            //+1 is due to length of colon separator
+            String ip = info.substring(info.indexOf(":") + 1, info.lastIndexOf(":"));
+            int port = Integer.parseInt(info.substring(info.lastIndexOf(":") + 1));
+            return Pair.of(ip, port);
+        }
+        return null;
+    }
+}
\ No newline at end of file
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);
         }
diff --git a/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpProviderConfig.java b/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpProviderConfig.java
index 0c3486a..9fecad3 100644
--- a/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpProviderConfig.java
+++ b/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpProviderConfig.java
@@ -27,7 +27,9 @@
 
 /**
  * Configuration decoder for SNMP provider.
+ * @deprecated 1.10.0 Kingfisher
  */
+@Deprecated
 @Beta
 public class SnmpProviderConfig extends Config<ApplicationId> {
 
diff --git a/providers/snmp/device/src/test/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceProviderTest.java b/providers/snmp/device/src/test/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceProviderTest.java
index ac7e2e0..462e05e 100644
--- a/providers/snmp/device/src/test/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceProviderTest.java
+++ b/providers/snmp/device/src/test/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceProviderTest.java
@@ -16,6 +16,8 @@
 
 package org.onosproject.provider.snmp.device.impl;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.collect.ImmutableSet;
 import org.junit.Before;
 import org.junit.Test;
@@ -31,6 +33,7 @@
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.config.Config;
+import org.onosproject.net.config.ConfigApplyDelegate;
 import org.onosproject.net.config.ConfigFactory;
 import org.onosproject.net.config.NetworkConfigEvent;
 import org.onosproject.net.config.NetworkConfigListener;
@@ -52,6 +55,7 @@
 import org.onosproject.net.provider.ProviderId;
 import org.onosproject.snmp.SnmpController;
 
+import java.io.InputStream;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Set;
@@ -64,6 +68,8 @@
  */
 public class SnmpDeviceProviderTest {
 
+    public static final int TEST_DURATION = 1500;
+    public static final int DELAY = 500;
     private final SnmpDeviceProvider provider = new SnmpDeviceProvider();
     private final SnmpController controller = new SnmpControllerAdapter();
     private final DeviceProviderRegistry providerRegistry = new MockDeviceProviderRegistry();
@@ -73,15 +79,26 @@
     protected CoreService coreService = new MockCoreService();
     private final DeviceProviderService deviceProviderService = new MockDeviceProviderService();
     private final TestApplicationId applicationId = new TestApplicationId("TestAppId");
+    private final SnmpProviderConfig snmpProviderConfig = new MockSnmpProviderConfig();
+    private final DeviceId deviceId = DeviceId.deviceId("snmp:1.1.1.1:1");
+    private final DeviceId wrongDeviceId = DeviceId.deviceId("snmp:2.2.2.2:2");
+    private final Set<ConfigFactory> cfgFactories = new HashSet<>();
+    private final Set<NetworkConfigListener> netCfgListeners = new HashSet<>();
     private final NetworkConfigEvent deviceAddedEvent =
             new NetworkConfigEvent(NetworkConfigEvent.Type.CONFIG_ADDED,
                                    null, SnmpProviderConfig.class);
-    private final SnmpProviderConfig snmpProviderConfig = new MockSnmpProviderConfig();
     private final NetworkConfigEvent deviceAddedIrrelevantEvent =
             new NetworkConfigEvent(NetworkConfigEvent.Type.CONFIG_ADDED,
                                    null, BasicDeviceConfig.class);
-    private final DeviceId deviceId = DeviceId.deviceId("snmp:1.1.1.1:1");
-    private final DeviceId wrongDeviceId = DeviceId.deviceId("snmp:2.2.2.2:2");
+    private final NetworkConfigEvent deviceAddedNewEvent =
+            new NetworkConfigEvent(NetworkConfigEvent.Type.CONFIG_ADDED,
+                                   deviceId, SnmpDeviceConfig.class);
+    private final SnmpDeviceConfig config = new SnmpDeviceConfig();
+    //Testing Files
+    private final InputStream jsonStream = SnmpDeviceProviderTest.class
+            .getResourceAsStream("/device.json");
+    private final ObjectMapper mapper = new ObjectMapper();
+    private final String KEY = "snmp";
 
 
     @Before
@@ -92,6 +109,9 @@
         provider.netCfgService = netCfgService;
         provider.deviceStore = deviceStore;
         provider.coreService = coreService;
+        JsonNode jsonNode = mapper.readTree(jsonStream);
+        ConfigApplyDelegate delegate = new MockDelegate();
+        config.init(deviceId, KEY, jsonNode, mapper, delegate);
         provider.activate(null);
     }
 
@@ -99,7 +119,7 @@
     public void testActivate() {
         assertEquals("Incorrect provider service", deviceProviderService, provider.providerService);
         assertEquals("Incorrect application id", applicationId, provider.appId);
-        assertEquals("Incorrect config factory", cfgFactory, provider.factory);
+        assertTrue("Incorrect config factories", cfgFactories.containsAll(provider.factories));
         assertTrue("Incorrect network config listener", netCfgListeners.contains(provider.cfgLister));
 
 
@@ -109,9 +129,9 @@
     public void testDeactivate() {
         this.addDevice();
         provider.deactivate(null);
-        assertAfter(500, () ->
+        assertAfter(DELAY, TEST_DURATION, () ->
                 assertNull("Device should be removed", controller.getDevice(deviceId)));
-        assertNull("Network config factory not removed", cfgFactory);
+        assertTrue("Network config factory not removed", cfgFactories.isEmpty());
         assertFalse("Network config listener not removed", netCfgListeners.contains(provider.cfgLister));
         assertFalse("Provider not unregistered", providerRegistry.getProviders().contains(provider.id()));
         assertNull("Provider registry not removed", provider.providerService);
@@ -129,7 +149,18 @@
         provider.cfgLister.event(deviceAddedEvent);
         AbstractProjectableModel.setDriverService(null, new MockDriverService());
         //FIXME this needs sleep
-        assertAfter(500, () ->
+        assertAfter(DELAY, TEST_DURATION, () ->
+                assertNotNull("Device should be added to controller", controller.getDevice(deviceId)));
+        assertTrue("Device should be reachable", provider.isReachable(deviceId));
+    }
+
+    @Test
+    public void addDeviceNew() {
+        assertTrue("Event should be relevant", provider.cfgLister.isRelevant(deviceAddedNewEvent));
+        provider.cfgLister.event(deviceAddedNewEvent);
+        AbstractProjectableModel.setDriverService(null, new MockDriverService());
+        //FIXME this needs sleep
+        assertAfter(DELAY, TEST_DURATION, () ->
                 assertNotNull("Device should be added to controller", controller.getDevice(deviceId)));
         assertTrue("Device should be reachable", provider.isReachable(deviceId));
     }
@@ -163,19 +194,16 @@
         }
     }
 
-    private ConfigFactory cfgFactory;
-    private Set<NetworkConfigListener> netCfgListeners = new HashSet<>();
-
     private class MockNetworkConfigRegistry extends NetworkConfigRegistryAdapter {
 
         @Override
         public void registerConfigFactory(ConfigFactory configFactory) {
-            cfgFactory = configFactory;
+            cfgFactories.add(configFactory);
         }
 
         @Override
         public void unregisterConfigFactory(ConfigFactory configFactory) {
-            cfgFactory = null;
+            cfgFactories.remove(configFactory);
         }
 
         @Override
@@ -193,10 +221,17 @@
         public <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass) {
             if (configClass.equals(SnmpProviderConfig.class)) {
                 return (C) snmpProviderConfig;
+            } else if (configClass.equals(SnmpDeviceConfig.class)) {
+                return (C) config;
             } else {
                 return (C) new BasicDeviceConfig();
             }
         }
+
+        @Override
+        public <S, C extends Config<S>> Set<S> getSubjects(Class<S> subjectClass, Class<C> configClass) {
+            return ImmutableSet.of((S) deviceId);
+        }
     }
 
     private class MockDeviceStore extends DeviceStoreAdapter {
@@ -249,4 +284,11 @@
     private class MockDriverService extends DriverServiceAdapter {
 
     }
+
+    private class MockDelegate implements ConfigApplyDelegate {
+        @Override
+        public void onApply(Config config) {
+
+        }
+    }
 }
\ No newline at end of file
diff --git a/providers/snmp/device/src/test/resources/device.json b/providers/snmp/device/src/test/resources/device.json
new file mode 100644
index 0000000..cb8b34b
--- /dev/null
+++ b/providers/snmp/device/src/test/resources/device.json
@@ -0,0 +1,8 @@
+{
+  "ip":"1.1.1.1",
+  "port":1,
+  "username":"test",
+  "password":"test",
+  "protocol":"http"
+}
+
