diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/OvsdbRPC.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/OvsdbRpc.java
similarity index 98%
rename from protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/OvsdbRPC.java
rename to protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/OvsdbRpc.java
index 5d08b14..c487e76 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/OvsdbRPC.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/OvsdbRpc.java
@@ -15,18 +15,17 @@
  */
 package org.onosproject.ovsdb.rfc.jsonrpc;
 
-import java.util.List;
-
+import com.fasterxml.jackson.databind.JsonNode;
+import com.google.common.util.concurrent.ListenableFuture;
 import org.onosproject.ovsdb.rfc.operations.Operation;
 import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
 
-import com.fasterxml.jackson.databind.JsonNode;
-import com.google.common.util.concurrent.ListenableFuture;
+import java.util.List;
 
 /**
  * The following interface describe the RPC7047's methods that are supported.
  */
-public interface OvsdbRPC {
+public interface OvsdbRpc {
 
     /**
      * This operation retrieves a database-schema that describes hosted database
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/message/OperationResult.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/message/OperationResult.java
index 9980735..acc44cc 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/message/OperationResult.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/message/OperationResult.java
@@ -20,7 +20,7 @@
 import java.util.List;
 
 import org.onosproject.ovsdb.rfc.notation.Row;
-import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.notation.Uuid;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
@@ -30,7 +30,7 @@
 @JsonIgnoreProperties(ignoreUnknown = true)
 public final class OperationResult {
     private int count;
-    private UUID uuid;
+    private Uuid uuid;
     private List<Row> rows;
     private String error;
     private String details;
@@ -59,7 +59,7 @@
      * @param error error message
      * @param details details of error message
      */
-    public OperationResult(int count, UUID uuid, List<Row> rows, String error,
+    public OperationResult(int count, Uuid uuid, List<Row> rows, String error,
                            String details) {
         checkNotNull(uuid, "uuid cannot be null");
         checkNotNull(rows, "rows cannot be null");
@@ -92,7 +92,7 @@
      * Return uuid.
      * @return uuid
      */
-    public UUID getUuid() {
+    public Uuid getUuid() {
         return uuid;
     }
 
@@ -100,7 +100,7 @@
      * Set uuid value.
      * @param uuid the Operation message of uuid
      */
-    public void setUuid(UUID uuid) {
+    public void setUuid(Uuid uuid) {
         checkNotNull(uuid, "uuid cannot be null");
         this.uuid = uuid;
     }
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/message/RowUpdate.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/message/RowUpdate.java
index 221206e..9c49466 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/message/RowUpdate.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/message/RowUpdate.java
@@ -21,7 +21,7 @@
 import java.util.Objects;
 
 import org.onosproject.ovsdb.rfc.notation.Row;
-import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.notation.Uuid;
 
 /**
  * A TableUpdate is an object that maps from the row's UUID to a RowUpdate object.
@@ -29,7 +29,7 @@
  * Refer to RFC 7047 Section 4.1.6.
  */
 public final class RowUpdate {
-    private final UUID uuid;
+    private final Uuid uuid;
     private final Row oldRow;
     private final Row newRow;
 
@@ -39,7 +39,7 @@
      * @param oldRow present for "delete" and "modify" updates
      * @param newRow present for "initial", "insert", and "modify" updates
      */
-    public RowUpdate(UUID uuid, Row oldRow, Row newRow) {
+    public RowUpdate(Uuid uuid, Row oldRow, Row newRow) {
         checkNotNull(uuid, "uuid cannot be null");
         this.uuid = uuid;
         this.oldRow = oldRow;
@@ -50,7 +50,7 @@
      * Return uuid.
      * @return uuid
      */
-    public UUID uuid() {
+    public Uuid uuid() {
         return this.uuid;
     }
 
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/message/TableUpdate.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/message/TableUpdate.java
index 0673b79..ee006ef 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/message/TableUpdate.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/message/TableUpdate.java
@@ -22,20 +22,20 @@
 import java.util.Objects;
 
 import org.onosproject.ovsdb.rfc.notation.Row;
-import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.notation.Uuid;
 
 /**
  * TableUpdate is an object that maps from the row's UUID to a RowUpdate object.
  */
 public final class TableUpdate {
 
-    private final Map<UUID, RowUpdate> rows;
+    private final Map<Uuid, RowUpdate> rows;
 
     /**
      * Constructs a TableUpdate object.
      * @param rows the parameter of TableUpdate entity
      */
-    private TableUpdate(Map<UUID, RowUpdate> rows) {
+    private TableUpdate(Map<Uuid, RowUpdate> rows) {
         this.rows = rows;
     }
 
@@ -44,7 +44,7 @@
      * @param rows the parameter of TableUpdate entity
      * @return TableUpdate entity
      */
-    public static TableUpdate tableUpdate(Map<UUID, RowUpdate> rows) {
+    public static TableUpdate tableUpdate(Map<Uuid, RowUpdate> rows) {
         checkNotNull(rows, "rows cannot be null");
         return new TableUpdate(rows);
     }
@@ -54,7 +54,7 @@
      * @param uuid the key of rows
      * @return Row old row
      */
-    public Row getOld(UUID uuid) {
+    public Row getOld(Uuid uuid) {
         RowUpdate rowUpdate = rows.get(uuid);
         if (rowUpdate == null) {
             return null;
@@ -67,7 +67,7 @@
      * @param uuid the key of rows
      * @return Row new row
      */
-    public Row getNew(UUID uuid) {
+    public Row getNew(Uuid uuid) {
         RowUpdate rowUpdate = rows.get(uuid);
         if (rowUpdate == null) {
             return null;
@@ -79,7 +79,7 @@
      * Return rows.
      * @return rows
      */
-    public Map<UUID, RowUpdate> rows() {
+    public Map<Uuid, RowUpdate> rows() {
         return rows;
     }
 
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/Row.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/Row.java
index 0908876..eee0ee8 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/Row.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/Row.java
@@ -29,7 +29,7 @@
  */
 public final class Row {
     private String tableName;
-    private UUID uuid;
+    private Uuid uuid;
     private Map<String, Column> columns;
 
     /**
@@ -59,7 +59,7 @@
      * @param columns   Map of Column entity
      * @param uuid UUID of the row
      */
-    public Row(String tableName, UUID uuid, Map<String, Column> columns) {
+    public Row(String tableName, Uuid uuid, Map<String, Column> columns) {
         checkNotNull(tableName, "table name cannot be null");
         checkNotNull(uuid, "uuid cannot be null");
         checkNotNull(columns, "columns cannot be null");
@@ -91,7 +91,7 @@
      *
      * @return uuid
      */
-    public UUID uuid() {
+    public Uuid uuid() {
         return uuid;
     }
 
@@ -100,7 +100,7 @@
      *
      * @param uuid new uuid
      */
-    public void setUuid(UUID uuid) {
+    public void setUuid(Uuid uuid) {
         this.uuid = uuid;
     }
 
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/UUID.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/Uuid.java
similarity index 80%
rename from protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/UUID.java
rename to protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/Uuid.java
index 0177eea..8040081 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/UUID.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/Uuid.java
@@ -20,8 +20,8 @@
 
 import java.util.Objects;
 
-import org.onosproject.ovsdb.rfc.notation.json.UUIDConverter;
-import org.onosproject.ovsdb.rfc.notation.json.UUIDSerializer;
+import org.onosproject.ovsdb.rfc.notation.json.UuidConverter;
+import org.onosproject.ovsdb.rfc.notation.json.UuidSerializer;
 
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@@ -29,16 +29,16 @@
 /**
  * Handles both uuid and named-uuid.
  */
-@JsonSerialize(using = UUIDSerializer.class)
-@JsonDeserialize(converter = UUIDConverter.class)
-public final class UUID {
+@JsonSerialize(using = UuidSerializer.class)
+@JsonDeserialize(converter = UuidConverter.class)
+public final class Uuid {
     private final String value;
 
     /**
      * UUID constructor.
      * @param value UUID value
      */
-    private UUID(String value) {
+    private Uuid(String value) {
         checkNotNull(value, "value cannot be null");
         this.value = value;
     }
@@ -48,8 +48,8 @@
      * @param value UUID value
      * @return UUID
      */
-    public static UUID uuid(String value) {
-        return new UUID(value);
+    public static Uuid uuid(String value) {
+        return new Uuid(value);
     }
 
     /**
@@ -70,8 +70,8 @@
         if (this == obj) {
             return true;
         }
-        if (obj instanceof UUID) {
-            final UUID other = (UUID) obj;
+        if (obj instanceof Uuid) {
+            final Uuid other = (Uuid) obj;
             return Objects.equals(this.value, other.value);
         }
         return false;
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/json/UUIDConverter.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/json/UuidConverter.java
similarity index 80%
rename from protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/json/UUIDConverter.java
rename to protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/json/UuidConverter.java
index 66a8663..cd4449e 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/json/UUIDConverter.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/json/UuidConverter.java
@@ -15,7 +15,7 @@
  */
 package org.onosproject.ovsdb.rfc.notation.json;
 
-import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.notation.Uuid;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.util.StdConverter;
@@ -23,10 +23,10 @@
 /**
  * UUIDConverter Converter.
  */
-public class UUIDConverter extends StdConverter<JsonNode, UUID> {
+public class UuidConverter extends StdConverter<JsonNode, Uuid> {
 
     @Override
-    public UUID convert(JsonNode json) {
-        return UUID.uuid(json.get(1).asText());
+    public Uuid convert(JsonNode json) {
+        return Uuid.uuid(json.get(1).asText());
     }
 }
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/json/UUIDSerializer.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/json/UuidSerializer.java
similarity index 88%
rename from protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/json/UUIDSerializer.java
rename to protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/json/UuidSerializer.java
index 8fb5c49..4201bd1 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/json/UUIDSerializer.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/json/UuidSerializer.java
@@ -15,20 +15,19 @@
  */
 package org.onosproject.ovsdb.rfc.notation.json;
 
-import java.io.IOException;
-
-import org.onosproject.ovsdb.rfc.notation.UUID;
-
 import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.JsonSerializer;
 import com.fasterxml.jackson.databind.SerializerProvider;
+import org.onosproject.ovsdb.rfc.notation.Uuid;
+
+import java.io.IOException;
 
 /**
  * UUID Serializer.
  */
-public class UUIDSerializer extends JsonSerializer<UUID> {
+public class UuidSerializer extends JsonSerializer<Uuid> {
     @Override
-    public void serialize(UUID value, JsonGenerator generator,
+    public void serialize(Uuid value, JsonGenerator generator,
                           SerializerProvider provider) throws IOException {
         generator.writeStartArray();
         String reg = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$";
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);
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/AbstractOvsdbTableService.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/AbstractOvsdbTableService.java
index af1a01d..8e05174 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/AbstractOvsdbTableService.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/AbstractOvsdbTableService.java
@@ -25,7 +25,7 @@
 import org.onosproject.ovsdb.rfc.exception.VersionMismatchException;
 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.ColumnSchema;
 import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
 import org.onosproject.ovsdb.rfc.schema.TableSchema;
@@ -196,12 +196,12 @@
     }
 
     @Override
-    public UUID getTableUuid() {
+    public Uuid getTableUuid() {
         if (!isValid()) {
             return null;
         }
         ColumnDescription columnDesc = new ColumnDescription("_uuid", "getTableUuid");
-        return (UUID) getDataHandler(columnDesc);
+        return (Uuid) getDataHandler(columnDesc);
     }
 
     @Override
@@ -214,12 +214,12 @@
     }
 
     @Override
-    public UUID getTableVersion() {
+    public Uuid getTableVersion() {
         if (!isValid()) {
             return null;
         }
         ColumnDescription columnDesc = new ColumnDescription("_version", "getTableVersion");
-        return (UUID) getDataHandler(columnDesc);
+        return (Uuid) getDataHandler(columnDesc);
     }
 
     @Override
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/OvsdbTableService.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/OvsdbTableService.java
index 58b656e..9e10601 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/OvsdbTableService.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/OvsdbTableService.java
@@ -16,7 +16,7 @@
 package org.onosproject.ovsdb.rfc.tableservice;
 
 import org.onosproject.ovsdb.rfc.notation.Column;
-import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.notation.Uuid;
 
 /**
  * Representation of conversion between Ovsdb table and Row.
@@ -48,7 +48,7 @@
      * Returns UUID which column name is _uuid.
      * @return UUID
      */
-    public UUID getTableUuid();
+    public Uuid getTableUuid();
 
     /**
      * Returns UUID Column which column name is _uuid.
@@ -60,7 +60,7 @@
      * Returns UUID which column name is _version.
      * @return UUID
      */
-    public UUID getTableVersion();
+    public Uuid getTableVersion();
 
     /**
      * Returns UUID Column which column name is _version.
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/FromJsonUtil.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/FromJsonUtil.java
index 1e79860..0cd6553 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/FromJsonUtil.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/FromJsonUtil.java
@@ -31,7 +31,7 @@
 import org.onosproject.ovsdb.rfc.message.UpdateNotification;
 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.operations.Operation;
 import org.onosproject.ovsdb.rfc.schema.ColumnSchema;
 import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
@@ -276,12 +276,12 @@
      * @return TableUpdate
      */
     public static TableUpdate jsonNodeToTableUpdate(TableSchema tableSchema, JsonNode updateJson) {
-        Map<UUID, RowUpdate> rows = Maps.newHashMap();
+        Map<Uuid, RowUpdate> rows = Maps.newHashMap();
         Iterator<Map.Entry<String, JsonNode>> tableUpdateItr = updateJson.fields();
         while (tableUpdateItr.hasNext()) {
             Map.Entry<String, JsonNode> oldNewRow = tableUpdateItr.next();
             String uuidStr = oldNewRow.getKey();
-            UUID uuid = UUID.uuid(uuidStr);
+            Uuid uuid = Uuid.uuid(uuidStr);
             JsonNode newR = oldNewRow.getValue().get("new");
             JsonNode oldR = oldNewRow.getValue().get("old");
             Row newRow = newR != null ? createRow(tableSchema, uuid, newR) : null;
@@ -298,7 +298,7 @@
      * @param rowNode JsonNode
      * @return Row
      */
-    private static Row createRow(TableSchema tableSchema, UUID uuid, JsonNode rowNode) {
+    private static Row createRow(TableSchema tableSchema, Uuid uuid, JsonNode rowNode) {
         if (tableSchema == null) {
             return null;
         }
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/TransValueUtil.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/TransValueUtil.java
index 49fbd37..2d5b84d 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/TransValueUtil.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/TransValueUtil.java
@@ -21,7 +21,7 @@
 import org.onosproject.ovsdb.rfc.notation.OvsdbMap;
 import org.onosproject.ovsdb.rfc.notation.OvsdbSet;
 import org.onosproject.ovsdb.rfc.notation.RefTableRow;
-import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.notation.Uuid;
 import org.onosproject.ovsdb.rfc.schema.type.AtomicColumnType;
 import org.onosproject.ovsdb.rfc.schema.type.BaseType;
 import org.onosproject.ovsdb.rfc.schema.type.BooleanBaseType;
@@ -160,7 +160,7 @@
                     if (valueNode.get(0).isTextual()
                             && ("uuid".equals(valueNode.get(0).asText()) || "named-uuid"
                                     .equals(valueNode.get(0).asText()))) {
-                        return UUID.uuid(valueNode.get(1).asText());
+                        return Uuid.uuid(valueNode.get(1).asText());
                     }
                 }
             } else {
