diff --git a/apps/pce/pceweb/src/main/java/org/onosproject/pceweb/PceWebTopovMessageHandler.java b/apps/pce/pceweb/src/main/java/org/onosproject/pceweb/PceWebTopovMessageHandler.java
index 72f0118..16ce224 100644
--- a/apps/pce/pceweb/src/main/java/org/onosproject/pceweb/PceWebTopovMessageHandler.java
+++ b/apps/pce/pceweb/src/main/java/org/onosproject/pceweb/PceWebTopovMessageHandler.java
@@ -109,8 +109,7 @@
     private Set<Link> allPathLinks;
     private int highlightDelay;
     private ElementId src, dst;
-    private String srcType, dstType;
-    private List<Path> paths;
+    private List<Path> paths = new LinkedList<>();
     private int pathIndex;
 
     private final Logger log = LoggerFactory.getLogger(getClass());
@@ -137,8 +136,6 @@
     protected Collection<RequestHandler> createRequestHandlers() {
         return ImmutableSet.of(
                 new ClearHandler(),
-                new SetSrcHandler(),
-                new SetDstHandler(),
                 new SetPathHandler(),
                 new UpdatePathQueryHandler(),
                 new UpdatePathHandler(),
@@ -173,51 +170,6 @@
     }
 
     /**
-     * Handles the 'set source' event received from the client.
-     */
-    private final class SetSrcHandler extends RequestHandler {
-
-        public SetSrcHandler() {
-            super(PCEWEB_SET_SRC);
-        }
-
-        @Override
-        public void process(long sid, 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)));
-        }
-    }
-
-    /**
-     * Handles the 'set destination' event received from the client.
-     */
-    private final class SetDstHandler extends RequestHandler {
-
-        public SetDstHandler() {
-            super(PCEWEB_SET_DST);
-        }
-
-        @Override
-        public void process(long sid, ObjectNode payload) {
-            String id = string(payload, ID);
-            dst = elementId(id);
-            dstType = string(payload, TYPE);
-            if (src.equals(dst)) {
-                src = null;
-            }
-            sendMessage(TopoJson.highlightsMessage(addBadge(new Highlights(),
-                    dstType, dst.toString(), DST)));
-
-        }
-    }
-
-    /**
      * Handles the 'path calculation' event received from the client.
      */
     private final class SetPathHandler extends RequestHandler {
@@ -228,6 +180,14 @@
 
         @Override
         public void process(long sid, ObjectNode payload) {
+            String srcId = string(payload, SRCID);
+            src = elementId(srcId);
+            String dstId = string(payload, DSTID);
+            dst = elementId(dstId);
+            if (src.equals(dst)) {
+                src = null;
+            }
+
             String bandWidth = string(payload, BANDWIDTH);
             String bandWidthType = string(payload, BANDWIDTHTYPE);
             String costType = string(payload, COSTTYPE);
@@ -555,7 +515,7 @@
     /**
      * Handles the highlights of selected path.
      */
-    private void hilightAndSendPaths() {
+    private void hilightAndSendPaths(Highlights highlights) {
         PceWebLinkMap linkMap = new PceWebLinkMap();
         allPathLinks.forEach(linkMap::add);
         Set<Link> selectedPathLinks;
@@ -563,7 +523,6 @@
         selectedPathLinks = paths.isEmpty() ?
                 ImmutableSet.of() : ImmutableSet.copyOf(paths.get(pathIndex).links());
 
-        Highlights highlights = new Highlights();
         if (highlightDelay > 0) {
             highlights.delay(highlightDelay);
         }
@@ -571,12 +530,6 @@
             plink.computeHilight(selectedPathLinks, allPathLinks);
             highlights.add(plink.highlight(null));
         }
-        if (src != null) {
-            highlights = addBadge(highlights, srcType, src.toString(), SRC);
-        }
-        if (dst != null) {
-            highlights = addBadge(highlights, dstType, dst.toString(), DST);
-        }
         sendMessage(TopoJson.highlightsMessage(highlights));
     }
 
@@ -584,17 +537,13 @@
      *  Handles the addition of badge and highlights.
      *
      * @param highlights highlights
-     * @param type device type
      * @param elemId device to be add badge
      * @param src device to be add badge
      * @return
      */
-    private Highlights addBadge(Highlights highlights, String type,
+    private Highlights addBadge(Highlights highlights,
             String elemId, String src) {
-        if (ROUTER.equals(type)) {
-            highlights = addDeviceBadge(highlights, elemId, src);
-        }
-
+        highlights = addDeviceBadge(highlights, elemId, src);
         return highlights;
     }
 
@@ -603,7 +552,7 @@
      *
      * @param h highlights
      * @param elemId device to be add badge
-     * @param type device type
+     * @param type device badge value
      * @return highlights
      */
     private Highlights addDeviceBadge(Highlights h, String elemId, String type) {
@@ -616,7 +565,7 @@
     /**
      * Handles the node badge add and highlights.
      *
-     * @param type device type
+     * @param type device badge value
      * @return badge of given node
      */
     private NodeBadge createBadge(String type) {
@@ -656,21 +605,35 @@
     private void findTunnelAndHighlights() {
         Collection<Tunnel> tunnelSet = null;
         tunnelSet = tunnelService.queryTunnel(MPLS);
-        for (Tunnel tunnel : tunnelSet) {
-            if (tunnel.path() == null) {
-                log.error("path does not exist");
-                return;
-            }
-            paths.add(tunnel.path());
-        }
-
         if (tunnelSet.size() == 0) {
             log.warn("Tunnel does not exist");
             return;
         }
 
+        paths.removeAll(paths);
+        Highlights highlights = new Highlights();
+        for (Tunnel tunnel : tunnelSet) {
+            if (tunnel.path() == null) {
+                log.error("path does not exist");
+                return;
+            }
+            Link firstLink = tunnel.path().links().get(0);
+            if (firstLink != null) {
+                if (firstLink.src() != null) {
+                        highlights = addBadge(highlights, firstLink.src().deviceId().toString(), SRC);
+                }
+            }
+            Link lastLink = tunnel.path().links().get(tunnel.path().links().size() - 1);
+            if (lastLink != null) {
+                if (lastLink.dst() != null) {
+                        highlights = addBadge(highlights, lastLink.dst().deviceId().toString(), DST);
+                }
+            }
+            paths.add(tunnel.path());
+        }
+
         ImmutableSet.Builder<Link> builder = ImmutableSet.builder();
         allPathLinks = buildPaths(builder).build();
-        hilightAndSendPaths();
+        hilightAndSendPaths(highlights);
     }
 }
diff --git a/apps/pce/pceweb/src/main/java/org/onosproject/pceweb/PceWebTopovOverlay.java b/apps/pce/pceweb/src/main/java/org/onosproject/pceweb/PceWebTopovOverlay.java
index 044b7a2..30b26cd 100644
--- a/apps/pce/pceweb/src/main/java/org/onosproject/pceweb/PceWebTopovOverlay.java
+++ b/apps/pce/pceweb/src/main/java/org/onosproject/pceweb/PceWebTopovOverlay.java
@@ -28,9 +28,7 @@
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Link;
 import org.onosproject.ui.UiTopoOverlay;
-import org.onosproject.ui.topo.ButtonId;
 import org.onosproject.ui.topo.PropertyPanel;
-import org.onosproject.net.HostId;
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.link.LinkEvent;
 import org.onosproject.net.resource.ContinuousResource;
@@ -56,8 +54,6 @@
     public static final String ASBR_BIT = "externalBit";
     public static final String TE_METRIC = "teCost";
 
-    private static final ButtonId SRC_BUTTON = new ButtonId("src");
-    private static final ButtonId DST_BUTTON = new ButtonId("dst");
     /**
      * Initialize the overlay ID.
      */
@@ -80,8 +76,6 @@
 
          pp.removeAllProps();
 
-         pp.addButton(SRC_BUTTON).addButton(DST_BUTTON);
-
          pp.removeButtons(CoreButtons.SHOW_PORT_VIEW)
                 .removeButtons(CoreButtons.SHOW_GROUP_VIEW)
                 .removeButtons(CoreButtons.SHOW_METER_VIEW);
@@ -156,9 +150,4 @@
 
         return map;
     }
-
-    @Override
-    public void modifyHostDetails(PropertyPanel pp, HostId hostId) {
-        pp.addButton(SRC_BUTTON).addButton(DST_BUTTON);
-    }
 }
diff --git a/apps/pce/pceweb/src/main/resources/app/view/pcewebTopov/pcewebTopov.css b/apps/pce/pceweb/src/main/resources/app/view/pcewebTopov/pcewebTopov.css
index dcd4bcb..705f891 100644
--- a/apps/pce/pceweb/src/main/resources/app/view/pcewebTopov/pcewebTopov.css
+++ b/apps/pce/pceweb/src/main/resources/app/view/pcewebTopov/pcewebTopov.css
@@ -1 +1,4 @@
-/* css for sample app topology overlay  */
\ No newline at end of file
+/* css for PCE web app topology overlay  */
+.radioButtonSpace {
+    margin-left:20px;
+}
diff --git a/apps/pce/pceweb/src/main/resources/app/view/pcewebTopov/pcewebTopovDemo.js b/apps/pce/pceweb/src/main/resources/app/view/pcewebTopov/pcewebTopovDemo.js
index 586ebea..bf7723d 100644
--- a/apps/pce/pceweb/src/main/resources/app/view/pcewebTopov/pcewebTopovDemo.js
+++ b/apps/pce/pceweb/src/main/resources/app/view/pcewebTopov/pcewebTopovDemo.js
@@ -75,11 +75,21 @@
             p = form.append('p');
 
         function addAttribute(name, id, nameField, type) {
-            p.append('input').attr({
-                type: type,
-                name: name,
-                id: id
-            });
+            if (type == 'radio') {
+                p.append('input').attr({
+                    type: type,
+                    name: name,
+                    id: id,
+                    class: 'radioButtonSpace'
+                });
+            } else {
+                p.append('input').attr({
+                    type: type,
+                    name: name,
+                    id: id
+                });
+            }
+
 
             p.append('span').text(nameField);
             p.append('br');
@@ -135,11 +145,21 @@
             p = form.append('p');
 
         function addAttribute(name, id, nameField, type) {
-            p.append('input').attr({
-                type: type,
-                name: name,
-                id: id
-            });
+            if (type == 'radio') {
+                p.append('input').attr({
+                    type: type,
+                    name: name,
+                    id: id,
+                    class: 'radioButtonSpace'
+                });
+            }
+            else {
+                p.append('input').attr({
+                    type: type,
+                    name: name,
+                    id: id
+                });
+            }
 
             p.append('span').text(nameField);
             p.append('br');
@@ -278,7 +298,7 @@
     }
 
     //setup path
-    function setMode() {
+    function setMode(node) {
 
         function dOk() {
             var bandWidth = isChecked('band-width-box'),
@@ -320,6 +340,8 @@
             }
 
             wss.sendEvent(setPathmsg, {
+                srid: node[0],
+                dsid: node[1],
                 bw: bandValue,
                 bwtype: bandType,
                 ctype: costTypeVal,
diff --git a/apps/pce/pceweb/src/main/resources/app/view/pcewebTopov/pcewebTopovOverlay.js b/apps/pce/pceweb/src/main/resources/app/view/pcewebTopov/pcewebTopovOverlay.js
index 72dd1ef..b10b46a 100644
--- a/apps/pce/pceweb/src/main/resources/app/view/pcewebTopov/pcewebTopovOverlay.js
+++ b/apps/pce/pceweb/src/main/resources/app/view/pcewebTopov/pcewebTopovOverlay.js
@@ -47,71 +47,19 @@
         // They can be referenced (from this overlay) as '*src'
         // That is, the '*' prefix stands in for 'PCE-web-overlay-'
         glyphs: {
-            src: {
-                vb: '0 0 110 110',
-                d: 'M28.7,59.3 M14.9,53 M8.7,39 M32.4,92.5H25l-0.2-3.6' +
-                'c-0.5-9-5.4-23.9-12.9-33.5c-5.2-6.6-7-12.8-7-16.3c0-13.3,10.7-24,23.8-24c13.1,0,23.8,10.8,23.8,24c0,3.5-1.8,9.7-7,16.3' +
-                'C38,65,33.1,80,32.6,88.9L32.4,92.5z M27.9,89.5h1.7l0-0.7c0.5-9.4,5.7-25.2,13.5-35.2c4.7-6,6.4-11.4,6.4-14.5' +
-                'c0-11.6-9.3-21-20.8-21C17.3,18,7.9,27.5,7.9,39c0,3,1.7,8.4,6.4,14.5c7.9,10.1,13.1,25.8,13.5,35.2L27.9,89.5z M28.7,83.2' +
-                'M28.6,29.8c-4.7,0-8.5,3.8-8.5,8.5c0,4.7,3.8,8.5,8.5,8.5s8.5-3.8,8.5-8.5C37.1,33.6,33.3,29.8,28.6,29.8z M89.6,47 M89.6,29.5' +
-                'c-0.1,3.1-0.1,12.8,0,17c0.1,4.2,14.1-5.5,13.9-8.5C103.4,35.1,89.6,25.6,89.6,29.5z M51,38.1L89.5,38 M89.5,39.5l0-3L51,36.5l0,3' +
-                'L89.5,39.5z'
-            },
-            dst: {
-                vb: '0 0 110 110',
-                d: 'M80.3,59.8 M85.8,92.5h-7.2L78.4,89c-0.4-8.8-5.2-23.6-12.3-33' +
-                'c-4.9-6.5-6.7-12.5-6.7-16c0-13,10.2-23.7,22.7-23.7c12.5,0,22.7,10.6,22.7,23.7c0,3.5-1.8,9.5-6.7,16C91.2,65.4,86.4,80.1,86,89' +
-                'L85.8,92.5z M81.4,89.5H83l0-0.7c0.5-9.3,5.4-24.8,12.9-34.7c4.5-5.9,6.1-11.2,6.1-14.2c0-11.4-8.9-20.7-19.8-20.7' +
-                'c-10.9,0-19.8,9.3-19.8,20.7c0,3,1.6,8.3,6.1,14.2C76,64,80.9,79.5,81.4,88.8L81.4,89.5z M82.1,30.8c-4.5,0-8.1,3.7-8.1,8.4' +
-                's3.6,8.4,8.1,8.4c4.5,0,8.1-3.7,8.1-8.4S86.6,30.8,82.1,30.8z M47.2,47.5 M45.2,30.8c-0.1,3.1-0.1,12.6,0,16.7' +
-                'c0.1,4.1,13.4-5.4,13.3-8.4C58.4,36.2,45.2,26.9,45.2,30.8z M45.2,39.1L6.7,39.2 M45.2,40.6l0-3L6.7,37.7l0,3L45.2,40.6z'
-            },
-            jp: {
+             jp: {
                 vb: '0 0 110 110',
                 d: 'M84.3,89.3L58.9,64.2l-1.4,1.4L83,90.7L84.3,89.3z M27,7.6H7.4v19.2H27V7.6z' +
                 'M59.3,47.1H39.8v19.2h19.5V47.1z M102.1,79.5H82.6v19.2h19.5V79.5z M41.7,47.6L19,25.1l-1.2,1.2l22.7,22.5L41.7,47.6z'
             },
         },
 
-       // detail panel button definitions
-        buttons: {
-            src: {
-                gid: '*src',
-                tt: 'Set source node',
-                cb: function (data) {
-                    $log.debug('Set src action invoked with data:', data);
-                    pps.setSrc(selection);
-                }
-            },
-            dst: {
-                gid: '*dst',
-                tt: 'Set destination node',
-                cb: function (data) {
-                    $log.debug('Set dst action invoked with data:', data);
-                    pps.setDst(selection);
-                }
-            }
-        },
-        // Key bindings for PCE web overlay buttons
+       // Key bindings for PCE web overlay buttons
         // NOTE: fully qual. button ID is derived from overlay-id and key-name
         keyBindings: {
-            openBracket: {
-                cb: function () {
-                    pps.setSrc(selection);
-                },
-                tt: 'Set source node',
-                gid: '*src'
-            },
-            closeBracket: {
-                cb: function () {
-                    pps.setDst(selection);
-                },
-                tt: 'Set destination node',
-                gid: '*dst'
-            },
             1: {
                 cb: function () {
-                    pps.setMode();
+                    pps.setMode(selection);
                 },
                 tt: 'Setup path',
                 gid: 'plus'
@@ -137,16 +85,9 @@
                 tt: 'Show Tunnels',
                 gid: 'checkMark'
             },
-            0: {
-                cb: function () {
-                    pps.clear();
-                },
-                tt: 'Clear source and destination',
-                gid: 'xMark'
-            },
 
             _keyOrder: [
-                'openBracket', 'closeBracket', '1', '2', '3', '4', '0'
+                '1', '2', '3', '4'
             ]
         },
         hooks: {
