diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentableNode.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentableNode.java
index 5fb0653..0c16a44 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentableNode.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentableNode.java
@@ -43,18 +43,4 @@
      * @return list of augment info
      */
     List<YangAugment> getAugmentedInfoList();
-
-    /**
-     * Sets the isAugmented flag.
-     *
-     * @param isAugmented the flag value to set
-     */
-    void setIsAugmented(boolean isAugmented);
-
-    /**
-     * Returns the isAugmented flag.
-     *
-     * @return if isAugmented flag
-     */
-    boolean isAugmented();
 }
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 7e6d875..09cb104 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
@@ -138,8 +138,6 @@
 
     private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
-    private boolean isAugmented;
-
     /**
      * Creates a choice node.
      */
@@ -430,16 +428,6 @@
     }
 
     @Override
-    public void setIsAugmented(boolean isAugmented) {
-        this.isAugmented = isAugmented;
-    }
-
-    @Override
-    public boolean isAugmented() {
-        return isAugmented;
-    }
-
-    @Override
     public void setLeafNameSpaceAndAddToParentSchemaMap() {
         // Add namespace for all leafs.
         for (YangLeaf yangLeaf : getListOfLeaf()) {
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 8aaeeaa..cd08573 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
@@ -159,8 +159,6 @@
      */
     private YangAppErrorInfo yangAppErrorInfo;
 
-    private boolean isAugmented;
-
     /**
      * Create a choice node.
      */
@@ -466,16 +464,6 @@
     }
 
     @Override
-    public void setIsAugmented(boolean isAugmented) {
-        this.isAugmented = isAugmented;
-    }
-
-    @Override
-    public boolean isAugmented() {
-        return isAugmented;
-    }
-
-    @Override
     public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
         this.yangAppErrorInfo = yangAppErrorInfo;
     }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
index 16f826a..30c9ec9 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
@@ -130,8 +130,6 @@
 
     private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
-    private boolean isAugmented;
-
     /**
      * Status of the node.
      */
@@ -508,16 +506,6 @@
     }
 
     @Override
-    public void setIsAugmented(boolean isAugmented) {
-        this.isAugmented = isAugmented;
-    }
-
-    @Override
-    public boolean isAugmented() {
-        return isAugmented;
-    }
-
-    @Override
     public void setLeafNameSpaceAndAddToParentSchemaMap() {
         // Add namespace for all leafs.
         for (YangLeaf yangLeaf : getListOfLeaf()) {
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 eff6acf..a1b82fd 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java
@@ -88,8 +88,6 @@
 
     private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
-    private boolean isAugmented;
-
     /**
      * Create a rpc input node.
      */
@@ -222,16 +220,6 @@
     }
 
     @Override
-    public void setIsAugmented(boolean isAugmented) {
-        this.isAugmented = isAugmented;
-    }
-
-    @Override
-    public boolean isAugmented() {
-        return isAugmented;
-    }
-
-    @Override
     public void setLeafNameSpaceAndAddToParentSchemaMap() {
         // Add namespace for all leafs.
         for (YangLeaf yangLeaf : getListOfLeaf()) {
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
index f0d5c99..918bb53 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
@@ -209,8 +209,6 @@
      */
     private transient YangCompilerAnnotation compilerAnnotation;
 
-    private boolean isAugmented;
-
     /**
      * Creates a YANG list object.
      */
@@ -785,16 +783,6 @@
     }
 
     @Override
-    public void setIsAugmented(boolean isAugmented) {
-        this.isAugmented = isAugmented;
-    }
-
-    @Override
-    public boolean isAugmented() {
-        return isAugmented;
-    }
-
-    @Override
     public void setLeafNameSpaceAndAddToParentSchemaMap() {
         // Add namespace for all leafs.
         for (YangLeaf yangLeaf : getListOfLeaf()) {
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 cd6cc7c..2d419c9 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
@@ -96,6 +96,11 @@
     private Map<YangSchemaNodeIdentifier, YangSchemaNode> defaultChildMap;
 
     /**
+     * Flag to check whether any descendant node is augmented.
+     */
+    private boolean isDescendantNodeAugmented;
+
+    /**
      * Returns the priority of the node.
      *
      * @return priority of the node
@@ -133,6 +138,24 @@
     }
 
     /**
+     * Returns true if descendant node is augmented.
+     *
+     * @return true if descendant node is augmented
+     */
+    public boolean isDescendantNodeAugmented() {
+        return isDescendantNodeAugmented;
+    }
+
+    /**
+     * Sets true if descendant node is augmented.
+     *
+     * @param descendantNodeAugmented true if descendant node is augmented.
+     */
+    public void setDescendantNodeAugmented(boolean descendantNodeAugmented) {
+        isDescendantNodeAugmented = descendantNodeAugmented;
+    }
+
+    /**
      * Returns the node type.
      *
      * @return node type
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java
index 0802366..b70190c 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java
@@ -115,8 +115,6 @@
 
     private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
-    private boolean isAugmented;
-
     /**
      * Create a notification node.
      */
@@ -279,16 +277,6 @@
     }
 
     @Override
-    public void setIsAugmented(boolean isAugmented) {
-        this.isAugmented = isAugmented;
-    }
-
-    @Override
-    public boolean isAugmented() {
-        return isAugmented;
-    }
-
-    @Override
     public void setLeafNameSpaceAndAddToParentSchemaMap() {
         // Add namespace for all leafs.
         for (YangLeaf yangLeaf : getListOfLeaf()) {
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 52044df..d3d9cb7 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
@@ -87,8 +87,6 @@
 
     private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
-    private boolean isAugmented;
-
     /**
      * Create a rpc output node.
      */
@@ -221,16 +219,6 @@
     }
 
     @Override
-    public void setIsAugmented(boolean isAugmented) {
-        this.isAugmented = isAugmented;
-    }
-
-    @Override
-    public boolean isAugmented() {
-        return isAugmented;
-    }
-
-    @Override
     public void setLeafNameSpaceAndAddToParentSchemaMap() {
         // Add namespace for all leafs.
         for (YangLeaf yangLeaf : getListOfLeaf()) {
diff --git a/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfoImpl.java b/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfoImpl.java
index f0d4608..1281bb8 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfoImpl.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfoImpl.java
@@ -1249,8 +1249,8 @@
                 if (targetNode instanceof YangAugmentableNode) {
                     detectCollisionForAugmentedNode(targetNode, augment);
                     ((YangAugmentableNode) targetNode).addAugmentation(augment);
-                    ((YangAugmentableNode) targetNode).setIsAugmented(true);
                     augment.setAugmentedNode(targetNode);
+                    setAugmentedFlagInAncestors(targetNode);
                     Resolvable resolvable = (Resolvable) entityToResolve;
                     resolvable.setResolvableStatus(RESOLVED);
                 } else {
@@ -1842,4 +1842,16 @@
         return null;
     }
 
+    /**
+     * Sets descendant node augmented flag in ancestors.
+     *
+     * @param targetNode augmented YANG node
+     */
+    private void setAugmentedFlagInAncestors(YangNode targetNode) {
+        targetNode = targetNode.getParent();
+        while (targetNode != null) {
+            targetNode.setDescendantNodeAugmented(true);
+            targetNode = targetNode.getParent();
+        }
+    }
 }
