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"
+}
+
