[ONOS-5142] [ONOS-5137] defect fixes

Change-Id: I2856a7a41b242b16c981915dd97986aa9c6ab676
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 041ee58..1d4f2e9 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java
@@ -83,8 +83,8 @@
  */
 public abstract class YangAugment
         extends YangNode
-        implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector, YangAugmentedInfo, Resolvable,
-        YangXPathResolver, YangWhenHolder, YangIfFeatureHolder, YangTranslatorOperatorNode {
+        implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector, Resolvable,
+        YangXPathResolver, YangWhenHolder, YangIfFeatureHolder {
 
     private static final long serialVersionUID = 806201602L;
 
@@ -144,15 +144,17 @@
      * Create a YANG augment node.
      */
     public YangAugment() {
-        super(YangNodeType.AUGMENT_NODE, new HashMap<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo>());
+        super(YangNodeType.AUGMENT_NODE, new HashMap<>());
         listOfLeaf = new LinkedList<>();
         listOfLeafList = new LinkedList<>();
+        targetNode = new LinkedList<>();
+        ifFeatureList = new LinkedList<>();
         resolvableStatus = ResolvableStatus.UNRESOLVED;
     }
 
     @Override
     public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
-            YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
+                                    YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
             throws DataModelException {
         getYsnContextInfoMap().put(schemaNodeIdentifier, yangSchemaNodeContextInfo);
         YangSchemaNodeContextInfo yangSchemaNodeContextInfo1 = new YangSchemaNodeContextInfo();
@@ -164,7 +166,7 @@
     @Override
     public void setNameSpaceAndAddToParentSchemaMap() {
         // Get parent namespace.
-        String  nameSpace = this.getParent().getNameSpace();
+        String nameSpace = this.getParent().getNameSpace();
         // Set namespace for self node.
         setNameSpace(nameSpace);
         /*
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 7aa4b0c..5fb0653 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentableNode.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentableNode.java
@@ -28,21 +28,21 @@
      *
      * @param augmentInfo augment info of node
      */
-    void addAugmentation(YangAugmentedInfo augmentInfo);
+    void addAugmentation(YangAugment augmentInfo);
 
     /**
      * Removes augment info from the node.
      *
      * @param augmentInfo augment info of node
      */
-    void removeAugmentation(YangAugmentedInfo augmentInfo);
+    void removeAugmentation(YangAugment augmentInfo);
 
     /**
      * Returns list of augment info.
      *
      * @return list of augment info
      */
-    List<YangAugmentedInfo> getAugmentedInfoList();
+    List<YangAugment> getAugmentedInfoList();
 
     /**
      * Sets the isAugmented flag.
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentedInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentedInfo.java
deleted file mode 100644
index b6e55e6..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentedInfo.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * 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;
-
-/**
- * Abstraction of an entity which represents YANG augmented info.
- */
-public interface YangAugmentedInfo {
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentedOpParamInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentedOpParamInfo.java
deleted file mode 100644
index b9c1a3a..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentedOpParamInfo.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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;
-
-/**
- * Abstraction of an entity which represent operation parameter info for augmentable node.
- */
-public interface YangAugmentedOpParamInfo extends YangAugmentedInfo {
-
-    /**
-     * Returns class object of base class.
-     *
-     * @return class object of base class
-     */
-    Class<?> getBaseClass();
-
-    /**
-     * Returns if augmented info's contents matches.
-     *
-     * @param augmentedInfo augmented info
-     * @return true or false
-     */
-    boolean isFilterContentMatch(Object augmentedInfo);
-}
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 b849257..38f4e01 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
@@ -19,6 +19,7 @@
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
+
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
@@ -135,7 +136,7 @@
      */
     private List<YangIfFeature> ifFeatureList;
 
-    private List<YangAugmentedInfo> yangAugmentedInfo = new ArrayList<>();
+    private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
     private boolean isAugmented;
 
@@ -143,9 +144,10 @@
      * Creates a choice node.
      */
     public YangCase() {
-        super(YangNodeType.CASE_NODE, new HashMap<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo>());
+        super(YangNodeType.CASE_NODE, new HashMap<>());
         listOfLeaf = new LinkedList<>();
         listOfLeafList = new LinkedList<>();
+        ifFeatureList = new LinkedList<>();
     }
 
     @Override
@@ -407,17 +409,17 @@
     }
 
     @Override
-    public void addAugmentation(YangAugmentedInfo augmentInfo) {
+    public void addAugmentation(YangAugment augmentInfo) {
         yangAugmentedInfo.add(augmentInfo);
     }
 
     @Override
-    public void removeAugmentation(YangAugmentedInfo augmentInfo) {
+    public void removeAugmentation(YangAugment augmentInfo) {
         yangAugmentedInfo.remove(augmentInfo);
     }
 
     @Override
-    public List<YangAugmentedInfo> getAugmentedInfoList() {
+    public List<YangAugment> getAugmentedInfoList() {
         return yangAugmentedInfo;
     }
 
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 7647e0d..8aaeeaa 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
@@ -19,6 +19,7 @@
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
+
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
@@ -151,7 +152,7 @@
      */
     private List<YangIfFeature> ifFeatureList;
 
-    private List<YangAugmentedInfo> yangAugmentedInfo = new ArrayList<>();
+    private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
     /**
      * YANG application error information.
@@ -164,8 +165,9 @@
      * Create a choice node.
      */
     public YangChoice() {
-        super(YangNodeType.CHOICE_NODE, new HashMap<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo>());
+        super(YangNodeType.CHOICE_NODE, new HashMap<>());
         yangAppErrorInfo = new YangAppErrorInfo();
+        ifFeatureList = new LinkedList<>();
         yangAppErrorInfo.setErrorTag(DATA_MISSING_ERROR_TAG);
         yangAppErrorInfo.setErrorAppTag(MISSING_CHOICE_ERROR_APP_TAG);
         yangAppErrorInfo.setErrorAppPath(ERROR_PATH_MISSING_CHOICE);
@@ -449,17 +451,17 @@
     }
 
     @Override
-    public void addAugmentation(YangAugmentedInfo augmentInfo) {
+    public void addAugmentation(YangAugment augmentInfo) {
         yangAugmentedInfo.add(augmentInfo);
     }
 
     @Override
-    public void removeAugmentation(YangAugmentedInfo augmentInfo) {
+    public void removeAugmentation(YangAugment augmentInfo) {
         yangAugmentedInfo.remove(augmentInfo);
     }
 
     @Override
-    public List<YangAugmentedInfo> getAugmentedInfoList() {
+    public List<YangAugment> getAugmentedInfoList() {
         return yangAugmentedInfo;
     }
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCompilerAnnotation.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCompilerAnnotation.java
index 4099f47..c7f5605 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCompilerAnnotation.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCompilerAnnotation.java
@@ -55,7 +55,7 @@
     /**
      * Path of compiler-annotation.
      */
-    List<YangAtomicPath> atomicPathList = new LinkedList<>();
+    private List<YangAtomicPath> atomicPathList = new LinkedList<>();
 
     /**
      * Resolution status.
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 a0275eb..606c7f7 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
@@ -128,7 +128,7 @@
      */
     private String reference;
 
-    private List<YangAugmentedInfo> yangAugmentedInfo = new ArrayList<>();
+    private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
     private boolean isAugmented;
 
@@ -156,14 +156,16 @@
      * Create a container node.
      */
     public YangContainer() {
-        super(YangNodeType.CONTAINER_NODE, new HashMap<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo>());
+        super(YangNodeType.CONTAINER_NODE, new HashMap<>());
         listOfLeaf = new LinkedList<>();
         listOfLeafList = new LinkedList<>();
+        mustConstraintList = new LinkedList<>();
+        ifFeatureList = new LinkedList<>();
     }
 
     @Override
     public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
-            YangSchemaNodeContextInfo yangSchemaNodeContextInfo) {
+                                    YangSchemaNodeContextInfo yangSchemaNodeContextInfo) {
         getYsnContextInfoMap().put(schemaNodeIdentifier, yangSchemaNodeContextInfo);
     }
 
@@ -481,17 +483,17 @@
     }
 
     @Override
-    public void addAugmentation(YangAugmentedInfo augmentInfo) {
+    public void addAugmentation(YangAugment augmentInfo) {
         yangAugmentedInfo.add(augmentInfo);
     }
 
     @Override
-    public void removeAugmentation(YangAugmentedInfo augmentInfo) {
+    public void removeAugmentation(YangAugment augmentInfo) {
         yangAugmentedInfo.remove(augmentInfo);
     }
 
     @Override
-    public List<YangAugmentedInfo> getAugmentedInfoList() {
+    public List<YangAugment> getAugmentedInfoList() {
         return yangAugmentedInfo;
     }
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDerivedInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDerivedInfo.java
index 863d03c..f7d53cc 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDerivedInfo.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDerivedInfo.java
@@ -66,12 +66,12 @@
     /**
      * Line number of pattern restriction in YANG file.
      */
-    private int lineNumber;
+    private transient int lineNumber;
 
     /**
      * Position of pattern restriction in line.
      */
-    private int charPositionInLine;
+    private transient int charPositionInLine;
 
     /**
      * Effective built-in type, requried in case type of typedef is again a
@@ -326,7 +326,7 @@
                      */
                     return RESOLVED;
                 }
-            }  else if (getEffectiveBuiltInType() == DECIMAL64) {
+            } else if (getEffectiveBuiltInType() == DECIMAL64) {
                 if (baseType.getDataTypeExtendedInfo() != null) {
                     if (((YangDecimal64) baseType.getDataTypeExtendedInfo()).getRangeRestrictedExtendedInfo() == null) {
                         resolveRangeRestriction(null);
@@ -340,7 +340,7 @@
                         if (!(((YangDecimal64) baseType.getDataTypeExtendedInfo())
                                 .getRangeRestrictedExtendedInfo() instanceof YangRangeRestriction)) {
                             throw new DataModelException("Linker error: Referred typedef restriction info is" +
-                                                                 " of invalid type.");
+                                    " of invalid type.");
                         }
                         resolveRangeRestriction((YangRangeRestriction) ((YangDecimal64) baseType
                                 .getDataTypeExtendedInfo()).getRangeRestrictedExtendedInfo());
@@ -400,7 +400,7 @@
             return INTRA_FILE_RESOLVED;
         }
         setEffectiveBuiltInType(((YangDerivedInfo<?>) baseType.getDataTypeExtendedInfo())
-                                        .getEffectiveBuiltInType());
+                .getEffectiveBuiltInType());
         YangDerivedInfo refDerivedInfo = (YangDerivedInfo<?>) baseType.getDataTypeExtendedInfo();
         /*
          * Check whether the effective built-in type can have range
@@ -418,7 +418,7 @@
             } else {
                 if (!(refDerivedInfo.getResolvedExtendedInfo() instanceof YangRangeRestriction)) {
                     throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " +
-                                                         "type.");
+                            "type.");
                 }
                 resolveRangeRestriction((YangRangeRestriction) refDerivedInfo.getResolvedExtendedInfo());
                 /*
@@ -444,7 +444,7 @@
             } else {
                 if (!(refDerivedInfo.getResolvedExtendedInfo() instanceof YangStringRestriction)) {
                     throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " +
-                                                         "type.");
+                            "type.");
                 }
                 resolveStringRestriction((YangStringRestriction) refDerivedInfo.getResolvedExtendedInfo());
                 /*
@@ -466,7 +466,7 @@
             } else {
                 if (!(refDerivedInfo.getResolvedExtendedInfo() instanceof YangRangeRestriction)) {
                     throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " +
-                                                         "type.");
+                            "type.");
                 }
                 resolveBinaryRestriction((YangRangeRestriction) refDerivedInfo.getResolvedExtendedInfo());
                 /*
@@ -488,7 +488,7 @@
             } else {
                 if (!(refDerivedInfo.getResolvedExtendedInfo() instanceof YangRangeRestriction)) {
                     throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " +
-                                                         "type.");
+                            "type.");
                 }
                 resolveRangeRestriction((YangRangeRestriction) refDerivedInfo
                         .getResolvedExtendedInfo());
@@ -573,7 +573,7 @@
         if (rangeRestrictionString != null || patternRestriction != null) {
             DataModelException dataModelException =
                     new DataModelException("YANG file error: for binary " +
-                                                   "range restriction or pattern restriction is not allowed.");
+                            "range restriction or pattern restriction is not allowed.");
             dataModelException.setLine(lineNumber);
             dataModelException.setCharPosition(charPositionInLine);
             throw dataModelException;
@@ -683,7 +683,7 @@
      * @param curRestriction self restriction
      */
     private void resolveLengthAndRangeRestriction(YangRangeRestriction refRestriction,
-            YangRangeRestriction curRestriction)
+                                                  YangRangeRestriction curRestriction)
             throws DataModelException {
         for (Object curInterval : curRestriction.getAscendingRangeIntervals()) {
             if (!(curInterval instanceof YangRangeInterval)) {
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEnumeration.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEnumeration.java
index c793399..42ffaa6 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEnumeration.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEnumeration.java
@@ -45,7 +45,7 @@
      */
     public YangEnumeration() {
         super(YangNodeType.ENUMERATION_NODE, null);
-        setEnumSet(new TreeSet<YangEnum>());
+        setEnumSet(new TreeSet<>());
     }
 
     @Override
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangGrouping.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangGrouping.java
index 6f9d9b0..e71432f 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangGrouping.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangGrouping.java
@@ -109,12 +109,17 @@
     private YangStatusType status;
 
     /**
+     * Grouping depth.
+     */
+    private int groupingDepth;
+
+    /**
      * Creates the grouping node.
      */
     public YangGrouping() {
         super(YangNodeType.GROUPING_NODE, null);
-        listOfLeaf = new LinkedList<YangLeaf>();
-        listOfLeafList = new LinkedList<YangLeafList>();
+        listOfLeaf = new LinkedList<>();
+        listOfLeafList = new LinkedList<>();
     }
 
     @Override
@@ -330,4 +335,22 @@
         }
     }
     // TODO  A grouping MUST NOT reference itself, neither directly nor indirectly through a chain of other groupings.
+
+    /**
+     * Returns grouping depth.
+     *
+     * @return grouping depth
+     */
+    public int getGroupingDepth() {
+        return groupingDepth;
+    }
+
+    /**
+     * Sets grouping depth.
+     *
+     * @param groupingDepth grouping depth
+     */
+    public void setGroupingDepth(int groupingDepth) {
+        this.groupingDepth = groupingDepth;
+    }
 }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIfFeature.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIfFeature.java
index c2c8709..151477d 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIfFeature.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIfFeature.java
@@ -19,6 +19,7 @@
 import java.io.Serializable;
 import java.util.Iterator;
 import java.util.List;
+
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
@@ -52,17 +53,17 @@
     /**
      * if-feature argument.
      */
-    YangNodeIdentifier name;
+    private YangNodeIdentifier name;
 
     /**
      * Referred feature information.
      */
-    YangFeature referredFeature;
+    private YangFeature referredFeature;
 
     /**
      * Referred feature parent information.
      */
-    YangNode referredFeatureHolder;
+    private YangNode referredFeatureHolder;
 
     /**
      * Status of resolution. If completely resolved enum value is "RESOLVED",
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 6a52f8f..bf8f4ab 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java
@@ -20,6 +20,7 @@
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
+
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
@@ -85,7 +86,7 @@
      */
     private List<YangLeafList> listOfLeafList;
 
-    private List<YangAugmentedInfo> yangAugmentedInfo = new ArrayList<>();
+    private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
     private boolean isAugmented;
 
@@ -93,7 +94,7 @@
      * Create a rpc input node.
      */
     public YangInput() {
-        super(YangNodeType.INPUT_NODE, new HashMap<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo>());
+        super(YangNodeType.INPUT_NODE, new HashMap<>());
         listOfLeaf = new LinkedList<>();
         listOfLeafList = new LinkedList<>();
     }
@@ -203,17 +204,17 @@
     }
 
     @Override
-    public void addAugmentation(YangAugmentedInfo augmentInfo) {
+    public void addAugmentation(YangAugment augmentInfo) {
         yangAugmentedInfo.add(augmentInfo);
     }
 
     @Override
-    public void removeAugmentation(YangAugmentedInfo augmentInfo) {
+    public void removeAugmentation(YangAugment augmentInfo) {
         yangAugmentedInfo.remove(augmentInfo);
     }
 
     @Override
-    public List<YangAugmentedInfo> getAugmentedInfoList() {
+    public List<YangAugment> getAugmentedInfoList() {
         return yangAugmentedInfo;
     }
 
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 36d39bf..11132ff 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
@@ -137,6 +137,8 @@
      * Creates a YANG leaf.
      */
     public YangLeaf() {
+        mustConstraintList = new LinkedList<>();
+        ifFeatureList = new LinkedList<>();
     }
 
     /**
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 8a296ea..a743716 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
@@ -20,6 +20,7 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
@@ -133,7 +134,7 @@
     /**
      * YANG Node in which the leaf is contained.
      */
-    private transient YangLeavesHolder containedIn;
+    private YangLeavesHolder containedIn;
 
     /**
      * List of must statement constraints.
@@ -154,6 +155,8 @@
      * Creates a YANG leaf-list.
      */
     public YangLeafList() {
+        mustConstraintList = new LinkedList<>();
+        ifFeatureList = new LinkedList<>();
         setMinElements(new YangMinElement());
         setMaxElements(new YangMaxElement());
     }
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 e06d5d5..7001539 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
@@ -90,7 +90,7 @@
 
     /**
      * Reference RFC 6020.
-     *
+     * <p>
      * The "key" statement, which MUST be present if the list represents
      * configuration, and MAY be present otherwise, takes as an argument a
      * string that specifies a space-separated list of leaf identifiers of this
@@ -98,39 +98,39 @@
      * such leaf identifier MUST refer to a child leaf of the list. The leafs
      * can be defined directly in sub-statements to the list, or in groupings
      * used in the list.
-     *
+     * <p>
      * The combined values of all the leafs specified in the key are used to
      * uniquely identify a list entry. All key leafs MUST be given values when a
      * list entry is created. Thus, any default values in the key leafs or their
      * types are ignored. It also implies that any mandatory statement in the
      * key leafs are ignored.
-     *
+     * <p>
      * A leaf that is part of the key can be of any built-in or derived type,
      * except it MUST NOT be the built-in type "empty".
-     *
+     * <p>
      * All key leafs in a list MUST have the same value for their "config" as
      * the list itself.
-     *
+     * <p>
      * List of key leaf names.
      */
     private List<String> keyList;
 
     /**
      * Reference RFC 6020.
-     *
+     * <p>
      * The "unique" statement is used to put constraints on valid list
      * entries.  It takes as an argument a string that contains a space-
      * separated list of schema node identifiers, which MUST be given in the
      * descendant form.  Each such schema node identifier MUST refer to a leaf.
-     *
+     * <p>
      * If one of the referenced leafs represents configuration data, then
      * all of the referenced leafs MUST represent configuration data.
-     *
+     * <p>
      * The "unique" constraint specifies that the combined values of all the
      * leaf instances specified in the argument string, including leafs with
      * default values, MUST be unique within all list entry instances in
      * which all referenced leafs exist.
-     *
+     * <p>
      * List of unique leaf/leaf-list names
      */
     private List<String> uniqueList;
@@ -145,36 +145,36 @@
      */
     private List<YangLeafList> listOfLeafList;
 
-    private List<YangAugmentedInfo> yangAugmentedInfo = new ArrayList<>();
+    private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
     /**
      * Reference RFC 6020.
-     *
+     * <p>
      * The "max-elements" statement, which is optional, takes as an argument a
      * positive integer or the string "unbounded", which puts a constraint on
      * valid list entries. A valid leaf-list or list always has at most
      * max-elements entries.
-     *
+     * <p>
      * If no "max-elements" statement is present, it defaults to "unbounded".
      */
     private YangMaxElement maxElements;
 
     /**
      * Reference RFC 6020.
-     *
+     * <p>
      * The "min-elements" statement, which is optional, takes as an argument a
      * non-negative integer that puts a constraint on valid list entries. A
      * valid leaf-list or list MUST have at least min-elements entries.
-     *
+     * <p>
      * If no "min-elements" statement is present, it defaults to zero.
-     *
+     * <p>
      * The behavior of the constraint depends on the type of the leaf-list's or
      * list's closest ancestor node in the schema tree that is not a non-
      * presence container:
-     *
+     * <p>
      * o If this ancestor is a case node, the constraint is enforced if any
      * other node from the case exists.
-     *
+     * <p>
      * o Otherwise, it is enforced if the ancestor node exists.
      */
     private YangMinElement minElements;
@@ -215,14 +215,18 @@
      * Creates a YANG list object.
      */
     public YangList() {
-        super(YangNodeType.LIST_NODE, new HashMap<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo>());
+        super(YangNodeType.LIST_NODE, new HashMap<>());
         listOfLeaf = new LinkedList<>();
         listOfLeafList = new LinkedList<>();
+        mustConstraintList = new LinkedList<>();
+        ifFeatureList = new LinkedList<>();
+        uniqueList = new LinkedList<>();
+        keyList = new LinkedList<>();
     }
 
     @Override
     public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
-            YangSchemaNodeContextInfo yangSchemaNodeContextInfo) {
+                                    YangSchemaNodeContextInfo yangSchemaNodeContextInfo) {
         getYsnContextInfoMap().put(schemaNodeIdentifier, yangSchemaNodeContextInfo);
     }
 
@@ -364,7 +368,7 @@
     public void addKey(String key)
             throws DataModelException {
         if (getKeyList() == null) {
-            setKeyList(new LinkedList<String>());
+            setKeyList(new LinkedList<>());
         }
 
         if (getKeyList().contains(key)) {
@@ -565,7 +569,7 @@
         validateConfig(leaves, leafLists);
 
         //A list must have atleast one key leaf if config is true
-        if (isConfig && (keys == null || leaves == null) && !isUsesPresentInList()
+        if (isConfig && (keys.isEmpty() || leaves.isEmpty()) && !isUsesPresentInList()
                 && !isListPresentInGrouping()) {
             throw new DataModelException("A list must have atleast one key leaf if config is true;");
         } else if (keys != null) {
@@ -732,17 +736,17 @@
     }
 
     @Override
-    public void addAugmentation(YangAugmentedInfo augmentInfo) {
+    public void addAugmentation(YangAugment augmentInfo) {
         yangAugmentedInfo.add(augmentInfo);
     }
 
     @Override
-    public void removeAugmentation(YangAugmentedInfo augmentInfo) {
+    public void removeAugmentation(YangAugment augmentInfo) {
         yangAugmentedInfo.remove(augmentInfo);
     }
 
     @Override
-    public List<YangAugmentedInfo> getAugmentedInfoList() {
+    public List<YangAugment> getAugmentedInfoList() {
         return yangAugmentedInfo;
     }
 
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 b6e27b7..78f3710 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
@@ -236,7 +236,7 @@
      */
     public YangModule() {
 
-        super(YangNodeType.MODULE_NODE, new HashMap<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo>());
+        super(YangNodeType.MODULE_NODE, new HashMap<>());
         derivedTypeResolutionList = new LinkedList<>();
         augmentResolutionList = new LinkedList<>();
         usesResolutionList = new LinkedList<>();
@@ -250,11 +250,12 @@
         listOfLeaf = new LinkedList<>();
         listOfLeafList = new LinkedList<>();
         extensionList = new LinkedList<>();
+        listOfFeature = new LinkedList<>();
     }
 
     @Override
     public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
-            YangSchemaNodeContextInfo yangSchemaNodeContextInfo) {
+                                    YangSchemaNodeContextInfo yangSchemaNodeContextInfo) {
         getYsnContextInfoMap().put(schemaNodeIdentifier, yangSchemaNodeContextInfo);
     }
 
@@ -565,11 +566,23 @@
      *
      * @param extensionList the list of extension
      */
-    public void setExtensionList(List<YangExtension> extensionList) {
+    protected void setExtensionList(List<YangExtension> extensionList) {
         this.extensionList = extensionList;
     }
 
     /**
+     * Adds to extension list.
+     *
+     * @param extension YANG extension
+     */
+    public void addToExtensionList(YangExtension extension) {
+        if (getExtensionList() == null) {
+            setExtensionList(new LinkedList<>());
+        }
+        getExtensionList().add(extension);
+    }
+
+    /**
      * Returns the type of the parsed data.
      *
      * @return returns MODULE_DATA
@@ -643,7 +656,7 @@
 
     @Override
     public void addToResolutionList(YangResolutionInfo resolutionInfo,
-            ResolvableType type) {
+                                    ResolvableType type) {
         if (type == ResolvableType.YANG_DERIVED_DATA_TYPE) {
             derivedTypeResolutionList.add(resolutionInfo);
         } else if (type == ResolvableType.YANG_USES) {
@@ -665,7 +678,7 @@
 
     @Override
     public void setResolutionList(List<YangResolutionInfo> resolutionList,
-            ResolvableType type) {
+                                  ResolvableType type) {
         if (type == ResolvableType.YANG_DERIVED_DATA_TYPE) {
             derivedTypeResolutionList = resolutionList;
         } else if (type == ResolvableType.YANG_USES) {
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 81f0a28..92b192a 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
@@ -17,6 +17,7 @@
 
 import java.io.Serializable;
 import java.util.Map;
+
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 
@@ -112,7 +113,6 @@
      */
     @SuppressWarnings("unused")
     private YangNode() {
-
     }
 
     /**
@@ -373,13 +373,13 @@
         if (nextNodeToClone == null) {
             return;
         } else {
-            /**
+            /*
              * Root level cloning is taken care in the caller.
              */
             curTraversal = CHILD;
         }
 
-        /**
+        /*
          * Caller ensures the cloning of the root nodes
          */
         try {
@@ -394,12 +394,12 @@
 
                 if (curTraversal == CHILD) {
 
-                    /**
+                    /*
                      * add the new node to the cloned tree.
                      */
                     clonedTreeCurNode.addChild(newNode);
 
-                    /**
+                    /*
                      * update the cloned tree's traversal current node as the
                      * new node.
                      */
@@ -408,7 +408,7 @@
 
                     clonedTreeCurNode.addNextSibling(newNode);
                     clonedTreeCurNode = newNode;
-                } else if (curTraversal == PARENT) {
+                } else {
                     if (clonedTreeCurNode instanceof YangLeavesHolder) {
                         updateClonedLeavesUnionEnumRef((YangLeavesHolder) clonedTreeCurNode);
                     }
@@ -418,7 +418,7 @@
                 if (curTraversal != PARENT && nextNodeToClone.getChild() != null) {
                     curTraversal = CHILD;
 
-                    /**
+                    /*
                      * update the traversal's current node.
                      */
                     nextNodeToClone = nextNodeToClone.getChild();
@@ -627,6 +627,26 @@
         }
     }
 
+    /**
+     * Sets YSN context info map.
+     *
+     * @param ysnContextInfoMap YSN context info map
+     */
+    public void setYsnContextInfoMap(Map<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo> ysnContextInfoMap) {
+        this.ysnContextInfoMap = ysnContextInfoMap;
+    }
+
+    /**
+     * Adds to YSN context info map.
+     *
+     * @param yangSchemaNodeIdentifier  YANG schema node identifier
+     * @param yangSchemaNodeContextInfo YANG schema node context info
+     */
+    public void addToYsnContextInfoMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier, YangSchemaNodeContextInfo
+            yangSchemaNodeContextInfo) {
+        getYsnContextInfoMap().put(yangSchemaNodeIdentifier, yangSchemaNodeContextInfo);
+    }
+
     @Override
     public void isValueValid(String value)
             throws DataModelException {
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 f0f6f5c..4cd8b42 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java
@@ -20,6 +20,7 @@
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
+
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
@@ -112,7 +113,7 @@
      */
     private List<YangIfFeature> ifFeatureList;
 
-    private List<YangAugmentedInfo> yangAugmentedInfo = new ArrayList<>();
+    private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
     private boolean isAugmented;
 
@@ -120,9 +121,10 @@
      * Create a notification node.
      */
     public YangNotification() {
-        super(YangNodeType.NOTIFICATION_NODE, new HashMap<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo>());
+        super(YangNodeType.NOTIFICATION_NODE, new HashMap<>());
         listOfLeaf = new LinkedList<>();
         listOfLeafList = new LinkedList<>();
+        ifFeatureList = new LinkedList<>();
     }
 
     @Override
@@ -259,17 +261,17 @@
     }
 
     @Override
-    public void addAugmentation(YangAugmentedInfo augmentInfo) {
+    public void addAugmentation(YangAugment augmentInfo) {
         yangAugmentedInfo.add(augmentInfo);
     }
 
     @Override
-    public void removeAugmentation(YangAugmentedInfo augmentInfo) {
+    public void removeAugmentation(YangAugment augmentInfo) {
         yangAugmentedInfo.remove(augmentInfo);
     }
 
     @Override
-    public List<YangAugmentedInfo> getAugmentedInfoList() {
+    public List<YangAugment> getAugmentedInfoList() {
         return yangAugmentedInfo;
     }
 
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 327146e..7f429f6 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
@@ -20,6 +20,7 @@
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
+
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
@@ -84,7 +85,7 @@
      */
     private List<YangLeafList> listOfLeafList;
 
-    private List<YangAugmentedInfo> yangAugmentedInfo = new ArrayList<>();
+    private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
     private boolean isAugmented;
 
@@ -92,7 +93,7 @@
      * Create a rpc output node.
      */
     public YangOutput() {
-        super(YangNodeType.OUTPUT_NODE, new HashMap<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo>());
+        super(YangNodeType.OUTPUT_NODE, new HashMap<>());
         listOfLeaf = new LinkedList<>();
         listOfLeafList = new LinkedList<>();
     }
@@ -202,17 +203,17 @@
     }
 
     @Override
-    public void addAugmentation(YangAugmentedInfo augmentInfo) {
+    public void addAugmentation(YangAugment augmentInfo) {
         yangAugmentedInfo.add(augmentInfo);
     }
 
     @Override
-    public void removeAugmentation(YangAugmentedInfo augmentInfo) {
+    public void removeAugmentation(YangAugment augmentInfo) {
         yangAugmentedInfo.remove(augmentInfo);
     }
 
     @Override
-    public List<YangAugmentedInfo> getAugmentedInfoList() {
+    public List<YangAugment> getAugmentedInfoList() {
         return yangAugmentedInfo;
     }
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRpc.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRpc.java
index b904da6..3216b30 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRpc.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRpc.java
@@ -88,10 +88,11 @@
     private List<YangIfFeature> ifFeatureList;
 
     /**
-     * Create a rpc node.
+     * Creates a rpc node.
      */
     public YangRpc() {
-        super(YangNodeType.RPC_NODE, new HashMap<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo>());
+        super(YangNodeType.RPC_NODE, new HashMap<>());
+        ifFeatureList = new LinkedList<>();
     }
 
     @Override
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeContextInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeContextInfo.java
index bbec4b7..9f851f0 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeContextInfo.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeContextInfo.java
@@ -27,17 +27,17 @@
     private static final long serialVersionUID = 806201613L;
 
     // Current schema node
-    YangSchemaNode schemaNode;
+    private YangSchemaNode schemaNode;
 
     /*
      * Context switched schema node, it will be non null only for the scenarios
      * in which context switch is there like augment, choice etc, in this case
      * this node will point to context switched node like YangAugmentInfo.
      */
-    YangSchemaNode contextSwitchedNode;
+    private YangSchemaNode contextSwitchedNode;
 
     // Default instance of YangSchemaNodeContextInfo.
-    YangSchemaNodeContextInfo() {
+    public YangSchemaNodeContextInfo() {
     }
 
     /**
@@ -54,7 +54,7 @@
      *
      * @param schemaNode YANG schema node
      */
-    public void setSchemaNode(YangSchemaNode schemaNode) {
+    void setSchemaNode(YangSchemaNode schemaNode) {
         this.schemaNode = schemaNode;
     }
 
@@ -72,7 +72,7 @@
      *
      * @param contextSwitchedNode context switched node
      */
-    public void setContextSwitchedNode(YangSchemaNode contextSwitchedNode) {
+    void setContextSwitchedNode(YangSchemaNode contextSwitchedNode) {
         this.contextSwitchedNode = contextSwitchedNode;
     }
 }
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 8c96630..68e9f52 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeIdentifier.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeIdentifier.java
@@ -28,10 +28,10 @@
     private static final long serialVersionUID = 806201648L;
 
     // Name of YANG data node.
-    String name;
+    private String name;
 
     // Namespace of YANG data node.
-    String namespace;
+    private String namespace;
 
     /**
      * Creates an instance of YANG data node identifier.
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 115aaa7..b5e1d42 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java
@@ -238,7 +238,7 @@
      * Creates a sub module node.
      */
     public YangSubModule() {
-        super(YangNodeType.SUB_MODULE_NODE, new HashMap<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo>());
+        super(YangNodeType.SUB_MODULE_NODE, new HashMap<>());
         derivedTypeResolutionList = new LinkedList<>();
         augmentResolutionList = new LinkedList<>();
         usesResolutionList = new LinkedList<>();
@@ -253,11 +253,12 @@
         listOfLeafList = new LinkedList<>();
         extensionList = new LinkedList<>();
         compilerAnnotationList = new LinkedList<>();
+        listOfFeature = new LinkedList<>();
     }
 
     @Override
     public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
-            YangSchemaNodeContextInfo yangSchemaNodeContextInfo) {
+                                    YangSchemaNodeContextInfo yangSchemaNodeContextInfo) {
         getYsnContextInfoMap().put(schemaNodeIdentifier, yangSchemaNodeContextInfo);
     }
 
@@ -602,7 +603,7 @@
 
     @Override
     public void addToResolutionList(YangResolutionInfo resolutionInfo,
-            ResolvableType type) {
+                                    ResolvableType type) {
         if (type == ResolvableType.YANG_DERIVED_DATA_TYPE) {
             derivedTypeResolutionList.add(resolutionInfo);
         } else if (type == ResolvableType.YANG_USES) {
@@ -624,7 +625,7 @@
 
     @Override
     public void setResolutionList(List<YangResolutionInfo> resolutionList,
-            ResolvableType type) {
+                                  ResolvableType type) {
         if (type == ResolvableType.YANG_DERIVED_DATA_TYPE) {
             derivedTypeResolutionList = resolutionList;
         } else if (type == ResolvableType.YANG_USES) {
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java
index fccf76f..71be734 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java
@@ -148,9 +148,11 @@
         super(YangNodeType.USES_NODE, null);
         nodeIdentifier = new YangNodeIdentifier();
         resolvableStatus = ResolvableStatus.UNRESOLVED;
-        resolvedGroupingNodes = new LinkedList<YangNode>();
-        resolvedGroupingLeaves = new LinkedList<List<YangLeaf>>();
-        resolvedGroupingLeafLists = new LinkedList<List<YangLeafList>>();
+        resolvedGroupingNodes = new LinkedList<>();
+        resolvedGroupingLeaves = new LinkedList<>();
+        resolvedGroupingLeafLists = new LinkedList<>();
+        ifFeatureList = new LinkedList<>();
+        entityToResolveInfoList = new LinkedList<>();
     }
 
     @Override
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/exceptions/DataModelException.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/exceptions/DataModelException.java
index b1375a7..ca2dd6b 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/exceptions/DataModelException.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/exceptions/DataModelException.java
@@ -21,8 +21,8 @@
 public class DataModelException extends Exception {
 
     private static final long serialVersionUID = 201601270658L;
-    private int lineNumber;
-    private int charPositionInLine;
+    private transient int lineNumber;
+    private transient int charPositionInLine;
 
     /**
      * Creates a data model exception with message.
@@ -37,7 +37,7 @@
      * Creates exception from message and cause.
      *
      * @param message the detail of exception in string
-     * @param cause underlying cause of the error
+     * @param cause   underlying cause of the error
      */
     public DataModelException(final String message, final Throwable cause) {
         super(message, cause);
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/HasJavaQualifiedTypeInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/HasJavaQualifiedTypeInfo.java
deleted file mode 100644
index 1eec1e2..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/HasJavaQualifiedTypeInfo.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.javadatamodel;
-
-/**
- * Represents the entity which contains the qualified type info of leaf / leaf-list.
- */
-public interface HasJavaQualifiedTypeInfo {
-    /**
-     * Returns java qualified type info.
-     *
-     * @return java qualified type info
-     */
-    JavaQualifiedTypeInfo getJavaQualifiedTypeInfo();
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaQualifiedTypeInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaQualifiedTypeInfo.java
index 49208bc..e3d7952 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaQualifiedTypeInfo.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaQualifiedTypeInfo.java
@@ -37,21 +37,39 @@
     protected String classInfo;
 
     /**
-     * Returns class info.
+     * Returns the imported package info.
      *
-     * @return class info
+     * @return the imported package info
+     */
+    public String getPkgInfo() {
+        return pkgInfo;
+    }
+
+    /**
+     * Sets the imported package info.
+     *
+     * @param pkgInfo the imported package info
+     */
+    public void setPkgInfo(String pkgInfo) {
+        this.pkgInfo = pkgInfo;
+    }
+
+    /**
+     * Returns the imported class/interface info.
+     *
+     * @return the imported class/interface info
      */
     public String getClassInfo() {
         return classInfo;
     }
 
     /**
-     * Returns package info.
+     * Sets the imported class/interface info.
      *
-     * @return package info
+     * @param classInfo the imported class/interface info
      */
-    public String getPkgInfo() {
-        return pkgInfo;
+    public void setClassInfo(String classInfo) {
+        this.classInfo = classInfo;
     }
 
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoContainer.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaQualifiedTypeInfoContainer.java
similarity index 83%
rename from plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoContainer.java
rename to datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaQualifiedTypeInfoContainer.java
index 7791773..db85d1a 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoContainer.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaQualifiedTypeInfoContainer.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.yangutils.translator.tojava;
+package org.onosproject.yangutils.datamodel.javadatamodel;
 
 /**
  * Maintain the java qualified access details for an attribute or a class.
@@ -25,12 +25,12 @@
      *
      * @return java qualified type details
      */
-    JavaQualifiedTypeInfoTranslator getJavaQualifiedInfo();
+    JavaQualifiedTypeInfo getJavaQualifiedInfo();
 
     /**
      * Assign the qualified type info.
      *
      * @param typeInfo qualified type information
      */
-    void setJavaQualifiedInfo(JavaQualifiedTypeInfoTranslator typeInfo);
+    void setJavaQualifiedInfo(JavaQualifiedTypeInfo typeInfo);
 }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaAugment.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaAugment.java
index 75274ae..fa11c6e 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaAugment.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaAugment.java
@@ -37,7 +37,6 @@
         return javaFileInfo;
     }
 
-
     @Override
     public String getJavaPackage() {
         return getJavaFileInfo().getPackage();
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeaf.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeaf.java
index 689358e..20a9517 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeaf.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeaf.java
@@ -21,32 +21,37 @@
 /**
  * Represent YANG java leaf.
  */
-public class YangJavaLeaf
-        extends YangLeaf
-        implements HasJavaQualifiedTypeInfo {
+public class YangJavaLeaf extends YangLeaf implements JavaQualifiedTypeInfoContainer {
 
     private static final long serialVersionUID = 208201617L;
 
     protected JavaQualifiedTypeInfo javaQualifiedTypeInfo;
 
     /**
+     * Sets java qualified type info.
+     *
+     * @param javaQualifiedTypeInfo java qualified type info
+     */
+    public void setJavaQualifiedInfo(JavaQualifiedTypeInfo javaQualifiedTypeInfo) {
+        this.javaQualifiedTypeInfo = javaQualifiedTypeInfo;
+    }
+
+    /**
      * Returns java qualified type info.
      *
      * @return java qualified type info
      */
-    @Override
-    public JavaQualifiedTypeInfo getJavaQualifiedTypeInfo() {
+    public JavaQualifiedTypeInfo getJavaQualifiedInfo() {
         return javaQualifiedTypeInfo;
     }
 
-
     @Override
     public String getJavaPackage() {
-        return getJavaQualifiedTypeInfo().getPkgInfo();
+        return getJavaQualifiedInfo().getPkgInfo();
     }
 
     @Override
     public String getJavaClassNameOrBuiltInType() {
-        return getJavaQualifiedTypeInfo().getClassInfo();
+        return getJavaQualifiedInfo().getClassInfo();
     }
 }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeafList.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeafList.java
index c229b1f..1389f8a 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeafList.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeafList.java
@@ -21,9 +21,7 @@
 /**
  * Represents YANG java leaf list.
  */
-public class YangJavaLeafList
-        extends YangLeafList
-        implements HasJavaQualifiedTypeInfo {
+public class YangJavaLeafList extends YangLeafList implements JavaQualifiedTypeInfoContainer {
 
     private static final long serialVersionUID = 208201618L;
 
@@ -34,18 +32,26 @@
      *
      * @return java qualified type info
      */
-    @Override
-    public JavaQualifiedTypeInfo getJavaQualifiedTypeInfo() {
+    public JavaQualifiedTypeInfo getJavaQualifiedInfo() {
         return javaQualifiedTypeInfo;
     }
 
+    /**
+     * Sets java qualified type info.
+     *
+     * @param javaQualifiedTypeInfo java qualified type info
+     */
+    public void setJavaQualifiedInfo(JavaQualifiedTypeInfo javaQualifiedTypeInfo) {
+        this.javaQualifiedTypeInfo = javaQualifiedTypeInfo;
+    }
+
     @Override
     public String getJavaPackage() {
-        return getJavaQualifiedTypeInfo().getPkgInfo();
+        return getJavaQualifiedInfo().getPkgInfo();
     }
 
     @Override
     public String getJavaClassNameOrBuiltInType() {
-        return getJavaQualifiedTypeInfo().getClassInfo();
+        return getJavaQualifiedInfo().getClassInfo();
     }
 }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaType.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaType.java
index 3fd2fb6..bbd2933 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaType.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaType.java
@@ -21,8 +21,9 @@
 /**
  * Represents YANG java type.
  */
-public class YangJavaType extends YangType {
+public class YangJavaType extends YangType implements JavaQualifiedTypeInfoContainer {
 
+    private static final long serialVersionUID = 19082016001L;
     protected JavaQualifiedTypeInfo javaQualifiedTypeInfo;
 
     /**
@@ -30,7 +31,14 @@
      *
      * @return java qualified type info
      */
-    public JavaQualifiedTypeInfo getJavaQualifiedTypeInfo() {
+
+    @Override
+    public JavaQualifiedTypeInfo getJavaQualifiedInfo() {
         return javaQualifiedTypeInfo;
     }
+
+    @Override
+    public void setJavaQualifiedInfo(JavaQualifiedTypeInfo typeInfo) {
+        this.javaQualifiedTypeInfo = typeInfo;
+    }
 }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/DataModelUtils.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/DataModelUtils.java
index fd38fa5..9480198 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/DataModelUtils.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/DataModelUtils.java
@@ -226,7 +226,7 @@
      * @throws DataModelException a violation of data model rules
      */
     public static void resolveLinkingForResolutionList(List<YangResolutionInfo> resolutionList,
-            YangReferenceResolver dataModelRootNode)
+                                                       YangReferenceResolver dataModelRootNode)
             throws DataModelException {
 
         for (YangResolutionInfo resolutionInfo : resolutionList) {
@@ -242,14 +242,16 @@
      * @throws DataModelException a violation of data model rules
      */
     public static void linkInterFileReferences(List<YangResolutionInfo> resolutionList,
-            YangReferenceResolver dataModelRootNode)
+                                               YangReferenceResolver dataModelRootNode)
             throws DataModelException {
         /*
          * Run through the resolution list, find type/uses referring to inter
          * file typedef/grouping, ask for linking.
          */
-        for (YangResolutionInfo resolutionInfo : resolutionList) {
-            resolutionInfo.linkInterFile(dataModelRootNode);
+        if (resolutionList != null) {
+            for (YangResolutionInfo resolutionInfo : resolutionList) {
+                resolutionInfo.linkInterFile(dataModelRootNode);
+            }
         }
     }
 
@@ -313,21 +315,19 @@
      * @return de-serializes YANG data-model nodes
      * @throws IOException when fails do IO operations
      */
-    public static YangNode deSerializeDataModel(String serializedFileInfo)
-            throws IOException {
+    private static Set<YangNode> deSerializeDataModel(String serializedFileInfo) throws IOException {
 
-        YangNode node;
+        Set<YangNode> nodes;
         try {
             FileInputStream fileInputStream = new FileInputStream(serializedFileInfo);
             ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
-            node = (YangNode) objectInputStream.readObject();
+            nodes = (Set<YangNode>) objectInputStream.readObject();
             objectInputStream.close();
             fileInputStream.close();
         } catch (IOException | ClassNotFoundException e) {
             throw new IOException(serializedFileInfo + " not found.");
         }
-
-        return node;
+        return nodes;
     }
 
     /**
@@ -345,7 +345,7 @@
             List<YangLeaf> clonedLeavesList = new LinkedList<>();
             for (YangLeaf leaf : currentListOfLeaves) {
                 YangLeaf clonedLeaf = leaf.clone();
-                if (yangUses.getCurrentGroupingDepth() == 0) {
+                if (yangUses != null && yangUses.getCurrentGroupingDepth() == 0) {
                     YangEntityToResolveInfoImpl resolveInfo =
                             resolveYangConstructsUnderGroupingForLeaf(clonedLeaf, leavesHolder, yangUses);
                     if (resolveInfo != null) {
@@ -363,7 +363,7 @@
             List<YangLeafList> clonedListOfLeafList = new LinkedList<>();
             for (YangLeafList leafList : currentListOfLeafList) {
                 YangLeafList clonedLeafList = leafList.clone();
-                if (yangUses.getCurrentGroupingDepth() == 0) {
+                if (yangUses != null && yangUses.getCurrentGroupingDepth() == 0) {
                     YangEntityToResolveInfoImpl resolveInfo =
                             resolveYangConstructsUnderGroupingForLeafList(clonedLeafList, leavesHolder,
                                     yangUses);
@@ -388,7 +388,7 @@
      * @throws DataModelException data model error
      */
     public static YangEntityToResolveInfoImpl resolveLeafrefUnderGroupingForLeaf(YangLeaf clonedLeaf,
-            YangLeavesHolder leafParentHolder, YangUses yangUses)
+                                                                                 YangLeavesHolder leafParentHolder, YangUses yangUses)
             throws
             DataModelException {
         if (clonedLeaf.getDataType().getDataTypeExtendedInfo() instanceof YangLeafRef) {
@@ -417,7 +417,7 @@
      * @throws DataModelException data model error
      */
     public static YangEntityToResolveInfoImpl resolveYangConstructsUnderGroupingForLeaf(YangLeaf clonedLeaf,
-            YangLeavesHolder leafParentHolder, YangUses yangUses)
+                                                                                        YangLeavesHolder leafParentHolder, YangUses yangUses)
             throws DataModelException {
         int lineNumber;
         int charPosition;
@@ -551,7 +551,7 @@
      * @throws DataModelException data model error
      */
     private static void assignCurrentLeafedWithNewPrefixes(String importedNodeName, YangAtomicPath atomicPath,
-            YangNode node)
+                                                           YangNode node)
             throws DataModelException {
         while (!(node instanceof YangReferenceResolver)) {
             node = node.getParent();
@@ -694,7 +694,7 @@
                 }
                 fileOutputStream.close();
                 inputStream.close();
-                nodes.add(deSerializeDataModel(serializedFile.toString()));
+                nodes.addAll(deSerializeDataModel(serializedFile.toString()));
             }
         }
         jar.close();
diff --git a/plugin/src/main/java/org/onosproject/yangutils/linker/exceptions/LinkerException.java b/plugin/src/main/java/org/onosproject/yangutils/linker/exceptions/LinkerException.java
index 755b5b4..1a36c74 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/linker/exceptions/LinkerException.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/linker/exceptions/LinkerException.java
@@ -22,9 +22,9 @@
 public class LinkerException extends RuntimeException {
 
     private static final long serialVersionUID = 20160211L;
-    private int lineNumber;
-    private int charPositionInLine;
-    private String fileName;
+    private transient int lineNumber;
+    private transient int charPositionInLine;
+    private transient String fileName;
 
     /**
      * Creates a new linker exception.
diff --git a/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerManager.java b/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerManager.java
index 334a92d..c1b6726 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerManager.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerManager.java
@@ -43,7 +43,7 @@
      * Set of all the YANG nodes, corresponding to the YANG files parsed by
      * parser.
      */
-    Set<YangNode> yangNodeSet = new HashSet<>();
+    private Set<YangNode> yangNodeSet = new HashSet<>();
 
     /**
      * Returns set of YANG node.
diff --git a/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerUtils.java b/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerUtils.java
index fb80076..37a04df 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerUtils.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerUtils.java
@@ -26,7 +26,6 @@
 import org.onosproject.yangutils.datamodel.YangAtomicPath;
 import org.onosproject.yangutils.datamodel.YangAugment;
 import org.onosproject.yangutils.datamodel.YangAugmentableNode;
-import org.onosproject.yangutils.datamodel.YangAugmentedInfo;
 import org.onosproject.yangutils.datamodel.YangCase;
 import org.onosproject.yangutils.datamodel.YangChoice;
 import org.onosproject.yangutils.datamodel.YangGrouping;
@@ -47,14 +46,17 @@
 import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
 import org.onosproject.yangutils.linker.exceptions.LinkerException;
+import org.onosproject.yangutils.translator.exception.TranslatorException;
 
 import static org.onosproject.yangutils.datamodel.TraversalType.CHILD;
 import static org.onosproject.yangutils.datamodel.TraversalType.PARENT;
 import static org.onosproject.yangutils.datamodel.TraversalType.ROOT;
 import static org.onosproject.yangutils.datamodel.TraversalType.SIBILING;
 import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo;
+import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
+import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangCaseNode;
 import static org.onosproject.yangutils.utils.UtilConstants.COLON;
 import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
 
@@ -88,7 +90,7 @@
             }
         }
         if (targetNode instanceof YangChoice) {
-            //Do nothing
+            addCaseNodeToChoiceTarget(augment);
         } else {
             detectCollisionInLeaveHolders(targetNode, augment);
             while (augmentsChild != null) {
@@ -152,6 +154,79 @@
     }
 
     /**
+     * Adds a case node in augment when augmenting a choice node.
+     *
+     * @param augment augment node
+     */
+    private static void addCaseNodeToChoiceTarget(YangAugment augment) {
+        try {
+            YangNode child = augment.getChild();
+            List<YangNode> childNodes = new ArrayList<>();
+            while (child != null) {
+                childNodes.add(child);
+                child = child.getNextSibling();
+            }
+            augment.setChild(null);
+
+            for (YangNode node : childNodes) {
+                YangCase javaCase = getYangCaseNode(JAVA_GENERATION);
+                javaCase.setName(node.getName());
+                augment.addChild(javaCase);
+                node.setParent(javaCase);
+                node.setNextSibling(null);
+                node.setPreviousSibling(null);
+                javaCase.addChild(node);
+            }
+            if (augment.getListOfLeaf() != null) {
+                for (YangLeaf leaf : augment.getListOfLeaf()) {
+                    YangCase javaCase = getYangCaseNode(JAVA_GENERATION);
+                    javaCase.setName(leaf.getName());
+                    javaCase.addLeaf(leaf);
+                    augment.addChild(javaCase);
+
+                }
+                augment.getListOfLeaf().clear();
+            }
+            if (augment.getListOfLeafList() != null) {
+                for (YangLeafList leafList : augment.getListOfLeafList()) {
+                    YangCase javaCase = getYangCaseNode(JAVA_GENERATION);
+                    javaCase.setName(leafList.getName());
+                    javaCase.addLeafList(leafList);
+                    augment.addChild(javaCase);
+                }
+                augment.getListOfLeafList().clear();
+            }
+
+        } catch (DataModelException e) {
+            throw new TranslatorException("Failed to add child nodes to case node of augment " + augment.getName());
+        }
+    }
+
+    //Detect collision between augment and choice children.
+    private void detectCollisionForChoiceNode(YangNode choice, YangNode augment) {
+        YangNode choiceChild = choice.getChild();
+        YangNode augmentChild = augment.getChild();
+
+        List<YangNode> choiceChildren = new ArrayList<>();
+        List<YangNode> augmentChildren = new ArrayList<>();
+        while (choiceChild != null) {
+            choiceChildren.add(choiceChild);
+        }
+        while (augmentChild != null) {
+            augmentChildren.add(augmentChild);
+        }
+
+        for (YangNode cChild : choiceChildren) {
+            for (YangNode aChild : augmentChildren) {
+                if (cChild.getName().equals(aChild.getName())) {
+                    throw new LinkerException("case node " + aChild.getName() + "already present in choice " +
+                            choice.getName());
+                }
+            }
+        }
+    }
+
+    /**
      * Detects collision between target nodes and its all leaf/leaf-list or child node with augmented leaf/leaf-list or
      * child node.
      *
@@ -161,10 +236,10 @@
     static void detectCollisionForAugmentedNode(YangNode targetNode, YangAugment augment) {
         // Detect collision for target node and augment node.
         detectCollision(targetNode, augment);
-        List<YangAugmentedInfo> yangAugmentedInfo = ((YangAugmentableNode) targetNode).getAugmentedInfoList();
+        List<YangAugment> yangAugmentedInfo = ((YangAugmentableNode) targetNode).getAugmentedInfoList();
         // Detect collision for target augment node and current augment node.
-        for (YangAugmentedInfo info : yangAugmentedInfo) {
-            detectCollision((YangAugment) info, augment);
+        for (YangAugment info : yangAugmentedInfo) {
+            detectCollision(info, augment);
         }
     }
 
@@ -222,7 +297,7 @@
      * @return valid node identifier
      */
     static YangNodeIdentifier getValidNodeIdentifier(String nodeIdentifierString,
-            YangConstructType yangConstruct) {
+                                                     YangConstructType yangConstruct) {
         String[] tmpData = nodeIdentifierString.split(Pattern.quote(COLON));
         if (tmpData.length == 1) {
             YangNodeIdentifier nodeIdentifier = new YangNodeIdentifier();
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 31e4c3e..0c21bc9 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
@@ -127,7 +127,7 @@
      * Current module/sub-module reference, will be used in inter-file/
      * inter-jar scenario to get the import/include list.
      */
-    private transient YangReferenceResolver curReferenceResolver;
+    private YangReferenceResolver curReferenceResolver;
 
     /**
      * Stack for type/uses is maintained for hierarchical references, this is
@@ -165,7 +165,7 @@
             throws DataModelException {
 
         setCurReferenceResolver(dataModelRootNode);
-        /**
+        /*
          * Current node to resolve, it can be a YANG type, YANG uses or YANG if-feature or
          * YANG leafref or YANG base or YANG identityref.
          */
@@ -175,7 +175,7 @@
         if (entityToResolve instanceof Resolvable) {
             Resolvable resolvable = (Resolvable) entityToResolve;
             if (resolvable.getResolvableStatus() == RESOLVED) {
-                /**
+                /*
                  * entity is already resolved, so nothing to do
                  */
                 return;
@@ -201,7 +201,7 @@
             throws DataModelException {
 
         while (getPartialResolvedStack().size() != 0) {
-            /**
+            /*
              * Current node to resolve, it can be a YANG type or YANG uses or
              * YANG if-feature or YANG leafref or YANG base or YANG identityref.
              */
@@ -737,7 +737,7 @@
      * @throws DataModelException data model errors
      */
     private YangNode isReferredNodeInSiblingProcessedForIdentity(YangNode potentialReferredNode,
-            String referredNodeName)
+                                                                 String referredNodeName)
             throws DataModelException {
 
         while (potentialReferredNode != null) {
@@ -1229,7 +1229,7 @@
      * @param root            root node
      */
     private void processXPathLinking(T entityToResolve,
-            YangReferenceResolver root) {
+                                     YangReferenceResolver root) {
 
         YangXpathLinker<T> xPathLinker = new YangXpathLinker<T>();
 
@@ -1525,7 +1525,7 @@
      * @throws DataModelException a violation of data model rules
      */
     private void fillAbsolutePathValuesInLeafref(YangLeafRef leafref, String pathNameToBePrefixed,
-            List<YangAtomicPath> atomicPathsInRelative)
+                                                 List<YangAtomicPath> atomicPathsInRelative)
             throws DataModelException {
 
         leafref.setPathType(YangPathArgType.ABSOLUTE_PATH);
@@ -1819,4 +1819,5 @@
         }
         return null;
     }
+
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangXpathLinker.java b/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangXpathLinker.java
index 89d2dbe..d77fe7d 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangXpathLinker.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangXpathLinker.java
@@ -313,7 +313,7 @@
      */
     private YangLeaf searchReferredLeaf(YangNode targetNode, String leafName) {
         if (!(targetNode instanceof YangLeavesHolder)) {
-            throw new LinkerException("Refered node " + targetNode.getName() +
+            throw new LinkerException("Referred node " + targetNode.getName() +
                     "should be of type leaves holder ");
         }
         YangLeavesHolder holder = (YangLeavesHolder) targetNode;
@@ -337,7 +337,7 @@
      */
     private YangLeafList searchReferredLeafList(YangNode targetNode, String leafListName) {
         if (!(targetNode instanceof YangLeavesHolder)) {
-            throw new LinkerException("Refered node " + targetNode.getName() +
+            throw new LinkerException("Referred node " + targetNode.getName() +
                     "should be of type leaves holder ");
         }
         YangLeavesHolder holder = (YangLeavesHolder) targetNode;
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/exceptions/ParserException.java b/plugin/src/main/java/org/onosproject/yangutils/parser/exceptions/ParserException.java
index a11bcb8..8edff52 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/exceptions/ParserException.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/exceptions/ParserException.java
@@ -22,9 +22,9 @@
 public class ParserException extends RuntimeException {
 
     private static final long serialVersionUID = 20160211L;
-    private int lineNumber;
-    private int charPositionInLine;
-    private String fileName;
+    private transient int lineNumber;
+    private transient int charPositionInLine;
+    private transient String fileName;
 
     /**
      * Creates a new parser exception.
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/GroupingListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/GroupingListener.java
index fd2ac3d..d644345 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/GroupingListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/GroupingListener.java
@@ -121,7 +121,7 @@
 
             YangGrouping groupingNode = getYangGroupingNode(JAVA_GENERATION);
             groupingNode.setName(identifier);
-
+            groupingNode.setGroupingDepth(listener.getGroupingDepth());
             YangNode curNode = (YangNode) curData;
             try {
                 curNode.addChild(groupingNode);
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/AugmentListenerUtil.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/AugmentListenerUtil.java
deleted file mode 100644
index 341cbf9..0000000
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/AugmentListenerUtil.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * 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.parser.impl.parserutils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.onosproject.yangutils.datamodel.CollisionDetector;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.AUGMENT_DATA;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-
-/**
- * Represents a utility which provides listener utilities augment node.
- */
-public final class AugmentListenerUtil {
-
-    /**
-     * Prefix to be added to generated java file for augment node.
-     */
-    private static final String AUGMENTED = "Augmented";
-
-    /**
-     * The number of time augment has updated the same target node in same module/submodule.
-     */
-    private static int occurrenceCount = 1;
-
-    /**
-     * List of names for augment's generated java file.
-     */
-    private static List<String> augmentJavaFileNameList = new ArrayList<>();
-
-    private static final int ONE = 1;
-    private static final int TWO = 2;
-    private static final int ZERO = 0;
-
-    /**
-     * Creates an instance of augment java file name generator utility.
-     */
-    private AugmentListenerUtil() {
-    }
-
-    /**
-     * Sets the augment java file name list.
-     *
-     * @param nameList name list
-     */
-    private static void setAugmentJavaFileNameList(List<String> nameList) {
-        augmentJavaFileNameList = nameList;
-    }
-
-    /**
-     * Returns augment java file name list.
-     *
-     * @return augment java file name list
-     */
-    public static List<String> getAugmentJavaFileNameList() {
-        return augmentJavaFileNameList;
-    }
-
-    /**
-     * Sets occurrence count.
-     *
-     * @param occurrence occurrence count
-     */
-    private static void setOccurrenceCount(int occurrence) {
-        occurrenceCount = occurrence;
-    }
-
-    /**
-     * Returns occurrence count.
-     *
-     * @return occurrence count
-     */
-    private static int getOccurrenceCount() {
-        return occurrenceCount;
-    }
-
-    /**
-     * Generates name for augment node also detects collision for java file generation of augment node when
-     * augment is updating the same target node in same parent multiple times.
-     *
-     * @param curData parsable data
-     * @param targetNodes list of target nodes
-     * @param listener tree walk listener
-     * @return name for augment node
-     */
-    public static String generateNameForAugmentNode(Parsable curData, List<YangNodeIdentifier> targetNodes,
-            TreeWalkListener listener) {
-
-        String curPrefix = getParentsPrefix((YangNode) curData);
-        YangNodeIdentifier nodeId = targetNodes.get(targetNodes.size() - 1);
-        boolean isPrefix = isPrefixPresent(nodeId, curPrefix);
-        String generateName = createValidNameForAugment(nodeId, isPrefix);
-
-        if (listener.getParsedDataStack().peek() instanceof CollisionDetector) {
-            try {
-                ((CollisionDetector) listener.getParsedDataStack().peek()).detectCollidingChild(generateName,
-                        AUGMENT_DATA);
-            } catch (DataModelException e) {
-                return updateNameWhenHasMultipleOuccrrence(nodeId, isPrefix);
-            }
-        }
-
-        clearOccurrenceCount();
-        return generateName;
-    }
-
-    /**
-     * Creates a name identifier for augment.
-     *
-     * @param nodeId node identifier
-     * @param isPrefix if prefix is present or it is not equals to parent's prefix
-     * @return valid name for augment
-     */
-    public static String createValidNameForAugment(YangNodeIdentifier nodeId, boolean isPrefix) {
-        getAugmentJavaFileNameList().add(createName(nodeId, isPrefix));
-        setAugmentJavaFileNameList(getAugmentJavaFileNameList());
-        return getAugmentJavaFileNameList().get(getAugmentJavaFileNameList().size() - 1);
-    }
-
-    /**
-     * Creates name for the current augment file.
-     *
-     * @param nodeId node identifier
-     * @param isPrefix if prefix is present or it is not equals to parent's prefix
-     */
-    private static String createName(YangNodeIdentifier nodeId, boolean isPrefix) {
-        if (isPrefix) {
-            return AUGMENTED + getCapitalCase(nodeId.getPrefix()) + getCapitalCase(nodeId.getName());
-        } else {
-            return AUGMENTED + getCapitalCase(nodeId.getName());
-        }
-    }
-
-    /**
-     * Updates occurrence count of augment.
-     */
-    private static void updateOccurenceCount() {
-        int count = getOccurrenceCount();
-        count++;
-        setOccurrenceCount(count);
-    }
-
-    /**
-     * Updates the list of name when augment has occurred multiple times to update the same target node
-     * and returns a valid name for augment node's generated java file.
-     *
-     * @param nodeId YANG node identifier
-     * @param isPrefix true if a prefix is present and it is not equals to parents prefix
-     * @return valid name for augment node
-     */
-    public static String updateNameWhenHasMultipleOuccrrence(YangNodeIdentifier nodeId, boolean isPrefix) {
-        String name = "";
-        updateOccurenceCount();
-
-        if (getOccurrenceCount() == TWO) {
-            String previousAugmentsName = getAugmentJavaFileNameList().get(getAugmentJavaFileNameList().size() - ONE);
-            getAugmentJavaFileNameList().remove(ZERO);
-            getAugmentJavaFileNameList().add(previousAugmentsName + ONE);
-            //TODO: update when already contains the name.
-            name = createName(nodeId, isPrefix) + TWO;
-        } else {
-            name = createName(nodeId, isPrefix) + getOccurrenceCount();
-        }
-        getAugmentJavaFileNameList().add(name);
-        return name;
-    }
-
-    /**
-     * Resets occurrence count to one.
-     */
-    public static void clearOccurrenceCount() {
-        setOccurrenceCount(ONE);
-    }
-
-    /**
-     * Returns true if a prefix is present and it is not equals to parents prefix.
-     *
-     * @param nodeId YANG node identifier
-     * @param parentsPrefix parent's prefix
-     * @return true if a prefix is present and it is not equals to parents prefix
-     */
-    private static boolean isPrefixPresent(YangNodeIdentifier nodeId, String parentsPrefix) {
-        return nodeId.getPrefix() != null && nodeId.getPrefix() != parentsPrefix;
-    }
-
-    /**
-     * Validates whether current node in target path is valid or not.
-     *
-     * @param curNode current YANG node
-     * @param targetNodes list of target nodes
-     * @param ctx augment statement context
-     */
-    public static void validateNodeInTargetPath(YangNode curNode, List<YangNodeIdentifier> targetNodes,
-            GeneratedYangParser.AugmentStatementContext ctx) {
-
-        curNode = curNode.getChild();
-        YangNode tempNode = validateCurrentTargetNode(targetNodes, curNode);
-        if (tempNode != null) {
-            switch (tempNode.getNodeType()) {
-                case CONTAINER_NODE:
-                    break;
-                case LIST_NODE:
-                    break;
-                case CHOICE_NODE:
-                    break;
-                case CASE_NODE:
-                    break;
-                case INPUT_NODE:
-                    break;
-                case OUTPUT_NODE:
-                    break;
-                case NOTIFICATION_NODE:
-                    break;
-                default:
-                    throw parserException(ctx);
-            }
-        } else {
-            throw parserException(ctx);
-        }
-    }
-
-    /**
-     * Validates whether nodes in target node list are valid or not.
-     *
-     * @param targetNodes target node
-     * @param curNode YANG node
-     * @return true or false
-     */
-    private static YangNode validateCurrentTargetNode(List<YangNodeIdentifier> targetNodes, YangNode curNode) {
-        YangNode tempNode = null;
-        while (curNode != null) {
-            tempNode = curNode;
-            for (int i = 1; i < targetNodes.size(); i++) {
-                if (curNode.getName().equals(targetNodes.get(i).getName())) {
-                    if (curNode.getChild() != null && targetNodes.size() - 1 != i) {
-                        curNode = curNode.getChild();
-                    } else if (curNode.getChild() != null && targetNodes.size() - 1 == i) {
-                        return curNode;
-                    } else if (curNode.getChild() == null && targetNodes.size() - 1 == i) {
-                        return curNode;
-                    } else {
-                        break;
-                    }
-                } else {
-                    curNode = tempNode;
-                    break;
-                }
-            }
-            curNode = curNode.getNextSibling();
-        }
-        return null;
-    }
-
-    /**
-     * Builds parser exception.
-     *
-     * @param ctx augment statement context
-     * @return parser exception
-     */
-    public static ParserException parserException(GeneratedYangParser.AugmentStatementContext ctx) {
-        int line = ctx.getStart().getLine();
-        int charPositionInLine = ctx.getStart().getCharPositionInLine();
-        ParserException exception = new ParserException("invalid target node path.");
-        exception.setLine(line);
-        exception.setCharPosition(charPositionInLine);
-        return exception;
-    }
-
-    /**
-     * Returns parent nodes prefix.
-     *
-     * @param curNode current YANG node
-     * @return parent nodes prefix
-     */
-    public static String getParentsPrefix(YangNode curNode) {
-        String curPrefix = null;
-        if (curNode instanceof YangModule) {
-            curPrefix = ((YangModule) curNode).getPrefix();
-        } else if (curNode instanceof YangSubModule) {
-            curPrefix = ((YangSubModule) curNode).getPrefix();
-        }
-        return curPrefix;
-    }
-}
diff --git a/plugin/src/main/java/org/onosproject/yangutils/plugin/manager/YangFileInfo.java b/plugin/src/main/java/org/onosproject/yangutils/plugin/manager/YangFileInfo.java
index 4eb22e5..a0f1b1d 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/plugin/manager/YangFileInfo.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/plugin/manager/YangFileInfo.java
@@ -19,12 +19,11 @@
 import java.util.Objects;
 
 import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
 
 /**
  * Represents YANG file information.
  */
-class YangFileInfo {
+public class YangFileInfo {
 
     /**
      * YANG file name.
@@ -32,26 +31,11 @@
     private String yangFileName;
 
     /**
-     * YANG file revision.
-     */
-    private String revision;
-
-    /**
      * Data model node after parsing YANG file.
      */
     private YangNode rootNode;
 
     /**
-     * Resolution status of YANG file.
-     */
-    private ResolvableStatus resolvableStatus;
-
-    /**
-     * Location for serialized files in case of inter-jar dependencies.
-     */
-    private String serializedFile;
-
-    /**
      * Flag to know if the root node require to be translated.
      */
     private boolean isForTranslator = true;
@@ -79,7 +63,7 @@
      *
      * @return yangFileName YANG file name
      */
-    String getYangFileName() {
+    public String getYangFileName() {
         return yangFileName;
     }
 
@@ -88,70 +72,16 @@
      *
      * @param yangFileName YANG file name
      */
-    void setYangFileName(String yangFileName) {
+    public void setYangFileName(String yangFileName) {
         this.yangFileName = yangFileName;
     }
 
     /**
-     * Returns the revision of YANG file.
-     *
-     * @return revision of YANG file
-     */
-    public String getRevision() {
-        return revision;
-    }
-
-    /**
-     * Sets the revision of YANG file.
-     *
-     * @param revision revision of YANG file
-     */
-    public void setRevision(String revision) {
-        this.revision = revision;
-    }
-
-    /**
-     * Returns the resolution status of YANG file.
-     *
-     * @return resolution status of YANG file
-     */
-    public ResolvableStatus getResolvableStatus() {
-        return resolvableStatus;
-    }
-
-    /**
-     * Sets the resolution status of YANG file.
-     *
-     * @param resolvableStatus resolution status of YANG file
-     */
-    public void setResolvableStatus(ResolvableStatus resolvableStatus) {
-        this.resolvableStatus = resolvableStatus;
-    }
-
-    /**
-     * Returns serialized file of datamodel.
-     *
-     * @return the serialized file of datamodel
-     */
-    public String getSerializedFile() {
-        return serializedFile;
-    }
-
-    /**
-     * Sets serialized file of datamodel.
-     *
-     * @param serializedFile serialized file of datamodel
-     */
-    public void setSerializedFile(String serializedFile) {
-        this.serializedFile = serializedFile;
-    }
-
-    /**
      * Returns true if node need to be translated.
      *
      * @return isForTranslator true if node need to be translated
      */
-    boolean isForTranslator() {
+    public boolean isForTranslator() {
         return isForTranslator;
     }
 
@@ -160,7 +90,7 @@
      *
      * @param isForTranslator true if node need to be translated
      */
-    void setForTranslator(boolean isForTranslator) {
+    public void setForTranslator(boolean isForTranslator) {
         this.isForTranslator = isForTranslator;
     }
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/plugin/manager/YangPluginUtils.java b/plugin/src/main/java/org/onosproject/yangutils/plugin/manager/YangPluginUtils.java
index e27468b..28e77c5 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/plugin/manager/YangPluginUtils.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/plugin/manager/YangPluginUtils.java
@@ -23,6 +23,7 @@
 import java.nio.file.Files;
 import java.nio.file.StandardCopyOption;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
@@ -32,10 +33,10 @@
 import org.apache.maven.model.Resource;
 import org.apache.maven.project.MavenProject;
 import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.utils.DataModelUtils;
 import org.slf4j.Logger;
 import org.sonatype.plexus.build.incremental.BuildContext;
 
+import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.parseJarFile;
 import static org.onosproject.yangutils.utils.UtilConstants.HYPHEN;
 import static org.onosproject.yangutils.utils.UtilConstants.JAR;
 import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
@@ -48,13 +49,14 @@
 /**
  * Represents YANG plugin utilities.
  */
-final class YangPluginUtils {
+public final class YangPluginUtils {
 
     private static final Logger log = getLogger(YangPluginUtils.class);
 
     private static final String TARGET_RESOURCE_PATH = SLASH + TEMP + SLASH + YANG_RESOURCES + SLASH;
 
     private static final String SERIALIZED_FILE_EXTENSION = ".ser";
+    private static final String YANG_META_DATA = "YangMetaData";
 
     private YangPluginUtils() {
     }
@@ -124,8 +126,8 @@
      * @param operation   true if need to add to resource
      * @throws IOException when fails to do IO operations
      */
-    static void serializeDataModel(String directory, Set<YangFileInfo> fileInfoSet,
-                                   MavenProject project, boolean operation) throws IOException {
+    public static void serializeDataModel(String directory, Set<YangFileInfo> fileInfoSet,
+                                          MavenProject project, boolean operation) throws IOException {
 
         String serFileDirPath = directory + TARGET_RESOURCE_PATH;
         File dir = new File(serFileDirPath);
@@ -135,17 +137,17 @@
             addToProjectResource(directory + SLASH + TEMP + SLASH, project);
         }
 
+        Set<YangNode> nodes = new HashSet<>();
         for (YangFileInfo fileInfo : fileInfoSet) {
-
-            String serFileName = serFileDirPath + fileInfo.getRootNode().getName()
-                    + SERIALIZED_FILE_EXTENSION;
-            fileInfo.setSerializedFile(serFileName);
-            FileOutputStream fileOutputStream = new FileOutputStream(serFileName);
-            ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
-            objectOutputStream.writeObject(fileInfo.getRootNode());
-            objectOutputStream.close();
-            fileOutputStream.close();
+            nodes.add(fileInfo.getRootNode());
         }
+
+        String serFileName = serFileDirPath + YANG_META_DATA + SERIALIZED_FILE_EXTENSION;
+        FileOutputStream fileOutputStream = new FileOutputStream(serFileName);
+        ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
+        objectOutputStream.writeObject(nodes);
+        objectOutputStream.close();
+        fileOutputStream.close();
     }
 
     /**
@@ -203,7 +205,7 @@
         List<String> dependenciesJarPaths = resolveDependencyJarPath(project, localRepository, remoteRepos);
         List<YangNode> resolvedDataModelNodes = new ArrayList<>();
         for (String dependency : dependenciesJarPaths) {
-            resolvedDataModelNodes.addAll(DataModelUtils.parseJarFile(dependency, directory));
+            resolvedDataModelNodes.addAll(parseJarFile(dependency, directory));
         }
         return resolvedDataModelNodes;
     }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java b/plugin/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
index 1422d27..ab3c6e1 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
@@ -285,7 +285,7 @@
     /**
      * Creates YANG nodes set.
      */
-    void createYangNodeSet() {
+    public void createYangNodeSet() {
         for (YangFileInfo yangFileInfo : getYangFileInfoSet()) {
             getYangNodeSet().add(yangFileInfo.getRootNode());
         }
@@ -383,7 +383,7 @@
      *
      * @return the YANG file info set
      */
-    Set<YangFileInfo> getYangFileInfoSet() {
+    public Set<YangFileInfo> getYangFileInfoSet() {
         return yangFileInfoSet;
     }
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/exception/InvalidNodeForTranslatorException.java b/plugin/src/main/java/org/onosproject/yangutils/translator/exception/InvalidNodeForTranslatorException.java
index 03b0382..c737175 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/exception/InvalidNodeForTranslatorException.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/exception/InvalidNodeForTranslatorException.java
@@ -22,10 +22,10 @@
 public class InvalidNodeForTranslatorException extends RuntimeException {
 
     private static final long serialVersionUID = 20160311L;
-    private String fileName;
+    private transient String fileName;
 
     /**
-     * Create a new exception.
+     * Creates a new exception.
      */
     public InvalidNodeForTranslatorException() {
         super();
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/exception/TranslatorException.java b/plugin/src/main/java/org/onosproject/yangutils/translator/exception/TranslatorException.java
index cf2c07d..a033a00 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/exception/TranslatorException.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/exception/TranslatorException.java
@@ -22,7 +22,7 @@
 public class TranslatorException extends RuntimeException {
 
     private static final long serialVersionUID = 20160311L;
-    private String fileName;
+    private transient String fileName;
 
     /**
      * Create a new translator exception.
@@ -44,7 +44,7 @@
      * Creates a new translator exception from given message and cause.
      *
      * @param message the detail of exception in string
-     * @param cause underlying cause of the error
+     * @param cause   underlying cause of the error
      */
     public TranslatorException(final String message, final Throwable cause) {
         super(message, cause);
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaAttributeInfo.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaAttributeInfo.java
index ffa7b21..a5a644a 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaAttributeInfo.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaAttributeInfo.java
@@ -18,6 +18,7 @@
 
 import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
 import org.onosproject.yangutils.datamodel.YangType;
+import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
 
 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.isTypeLeafref;
@@ -70,6 +71,11 @@
     private boolean isLongConflict;
 
     /**
+     * If conflict occurs.
+     */
+    private boolean isShortConflict;
+
+    /**
      * Creates a java attribute info object.
      */
     private JavaAttributeInfo() {
@@ -244,6 +250,24 @@
     }
 
     /**
+     * Returns true if conflict between short and uint8.
+     *
+     * @return true if conflict between short and uint8
+     */
+    public boolean isShortConflict() {
+        return isShortConflict;
+    }
+
+    /**
+     * Sets true if conflict between short and uint8.
+     *
+     * @param shortConflict true if conflict between short and uint8
+     */
+    public void setShortConflict(boolean shortConflict) {
+        isShortConflict = shortConflict;
+    }
+
+    /**
      * Returns java attribute info.
      *
      * @param importInfo        java qualified type info
@@ -253,7 +277,7 @@
      * @param isListAttribute   is list attribute
      * @return java attribute info.
      */
-    public static JavaAttributeInfo getAttributeInfoForTheData(JavaQualifiedTypeInfoTranslator importInfo,
+    public static JavaAttributeInfo getAttributeInfoForTheData(JavaQualifiedTypeInfo importInfo,
                                                                String attributeName,
                                                                YangType<?> attributeType, boolean isQualifiedAccess,
                                                                boolean isListAttribute) {
@@ -263,7 +287,7 @@
         }
         attributeName = isTypeNameLeafref(attributeName, attributeType);
         JavaAttributeInfo newAttr = new JavaAttributeInfo();
-        newAttr.setImportInfo(importInfo);
+        newAttr.setImportInfo((JavaQualifiedTypeInfoTranslator) importInfo);
         newAttr.setAttributeName(attributeName);
         newAttr.setAttributeType(attributeType);
         newAttr.setIsQualifiedAccess(isQualifiedAccess);
@@ -275,11 +299,11 @@
     /**
      * Returns java attribute info.
      *
-     * @param importInfo        java qualified type info
-     * @param attributeName     attribute name
-     * @param attributeType     attribute type
-     * @param isQualifiedAccess is the attribute a qualified access
-     * @param isListAttribute   is list attribute
+     * @param importInfo         java qualified type info
+     * @param attributeName      attribute name
+     * @param attributeType      attribute type
+     * @param isQualifiedAccess  is the attribute a qualified access
+     * @param isListAttribute    is list attribute
      * @param compilerAnnotation compiler annotation
      * @return java attribute info.
      */
@@ -288,7 +312,7 @@
                                                                boolean isQualifiedAccess, boolean isListAttribute,
                                                                YangCompilerAnnotation compilerAnnotation) {
         JavaAttributeInfo newAttr = getAttributeInfoForTheData(importInfo, attributeName, attributeType,
-                                                               isQualifiedAccess, isListAttribute);
+                isQualifiedAccess, isListAttribute);
 
         newAttr.setCompilerAnnotation(compilerAnnotation);
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java
index 671635e..089a1b3 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java
@@ -17,22 +17,12 @@
 package org.onosproject.yangutils.translator.tojava;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.onosproject.yangutils.datamodel.TraversalType;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangChoice;
 import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.datamodel.YangNodeType;
 import org.onosproject.yangutils.datamodel.YangOutput;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.translator.exception.InvalidNodeForTranslatorException;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
 import org.onosproject.yangutils.utils.io.YangPluginConfig;
@@ -41,11 +31,6 @@
 import static org.onosproject.yangutils.datamodel.TraversalType.PARENT;
 import static org.onosproject.yangutils.datamodel.TraversalType.ROOT;
 import static org.onosproject.yangutils.datamodel.TraversalType.SIBILING;
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangCaseNode;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getAugmentClassName;
-import static org.onosproject.yangutils.utils.UtilConstants.CASE;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.searchAndDeleteTempDir;
 
 /**
@@ -53,7 +38,6 @@
  */
 public final class JavaCodeGeneratorUtil {
 
-    private static final Log log = LogFactory.getLog(JavaCodeGeneratorUtil.class);
     /**
      * Current YANG node.
      */
@@ -64,8 +48,6 @@
      */
     private static YangNode rootNode;
 
-    private static int calls = 0;
-
     /**
      * Creates a java code generator utility object.
      */
@@ -106,11 +88,6 @@
         TraversalType curTraversal = ROOT;
 
         while (codeGenNode != null) {
-            if (codeGenNode instanceof YangAugment) {
-                if (((YangAugment) codeGenNode).getAugmentedNode() instanceof YangChoice) {
-                    addCaseNodeToChoiceTarget((YangAugment) codeGenNode);
-                }
-            }
             if (curTraversal != PARENT) {
                 if (!(codeGenNode instanceof JavaCodeGenerator)) {
                     throw new TranslatorException("Unsupported node to generate code");
@@ -129,9 +106,7 @@
                     }
                     continue;
                 } catch (Exception e) {
-                    if (log.isDebugEnabled()) {
-                        e.printStackTrace();
-                    }
+                    e.printStackTrace();
                     close(codeGenNode, yangPlugin);
                     throw new TranslatorException(e.getMessage());
                 }
@@ -144,9 +119,7 @@
                 try {
                     generateCodeExit(codeGenNode, yangPlugin);
                 } catch (Exception e) {
-                    if (log.isDebugEnabled()) {
-                        e.printStackTrace();
-                    }
+                    e.printStackTrace();
                     close(codeGenNode, yangPlugin);
                     throw new TranslatorException(e.getMessage());
                 }
@@ -156,9 +129,7 @@
                 try {
                     generateCodeExit(codeGenNode, yangPlugin);
                 } catch (Exception e) {
-                    if (log.isDebugEnabled()) {
-                        e.printStackTrace();
-                    }
+                    e.printStackTrace();
                     close(codeGenNode, yangPlugin);
                     throw new TranslatorException(e.getMessage());
                 }
@@ -381,49 +352,4 @@
         return null;
     }
 
-    /**
-     * Adds a case node in augment when augmenting a choice node.
-     *
-     * @param augment augment node
-     */
-    private static void addCaseNodeToChoiceTarget(YangAugment augment) {
-        calls++;
-        if (calls == 1) {
-            YangCase javaCase = getYangCaseNode(JAVA_GENERATION);
-
-            YangPluginConfig pluginConfig = new YangPluginConfig();
-            javaCase.setName(getAugmentClassName(augment, pluginConfig) + getCapitalCase(CASE));
-
-            if (augment.getListOfLeaf() != null) {
-                for (YangLeaf leaf : augment.getListOfLeaf()) {
-                    javaCase.addLeaf(leaf);
-                }
-                augment.getListOfLeaf().clear();
-            }
-            if (augment.getListOfLeafList() != null) {
-                for (YangLeafList leafList : augment.getListOfLeafList()) {
-                    javaCase.addLeafList(leafList);
-                }
-                augment.getListOfLeafList().clear();
-            }
-            YangNode child = augment.getChild();
-            List<YangNode> childNodes = new ArrayList<>();
-            while (child != null) {
-                child.setParent(javaCase);
-                childNodes.add(child);
-                child = child.getNextSibling();
-            }
-            augment.setChild(null);
-            try {
-                augment.addChild(javaCase);
-                for (YangNode node : childNodes) {
-                    node.setNextSibling(null);
-                    node.setPreviousSibling(null);
-                    javaCase.addChild(node);
-                }
-            } catch (DataModelException e) {
-                throw new TranslatorException("Failed to add child nodes to case node of augment " + augment.getName());
-            }
-        }
-    }
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoTranslator.java
index 63aa535..420dc27 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoTranslator.java
@@ -21,10 +21,10 @@
 
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
 import org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType;
 import org.onosproject.yangutils.translator.tojava.javamodel.JavaLeafInfoContainer;
+import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
 
 import com.google.common.base.MoreObjects;
 
@@ -42,6 +42,7 @@
      * Creates a java qualified type info object.
      */
     public JavaQualifiedTypeInfoTranslator() {
+        super();
     }
 
     /**
@@ -87,7 +88,7 @@
      */
     public static void updateLeavesJavaQualifiedInfo(JavaLeafInfoContainer leaf) {
 
-        JavaQualifiedTypeInfoTranslator importInfo = leaf.getJavaQualifiedInfo();
+        JavaQualifiedTypeInfoTranslator importInfo = (JavaQualifiedTypeInfoTranslator) leaf.getJavaQualifiedInfo();
 
         if (leaf.getDataType() == null) {
             throw new TranslatorException("missing data type of leaf " + leaf.getName());
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaEnumerationFragmentFiles.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaEnumerationFragmentFiles.java
index d17c081..5068458 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaEnumerationFragmentFiles.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaEnumerationFragmentFiles.java
@@ -25,9 +25,9 @@
 import org.onosproject.yangutils.datamodel.YangEnum;
 import org.onosproject.yangutils.datamodel.YangEnumeration;
 import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaTypeTranslator;
+import org.onosproject.yangutils.utils.io.YangPluginConfig;
 
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT32;
 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
@@ -229,7 +229,7 @@
      * @return java attribute
      */
     public JavaAttributeInfo getJavaAttributeForEnum(YangPluginConfig pluginConfig) {
-        YangJavaTypeTranslator<?> javaType = new YangJavaTypeTranslator<>();
+        YangJavaTypeTranslator javaType = new YangJavaTypeTranslator();
         javaType.setDataType(INT32);
         javaType.setDataTypeName(INT);
         javaType.updateJavaQualifiedInfo(pluginConfig.getConflictResolver());
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
index 1988e5a..37ce7ee 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
@@ -30,6 +30,7 @@
 import org.onosproject.yangutils.datamodel.YangModule;
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.datamodel.YangSubModule;
+import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
 import org.onosproject.yangutils.translator.tojava.javamodel.JavaLeafInfoContainer;
 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaGroupingTranslator;
@@ -1584,7 +1585,7 @@
             addLeafIdAttributes(newAttrInfo, leafCount, pluginConfig);
         }
         if (!newAttrInfo.isIntConflict() &&
-                !newAttrInfo.isLongConflict()) {
+                !newAttrInfo.isLongConflict() && !newAttrInfo.isShortConflict()) {
             if ((getGeneratedTempFiles() & GETTER_FOR_CLASS_MASK) != 0) {
                 addGetterImpl(newAttrInfo, pluginConfig);
             }
@@ -1863,8 +1864,9 @@
      * @return status of the qualified access to the attribute
      */
     boolean getIsQualifiedAccessOrAddToImportList(
-            JavaQualifiedTypeInfoTranslator importInfo) {
-        return getJavaImportData().addImportInfo(importInfo, getGeneratedJavaClassName(),
+            JavaQualifiedTypeInfo importInfo) {
+        return getJavaImportData().addImportInfo((JavaQualifiedTypeInfoTranslator) importInfo,
+                getGeneratedJavaClassName(),
                 getJavaFileInfo().getPackage());
     }
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaTypeFragmentFiles.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaTypeFragmentFiles.java
index b8f12e6..62c6390 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaTypeFragmentFiles.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaTypeFragmentFiles.java
@@ -29,10 +29,12 @@
 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaTypeTranslator;
 import org.onosproject.yangutils.utils.io.YangPluginConfig;
 
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT16;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT32;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT64;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT16;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT32;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT8;
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
@@ -47,6 +49,7 @@
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getTypeConstructorStringAndJavaDoc;
 import static org.onosproject.yangutils.translator.tojava.utils.ValidatorTypeForUnionTypes.INT_TYPE_CONFLICT;
 import static org.onosproject.yangutils.translator.tojava.utils.ValidatorTypeForUnionTypes.LONG_TYPE_CONFLICT;
+import static org.onosproject.yangutils.translator.tojava.utils.ValidatorTypeForUnionTypes.SHORT_TYPE_CONFLICT;
 import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
 import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
@@ -100,6 +103,16 @@
     private int uLongIndex = 0;
 
     /**
+     * short index in type list.
+     */
+    private int shortIndex = 0;
+
+    /**
+     * Uint8 index in type list.
+     */
+    private int uInt8Index = 0;
+
+    /**
      * Temporary file handle for of string method of class.
      */
     private File ofStringImplTempFileHandle;
@@ -130,6 +143,16 @@
     private JavaAttributeInfo longAttribute;
 
     /**
+     * Java attribute for short.
+     */
+    private JavaAttributeInfo shortAttribute;
+
+    /**
+     * Java attribute for uint8.
+     */
+    private JavaAttributeInfo uInt8Attribute;
+
+    /**
      * Java attribute for uInt.
      */
     private JavaAttributeInfo uIntAttribute;
@@ -270,7 +293,7 @@
      * @return java attribute
      */
     private JavaAttributeInfo getAttributeForType(YangType yangType, YangPluginConfig pluginConfig) {
-        YangJavaTypeTranslator<?> javaType = (YangJavaTypeTranslator<?>) yangType;
+        YangJavaTypeTranslator javaType = (YangJavaTypeTranslator) yangType;
         javaType.updateJavaQualifiedInfo(pluginConfig.getConflictResolver());
         String typeName = javaType.getDataTypeName();
         typeName = getCamelCase(typeName, pluginConfig.getConflictResolver());
@@ -290,12 +313,19 @@
      * @throws IOException IO operation fail
      */
     private void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo javaAttributeInfo,
-            YangPluginConfig pluginConfig, List<YangType<?>> typeList)
+                                                         YangPluginConfig pluginConfig, List<YangType<?>> typeList)
             throws IOException {
 
         YangDataTypes attrType = javaAttributeInfo.getAttributeType().getDataType();
 
-        if (attrType == INT32 || attrType == UINT16) {
+        if (attrType == INT16 || attrType == UINT8) {
+            boolean isShortConflict = validateForConflictingShortTypes(typeList);
+            javaAttributeInfo.setShortConflict(isShortConflict);
+            updateAttributeCondition(javaAttributeInfo);
+            if (!isShortConflict) {
+                addMethodsWhenNoConflictingTypes(javaAttributeInfo, pluginConfig);
+            }
+        } else if (attrType == INT32 || attrType == UINT16) {
             boolean isIntConflict = validateForConflictingIntTypes(typeList);
             javaAttributeInfo.setIntConflict(isIntConflict);
             updateAttributeCondition(javaAttributeInfo);
@@ -324,7 +354,7 @@
      * @throws IOException when fails to do IO operations
      */
     private void addMethodsWhenNoConflictingTypes(JavaAttributeInfo javaAttributeInfo,
-            YangPluginConfig pluginConfig)
+                                                  YangPluginConfig pluginConfig)
             throws IOException {
         if ((getGeneratedTempFiles() & OF_STRING_IMPL_MASK) != 0) {
             addOfStringMethod(javaAttributeInfo, pluginConfig);
@@ -385,6 +415,28 @@
                 }
             }
         }
+
+        attr = getShortAttribute();
+        if (attr != null) {
+            attr = getUInt8Attribute();
+        }
+        if (attr != null) {
+            if (attr.isShortConflict()) {
+                if (getShortIndex() < getUInt8Index()) {
+                    appendToFile(getOfStringImplTempFileHandle(), getOfMethodStringAndJavaDoc(getShortAttribute(),
+                            getGeneratedJavaClassName(), pluginConfig)
+                            + NEW_LINE);
+                    addGetterImpl(getShortAttribute(), pluginConfig);
+                    addFromStringMethod(getShortAttribute(), pluginConfig);
+                } else {
+                    appendToFile(getOfStringImplTempFileHandle(), getOfMethodStringAndJavaDoc(getUInt8Attribute(),
+                            getGeneratedJavaClassName(), pluginConfig)
+                            + NEW_LINE);
+                    addGetterImpl(getUInt8Attribute(), pluginConfig);
+                    addFromStringMethod(getUInt8Attribute(), pluginConfig);
+                }
+            }
+        }
     }
 
     /**
@@ -458,6 +510,19 @@
                                 < getULongIndex()) + NEW_LINE);
             }
         }
+        attr = getShortAttribute();
+        if (attr != null) {
+            attr = getUInt8Attribute();
+        }
+        if (attr != null) {
+            if (attr.isShortConflict()) {
+                appendToFile(getConstructorForTypeTempFileHandle(), getTypeConstructorStringAndJavaDoc(
+                        getShortAttribute(),
+                        getUInt8Attribute(), getGeneratedJavaClassName(), pluginConfig, SHORT_TYPE_CONFLICT,
+                        getShortIndex()
+                                < getUInt8Index()) + NEW_LINE);
+            }
+        }
     }
 
     /**
@@ -555,6 +620,42 @@
     }
 
     /**
+     * Returns short type index from type list.
+     *
+     * @return short type index from type list
+     */
+    public int getShortIndex() {
+        return shortIndex;
+    }
+
+    /**
+     * Sets short type index from type list.
+     *
+     * @param shortIndex short type index from type list.
+     */
+    private void setShortIndex(int shortIndex) {
+        this.shortIndex = shortIndex;
+    }
+
+    /**
+     * Returns uInt type index from type list.
+     *
+     * @return uInt type index from type list
+     */
+    public int getUInt8Index() {
+        return uInt8Index;
+    }
+
+    /**
+     * Sets uInt8 type index from type list.
+     *
+     * @param uInt8Index uInt8 type index from type list.
+     */
+    private void setUInt8Index(int uInt8Index) {
+        this.uInt8Index = uInt8Index;
+    }
+
+    /**
      * Returns int type index from type list.
      *
      * @return int type index from type list
@@ -650,6 +751,29 @@
     }
 
     /**
+     * Validates conflict for int and uInt.
+     *
+     * @param typeList type list
+     * @return true if conflict is there
+     */
+    private boolean validateForConflictingShortTypes(List<YangType<?>> typeList) {
+        boolean isShortPresent = false;
+        boolean isUInt8Present = false;
+        for (YangType type : typeList) {
+            if (type.getDataType().equals(INT16)) {
+                setShortIndex(typeList.indexOf(type));
+                isShortPresent = true;
+            }
+            if (type.getDataType().equals(UINT8)) {
+                setUInt8Index(typeList.indexOf(type));
+                isUInt8Present = true;
+            }
+        }
+
+        return isShortPresent && isUInt8Present;
+    }
+
+    /**
      * Validates conflict for long and uLong.
      *
      * @param typeList type list
@@ -695,6 +819,14 @@
             }
 
         }
+        if (javaAttributeInfo.isShortConflict()) {
+            if (javaAttributeInfo.getAttributeType().getDataType() == UINT8) {
+                setUInt8Attribute(javaAttributeInfo);
+            } else if (javaAttributeInfo.getAttributeType().getDataType() == INT16) {
+                setShortAttribute(javaAttributeInfo);
+            }
+
+        }
     }
 
     /**
@@ -768,4 +900,41 @@
     private void setULongAttribute(JavaAttributeInfo uLongAttribute) {
         this.uLongAttribute = uLongAttribute;
     }
+
+    /**
+     * Returns attribute for uInt8.
+     *
+     * @return attribute for uInt8
+     */
+    public JavaAttributeInfo getUInt8Attribute() {
+        return uInt8Attribute;
+    }
+
+    /**
+     * Sets attribute for uInt8.
+     *
+     * @param uInt8Attribute attribute for uInt8
+     */
+    private void setUInt8Attribute(JavaAttributeInfo uInt8Attribute) {
+        this.uInt8Attribute = uInt8Attribute;
+    }
+
+    /**
+     * Returns attribute for short.
+     *
+     * @return attribute for short
+     */
+    public JavaAttributeInfo getShortAttribute() {
+        return shortAttribute;
+    }
+
+    /**
+     * Sets attribute for short.
+     *
+     * @param shortAttribute attribute for short
+     */
+    private void setShortAttribute(JavaAttributeInfo shortAttribute) {
+        this.shortAttribute = shortAttribute;
+    }
+
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TraversalType.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TraversalType.java
deleted file mode 100644
index 35f529a..0000000
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TraversalType.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.translator.tojava;
-
-/**
- * Represents data model tree traversal types.
- */
-public enum TraversalType {
-
-    /**
-     * Start of traversal at the tree root.
-     */
-    ROOT,
-
-    /**
-     * Child node traversal.
-     */
-    CHILD,
-
-    /**
-     * Sibling node traversal.
-     */
-    SIBLING,
-
-    /**
-     * Parent node traversal.
-     */
-    PARENT
-}
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 eb02fd7..1ea7f48 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
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+
 import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
 import org.onosproject.yangutils.datamodel.YangAtomicPath;
 import org.onosproject.yangutils.datamodel.YangAugment;
@@ -31,13 +32,13 @@
 import org.onosproject.yangutils.datamodel.YangSubModule;
 import org.onosproject.yangutils.datamodel.YangTranslatorOperatorNode;
 import org.onosproject.yangutils.datamodel.YangTypeHolder;
+import org.onosproject.yangutils.utils.io.YangPluginConfig;
 import org.onosproject.yangutils.datamodel.utils.DataModelUtils;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaAugmentTranslator;
 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaEnumerationTranslator;
 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModuleTranslator;
 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModuleTranslator;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
 
 import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.isRpcChildNodePresent;
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
@@ -508,7 +509,8 @@
         String name = getCapitalCase(getCamelCase(yangNodeIdentifier.getName(), yangPluginConfig
                 .getConflictResolver()));
         if (yangNodeIdentifier.getPrefix() != null) {
-            return AUGMENTED + getCapitalCase(yangNodeIdentifier.getPrefix()) + name;
+            return AUGMENTED + getCapitalCase(getCamelCase(yangNodeIdentifier.getPrefix(), yangPluginConfig
+                    .getConflictResolver())) + name;
         } else {
             return AUGMENTED + name;
         }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/JavaLeafInfoContainer.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/JavaLeafInfoContainer.java
index d07aaac..49f2f41 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/JavaLeafInfoContainer.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/JavaLeafInfoContainer.java
@@ -17,7 +17,7 @@
 
 import org.onosproject.yangutils.datamodel.YangType;
 import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoContainer;
+import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfoContainer;
 
 /**
  * Represent java based identification of the YANG leaves.
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/JavaQualifiedTypeResolver.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/JavaQualifiedTypeResolver.java
index ad3de56..909c6f4 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/JavaQualifiedTypeResolver.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/JavaQualifiedTypeResolver.java
@@ -16,13 +16,11 @@
 package org.onosproject.yangutils.translator.tojava.javamodel;
 
 import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoContainer;
 
 /**
  * Represent java based identification of the YANG leaves.
  */
-interface JavaQualifiedTypeResolver
-        extends JavaQualifiedTypeInfoContainer {
+interface JavaQualifiedTypeResolver {
 
     /**
      * updates the qualified access details of the type.
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaLeafListTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaLeafListTranslator.java
index 08c4fb3..c79d86b 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaLeafListTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaLeafListTranslator.java
@@ -16,8 +16,8 @@
 package org.onosproject.yangutils.translator.tojava.javamodel;
 
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaLeafList;
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
 import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
+import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
 
 import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.updateLeavesJavaQualifiedInfo;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
@@ -56,16 +56,6 @@
         updateLeavesJavaQualifiedInfo(this);
     }
 
-    @Override
-    public JavaQualifiedTypeInfoTranslator getJavaQualifiedInfo() {
-        return (JavaQualifiedTypeInfoTranslator) javaQualifiedTypeInfo;
-    }
-
-    @Override
-    public void setJavaQualifiedInfo(JavaQualifiedTypeInfoTranslator typeInfo) {
-        javaQualifiedTypeInfo = typeInfo;
-    }
-
     /**
      * Returns java naming conflict resolve configurations.
      *
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaLeafTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaLeafTranslator.java
index d7dfb9b..a846e59 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaLeafTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaLeafTranslator.java
@@ -16,8 +16,8 @@
 package org.onosproject.yangutils.translator.tojava.javamodel;
 
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaLeaf;
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
 import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
+import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
 
 import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.updateLeavesJavaQualifiedInfo;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
@@ -42,17 +42,6 @@
     }
 
     @Override
-    public JavaQualifiedTypeInfoTranslator getJavaQualifiedInfo() {
-        return (JavaQualifiedTypeInfoTranslator) javaQualifiedTypeInfo;
-    }
-
-    @Override
-    public void setJavaQualifiedInfo(JavaQualifiedTypeInfoTranslator typeInfo) {
-        javaQualifiedTypeInfo = typeInfo;
-
-    }
-
-    @Override
     public String getJavaName(YangToJavaNamingConflictUtil conflictResolveConfig) {
         return getCamelCase(getName(), conflictResolveConfig);
     }
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 774e422..0f46f76 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
@@ -18,6 +18,7 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.datamodel.YangNotification;
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaModule;
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 4f403c9..009a86f 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
@@ -18,15 +18,16 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+
 import org.onosproject.yangutils.datamodel.YangBelongsTo;
 import org.onosproject.yangutils.datamodel.YangModule;
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.datamodel.YangNotification;
+import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaSubModule;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
 import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
 import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
 import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
 import org.onosproject.yangutils.utils.io.YangPluginConfig;
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeTranslator.java
index cb8d3ba..911e0c4 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeTranslator.java
@@ -15,7 +15,7 @@
  */
 package org.onosproject.yangutils.translator.tojava.javamodel;
 
-import org.onosproject.yangutils.datamodel.YangType;
+import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaType;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
 import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
 import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
@@ -26,15 +26,11 @@
 
 /**
  * Represents java information corresponding to the YANG type.
- *
- * @param <T> generic parameter for YANG java type
  */
-public class YangJavaTypeTranslator<T>
-        extends YangType<T>
+public class YangJavaTypeTranslator
+        extends YangJavaType
         implements JavaQualifiedTypeResolver {
 
-    private JavaQualifiedTypeInfoTranslator javaQualifiedAccess;
-
     /**
      * Create a YANG leaf object with java qualified access details.
      */
@@ -45,7 +41,7 @@
 
     @Override
     public void updateJavaQualifiedInfo(YangToJavaNamingConflictUtil conflictResolver) {
-        JavaQualifiedTypeInfoTranslator importInfo = getJavaQualifiedInfo();
+        JavaQualifiedTypeInfoTranslator importInfo = (JavaQualifiedTypeInfoTranslator) getJavaQualifiedInfo();
 
         /*
          * Type is added as an attribute in the class.
@@ -58,7 +54,7 @@
              */
             importInfo.setClassInfo(className);
             String classPkg = getJavaImportPackage(this,
-                    false,  conflictResolver);
+                    false, conflictResolver);
             if (classPkg == null) {
                 throw new TranslatorException("import package cannot be null when the class is used");
             }
@@ -77,13 +73,4 @@
         setJavaQualifiedInfo(importInfo);
     }
 
-    @Override
-    public JavaQualifiedTypeInfoTranslator getJavaQualifiedInfo() {
-        return javaQualifiedAccess;
-    }
-
-    @Override
-    public void setJavaQualifiedInfo(JavaQualifiedTypeInfoTranslator typeInfo) {
-        javaQualifiedAccess = typeInfo;
-    }
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
index da23e83..60191de 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
@@ -23,9 +23,9 @@
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.datamodel.YangNotification;
 import org.onosproject.yangutils.datamodel.YangSubModule;
+import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
 import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
 import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
 import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java
index 6b4da44..ca0dd02 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java
@@ -60,8 +60,12 @@
 import static org.onosproject.yangutils.utils.UtilConstants.QUEUE;
 import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
 import static org.onosproject.yangutils.utils.UtilConstants.SET;
+import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MAX_RANGE_ATTR;
+import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MIN_RANGE_ATTR;
 import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
 import static org.onosproject.yangutils.utils.UtilConstants.TYPE;
+import static org.onosproject.yangutils.utils.UtilConstants.UINT8_MAX_RANGE_ATTR;
+import static org.onosproject.yangutils.utils.UtilConstants.UINT8_MIN_RANGE_ATTR;
 import static org.onosproject.yangutils.utils.UtilConstants.UINT_MAX_RANGE_ATTR;
 import static org.onosproject.yangutils.utils.UtilConstants.UINT_MIN_RANGE_ATTR;
 import static org.onosproject.yangutils.utils.UtilConstants.ULONG_MAX_RANGE_ATTR;
@@ -114,7 +118,7 @@
      * @param javaAttributeName    name of the attribute
      * @param isList               is list attribute
      * @param attributeAccessType  attribute access type
-     * @param compilerAnnotation compiler annotation
+     * @param compilerAnnotation   compiler annotation
      * @return the textual java code for attribute definition in class
      */
     public static String getJavaAttributeDefinition(String javaAttributeTypePkg, String javaAttributeType,
@@ -318,6 +322,24 @@
     }
 
     /**
+     * Adds attribute for long ranges.
+     *
+     * @param modifier modifier for attribute
+     * @param addFirst if need to be added first
+     * @return attribute for long ranges
+     */
+    static String addStaticAttributeShortRange(String modifier, boolean addFirst) {
+        if (addFirst) {
+            return NEW_LINE + FOUR_SPACE_INDENTATION + modifier + SPACE + SHORT_MIN_RANGE_ATTR +
+                    FOUR_SPACE_INDENTATION +
+                    modifier + SPACE + SHORT_MAX_RANGE_ATTR;
+        } else {
+            return NEW_LINE + FOUR_SPACE_INDENTATION + modifier + SPACE + UINT8_MIN_RANGE_ATTR +
+                    FOUR_SPACE_INDENTATION + modifier + SPACE + UINT8_MAX_RANGE_ATTR;
+        }
+    }
+
+    /**
      * Returns operation type enum.
      *
      * @return operation type enum
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
index dcca748..43946f7 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
@@ -206,7 +206,7 @@
      * @throws IOException when fails to write in file
      */
     public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode,
-            boolean isAttrPresent)
+                                             boolean isAttrPresent)
             throws IOException {
 
         JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
@@ -376,7 +376,7 @@
      */
 
     public static File generateBuilderClassFile(File file, YangNode curNode,
-            boolean isAttrPresent)
+                                                boolean isAttrPresent)
             throws IOException {
 
         JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
@@ -490,7 +490,7 @@
      * @throws IOException when fails to write in file
      */
     public static File generateDefaultClassFile(File file, YangNode curNode, boolean isAttrPresent,
-            List<String> imports)
+                                                List<String> imports)
             throws IOException {
 
         JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
@@ -806,6 +806,7 @@
 
         boolean isIntConflict = false;
         boolean isLongConflict = false;
+        boolean isShortConflict = false;
         JavaAttributeInfo intAttr = tempJavaTypeFragmentFiles.getIntAttribute();
         if (intAttr == null) {
             intAttr = tempJavaTypeFragmentFiles.getUIntAttribute();
@@ -816,13 +817,20 @@
             longAttr = tempJavaTypeFragmentFiles.getULongAttribute();
         }
 
+        JavaAttributeInfo shortAttr = tempJavaTypeFragmentFiles.getShortAttribute();
+        if (shortAttr == null) {
+            shortAttr = tempJavaTypeFragmentFiles.getUInt8Attribute();
+        }
+
         if (intAttr != null) {
             isIntConflict = intAttr.isIntConflict();
         }
         if (longAttr != null) {
             isLongConflict = longAttr.isLongConflict();
         }
-
+        if (shortAttr != null) {
+            isShortConflict = shortAttr.isShortConflict();
+        }
         if (isLongConflict) {
             imports.add(tempJavaTypeFragmentFiles.getJavaImportData().getBigIntegerImport());
             sort(imports);
@@ -845,6 +853,11 @@
                         tempJavaTypeFragmentFiles.getLongIndex() < tempJavaTypeFragmentFiles.getULongIndex()));
             }
 
+            if (isShortConflict) {
+                insertDataIntoJavaFile(file, JavaCodeSnippetGen.addStaticAttributeShortRange(PRIVATE,
+                        tempJavaTypeFragmentFiles.getShortIndex() < tempJavaTypeFragmentFiles.getUInt8Index()));
+            }
+
             insertDataIntoJavaFile(file,
                     NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
                             ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
@@ -914,6 +927,9 @@
             if (isLongConflict) {
                 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
             }
+            if (isShortConflict) {
+                methods.add(getRangeValidatorMethodForUnion(INT));
+            }
 
         } catch (IOException e) {
             throw new IOException("No data found in temporary java code fragment files for " + className
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
index a816234..82cff15 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
@@ -45,11 +45,11 @@
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT8;
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils
-        .getAugmentedClassNameForDataMethods;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getAugmentedClassNameForDataMethods;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getParentNodeNameForDataMethods;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getSetOfNodeIdentifiers;
 import static org.onosproject.yangutils.translator.tojava.utils.ValidatorTypeForUnionTypes.INT_TYPE_CONFLICT;
+import static org.onosproject.yangutils.translator.tojava.utils.ValidatorTypeForUnionTypes.SHORT_TYPE_CONFLICT;
 import static org.onosproject.yangutils.utils.UtilConstants.ADD;
 import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.AND;
@@ -148,6 +148,8 @@
 import static org.onosproject.yangutils.utils.UtilConstants.SET_METHOD_PREFIX;
 import static org.onosproject.yangutils.utils.UtilConstants.SET_SELECT_LEAF;
 import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
+import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MAX_RANGE;
+import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MIN_RANGE;
 import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
 import static org.onosproject.yangutils.utils.UtilConstants.SINGLE_QUOTE;
 import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
@@ -165,6 +167,8 @@
 import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
 import static org.onosproject.yangutils.utils.UtilConstants.TRY;
 import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.UINT8_MAX_RANGE;
+import static org.onosproject.yangutils.utils.UtilConstants.UINT8_MIN_RANGE;
 import static org.onosproject.yangutils.utils.UtilConstants.UINT_MAX_RANGE;
 import static org.onosproject.yangutils.utils.UtilConstants.UINT_MIN_RANGE;
 import static org.onosproject.yangutils.utils.UtilConstants.ULONG_MAX_RANGE;
@@ -229,7 +233,7 @@
      * @return getter string
      */
     public static String getGetterString(JavaAttributeInfo attr, int generatedJavaFiles,
-            YangPluginConfig pluginConfig) {
+                                         YangPluginConfig pluginConfig) {
 
         String returnType = getReturnType(attr);
         String attributeName = attr.getAttributeName();
@@ -258,7 +262,7 @@
      * @return setter string
      */
     public static String getSetterString(JavaAttributeInfo attr, String className, int generatedJavaFiles,
-            YangPluginConfig pluginConfig) {
+                                         YangPluginConfig pluginConfig) {
 
         String attrType = getReturnType(attr);
         String attributeName = attr.getAttributeName();
@@ -298,7 +302,7 @@
      * @return default constructor string
      */
     public static String getDefaultConstructorString(String name, String modifierType,
-            YangPluginConfig pluginConfig) {
+                                                     YangPluginConfig pluginConfig) {
         return getJavaDoc(DEFAULT_CONSTRUCTOR, name, false, pluginConfig, null)
                 + getDefaultConstructor(name, modifierType) + NEW_LINE;
     }
@@ -419,7 +423,7 @@
      * @return setter for attribute
      */
     private static String getSetter(String className, String name, String type, int generatedJavaFiles,
-            boolean isTypeNull, boolean isList) {
+                                    boolean isTypeNull, boolean isList) {
         if (generatedJavaFiles == GENERATE_SERVICE_AND_MANAGER) {
             return FOUR_SPACE_INDENTATION + PUBLIC + SPACE + VOID + SPACE + SET_METHOD_PREFIX
                     + getCapitalCase(name) + OPEN_PARENTHESIS + type + SPACE + name + CLOSE_PARENTHESIS + SPACE +
@@ -499,7 +503,7 @@
      * @return getter method for interface
      */
     static String getGetterForInterface(String yangName, String returnType, boolean isList,
-            int generatedJavaFiles, YangCompilerAnnotation compilerAnnotation) {
+                                        int generatedJavaFiles, YangCompilerAnnotation compilerAnnotation) {
         if (!isList) {
             return getGetterInterfaceString(returnType, yangName, generatedJavaFiles);
         }
@@ -515,7 +519,7 @@
      * @return getter for interface
      */
     private static String getGetterInterfaceString(String returnType, String yangName,
-            int generatedJavaFiles) {
+                                                   int generatedJavaFiles) {
         if (generatedJavaFiles == GENERATE_SERVICE_AND_MANAGER) {
             return getGetMethodWithArgument(returnType, yangName);
         } else {
@@ -536,8 +540,8 @@
      * @return setter method for interface
      */
     static String getSetterForInterface(String attrName, String attrType, String className,
-            boolean isList, int generatedJavaFiles,
-            YangCompilerAnnotation compilerAnnotation) {
+                                        boolean isList, int generatedJavaFiles,
+                                        YangCompilerAnnotation compilerAnnotation) {
         if (!isList) {
             return getSetterInterfaceString(className, attrName, attrType, generatedJavaFiles);
         }
@@ -555,10 +559,10 @@
      * @return setter string
      */
     private static String getSetterInterfaceString(String className, String attrName, String attrType,
-            int generatedJavaFiles) {
+                                                   int generatedJavaFiles) {
         if (generatedJavaFiles == GENERATE_SERVICE_AND_MANAGER) {
             return FOUR_SPACE_INDENTATION + VOID + SPACE + SET_METHOD_PREFIX + getCapitalCase(attrName)
-                    + OPEN_PARENTHESIS + attrType + SPACE + attrName + CLOSE_PARENTHESIS + SEMI_COLAN;
+                    + OPEN_PARENTHESIS + attrType + OP_PARAM + SPACE + attrName + CLOSE_PARENTHESIS + SEMI_COLAN;
         } else {
             return FOUR_SPACE_INDENTATION + className + BUILDER + SPACE + attrName
                     + OPEN_PARENTHESIS + attrType + SPACE + attrName + CLOSE_PARENTHESIS + SEMI_COLAN;
@@ -630,7 +634,7 @@
      * @return constructor for class
      */
     public static String getConstructor(JavaAttributeInfo attr, int generatedJavaFiles,
-            YangPluginConfig pluginConfig) {
+                                        YangPluginConfig pluginConfig) {
 
         String attributeName = attr.getAttributeName();
         String constructor;
@@ -661,7 +665,7 @@
      * @return rpc method string
      */
     public static String getRpcServiceMethod(String rpcName, String inputName, String outputName,
-            YangPluginConfig pluginConfig) {
+                                             YangPluginConfig pluginConfig) {
 
         rpcName = getCamelCase(rpcName, pluginConfig.getConflictResolver());
         if (!inputName.equals(EMPTY_STRING)) {
@@ -681,7 +685,7 @@
      * @return rpc method string
      */
     public static String getRpcManagerMethod(String rpcName, String inputName, String outputName,
-            YangPluginConfig pluginConfig) {
+                                             YangPluginConfig pluginConfig) {
 
         rpcName = getCamelCase(rpcName, pluginConfig.getConflictResolver());
         if (!inputName.equals(EMPTY_STRING)) {
@@ -846,7 +850,7 @@
      * @return from string method's body string
      */
     public static String getFromStringMethod(JavaAttributeInfo attr,
-            JavaAttributeInfo fromStringAttributeInfo) {
+                                             JavaAttributeInfo fromStringAttributeInfo) {
 
         return EIGHT_SPACE_INDENTATION + getTrySubString() + NEW_LINE + TWELVE_SPACE_INDENTATION
                 + getParsedSubString(attr, fromStringAttributeInfo) + NEW_LINE + TWELVE_SPACE_INDENTATION
@@ -889,7 +893,7 @@
      * @return sub string with parsed statement for union's from string method
      */
     private static String getParsedSubString(JavaAttributeInfo attr,
-            JavaAttributeInfo fromStringAttributeInfo) {
+                                             JavaAttributeInfo fromStringAttributeInfo) {
 
         String targetDataType = getReturnType(attr);
         if (fromStringAttributeInfo.getAttributeType().getDataType() == BITS) {
@@ -1055,7 +1059,7 @@
      * @return of method's string and java doc for special type
      */
     public static String getOfMethodStringAndJavaDoc(JavaAttributeInfo attr, String generatedJavaClassName,
-            YangPluginConfig pluginConfig) {
+                                                     YangPluginConfig pluginConfig) {
 
         String attrType = getReturnType(attr);
         String attrName = attr.getAttributeName();
@@ -1087,8 +1091,8 @@
      * @return string and java doc for constructor of type class
      */
     public static String getTypeConstructorStringAndJavaDoc(JavaAttributeInfo attr,
-            String generatedJavaClassName,
-            YangPluginConfig pluginConfig) {
+                                                            String generatedJavaClassName,
+                                                            YangPluginConfig pluginConfig) {
 
         String attrType = getReturnType(attr);
         String attrName = attr.getAttributeName();
@@ -1109,7 +1113,7 @@
      */
     public static String getTypeConstructorStringAndJavaDoc(JavaAttributeInfo attr1, JavaAttributeInfo
             attr2, String generatedJavaClassName, YangPluginConfig pluginConfig, ValidatorTypeForUnionTypes type,
-            boolean addFirst) {
+                                                            boolean addFirst) {
 
         String attrType = getReturnType(attr1);
         String attrName1 = "";
@@ -1122,7 +1126,7 @@
         }
 
         String appDataStructure = null;
-        if (attr1.getCompilerAnnotation() != null) {
+        if (attr1 != null && attr1.getCompilerAnnotation() != null) {
             appDataStructure = attr1.getCompilerAnnotation().getYangAppDataStructure().getDataStructure().name();
         }
         return getJavaDoc(TYPE_CONSTRUCTOR, generatedJavaClassName + " for type " + attrName1, false, pluginConfig,
@@ -1154,7 +1158,7 @@
      * @return type constructor string
      */
     private static String getTypeConstructorString(String type, String attr1, String attr2, String className,
-            ValidatorTypeForUnionTypes validatorType, boolean addInt) {
+                                                   ValidatorTypeForUnionTypes validatorType, boolean addInt) {
 
         String constructor;
         constructor = FOUR_SPACE_INDENTATION + PUBLIC + SPACE + className + OPEN_PARENTHESIS + type + SPACE + VALUE
@@ -1285,8 +1289,8 @@
      * @return of method
      */
     static String getEnumsOfMethod(String className, JavaAttributeInfo attr,
-            Map<String, Integer> enumMap, List<String> enumList,
-            YangPluginConfig pluginConfig) {
+                                   Map<String, Integer> enumMap, List<String> enumList,
+                                   YangPluginConfig pluginConfig) {
         String attrType = getReturnType(attr);
         String attrName = attr.getAttributeName();
 
@@ -1449,6 +1453,12 @@
             } else {
                 condition = condition + UINT_MIN_RANGE + COMMA + SPACE + UINT_MAX_RANGE + COMMA + SPACE + VALUE;
             }
+        } else if (type == SHORT_TYPE_CONFLICT) {
+            if (addFirst) {
+                condition = condition + SHORT_MIN_RANGE + COMMA + SPACE + SHORT_MAX_RANGE + COMMA + SPACE + VALUE;
+            } else {
+                condition = condition + UINT8_MIN_RANGE + COMMA + SPACE + UINT8_MAX_RANGE + COMMA + SPACE + VALUE;
+            }
         } else {
             if (addFirst) {
                 condition = condition + LONG_MIN_RANGE + COMMA + SPACE + LONG_MAX_RANGE + COMMA + SPACE + VALUE;
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ValidatorTypeForUnionTypes.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ValidatorTypeForUnionTypes.java
index a9890bd..9ccceb1 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ValidatorTypeForUnionTypes.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ValidatorTypeForUnionTypes.java
@@ -27,6 +27,11 @@
     INT_TYPE_CONFLICT,
 
     /**
+     * When conflict is there for int16 and uInt8.
+     */
+    SHORT_TYPE_CONFLICT,
+
+    /**
      * When conflict is there for int64 and uInt32.
      */
     LONG_TYPE_CONFLICT
diff --git a/plugin/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java b/plugin/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
index a0c66b0..8b323bc 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
@@ -319,6 +319,48 @@
     /**
      * Static attribute for minRange.
      */
+    public static final String SHORT_MIN_RANGE_ATTR = "static final int INT16_MIN_RANGE = -32768;\n";
+
+    /**
+     * Static attribute for minRange.
+     */
+    public static final String SHORT_MIN_RANGE = "INT16_MIN_RANGE";
+
+    /**
+     * Static attribute for minRange.
+     */
+    public static final String SHORT_MAX_RANGE = "INT16_MAX_RANGE";
+
+    /**
+     * Static attribute for maxRange.
+     */
+    public static final String SHORT_MAX_RANGE_ATTR = "static final int INT16_MAX_RANGE = 32767;";
+
+
+    /**
+     * Static attribute for minRange.
+     */
+    public static final String UINT8_MIN_RANGE_ATTR = "static final int UINT8_MIN_RANGE = 0;\n";
+
+    /**
+     * Static attribute for maxRange.
+     */
+    public static final String UINT8_MAX_RANGE_ATTR = "static final int UINT8_MAX_RANGE = 32767;";
+
+
+    /**
+     * Static attribute for minRange.
+     */
+    public static final String UINT8_MIN_RANGE = "UINT8_MIN_RANGE";
+
+    /**
+     * Static attribute for maxRange.
+     */
+    public static final String UINT8_MAX_RANGE = "UINT8_MAX_RANGE";
+
+    /**
+     * Static attribute for minRange.
+     */
     public static final String INT_MIN_RANGE_ATTR = "static final int INT32_MIN_RANGE = -2147483648;\n";
 
     /**
diff --git a/plugin/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java b/plugin/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
index 251523b..3fa8b18 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
@@ -96,7 +96,7 @@
      * @param isList             is list attribute
      * @param pluginConfig       plugin configurations
      * @param compilerAnnotation compiler annotations for user defined data type
-     * @return javadocs.
+     * @return javaDocs.
      */
     public static String getJavaDoc(JavaDocType type, String name, boolean isList, YangPluginConfig pluginConfig,
                                     String compilerAnnotation) {
diff --git a/plugin/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java b/plugin/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java
index fe2d382..8a578c3 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java
@@ -403,7 +403,7 @@
     }
 
     /* When spaces are present in the given line. */
-    public static String whenSpaceIsPresent(String line, int lineSize) {
+    private static String whenSpaceIsPresent(String line, int lineSize) {
         StringBuilder stringBuilder = new StringBuilder();
         String append;
         if (line.length() > lineSize) {
diff --git a/plugin/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/AugmentListnerUtilTest.java b/plugin/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/AugmentListnerUtilTest.java
deleted file mode 100644
index 3cf6eaa..0000000
--- a/plugin/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/AugmentListnerUtilTest.java
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * 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.parser.impl.parseutils;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-import static org.onosproject.yangutils.parser.impl.parserutils.AugmentListenerUtil.clearOccurrenceCount;
-import static org.onosproject.yangutils.parser.impl.parserutils.AugmentListenerUtil.createValidNameForAugment;
-import static org.onosproject.yangutils.parser.impl.parserutils.AugmentListenerUtil.getAugmentJavaFileNameList;
-import static org.onosproject.yangutils.parser.impl.parserutils.AugmentListenerUtil.updateNameWhenHasMultipleOuccrrence;
-
-/**
- * Unit test case for augment listener utility.
- */
-public class AugmentListnerUtilTest {
-
-    private static final String TEST1 = "test1Node";
-    private static final String PARENT_PREFIX = "if";
-    private static final String NODE_PREFIX = "rf";
-
-    private static final String TEST1_AUGMENTED_NAME_WITHOUT_PREFIX = "AugmentedTest1Node";
-    private static final String TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI1 = "AugmentedTest1Node1";
-    private static final String TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI2 = "AugmentedTest1Node2";
-    private static final String TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI3 = "AugmentedTest1Node3";
-
-    private static final String TEST1_AUGMENTED_NAME_WITH_PREFIX = "AugmentedRfTest1Node";
-    private static final String TEST1_AUGMENTED_NAME_WITH_PREFIX_MULTI1 = "AugmentedRfTest1Node1";
-    private static final String TEST1_AUGMENTED_NAME_WITH_PREFIX_MULTI2 = "AugmentedRfTest1Node2";
-    private static final String TEST1_AUGMENTED_NAME_WITH_PREFIX_MULTI3 = "AugmentedRfTest1Node3";
-
-    private static String testString = "";
-
-    /**
-     * Unit test case when parent's prefix is present and one occurrence of augment node to update same target node.
-     */
-    @Test
-    public void testForAugmentNameWhenOneOuccrrenceWithParentPrefix() {
-        clearData();
-        testString = createValidNameForAugment(getStubNodeIdetifierWithParentPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX)));
-    }
-
-    /**
-     * Unit test case when no prefix and one occurrence of augment node to update same target node.
-     */
-    @Test
-    public void testForAugmentNameWhenOneOuccrrenceWithNoPrefix() {
-        clearData();
-        testString = createValidNameForAugment(getStubNodeIdetifierWithNoPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX)));
-    }
-
-    /**
-     * Unit test case when different prefix then parent is present and
-     * one occurrence of augment node to update same target node.
-     */
-    @Test
-    public void testForAugmentNameWhenOneOuccrrenceWithDiffPrefix() {
-        clearData();
-        testString = createValidNameForAugment(getStubNodeIdetifierWithDiffPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITH_PREFIX)));
-    }
-
-    /**
-     * Unit test case when parent's prefix is present and two occurrence of augment node to update
-     * same target node is present.
-     */
-    @Test
-    public void testForAugmentNameWhenTwoOuccrrenceWithParentPrefix() {
-        clearData();
-
-        createValidNameForAugment(getStubNodeIdetifierWithParentPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
-        testString = updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithParentPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
-
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI2)));
-    }
-
-    /**
-     * Unit test case when no prefix and two occurrence of augment node to update
-     * same target node is present.
-     */
-    @Test
-    public void testForAugmentNameWhenTwoOuccrrenceWithNoPrefix() {
-        clearData();
-
-        createValidNameForAugment(getStubNodeIdetifierWithNoPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
-        testString = updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithNoPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI2)));
-    }
-
-    /**
-     * Unit test case when different prefix then parent is present and
-     * two occurrence of augment node to update same target node is present.
-     */
-    @Test
-    public void testForAugmentNameWhenTwoOuccrrenceWithDiffPrefix() {
-        clearData();
-
-        createValidNameForAugment(getStubNodeIdetifierWithDiffPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
-        testString = updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithDiffPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITH_PREFIX_MULTI2)));
-    }
-
-    /**
-     * Unit test case when parent prefix and three occurrence of augment node to update
-     * same target node is present.
-     */
-    @Test
-    public void testForAugmentNameWhenThreeOuccrrenceWithParentPrefix() {
-        clearData();
-
-        createValidNameForAugment(getStubNodeIdetifierWithParentPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
-        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithParentPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
-
-        testString = updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithParentPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI3)));
-    }
-
-    /**
-     * Unit test case when no prefix and three occurrence of augment node to update
-     * same target node is present.
-     */
-    @Test
-    public void testForAugmentNameWhenThreeOuccrrenceNoPrefix() {
-        clearData();
-
-        createValidNameForAugment(getStubNodeIdetifierWithNoPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
-        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithNoPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
-
-        testString = updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithNoPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI3)));
-    }
-
-    /**
-     * Unit test case when different prefix and three occurrence of augment node to update
-     * same target node is present.
-     */
-    @Test
-    public void testForAugmentNameWhenThreeOuccrrenceWithDiffPrefix() {
-        clearData();
-
-        createValidNameForAugment(getStubNodeIdetifierWithDiffPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
-        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithDiffPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
-
-        testString = updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithDiffPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITH_PREFIX_MULTI3)));
-    }
-
-    /**
-     * Unit test case for when three occurrence is there and parent prefix is present,
-     * all the names need to be updated in list.
-     */
-    @Test
-    public void testForPreviousNamesGotUpdatedWhenParentPrefix() {
-        clearData();
-
-        createValidNameForAugment(getStubNodeIdetifierWithParentPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
-        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithParentPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
-        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithParentPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
-
-        testString = getAugmentJavaFileNameList().get(0);
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI1)));
-
-        testString = getAugmentJavaFileNameList().get(1);
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI2)));
-
-        testString = getAugmentJavaFileNameList().get(2);
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI3)));
-    }
-
-    /**
-     * Unit test case for when three occurrence is there and no prefix is present,
-     * all the names need to be updated in list.
-     */
-    @Test
-    public void testForPreviousNamesGotUpdatedWhenNoPrefix() {
-        clearData();
-
-        createValidNameForAugment(getStubNodeIdetifierWithNoPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
-        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithNoPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
-        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithNoPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
-
-        testString = getAugmentJavaFileNameList().get(0);
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI1)));
-
-        testString = getAugmentJavaFileNameList().get(1);
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI2)));
-
-        testString = getAugmentJavaFileNameList().get(2);
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI3)));
-    }
-
-    /**
-     * Unit test case for when three occurrence is there and different prefix is present,
-     * all the names need to be updated in list.
-     */
-    @Test
-    public void testForPreviousNamesGotUpdatedWhenDifferentPrefix() {
-        clearData();
-
-        createValidNameForAugment(getStubNodeIdetifierWithDiffPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
-        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithDiffPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
-        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithDiffPrefix(),
-                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
-
-        testString = getAugmentJavaFileNameList().get(0);
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITH_PREFIX_MULTI1)));
-
-        testString = getAugmentJavaFileNameList().get(1);
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITH_PREFIX_MULTI2)));
-
-        testString = getAugmentJavaFileNameList().get(2);
-        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITH_PREFIX_MULTI3)));
-    }
-
-    /**
-     * Returns stub node identifier when parent prefix is used.
-     *
-     * @param name name of node
-     * @param prefix prefix of node
-     * @return node identifier for node
-     */
-    private YangNodeIdentifier getStubNodeIdetifierWithParentPrefix() {
-        YangNodeIdentifier nodeId = new YangNodeIdentifier();
-        nodeId.setName(TEST1);
-        nodeId.setPrefix(PARENT_PREFIX);
-        return nodeId;
-    }
-
-    /**
-     * Returns stub node identifier when no prefix is used.
-     *
-     * @param name name of node
-     * @param prefix prefix of node
-     * @return node identifier for node
-     */
-    private YangNodeIdentifier getStubNodeIdetifierWithNoPrefix() {
-        YangNodeIdentifier nodeId = new YangNodeIdentifier();
-        nodeId.setName(TEST1);
-        nodeId.setPrefix(null);
-        return nodeId;
-    }
-
-    /**
-     * Returns stub node identifier when different prefix is used.
-     *
-     * @param name name of node
-     * @param prefix prefix of node
-     * @return node identifier for node
-     */
-    private YangNodeIdentifier getStubNodeIdetifierWithDiffPrefix() {
-        YangNodeIdentifier nodeId = new YangNodeIdentifier();
-        nodeId.setName(TEST1);
-        nodeId.setPrefix(NODE_PREFIX);
-        return nodeId;
-    }
-
-    /**
-     * Returns true if a prefix is present and it is not equals to parents prefix.
-     *
-     * @param nodeId YANG node identifier
-     * @param parentsPrefix parent's prefix
-     * @return true if a prefix is present and it is not equals to parents prefix
-     */
-    private static boolean isPrefixPresent(YangNodeIdentifier nodeId) {
-        return nodeId.getPrefix() != null && nodeId.getPrefix() != PARENT_PREFIX;
-    }
-
-    /**
-     * Clears list of names and occurrence count after each test case.
-     */
-    private void clearData() {
-        getAugmentJavaFileNameList().clear();
-        clearOccurrenceCount();
-    }
-
-}
diff --git a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/InterJarLinkerTest.java b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/InterJarLinkerTest.java
index 9889490..85f22ac 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/InterJarLinkerTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/InterJarLinkerTest.java
@@ -36,15 +36,15 @@
 import org.onosproject.yangutils.datamodel.YangGrouping;
 import org.onosproject.yangutils.datamodel.YangLeaf;
 import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
 import org.onosproject.yangutils.utils.io.YangPluginConfig;
+import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
+import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.parseJarFile;
 import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.parseJarFile;
 import static org.onosproject.yangutils.plugin.manager.YangPluginUtils.serializeDataModel;
 import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
 import static org.onosproject.yangutils.utils.UtilConstants.TEMP;
@@ -60,9 +60,6 @@
 
     private static final String TARGET = "target/interJarFileLinking/";
     private static final String YANG_FILES_DIR = "src/test/resources/interJarFileLinking/yangFiles/";
-    private static final String TARGET_RESOURCE_PATH = SLASH + TEMP + SLASH + YANG_RESOURCES + SLASH;
-    private static final String JAR_FILE_NAME = "onlab-test-1.7.0-SNAPSHOT.jar";
-    private static final String SER_FILE_NAME = "portPair.ser";
 
     private static final String FLOW_CLASSIFIER_FOLDER = "target/interJarFileLinking/org/onosproject"
             + "/yang/gen/v1/sfc/flowclassifier/rev20160524";
@@ -70,10 +67,12 @@
             + "/yang/gen/v1/sfc/portpair/rev20160524";
     private static final String FLOW_CLASSIFIER_MANAGER = FLOW_CLASSIFIER_FOLDER + SLASH + "FlowClassifierManager.java";
 
+    private MockJarFileProvider mockJarFileProvider = new MockJarFileProvider();
+
     /**
      * Unit test case for a single jar dependency.
      *
-     * @throws IOException when fails to do IO operations
+     * @throws IOException            when fails to do IO operations
      * @throws MojoExecutionException when fails to do mojo operations
      */
     @Test
@@ -84,13 +83,8 @@
         int size1 = utilManager.getYangFileInfoSet().size();
         utilManager.parseYangFileInfoSet();
 
-        provideTestJarFile();
+        mockJarFileProvider.provideTestJarFile(utilManager);
         utilManager.setYangFileInfoSet(removeFileInfoFromSet(utilManager.getYangFileInfoSet()));
-
-        for (String file : getListOfTestJar(TARGET)) {
-            addInterJarRootNodes(file);
-        }
-
         utilManager.resolveDependenciesUsingLinker();
 
         int size2 = utilManager.getYangFileInfoSet().size();
@@ -98,13 +92,13 @@
         assertThat(true, is(parseFileInfoSet(utilManager.getYangFileInfoSet().iterator())));
 
         deleteDirectory(TARGET);
-        deleteTestSerFile();
+        mockJarFileProvider.deleteTestSerFile(YANG_FILES_DIR);
     }
 
     /**
      * Unit test case for a multiple jar dependency.
      *
-     * @throws IOException when fails to do IO operations
+     * @throws IOException            when fails to do IO operations
      * @throws MojoExecutionException when fails to do mojo operations
      */
     @Test
@@ -115,11 +109,8 @@
         int size1 = utilManager.getYangFileInfoSet().size();
         utilManager.parseYangFileInfoSet();
 
-        provideTestJarFile();
+        mockJarFileProvider.provideTestJarFile(utilManager);
         utilManager.setYangFileInfoSet(removeFileInfoFromSet(utilManager.getYangFileInfoSet()));
-        for (String file : getListOfTestJar(TARGET)) {
-            addInterJarRootNodes(file);
-        }
 
         utilManager.resolveDependenciesUsingLinker();
         int size2 = utilManager.getYangFileInfoSet().size();
@@ -194,7 +185,7 @@
         testIfFlowClassifierFilesExists();
         testIfPortPairFileDoesNotExist();
         deleteDirectory(TARGET);
-        deleteTestSerFile();
+        mockJarFileProvider.deleteTestSerFile(YANG_FILES_DIR);
     }
 
     /**
@@ -234,26 +225,6 @@
     }
 
     /**
-     * Provides test jar files for linker.
-     *
-     * @throws IOException when fails to do IO operations
-     */
-    private void provideTestJarFile() throws IOException {
-
-        MavenProject project = new MavenProject();
-        serializeDataModel(TARGET, utilManager.getYangFileInfoSet(), project, false);
-        createTestJar();
-    }
-
-    /**
-     * Deletes serialized file.
-     */
-    private void deleteTestSerFile() {
-        File ser = new File(System.getProperty("user.dir") + SLASH + YANG_FILES_DIR + SER_FILE_NAME);
-        ser.delete();
-    }
-
-    /**
      * Parses file info list and returns true if file info list contains the serialized file info.
      *
      * @param yangFileInfoIterator file info list iterator
@@ -274,79 +245,121 @@
     }
 
     /**
-     * Returns list of test jar files.
-     *
-     * @param searchdir search directory
-     * @return list of test jar files
+     * Represents jar file provider for testing.
      */
-    private List<String> getListOfTestJar(String searchdir) {
-        List<String> jarFiles = new ArrayList<>();
+    private static class MockJarFileProvider {
 
-        File directory = new File(searchdir + "/");
-        File[] files = directory.listFiles();
+        private static final String TARGET = "target/interJarFileLinking/";
+        private static final String TARGET_RESOURCE_PATH = SLASH + TEMP + SLASH + YANG_RESOURCES + SLASH;
+        private static final String JAR_FILE_NAME = "onlab-test-1.7.0-SNAPSHOT.jar";
+        private static final String SER_FILE_NAME = "portPair.ser";
 
-        for (File file : files) {
-            if (!file.isDirectory()) {
-                jarFiles.add(file.toString());
+        /**
+         * Creates an instance of jar file provider.
+         */
+        MockJarFileProvider() {
+
+        }
+
+        /**
+         * Provides test jar files for linker.
+         *
+         * @throws IOException when fails to do IO operations
+         */
+        void provideTestJarFile(YangUtilManager utilManager) throws IOException {
+
+            MavenProject project = new MavenProject();
+            serializeDataModel(TARGET, utilManager.getYangFileInfoSet(), project, false);
+            createTestJar();
+
+            for (String file : getListOfTestJar(TARGET)) {
+                addInterJarRootNodes(file, utilManager);
             }
         }
 
-        return jarFiles;
-    }
-
-    /**
-     * Adds data model nodes of jar to file info set.
-     *
-     * @param jarFile jar file name
-     * @throws IOException when fails to do IO operations
-     */
-    private void addInterJarRootNodes(String jarFile) throws IOException {
-        try {
-            List<YangNode> interJarResolvedNodes = parseJarFile(jarFile, TARGET);
-
-            for (YangNode node : interJarResolvedNodes) {
-                YangFileInfo dependentFileInfo = new YangFileInfo();
-                node.setToTranslate(false);
-                dependentFileInfo.setRootNode(node);
-                dependentFileInfo.setForTranslator(false);
-                dependentFileInfo.setYangFileName(node.getName());
-                utilManager.getYangFileInfoSet().add(dependentFileInfo);
-            }
-        } catch (IOException e) {
-            throw new IOException("failed to resolve in interjar scenario.");
+        /**
+         * Deletes serialized file.
+         */
+        void deleteTestSerFile(String yangFileDir) {
+            File ser = new File(System.getProperty("user.dir") + SLASH + yangFileDir + SLASH + SER_FILE_NAME);
+            ser.delete();
         }
-    }
 
-    /**
-     * Creates a temporary test jar files.
-     */
-    private void createTestJar() {
+        /**
+         * Returns list of test jar files.
+         *
+         * @param searchDir search directory
+         * @return list of test jar files
+         */
+        private List<String> getListOfTestJar(String searchDir) {
+            List<String> jarFiles = new ArrayList<>();
 
-        File file = new File(TARGET + TARGET_RESOURCE_PATH);
-        File[] files = file.listFiles();
-        String[] source = new String[files.length];
+            File directory = new File(searchDir + "/");
+            File[] files = directory.listFiles();
 
-        for (int i = 0; i < files.length; i++) {
-            source[i] = files[i].toString();
-        }
-        byte[] buf = new byte[1024];
-
-        try {
-            String target = TARGET + JAR_FILE_NAME;
-            JarOutputStream out = new JarOutputStream(new FileOutputStream(target));
-            for (String element : source) {
-                FileInputStream in = new FileInputStream(element);
-                out.putNextEntry(new JarEntry(element));
-                int len;
-                while ((len = in.read(buf)) > 0) {
-                    out.write(buf, 0, len);
+            for (File file : files) {
+                if (!file.isDirectory()) {
+                    jarFiles.add(file.toString());
                 }
-                out.closeEntry();
-                in.close();
             }
-            out.close();
-        } catch (IOException e) {
+
+            return jarFiles;
+        }
+
+        /**
+         * Adds data model nodes of jar to file info set.
+         *
+         * @param jarFile     jar file name
+         * @param utilManager
+         * @throws IOException when fails to do IO operations
+         */
+        private void addInterJarRootNodes(String jarFile, YangUtilManager utilManager) throws IOException {
+            try {
+                List<YangNode> interJarResolvedNodes = parseJarFile(jarFile, TARGET);
+
+                for (YangNode node : interJarResolvedNodes) {
+                    YangFileInfo dependentFileInfo = new YangFileInfo();
+                    node.setToTranslate(false);
+                    dependentFileInfo.setRootNode(node);
+                    dependentFileInfo.setForTranslator(false);
+                    dependentFileInfo.setYangFileName(node.getName());
+                    utilManager.getYangFileInfoSet().add(dependentFileInfo);
+                }
+            } catch (IOException e) {
+                throw new IOException("failed to resolve in interjar scenario.");
+            }
+        }
+
+        /**
+         * Creates a temporary test jar files.
+         */
+        private void createTestJar() {
+
+            File file = new File(TARGET + TARGET_RESOURCE_PATH);
+            File[] files = file.listFiles();
+            String[] source = new String[files.length];
+
+            for (int i = 0; i < files.length; i++) {
+                source[i] = files[i].toString();
+            }
+            byte[] buf = new byte[1024];
+
+            try {
+                String target = TARGET + JAR_FILE_NAME;
+                JarOutputStream out = new JarOutputStream(new FileOutputStream(target));
+                for (String element : source) {
+                    FileInputStream in = new FileInputStream(element);
+                    out.putNextEntry(new JarEntry(element));
+                    int len;
+                    while ((len = in.read(buf)) > 0) {
+                        out.write(buf, 0, len);
+                    }
+                    out.closeEntry();
+                    in.close();
+                }
+                out.close();
+            } catch (IOException e) {
+            }
         }
     }
-
 }