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 3f7ede6..a82e9ce 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
@@ -19,7 +19,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.compiler.datamodel.utils.builtindatatype.ObjectProvider;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.LeafContextUtil;
 import org.onosproject.yang.model.DataNode.Type;
 import org.onosproject.yang.model.LeafRestriction;
 import org.onosproject.yang.model.LeafSchemaContext;
@@ -672,7 +672,12 @@
 
     @Override
     public Object fromString(String value) {
-        return ObjectProvider.getObject(dataType, value, dataType.getDataType());
+        return LeafContextUtil.getObject(dataType, value, dataType.getDataType());
+    }
+
+    @Override
+    public String 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 c42a6bf..c44973a 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
@@ -19,7 +19,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.compiler.datamodel.utils.builtindatatype.ObjectProvider;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.LeafContextUtil;
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.LeafRestriction;
 import org.onosproject.yang.model.LeafSchemaContext;
@@ -666,7 +666,12 @@
 
     @Override
     public Object fromString(String value) {
-        return ObjectProvider.getObject(dataType, value, dataType.getDataType());
+        return LeafContextUtil.getObject(dataType, value, dataType.getDataType());
+    }
+
+    @Override
+    public String 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/utils/builtindatatype/LeafContextUtil.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/LeafContextUtil.java
new file mode 100644
index 0000000..71d1ccd
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/LeafContextUtil.java
@@ -0,0 +1,220 @@
+/*
+ * Copyright 2016-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils.builtindatatype;
+
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangIdentity;
+import org.onosproject.yang.compiler.datamodel.YangIdentityRef;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangUnion;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Iterator;
+
+public final class LeafContextUtil {
+
+    // Object provider constant error string.
+    private static final String E_DATATYPE = "Data type not supported.";
+    private static final String T = "true";
+    private static final String F = "false";
+
+    /**
+     * Restricts creation of object providers instance.
+     */
+    private LeafContextUtil() {
+    }
+
+    /**
+     * Returns object from string value.
+     *
+     * @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 values object of corresponding given data type
+     * @throws IllegalArgumentException if input is not valid
+     */
+    public static Object getObject(YangType typeInfo, String v,
+                                   YangDataTypes dataType)
+            throws IllegalArgumentException {
+        YangDataTypes type;
+        if (dataType != null) {
+            type = dataType;
+        } else {
+            type = typeInfo.getDataType();
+        }
+        switch (type) {
+            case INT8:
+                return Byte.parseByte(v);
+            case UINT8:
+            case INT16:
+                return Short.parseShort(v);
+            case UINT16:
+            case INT32:
+                return Integer.parseInt(v);
+            case UINT32:
+            case INT64:
+                return Long.parseLong(v);
+            case UINT64:
+                return new BigInteger(v);
+            case EMPTY:
+                if (v == null || v.equals("")) {
+                    return null;
+                } else if (v.equals(T) || v.equals(F)) {
+                    return Boolean.parseBoolean(v);
+                }
+            case BOOLEAN:
+                if (v.equals(T) || v.equals(F)) {
+                    return Boolean.parseBoolean(v);
+                }
+                throw new IllegalArgumentException(E_DATATYPE);
+            case BINARY:
+            case BITS:
+            case IDENTITYREF:
+            case ENUMERATION:
+            case STRING:
+            case INSTANCE_IDENTIFIER:
+                return v;
+            case DECIMAL64:
+                return new BigDecimal(v);
+            case LEAFREF:
+                YangType refType = ((YangLeafRef) typeInfo
+                        .getDataTypeExtendedInfo()).getEffectiveDataType();
+                return getObject(refType, v, refType.getDataType());
+            case DERIVED:
+                // referred typedef's list of type will always has only one type
+                YangType rt = ((YangDerivedInfo) typeInfo
+                        .getDataTypeExtendedInfo()).getReferredTypeDef()
+                        .getTypeList().get(0);
+                return getObject(rt, v, rt.getDataType());
+            case UNION:
+                return parseUnionTypeInfo(typeInfo, v);
+            default:
+                throw new IllegalArgumentException(E_DATATYPE);
+        }
+    }
+
+    /**
+     * Returns value namespace from string value.
+     *
+     * @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
+     * @throws IllegalArgumentException if input is not valid
+     */
+    public static String getValueNamespace(YangType typeInfo, String v,
+                                           YangDataTypes dataType)
+            throws IllegalArgumentException {
+        YangDataTypes type;
+        if (dataType != null) {
+            type = dataType;
+        } else {
+            type = typeInfo.getDataType();
+        }
+        switch (type) {
+            case INT8:
+            case UINT8:
+            case INT16:
+            case UINT16:
+            case INT32:
+            case UINT32:
+            case INT64:
+            case UINT64:
+            case EMPTY:
+            case BOOLEAN:
+            case BINARY:
+            case BITS:
+            case ENUMERATION:
+            case STRING:
+            case DECIMAL64:
+            case INSTANCE_IDENTIFIER:
+                return null;
+            case IDENTITYREF:
+                YangIdentity refId = ((YangIdentityRef) typeInfo
+                        .getDataTypeExtendedInfo()).getReferredIdentity();
+                return getReferIdNamespace(refId, v);
+            case LEAFREF:
+                YangType refType = ((YangLeafRef) typeInfo
+                        .getDataTypeExtendedInfo()).getEffectiveDataType();
+                return getValueNamespace(refType, v, refType.getDataType());
+            case DERIVED:
+                // referred typedef's list of type will always has only one type
+                YangType rt = ((YangDerivedInfo) typeInfo
+                        .getDataTypeExtendedInfo()).getReferredTypeDef()
+                        .getTypeList().get(0);
+                return getValueNamespace(rt, v, rt.getDataType());
+            case UNION:
+                return getUnionValNamespace(typeInfo, v);
+            default:
+                throw new IllegalArgumentException(E_DATATYPE);
+        }
+    }
+
+    private static String getReferIdNamespace(YangIdentity refId, String v) {
+        String baseIdentity = refId.getYangSchemaNodeIdentifier().getName();
+        if (v.equals(baseIdentity)) {
+            return refId.getYangSchemaNodeIdentifier().getNameSpace()
+                    .getModuleNamespace();
+        }
+        for (YangIdentity i : refId.getExtendList()) {
+            String refIdentity = i.getYangSchemaNodeIdentifier().getName();
+            if (v.equals(refIdentity)) {
+                return i.getYangSchemaNodeIdentifier().getNameSpace()
+                        .getModuleNamespace();
+            }
+        }
+        throw new IllegalArgumentException("Invalid value of data");
+    }
+
+    private static String getUnionValNamespace(YangType type, String leafValue) {
+        Iterator<YangType<?>> it = ((YangUnion) type.getDataTypeExtendedInfo())
+                .getTypeList().listIterator();
+        while (it.hasNext()) {
+            YangType t = it.next();
+            try {
+                getObject(t, leafValue, t.getDataType());
+                return getValueNamespace(t, leafValue, t.getDataType());
+            } catch (IllegalArgumentException e) {
+                continue;
+            }
+        }
+        throw new IllegalArgumentException("Invalid value of data");
+    }
+
+    /**
+     * Returns the object for given data type with respective value.
+     *
+     * @param type      data type of value
+     * @param leafValue value
+     * @return object of data type containing the value
+     */
+    private static Object parseUnionTypeInfo(YangType type, String leafValue) {
+        Iterator<YangType<?>> it = ((YangUnion) type.getDataTypeExtendedInfo())
+                .getTypeList().listIterator();
+        while (it.hasNext()) {
+            YangType t = it.next();
+            try {
+                return getObject(t, leafValue, t.getDataType());
+            } catch (IllegalArgumentException e) {
+                continue;
+            }
+        }
+        throw new IllegalArgumentException("Invalid value of data");
+    }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/ObjectProvider.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/ObjectProvider.java
deleted file mode 100644
index 72221c4..0000000
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/ObjectProvider.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.yang.compiler.datamodel.utils.builtindatatype;
-
-import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
-import org.onosproject.yang.compiler.datamodel.YangLeafRef;
-import org.onosproject.yang.compiler.datamodel.YangType;
-import org.onosproject.yang.compiler.datamodel.YangUnion;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Iterator;
-
-public final class ObjectProvider {
-
-    // Object provider constant error string.
-    private static final String E_DATATYPE = "Data type not supported.";
-    private static final String T = "true";
-    private static final String F = "false";
-    private static final String E_NONEMPTY = "Value is of non Empty type";
-
-    /**
-     * Restricts creation of object providers instance.
-     */
-    private ObjectProvider() {
-    }
-
-    /**
-     * Returns object from string value.
-     *
-     * @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 values object of corresponding given data type
-     * @throws IllegalArgumentException if input is not valid
-     */
-    public static Object getObject(YangType typeInfo, String v,
-                                   YangDataTypes dataType)
-            throws IllegalArgumentException {
-        YangDataTypes type;
-        if (dataType != null) {
-            type = dataType;
-        } else {
-            type = typeInfo.getDataType();
-        }
-        switch (type) {
-            case INT8:
-                return Byte.parseByte(v);
-            case UINT8:
-            case INT16:
-                return Short.parseShort(v);
-            case UINT16:
-            case INT32:
-                return Integer.parseInt(v);
-            case UINT32:
-            case INT64:
-                return Long.parseLong(v);
-            case UINT64:
-                return new BigInteger(v);
-            case EMPTY:
-                if (v == null || v.equals("")) {
-                    return null;
-                } else if (v.equals(T) || v.equals(F)) {
-                    return Boolean.parseBoolean(v);
-                }
-            case BOOLEAN:
-                if (v.equals(T) || v.equals(F)) {
-                    return Boolean.parseBoolean(v);
-                }
-                throw new IllegalArgumentException(E_DATATYPE);
-            case BINARY:
-            case BITS:
-            case IDENTITYREF:
-            case ENUMERATION:
-            case STRING:
-            case INSTANCE_IDENTIFIER:
-                return v;
-            case DECIMAL64:
-                return new BigDecimal(v);
-            case LEAFREF:
-                YangType refType = ((YangLeafRef) typeInfo
-                        .getDataTypeExtendedInfo()).getEffectiveDataType();
-                return getObject(refType, v, refType.getDataType());
-            case DERIVED:
-                // referred typedef's list of type will always has only one type
-                YangType rt = ((YangDerivedInfo) typeInfo
-                        .getDataTypeExtendedInfo()).getReferredTypeDef()
-                        .getTypeList().get(0);
-                return getObject(rt, v, rt.getDataType());
-            case UNION:
-                return parseUnionTypeInfo(typeInfo, v);
-            default:
-                throw new IllegalArgumentException(E_DATATYPE);
-        }
-    }
-
-    /**
-     * Returns the object for given data type with respective value.
-     *
-     * @param type      data type of value
-     * @param leafValue value
-     * @return object of data type containing the value
-     */
-    private static Object parseUnionTypeInfo(YangType type, String leafValue) {
-        Iterator<YangType<?>> it = ((YangUnion) type.getDataTypeExtendedInfo())
-                .getTypeList().listIterator();
-        while (it.hasNext()) {
-            YangType t = it.next();
-            try {
-                return getObject(t, leafValue, t.getDataType());
-            } catch (IllegalArgumentException e) {
-                continue;
-            }
-        }
-        throw new IllegalArgumentException("Invalid value of data");
-    }
-}
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 ff3bfab..bf93ad2 100644
--- a/model/src/main/java/org/onosproject/yang/model/LeafSchemaContext.java
+++ b/model/src/main/java/org/onosproject/yang/model/LeafSchemaContext.java
@@ -47,4 +47,13 @@
      *                                  schema
      */
     Object fromString(String value);
+
+    /**
+     * Returns value namespace.
+     *
+     * @param value leaf value in string
+     * @return value namespace, null indicates that value namespace is same
+     * as leaf namespace
+     */
+    String getValueNamespace(String value);
 }
