diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/CustomTopologySimulator.java b/providers/null/src/main/java/org/onosproject/provider/nil/CustomTopologySimulator.java
index 52883a2..e7a5788 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/CustomTopologySimulator.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/CustomTopologySimulator.java
@@ -122,12 +122,12 @@
     protected void createHosts() {
     }
 
-    /**
-     * Resets the device and host ID seeds to the default values. That is, the
-     * next assigned values will start from 1 again.
-     */
-    public void resetIdSeeds() {
+    @Override
+    public void tearDownTopology() {
+        super.tearDownTopology();
         nextDeviceId = 0;
         nextHostId = 0;
+        nameToId.clear();
     }
+
 }
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 7313f12..83471a5 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
@@ -385,6 +385,7 @@
             delay(500);
             simulator.tearDownTopology();
             simulator = null;
+
         }
     }
 
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java b/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java
index 2c79288..98efd7c 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java
@@ -23,6 +23,7 @@
 import org.onlab.packet.VlanId;
 import org.onosproject.cluster.ClusterService;
 import org.onosproject.cluster.NodeId;
+import org.onosproject.mastership.MastershipAdminService;
 import org.onosproject.mastership.MastershipService;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Device;
@@ -58,6 +59,7 @@
 import static org.onlab.util.Tools.toHex;
 import static org.onosproject.net.HostId.hostId;
 import static org.onosproject.net.Link.Type.DIRECT;
+import static org.onosproject.net.MastershipRole.MASTER;
 import static org.onosproject.net.PortNumber.portNumber;
 import static org.onosproject.net.device.DeviceEvent.Type.*;
 import static org.onosproject.provider.nil.NullProviders.SCHEME;
@@ -78,6 +80,7 @@
 
     protected ClusterService clusterService;
     protected MastershipService mastershipService;
+    protected MastershipAdminService mastershipAdminService;
 
     protected DeviceAdminService deviceService;
     protected HostService hostService;
@@ -93,7 +96,7 @@
 
     protected final List<DeviceId> deviceIds = Lists.newArrayList();
 
-    private DeviceListener deviceEventCounter = new DeviceEventCounter();
+    private final DeviceListener deviceEventCounter = new DeviceEventCounter();
 
     /**
      * Initializes a new topology simulator with access to the specified service
@@ -118,6 +121,7 @@
 
         this.clusterService = directory.get(ClusterService.class);
         this.mastershipService = directory.get(MastershipService.class);
+        this.mastershipAdminService = directory.get(MastershipAdminService.class);
 
         this.deviceService = directory.get(DeviceAdminService.class);
         this.hostService = directory.get(HostService.class);
@@ -144,6 +148,7 @@
      * Sets up network topology simulation.
      */
     public void setUpTopology() {
+        deviceIds.clear();
         prepareForDeviceEvents(deviceCount);
         createDevices();
         waitForDeviceEvents();
@@ -204,6 +209,7 @@
                                              "ON.Lab", "0.1", "0.1", "1234",
                                              new ChassisId(chassisId));
         deviceIds.add(id);
+        mastershipAdminService.setRoleSync(localNode, id, MASTER);
         deviceProviderService.deviceConnected(id, desc);
         deviceProviderService.updatePorts(id, buildPorts(portCount));
     }
@@ -326,6 +332,8 @@
         prepareForDeviceEvents(deviceIds.size());
         deviceIds.forEach(deviceProviderService::deviceDisconnected);
         waitForDeviceEvents();
+        mastershipService.getDevicesOf(localNode).forEach(mastershipService::relinquishMastership);
+        deviceIds.forEach(mastershipService::relinquishMastership);
         deviceIds.clear();
     }
 
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/cli/CreateNullEntity.java b/providers/null/src/main/java/org/onosproject/provider/nil/cli/CreateNullEntity.java
index ed68dfc..368fa3d 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/cli/CreateNullEntity.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/cli/CreateNullEntity.java
@@ -17,6 +17,7 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.primitives.Longs;
+import org.onlab.util.Tools;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
@@ -96,11 +97,19 @@
         EdgePortService eps = get(EdgePortService.class);
         HostService hs = get(HostService.class);
 
-        List<ConnectPoint> points = ImmutableList
-                .sortedCopyOf((l, r) -> Longs.compare(l.port().toLong(), r.port().toLong()),
-                              eps.getEdgePoints(deviceId));
-        return points.stream()
-                .filter(p -> !Objects.equals(p, otherPoint) && hs.getConnectedHosts(p).isEmpty())
-                .findFirst().orElse(null);
+        // As there may be a slight delay in edge service getting updated, retry a few times
+        for (int i = 0; i < 3; i++) {
+            List<ConnectPoint> points = ImmutableList
+                    .sortedCopyOf((l, r) -> Longs.compare(l.port().toLong(), r.port().toLong()),
+                                  eps.getEdgePoints(deviceId));
+            ConnectPoint point = points.stream()
+                    .filter(p -> !Objects.equals(p, otherPoint) && hs.getConnectedHosts(p).isEmpty())
+                    .findFirst().orElse(null);
+            if (point != null) {
+                return point;
+            }
+            Tools.delay(100);
+        }
+        return null;
     }
 }
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/cli/NullControlCommand.java b/providers/null/src/main/java/org/onosproject/provider/nil/cli/NullControlCommand.java
index bfca14e..0b3fbe3 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/cli/NullControlCommand.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/cli/NullControlCommand.java
@@ -19,7 +19,6 @@
 import org.apache.karaf.shell.commands.Command;
 import org.onosproject.cfg.ComponentConfigService;
 import org.onosproject.cli.AbstractShellCommand;
-import org.onosproject.provider.nil.CustomTopologySimulator;
 import org.onosproject.provider.nil.NullProviders;
 import org.onosproject.provider.nil.TopologySimulator;
 
@@ -32,38 +31,32 @@
         description = "Starts or stops topology simulation")
 public class NullControlCommand extends AbstractShellCommand {
 
-    private static final String CUSTOM = "custom";
-
     @Argument(index = 0, name = "cmd", description = "Control command: start/stop",
-            required = true, multiValued = false)
+            required = true)
     String cmd = null;
 
     @Argument(index = 1, name = "topoShape",
             description = "Topology shape: e.g. configured, linear, reroute, " +
-                    "centipede, tree, spineleaf, mesh, fattree, custom",
-            required = false, multiValued = false)
+                    "centipede, tree, spineleaf, mesh, fattree, custom")
     String topoShape = null;
 
     @Override
     protected void execute() {
         ComponentConfigService service = get(ComponentConfigService.class);
+        // If there is an existing topology; make sure it's stopped before restarting
+        if (cmd.equals(START)) {
+            NullProviders npService = get(NullProviders.class);
+            TopologySimulator simulator = npService.currentSimulator();
+            if (simulator != null) {
+                simulator.tearDownTopology();
+            }
+        }
+
         if (topoShape != null) {
             service.setProperty(NullProviders.class.getName(), "topoShape", topoShape);
         }
         service.setProperty(NullProviders.class.getName(), "enabled",
                             cmd.equals(START) ? "true" : "false");
-
-        // If we are re-starting the "custom" topology, reset the counts
-        //  on the auto-assigned IDs for null-devices and null-hosts, so that
-        //  scripts can rely on consistent assignment of IDs to nodes.
-        if (CUSTOM.equals(topoShape) && START.equals(cmd)) {
-            NullProviders npService = get(NullProviders.class);
-            TopologySimulator simulator = npService.currentSimulator();
-            if (simulator instanceof CustomTopologySimulator) {
-                CustomTopologySimulator sim = (CustomTopologySimulator) simulator;
-                sim.resetIdSeeds();
-            }
-        }
     }
 
 }
