diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DataTreeBuilderHelper.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DataTreeBuilderHelper.java
index 0f56b4b..80fc2f3 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DataTreeBuilderHelper.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DataTreeBuilderHelper.java
@@ -32,6 +32,8 @@
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.InnerNode;
 import org.onosproject.yang.model.LeafNode;
+import org.onosproject.yang.model.LeafSchemaContext;
+import org.onosproject.yang.model.YangNamespace;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -906,9 +908,10 @@
                                        YangLeafList leafList) {
         if (extBuilder != null) {
             for (Object val : leafListVal) {
+                String valNamespace = getValNamespace(val, leafList);
                 DataNode.Builder leaf = extBuilder.createChildBuilder(
                         leafList.getName(), leafList.getNameSpace()
-                                .getModuleNamespace(), val);
+                                .getModuleNamespace(), val, valNamespace);
                 leaf.type(MULTI_INSTANCE_LEAF_VALUE_NODE);
                 leaf.addLeafListValue(val);
                 extBuilder = leaf.exitNode();
@@ -918,9 +921,11 @@
         //In case of root node leaf lists.
         List<DataNode.Builder> builders = new ArrayList<>();
         for (Object val : leafListVal) {
+            String valNamespace = getValNamespace(val, leafList);
             DataNode.Builder leaf = LeafNode.builder(
                     leafList.getName(), leafList.getNameSpace()
-                            .getModuleNamespace()).value(val);
+                            .getModuleNamespace()).value(val)
+                    .valueNamespace(valNamespace);
             leaf.type(MULTI_INSTANCE_LEAF_VALUE_NODE);
             leaf.addLeafListValue(val);
             builders.add(leaf);
@@ -962,6 +967,7 @@
      * @param val      value for the leaf
      */
     DataNode.Builder createLeafNode(YangLeaf yangLeaf, Object val) {
+        String valNamespace = getValNamespace(val, yangLeaf);
         if (extBuilder != null) {
             //Add leaf to key leaves.
             if (yangLeaf.isKeyLeaf()) {
@@ -971,7 +977,7 @@
             //build leaf node and add to parent node.
             DataNode.Builder leaf = extBuilder.createChildBuilder(
                     yangLeaf.getName(), yangLeaf.getNameSpace()
-                            .getModuleNamespace(), val);
+                            .getModuleNamespace(), val, valNamespace);
             leaf.type(SINGLE_INSTANCE_LEAF_VALUE_NODE);
 
             extBuilder = leaf.exitNode();
@@ -980,7 +986,7 @@
         return LeafNode.builder(yangLeaf.getName(), yangLeaf.getNameSpace()
                 .getModuleNamespace())
                 .type(SINGLE_INSTANCE_LEAF_VALUE_NODE)
-                .value(val);
+                .value(val).valueNamespace(valNamespace);
     }
 
     /**
@@ -1007,4 +1013,15 @@
         }
         return new ModelConverterTraversalInfo((YangNode) exitBuilderSchema, PARENT);
     }
+
+    public static String getValNamespace(Object val, LeafSchemaContext lsc) {
+        String valNamespace = null;
+        if (val != null) {
+            YangNamespace yn = lsc.getValueNamespace(val.toString());
+            if (yn != null) {
+                valNamespace = yn.getModuleNamespace();
+            }
+        }
+        return valNamespace;
+    }
 }
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilder.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilder.java
index 7953ee5..264688f 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilder.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilder.java
@@ -58,6 +58,7 @@
 import static org.onosproject.yang.runtime.RuntimeHelper.DEFAULT_CAPS;
 import static org.onosproject.yang.runtime.RuntimeHelper.PERIOD;
 import static org.onosproject.yang.runtime.RuntimeHelper.getCapitalCase;
+import static org.onosproject.yang.runtime.impl.DataTreeBuilderHelper.getValNamespace;
 import static org.onosproject.yang.runtime.impl.ModelConverterUtil.TRUE;
 import static org.onosproject.yang.runtime.impl.ModelConverterUtil.getAttributeOfObject;
 import static org.onosproject.yang.runtime.impl.ModelConverterUtil.getJavaName;
@@ -224,8 +225,8 @@
                 child = child.getNextSibling();
             }
             while (child != null && child instanceof YangRpc &&
-                    !name.contains(child.getJavaPackage() + "."
-                    + child.getJavaClassNameOrBuiltInType().toLowerCase())) {
+                    !name.contains(child.getJavaPackage() + "." +
+                    child.getJavaClassNameOrBuiltInType().toLowerCase())) {
                 child = child.getNextSibling();
             }
             if (child != null) {
@@ -477,11 +478,13 @@
                         objects.add(null);
                     }
                     for (Object obj : objects) {
+                        String valNamespace = getValNamespace(obj, leafList);
                         DataNode node = LeafNode
                                 .builder(leafList.getName(), leafList
                                         .getNameSpace().getModuleNamespace())
                                 .value(obj)
-                                .type(MULTI_INSTANCE_LEAF_VALUE_NODE).build();
+                                .type(MULTI_INSTANCE_LEAF_VALUE_NODE)
+                                .valueNamespace(valNamespace).build();
                         rscData.addDataNode(node);
                     }
                 }
@@ -515,10 +518,12 @@
                         }
                         obj = null;
                     }
+                    String valNamespace = getValNamespace(obj, leaf);
                     DataNode node = LeafNode.builder(leaf.getName(), leaf
                             .getNameSpace().getModuleNamespace())
                             .value(obj)
-                            .type(SINGLE_INSTANCE_LEAF_VALUE_NODE).build();
+                            .type(SINGLE_INSTANCE_LEAF_VALUE_NODE)
+                            .valueNamespace(valNamespace).build();
                     rscData.addDataNode(node);
                     break;
                 }
