diff --git a/apps/routing/src/main/java/org/onosproject/routing/impl/ControlPlaneRedirectManager.java b/apps/routing/src/main/java/org/onosproject/routing/impl/ControlPlaneRedirectManager.java
index 1e61cf6..5cd78a9 100644
--- a/apps/routing/src/main/java/org/onosproject/routing/impl/ControlPlaneRedirectManager.java
+++ b/apps/routing/src/main/java/org/onosproject/routing/impl/ControlPlaneRedirectManager.java
@@ -136,6 +136,8 @@
         interfaceService.addListener(interfaceListener);
 
         readConfig();
+
+        // FIXME There can be an issue when this component is deactivated before vRouter
         applicationService.registerDeactivateHook(this.appId, () -> provisionDevice(false));
     }
 
diff --git a/apps/routing/src/main/java/org/onosproject/routing/impl/DirectHostManager.java b/apps/routing/src/main/java/org/onosproject/routing/impl/DirectHostManager.java
index 7e0b2ac..d5c0d27 100644
--- a/apps/routing/src/main/java/org/onosproject/routing/impl/DirectHostManager.java
+++ b/apps/routing/src/main/java/org/onosproject/routing/impl/DirectHostManager.java
@@ -113,13 +113,8 @@
     @Activate
     public void activate(ComponentContext context) {
         componentConfigService.registerProperties(getClass());
-        modified(context);
-
         appId = coreService.registerApplication(APP_NAME);
-
-        if (enabled) {
-            enable();
-        }
+        modified(context);
     }
 
     @Modified
@@ -156,7 +151,9 @@
 
     @Deactivate
     public void deactivate() {
-        disable();
+        if (enabled) {
+            disable();
+        }
 
         componentConfigService.unregisterProperties(getClass(), false);
     }
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 dcdba8e..66767a0 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
@@ -178,6 +178,8 @@
 
         updateConfig();
 
+        // FIXME: There can be an issue when this component is deactivated before vRouter.
+        //        This will be addressed in CORD-710.
         applicationService.registerDeactivateHook(vrouterAppId, () -> cleanUp());
 
         log.info("Started");
@@ -185,7 +187,10 @@
 
     @Deactivate
     protected void deactivate() {
-        routeService.removeListener(routeListener);
+         // FIXME: This will also remove flows when an instance goes down.
+         //        This is a temporary solution and should be addressed in CORD-710.
+        cleanUp();
+
         deviceService.removeListener(deviceListener);
         interfaceService.removeListener(internalInterfaceList);
         networkConfigService.removeListener(configListener);
@@ -292,11 +297,10 @@
     }
 
     private Set<Interface> filterInterfaces(List<String> interfaces) {
-        Set<Interface> intfs = interfaceService.getInterfaces().stream()
+        return interfaceService.getInterfaces().stream()
                 .filter(intf -> intf.connectPoint().deviceId().equals(deviceId))
                 .filter(intf -> interfaces.contains(intf.name()))
                 .collect(Collectors.toSet());
-        return intfs;
     }
 
     private void updateRoute(ResolvedRoute route) {
diff --git a/apps/vrouter/src/main/java/org/onosproject/vrouter/Vrouter.java b/apps/vrouter/src/main/java/org/onosproject/vrouter/Vrouter.java
index 562279f..afdea06 100644
--- a/apps/vrouter/src/main/java/org/onosproject/vrouter/Vrouter.java
+++ b/apps/vrouter/src/main/java/org/onosproject/vrouter/Vrouter.java
@@ -15,19 +15,24 @@
  */
 package org.onosproject.vrouter;
 
-import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Modified;
+import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.onlab.util.Tools;
 import org.onosproject.cfg.ComponentConfigService;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.incubator.component.ComponentService;
+import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Dictionary;
 import java.util.List;
 
 /**
@@ -39,35 +44,46 @@
     private final Logger log = LoggerFactory.getLogger(getClass());
 
     private static final String APP_NAME = "org.onosproject.vrouter";
+    private static final String FPM_MANAGER = "org.onosproject.routing.fpm.FpmManager";
+    private static final String FIB_INSTALLER = "org.onosproject.routing.impl.SingleSwitchFibInstaller";
+    private static final String CP_REDIRECT = "org.onosproject.routing.impl.ControlPlaneRedirectManager";
+    private static final String DIRECT_HOST_MGR = "org.onosproject.routing.impl.DirectHostManager";
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected CoreService coreService;
+    private CoreService coreService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected ComponentService componentService;
+    private ComponentService componentService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected ComponentConfigService componentConfigService;
+    private ComponentConfigService componentConfigService;
+
+    /**
+     * vRouter will push flows to the switches when receiving routes by enabling
+     * FIB installer.
+     * <p>
+     * It should be turned off when vRouter is deployed in a scenario where
+     * other components that pushes the routes.
+     */
+    @Property(boolValue = true,
+            label = "Enable single switch fib installer; default is true")
+    private static final String FIB_INSTALLED_ENABLED = "fibInstalledEnabled";
 
     private ApplicationId appId;
 
-    private final List<String> components = ImmutableList.<String>builder()
-            .add("org.onosproject.routing.fpm.FpmManager")
-            .add("org.onosproject.routing.impl.SingleSwitchFibInstaller")
-            .add("org.onosproject.routing.impl.ControlPlaneRedirectManager")
-            .add("org.onosproject.routing.impl.DirectHostManager")
-            .build();
-
+    private List<String> baseComponents = Lists.newArrayList(FPM_MANAGER, CP_REDIRECT, DIRECT_HOST_MGR);
 
     @Activate
-    protected void activate() {
+    protected void activate(ComponentContext context) {
         appId = coreService.registerApplication(APP_NAME);
+        componentConfigService.registerProperties(getClass());
 
         componentConfigService.preSetProperty(
                 "org.onosproject.incubator.store.routing.impl.RouteStoreImpl",
                 "distributed", "true");
 
-        components.forEach(name -> componentService.activate(appId, name));
+        baseComponents.forEach(name -> componentService.activate(appId, name));
+        modified(context);
 
         log.info("Started");
     }
@@ -81,4 +97,20 @@
         log.info("Stopped");
     }
 
+    @Modified
+    private void modified(ComponentContext context) {
+        Dictionary<?, ?> properties = context.getProperties();
+        if (properties == null) {
+            return;
+        }
+
+        boolean fibInstallerEnabled = Boolean.parseBoolean(Tools.get(properties, FIB_INSTALLED_ENABLED));
+        log.info("fibInstallerEnabled set to {}", fibInstallerEnabled);
+
+        if (fibInstallerEnabled) {
+            componentService.activate(appId, FIB_INSTALLER);
+        } else {
+            componentService.deactivate(appId, FIB_INSTALLER);
+        }
+    }
 }
