diff --git a/apps/routing/src/main/java/org/onosproject/routing/impl/SingleSwitchFibInstaller.java b/apps/routing/src/main/java/org/onosproject/routing/impl/SingleSwitchFibInstaller.java
index 5d38e34..a30c42c 100644
--- a/apps/routing/src/main/java/org/onosproject/routing/impl/SingleSwitchFibInstaller.java
+++ b/apps/routing/src/main/java/org/onosproject/routing/impl/SingleSwitchFibInstaller.java
@@ -35,6 +35,8 @@
 import org.onosproject.incubator.net.intf.Interface;
 import org.onosproject.incubator.net.intf.InterfaceService;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.config.NetworkConfigEvent;
+import org.onosproject.net.config.NetworkConfigListener;
 import org.onosproject.net.config.NetworkConfigService;
 import org.onosproject.net.device.DeviceEvent;
 import org.onosproject.net.device.DeviceListener;
@@ -58,14 +60,13 @@
 import org.onosproject.routing.FibListener;
 import org.onosproject.routing.FibUpdate;
 import org.onosproject.routing.RoutingService;
-import org.onosproject.routing.config.BgpConfig;
+import org.onosproject.routing.config.RouterConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Optional;
 import java.util.Set;
 
 /**
@@ -97,12 +98,13 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected DeviceService deviceService;
 
-    private InnerDeviceListener deviceListener;
+    private InternalDeviceListener deviceListener;
 
     // Device id of data-plane switch - should be learned from config
     private DeviceId deviceId;
 
     private ApplicationId appId;
+    private ApplicationId routerAppId;
 
     // Reference count for how many times a next hop is used by a route
     private final Multiset<IpAddress> nextHopsCount = ConcurrentHashMultiset.create();
@@ -119,29 +121,18 @@
 
     @Activate
     protected void activate() {
-        ApplicationId routerAppId = coreService.getAppId(RoutingService.ROUTER_APP_ID);
-        BgpConfig bgpConfig =
-                networkConfigService.getConfig(routerAppId, RoutingService.CONFIG_CLASS);
-
-        if (bgpConfig == null) {
-            log.error("No BgpConfig found");
-            return;
-        }
-
-        getDeviceConfiguration(bgpConfig);
+        // TODO why are there two of the same app ID?
+        routerAppId = coreService.registerApplication(RoutingService.ROUTER_APP_ID);
 
         appId = coreService.getAppId(RoutingService.ROUTER_APP_ID);
 
-        deviceListener = new InnerDeviceListener();
+        deviceListener = new InternalDeviceListener();
         deviceService.addListener(deviceListener);
 
         routingService.addFibListener(new InternalFibListener());
         routingService.start();
 
-        // Initialize devices now if they are already connected
-        if (deviceService.isAvailable(deviceId)) {
-            processIntfFilters(true, interfaceService.getInterfaces());
-        }
+        updateConfig();
 
         log.info("Started");
     }
@@ -157,35 +148,26 @@
         log.info("Stopped");
     }
 
-    private void getDeviceConfiguration(BgpConfig bgpConfig) {
-        Optional<BgpConfig.BgpSpeakerConfig> bgpSpeaker =
-                bgpConfig.bgpSpeakers().stream().findAny();
+    private void updateConfig() {
+        RouterConfig routerConfig =
+                networkConfigService.getConfig(routerAppId, RoutingService.ROUTER_CONFIG_CLASS);
 
-        if (!bgpSpeaker.isPresent()) {
-            log.error("BGP speaker configuration not found");
+        if (routerConfig == null) {
+            log.info("Router config not available");
             return;
         }
 
-        Optional<IpAddress> peerAddress =
-                bgpSpeaker.get().peers().stream().findAny();
+        deviceId = routerConfig.getControlPlaneConnectPoint().deviceId();
 
-        if (!peerAddress.isPresent()) {
-            log.error("BGP speaker must have peers configured");
-            return;
+        log.info("Router device ID is {}", deviceId);
+
+        updateDevice();
+    }
+
+    private void updateDevice() {
+        if (deviceId != null && deviceService.isAvailable(deviceId)) {
+            processIntfFilters(true, interfaceService.getInterfaces());
         }
-
-        Interface intf = interfaceService.getMatchingInterface(peerAddress.get());
-
-        if (intf == null) {
-            log.error("No interface found for peer");
-            return;
-        }
-
-        // Assume all peers are configured on the same device - this is required
-        // by the BGP router
-        deviceId = intf.connectPoint().deviceId();
-
-        log.info("Router dpid: {}", deviceId);
     }
 
     private void updateFibEntry(Collection<FibUpdate> updates) {
@@ -384,9 +366,11 @@
         }
     }
 
-
-    // Triggers driver setup when a device is (re)detected.
-    private class InnerDeviceListener implements DeviceListener {
+    /**
+     * Listener for device events used to trigger driver setup when a device is
+     * (re)detected.
+     */
+    private class InternalDeviceListener implements DeviceListener {
         @Override
         public void event(DeviceEvent event) {
             switch (event.type()) {
@@ -411,4 +395,26 @@
             }
         }
     }
+
+    /**
+     * Listener for network config events.
+     */
+    private class InternalNetworkConfigListener implements NetworkConfigListener {
+        @Override
+        public void event(NetworkConfigEvent event) {
+            if (event.subject().equals(RoutingService.ROUTER_CONFIG_CLASS)) {
+                switch (event.type()) {
+                case CONFIG_ADDED:
+                case CONFIG_UPDATED:
+                    updateConfig();
+                    break;
+                case CONFIG_REGISTERED:
+                case CONFIG_UNREGISTERED:
+                case CONFIG_REMOVED:
+                default:
+                    break;
+                }
+            }
+        }
+    }
 }
