diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecYdtListener.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecYdtListener.java
index 98a8ccb..61c2f00 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecYdtListener.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecYdtListener.java
@@ -50,6 +50,11 @@
     private YdtExtendedContext rootYdtNode;
 
     /**
+     * Module YDT node.
+     */
+    private YdtExtendedContext currentModule;
+
+    /**
      * Creates a new codec listener.
      *
      * @param format   protocol data format
@@ -59,6 +64,7 @@
                         YdtExtendedContext rootNode) {
         dataFormat = format;
         rootYdtNode = rootNode;
+        currentModule = ((YdtExtendedContext) rootNode.getFirstChild());
     }
 
     /**
@@ -70,10 +76,29 @@
         return elementStack;
     }
 
+    /**
+     * Returns true, if YDT node is module node; false otherwise.
+     *
+     * @param ydtContext YDT node
+     * @return true if YDT node is module; false otherwise
+     */
+    private boolean isModuleNode(YdtExtendedContext ydtContext,
+                                 boolean isExit) {
+        if (Objects.equals(currentModule, ydtContext)) {
+            if (isExit) {
+                currentModule = (YdtExtendedContext) currentModule
+                        .getNextSibling();
+            }
+            return true;
+        }
+        return false;
+    }
+
     @Override
     public void enterYdtNode(YdtExtendedContext ydtContext) {
 
-        if (!Objects.equals(rootYdtNode, ydtContext)) {
+        if (!Objects.equals(rootYdtNode, ydtContext) &&
+                !isModuleNode(ydtContext, false)) {
 
             CodecHandlerFactory factory = CodecHandlerFactory.instance();
             XmlCodecHandler handler =
@@ -94,7 +119,8 @@
 
     @Override
     public void exitYdtNode(YdtExtendedContext ydtExtendedContext) {
-        if (!Objects.equals(rootYdtNode, ydtExtendedContext)) {
+        if (!Objects.equals(rootYdtNode, ydtExtendedContext) &&
+                !isModuleNode(ydtExtendedContext, true)) {
             elementStack.pop();
         }
     }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ytb/YdtBuilderFromYo.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ytb/YdtBuilderFromYo.java
index 10874f0..4faa58b 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ytb/YdtBuilderFromYo.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ytb/YdtBuilderFromYo.java
@@ -345,12 +345,30 @@
                 }
                 curTraversal = PARENT;
                 traverseToParent(curNode);
-                curNode = curNode.getParent();
+                curNode = getParentSchemaNode(curNode);
             }
         }
     }
 
     /**
+     * Returns parent schema node of current node.
+     *
+     * @param curNode current schema node
+     * @return parent schema node
+     */
+    private YangNode getParentSchemaNode(YangNode curNode) {
+        if (curNode instanceof YangAugment) {
+            /*
+             * If curNode is augment, either next augment or augmented node
+             * has to be processed. So traversal type is changed to parent,
+             * but node is not changed.
+             */
+            return curNode;
+        }
+        return curNode.getParent();
+    }
+
+    /**
      * Processes root YANG node and adds it as a child to the YDT
      * extended builder which is created earlier.
      */
@@ -372,7 +390,8 @@
      * @param curNode current YANG node
      */
     private void traverseToParent(YangNode curNode) {
-        if (curNode instanceof YangCase || curNode instanceof YangChoice) {
+        if (curNode instanceof YangCase || curNode instanceof YangChoice
+                || curNode instanceof YangAugment) {
             return;
         }
         extBuilder.traverseToParentWithoutValidation();
