diff --git a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbBridge.java b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbBridge.java
index 00eb375..b38d1d7 100644
--- a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbBridge.java
+++ b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbBridge.java
@@ -45,6 +45,7 @@
     private final List<ControllerInfo> controllers;
 
     /* Adds more properties */
+    private final Optional<String> datapathType;
 
     /* other optional configs */
     private final Map<String, String> otherConfigs;
@@ -55,14 +56,17 @@
      * @param name name of the bridge
      * @param failMode openflow controller fail mode policy
      * @param controllers list of openflow controllers
+     * @param datapathType ovs datapath_type
      * @param otherConfigs other configs
      */
     private OvsdbBridge(String name, Optional<FailMode> failMode,
                        List<ControllerInfo> controllers,
+                       Optional<String> datapathType,
                        Map<String, String> otherConfigs) {
         this.name = checkNotNull(name);
         this.failMode = failMode;
         this.controllers = controllers;
+        this.datapathType = datapathType;
         this.otherConfigs = otherConfigs;
     }
 
@@ -94,6 +98,15 @@
     }
 
     /**
+     * Returns OVSDB datapath Type of the bridge.
+     *
+     * @return datapath type
+     */
+    public Optional<String> datapathType() {
+        return datapathType;
+    }
+
+    /**
      * Returns other configurations of the bridge.
      *
      * @return map of configurations
@@ -134,6 +147,7 @@
                 .add("bridgeName", name)
                 .add("failMode", failMode)
                 .add("controllers", controllers)
+                .add("datapathType", datapathType)
                 .add("otherConfigs", otherConfigs)
                 .toString();
     }
@@ -164,6 +178,7 @@
         private String name;
         private Optional<FailMode> failMode = Optional.empty();
         private List<ControllerInfo> controllers = Lists.newArrayList();
+        private Optional<String> datapathType = Optional.empty();
         private Map<String, String> otherConfigs = Maps.newHashMap();
 
         private Builder() {
@@ -182,7 +197,9 @@
                 otherConfigs.put(DISABLE_INBAND,
                                  bridgeDesc.disableInBand().get().toString());
             }
-
+            if (bridgeDesc.datapathType().isPresent()) {
+                this.datapathType = bridgeDesc.datapathType();
+            }
             this.name = bridgeDesc.name();
             this.failMode = bridgeDesc.failMode();
             this.controllers = Lists.newArrayList(bridgeDesc.controllers());
@@ -194,7 +211,7 @@
          * @return ovsdb bridge
          */
         public OvsdbBridge build() {
-            return new OvsdbBridge(name, failMode, controllers, otherConfigs);
+            return new OvsdbBridge(name, failMode, controllers, datapathType, otherConfigs);
         }
 
         /**
@@ -264,6 +281,17 @@
         }
 
         /**
+         * Returns OVSDB bridge builder with a given datapath type.
+         *
+         * @param datapathType datapath Type
+         * @return ovsdb bridge builder
+         */
+        public Builder datapathType(String datapathType) {
+            this.datapathType = Optional.ofNullable(datapathType);
+            return this;
+        }
+
+        /**
          * Returns OVSDB bridge builder with a given disable in-band config.
          *
          * @return ovsdb bridge builder
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 f60d48c..cc6e8b5 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
@@ -522,6 +522,11 @@
             bridge.setFailMode(Sets.newHashSet(failMode));
         }
 
+        if (ovsdbBridge.datapathType().isPresent()) {
+            String datapathType = ovsdbBridge.datapathType().get();
+            bridge.setDatapathType(datapathType);
+        }
+
         String bridgeUuid = getBridgeUuid(ovsdbBridge.name());
         if (bridgeUuid == null) {
             bridge.setName(ovsdbBridge.name());
