diff --git a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
index 5d521ca..b36032b 100644
--- a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
+++ b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
@@ -1506,8 +1506,8 @@
         }
         ConcurrentMap<String, Row> rows = rowStore.getRowStore();
         for (String uuid : rows.keySet()) {
-            Row row = getRow(DATABASENAME, BRIDGE, uuid);
-            OvsdbBridge ovsdbBridge = getOvsdbBridge(row);
+            Row bridgeRow = getRow(DATABASENAME, BRIDGE, uuid);
+            OvsdbBridge ovsdbBridge = getOvsdbBridge(bridgeRow, Uuid.uuid(uuid));
             if (ovsdbBridge != null) {
                 ovsdbBridges.add(ovsdbBridge);
             }
@@ -1652,7 +1652,7 @@
         return new OvsdbPort(new OvsdbPortNumber(ofPort), new OvsdbPortName(portName));
     }
 
-    private OvsdbBridge getOvsdbBridge(Row row) {
+    private OvsdbBridge getOvsdbBridge(Row row, Uuid bridgeUuid) {
         DatabaseSchema dbSchema = getDatabaseSchema(DATABASENAME);
         Bridge bridge = (Bridge) TableGenerator.getTable(dbSchema, row, OvsdbTable.BRIDGE);
         if (bridge == null) {
@@ -1670,7 +1670,26 @@
         if ((datapathId == null) || (bridgeName == null)) {
             return null;
         }
-        return OvsdbBridge.builder().name(bridgeName).datapathId(datapathId).build();
+
+        List<Controller> controllers = getControllers(bridgeUuid);
+
+        if (controllers != null) {
+            List<ControllerInfo> controllerInfos = controllers.stream().map(
+                    controller -> new ControllerInfo(
+                    (String) controller.getTargetColumn()
+                            .data())).collect(Collectors.toList());
+
+            return OvsdbBridge.builder()
+                    .name(bridgeName)
+                    .datapathId(datapathId)
+                    .controllers(controllerInfos)
+                    .build();
+        } else {
+            return OvsdbBridge.builder()
+                    .name(bridgeName)
+                    .datapathId(datapathId)
+                    .build();
+        }
     }
 
     private OvsdbQos getOvsdbQos(Row row) {
