diff --git a/cli/src/main/java/org/onosproject/cli/net/WipeOutCommand.java b/cli/src/main/java/org/onosproject/cli/net/WipeOutCommand.java
index ddd9970..61ea43d 100644
--- a/cli/src/main/java/org/onosproject/cli/net/WipeOutCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/WipeOutCommand.java
@@ -115,7 +115,12 @@
     private void wipeOutLayouts() {
         print("Wiping UI layouts");
         UiTopoLayoutService service = get(UiTopoLayoutService.class);
-        service.getLayouts().forEach(service::removeLayout);
+        // wipe out all layouts except the default, which should always be there
+        service.getLayouts().forEach(l -> {
+            if (!l.id().isDefault()) {
+                service.removeLayout(l);
+            }
+        });
     }
 
     private void wipeOutRegions() {
diff --git a/core/api/src/main/java/org/onosproject/ui/UiTopoLayoutService.java b/core/api/src/main/java/org/onosproject/ui/UiTopoLayoutService.java
index 0f2c273..287cc43 100644
--- a/core/api/src/main/java/org/onosproject/ui/UiTopoLayoutService.java
+++ b/core/api/src/main/java/org/onosproject/ui/UiTopoLayoutService.java
@@ -57,6 +57,15 @@
     UiTopoLayout getLayout(UiTopoLayoutId layoutId);
 
     /**
+     * Returns the set of peer layouts of the specified layout. That is,
+     * those layouts that share the same parent.
+     *
+     * @param layoutId layout identifier
+     * @return set of peer layouts; empty set if layout has no peers
+     */
+    Set<UiTopoLayout> getPeers(UiTopoLayoutId layoutId);
+
+    /**
      * Returns the set of the child layouts of the specified layout.
      *
      * @param layoutId layout identifier
diff --git a/core/api/src/main/java/org/onosproject/ui/model/topo/UiRegion.java b/core/api/src/main/java/org/onosproject/ui/model/topo/UiRegion.java
index 023300c..c478424 100644
--- a/core/api/src/main/java/org/onosproject/ui/model/topo/UiRegion.java
+++ b/core/api/src/main/java/org/onosproject/ui/model/topo/UiRegion.java
@@ -29,12 +29,27 @@
 import java.util.Set;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
+import static org.onosproject.net.region.RegionId.regionId;
 
 /**
  * Represents a region.
  */
 public class UiRegion extends UiNode {
 
+    private static final String NULL_NAME = "<null-region>";
+
+    /**
+     * The identifier for the null-region. That is, a container for devices,
+     * hosts, and links for those that belong to no region.
+     */
+    public static final RegionId NULL_ID = regionId(NULL_NAME);
+
+    private static final String[] DEFAULT_LAYER_TAGS = {
+            UiNode.LAYER_OPTICAL,
+            UiNode.LAYER_PACKET,
+            UiNode.LAYER_DEFAULT
+    };
+
     // loose bindings to things in this region
     private final Set<DeviceId> deviceIds = new HashSet<>();
     private final Set<HostId> hostIds = new HashSet<>();
@@ -53,10 +68,12 @@
      * @param region   backing region
      */
     public UiRegion(UiTopology topology, Region region) {
+        // Implementation Note: if region is null, this UiRegion is being used
+        //  as a container for devices, hosts, links that belong to no region.
         this.topology = topology;
         this.region = region;
-        // unless told otherwise, we'll use a single, default layer
-        layerOrder.add(UiNode.LAYER_DEFAULT);
+
+        setLayerOrder(DEFAULT_LAYER_TAGS);
     }
 
     @Override
@@ -83,7 +100,7 @@
      * @return region ID
      */
     public RegionId id() {
-        return region.id();
+        return region == null ? NULL_ID : region.id();
     }
 
     @Override
@@ -93,11 +110,12 @@
 
     @Override
     public String name() {
-        return region.name();
+        return region == null ? NULL_NAME : region.name();
     }
 
     /**
-     * Returns the region instance backing this UI region.
+     * Returns the region instance backing this UI region. If this instance
+     * represents the "null-region", the value returned will be null.
      *
      * @return the backing region instance
      */
@@ -132,7 +150,17 @@
      * @return region type
      */
     public Region.Type type() {
-        return region.type();
+        return region == null ? null : region.type();
+    }
+
+
+    /**
+     * Returns the count of devices in this region.
+     *
+     * @return the device count
+     */
+    public int deviceCount() {
+        return deviceIds.size();
     }
 
     /**
@@ -195,7 +223,7 @@
      * optical layer should be rendered "below" nodes in the packet layer,
      * this method should return:
      * <pre>
-     * [UiNode.LAYER_OPTICAL, UiNode.LAYER_PACKET]
+     * [UiNode.LAYER_OPTICAL, UiNode.LAYER_PACKET, UiNode.LAYER_DEFAULT]
      * </pre>
      *
      * @return layer ordering
diff --git a/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayoutId.java b/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayoutId.java
index 289cacd..3dea4bb 100644
--- a/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayoutId.java
+++ b/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayoutId.java
@@ -23,10 +23,13 @@
  */
 public final class UiTopoLayoutId extends Identifier<String> {
 
+    private static final String DEFAULT_STR = "_default_";
+
     /**
      * Default topology layout identifier.
      */
-    public static final UiTopoLayoutId DEFAULT_ID = UiTopoLayoutId.layoutId("_default_");
+    public static final UiTopoLayoutId DEFAULT_ID =
+            UiTopoLayoutId.layoutId(DEFAULT_STR);
 
     // For serialization
     private UiTopoLayoutId() {
@@ -45,4 +48,13 @@
     public static UiTopoLayoutId layoutId(String value) {
         return new UiTopoLayoutId(value);
     }
+
+    /**
+     * Returns true if this is the identifier for the default layout.
+     *
+     * @return true if this is the default layout identifier
+     */
+    public boolean isDefault() {
+        return DEFAULT_STR.equals(identifier);
+    }
 }
diff --git a/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopology.java b/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopology.java
index 5ce91da..dd601eb 100644
--- a/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopology.java
+++ b/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopology.java
@@ -61,6 +61,9 @@
     private final Map<HostId, UiHost> hostLookup = new HashMap<>();
     private final Map<UiLinkId, UiLink> linkLookup = new HashMap<>();
 
+    // a container for devices, hosts, etc. belonging to no region
+    private final UiRegion nullRegion = new UiRegion(this, null);
+
 
     @Override
     public String toString() {
@@ -89,6 +92,8 @@
         deviceLookup.clear();
         hostLookup.clear();
         linkLookup.clear();
+
+        nullRegion.destroy();
     }
 
 
@@ -145,6 +150,16 @@
     }
 
     /**
+     * Returns a reference to the null-region. That is, the container for
+     * devices, hosts, and links that belong to no region.
+     *
+     * @return the null-region
+     */
+    public UiRegion nullRegion() {
+        return nullRegion;
+    }
+
+    /**
      * Returns the region with the specified identifier, or null if
      * no such region exists.
      *
@@ -186,6 +201,15 @@
     }
 
     /**
+     * Returns all devices in the model.
+     *
+     * @return all devices
+     */
+    public Set<UiDevice> allDevices() {
+        return new HashSet<>(deviceLookup.values());
+    }
+
+    /**
      * Returns the device with the specified identifier, or null if
      * no such device exists.
      *
diff --git a/tools/test/topos/regions-topo-2 b/tools/test/topos/regions-topo-2
index 5a18c91..befed3b 100755
--- a/tools/test/topos/regions-topo-2
+++ b/tools/test/topos/regions-topo-2
@@ -41,18 +41,18 @@
 region-add r3 Region3 CAMPUS ${host}
 
 region-add-devices r1 \
-    of:0000000000000002 \
-    of:0000000000000003 \
-    of:0000000000000004
+    null:0000000000000002 \
+    null:0000000000000003 \
+    null:0000000000000004
 
 region-add-devices r2 \
-    of:0000000000000005 \
-    of:0000000000000006
+    null:0000000000000005 \
+    null:0000000000000006
 
 region-add-devices r3 \
-    of:0000000000000007 \
-    of:0000000000000008 \
-    of:0000000000000009
+    null:0000000000000007 \
+    null:0000000000000008 \
+    null:0000000000000009
 
 regions
 
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2Jsonifier.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2Jsonifier.java
index df6dba9..02df84c 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2Jsonifier.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2Jsonifier.java
@@ -181,7 +181,9 @@
             return payload;
         }
         payload.put("id", region.idAsString());
-        payload.set("subregions", jsonSubRegions(subRegions));
+        if (subRegions != null) {
+            payload.set("subregions", jsonSubRegions(subRegions));
+        }
 
         List<String> layerTags = region.layerOrder();
         List<Set<UiNode>> splitDevices = splitByLayer(layerTags, region.devices());
@@ -226,31 +228,6 @@
         return result;
     }
 
-    /**
-     * Returns a JSON payload that encapsulates the devices, hosts, links that
-     * do not belong to any region.
-     *
-     * @param oDevices  orphan devices
-     * @param oHosts    orphan hosts
-     * @param oLinks    orphan links
-     * @param layerTags layer tags
-     * @return a JSON representation of the data
-     */
-    ObjectNode orphans(Set<UiDevice> oDevices, Set<UiHost> oHosts,
-                       Set<UiLink> oLinks, List<String> layerTags) {
-
-        ObjectNode payload = objectNode();
-
-        List<Set<UiNode>> splitDevices = splitByLayer(layerTags, oDevices);
-        List<Set<UiNode>> splitHosts = splitByLayer(layerTags, oHosts);
-
-        payload.set("devices", jsonGrouped(splitDevices));
-        payload.set("hosts", jsonGrouped(splitHosts));
-        payload.set("links", jsonLinks(oLinks));
-        payload.set("layerOrder", jsonStrings(layerTags));
-
-        return payload;
-    }
 
     private ObjectNode json(UiNode node) {
         if (node instanceof UiRegion) {
@@ -270,7 +247,7 @@
                 .put("id", device.idAsString())
                 .put("type", device.type())
                 .put("online", device.isOnline())
-                .put("master", device.master().toString())
+                .put("master", nullIsEmpty(device.master()))
                 .put("layer", device.layer());
 
         // TODO: complete device details
@@ -303,7 +280,8 @@
 
     private ObjectNode jsonClosedRegion(UiRegion region) {
         return objectNode()
-                .put("id", region.idAsString());
+                .put("id", region.idAsString())
+                .put("nDevs", region.deviceCount());
         // TODO: complete closed-region details
     }
 
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2ViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2ViewMessageHandler.java
index 7f44244..5449d93 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2ViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2ViewMessageHandler.java
@@ -17,7 +17,6 @@
 package org.onosproject.ui.impl.topo;
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import org.onlab.osgi.ServiceDirectory;
 import org.onosproject.ui.RequestHandler;
@@ -25,9 +24,6 @@
 import org.onosproject.ui.UiMessageHandler;
 import org.onosproject.ui.impl.UiWebSocket;
 import org.onosproject.ui.model.topo.UiClusterMember;
-import org.onosproject.ui.model.topo.UiDevice;
-import org.onosproject.ui.model.topo.UiHost;
-import org.onosproject.ui.model.topo.UiLink;
 import org.onosproject.ui.model.topo.UiRegion;
 import org.onosproject.ui.model.topo.UiTopoLayout;
 import org.slf4j.Logger;
@@ -37,8 +33,6 @@
 import java.util.List;
 import java.util.Set;
 
-import static org.onosproject.ui.model.topo.UiNode.LAYER_DEFAULT;
-
 /*
  NOTES:
 
@@ -69,7 +63,6 @@
     private static final String CURRENT_LAYOUT = "topo2CurrentLayout";
     private static final String CURRENT_REGION = "topo2CurrentRegion";
     private static final String PEER_REGIONS = "topo2PeerRegions";
-    private static final String ORPHANS = "topo2Orphans";
     private static final String TOPO_START_DONE = "topo2StartDone";
 
 
@@ -109,6 +102,12 @@
 
             log.debug("topo2Start: {}", payload);
 
+            // this may be a little heavyweight, but it might be safer to do
+            //  this than make assumptions about the order in which devices
+            //  and regions are added... and thus internal linkages set up
+            //  correctly
+            topoSession.refreshModel();
+
             // this is the list of ONOS cluster members
             List<UiClusterMember> instances = topoSession.getAllInstances();
             sendMessage(ALL_INSTANCES, t2json.instances(instances));
@@ -131,14 +130,7 @@
             peersPayload.set("peers", t2json.closedRegions(peers));
             sendMessage(PEER_REGIONS, peersPayload);
 
-            // return devices, hosts, links belonging to no region
-            Set<UiDevice> oDevices = topoSession.getOrphanDevices();
-            Set<UiHost> oHosts = topoSession.getOrphanHosts();
-            Set<UiLink> oLinks = topoSession.getOrphanLinks();
-            List<String> oLayers = getOrphanLayerOrder();
-            sendMessage(ORPHANS, t2json.orphans(oDevices, oHosts, oLinks, oLayers));
-
-            // finally, tell the UI that we are done
+            // finally, tell the UI that we are done : TODO review / delete??
             sendMessage(TOPO_START_DONE, null);
 
 
@@ -154,14 +146,6 @@
 
     }
 
-    // TODO: we need to decide on how this should really get populated.
-    // For example, to be "backward compatible", this should really be
-    //  [ LAYER_OPTICAL, LAYER_PACKET, LAYER_DEFAULT ]
-    private List<String> getOrphanLayerOrder() {
-        // NOTE that LAYER_DEFAULT must always be last in the array
-        return ImmutableList.of(LAYER_DEFAULT);
-    }
-
     private final class Topo2Stop extends RequestHandler {
         private Topo2Stop() {
             super(TOPO2_STOP);
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/UiTopoLayoutManager.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/UiTopoLayoutManager.java
index a597f24..28e345c 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/UiTopoLayoutManager.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/UiTopoLayoutManager.java
@@ -34,6 +34,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Collections;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
@@ -110,6 +111,21 @@
     }
 
     @Override
+    public Set<UiTopoLayout> getPeers(UiTopoLayoutId layoutId) {
+        checkNotNull(layoutId, ID_NULL);
+        UiTopoLayout layout = layoutMap.get(layoutId);
+        if (layout == null) {
+            return Collections.emptySet();
+        }
+
+        UiTopoLayoutId parentId = layout.parent();
+        return layoutMap.values().stream()
+                .filter(l -> !Objects.equals(l.id(), layoutId) &&
+                        Objects.equals(l.parent(), parentId))
+                .collect(Collectors.toSet());
+    }
+
+    @Override
     public Set<UiTopoLayout> getChildren(UiTopoLayoutId layoutId) {
         checkNotNull(layoutId, ID_NULL);
         return layoutMap.values().stream()
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/UiTopoSession.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/UiTopoSession.java
index 611a22d..47907d4 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/UiTopoSession.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/UiTopoSession.java
@@ -16,21 +16,19 @@
 
 package org.onosproject.ui.impl.topo;
 
+import org.onosproject.net.region.RegionId;
 import org.onosproject.ui.UiTopoLayoutService;
 import org.onosproject.ui.impl.UiWebSocket;
 import org.onosproject.ui.impl.topo.model.UiModelEvent;
 import org.onosproject.ui.impl.topo.model.UiModelListener;
 import org.onosproject.ui.impl.topo.model.UiSharedTopologyModel;
 import org.onosproject.ui.model.topo.UiClusterMember;
-import org.onosproject.ui.model.topo.UiDevice;
-import org.onosproject.ui.model.topo.UiHost;
-import org.onosproject.ui.model.topo.UiLink;
 import org.onosproject.ui.model.topo.UiRegion;
 import org.onosproject.ui.model.topo.UiTopoLayout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -167,23 +165,23 @@
      * @return region that the layout is based upon
      */
     public UiRegion getRegion(UiTopoLayout layout) {
-        return sharedModel.getRegion(layout.regionId());
+        RegionId rid = layout.regionId();
+        return rid == null ? sharedModel.getNullRegion() : sharedModel.getRegion(rid);
     }
 
     /**
      * Returns the regions that are "peers" to this region. That is, based on
      * the layout the user is viewing, all the regions that are associated with
-     * layouts that are children of the parent layout to this layout.
+     * layouts that share the same parent layout as this layout.
      *
      * @param layout the layout being viewed
      * @return all regions that are "siblings" to this layout's region
      */
     public Set<UiRegion> getPeerRegions(UiTopoLayout layout) {
-        UiRegion currentRegion = getRegion(layout);
-
-        // TODO: consult topo layout service to get hierarchy info...
-        // TODO: then consult shared model to get regions
-        return Collections.emptySet();
+        Set<UiTopoLayout> peerLayouts = layoutService.getPeers(layout.id());
+        Set<UiRegion> peers = new HashSet<>();
+        peerLayouts.forEach(l -> peers.add(sharedModel.getRegion(l.regionId())));
+        return peers;
     }
 
     /**
@@ -193,42 +191,16 @@
      * @return all regions that are "contained within" this layout's region
      */
     public Set<UiRegion> getSubRegions(UiTopoLayout layout) {
-        UiRegion currentRegion = getRegion(layout);
-
-        // TODO: consult topo layout service to get child layouts...
-        // TODO: then consult shared model to get regions
-        return Collections.emptySet();
-    }
-
-
-    /**
-     * Returns all devices that are not in a region.
-     *
-     * @return all devices not in a region
-     */
-    public Set<UiDevice> getOrphanDevices() {
-        // TODO: get devices with no region
-        return Collections.emptySet();
+        Set<UiTopoLayout> kidLayouts = layoutService.getChildren(layout.id());
+        Set<UiRegion> kids = new HashSet<>();
+        kidLayouts.forEach(l -> kids.add(sharedModel.getRegion(l.regionId())));
+        return kids;
     }
 
     /**
-     * Returns all hosts that are not in a region.
-     *
-     * @return all hosts not in a region
+     * Refreshes the model's internal state.
      */
-    public Set<UiHost> getOrphanHosts() {
-        // TODO: get hosts with no region
-        return Collections.emptySet();
+    public void refreshModel() {
+        sharedModel.refresh();
     }
-
-    /**
-     * Returns all links that are not in a region.
-     *
-     * @return all links not in a region
-     */
-    public Set<UiLink> getOrphanLinks() {
-        // TODO: get links with no region
-        return Collections.emptySet();
-    }
-
 }
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/ModelCache.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/ModelCache.java
index 8754550..8647c59 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/ModelCache.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/ModelCache.java
@@ -41,6 +41,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -169,18 +170,38 @@
         // TODO: post event
     }
 
+    // === THE NULL REGION
+
+    UiRegion nullRegion() {
+        return uiTopology.nullRegion();
+    }
 
     // === REGIONS
 
     private UiRegion addNewRegion(Region r) {
         UiRegion region = new UiRegion(uiTopology, r);
         uiTopology.add(region);
+        log.debug("Region {} added to topology", region);
         return region;
     }
 
     private void updateRegion(UiRegion region) {
-        Set<DeviceId> devs = services.region().getRegionDevices(region.id());
-        region.reconcileDevices(devs);
+        RegionId rid = region.id();
+        Set<DeviceId> deviceIds = services.region().getRegionDevices(rid);
+
+        // Make sure device objects refer to their region
+        deviceIds.forEach(d -> {
+            UiDevice dev = uiTopology.findDevice(d);
+            if (dev != null) {
+                dev.setRegionId(rid);
+            } else {
+                // if we don't have the UiDevice in the topology, what can we do?
+                log.warn("Region device {}, but we don't have UiDevice in topology", d);
+            }
+        });
+
+        // Make sure the region object refers to the devices
+        region.reconcileDevices(deviceIds);
     }
 
     private void loadRegions() {
@@ -224,21 +245,22 @@
 
     private UiDevice addNewDevice(Device d) {
         UiDevice device = new UiDevice(uiTopology, d);
+        updateDevice(device);
         uiTopology.add(device);
+        log.debug("Device {} added to topology", device);
         return device;
     }
 
+    // make sure the UiDevice is tagged with the region it belongs to
     private void updateDevice(UiDevice device) {
-        Region regionForDevice = services.region().getRegionForDevice(device.id());
-        if (regionForDevice != null) {
-            device.setRegionId(regionForDevice.id());
-        }
+        Region r = services.region().getRegionForDevice(device.id());
+        RegionId rid = r == null ? UiRegion.NULL_ID : r.id();
+        device.setRegionId(rid);
     }
 
     private void loadDevices() {
         for (Device d : services.device().getDevices()) {
-            UiDevice device = addNewDevice(d);
-            updateDevice(device);
+            addNewDevice(d);
         }
     }
 
@@ -248,8 +270,9 @@
         UiDevice uiDevice = uiTopology.findDevice(id);
         if (uiDevice == null) {
             uiDevice = addNewDevice(device);
+        } else {
+            updateDevice(uiDevice);
         }
-        updateDevice(uiDevice);
 
         postEvent(DEVICE_ADDED_OR_UPDATED, uiDevice);
     }
@@ -434,6 +457,43 @@
     }
 
 
+    /**
+     * Refreshes the internal state.
+     */
+    public void refresh() {
+        // fix up internal linkages if they aren't correct
+
+        // at the moment, this is making sure devices are in the correct region
+        Set<UiDevice> allDevices = uiTopology.allDevices();
+
+        services.region().getRegions().forEach(r -> {
+            RegionId rid = r.id();
+            UiRegion region = uiTopology.findRegion(rid);
+            if (region != null) {
+                Set<DeviceId> deviceIds = services.region().getRegionDevices(rid);
+                region.reconcileDevices(deviceIds);
+
+                deviceIds.forEach(devId -> {
+                    UiDevice dev = uiTopology.findDevice(devId);
+                    if (dev != null) {
+                        dev.setRegionId(r.id());
+                        allDevices.remove(dev);
+                    } else {
+                        log.warn("Region device ID {} but no UiDevice in topology",
+                                devId);
+                    }
+                });
+            } else {
+                log.warn("No UiRegion in topology for ID {}", rid);
+            }
+        });
+
+        // what is left over, must belong to the null-region
+        Set<DeviceId> leftOver = new HashSet<>(allDevices.size());
+        allDevices.forEach(d -> leftOver.add(d.id()));
+        uiTopology.nullRegion().reconcileDevices(leftOver);
+    }
+
     // === CACHE STATISTICS
 
     /**
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/UiSharedTopologyModel.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/UiSharedTopologyModel.java
index 50ebb06..4fbf707 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/UiSharedTopologyModel.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/UiSharedTopologyModel.java
@@ -217,6 +217,22 @@
         return cache.accessRegion(id);
     }
 
+    /**
+     * Returns the null region.
+     *
+     * @return the null region
+     */
+    public UiRegion getNullRegion() {
+        return cache.nullRegion();
+    }
+
+    /**
+     * Refreshes the cache's internal state.
+     */
+    public void refresh() {
+        cache.refresh();
+    }
+
     // =====================================================================
 
 
diff --git a/web/gui/src/test/_karma/ev/topo2a/ev_3_currentRegion.json b/web/gui/src/test/_karma/ev/topo2a/ev_3_currentRegion.json
index 938d1af..dcf5086 100644
--- a/web/gui/src/test/_karma/ev/topo2a/ev_3_currentRegion.json
+++ b/web/gui/src/test/_karma/ev/topo2a/ev_3_currentRegion.json
@@ -1,6 +1,31 @@
 {
   "event": "topo2CurrentRegion",
   "payload": {
-    "note": "no-region"
+    "id": "<null-region>",
+    "subregions": [{
+      "id": "r2",
+      "nDevs": 2
+    }, {
+      "id": "r1",
+      "nDevs": 3
+    }],
+    "devices": [
+      [],
+      [],
+      [{
+        "id": "null:0000000000000001",
+        "type": "switch",
+        "online": false,
+        "master": "",
+        "layer": "def"
+      }]
+    ],
+    "hosts": [
+      [],
+      [],
+      []
+    ],
+    "links": [],
+    "layerOrder": ["opt", "pkt", "def"]
   }
 }
diff --git a/web/gui/src/test/_karma/ev/topo2a/ev_5_orphans.json b/web/gui/src/test/_karma/ev/topo2a/ev_5_orphans.json
deleted file mode 100644
index 751127d..0000000
--- a/web/gui/src/test/_karma/ev/topo2a/ev_5_orphans.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "event": "topo2Orphans",
-  "payload": {
-    "devices": [
-      []
-    ],
-    "hosts": [
-      []
-    ],
-    "links": [],
-    "layerOrder": ["def"]
-  }
-}
diff --git a/web/gui/src/test/_karma/ev/topo2a/ev_6_startDone.json b/web/gui/src/test/_karma/ev/topo2a/ev_5_startDone.json
similarity index 100%
rename from web/gui/src/test/_karma/ev/topo2a/ev_6_startDone.json
rename to web/gui/src/test/_karma/ev/topo2a/ev_5_startDone.json
