diff --git a/apps/pathpainter/src/main/java/org/onosproject/pathpainter/PathPainterTopovMessageHandler.java b/apps/pathpainter/src/main/java/org/onosproject/pathpainter/PathPainterTopovMessageHandler.java
index b24bd85..95429c0 100644
--- a/apps/pathpainter/src/main/java/org/onosproject/pathpainter/PathPainterTopovMessageHandler.java
+++ b/apps/pathpainter/src/main/java/org/onosproject/pathpainter/PathPainterTopovMessageHandler.java
@@ -40,7 +40,6 @@
 import org.onosproject.ui.topo.Highlights;
 import org.onosproject.ui.topo.HostHighlight;
 import org.onosproject.ui.topo.NodeBadge;
-import org.onosproject.ui.topo.TopoJson;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -48,6 +47,8 @@
 import java.util.List;
 import java.util.Set;
 
+import static org.onosproject.ui.topo.TopoJson.highlightsMessage;
+
 /**
  * ONOS UI PathPainter Topology-Overlay message handler.
  */
@@ -67,11 +68,11 @@
     private static final String TYPE = "type";
     private static final String SWITCH = "switch";
     private static final String ENDSTATION = "endstation";
-    public static final String DST = "Dst";
-    public static final String SRC = "Src";
+    private static final String DST = "Dst";
+    private static final String SRC = "Src";
     // Delay for showHighlights event processing on GUI client side to
     // account for addLink animation.
-    public static final int DELAY_MS = 1100;
+    private static final int DELAY_MS = 1100;
 
     private final TopologyListener topologyListener = new InternalTopologyListener();
 
@@ -97,7 +98,7 @@
     protected TopologyService topologyService;
 
 
-    // ===============-=-=-=-=-=-======================-=-=-=-=-=-=-================================
+    // ===============-=-=-=-=-=-======================-=-=-=-=-=-=-===========
 
 
     @Override
@@ -139,10 +140,10 @@
         }
 
         @Override
-        public void process(long sid, ObjectNode payload) {
+        public void process(ObjectNode payload) {
             src = null;
             dst = null;
-            sendMessage(TopoJson.highlightsMessage(new Highlights()));
+            sendMessage(highlightsMessage(new Highlights()));
         }
     }
 
@@ -153,17 +154,17 @@
         }
 
         @Override
-        public void process(long sid, ObjectNode payload) {
+        public void process(ObjectNode payload) {
             String id = string(payload, ID);
             src = elementId(id);
             srcType = string(payload, TYPE);
             if (src.equals(dst)) {
                 dst = null;
             }
-            sendMessage(TopoJson.highlightsMessage(addBadge(new Highlights(),
-                                                            srcType,
-                                                            src.toString(),
-                                                            SRC)));
+
+            sendMessage(highlightsMessage(
+                    addBadge(new Highlights(), srcType, src.toString(), SRC))
+            );
             findAndSendPaths(currentMode);
         }
     }
@@ -174,7 +175,7 @@
         }
 
         @Override
-        public void process(long sid, ObjectNode payload) {
+        public void process(ObjectNode payload) {
             String id = string(payload, ID);
             dst = elementId(id);
             dstType = string(payload, TYPE);
@@ -182,10 +183,9 @@
                 src = null;
             }
 
-            sendMessage(TopoJson.highlightsMessage(addBadge(new Highlights(),
-                                                            dstType,
-                                                            dst.toString(),
-                                                            DST)));
+            sendMessage(highlightsMessage(
+                    addBadge(new Highlights(), dstType, dst.toString(), DST))
+            );
             findAndSendPaths(currentMode);
         }
     }
@@ -196,7 +196,7 @@
         }
 
         @Override
-        public void process(long sid, ObjectNode payload) {
+        public void process(ObjectNode payload) {
             ElementId temp = src;
             src = dst;
             dst = temp;
@@ -214,7 +214,7 @@
         }
 
         @Override
-        public void process(long sid, ObjectNode payload) {
+        public void process(ObjectNode payload) {
             pathIndex = (pathIndex >= paths.size() - 1 ? 0 : pathIndex + 1);
             hilightAndSendPaths();
         }
@@ -226,7 +226,7 @@
         }
 
         @Override
-        public void process(long sid, ObjectNode payload) {
+        public void process(ObjectNode payload) {
             pathIndex = (pathIndex <= 0 ? paths.size() - 1 : pathIndex - 1);
             hilightAndSendPaths();
         }
@@ -238,7 +238,7 @@
         }
 
         @Override
-        public void process(long sid, ObjectNode payload) {
+        public void process(ObjectNode payload) {
             String mode = string(payload, MODE);
             switch (mode) {
                 case "shortest":
@@ -287,7 +287,7 @@
                 paths = ImmutableList.copyOf(pathService.getPaths(src, dst, linkData));
                 allPathLinks = buildPaths(builder).build();
             } else {
-                log.info("Unsupported MODE");
+                log.warn("Unsupported MODE");
             }
         } else {
             paths = ImmutableList.of();
@@ -342,7 +342,7 @@
         if (dst != null) {
             highlights = addBadge(highlights, dstType, dst.toString(), DST);
         }
-        sendMessage(TopoJson.highlightsMessage(highlights));
+        sendMessage(highlightsMessage(highlights));
     }
 
     private Highlights addBadge(Highlights highlights, String type, String elemId, String src) {
