diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiGlobalClassUtil.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiGlobalClassUtil.java
index 2af7fed..200c623 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiGlobalClassUtil.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiGlobalClassUtil.java
@@ -25,35 +25,35 @@
 import java.lang.reflect.Method;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.UUID;
 
 import org.slf4j.Logger;
+
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
  * Utility methods dealing with TAPI modelObject which includes global class grouping.
- *
+ * <p>
  * <p> tapi-common@2018-03-07.yang
  * grouping global-class {
- *   leaf uuid {
- *     type uuid;
- *   }
- *   list name {
- *     key 'value-name';
- *     uses name-and-value;
- *   }
+ * leaf uuid {
+ * type uuid;
  * }
- *
+ * list name {
+ * key 'value-name';
+ * uses name-and-value;
+ * }
+ * }
+ * <p>
  * grouping name-and-value {
- *   leaf value-name {
- *     type string;
- *     description "The name of the value. The value need not have a name.";
- *   }
- *   leaf value {
- *     type string;
- *     description "The value";
- *   }
- *   description "A scoped name-value pair";
+ * leaf value-name {
+ * type string;
+ * description "The name of the value. The value need not have a name.";
+ * }
+ * leaf value {
+ * type string;
+ * description "The value";
+ * }
+ * description "A scoped name-value pair";
  * }
  * </p>
  */
@@ -65,14 +65,13 @@
     }
 
     /**
-     * Generate and set Uuid for the ModelObject.
-     * @param obj ModelObject
-     * @param <T> type of ModelObject
-     * @return generated uuid
+     * Set uuid for the ModelObject.
+     *
+     * @param obj  ModelObject
+     * @param uuid Uuid
+     * @param <T>  Type of ModelObject
      */
-    public static <T extends ModelObject> Uuid setUuid(T obj) {
-        Uuid uuid = Uuid.of(UUID.randomUUID().toString());
-
+    public static <T extends ModelObject> void setUuid(T obj, Uuid uuid) {
         @SuppressWarnings("unchecked")
         Class<T> cls = (Class<T>) obj.getClass();
         try {
@@ -81,15 +80,35 @@
         } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
             log.error("Exception thrown", e);
         }
+    }
+
+    /**
+     * Get uuid for the ModelObject.
+     *
+     * @param obj ModelObject
+     * @param <T> Type of ModelObject
+     * @return Uuid
+     */
+    public static <T extends ModelObject> Uuid getUuid(T obj) {
+        Uuid uuid = null;
+        @SuppressWarnings("unchecked")
+        Class<T> cls = (Class<T>) obj.getClass();
+        try {
+            Method method = cls.getMethod("uuid");
+            uuid = (Uuid) method.invoke(obj);
+        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
+            log.error("Exception thrown", e);
+        }
 
         return uuid;
     }
 
     /**
      * Add key-value to the ModelObject as "name-and-value" list.
+     *
      * @param obj ModelObject
-     * @param kvs key-value map
-     * @param <T> type of ModelObject
+     * @param kvs Key-value map
+     * @param <T> Type of ModelObject
      */
     public static <T extends ModelObject> void addNameList(T obj, Map<String, String> kvs) {
 
