diff --git a/tools/package/archetypes/pom.xml b/tools/package/archetypes/pom.xml
index 6e169d1..b0b61a8 100644
--- a/tools/package/archetypes/pom.xml
+++ b/tools/package/archetypes/pom.xml
@@ -33,7 +33,6 @@
 
     <modules>
         <module>bundle</module>
-        <!--module>web-bundle</module-->
     </modules>
 
 </project>
diff --git a/tools/package/archetypes/web-bundle/pom.save.xml b/tools/package/archetypes/web-bundle/save.xml
similarity index 100%
rename from tools/package/archetypes/web-bundle/pom.save.xml
rename to tools/package/archetypes/web-bundle/save.xml
diff --git a/tools/package/archetypes/web-bundle/src/main/java/sample/bundle/AppComponent.java b/tools/package/archetypes/web-bundle/src/main/java/sample/bundle/AppComponent.java
deleted file mode 100644
index 1d17f5f..0000000
--- a/tools/package/archetypes/web-bundle/src/main/java/sample/bundle/AppComponent.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package sample.bundle;
-
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Service;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Skeletal ONOS application component.
- */
-@Component(immediate = true)
-@Service
-public class AppComponent implements AppService {
-
-    private static Logger log = LoggerFactory.getLogger(AppComponent.class);
-
-    @Activate
-    protected void activate() {
-        log.info("Started");
-    }
-
-    @Deactivate
-    protected void deactivate() {
-        log.info("Stopped");
-    }
-
-}
diff --git a/tools/package/archetypes/web-bundle/src/main/java/sample/bundle/AppService.java b/tools/package/archetypes/web-bundle/src/main/java/sample/bundle/AppService.java
deleted file mode 100644
index 9e658d4..0000000
--- a/tools/package/archetypes/web-bundle/src/main/java/sample/bundle/AppService.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package sample.bundle;
-
-/**
- * Skeletal ONOS application API.
- */
-public interface AppService {
-
-}
diff --git a/tools/package/archetypes/web-bundle/src/test/java/sample/bundle/AppComponentTest.java b/tools/package/archetypes/web-bundle/src/test/java/sample/bundle/AppComponentTest.java
deleted file mode 100644
index d18ba0d..0000000
--- a/tools/package/archetypes/web-bundle/src/test/java/sample/bundle/AppComponentTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package sample.bundle;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Set of tests of the ONOS application component.
- */
-public class AppComponentTest {
-
-    private AppComponent component;
-
-    @Before
-    public void setUp() {
-        component = new AppComponent();
-        component.activate();
-
-    }
-
-    @After
-    public void tearDown() {
-        component.deactivate();
-    }
-
-    @Test
-    public void basics() {
-
-    }
-
-}
diff --git a/web/gui/src/main/java/org/onosproject/gui/TopologyViewWebSocket.java b/web/gui/src/main/java/org/onosproject/gui/TopologyViewWebSocket.java
index 899a7b0..0353a25 100644
--- a/web/gui/src/main/java/org/onosproject/gui/TopologyViewWebSocket.java
+++ b/web/gui/src/main/java/org/onosproject/gui/TopologyViewWebSocket.java
@@ -213,6 +213,7 @@
             processMessage((ObjectNode) mapper.reader().readTree(data));
         } catch (Exception e) {
             log.warn("Unable to parse GUI request {} due to {}", data, e);
+            log.warn("Boom!!!", e);
         }
     }
 
@@ -384,7 +385,6 @@
     }
 
 
-
     private Set<ConnectPoint> getHostLocations(Set<HostId> hostIds) {
         Set<ConnectPoint> points = new HashSet<>();
         for (HostId hostId : hostIds) {
@@ -459,21 +459,19 @@
         // Cancel any other traffic monitoring mode.
         stopTrafficMonitoring();
 
+        // Get the set of selected hosts and their intents.
+        ArrayNode ids = (ArrayNode) payload.path("ids");
+        selectedHosts = getHosts(ids);
+        selectedDevices = getDevices(ids);
+        selectedIntents = intentFilter.findPathIntents(selectedHosts, selectedDevices,
+                                                       intentService.getIntents());
+        currentIntentIndex = -1;
+
         String hover = string(payload, "hover");
         if (haveSelectedIntents()) {
-            // Get the set of selected hosts and their intents.
-            ArrayNode ids = (ArrayNode) payload.path("ids");
-            selectedHosts = getHosts(ids);
-            selectedDevices = getDevices(ids);
-            selectedIntents = intentFilter.findPathIntents(selectedHosts, selectedDevices,
-                                                           intentService.getIntents());
-            currentIntentIndex = -1;
-
             // Send a message to highlight all links of all monitored intents.
             sendMessage(trafficMessage(sid, new TrafficClass("primary", selectedIntents)));
-        }
-
-        if (!isNullOrEmpty(hover)) {
+        } else if (!isNullOrEmpty(hover)) {
             // If there is a hover node, include it in the selection and find intents.
             processExtendedSelection(sid, hover);
         }
@@ -484,19 +482,21 @@
     }
 
     private void processExtendedSelection(long sid, String hover) {
-        Set<Host> hoverSelHosts = new HashSet<>(selectedHosts);
-        Set<Device> hoverSelDevices = new HashSet<>(selectedDevices);
-        addHover(hoverSelHosts, hoverSelDevices, hover);
+        if (haveSelectedIntents()) {
+            Set<Host> hoverSelHosts = new HashSet<>(selectedHosts);
+            Set<Device> hoverSelDevices = new HashSet<>(selectedDevices);
+            addHover(hoverSelHosts, hoverSelDevices, hover);
 
-        List<Intent> primary =
-                intentFilter.findPathIntents(hoverSelHosts, hoverSelDevices,
-                                             selectedIntents);
-        Set<Intent> secondary = new HashSet<>(selectedIntents);
-        secondary.removeAll(primary);
+            List<Intent> primary =
+                    intentFilter.findPathIntents(hoverSelHosts, hoverSelDevices,
+                                                 selectedIntents);
+            Set<Intent> secondary = new HashSet<>(selectedIntents);
+            secondary.removeAll(primary);
 
-        // Send a message to highlight all links of all monitored intents.
-        sendMessage(trafficMessage(sid, new TrafficClass("primary", primary),
-                                   new TrafficClass("secondary", secondary)));
+            // Send a message to highlight all links of all monitored intents.
+            sendMessage(trafficMessage(sid, new TrafficClass("primary", primary),
+                                       new TrafficClass("secondary", secondary)));
+        }
     }
 
     // Requests next of the related intents.
@@ -522,6 +522,9 @@
     // Requests monitoring of traffic for the selected intent.
     private void requestSelectedIntentTraffic(ObjectNode event) {
         if (haveSelectedIntents()) {
+            if (currentIntentIndex < 0) {
+                currentIntentIndex = 0;
+            }
             Intent selectedIntent = selectedIntents.get(currentIntentIndex);
             log.info("Requested traffic for selected {}", selectedIntent.id());
 
diff --git a/web/gui/src/main/webapp/onosQuickHelp.css b/web/gui/src/main/webapp/onosQuickHelp.css
index 847a43d..eb400cf 100644
--- a/web/gui/src/main/webapp/onosQuickHelp.css
+++ b/web/gui/src/main/webapp/onosQuickHelp.css
@@ -36,7 +36,7 @@
 }
 
 #quickhelp svg text.title {
-    font-size: 10pt;
+    font-size: 8pt;
     font-style: italic;
     text-anchor: middle;
     fill: #999;
@@ -52,17 +52,17 @@
 }
 
 #quickhelp svg text {
-    font-size: 7pt;
+    font-size: 5pt;
     alignment-baseline: middle;
 }
 
 #quickhelp svg text.key {
-    font-size: 7pt;
+    font-size: 5pt;
     fill: #add;
 }
 
 #quickhelp svg text.desc {
-    font-size: 7pt;
+    font-size: 5pt;
     fill: #ddd;
 }
 
diff --git a/web/gui/src/main/webapp/onosQuickHelp.js b/web/gui/src/main/webapp/onosQuickHelp.js
index 9e2a5ec..1e3507d 100644
--- a/web/gui/src/main/webapp/onosQuickHelp.js
+++ b/web/gui/src/main/webapp/onosQuickHelp.js
@@ -74,7 +74,7 @@
     // layout configuration
     var pad = 8,
         offy = 45,
-        dy = 14,
+        dy = 10,
         offDesc = 8;
 
     // D3 magic
