diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Bridge.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Bridge.java
index 0b5ffef..e1a00ba 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Bridge.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Bridge.java
@@ -18,7 +18,7 @@
 import org.onosproject.ovsdb.rfc.notation.Column;
 import org.onosproject.ovsdb.rfc.notation.OvsdbSet;
 import org.onosproject.ovsdb.rfc.notation.Row;
-import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.notation.Uuid;
 import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
 import org.onosproject.ovsdb.rfc.tableservice.AbstractOvsdbTableService;
 import org.onosproject.ovsdb.rfc.tableservice.ColumnDescription;
@@ -212,7 +212,7 @@
      * attributes.
      * @param ports the column data which column name is "ports"
      */
-    public void setPorts(Set<UUID> ports) {
+    public void setPorts(Set<Uuid> ports) {
         ColumnDescription columndesc = new ColumnDescription(
                                                              BridgeColumn.PORTS
                                                                      .columnName(),
@@ -240,7 +240,7 @@
      * attributes.
      * @param mirrors the column data which column name is "mirrors"
      */
-    public void setMirrors(Set<UUID> mirrors) {
+    public void setMirrors(Set<Uuid> mirrors) {
         ColumnDescription columndesc = new ColumnDescription(
                                                              BridgeColumn.MIRRORS
                                                                      .columnName(),
@@ -268,7 +268,7 @@
      * attributes.
      * @param netflow the column data which column name is "netflow"
      */
-    public void setNetflow(Set<UUID> netflow) {
+    public void setNetflow(Set<Uuid> netflow) {
         ColumnDescription columndesc = new ColumnDescription(
                                                              BridgeColumn.NETFLOW
                                                                      .columnName(),
@@ -296,7 +296,7 @@
      * attributes.
      * @param sflow the column data which column name is "sflow"
      */
-    public void setSflow(Set<UUID> sflow) {
+    public void setSflow(Set<Uuid> sflow) {
         ColumnDescription columndesc = new ColumnDescription(
                                                              BridgeColumn.SFLOW
                                                                      .columnName(),
@@ -324,7 +324,7 @@
      * attributes.
      * @param ipfix the column data which column name is "ipfix"
      */
-    public void setIpfix(Set<UUID> ipfix) {
+    public void setIpfix(Set<Uuid> ipfix) {
         ColumnDescription columndesc = new ColumnDescription(
                                                              BridgeColumn.IPFIX
                                                                      .columnName(),
@@ -548,7 +548,7 @@
      * of attributes.
      * @param flowTables the column data which column name is "flow_tables"
      */
-    public void setFlowTables(Map<Long, UUID> flowTables) {
+    public void setFlowTables(Map<Long, Uuid> flowTables) {
         ColumnDescription columndesc = new ColumnDescription(
                                                              BridgeColumn.FLOWTABLES
                                                                      .columnName(),
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/FlowSampleCollectorSet.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/FlowSampleCollectorSet.java
index 05a0354..7df78ee 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/FlowSampleCollectorSet.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/FlowSampleCollectorSet.java
@@ -19,7 +19,7 @@
 
 import org.onosproject.ovsdb.rfc.notation.Column;
 import org.onosproject.ovsdb.rfc.notation.Row;
-import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.notation.Uuid;
 import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
 import org.onosproject.ovsdb.rfc.tableservice.AbstractOvsdbTableService;
 import org.onosproject.ovsdb.rfc.tableservice.ColumnDescription;
@@ -97,7 +97,7 @@
      * attributes.
      * @param bridge the column data which column name is "bridge"
      */
-    public void setBridge(UUID bridge) {
+    public void setBridge(Uuid bridge) {
         ColumnDescription columndesc = new ColumnDescription(FlowSampleCollectorSetColumn.BRIDGE.columnName(),
                                                              "setBridge", VersionNum.VERSION710);
         super.setDataHandler(columndesc, bridge);
@@ -119,7 +119,7 @@
      * attributes.
      * @param ipfix the column data which column name is "ipfix"
      */
-    public void setIpfix(UUID ipfix) {
+    public void setIpfix(Uuid ipfix) {
         ColumnDescription columndesc = new ColumnDescription(FlowSampleCollectorSetColumn.IPFIX.columnName(),
                                                              "setIpfix", VersionNum.VERSION710);
         super.setDataHandler(columndesc, ipfix);
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Mirror.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Mirror.java
index ec022fe..093b13f 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Mirror.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Mirror.java
@@ -20,7 +20,7 @@
 
 import org.onosproject.ovsdb.rfc.notation.Column;
 import org.onosproject.ovsdb.rfc.notation.Row;
-import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.notation.Uuid;
 import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
 import org.onosproject.ovsdb.rfc.tableservice.AbstractOvsdbTableService;
 import org.onosproject.ovsdb.rfc.tableservice.ColumnDescription;
@@ -114,7 +114,7 @@
      * @param selectSrcPort the column data which column name is
      *            "select_src_port"
      */
-    public void setSelectSrcPort(Set<UUID> selectSrcPort) {
+    public void setSelectSrcPort(Set<Uuid> selectSrcPort) {
         ColumnDescription columndesc = new ColumnDescription(MirrorColumn.SELECTSRCPORT.columnName(),
                                                              "setSelectSrcPort", VersionNum.VERSION100);
         super.setDataHandler(columndesc, selectSrcPort);
@@ -137,7 +137,7 @@
      * @param selectDstPrt the column data which column name is
      *            "select_dst_port"
      */
-    public void setSelectDstPort(Set<UUID> selectDstPrt) {
+    public void setSelectDstPort(Set<Uuid> selectDstPrt) {
         ColumnDescription columndesc = new ColumnDescription(MirrorColumn.SELECTDSTPORT.columnName(),
                                                              "setSelectDstPort", VersionNum.VERSION100);
         super.setDataHandler(columndesc, selectDstPrt);
@@ -181,7 +181,7 @@
      * of attributes.
      * @param outputPort the column data which column name is "output_port"
      */
-    public void setOutputPort(Set<UUID> outputPort) {
+    public void setOutputPort(Set<Uuid> outputPort) {
         ColumnDescription columndesc = new ColumnDescription(MirrorColumn.OUTPUTPORT.columnName(),
                                                              "setOutputPort", VersionNum.VERSION100);
         super.setDataHandler(columndesc, outputPort);
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/OpenVSwitch.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/OpenVSwitch.java
index 9d20b98..782f54d 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/OpenVSwitch.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/OpenVSwitch.java
@@ -20,7 +20,7 @@
 
 import org.onosproject.ovsdb.rfc.notation.Column;
 import org.onosproject.ovsdb.rfc.notation.Row;
-import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.notation.Uuid;
 import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
 import org.onosproject.ovsdb.rfc.tableservice.AbstractOvsdbTableService;
 import org.onosproject.ovsdb.rfc.tableservice.ColumnDescription;
@@ -85,7 +85,7 @@
      * attributes.
      * @param bridges the column data which column name is "bridges"
      */
-    public void setBridges(Set<UUID> bridges) {
+    public void setBridges(Set<Uuid> bridges) {
         ColumnDescription columndesc = new ColumnDescription(
                                                              OpenVSwitchColumn.BRIDGES
                                                                      .columnName(),
@@ -114,7 +114,7 @@
      * attributes.
      * @param managers the column data which column name is "managers"
      */
-    public void setManagers(Set<UUID> managers) {
+    public void setManagers(Set<Uuid> managers) {
         ColumnDescription columndesc = new ColumnDescription(
                                                              OpenVSwitchColumn.MANAGERS
                                                                      .columnName(),
@@ -144,7 +144,7 @@
      * @param managerOptions the column data which column name is
      *            "manager_options"
      */
-    public void setManagerOptions(Set<UUID> managerOptions) {
+    public void setManagerOptions(Set<Uuid> managerOptions) {
         ColumnDescription columndesc = new ColumnDescription(
                                                              OpenVSwitchColumn.MANAGEROPTIONS
                                                                      .columnName(),
@@ -172,7 +172,7 @@
      * attributes.
      * @param ssl the column data which column name is "ssl"
      */
-    public void setSsl(Set<UUID> ssl) {
+    public void setSsl(Set<Uuid> ssl) {
         ColumnDescription columndesc = new ColumnDescription(
                                                              OpenVSwitchColumn.SSL
                                                                      .columnName(),
@@ -313,7 +313,7 @@
      * of attributes.
      * @param capabilities the column data which column name is "capabilities"
      */
-    public void setCapabilities(Map<String, UUID> capabilities) {
+    public void setCapabilities(Map<String, Uuid> capabilities) {
         ColumnDescription columndesc = new ColumnDescription(
                                                              OpenVSwitchColumn.CAPABILITIES
                                                                      .columnName(),
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Port.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Port.java
index 1e1ab7d..2851166 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Port.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Port.java
@@ -20,7 +20,7 @@
 
 import org.onosproject.ovsdb.rfc.notation.Column;
 import org.onosproject.ovsdb.rfc.notation.Row;
-import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.notation.Uuid;
 import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
 import org.onosproject.ovsdb.rfc.tableservice.AbstractOvsdbTableService;
 import org.onosproject.ovsdb.rfc.tableservice.ColumnDescription;
@@ -126,7 +126,7 @@
      * of attributes.
      * @param interfaces the column data which column name is "interfaces"
      */
-    public void setInterfaces(Set<UUID> interfaces) {
+    public void setInterfaces(Set<Uuid> interfaces) {
         ColumnDescription columndesc = new ColumnDescription(
                                                              PortColumn.INTERFACES
                                                                      .columnName(),
@@ -238,7 +238,7 @@
      * attributes.
      * @param qos the column data which column name is "qos"
      */
-    public void setQos(Set<UUID> qos) {
+    public void setQos(Set<Uuid> qos) {
         ColumnDescription columndesc = new ColumnDescription(
                                                              PortColumn.QOS
                                                                      .columnName(),
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Qos.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Qos.java
index a40aa30..348a7b5 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Qos.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Qos.java
@@ -20,7 +20,7 @@
 
 import org.onosproject.ovsdb.rfc.notation.Column;
 import org.onosproject.ovsdb.rfc.notation.Row;
-import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.notation.Uuid;
 import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
 import org.onosproject.ovsdb.rfc.tableservice.AbstractOvsdbTableService;
 import org.onosproject.ovsdb.rfc.tableservice.ColumnDescription;
@@ -75,7 +75,7 @@
      * attributes.
      * @param queues the column data which column name is "queues"
      */
-    public void setQueues(Map<Long, UUID> queues) {
+    public void setQueues(Map<Long, Uuid> queues) {
         ColumnDescription columndesc = new ColumnDescription(QosColumn.QUEUES.columnName(), "setQueues",
                                                              VersionNum.VERSION100);
         super.setDataHandler(columndesc, queues);
