diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java
index a84d38a..dbc7a83 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java
@@ -16,12 +16,15 @@
 
 package org.onosproject.ui.impl;
 
+import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.collect.ImmutableSet;
 import org.joda.time.DateTime;
 import org.onosproject.cluster.ClusterService;
 import org.onosproject.cluster.ControllerNode;
 import org.onosproject.cluster.NodeId;
+import org.onosproject.net.Device;
+import org.onosproject.net.device.DeviceService;
 import org.onosproject.ui.RequestHandler;
 import org.onosproject.ui.UiMessageHandler;
 import org.onosproject.ui.table.TableModel;
@@ -29,6 +32,11 @@
 import org.onosproject.ui.table.cell.TimeFormatter;
 
 import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static com.google.common.collect.ImmutableList.copyOf;
+import static org.onosproject.net.MastershipRole.MASTER;
 
 
 /**
@@ -44,6 +52,7 @@
     private static final String CLUSTER_DETAILS_RESP = "clusterDetailsResponse";
     private static final String DETAILS = "details";
 
+    private static final String DEVICES = "devices";
     private static final String ID = "id";
     private static final String IP = "ip";
     private static final String TCP_PORT = "tcp";
@@ -55,6 +64,16 @@
             ID, IP, TCP_PORT, STATE_IID, STARTED_IID, UPDATED
     };
 
+    private static final String URI = "id";
+    private static final String TYPE = "type";
+    private static final String CHASSIS_ID = "chassisid";
+    private static final String HW = "hw";
+    private static final String SW = "sw";
+    private static final String MFR = "mfr";
+    private static final String PROTOCOL = "protocol";
+    private static final String SERIAL = "serial";
+
+
     private static final String ICON_ID_ONLINE = "active";
     private static final String ICON_ID_OFFLINE = "inactive";
 
@@ -121,6 +140,33 @@
             super(CLUSTER_DETAILS_REQ);
         }
 
+        private List<Device> populateDevices() {
+            DeviceService ds = get(DeviceService.class);
+            return copyOf(ds.getDevices()).stream()
+                    .filter(d -> ds.getRole(d.id()) == MASTER)
+                    .collect(Collectors.toList());
+        }
+
+        private String deviceProtocol(Device device) {
+            String protocol = device.annotations().value(PROTOCOL);
+            return protocol != null ? protocol : "";
+        }
+
+        private ObjectNode deviceData(Device d) {
+            ObjectNode device = objectNode();
+
+            device.put(URI, d.id().toString());
+            device.put(TYPE, d.type().toString());
+            device.put(CHASSIS_ID, d.chassisId().toString());
+            device.put(MFR, d.manufacturer());
+            device.put(HW, d.hwVersion());
+            device.put(SW, d.swVersion());
+            device.put(PROTOCOL, deviceProtocol(d));
+            device.put(SERIAL, d.serialNumber());
+
+            return device;
+        }
+
         @Override
         public void process(long sid, ObjectNode payload) {
 
@@ -129,9 +175,18 @@
             ControllerNode node = cs.getNode(new NodeId(id));
 
             ObjectNode data = objectNode();
+            ArrayNode devices = arrayNode();
+            List<Device> deviceList = populateDevices();
+
             data.put(ID, node.id().toString());
             data.put(IP, node.ip().toString());
 
+            for (Device d : deviceList) {
+                devices.add(deviceData(d));
+            }
+
+            data.set(DEVICES, devices);
+
             //TODO put more detail info to data
 
             ObjectNode rootNode = objectNode();
diff --git a/web/gui/src/main/webapp/app/view/cluster/cluster.js b/web/gui/src/main/webapp/app/view/cluster/cluster.js
index b4dd391..887b943 100644
--- a/web/gui/src/main/webapp/app/view/cluster/cluster.js
+++ b/web/gui/src/main/webapp/app/view/cluster/cluster.js
@@ -53,6 +53,15 @@
         ],
         friendlyProps = [
             'Node ID', 'IP Address'
+        ],
+        deviceCols = [
+            'id', 'type', 'chassisid', 'mfr',
+            'hw', 'sw', 'protocol', 'serial'
+        ],
+        friendlyDeviceCols = [
+            'URI', 'Type', 'Chassis ID', 'Vendor',
+            'H/W Version', 'S/W Version', 'Protocol',
+            'Serial #'
         ];
 
     function closePanel() {
@@ -88,6 +97,9 @@
             .append('table');
         top.append('hr');
 
+        bottom = container.append('div').classed('bottom', true);
+        bottom.append('h2').classed('devices-title', true).html('Devices');
+        bottom.append('table');
         //ToDo add more details
     }
 
@@ -112,6 +124,45 @@
         });
     }
 
+    function addDeviceRow(tbody, device) {
+        var tr = tbody.append('tr');
+
+        deviceCols.forEach(function (col) {
+            tr.append('td').html(device[col]);
+        });
+    }
+
+    function populateBottom(devices) {
+        var table = bottom.select('table'),
+            theader = table.append('thead').append('tr'),
+            tbody = table.append('tbody'),
+            tbWidth, tbHeight;
+
+        friendlyDeviceCols.forEach(function (col) {
+            theader.append('th').html(col);
+        });
+        devices.forEach(function (device) {
+            addDeviceRow(tbody, device);
+        });
+
+        tbWidth = fs.noPxStyle(tbody, 'width') + scrollSize;
+        tbHeight = pHeight
+                    - (fs.noPxStyle(detailsPanel.el()
+                                        .select('.top'), 'height')
+                    + fs.noPxStyle(detailsPanel.el()
+                                        .select('.devices-title'), 'height')
+                    + portsTblPdg);
+
+        table.style({
+            height: tbHeight + 'px',
+            width: tbWidth + 'px',
+            overflow: 'auto',
+            display: 'block'
+        });
+
+        detailsPanel.width(tbWidth + ctnrPdg);
+    }
+
     function createDetailsPane() {
         detailsPanel = ps.createPanel(pName, {
             width: wSize.width,
@@ -128,11 +179,13 @@
 
     function populateDetails(details) {
         setUpPanel();
+
         populateTop(details);
+        populateBottom(details.devices);
 
         //ToDo add more details
         detailsPanel.height(pHeight);
-        detailsPanel.width(wtPdg);
+        //detailsPanel.width(wtPdg); ToDO Use this when needed!
     }
 
     function respDetailsCb(data) {
