diff --git a/core/api/src/main/java/org/onosproject/net/LinkKey.java b/core/api/src/main/java/org/onosproject/net/LinkKey.java
index 0b0d5fb..5a2566f 100644
--- a/core/api/src/main/java/org/onosproject/net/LinkKey.java
+++ b/core/api/src/main/java/org/onosproject/net/LinkKey.java
@@ -15,13 +15,12 @@
  */
 package org.onosproject.net;
 
-import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.base.MoreObjects;
+import org.onosproject.net.link.LinkDescription;
 
 import java.util.Objects;
 
-import org.onosproject.net.link.LinkDescription;
-
-import com.google.common.base.MoreObjects;
+import static com.google.common.base.Preconditions.checkNotNull;
 
 // TODO Consider renaming.
 // it's an identifier for a Link, but it's not ElementId, so not using LinkId.
@@ -31,10 +30,23 @@
  */
 public final class LinkKey {
 
+    private static final String DELIM = "-";
+
     private final ConnectPoint src;
     private final ConnectPoint dst;
 
     /**
+     * Creates a link identifier with source and destination connection point.
+     *
+     * @param src source connection point
+     * @param dst destination connection point
+     */
+    private LinkKey(ConnectPoint src, ConnectPoint dst) {
+        this.src = checkNotNull(src);
+        this.dst = checkNotNull(dst);
+    }
+
+    /**
      * Returns source connection point.
      *
      * @return source connection point
@@ -53,14 +65,38 @@
     }
 
     /**
-     * Creates a link identifier with source and destination connection point.
+     * Returns a string suitable to be used as an identifier.
      *
-     * @param src source connection point
-     * @param dst destination connection point
+     * @return string as identifier
      */
-    private LinkKey(ConnectPoint src, ConnectPoint dst) {
-        this.src = checkNotNull(src);
-        this.dst = checkNotNull(dst);
+    public String asId() {
+        return src + DELIM + dst;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(src, dst);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof LinkKey) {
+            final LinkKey other = (LinkKey) obj;
+            return Objects.equals(this.src, other.src) &&
+                    Objects.equals(this.dst, other.dst);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(getClass())
+                .add("src", src)
+                .add("dst", dst)
+                .toString();
     }
 
     /**
@@ -94,29 +130,4 @@
         return new LinkKey(link.src(), link.dst());
     }
 
-    @Override
-    public int hashCode() {
-        return Objects.hash(src, dst);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj instanceof LinkKey) {
-            final LinkKey other = (LinkKey) obj;
-            return Objects.equals(this.src, other.src) &&
-                    Objects.equals(this.dst, other.dst);
-        }
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("src", src)
-                .add("dst", dst)
-                .toString();
-    }
 }
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/BiLink.java b/core/api/src/main/java/org/onosproject/ui/topo/BiLink.java
index 16e8dc5..b50e34d 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/BiLink.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/BiLink.java
@@ -38,7 +38,7 @@
      * that the caller will have used {@link TopoUtils#canonicalLinkKey(Link)}
      * to generate the key.
      *
-     * @param key canonical key for this bi-link
+     * @param key  canonical key for this bi-link
      * @param link first link
      */
     public BiLink(LinkKey key, Link link) {
@@ -62,7 +62,7 @@
      * @return link identifier
      */
     public String linkId() {
-        return TopoUtils.compactLinkString(one);
+        return key.asId();
     }
 
     /**
@@ -92,6 +92,11 @@
         return two;
     }
 
+    @Override
+    public String toString() {
+        return key.asId();
+    }
+
     /**
      * Returns the link highlighting to use, based on this bi-link's current
      * state.
diff --git a/core/api/src/test/java/org/onosproject/net/LinkKeyTest.java b/core/api/src/test/java/org/onosproject/net/LinkKeyTest.java
index 0b036be..075f165 100644
--- a/core/api/src/test/java/org/onosproject/net/LinkKeyTest.java
+++ b/core/api/src/test/java/org/onosproject/net/LinkKeyTest.java
@@ -126,4 +126,10 @@
                                    containsString("src=1/1"),
                                    containsString("dst=2/1}")));
     }
+
+    @Test
+    public void asId() {
+        LinkKey k1 = LinkKey.linkKey(SRC1, DST2);
+        assertThat(k1.asId(), is(equalTo("1/1-2/2")));
+    }
 }
diff --git a/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTest.java b/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTest.java
index e7c5048..df6d3f7 100644
--- a/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTest.java
+++ b/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTest.java
@@ -57,5 +57,25 @@
         blink = new ConcreteLink(KEY_AB, LINK_AB);
         blink.setOther(null);
     }
+
+    @Test
+    public void canonIdentifiers() {
+        // FIRST: an assumption that the LinkKey used is canonicalized
+        //        ( See TopoUtils.canonicalLinkKey(Link) )
+        //  so in both the following cases, KEY_AB is used...
+        String expected = CP_A1 + "-" + CP_B2;
+
+        // let's assume that link [A -> B] was dealt with first...
+        blink = new ConcreteLink(KEY_AB, LINK_AB);
+        blink.setOther(LINK_BA);
+        print(blink);
+        assertEquals("non-canon AB", expected, blink.linkId());
+
+        // let's assume that link [B -> A] was dealt with first...
+        blink = new ConcreteLink(KEY_AB, LINK_BA);
+        blink.setOther(LINK_AB);
+        print(blink);
+        assertEquals("non-canon BA", expected, blink.linkId());
+    }
 }
 
diff --git a/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTestBase.java b/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTestBase.java
index bcfd408..77b6858 100644
--- a/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTestBase.java
+++ b/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTestBase.java
@@ -24,11 +24,12 @@
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.driver.Behaviour;
 import org.onosproject.net.provider.ProviderId;
+import org.onosproject.ui.AbstractUiTest;
 
 /**
  * Base class for unit tests of {@link BiLink} and {@link BiLinkMap}.
  */
-public abstract class BiLinkTestBase {
+public abstract class BiLinkTestBase extends AbstractUiTest {
 
     protected static class FakeLink implements Link {
         private final ConnectPoint src;
@@ -39,29 +40,43 @@
             this.dst = dst;
         }
 
-        @Override public ConnectPoint src() {
+        @Override
+        public ConnectPoint src() {
             return src;
         }
-        @Override public ConnectPoint dst() {
+
+        @Override
+        public ConnectPoint dst() {
             return dst;
         }
 
-        @Override public Type type() {
+        @Override
+        public Type type() {
             return null;
         }
-        @Override public State state() {
+
+        @Override
+        public State state() {
             return null;
         }
-        @Override public boolean isDurable() {
+
+        @Override
+        public boolean isDurable() {
             return false;
         }
-        @Override public boolean isExpected() {
+
+        @Override
+        public boolean isExpected() {
             return false;
         }
-        @Override public Annotations annotations() {
+
+        @Override
+        public Annotations annotations() {
             return null;
         }
-        @Override public ProviderId providerId() {
+
+        @Override
+        public ProviderId providerId() {
             return null;
         }
 
@@ -94,6 +109,7 @@
         public ConcreteLink(LinkKey key, Link link) {
             super(key, link);
         }
+
         @Override
         public LinkHighlight highlight(Enum<?> type) {
             return null;
@@ -107,5 +123,4 @@
         }
     }
 
-
 }
diff --git a/core/api/src/test/java/org/onosproject/ui/topo/TopoUtilsTest.java b/core/api/src/test/java/org/onosproject/ui/topo/TopoUtilsTest.java
index f7b56eb..e8712dc 100644
--- a/core/api/src/test/java/org/onosproject/ui/topo/TopoUtilsTest.java
+++ b/core/api/src/test/java/org/onosproject/ui/topo/TopoUtilsTest.java
@@ -22,6 +22,7 @@
 import org.onosproject.net.Link;
 import org.onosproject.net.LinkKey;
 import org.onosproject.net.provider.ProviderId;
+import org.onosproject.ui.AbstractUiTest;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -31,7 +32,7 @@
 /**
  * Unit tests for {@link TopoUtils}.
  */
-public class TopoUtilsTest {
+public class TopoUtilsTest extends AbstractUiTest {
     private static final String AM_WL = "wrong label";
     private static final String AM_WM = "wrong magnitude";
     private static final String AM_CL = "clipped?";
@@ -54,6 +55,21 @@
             .providerId(ProviderId.NONE)
             .build();
 
+    private static final Link LINK_7_TO_3 = DefaultLink.builder()
+            .src(deviceConnectPoint("of:0000000000000007/2"))
+            .dst(deviceConnectPoint("of:0000000000000003/2"))
+            .type(Link.Type.DIRECT)
+            .providerId(ProviderId.NONE)
+            .build();
+
+    private static final Link LINK_3_TO_7 = DefaultLink.builder()
+            .src(deviceConnectPoint("of:0000000000000003/2"))
+            .dst(deviceConnectPoint("of:0000000000000007/2"))
+            .type(Link.Type.DIRECT)
+            .providerId(ProviderId.NONE)
+            .build();
+
+
     private TopoUtils.ValueLabel vl;
 
     @Test
@@ -76,6 +92,15 @@
     }
 
     @Test
+    public void canon723() {
+        LinkKey lk1 = TopoUtils.canonicalLinkKey(LINK_7_TO_3);
+        print(lk1);
+        LinkKey lk2 = TopoUtils.canonicalLinkKey(LINK_3_TO_7);
+        print(lk2);
+        assertEquals("not canonical 3/7", lk1, lk2);
+    }
+
+    @Test
     public void formatSmallBytes() {
         vl = TopoUtils.formatBytes(1_000L);
         assertEquals(AM_WM, TopoUtils.Magnitude.ONE, vl.magnitude());
diff --git a/web/gui/logger.sh b/web/gui/logger.sh
index 13c5883..53c3ddad 100755
--- a/web/gui/logger.sh
+++ b/web/gui/logger.sh
@@ -10,7 +10,7 @@
 log:set DEBUG org.onosproject.ui.impl.topo.Topo2TrafficMessageHandler
 log:set DEBUG org.onosproject.ui.impl.topo.Traffic2Monitor
 
-#log:set DEBUG org.onosproject.ui.impl.UiWebSocket
+log:set DEBUG org.onosproject.ui.impl.UiWebSocket
 #log:set DEBUG org.onosproject.ui.impl.UiTopoSession
 
 log:list
