diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
index 8e5de36..c2df52f 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
@@ -74,7 +74,7 @@
 public class YangModule
         extends YangNode
         implements YangLeavesHolder, YangDesc, YangReference, Parsable, CollisionDetector, YangReferenceResolver,
-        RpcNotificationContainer, YangFeatureHolder {
+        RpcNotificationContainer, YangFeatureHolder, YangIsFilterContentNodes {
 
     private static final long serialVersionUID = 806201610L;
 
@@ -85,7 +85,7 @@
 
     /**
      * Reference:RFC 6020.
-     *
+     * <p>
      * The "contact" statement provides contact information for the module. The
      * argument is a string that is used to specify contact information for the
      * person or persons to whom technical queries concerning this module should
@@ -96,7 +96,7 @@
 
     /**
      * Reference:RFC 6020.
-     *
+     * <p>
      * The "description" statement takes as an argument a string that contains a
      * human-readable textual description of this definition. The text is
      * provided in a language (or languages) chosen by the module developer; for
@@ -136,7 +136,7 @@
 
     /**
      * Reference:RFC 6020.
-     *
+     * <p>
      * The "organization" statement defines the party responsible for this
      * module. The argument is a string that is used to specify a textual
      * description of the organization(s) under whose auspices this module was
@@ -211,9 +211,9 @@
     private List<YangResolutionInfo> ifFeatureResolutionList;
 
     /**
-     * Leafref resolution list.
+     * LeafRef resolution list.
      */
-    private List<YangResolutionInfo> leafrefResolutionList;
+    private List<YangResolutionInfo> leafRefResolutionList;
 
     /**
      * Base resolution list.
@@ -221,9 +221,9 @@
     private List<YangResolutionInfo> baseResolutionList;
 
     /**
-     * Identityref resolution list.
+     * IdentityRef resolution list.
      */
-    private List<YangResolutionInfo> identityrefResolutionList;
+    private List<YangResolutionInfo> identityRefResolutionList;
 
     /**
      * Augment resolution list.
@@ -250,15 +250,15 @@
         augmentResolutionList = new LinkedList<>();
         usesResolutionList = new LinkedList<>();
         ifFeatureResolutionList = new LinkedList<>();
-        leafrefResolutionList = new LinkedList<>();
+        leafRefResolutionList = new LinkedList<>();
         baseResolutionList = new LinkedList<>();
-        identityrefResolutionList = new LinkedList<>();
+        identityRefResolutionList = new LinkedList<>();
         compilerAnnotationList = new LinkedList<>();
-        importList = new LinkedList<YangImport>();
-        includeList = new LinkedList<YangInclude>();
-        listOfLeaf = new LinkedList<YangLeaf>();
-        listOfLeafList = new LinkedList<YangLeafList>();
-        extensionList = new LinkedList<YangExtension>();
+        importList = new LinkedList<>();
+        includeList = new LinkedList<>();
+        listOfLeaf = new LinkedList<>();
+        listOfLeafList = new LinkedList<>();
+        extensionList = new LinkedList<>();
     }
 
     /**
@@ -684,11 +684,11 @@
         } else if (type == ResolvableType.YANG_IF_FEATURE) {
             return ifFeatureResolutionList;
         } else if (type == ResolvableType.YANG_LEAFREF) {
-            return leafrefResolutionList;
+            return leafRefResolutionList;
         } else if (type == ResolvableType.YANG_BASE) {
             return baseResolutionList;
         } else {
-            return identityrefResolutionList;
+            return identityRefResolutionList;
         }
     }
 
@@ -702,13 +702,13 @@
         } else if (type == ResolvableType.YANG_IF_FEATURE) {
             ifFeatureResolutionList.add(resolutionInfo);
         } else if (type == ResolvableType.YANG_LEAFREF) {
-            leafrefResolutionList.add(resolutionInfo);
+            leafRefResolutionList.add(resolutionInfo);
         } else if (type == ResolvableType.YANG_BASE) {
             baseResolutionList.add(resolutionInfo);
         } else if (type == ResolvableType.YANG_AUGMENT) {
             augmentResolutionList.add(resolutionInfo);
         } else if (type == ResolvableType.YANG_IDENTITYREF) {
-            identityrefResolutionList.add(resolutionInfo);
+            identityRefResolutionList.add(resolutionInfo);
         }
     }
 
@@ -722,13 +722,13 @@
         } else if (type == ResolvableType.YANG_IF_FEATURE) {
             ifFeatureResolutionList.add((YangResolutionInfo) resolutionList);
         } else if (type == ResolvableType.YANG_LEAFREF) {
-            leafrefResolutionList = resolutionList;
+            leafRefResolutionList = resolutionList;
         } else if (type == ResolvableType.YANG_BASE) {
             baseResolutionList = resolutionList;
         } else if (type == ResolvableType.YANG_AUGMENT) {
             augmentResolutionList = resolutionList;
         } else if (type == ResolvableType.YANG_IDENTITYREF) {
-            identityrefResolutionList = resolutionList;
+            identityRefResolutionList = resolutionList;
         }
 
     }
