diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/NullProviders.java b/providers/null/src/main/java/org/onosproject/provider/nil/NullProviders.java
index 68c536b..fb1823d 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/NullProviders.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/NullProviders.java
@@ -54,6 +54,7 @@
 import org.slf4j.Logger;
 
 import java.util.Dictionary;
+import java.util.Objects;
 import java.util.Properties;
 
 import static com.google.common.base.Strings.isNullOrEmpty;
@@ -116,7 +117,6 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected PacketProviderRegistry packetProviderRegistry;
 
-
     private final NullDeviceProvider deviceProvider = new NullDeviceProvider();
     private final NullLinkProvider linkProvider = new NullLinkProvider();
     private final NullHostProvider hostProvider = new NullHostProvider();
@@ -138,7 +138,7 @@
 
     private static final String DEFAULT_TOPO_SHAPE = "configured";
     @Property(name = "topoShape", value = DEFAULT_TOPO_SHAPE,
-            label = "Topology shape: configured, linear, reroute, tree, spineleaf, mesh")
+            label = "Topology shape: configured, linear, reroute, tree, spineleaf, mesh, grid")
     private String topoShape = DEFAULT_TOPO_SHAPE;
 
     private static final int DEFAULT_DEVICE_COUNT = 10;
@@ -238,7 +238,7 @@
         }
 
         // Any change in the following parameters implies hard restart
-        if (newEnabled != enabled || !newTopoShape.equals(topoShape) ||
+        if (newEnabled != enabled || !Objects.equals(newTopoShape, topoShape) ||
                 newDeviceCount != deviceCount || newHostCount != hostCount) {
             enabled = newEnabled;
             topoShape = newTopoShape;
@@ -257,7 +257,7 @@
         }
 
         // Any change in mastership implies just reassignments.
-        if (!newMastership.equals(mastership)) {
+        if (!Objects.equals(newMastership, mastership)) {
             mastership = newMastership;
             reassignMastership();
         }
@@ -290,6 +290,29 @@
         }
     }
 
+    /**
+     * Fails the specified device.
+     *
+     * @param deviceId device identifier
+     */
+    public void failDevice(DeviceId deviceId) {
+        if (enabled) {
+            topologyMutationDriver.failDevice(deviceId);
+        }
+    }
+
+    /**
+     * Repairs the specified device.
+     *
+     * @param deviceId device identifier
+     */
+    public void repairDevice(DeviceId deviceId) {
+        if (enabled) {
+            topologyMutationDriver.repairDevice(deviceId);
+        }
+    }
+
+
     // Resets simulation based on the current configuration parameters.
     private void restartSimulation() {
         tearDown();
@@ -310,7 +333,8 @@
         packetProvider.start(packetRate, hostService, deviceService,
                              packetProviderService);
         topologyMutationDriver.start(mutationRate, linkService, deviceService,
-                                     linkProviderService);
+                                     linkProviderService, deviceProviderService,
+                                     simulator);
     }
 
     // Selects the simulator based on the specified name.
@@ -329,6 +353,8 @@
             return new SpineLeafTopologySimulator();
         } else if (topoShape.matches("mesh([,].*|$)")) {
             return new MeshTopologySimulator();
+        } else if (topoShape.matches("grid([,].*|$)")) {
+            return new GridTopologySimulator();
         } else {
             return new ConfiguredTopologySimulator();
         }
@@ -398,7 +424,8 @@
         @Override
         public boolean isReachable(DeviceId deviceId) {
             return topoShape.equals("configured") ||
-                    (simulator != null && simulator.contains(deviceId));
+                    (simulator != null && simulator.contains(deviceId) &&
+                            topologyMutationDriver.isReachable(deviceId));
         }
 
         @Override
