diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java
index 5010315..28d0d3a 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java
@@ -175,10 +175,8 @@
 
     @Override
     public void setNameSpaceAndAddToParentSchemaMap() {
-        // Get parent namespace.
-        String nameSpace = this.getParent().getNameSpace();
-        // Set namespace for self node.
-        setNameSpace(nameSpace);
+        // Get parent namespace and set namespace for self node.
+        setNameSpace(getParent().getNameSpace());
         /*
          * Check if node contains leaf/leaf-list, if yes add namespace for leaf
          * and leaf list.
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
index 86f628c..3b6957c 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
@@ -170,10 +170,8 @@
 
     @Override
     public void setNameSpaceAndAddToParentSchemaMap() {
-        // Get parent namespace.
-        String nameSpace = getParent().getNameSpace();
-        // Set namespace for self node.
-        setNameSpace(nameSpace);
+        // Get parent namespace and set namespace for self node.
+        setNameSpace(getParent().getNameSpace());
         /*
          * Check if node contains leaf/leaf-list, if yes add namespace for leaf
          * and leaf list.
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
index c489f8f..93720fd 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
@@ -194,10 +194,8 @@
 
     @Override
     public void setNameSpaceAndAddToParentSchemaMap() {
-        // Get parent namespace.
-        String nameSpace = getParent().getNameSpace();
-        // Set namespace for self node.
-        setNameSpace(nameSpace);
+        // Get parent namespace and set namespace for self node.
+        setNameSpace(getParent().getNameSpace());
     }
 
     @Override
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java
index 7cb6435..067c80b 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java
@@ -218,27 +218,4 @@
             yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
         }
     }
-
-    @Override
-    public void setNameSpaceAndAddToParentSchemaMap() {
-        // Get parent namespace.
-        if (this.getParent() != null) {
-            String nameSpace = this.getParent().getNameSpace();
-            // Set namespace for self node.
-            setNameSpace(nameSpace);
-            // Process addition of leaf to the child schema map of parent.
-            processAdditionOfSchemaNodeToParentMap("input", getNameSpace());
-        }
-        /*
-         * Check if node contains leaf/leaf-list, if yes add namespace for leaf
-         * and leaf list.
-         */
-        if (this instanceof YangLeavesHolder) {
-            ((YangLeavesHolder) this).setLeafNameSpaceAndAddToParentSchemaMap();
-        }
-    }
-    /*
-     * TODO analyze the reason to have RPC name prepended in input name in
-     * input Listener.
-     */
 }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
index bf8c8e5..742d1df 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
@@ -459,7 +459,7 @@
      *
      * @param nameSpace namespace
      */
-    public void setLeafNameSpaceAndAddToParentSchemaMap(String nameSpace) {
+    public void setLeafNameSpaceAndAddToParentSchemaMap(YangNamespace nameSpace) {
         setNameSpace(nameSpace);
         // Process addition of leaf to schema node map.
         ((YangNode) getContainedIn()).processAdditionOfSchemaNodeToCurNodeMap(getName(), getNameSpace(), this);
@@ -505,7 +505,7 @@
     }
 
     @Override
-    public String getNameSpace() {
+    public YangNamespace getNameSpace() {
         return yangSchemaNodeIdentifier.getNameSpace();
     }
 
@@ -514,7 +514,7 @@
      *
      * @param namespace namespace of the node
      */
-    public void setNameSpace(String namespace) {
+    public void setNameSpace(YangNamespace namespace) {
         if (yangSchemaNodeIdentifier == null) {
             yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
         }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
index c0899dd..a9d403b 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
@@ -474,7 +474,7 @@
      *
      * @param nameSpace namespace
      */
-    public void setLeafNameSpaceAndAddToParentSchemaMap(String nameSpace) {
+    public void setLeafNameSpaceAndAddToParentSchemaMap(YangNamespace nameSpace) {
         setNameSpace(nameSpace);
         // Process addition of leaf to schema node map.
         ((YangNode) getContainedIn()).processAdditionOfSchemaNodeToCurNodeMap(getName(), getNameSpace(), this);
@@ -520,7 +520,7 @@
     }
 
     @Override
-    public String getNameSpace() {
+    public YangNamespace getNameSpace() {
         return yangSchemaNodeIdentifier.getNameSpace();
     }
 
@@ -529,7 +529,7 @@
      *
      * @param namespace namespace of the node
      */
-    public void setNameSpace(String namespace) {
+    public void setNameSpace(YangNamespace namespace) {
         if (yangSchemaNodeIdentifier == null) {
             yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
         }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
index 0b39b4f..9c4f01b 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
@@ -87,7 +87,7 @@
         extends YangNode
         implements YangLeavesHolder, YangDesc, YangReference, Parsable,
         CollisionDetector, YangReferenceResolver, RpcNotificationContainer,
-        YangFeatureHolder, YangIsFilterContentNodes {
+        YangFeatureHolder, YangIsFilterContentNodes, YangNamespace {
 
     private static final long serialVersionUID = 806201610L;
 
@@ -259,6 +259,11 @@
     private final List<YangAugment> augments;
 
     /**
+     * YANG defined namespace.
+     */
+    private String namespace;
+
+    /**
      * Creates a YANG node of module type.
      */
     public YangModule() {
@@ -798,4 +803,18 @@
     public List<YangAugment> getAugmentList() {
         return unmodifiableList(augments);
     }
+
+    @Override
+    public String getModuleNamespace() {
+        return namespace;
+    }
+
+    @Override
+    public String getModuleName() {
+        return getName();
+    }
+
+    public void setModuleNamespace(String namespace) {
+        this.namespace = namespace;
+    }
 }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNamespace.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNamespace.java
new file mode 100644
index 0000000..0abf944
--- /dev/null
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNamespace.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * 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.yangutils.datamodel;
+
+/**
+ * Representation of YANG namespace.
+ */
+public interface YangNamespace {
+
+    /**
+     * Returns module's namespace.
+     *
+     * @return module namespace
+     */
+    String getModuleNamespace();
+
+    /**
+     * Returns module name.
+     *
+     * @return module name
+     */
+    String getModuleName();
+}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
index 89bda47..0e90ad4 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
@@ -327,7 +327,7 @@
      * @param namespace namespace of the node
      */
     protected void processAdditionOfSchemaNodeToParentMap(String name,
-                                                          String namespace) {
+                                                          YangNamespace namespace) {
         processAdditionOfSchemaNodeToMap(name, namespace, this, getParent());
     }
 
@@ -339,7 +339,7 @@
      * @param yangSchemaNode YANG schema node
      */
     public void processAdditionOfSchemaNodeToCurNodeMap(String name,
-                                                        String namespace,
+                                                        YangNamespace namespace,
                                                         YangSchemaNode yangSchemaNode) {
         processAdditionOfSchemaNodeToMap(name, namespace, yangSchemaNode, this);
     }
@@ -353,7 +353,7 @@
      * @param childSchemaMapHolder child schema map holder
      */
     private void processAdditionOfSchemaNodeToMap(String name,
-                                                  String namespace,
+                                                  YangNamespace namespace,
                                                   YangSchemaNode yangSchemaNode,
                                                   YangNode childSchemaMapHolder) {
         // Addition of node to schema node map.
@@ -734,12 +734,14 @@
      */
     public void setNameSpaceAndAddToParentSchemaMap() {
         // Get parent namespace.
-        if (this.getParent() != null) {
-            String nameSpace = this.getParent().getNameSpace();
-            // Set namespace for self node.
-            setNameSpace(nameSpace);
+        if (getParent() != null) {
+            // Get parent namespace and set namespace for self node.
+            setNameSpace(getParent().getNameSpace());
             // Process addition of leaf to the child schema map of parent.
             processAdditionOfSchemaNodeToParentMap(getName(), getNameSpace());
+        } else {
+            // Module/Sub-module
+            setNameSpace((YangNamespace) this);
         }
         /*
          * Check if node contains leaf/leaf-list, if yes add namespace for leaf
@@ -817,7 +819,7 @@
     }
 
     @Override
-    public String getNameSpace() {
+    public YangNamespace getNameSpace() {
         return yangSchemaNodeIdentifier.getNameSpace();
     }
 
@@ -826,7 +828,7 @@
      *
      * @param namespace namespace of the node
      */
-    public void setNameSpace(String namespace) {
+    public void setNameSpace(YangNamespace namespace) {
         if (yangSchemaNodeIdentifier == null) {
             yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
         }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
index 3d5975b..92f240a 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
@@ -217,27 +217,4 @@
             yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
         }
     }
-
-    @Override
-    public void setNameSpaceAndAddToParentSchemaMap() {
-        // Get parent namespace.
-        if (this.getParent() != null) {
-            String nameSpace = this.getParent().getNameSpace();
-            // Set namespace for self node.
-            setNameSpace(nameSpace);
-            // Process addition of leaf to the child schema map of parent.
-            processAdditionOfSchemaNodeToParentMap("output", getNameSpace());
-        }
-        /*
-         * Check if node contains leaf/leaf-list, if yes add namespace for leaf
-         * and leaf list.
-         */
-        if (this instanceof YangLeavesHolder) {
-            ((YangLeavesHolder) this).setLeafNameSpaceAndAddToParentSchemaMap();
-        }
-    }
-        /*
-     * TODO analyze the reason to have RPC name prepended in input name in
-     * output Listener.
-     */
 }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNode.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNode.java
index cb0be7b..54c6ac9 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNode.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNode.java
@@ -112,11 +112,11 @@
     String getJavaAttributeName();
 
     /**
-     * Sets name of the node.
+     * Returns namespace of the node.
      *
-     * @return name of the node
+     * @return namespace of the node
      */
-    String getNameSpace();
+    YangNamespace getNameSpace();
 
     /**
      * Checks for the presence of notification in module/sub-module. Exception
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeIdentifier.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeIdentifier.java
index 62cd275..558e3a0 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeIdentifier.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeIdentifier.java
@@ -32,7 +32,7 @@
     private String name;
 
     // Namespace of YANG data node.
-    private String namespace;
+    private YangNamespace namespace;
 
     /**
      * Creates an instance of YANG data node identifier.
@@ -63,7 +63,7 @@
      *
      * @return namespace of the node
      */
-    public String getNameSpace() {
+    public YangNamespace getNameSpace() {
         return namespace;
     }
 
@@ -72,7 +72,7 @@
      *
      * @param namespace namespace of the node
      */
-    public void setNameSpace(String namespace) {
+    public void setNameSpace(YangNamespace namespace) {
         this.namespace = namespace;
     }
 
@@ -83,8 +83,22 @@
             return true;
         }
         if (obj instanceof YangSchemaNodeIdentifier) {
-            final YangSchemaNodeIdentifier other = (YangSchemaNodeIdentifier) obj;
-            return Objects.equals(name, other.name) && Objects.equals(namespace, other.namespace);
+            YangSchemaNodeIdentifier other = (YangSchemaNodeIdentifier) obj;
+
+            if (!Objects.equals(name, other.name)) {
+                return false;
+            }
+            final String name = namespace.getModuleName();
+            final String otherName = other.getNameSpace().getModuleName();
+            if (name != null && otherName != null) {
+                return namespace.getModuleName()
+                        .equals(other.getNameSpace().getModuleName());
+            }
+            final String nspace = namespace.getModuleNamespace();
+            final String otherNspace = other.getNameSpace().getModuleNamespace();
+            if (nspace != null && otherNspace != null) {
+                return nspace.equals(otherNspace);
+            }
         }
         return false;
     }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java
index 51f1aaf..5481381 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java
@@ -96,7 +96,7 @@
         extends YangNode
         implements YangLeavesHolder, YangDesc, YangReference, Parsable,
         CollisionDetector, YangReferenceResolver, RpcNotificationContainer,
-        YangFeatureHolder, YangIsFilterContentNodes {
+        YangFeatureHolder, YangIsFilterContentNodes, YangNamespace {
 
     private static final long serialVersionUID = 806201614L;
 
@@ -263,6 +263,11 @@
     private final List<YangAugment> augments;
 
     /**
+     * YANG defined namespace.
+     */
+    private String namespace;
+
+    /**
      * Creates a sub module node.
      */
     public YangSubModule() {
@@ -685,7 +690,8 @@
     public void linkWithModule(Set<YangNode> yangNodeSet)
             throws DataModelException {
         belongsTo.linkWithModule(yangNodeSet);
-        setNameSpace(belongsTo.getModuleNode().getNameSpace());
+        namespace = ((YangNamespace) belongsTo.getModuleNode())
+                .getModuleNamespace();
     }
 
     @Override
@@ -804,4 +810,18 @@
     public List<YangAugment> getAugmentList() {
         return unmodifiableList(augments);
     }
+
+    @Override
+    public String getModuleNamespace() {
+        return namespace;
+    }
+
+    @Override
+    public String getModuleName() {
+        return getName();
+    }
+
+    public void setModuleNamespace(String namespace) {
+        this.namespace = namespace;
+    }
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NamespaceListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NamespaceListener.java
index 0c6a816..6bfaf50 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NamespaceListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NamespaceListener.java
@@ -90,7 +90,7 @@
         switch (tmpNode.getYangConstructType()) {
             case MODULE_DATA: {
                 YangModule module = (YangModule) tmpNode;
-                module.setNameSpace(removeQuotesAndHandleConcat(ctx.string().getText()));
+                module.setModuleNamespace(removeQuotesAndHandleConcat(ctx.string().getText()));
                 break;
             }
             default:
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/YangJavaModelUtils.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/YangJavaModelUtils.java
index adb5c62..064229a 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/YangJavaModelUtils.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/YangJavaModelUtils.java
@@ -575,7 +575,8 @@
         StringBuilder pkg = new StringBuilder();
         if (node instanceof YangJavaModuleTranslator) {
             YangJavaModuleTranslator module = (YangJavaModuleTranslator) node;
-            pkg.append(getRootPackage(module.getVersion(), module.getNameSpace(),
+            pkg.append(getRootPackage(module.getVersion(),
+                                      module.getModuleNamespace(),
                                       module.getRevision(),
                                       config.getConflictResolver()));
         } else if (node instanceof YangJavaSubModuleTranslator) {
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
index d9517a8..ae7b016 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
@@ -463,8 +463,8 @@
             String pkg;
             if (yangNode instanceof YangJavaModuleTranslator) {
                 YangJavaModuleTranslator module = (YangJavaModuleTranslator) yangNode;
-                pkg = getRootPackage(module.getVersion(), module.getNameSpace(), module
-                        .getRevision(), conflictResolver);
+                pkg = getRootPackage(module.getVersion(), module.getModuleNamespace(),
+                                     module.getRevision(), conflictResolver);
             } else if (yangNode instanceof YangJavaSubModuleTranslator) {
                 YangJavaSubModuleTranslator submodule = (YangJavaSubModuleTranslator) yangNode;
                 pkg = getRootPackage(submodule.getVersion(),
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModuleTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModuleTranslator.java
index 16ff32c..e0b0dad 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModuleTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModuleTranslator.java
@@ -127,7 +127,7 @@
     @Override
     public void generateCodeEntry(YangPluginConfig yangPlugin)
             throws TranslatorException {
-        String modulePkg = getRootPackage(getVersion(), getNameSpace(),
+        String modulePkg = getRootPackage(getVersion(), getModuleNamespace(),
                                           getRevision(),
                                           yangPlugin.getConflictResolver());
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotificationTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotificationTranslator.java
index daffc7a..5d6f45d 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotificationTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotificationTranslator.java
@@ -122,6 +122,11 @@
     public void generateCodeEntry(YangPluginConfig yangPlugin)
             throws TranslatorException {
 
+        // Obtain the notification name as per enum in notification.
+        String enumName = getEnumJavaAttribute(getName().toUpperCase());
+        ((RpcNotificationContainer) getParent())
+                .addToNotificationEnumMap(enumName, this);
+
         /*
          * As part of the notification support the following files needs to be
          * generated.
@@ -184,27 +189,4 @@
                                                       e.getLocalizedMessage()));
         }
     }
-
-    @Override
-    public void setNameSpaceAndAddToParentSchemaMap() {
-        // Get parent namespace.
-        if (getParent() != null) {
-            String nameSpace = getParent().getNameSpace();
-            // Set namespace for self node.
-            setNameSpace(nameSpace);
-            // Process addition of leaf to the child schema map of parent.
-            processAdditionOfSchemaNodeToParentMap(getName(), getNameSpace());
-            // Obtain the notification name as per enum in notification.
-            String enumName = getEnumJavaAttribute(getName().toUpperCase());
-
-            ((RpcNotificationContainer) getParent())
-                    .addToNotificationEnumMap(enumName, this);
-
-        }
-        /*
-         * Check if node contains leaf/leaf-list, if yes add namespace for leaf
-         * and leaf list.
-         */
-        setLeafNameSpaceAndAddToParentSchemaMap();
-    }
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModuleTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModuleTranslator.java
index a530b2a..20fa8d2 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModuleTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModuleTranslator.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.yangutils.translator.tojava.javamodel;
 
+import org.onosproject.yangutils.datamodel.YangModule;
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.datamodel.YangNotification;
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaSubModule;
@@ -126,7 +127,7 @@
      * @return the name space string of the module.
      */
     public String getNameSpaceFromModule() {
-        return getBelongsTo().getModuleNode().getNameSpace();
+        return ((YangModule) (getBelongsTo().getModuleNode())).getModuleNamespace();
     }
 
     /**
diff --git a/plugin/src/test/java/org/onosproject/yangutils/parser/impl/listeners/NamespaceListenerTest.java b/plugin/src/test/java/org/onosproject/yangutils/parser/impl/listeners/NamespaceListenerTest.java
index 3a96361..53ed289 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/parser/impl/listeners/NamespaceListenerTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/parser/impl/listeners/NamespaceListenerTest.java
@@ -51,7 +51,8 @@
         YangNode node = manager.getDataModel("src/test/resources/NamespaceInDoubleQuotes.yang");
 
         // Checks for the version value in data model tree.
-        assertThat(((YangModule) node).getNameSpace(), is("urn:ietf:params:xml:ns:yang:ietf-ospf"));
+        assertThat(((YangModule) node).getModuleNamespace(), is
+                ("urn:ietf:params:xml:ns:yang:ietf-ospf"));
     }
 
     /**
@@ -63,7 +64,7 @@
         YangNode node = manager.getDataModel("src/test/resources/NamespaceWithoutQuotes.yang");
 
         // Checks for the version value in data model tree.
-        assertThat(((YangModule) node).getNameSpace(), is("urn:ietf:params:xml:ns:yang:ietf-ospf"));
+        assertThat(((YangModule) node).getModuleNamespace(), is("urn:ietf:params:xml:ns:yang:ietf-ospf"));
     }
 
     /**
diff --git a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/SchemaNodeTest.java b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/SchemaNodeTest.java
index a38cf12..366cefe 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/SchemaNodeTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/SchemaNodeTest.java
@@ -88,14 +88,14 @@
                 .getNextSibling();
         YangSchemaNodeIdentifier yangInputNode = new YangSchemaNodeIdentifier();
         yangInputNode.setName("input");
-        yangInputNode.setNameSpace("http://huawei.com");
+        yangInputNode.setNameSpace(yangRpcNode.getNameSpace());
         assertThat(yangRpcNode.getChildSchema(yangInputNode).getSchemaNode(),
                    is(yangRpcNode.getChild()));
 
         YangSchemaNodeIdentifier yangOutputNode = new
                 YangSchemaNodeIdentifier();
         yangOutputNode.setName("output");
-        yangOutputNode.setNameSpace("http://huawei.com");
+        yangOutputNode.setNameSpace(yangRpcNode.getNameSpace());
         assertThat(yangRpcNode.getChildSchema(yangOutputNode).getSchemaNode(),
                    is(yangRpcNode.getChild().getNextSibling()));
 
@@ -104,7 +104,7 @@
         YangSchemaNodeIdentifier yangInputLeafNode = new
                 YangSchemaNodeIdentifier();
         yangInputLeafNode.setName("image-name");
-        yangInputLeafNode.setNameSpace("http://huawei.com");
+        yangInputLeafNode.setNameSpace(yangRpcNode.getNameSpace());
         assertThat(yangInput.getChildSchema(yangInputLeafNode),
                    is(notNullValue()));
 
@@ -112,7 +112,7 @@
         YangSchemaNodeIdentifier yangOutputLeafNode = new
                 YangSchemaNodeIdentifier();
         yangOutputLeafNode.setName("image-name");
-        yangOutputLeafNode.setNameSpace("http://huawei.com");
+        yangOutputLeafNode.setNameSpace(yangRpcNode.getNameSpace());
         assertThat(yangOutput.getChildSchema(yangOutputLeafNode),
                    is(notNullValue()));
 
@@ -123,7 +123,7 @@
         YangSchemaNodeIdentifier yangSchemaNodeIdentifier =
                 new YangSchemaNodeIdentifier();
         yangSchemaNodeIdentifier.setName("testcontainer");
-        yangSchemaNodeIdentifier.setNameSpace("http://huawei.com");
+        yangSchemaNodeIdentifier.setNameSpace(yangRpcNode.getNameSpace());
         assertThat(schemaMap.get(yangSchemaNodeIdentifier), is(notNullValue()));
         YangSchemaNodeContextInfo yangSchemaNodeContextInfo =
                 schemaMap.get(yangSchemaNodeIdentifier);
@@ -136,12 +136,12 @@
                 rootNode.getChild()
                         .getYsnContextInfoMap();
         yangSchemaNodeIdentifier.setName("testleaf");
-        yangSchemaNodeIdentifier.setNameSpace("http://huawei.com");
+        yangSchemaNodeIdentifier.setNameSpace(yangRpcNode.getNameSpace());
         assertThat(schemaMap2.get(yangSchemaNodeIdentifier),
                    is(notNullValue()));
 
         yangSchemaNodeIdentifier.setName("pretzel");
-        yangSchemaNodeIdentifier.setNameSpace("http://huawei.com");
+        yangSchemaNodeIdentifier.setNameSpace(yangRpcNode.getNameSpace());
         assertThat(schemaMap2.get(yangSchemaNodeIdentifier),
                    is(notNullValue()));
 
@@ -151,7 +151,7 @@
                 rootNode.getChild().getChild()
                         .getYsnContextInfoMap();
         yangSchemaNodeIdentifier.setName("pretzel");
-        yangSchemaNodeIdentifier.setNameSpace("http://huawei.com");
+        yangSchemaNodeIdentifier.setNameSpace(yangRpcNode.getNameSpace());
         assertThat(schemaMap3.get(yangSchemaNodeIdentifier),
                    is(notNullValue()));
         YangSchemaNodeContextInfo yangSchemaNodeContextInfo3 =
@@ -164,7 +164,7 @@
                 rootNode.getChild().getChild().getChild()
                         .getYsnContextInfoMap();
         yangSchemaNodeIdentifier.setName("pretzel");
-        yangSchemaNodeIdentifier.setNameSpace("http://huawei.com");
+        yangSchemaNodeIdentifier.setNameSpace(yangRpcNode.getNameSpace());
         assertThat(schemaMap4.get(yangSchemaNodeIdentifier),
                    is(notNullValue()));
 
