diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
index 2e8336c..806e8c6 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
@@ -30,12 +30,10 @@
 import org.onosproject.ui.RequestHandler;
 import org.onosproject.ui.UiMessageHandler;
 import org.onosproject.ui.table.AbstractTableRow;
-import org.onosproject.ui.table.RowComparator;
+import org.onosproject.ui.table.TableRequestHandler;
 import org.onosproject.ui.table.TableRow;
-import org.onosproject.ui.table.TableUtils;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -47,7 +45,12 @@
 public class DeviceViewMessageHandler extends UiMessageHandler {
 
     private static final String DEV_DATA_REQ = "deviceDataRequest";
-    private static final String DEV_DETAIL_REQ = "deviceDetailRequest";
+    private static final String DEV_DATA_RESP = "deviceDataResponse";
+    private static final String DEVICES = "devices";
+
+    private static final String DEV_DETAILS_REQ = "deviceDetailsRequest";
+    private static final String DEV_DETAILS_RESP = "deviceDetailsResponse";
+    private static final String DETAILS = "details";
 
     private static final String ID = "id";
     private static final String TYPE = "type";
@@ -78,30 +81,16 @@
         );
     }
 
-    // ======================================================================
-
-    private final class DataRequestHandler extends RequestHandler {
-
+    // handler for device table requests
+    private final class DataRequestHandler extends TableRequestHandler {
         private DataRequestHandler() {
-            super(DEV_DATA_REQ);
+            super(DEV_DATA_REQ, DEV_DATA_RESP, DEVICES);
         }
 
         @Override
-        public void process(long sid, ObjectNode payload) {
-            RowComparator rc = TableUtils.createRowComparator(payload);
-
+        protected TableRow[] generateTableRows(ObjectNode payload) {
             DeviceService service = get(DeviceService.class);
             MastershipService mastershipService = get(MastershipService.class);
-            TableRow[] rows = generateTableRows(service, mastershipService);
-            Arrays.sort(rows, rc);
-            ObjectNode rootNode = MAPPER.createObjectNode();
-            rootNode.set("devices", TableUtils.generateArrayNode(rows));
-
-            sendMessage("deviceDataResponse", 0, rootNode);
-        }
-
-        private TableRow[] generateTableRows(DeviceService service,
-                                             MastershipService mastershipService) {
             List<TableRow> list = new ArrayList<>();
             for (Device dev : service.getDevices()) {
                 list.add(new DeviceTableRow(service, mastershipService, dev));
@@ -110,11 +99,10 @@
         }
     }
 
-    // ======================================================================
-
+    // handler for selected device detail requests
     private final class DetailRequestHandler extends RequestHandler {
         private DetailRequestHandler() {
-            super(DEV_DETAIL_REQ);
+            super(DEV_DETAILS_REQ);
         }
 
         @Override
@@ -152,8 +140,8 @@
             data.set(PORTS, ports);
 
             ObjectNode rootNode = MAPPER.createObjectNode();
-            rootNode.set("details", data);
-            sendMessage("deviceDetailsResponse", 0, rootNode);
+            rootNode.set(DETAILS, data);
+            sendMessage(DEV_DETAILS_RESP, 0, rootNode);
         }
 
         private ObjectNode portData(Port p, DeviceId id) {
@@ -183,7 +171,6 @@
 
     }
 
-
     private static String getTypeIconId(Device d) {
         return DEV_ICON_PREFIX + d.type().toString();
     }
