diff --git a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/AppConfigHandler.java b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/AppConfigHandler.java
index f54ee9e..034ddfe 100644
--- a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/AppConfigHandler.java
+++ b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/AppConfigHandler.java
@@ -16,6 +16,8 @@
 package org.onosproject.segmentrouting;
 
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
+import org.onlab.packet.IpPrefix;
 import org.onlab.packet.MacAddress;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.PortNumber;
@@ -62,6 +64,9 @@
         SegmentRoutingAppConfig config = (SegmentRoutingAppConfig) event.config().get();
         deviceService.getAvailableDevices().forEach(device -> {
             populateVRouter(device.id(), getMacAddresses(config));
+            config.blackholeIPs().forEach(ipPrefix -> {
+                srManager.routingRulePopulator.populateDefaultRouteBlackhole(device.id(), ipPrefix);
+            });
         });
     }
 
@@ -86,6 +91,14 @@
 
             revokeVRouter(device.id(), prevMacAddresses);
             populateVRouter(device.id(), macAddresses);
+            Set<IpPrefix> toRemove = Sets.difference(prevConfig.blackholeIPs(), config.blackholeIPs());
+            toRemove.forEach(ipPrefix -> {
+                srManager.routingRulePopulator.removeDefaultRouteBlackhole(device.id(), ipPrefix);
+            });
+            Set<IpPrefix> toAdd = Sets.difference(config.blackholeIPs(), prevConfig.blackholeIPs());
+            toAdd.forEach(ipPrefix -> {
+                srManager.routingRulePopulator.populateDefaultRouteBlackhole(device.id(), ipPrefix);
+            });
         });
 
     }
@@ -100,11 +113,14 @@
         SegmentRoutingAppConfig prevConfig = (SegmentRoutingAppConfig) event.prevConfig().get();
         deviceService.getAvailableDevices().forEach(device -> {
             revokeVRouter(device.id(), getMacAddresses(prevConfig));
+            prevConfig.blackholeIPs().forEach(ipPrefix -> {
+                srManager.routingRulePopulator.removeDefaultRouteBlackhole(device.id(), ipPrefix);
+            });
         });
     }
 
     /**
-     * Populates initial vRouter rules.
+     * Populates initial vRouter and blackhole rules.
      *
      * @param deviceId device ID
      */
@@ -112,6 +128,9 @@
         SegmentRoutingAppConfig config =
                 srManager.cfgService.getConfig(srManager.appId, SegmentRoutingAppConfig.class);
         populateVRouter(deviceId, getMacAddresses(config));
+        config.blackholeIPs().forEach(ipPrefix -> {
+            srManager.routingRulePopulator.populateDefaultRouteBlackhole(deviceId, ipPrefix);
+        });
     }
 
     private void populateVRouter(DeviceId deviceId, Set<MacAddress> pendingAdd) {
@@ -166,7 +185,9 @@
             if (srManager.deviceConfiguration.isEdgeDevice(deviceId)) {
                 return true;
             }
-        } catch (DeviceConfigNotFoundException e) { }
+        } catch (DeviceConfigNotFoundException e) {
+            log.warn("Device configuration for {} is not present.", deviceId);
+        }
         return false;
     }
 }
