diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/DefaultYangNamespace.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/DefaultYangNamespace.java
index e0edb16..6b3b160 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/DefaultYangNamespace.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/DefaultYangNamespace.java
@@ -16,6 +16,8 @@
 
 package org.onosproject.yang.compiler.datamodel;
 
+import org.onosproject.yang.model.YangNamespace;
+
 /**
  * Represents YANG node identifier's namespace.
  */
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeaf.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeaf.java
index a82e9ce..9864f31 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeaf.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeaf.java
@@ -26,6 +26,7 @@
 import org.onosproject.yang.model.LeafType;
 import org.onosproject.yang.model.SchemaContext;
 import org.onosproject.yang.model.SchemaId;
+import org.onosproject.yang.model.YangNamespace;
 
 import java.io.Serializable;
 import java.util.LinkedList;
@@ -347,11 +348,6 @@
         return dataType;
     }
 
-    @Override
-    public boolean isEmptyDataType() {
-        return validateEmptyDataType(dataType);
-    }
-
     /**
      * Sets the data type.
      *
@@ -361,6 +357,11 @@
         this.dataType = dataType;
     }
 
+    @Override
+    public boolean isEmptyDataType() {
+        return validateEmptyDataType(dataType);
+    }
+
     /**
      * Retrieves the YANG node in which the leaf is defined.
      *
@@ -480,6 +481,11 @@
     }
 
     @Override
+    public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
+        this.ifFeatureList = ifFeatureList;
+    }
+
+    @Override
     public void addIfFeatureList(YangIfFeature ifFeature) {
         if (getIfFeatureList() == null) {
             setIfFeatureList(new LinkedList<>());
@@ -488,11 +494,6 @@
     }
 
     @Override
-    public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
-        this.ifFeatureList = ifFeatureList;
-    }
-
-    @Override
     public YangSchemaNodeContextInfo getChildSchema(
             YangSchemaNodeIdentifier dataNodeIdentifier)
             throws DataModelException {
@@ -676,8 +677,9 @@
     }
 
     @Override
-    public String getValueNamespace(String value) {
-        return LeafContextUtil.getValueNamespace(dataType, value, dataType.getDataType());
+    public YangNamespace getValueNamespace(String value) {
+        return LeafContextUtil.getValueNamespace(dataType, value,
+                                                 dataType.getDataType());
     }
 
     @Override
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeafList.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeafList.java
index c44973a..dc9bbf5 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeafList.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeafList.java
@@ -26,6 +26,7 @@
 import org.onosproject.yang.model.LeafType;
 import org.onosproject.yang.model.SchemaContext;
 import org.onosproject.yang.model.SchemaId;
+import org.onosproject.yang.model.YangNamespace;
 
 import java.io.Serializable;
 import java.util.LinkedList;
@@ -365,11 +366,6 @@
         return dataType;
     }
 
-    @Override
-    public boolean isEmptyDataType() {
-        return validateEmptyDataType(dataType);
-    }
-
     /**
      * Sets the data type.
      *
@@ -379,6 +375,11 @@
         this.dataType = dataType;
     }
 
+    @Override
+    public boolean isEmptyDataType() {
+        return validateEmptyDataType(dataType);
+    }
+
     /**
      * Retrieves the YANG node in which the leaf is defined.
      *
@@ -458,6 +459,11 @@
     }
 
     @Override
+    public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
+        this.ifFeatureList = ifFeatureList;
+    }
+
+    @Override
     public void addIfFeatureList(YangIfFeature ifFeature) {
         if (getIfFeatureList() == null) {
             setIfFeatureList(new LinkedList<>());
@@ -466,11 +472,6 @@
     }
 
     @Override
-    public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
-        this.ifFeatureList = ifFeatureList;
-    }
-
-    @Override
     public List<YangMust> getListOfMust() {
         return mustConstraintList;
     }
@@ -670,8 +671,9 @@
     }
 
     @Override
-    public String getValueNamespace(String value) {
-        return LeafContextUtil.getValueNamespace(dataType, value, dataType.getDataType());
+    public YangNamespace getValueNamespace(String value) {
+        return LeafContextUtil.getValueNamespace(dataType, value,
+                                                 dataType.getDataType());
     }
 
     @Override
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangModule.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangModule.java
index 8a33060..c12641e 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangModule.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangModule.java
@@ -18,6 +18,7 @@
 import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
 import org.onosproject.yang.compiler.datamodel.utils.Parsable;
 import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.model.YangNamespace;
 
 import java.util.HashMap;
 import java.util.LinkedList;
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNode.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNode.java
index 8be0fe9..9e3d35b 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNode.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNode.java
@@ -21,6 +21,7 @@
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.SchemaContext;
 import org.onosproject.yang.model.SchemaId;
+import org.onosproject.yang.model.YangNamespace;
 
 import java.io.Serializable;
 import java.util.HashMap;
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNode.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNode.java
index 1444086..5287bcb 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNode.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNode.java
@@ -18,6 +18,7 @@
 
 import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
 import org.onosproject.yang.model.SchemaContext;
+import org.onosproject.yang.model.YangNamespace;
 
 import java.util.Map;
 
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNodeIdentifier.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNodeIdentifier.java
index 1ddd311..3867470 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNodeIdentifier.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNodeIdentifier.java
@@ -16,6 +16,8 @@
 
 package org.onosproject.yang.compiler.datamodel;
 
+import org.onosproject.yang.model.YangNamespace;
+
 import java.io.Serializable;
 import java.util.Objects;
 
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSubModule.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSubModule.java
index abce15c..58b88fd 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSubModule.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSubModule.java
@@ -18,6 +18,7 @@
 import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
 import org.onosproject.yang.compiler.datamodel.utils.Parsable;
 import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.model.YangNamespace;
 
 import java.util.HashMap;
 import java.util.LinkedHashMap;
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/LeafContextUtil.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/LeafContextUtil.java
index 71d1ccd..51873ff 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/LeafContextUtil.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/LeafContextUtil.java
@@ -22,6 +22,7 @@
 import org.onosproject.yang.compiler.datamodel.YangLeafRef;
 import org.onosproject.yang.compiler.datamodel.YangType;
 import org.onosproject.yang.compiler.datamodel.YangUnion;
+import org.onosproject.yang.model.YangNamespace;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
@@ -115,11 +116,11 @@
      * @param typeInfo refers to YANG type information
      * @param v        v argument is leaf value used to set the value in method
      * @param dataType yang data type
-     * @return value namespace of corresponding given data type and value
+     * @return YANG namespace of corresponding given data type and value
      * @throws IllegalArgumentException if input is not valid
      */
-    public static String getValueNamespace(YangType typeInfo, String v,
-                                           YangDataTypes dataType)
+    public static YangNamespace getValueNamespace(YangType typeInfo, String v,
+                                                  YangDataTypes dataType)
             throws IllegalArgumentException {
         YangDataTypes type;
         if (dataType != null) {
@@ -166,23 +167,22 @@
         }
     }
 
-    private static String getReferIdNamespace(YangIdentity refId, String v) {
+    private static YangNamespace getReferIdNamespace(YangIdentity refId, String v) {
         String baseIdentity = refId.getYangSchemaNodeIdentifier().getName();
         if (v.equals(baseIdentity)) {
-            return refId.getYangSchemaNodeIdentifier().getNameSpace()
-                    .getModuleNamespace();
+            return refId.getYangSchemaNodeIdentifier().getNameSpace();
         }
         for (YangIdentity i : refId.getExtendList()) {
             String refIdentity = i.getYangSchemaNodeIdentifier().getName();
             if (v.equals(refIdentity)) {
-                return i.getYangSchemaNodeIdentifier().getNameSpace()
-                        .getModuleNamespace();
+                return i.getYangSchemaNodeIdentifier().getNameSpace();
             }
         }
         throw new IllegalArgumentException("Invalid value of data");
     }
 
-    private static String getUnionValNamespace(YangType type, String leafValue) {
+    private static YangNamespace getUnionValNamespace(YangType type,
+                                                      String leafValue) {
         Iterator<YangType<?>> it = ((YangUnion) type.getDataTypeExtendedInfo())
                 .getTypeList().listIterator();
         while (it.hasNext()) {
diff --git a/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/YangLinkerUtils.java b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/YangLinkerUtils.java
index cc893db..e246f07 100644
--- a/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/YangLinkerUtils.java
+++ b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/YangLinkerUtils.java
@@ -34,7 +34,7 @@
 import org.onosproject.yang.compiler.datamodel.YangLeafRef;
 import org.onosproject.yang.compiler.datamodel.YangLeavesHolder;
 import org.onosproject.yang.compiler.datamodel.YangList;
-import org.onosproject.yang.compiler.datamodel.YangNamespace;
+import org.onosproject.yang.model.YangNamespace;
 import org.onosproject.yang.compiler.datamodel.YangNode;
 import org.onosproject.yang.compiler.datamodel.YangNodeIdentifier;
 import org.onosproject.yang.compiler.datamodel.YangPathPredicate;
diff --git a/model/src/main/java/org/onosproject/yang/model/DataNode.java b/model/src/main/java/org/onosproject/yang/model/DataNode.java
index abeadf7..a998bab 100644
--- a/model/src/main/java/org/onosproject/yang/model/DataNode.java
+++ b/model/src/main/java/org/onosproject/yang/model/DataNode.java
@@ -209,10 +209,25 @@
          * @param value     value for leaf node
          * @return child node builder
          */
+        @Deprecated
         public abstract LeafNode.Builder createChildBuilder(
                 String name, String nameSpace, Object value);
 
         /**
+         * Creates a child build of type leaf node and set a back reference
+         * of parent node. it is used while creating a data tree. the value
+         * of leaf is set while creation.
+         *
+         * @param name         name of leaf node
+         * @param nameSpace    namespace of leaf node
+         * @param value        value for leaf node
+         * @param valNamespace leaf value namespace
+         * @return child node builder
+         */
+        public abstract LeafNode.Builder createChildBuilder(
+                String name, String nameSpace, Object value, String valNamespace);
+
+        /**
          * Deletes child node for a given node key from parent node.
          * <p>
          * for deleting a node from data tree , caller should parse resource
diff --git a/model/src/main/java/org/onosproject/yang/model/InnerNode.java b/model/src/main/java/org/onosproject/yang/model/InnerNode.java
index 7d07056..5b013d8 100644
--- a/model/src/main/java/org/onosproject/yang/model/InnerNode.java
+++ b/model/src/main/java/org/onosproject/yang/model/InnerNode.java
@@ -166,6 +166,15 @@
         }
 
         @Override
+        public LeafNode.Builder createChildBuilder(String name, String nameSpace,
+                                                   Object value, String valNamespace) {
+            return LeafNode.builder(name, nameSpace)
+                    .parent(this)
+                    .value(value)
+                    .valueNamespace(valNamespace);
+        }
+
+        @Override
         public InnerNode.Builder deleteChild(NodeKey key) {
             childNodes.remove(key);
             return this;
diff --git a/model/src/main/java/org/onosproject/yang/model/LeafNode.java b/model/src/main/java/org/onosproject/yang/model/LeafNode.java
index e0d0859..beeb165 100644
--- a/model/src/main/java/org/onosproject/yang/model/LeafNode.java
+++ b/model/src/main/java/org/onosproject/yang/model/LeafNode.java
@@ -211,6 +211,13 @@
         }
 
         @Override
+        public LeafNode.Builder createChildBuilder(String name, String nameSpace,
+                                                   Object value, String valNamespace) {
+            throw new IllegalStateException("leaf node can't have a child " +
+                                                    "node");
+        }
+
+        @Override
         public InnerNode.Builder deleteChild(NodeKey key) {
             throw new IllegalStateException("leaf node can't have a child " +
                                                     "node");
diff --git a/model/src/main/java/org/onosproject/yang/model/LeafSchemaContext.java b/model/src/main/java/org/onosproject/yang/model/LeafSchemaContext.java
index bf93ad2..f42250c 100644
--- a/model/src/main/java/org/onosproject/yang/model/LeafSchemaContext.java
+++ b/model/src/main/java/org/onosproject/yang/model/LeafSchemaContext.java
@@ -55,5 +55,5 @@
      * @return value namespace, null indicates that value namespace is same
      * as leaf namespace
      */
-    String getValueNamespace(String value);
+    YangNamespace getValueNamespace(String value);
 }
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNamespace.java b/model/src/main/java/org/onosproject/yang/model/YangNamespace.java
similarity index 94%
rename from compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNamespace.java
rename to model/src/main/java/org/onosproject/yang/model/YangNamespace.java
index 8609886..efa1890 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNamespace.java
+++ b/model/src/main/java/org/onosproject/yang/model/YangNamespace.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yang.compiler.datamodel;
+package org.onosproject.yang.model;
 
 /**
  * Representation of YANG namespace.
diff --git a/model/src/test/java/org/onosproject/yang/model/DataTreeOperationTest.java b/model/src/test/java/org/onosproject/yang/model/DataTreeOperationTest.java
index 108bc7d..f937e9c 100644
--- a/model/src/test/java/org/onosproject/yang/model/DataTreeOperationTest.java
+++ b/model/src/test/java/org/onosproject/yang/model/DataTreeOperationTest.java
@@ -100,7 +100,7 @@
                 .exitNode()
 
                 //C1's child leaf L1
-                .createChildBuilder(L1, L1_NAMESPACE, 10)
+                .createChildBuilder(L1, L1_NAMESPACE, 10, null)
                 .type(SINGLE_INSTANCE_LEAF_VALUE_NODE)
 
                 //Builder l1 and traverse back to c1
@@ -114,7 +114,7 @@
                 .type(SINGLE_INSTANCE_NODE)
                 //C2's leaf l2
 
-                .createChildBuilder(L2, L2_NAMESPACE, "string")
+                .createChildBuilder(L2, L2_NAMESPACE, "string", null)
                 .type(MULTI_INSTANCE_LEAF_VALUE_NODE)
 
                 //build l2 and add it to c2 and traverse back to c2.
@@ -281,7 +281,7 @@
                 //Reach to c2 by fetching it from the map.
                 .getChildBuilder(keys.get(1))
                 //add l3 in c2.
-                .createChildBuilder(L3, L3_NAMESPACE, 15)
+                .createChildBuilder(L3, L3_NAMESPACE, 15, null)
                 .type(MULTI_INSTANCE_LEAF_VALUE_NODE)
                 .addLeafListValue(16)
 
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/SerializerHelper.java b/runtime/src/main/java/org/onosproject/yang/runtime/SerializerHelper.java
index 6c40db9..ecd1c3c 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/SerializerHelper.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/SerializerHelper.java
@@ -29,6 +29,7 @@
 import org.onosproject.yang.model.SchemaContext;
 import org.onosproject.yang.model.SchemaId;
 import org.onosproject.yang.model.SingleInstanceNodeContext;
+import org.onosproject.yang.model.YangNamespace;
 import org.onosproject.yang.runtime.impl.DefaultYangModelRegistry;
 
 import java.util.Iterator;
@@ -278,6 +279,37 @@
     public static Builder addDataNode(Builder builder,
                                       String name, String namespace,
                                       String value, DataNode.Type type) {
+        return addDataNode(builder, name, namespace, value, null, type);
+    }
+
+    /**
+     * Adds a data node to a given data node builder.
+     * <p>
+     * Name and builder is mandatory inputs. If namespace is not provided
+     * parents namespace will be added for data node. Value should be
+     * provided for leaf/leaf-list. In case of leaf-list it's expected that this
+     * API is called for each leaf-list instance. Callers aware about the node
+     * type can opt to provide data node type, implementation will carry out
+     * validations based on input type and obtained type.
+     * <p>
+     * This API will also carry out necessary schema related validations.
+     *
+     * @param builder      data node builder
+     * @param name         name of data node
+     * @param namespace    namespace of data node
+     * @param value        value of data node
+     * @param valNamespace value's namespace, either module name of namespace,
+     *                     null indicates its same as leaf
+     * @param type         type of data node
+     * @return data node builder with added information
+     * @throws IllegalArgumentException when given input is not as per the
+     *                                  schema context
+     * @throws IllegalStateException    when a key is added under a atomic child
+     */
+    public static Builder addDataNode(Builder builder,
+                                      String name, String namespace,
+                                      String value, String valNamespace,
+                                      DataNode.Type type) {
         try {
             Object valObject;
             SchemaContext node;
@@ -326,13 +358,17 @@
                             throw new IllegalArgumentException(E_RESID);
                         }
                         valObject = getLeaf(value, childSchema);
+                        valNamespace = getValidValNamespace(value, childSchema,
+                                                            valNamespace);
                         builder = LeafNode.builder(name, namespace).type(nodeType)
-                                .value(valObject);
+                                .value(valObject).valueNamespace(valNamespace);
                         break;
                     case MULTI_INSTANCE_LEAF_VALUE_NODE:
                         valObject = getLeafList(value, childSchema);
+                        valNamespace = getValidValNamespace(value, childSchema,
+                                                            valNamespace);
                         builder = LeafNode.builder(name, namespace).type(nodeType)
-                                .value(valObject);
+                                .value(valObject).valueNamespace(valNamespace);
                         builder = builder.addLeafListValue(valObject);
                         break;
                     default:
@@ -348,17 +384,23 @@
                 switch (nodeType) {
                     case SINGLE_INSTANCE_LEAF_VALUE_NODE:
                         valObject = getLeaf(value, childSchema);
+                        valNamespace = getValidValNamespace(value, childSchema,
+                                                            valNamespace);
                         if (((YangLeaf) childSchema).isKeyLeaf()) {
                             builder = builder.addKeyLeaf(
                                     name, namespace, valObject);
                         }
                         builder = builder.createChildBuilder(
-                                name, namespace, valObject).type(nodeType);
+                                name, namespace, valObject, valNamespace)
+                                .type(nodeType);
                         break;
                     case MULTI_INSTANCE_LEAF_VALUE_NODE:
                         valObject = getLeafList(value, childSchema);
+                        valNamespace = getValidValNamespace(value, childSchema,
+                                                            valNamespace);
                         builder = builder.createChildBuilder(
-                                name, namespace, valObject).type(nodeType);
+                                name, namespace, valObject, valNamespace)
+                                .type(nodeType);
                         builder = builder.addLeafListValue(valObject);
                         break;
                     default:
@@ -416,6 +458,33 @@
         return schema.fromString(val);
     }
 
+
+    /**
+     * Returns valid value namespace which is module's namespace.
+     *
+     * @param val    value in string
+     * @param ctx    schema context
+     * @param actual valNamespace either module name of namespace
+     * @return validated value module's namespace
+     * @throws IllegalArgumentException if input namespace is invalid
+     */
+    private static String getValidValNamespace(String val, SchemaContext ctx,
+                                               String actual)
+            throws IllegalArgumentException {
+        LeafSchemaContext schema = (LeafSchemaContext) ctx;
+        YangNamespace expected = schema.getValueNamespace(val);
+        if (actual == null) {
+            if (expected == null ||
+                    expected.getModuleNamespace().equals(ctx.getSchemaId().namespace())) {
+                return null;
+            }
+        } else if (actual.equals(expected.getModuleName()) ||
+                actual.equals(expected.getModuleNamespace())) {
+            return expected.getModuleNamespace();
+        }
+        throw new IllegalArgumentException("Invalid input for value namespace");
+    }
+
     /**
      * Returns resource identifier for a given data node. This API will
      * be used by serializer to obtain the resource identifier in the
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/MoIdToRscIdTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/MoIdToRscIdTest.java
index acba744..3149618 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/MoIdToRscIdTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/MoIdToRscIdTest.java
@@ -21,7 +21,7 @@
 import org.onosproject.yang.compiler.datamodel.YangInput;
 import org.onosproject.yang.compiler.datamodel.YangLeaf;
 import org.onosproject.yang.compiler.datamodel.YangModule;
-import org.onosproject.yang.compiler.datamodel.YangNamespace;
+import org.onosproject.yang.model.YangNamespace;
 import org.onosproject.yang.compiler.datamodel.YangNode;
 import org.onosproject.yang.compiler.datamodel.YangNotification;
 import org.onosproject.yang.compiler.datamodel.YangOutput;
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobGroupingUsesTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobGroupingUsesTest.java
index fd9303e..a5ed7b0 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobGroupingUsesTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobGroupingUsesTest.java
@@ -145,7 +145,9 @@
         dBlr = addDataNode(dBlr, "name", TE, value, null);
         dBlr = exitDataNode(dBlr);
         value = "tunnel-p2p";
-        dBlr = addDataNode(dBlr, "type", TE, value, null);
+        dBlr = addDataNode(dBlr, "type", TE, value,
+                           "yrt-ietf-te-types",
+                           null);
         dBlr = exitDataNode(dBlr); // tunnel-p2p
         dBlr = exitDataNode(dBlr); // state
         dBlr = exitDataNode(dBlr); // tunnel
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobSimpleDataTypeTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobSimpleDataTypeTest.java
index 74e4253..29f3333 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobSimpleDataTypeTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobSimpleDataTypeTest.java
@@ -50,6 +50,7 @@
     private static final String DATA_TYPE_NAME_SPACE = "simple:data:types";
     private static final String DATA_TYPE_NAME_SPACE_LL =
             "simple:data:types:ll";
+    private static final String VALUE_NAMESPACE = "yms:test:ytb:data:types";
     TestYangSerializerContext context = new TestYangSerializerContext();
     private Builder dBlr;
     private String value;
@@ -248,197 +249,154 @@
         value = "8";
         dBlr = addDataNode(dBlr, "lref1", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "val";
         dBlr = addDataNode(dBlr, "lref2", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "zero";
         dBlr = addDataNode(dBlr, "lref3", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "b2 b3";
         dBlr = addDataNode(dBlr, "lref4", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "-92233720368547758.08";
         dBlr = addDataNode(dBlr, "lref5", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "10";
         dBlr = addDataNode(dBlr, "lref6", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "enum4";
         dBlr = addDataNode(dBlr, "lref7", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "-9223372036854.775808";
         dBlr = addDataNode(dBlr, "lref8", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "MTAxMDEwMTAx";
         dBlr = addDataNode(dBlr, "lref9", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "";
         dBlr = addDataNode(dBlr, "lref10", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "";
         dBlr = addDataNode(dBlr, "lref11", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "b3";
         dBlr = addDataNode(dBlr, "lref12", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "";
         dBlr = addDataNode(dBlr, "lref13", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "b1 b2 b3";
         dBlr = addDataNode(dBlr, "lref14", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "/cont";
         dBlr = addDataNode(dBlr, "lref15", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "physical";
-        dBlr = addDataNode(dBlr, "lref16", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref16", DATA_TYPE_NAME_SPACE, value,
+                           VALUE_NAMESPACE, null);
         dBlr = exitDataNode(dBlr);
-
         value = "784985";
         dBlr = addDataNode(dBlr, "lref17", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "MTExMTExMTE=";
         dBlr = addDataNode(dBlr, "lref18", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "hundred";
         dBlr = addDataNode(dBlr, "lref19", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "leafref";
         dBlr = addDataNode(dBlr, "lref20", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "val";
         dBlr = addDataNode(dBlr, "iref1", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "pro";
         dBlr = addDataNode(dBlr, "iref2", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "physical";
-        dBlr = addDataNode(dBlr, "iref3", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "iref3", DATA_TYPE_NAME_SPACE, value,
+                           VALUE_NAMESPACE, null);
         dBlr = exitDataNode(dBlr);
-
         value = "virtual";
-        dBlr = addDataNode(dBlr, "iref4", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "iref4", DATA_TYPE_NAME_SPACE, value,
+                           VALUE_NAMESPACE, null);
         dBlr = exitDataNode(dBlr);
-
         dBlr = addDataNode(dBlr, "cont3", DATA_TYPE_NAME_SPACE, null, null);
-
         value = "108";
         dBlr = addDataNode(dBlr, "llref1", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "val";
         dBlr = addDataNode(dBlr, "llref2", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "one";
         dBlr = addDataNode(dBlr, "llref3", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "b1 b3";
         dBlr = addDataNode(dBlr, "llref4", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "-922337203685470058.08";
         dBlr = addDataNode(dBlr, "llref5", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "121";
         dBlr = addDataNode(dBlr, "llref6", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "3.3ms";
         dBlr = addDataNode(dBlr, "llref7", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "-9223372036000.775808";
         dBlr = addDataNode(dBlr, "llref8", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "MTExMTExMTE=";
         dBlr = addDataNode(dBlr, "llref9", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "";
         dBlr = addDataNode(dBlr, "llref11", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "b2";
         dBlr = addDataNode(dBlr, "llref12", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "";
         dBlr = addDataNode(dBlr, "llref13", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "b1";
         dBlr = addDataNode(dBlr, "llref14", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "/cont/con2";
         dBlr = addDataNode(dBlr, "llref15", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "virtual";
-        dBlr = addDataNode(dBlr, "llref16", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref16", DATA_TYPE_NAME_SPACE, value,
+                           "yms:test:ytb:data:types", null);
         dBlr = exitDataNode(dBlr);
-
         value = "78498522";
         dBlr = addDataNode(dBlr, "llref17", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "MDEwMTAxMDEw";
         dBlr = addDataNode(dBlr, "llref18", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "ten";
         dBlr = addDataNode(dBlr, "llref19", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "leaflistref";
         dBlr = addDataNode(dBlr, "llref20", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "check";
         dBlr = addDataNode(dBlr, "lref21", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "val";
         dBlr = addDataNode(dBlr, "iref1", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "pro";
         dBlr = addDataNode(dBlr, "iref2", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
-
         value = "physical";
-        dBlr = addDataNode(dBlr, "iref3", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "iref3", DATA_TYPE_NAME_SPACE, value,
+                           VALUE_NAMESPACE, null);
         dBlr = exitDataNode(dBlr);
-
         value = "virtual";
-        dBlr = addDataNode(dBlr, "iref4", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "iref4", DATA_TYPE_NAME_SPACE, value,
+                           VALUE_NAMESPACE, null);
         dBlr = exitDataNode(dBlr);
-
         dBlr = exitDataNode(dBlr);
         return dBlr;
     }
