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 41e6090..1399847 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
@@ -511,6 +511,9 @@
         updateHost(uiHost, host);
 
         postEvent(HOST_ADDED_OR_UPDATED, uiHost, memo);
+        // Link event must be sent after the host event
+        UiEdgeLink uiEdgeLink = uiTopology.findEdgeLink(uiHost.edgeLinkId());
+        postEvent(LINK_ADDED_OR_UPDATED, uiEdgeLink, memo);
     }
 
     // invoked from UiSharedTopologyModel host listener
@@ -536,6 +539,7 @@
         if (uiHost != null) {
             UiEdgeLink edgeLink = uiTopology.findEdgeLink(uiHost.edgeLinkId());
             uiTopology.remove(edgeLink);
+            postEvent(LINK_REMOVED, edgeLink, MEMO_REMOVED);
             uiTopology.remove(uiHost);
             postEvent(HOST_REMOVED, uiHost, MEMO_REMOVED);
         } else {
diff --git a/web/gui/src/test/java/org/onosproject/ui/impl/topo/model/ModelCacheTest.java b/web/gui/src/test/java/org/onosproject/ui/impl/topo/model/ModelCacheTest.java
index 84068ba..ea82b9a 100644
--- a/web/gui/src/test/java/org/onosproject/ui/impl/topo/model/ModelCacheTest.java
+++ b/web/gui/src/test/java/org/onosproject/ui/impl/topo/model/ModelCacheTest.java
@@ -310,22 +310,24 @@
 
         // add a host
         cache.addOrUpdateHost(hostA);
-        dispatcher.assertLast(Type.HOST_ADDED_OR_UPDATED, hostA.id().toString());
-        dispatcher.assertEventCount(1);
+        UiLinkId hostALinkId = cache.accessHost(hostA.id()).edgeLinkId();
+        dispatcher.assertLast(Type.LINK_ADDED_OR_UPDATED, hostALinkId.toString());
+        dispatcher.assertEventCount(2);
         assertHostLinkCounts(1, 1);
         assertLocation(hostA.id(), DEVID_1, 101);
 
         // add a second host
         cache.addOrUpdateHost(hostB);
-        dispatcher.assertLast(Type.HOST_ADDED_OR_UPDATED, hostB.id().toString());
-        dispatcher.assertEventCount(2);
+        UiLinkId hostBLinkId = cache.accessHost(hostB.id()).edgeLinkId();
+        dispatcher.assertLast(Type.LINK_ADDED_OR_UPDATED, hostBLinkId.toString());
+        dispatcher.assertEventCount(4);
         assertHostLinkCounts(2, 2);
         assertLocation(hostB.id(), DEVID_1, 102);
 
         // update the first host
         cache.addOrUpdateHost(hostA);
-        dispatcher.assertLast(Type.HOST_ADDED_OR_UPDATED, hostA.id().toString());
-        dispatcher.assertEventCount(3);
+        dispatcher.assertLast(Type.LINK_ADDED_OR_UPDATED, hostALinkId.toString());
+        dispatcher.assertEventCount(6);
         assertHostLinkCounts(2, 2);
         assertLocation(hostA.id(), DEVID_1, 101);
 
@@ -334,7 +336,7 @@
         // remove the second host
         cache.removeHost(hostB);
         dispatcher.assertLast(Type.HOST_REMOVED, hostB.id().toString());
-        dispatcher.assertEventCount(4);
+        dispatcher.assertEventCount(8);
         assertHostLinkCounts(1, 1);
         assertNull("still host B?", cache.accessHost(hostB.id()));
 
@@ -350,7 +352,7 @@
 
         cache.moveHost(movedHost, hostA);
         dispatcher.assertLast(Type.HOST_MOVED, hostA.id().toString());
-        dispatcher.assertEventCount(5);
+        dispatcher.assertEventCount(9);
         assertHostLinkCounts(1, 1);
 
         assertLocation(hostA.id(), DEVID_1, 200);
@@ -362,7 +364,7 @@
 
         cache.moveHost(movedAgain, movedHost);
         dispatcher.assertLast(Type.HOST_MOVED, hostA.id().toString());
-        dispatcher.assertEventCount(6);
+        dispatcher.assertEventCount(10);
         assertHostLinkCounts(1, 1);
 
         assertLocation(hostA.id(), DEVID_8, 800);
diff --git a/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/layer/forcesvg/forcesvg.component.ts b/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/layer/forcesvg/forcesvg.component.ts
index b4bff8e..89923ae 100644
--- a/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/layer/forcesvg/forcesvg.component.ts
+++ b/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/layer/forcesvg/forcesvg.component.ts
@@ -28,15 +28,10 @@
     SimpleChanges,
     ViewChildren
 } from '@angular/core';
+import {LocMeta, LogService, MetaUi, WebSocketService, ZoomUtils} from 'gui2-fw-lib';
 import {
-    LocMeta,
-    LogService,
-    MetaUi,
-    WebSocketService,
-    ZoomUtils
-} from 'gui2-fw-lib';
-import {
-    Device, DeviceProps,
+    Device,
+    DeviceProps,
     ForceDirectedGraph,
     Host,
     HostLabelToggle,
@@ -56,8 +51,8 @@
 } from './models';
 import {LocationType} from '../backgroundsvg/backgroundsvg.component';
 import {DeviceNodeSvgComponent} from './visuals/devicenodesvg/devicenodesvg.component';
-import { HostNodeSvgComponent} from './visuals/hostnodesvg/hostnodesvg.component';
-import { LinkSvgComponent} from './visuals/linksvg/linksvg.component';
+import {HostNodeSvgComponent} from './visuals/hostnodesvg/hostnodesvg.component';
+import {LinkSvgComponent} from './visuals/linksvg/linksvg.component';
 import {SelectedEvent} from './visuals/nodevisual';
 
 interface UpdateMeta {
@@ -446,7 +441,7 @@
                             .findIndex((h) => h.id === subject);
                     this.regionData.hosts[this.visibleLayerIdx()].splice(removeIdx, 1);
                     this.removeRelatedLinks(subject);
-                    this.log.warn('Host ', subject, 'removed');
+                    this.log.debug('Host ', subject, 'removed');
                 } else {
                     this.log.warn('Host removed - unexpected memo', memo);
                 }
@@ -471,11 +466,18 @@
                     const changes = ForceSvgComponent.updateObject(oldLink, <RegionLink>data);
                     this.log.debug('Link ', subject, '. Updated', changes, 'items');
                 } else {
-                    this.log.warn('Link added or updated - unexpected memo', memo);
+                    this.log.warn('Link event ignored', subject, data);
+                }
+                break;
+            case ModelEventType.LINK_REMOVED:
+                if (memo === ModelEventMemo.REMOVED) {
+                    const removeIdx = this.regionData.links.findIndex((l) => l.id === subject);
+                    this.regionData.links.splice(removeIdx, 1);
+                    this.log.debug('Link ', subject, 'removed');
                 }
                 break;
             default:
-                this.log.error('Unexpected model event', type, 'for', subject);
+                this.log.error('Unexpected model event', type, 'for', subject, 'Data', data);
         }
         this.graph.links = this.regionData.links;
         this.graph.reinitSimulation();
@@ -534,7 +536,7 @@
             links.forEach((lh) => {
                 const linkComponent: LinkSvgComponent =
                     this.links.find((l) => l.link.id === Link.linkIdFromShowHighlights(lh.id) );
-                if (linkComponent) { // A link might not be present is hosts viewing is switched off
+                if (linkComponent) { // A link might not be present if hosts viewing is switched off
                     if (fadeMs > 0) {
                         lh.fadems = fadeMs;
                     }
diff --git a/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/layer/forcesvg/models/force-directed-graph.ts b/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/layer/forcesvg/models/force-directed-graph.ts
index 312b69b..0a00f03 100644
--- a/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/layer/forcesvg/models/force-directed-graph.ts
+++ b/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/layer/forcesvg/models/force-directed-graph.ts
@@ -37,6 +37,7 @@
     direct: 100,
     optical: 120,
     UiEdgeLink: 3,
+    UiDeviceLink: 100,
     _def_: 50,
 };
 
@@ -97,7 +98,7 @@
         this.simulation.nodes(this.nodes);
         this.simulation.force('link',
             d3.forceLink(this.links)
-                .strength(this.strength.bind(this))
+                .strength(LINK_STRENGTH._def_)
                 .distance(this.distance.bind(this))
         );
         this.simulation.alpha(0.3).restart();
@@ -110,16 +111,9 @@
 
     distance(link: Link) {
         const linkType = link.type;
-        this.log.debug('Link type', linkType, LINK_DISTANCE[linkType]);
         return LINK_DISTANCE[linkType] || LINK_DISTANCE._def_;
     }
 
-    strength(link: Link) {
-        const linkType = link.type;
-        this.log.debug('Link type', linkType, LINK_STRENGTH[linkType]);
-        return LINK_STRENGTH[linkType] || LINK_STRENGTH._def_;
-    }
-
     stopSimulation() {
         this.simulation.stop();
         this.log.debug('Simulation stopped');
diff --git a/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/layer/forcesvg/models/node.ts b/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/layer/forcesvg/models/node.ts
index 5b8f48d..1402f81 100644
--- a/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/layer/forcesvg/models/node.ts
+++ b/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/layer/forcesvg/models/node.ts
@@ -276,7 +276,8 @@
     LINK_ADDED_OR_UPDATED,
     DEVICE_ADDED_OR_UPDATED,
     DEVICE_REMOVED,
-    HOST_REMOVED
+    HOST_REMOVED,
+    LINK_REMOVED,
 }
 
 /**
diff --git a/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/layer/forcesvg/visuals/linksvg/linksvg.component.ts b/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/layer/forcesvg/visuals/linksvg/linksvg.component.ts
index 85ef536..c669c1c 100644
--- a/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/layer/forcesvg/visuals/linksvg/linksvg.component.ts
+++ b/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/layer/forcesvg/visuals/linksvg/linksvg.component.ts
@@ -57,6 +57,7 @@
     enhanced: boolean = false;
     labelPosSrc: Point = {x: 0, y: 0};
     labelPosTgt: Point = {x: 0, y: 0};
+    lastTimer: any;
 
     constructor(
         protected log: LogService,
@@ -68,16 +69,17 @@
     ngOnChanges(changes: SimpleChanges) {
         if (changes['linkHighlight']) {
             const hl: LinkHighlight = changes['linkHighlight'].currentValue;
+            clearTimeout(this.lastTimer);
             this.highlighted = hl.css;
             this.label = hl.label;
             this.isHighlighted = true;
-            this.log.debug('Link hightlighted', hl);
+            this.log.debug('Link hightlighted', this.link.id, this.highlighted);
             if (hl.fadems > 0) {
-                setTimeout(() => {
+                this.lastTimer = setTimeout(() => {
                     this.isHighlighted = false;
                     this.highlighted = '';
                     this.ref.markForCheck();
-                }, hl.fadems);
+                }, hl.fadems); // Disappear slightly before next one comes in
             }
 
         }
diff --git a/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/topology.service.ts b/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/topology.service.ts
index 1f68444..304be9e 100644
--- a/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/topology.service.ts
+++ b/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/topology.service.ts
@@ -75,7 +75,6 @@
                         <ModelEventType><unknown>(ModelEventType[event.type]), // Number based enum
                         <ModelEventMemo>(event.memo), // String based enum
                         event.subject, event.data);
-                    this.log.debug('Region Data updated from WSS as topo2UiModelEvent', event.subject, event.data);
                 }
             ],
             ['showHighlights', (event) => {
diff --git a/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/topology/topology.component.ts b/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/topology/topology.component.ts
index 97b8764..d8e0a0f 100644
--- a/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/topology/topology.component.ts
+++ b/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/topology/topology.component.ts
@@ -697,7 +697,6 @@
     nodeSelected(nodesOrLink: UiElement[]) {
         this.details.ngOnChanges({'selectedNodes':
             new SimpleChange(undefined, nodesOrLink, true)});
-        this.trs.cancelTraffic();
     }
 
     /**
