diff --git a/web/gui/src/main/webapp/topo.css b/web/gui/src/main/webapp/topo.css
index bc1bdd0..bd3d7e8 100644
--- a/web/gui/src/main/webapp/topo.css
+++ b/web/gui/src/main/webapp/topo.css
@@ -43,6 +43,20 @@
 }
 
 
+#topo svg .noDevsLayer {
+    visibility: hidden;
+}
+
+#topo svg .noDevsLayer text {
+    font-size: 60pt;
+    font-style: italic;
+    fill: #dde;
+}
+
+#topo svg .noDevsBird {
+    fill: #ecd;
+}
+
 /* NODES */
 
 #topo svg .node {
diff --git a/web/gui/src/main/webapp/topo.js b/web/gui/src/main/webapp/topo.js
index f3cb1ad..7620009 100644
--- a/web/gui/src/main/webapp/topo.js
+++ b/web/gui/src/main/webapp/topo.js
@@ -122,10 +122,10 @@
 
     // key bindings
     var keyDispatch = {
-        // TODO: remove these "development only" bindings
-        0: testMe,
-        equals: injectStartupEvents,
-        dash: injectTestEvent,
+        // ==== "development mode" ====
+        //0: testMe,
+        //equals: injectStartupEvents,
+        //dash: injectTestEvent,
 
         O: [toggleSummary, 'Toggle ONOS summary pane'],
         I: [toggleInstances, 'Toggle ONOS instances pane'],
@@ -225,6 +225,7 @@
     // D3 selections
     var svg,
         panZoomContainer,
+        noDevices,
         bgImg,
         topoG,
         nodeG,
@@ -398,6 +399,10 @@
         }
     }
 
+    function showNoDevs(b) {
+        noDevices.style('visibility', visVal(b));
+    }
+
     // ==============================
     // Oblique view ...
 
@@ -826,6 +831,8 @@
             id = device.id,
             d;
 
+        showNoDevs(false);
+
         if (network.lookup[id]) {
             updateDevice(data);
             return;
@@ -1507,7 +1514,7 @@
     }
 
     function appendBadge(svg, ox, oy, dim, iid, cls) {
-        appendUse(svg, ox, oy, dim, iid,cls ).classed('badgeIcon', true);
+        appendUse(svg, ox, oy, dim, iid, cls).classed('badgeIcon', true);
     }
 
     function attachUiBadge(svg) {
@@ -2326,6 +2333,11 @@
         // remove from nodes array
         var idx = find(id, network.nodes);
         network.nodes.splice(idx, 1);
+
+        if (!network.nodes.length) {
+            showNoDevs(true);
+        }
+
         // remove from SVG
         updateNodes();
         fResume();
@@ -2770,6 +2782,24 @@
         svg.call(zoom);
     }
 
+
+    function setupNoDevices() {
+        var g = noDevices.append('g');
+        appendBadge(g, 0, 0, 100, '#bird', 'noDevsBird');
+        var text = g.append('text')
+            .text('No devices are connected')
+            .attr({ x: 120, y: 80});
+    }
+
+    function repositionNoDevices() {
+        var g = noDevices.select('g');
+        var box = g.node().getBBox();
+        box.x -= box.width/2;
+        box.y -= box.height/2;
+        g.attr('transform', translate(box.x, box.y));
+    }
+
+
     // ==============================
     // Test harness code
 
@@ -2838,10 +2868,11 @@
     function init(view, ctx, flags) {
         var w = view.width(),
             h = view.height(),
+            logSize = config.logicalSize,
             fcfg = config.force;
 
         // NOTE: view.$div is a D3 selection of the view's div
-        var viewBox = '0 0 ' + config.logicalSize + ' ' + config.logicalSize;
+        var viewBox = '0 0 ' + logSize + ' ' + logSize;
         svg = view.$div.append('svg').attr('viewBox', viewBox);
         setSize(svg, view);
 
@@ -2851,6 +2882,11 @@
         panZoomContainer = svg.append('g').attr('id', 'panZoomContainer');
         setupPanZoom();
 
+        noDevices = svg.append('g')
+            .attr('class', 'noDevsLayer')
+            .attr('transform', translate(logSize/2, logSize/2));
+        setupNoDevices();
+
         // group for the topology
         topoG = panZoomContainer.append('g')
             .attr('id', 'topo-G');
@@ -3008,6 +3044,9 @@
                 loadGeoMap();
             }
 
+            repositionNoDevices();
+            showNoDevs(true);
+
             // finally, connect to the server...
             if (config.useLiveData) {
                 webSock.connect();
