[ONOS-5141],[ONOS-5142],[ONOS-5165],[ONOS-4881],[ONOS-4889],[ONOS-5104],[ONOS-5138] defect fixes

Change-Id: I435dc0cf9afae7230fc98b57f33af104e0e38e67
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/DefaultLocationInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/DefaultLocationInfo.java
new file mode 100644
index 0000000..727aeec
--- /dev/null
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/DefaultLocationInfo.java
@@ -0,0 +1,60 @@
+/*
+ * 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;
+
+/**
+ * Represents the implementation of location info.
+ */
+public class DefaultLocationInfo implements LocationInfo {
+
+    private transient int lineNumber;
+    private transient int charPosition;
+    private transient String fileName;
+
+    public DefaultLocationInfo() {
+    }
+
+    @Override
+    public int getLineNumber() {
+        return lineNumber;
+    }
+
+    @Override
+    public int getCharPosition() {
+        return charPosition;
+    }
+
+    @Override
+    public void setLineNumber(int lineNumber) {
+        this.lineNumber = lineNumber;
+    }
+
+    @Override
+    public void setCharPosition(int charPositionInLine) {
+        this.charPosition = charPositionInLine;
+    }
+
+    @Override
+    public String getFileName() {
+        return fileName;
+    }
+
+    @Override
+    public void setFileName(String name) {
+        this.fileName = name;
+    }
+}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/LocationInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/LocationInfo.java
index edd8849..d5dbbde 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/LocationInfo.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/LocationInfo.java
@@ -50,4 +50,18 @@
      * @param charPositionInLine character position of YANG construct in file
      */
     void setCharPosition(int charPositionInLine);
+
+    /**
+     * Returns YANG file name.
+     *
+     * @return YANG file name
+     */
+    String getFileName();
+
+    /**
+     * Sets YANG file name
+     *
+     * @param name YANG file name
+     */
+    void setFileName(String name);
 }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppDataStructure.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppDataStructure.java
index d987ad4..9514a50 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppDataStructure.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppDataStructure.java
@@ -26,7 +26,7 @@
 /**
  * Represents data model node to maintain information defined in YANG app-data-structure.
  */
-public class YangAppDataStructure
+public class YangAppDataStructure extends DefaultLocationInfo
         implements Parsable, Serializable {
 
     private static final long serialVersionUID = 806201602L;
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppErrorInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppErrorInfo.java
index 213dccf..3b72e37 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppErrorInfo.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppErrorInfo.java
@@ -21,7 +21,7 @@
 /**
  * Represents data model to maintain yang app error information.
  */
-public class YangAppErrorInfo implements Serializable {
+public class YangAppErrorInfo extends DefaultLocationInfo implements Serializable {
 
     private static final long serialVersionUID = 807201693L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppExtended.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppExtended.java
index 5423361..df5057b 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppExtended.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppExtended.java
@@ -25,7 +25,7 @@
 /**
  * Represents data model node to maintain information defined in YANG extended name.
  */
-public class YangAppExtended
+public class YangAppExtended extends DefaultLocationInfo
         implements Parsable, Serializable {
 
     private static final long serialVersionUID = 806201602L;
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAtomicPath.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAtomicPath.java
index f0bb617..14ff001 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAtomicPath.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAtomicPath.java
@@ -21,7 +21,7 @@
 /**
  * Representation of data model node to maintain absolute path defined in YANG path-arg.
  */
-public class YangAtomicPath implements Serializable {
+public class YangAtomicPath extends DefaultLocationInfo implements Serializable {
 
     private static final long serialVersionUID = 806201688L;
 
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 1d4f2e9..d381fd4 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java
@@ -260,8 +260,11 @@
     public void detectSelfCollision(String identifierName, YangConstructType dataType)
             throws DataModelException {
         if (getName().equals(identifierName)) {
-            throw new DataModelException("YANG file error: Duplicate input identifier detected, same as input \""
-                    + getName() + "\"");
+            throw new DataModelException("YANG file error: Duplicate input identifier detected, same as input \"" +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition() +
+                    " in " + getFileName() + "\"");
         }
     }
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBase.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBase.java
index 8d118d2..0d71d32 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBase.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBase.java
@@ -15,11 +15,11 @@
  */
 package org.onosproject.yangutils.datamodel;
 
+import java.io.Serializable;
+
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
 
-import java.io.Serializable;
-
 /**
  * Reference RFC 6020.
  *
@@ -39,7 +39,7 @@
 /**
  * Represents data model node to maintain information defined in YANG base.
  */
- public class YangBase implements Resolvable, Serializable {
+public class YangBase extends DefaultLocationInfo implements Resolvable, Serializable {
 
     private static final long serialVersionUID = 806201693L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBelongsTo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBelongsTo.java
index 9cb8dde..85d7652 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBelongsTo.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBelongsTo.java
@@ -51,7 +51,7 @@
 /**
  * Represents the belongs-to data type information.
  */
-public class YangBelongsTo implements Parsable, LocationInfo, Serializable {
+public class YangBelongsTo extends DefaultLocationInfo implements Parsable, Serializable {
 
     private static final long serialVersionUID = 806201639L;
 
@@ -77,12 +77,6 @@
      */
     private String prefix;
 
-    // Error Line number.
-    private transient int lineNumber;
-
-    // Error character position.
-    private transient int charPosition;
-
     /**
      * Create a belongs to object.
      */
@@ -174,26 +168,6 @@
         // TODO auto-generated method stub, to be implemented by parser
     }
 
-    @Override
-    public int getLineNumber() {
-        return lineNumber;
-    }
-
-    @Override
-    public int getCharPosition() {
-        return charPosition;
-    }
-
-    @Override
-    public void setLineNumber(int lineNumber) {
-        this.lineNumber = lineNumber;
-    }
-
-    @Override
-    public void setCharPosition(int charPositionInLine) {
-        charPosition = charPositionInLine;
-    }
-
     /**
      * Links the belongs to with a module.
      *
@@ -211,7 +185,10 @@
             }
         }
         DataModelException exception = new DataModelException("YANG file error : Module " + belongsToModuleName +
-                "to which sub-module belongs to is not found.");
+                "to which sub-module belongs to is not found. " + " in " +
+                getLineNumber() + " at " +
+                getCharPosition() +
+                " in " + getFileName());
         exception.setLine(getLineNumber());
         exception.setCharPosition(getCharPosition());
         throw exception;
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBinary.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBinary.java
index a752a80..47b47d0 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBinary.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBinary.java
@@ -28,7 +28,8 @@
  * The binary built-in type represents any binary data,
  * i.e., a sequence of octets.
  */
-public class YangBinary implements YangBuiltInDataTypeInfo<YangBinary>, Serializable, Comparable<YangBinary> {
+public class YangBinary extends DefaultLocationInfo implements YangBuiltInDataTypeInfo<YangBinary>,
+        Serializable, Comparable<YangBinary> {
 
     private static final long serialVersionUID = 2106201608L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBit.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBit.java
index 5db6b54..1384fbe 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBit.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBit.java
@@ -47,7 +47,7 @@
 /**
  * Represents the bit data type information.
  */
-public class YangBit implements YangCommonInfo, Parsable, Serializable {
+public class YangBit extends DefaultLocationInfo implements YangCommonInfo, Parsable, Serializable {
 
     private static final long serialVersionUID = 806201640L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBits.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBits.java
index d383890..89562d1 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBits.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBits.java
@@ -37,7 +37,7 @@
 /**
  * Represents the bits data type information.
  */
-public class YangBits implements Parsable, Serializable {
+public class YangBits extends DefaultLocationInfo implements Parsable, Serializable {
 
     private static final long serialVersionUID = 806201641L;
     private static final String SPACE = " ";
@@ -105,7 +105,11 @@
             bit = bitNameMap.get(bitName);
             if (bit == null) {
                 throw new DataModelException("YANG file error: Unable to find " +
-                                                     "corresponding bit position for bit name: " + bitName);
+                        "corresponding bit position for bit name: " + bitName +
+                        " in " +
+                        getLineNumber() + " at " +
+                        getCharPosition() +
+                        " in " + getFileName());
             }
             bitDataSet.set(bit.getPosition());
         }
@@ -176,11 +180,17 @@
     public void addBitInfo(YangBit bitInfo) throws DataModelException {
         if (bitNameMap.put(bitInfo.getBitName(), bitInfo) != null) {
             throw new DataModelException("YANG file error: Duplicate bit name detected, same as bit name \""
-                                                 + bitInfo.getBitName() + "\"");
+                    + bitInfo.getBitName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition() +
+                    " in " + getFileName() + "\"");
         }
         if (bitPositionMap.put(bitInfo.getPosition(), bitInfo) != null) {
             throw new DataModelException("YANG file error: Duplicate bit position detected, same as bit position \""
-                    + bitInfo.getPosition() + "\"");
+                    + bitInfo.getPosition() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition() +
+                    " in " + getFileName() + "\"");
         }
     }
 
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 38f4e01..7e6d875 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
@@ -368,7 +368,10 @@
             throws DataModelException {
         if (!(getParent() instanceof YangChoice || getParent() instanceof YangAugment)) {
             throw new DataModelException("Internal Data Model Tree Error: Invalid/Missing holder in case " +
-                    getName());
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition() +
+                    " in " + getFileName());
         }
         // Traverse up in tree to ask parent choice start collision detection.
         ((CollisionDetector) getParent()).detectCollidingChild(identifierName, dataType);
@@ -381,7 +384,10 @@
         if (dataType == CASE_DATA) {
             if (getName().equals(identifierName)) {
                 throw new DataModelException("YANG File Error: Identifier collision detected in case \"" +
-                        getName() + "\"");
+                        getName() + " in " +
+                        getLineNumber() + " at " +
+                        getCharPosition() +
+                        " in " + getFileName() + "\"");
             }
             return;
         }
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 1aa2dfa..3719a98 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCompilerAnnotation.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCompilerAnnotation.java
@@ -28,7 +28,7 @@
 /**
  * Represents data model node to maintain information defined in YANG compiler-annotation.
  */
-public class YangCompilerAnnotation
+public class YangCompilerAnnotation extends DefaultLocationInfo
         implements Parsable, YangXPathResolver, Resolvable, Serializable {
 
     private static final long serialVersionUID = 806201602L;
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 606c7f7..16f826a 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
@@ -16,15 +16,15 @@
 
 package org.onosproject.yangutils.datamodel;
 
+import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
+import org.onosproject.yangutils.datamodel.utils.Parsable;
+import org.onosproject.yangutils.datamodel.utils.YangConstructType;
+
 import java.util.ArrayList;
 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;
-
 import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
 
 /*-
@@ -415,7 +415,10 @@
             for (YangLeaf leaf : leaves) {
                 if (leaf.isConfig()) {
                     throw new DataModelException("If a container has \"config\" set to \"false\", no node underneath " +
-                            "it can have \"config\" set to \"true\".");
+                                                         "it can have \"config\" set to \"true\"." + getName() + " in " +
+                                                         getLineNumber() + " at " +
+                                                         getCharPosition() +
+                                                         " in " + getFileName() + "\"");
                 }
             }
         }
@@ -424,7 +427,11 @@
             for (YangLeafList leafList : leafLists) {
                 if (leafList.isConfig()) {
                     throw new DataModelException("If a container has \"config\" set to \"false\", no node underneath " +
-                            "it can have \"config\" set to \"true\".");
+                                                         "it can have \"config\" set to \"true\"." +
+                                                         getName() + " in " +
+                                                         getLineNumber() + " at " +
+                                                         getCharPosition() +
+                                                         " in " + getFileName() + "\"");
                 }
             }
         }
@@ -441,8 +448,11 @@
     public void detectSelfCollision(String identifierName, YangConstructType dataType)
             throws DataModelException {
         if (getName().equals(identifierName)) {
-            throw new DataModelException("YANG file error: Duplicate input identifier detected, same as container \""
-                    + getName() + "\"");
+            throw new DataModelException("YANG file error: Duplicate input identifier detected, same as container \"" +
+                                                 getName() + " in " +
+                                                 getLineNumber() + " at " +
+                                                 getCharPosition() +
+                                                 " in " + getFileName() + "\"");
         }
     }
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDecimal64.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDecimal64.java
index a4c40b1..2c8fa80 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDecimal64.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDecimal64.java
@@ -31,7 +31,7 @@
 /**
  * Represents YANG decimal 64.
  */
-public class YangDecimal64<T>
+public class YangDecimal64<T> extends DefaultLocationInfo
         implements YangBuiltInDataTypeInfo<YangDecimal64>, Parsable, Serializable, Comparable<YangDecimal64> {
 
     private static final long serialVersionUID = 8006201668L;
@@ -247,12 +247,21 @@
             }
             // If range is not matched then throw error
             if (!isMatched) {
-                throw new DataModelException("YANG file error : decimal64 validation failed.");
+                throw new DataModelException("YANG file error : decimal64 validation failed. " +
+                        " in " +
+                        getLineNumber() + " at " +
+                        getCharPosition() +
+                        " in " + getFileName() + "\"");
             }
         } else {
             // Check value is in fraction-digits decimal64 value range
             if (!FractionDigits.isValueInDecimal64Range(this.value, getFractionDigit())) {
-                throw new DataModelException("YANG file error : decimal64 validation failed.");
+                throw new DataModelException("YANG file error : decimal64 validation failed. " +
+                        " in " +
+                        getLineNumber() + " at " +
+                        getCharPosition() +
+                        " in " + getFileName() + "\"");
+
             }
         }
     }
@@ -274,13 +283,21 @@
         while (rangeListIterator.hasNext()) {
             YangRangeInterval rangeInterval = rangeListIterator.next();
             if (!(FractionDigits.isValueInDecimal64Range(((YangDecimal64) rangeInterval.getStartValue()).getValue(),
-                                                         getFractionDigit()))) {
-                throw new DataModelException("YANG file error : range validation failed.");
+                    getFractionDigit()))) {
+                throw new DataModelException("YANG file error : range validation failed. " +
+                        " in " +
+                        getLineNumber() + " at " +
+                        getCharPosition() +
+                        " in " + getFileName() + "\"");
             }
 
             if (!(FractionDigits.isValueInDecimal64Range(((YangDecimal64) rangeInterval.getEndValue()).getValue(),
-                                                         getFractionDigit()))) {
-                throw new DataModelException("YANG file error : range validation failed.");
+                    getFractionDigit()))) {
+                throw new DataModelException("YANG file error : range validation failed. " +
+                        " in " +
+                        getLineNumber() + " at " +
+                        getCharPosition() +
+                        " in " + getFileName() + "\"");
             }
         }
     }
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 f7d53cc..f766271 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDerivedInfo.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDerivedInfo.java
@@ -46,8 +46,8 @@
  *
  * @param <T> extended information.
  */
-public class YangDerivedInfo<T>
-        implements LocationInfo, Cloneable, Serializable {
+public class YangDerivedInfo<T> extends DefaultLocationInfo
+        implements Cloneable, Serializable {
 
     private static final long serialVersionUID = 806201641L;
 
@@ -64,16 +64,6 @@
     private T resolvedExtendedInfo;
 
     /**
-     * Line number of pattern restriction in YANG file.
-     */
-    private transient int lineNumber;
-
-    /**
-     * Position of pattern restriction in line.
-     */
-    private transient int charPositionInLine;
-
-    /**
      * Effective built-in type, requried in case type of typedef is again a
      * derived type. This information is to be added during linking.
      */
@@ -133,26 +123,6 @@
         this.resolvedExtendedInfo = resolvedExtendedInfo;
     }
 
-    @Override
-    public int getLineNumber() {
-        return lineNumber;
-    }
-
-    @Override
-    public int getCharPosition() {
-        return charPositionInLine;
-    }
-
-    @Override
-    public void setLineNumber(int lineNumber) {
-        this.lineNumber = lineNumber;
-    }
-
-    @Override
-    public void setCharPosition(int charPositionInLine) {
-        this.charPositionInLine = charPositionInLine;
-    }
-
     /**
      * Returns the length restriction string.
      *
@@ -268,7 +238,10 @@
                 } else {
                     if (!(baseType.getDataTypeExtendedInfo() instanceof YangRangeRestriction)) {
                         throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " +
-                                "type.");
+                                "type." + " in " +
+                                getLineNumber() + " at " +
+                                getCharPosition()
+                                + " in " + getFileName() + "\"");
                     }
                     resolveRangeRestriction((YangRangeRestriction) baseType.getDataTypeExtendedInfo());
                     /*
@@ -294,7 +267,10 @@
                 } else {
                     if (!(baseType.getDataTypeExtendedInfo() instanceof YangStringRestriction)) {
                         throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " +
-                                "type.");
+                                "type." + " in " +
+                                getLineNumber() + " at " +
+                                getCharPosition()
+                                + " in " + getFileName() + "\"");
                     }
                     resolveStringRestriction((YangStringRestriction) baseType.getDataTypeExtendedInfo());
                     /*
@@ -316,7 +292,10 @@
                 } else {
                     if (!(baseType.getDataTypeExtendedInfo() instanceof YangRangeRestriction)) {
                         throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " +
-                                "type.");
+                                "type." + " in " +
+                                getLineNumber() + " at " +
+                                getCharPosition()
+                                + " in " + getFileName() + "\"");
                     }
                     resolveBinaryRestriction((YangRangeRestriction) baseType.getDataTypeExtendedInfo());
                     /*
@@ -340,7 +319,10 @@
                         if (!(((YangDecimal64) baseType.getDataTypeExtendedInfo())
                                 .getRangeRestrictedExtendedInfo() instanceof YangRangeRestriction)) {
                             throw new DataModelException("Linker error: Referred typedef restriction info is" +
-                                    " of invalid type.");
+                                    " of invalid type." + " in " +
+                                    getLineNumber() + " at " +
+                                    getCharPosition()
+                                    + " in " + getFileName() + "\"");
                         }
                         resolveRangeRestriction((YangRangeRestriction) ((YangDecimal64) baseType
                                 .getDataTypeExtendedInfo()).getRangeRestrictedExtendedInfo());
@@ -353,7 +335,11 @@
                     }
 
                 } else {
-                    throw new DataModelException("Linker error: Unable to find type extended info for decimal64.");
+                    throw new DataModelException("Linker error: Unable to find type extended info for decimal64." +
+                            "" + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + "\"");
                 }
             }
         }
@@ -368,12 +354,20 @@
                     && getPatternRestriction() == null) {
                 return RESOLVED;
             } else {
-                throw new DataModelException("YANG file error: Restrictions can't be applied to a given type");
+                throw new DataModelException("YANG file error: Restrictions can't be applied to a given type "
+                        + " in " +
+                        getLineNumber() + " at " +
+                        getCharPosition()
+                        + " in " + getFileName() + "\"");
             }
         }
 
         // Throw exception for unsupported types
-        throw new DataModelException("Linker error: Unable to process the derived type.");
+        throw new DataModelException("Linker error: Unable to process the derived type. "
+                + " in " +
+                getLineNumber() + " at " +
+                getCharPosition()
+                + " in " + getFileName() + "\"");
     }
 
     /**
@@ -389,7 +383,11 @@
 
         //Check whether the referred typedef is resolved.
         if (baseType.getResolvableStatus() != INTRA_FILE_RESOLVED && baseType.getResolvableStatus() != RESOLVED) {
-            throw new DataModelException("Linker Error: Referred typedef is not resolved for type.");
+            throw new DataModelException("Linker Error: Referred typedef is not resolved for type."
+                    + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
 
         /*
@@ -418,7 +416,10 @@
             } else {
                 if (!(refDerivedInfo.getResolvedExtendedInfo() instanceof YangRangeRestriction)) {
                     throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " +
-                            "type.");
+                            "type." + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + "\"");
                 }
                 resolveRangeRestriction((YangRangeRestriction) refDerivedInfo.getResolvedExtendedInfo());
                 /*
@@ -444,7 +445,10 @@
             } else {
                 if (!(refDerivedInfo.getResolvedExtendedInfo() instanceof YangStringRestriction)) {
                     throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " +
-                            "type.");
+                            "type." + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + "\"");
                 }
                 resolveStringRestriction((YangStringRestriction) refDerivedInfo.getResolvedExtendedInfo());
                 /*
@@ -466,7 +470,10 @@
             } else {
                 if (!(refDerivedInfo.getResolvedExtendedInfo() instanceof YangRangeRestriction)) {
                     throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " +
-                            "type.");
+                            "type." + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + "\"");
                 }
                 resolveBinaryRestriction((YangRangeRestriction) refDerivedInfo.getResolvedExtendedInfo());
                 /*
@@ -488,7 +495,10 @@
             } else {
                 if (!(refDerivedInfo.getResolvedExtendedInfo() instanceof YangRangeRestriction)) {
                     throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " +
-                            "type.");
+                            "type." + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + "\"");
                 }
                 resolveRangeRestriction((YangRangeRestriction) refDerivedInfo
                         .getResolvedExtendedInfo());
@@ -523,8 +533,9 @@
         if (!Strings.isNullOrEmpty(getRangeRestrictionString())) {
             DataModelException dataModelException = new DataModelException("YANG file error: Range restriction " +
                     "should't be present for string data type.");
-            dataModelException.setLine(lineNumber);
-            dataModelException.setCharPosition(charPositionInLine);
+            dataModelException.setLine(getLineNumber());
+            dataModelException.setCharPosition(getCharPosition());
+            dataModelException.setFileName(getFileName());
             throw dataModelException;
         }
 
@@ -574,8 +585,9 @@
             DataModelException dataModelException =
                     new DataModelException("YANG file error: for binary " +
                             "range restriction or pattern restriction is not allowed.");
-            dataModelException.setLine(lineNumber);
-            dataModelException.setCharPosition(charPositionInLine);
+            dataModelException.setLine(getLineNumber());
+            dataModelException.setCharPosition(getCharPosition());
+            dataModelException.setFileName(getFileName());
             throw dataModelException;
         }
 
@@ -657,8 +669,8 @@
          * carry out self resolution.
          */
         if (refLengthRestriction == null) {
-            YangRangeRestriction curLengthRestriction = processLengthRestriction(null, lineNumber,
-                    charPositionInLine, false, getLengthRestrictionString());
+            YangRangeRestriction curLengthRestriction = processLengthRestriction(null, getLineNumber(),
+                    getCharPosition(), false, getLengthRestrictionString());
             return curLengthRestriction;
         }
 
@@ -666,8 +678,8 @@
          * Carry out self resolution based with obtained effective built-in type
          * and MIN/MAX values as per the referred typedef's values.
          */
-        YangRangeRestriction curLengthRestriction = processLengthRestriction(refLengthRestriction, lineNumber,
-                charPositionInLine, true, getLengthRestrictionString());
+        YangRangeRestriction curLengthRestriction = processLengthRestriction(refLengthRestriction, getLineNumber(),
+                getCharPosition(), true, getLengthRestrictionString());
 
         // Resolve the range with referred typedef's restriction.
         resolveLengthAndRangeRestriction(refLengthRestriction, curLengthRestriction);
@@ -687,14 +699,19 @@
             throws DataModelException {
         for (Object curInterval : curRestriction.getAscendingRangeIntervals()) {
             if (!(curInterval instanceof YangRangeInterval)) {
-                throw new DataModelException("Linker error: Current range intervals not processed correctly.");
+                throw new DataModelException("Linker error: Current range intervals not processed correctly."
+                        + " in " +
+                        getLineNumber() + " at " +
+                        getCharPosition()
+                        + " in " + getFileName() + "\"");
             }
             try {
                 refRestriction.isValidInterval((YangRangeInterval) curInterval);
             } catch (DataModelException e) {
                 DataModelException dataModelException = new DataModelException(e);
-                dataModelException.setLine(lineNumber);
-                dataModelException.setCharPosition(charPositionInLine);
+                dataModelException.setLine(getLineNumber());
+                dataModelException.setCharPosition(getCharPosition());
+                dataModelException.setFileName(getFileName());
                 throw dataModelException;
             }
         }
@@ -716,8 +733,9 @@
         if (!Strings.isNullOrEmpty(getLengthRestrictionString()) || getPatternRestriction() != null) {
             DataModelException dataModelException = new DataModelException("YANG file error: Length/Pattern " +
                     "restriction should't be present for int/uint/decimal data type.");
-            dataModelException.setLine(lineNumber);
-            dataModelException.setCharPosition(charPositionInLine);
+            dataModelException.setLine(getLineNumber());
+            dataModelException.setCharPosition(getCharPosition());
+            dataModelException.setFileName(getFileName());
             throw dataModelException;
         }
 
@@ -743,8 +761,8 @@
          * carry out self resolution.
          */
         if (refRangeRestriction == null) {
-            YangRangeRestriction curRangeRestriction = processRangeRestriction(null, lineNumber,
-                    charPositionInLine, false, getRangeRestrictionString(), getEffectiveBuiltInType());
+            YangRangeRestriction curRangeRestriction = processRangeRestriction(null, getLineNumber(),
+                    getCharPosition(), false, getRangeRestrictionString(), getEffectiveBuiltInType());
             setResolvedExtendedInfo((T) curRangeRestriction);
             return;
         }
@@ -753,8 +771,8 @@
          * Carry out self resolution based with obtained effective built-in type
          * and MIN/MAX values as per the referred typedef's values.
          */
-        YangRangeRestriction curRangeRestriction = processRangeRestriction(refRangeRestriction, lineNumber,
-                charPositionInLine, true, getRangeRestrictionString(), getEffectiveBuiltInType());
+        YangRangeRestriction curRangeRestriction = processRangeRestriction(refRangeRestriction, getLineNumber(),
+                getCharPosition(), true, getRangeRestrictionString(), getEffectiveBuiltInType());
 
         // Resolve the range with referred typedef's restriction.
         resolveLengthAndRangeRestriction(refRangeRestriction, curRangeRestriction);
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEntityToResolveInfoImpl.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEntityToResolveInfoImpl.java
index 8fe6b22..eac5d0c 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEntityToResolveInfoImpl.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEntityToResolveInfoImpl.java
@@ -22,7 +22,8 @@
  *
  * @param <T> type of entity being resolved, uses / grouping
  */
-public class YangEntityToResolveInfoImpl<T> implements YangEntityToResolveInfo<T>, Serializable, LocationInfo {
+public class YangEntityToResolveInfoImpl<T> extends DefaultLocationInfo
+        implements YangEntityToResolveInfo<T>, Serializable {
 
     private static final long serialVersionUID = 806201659L;
 
@@ -36,16 +37,6 @@
      */
     private YangNode holderOfEntityToResolve;
 
-    /**
-     * Error line number.
-     */
-    private transient int lineNumber;
-
-    /**
-     * Error character position in number.
-     */
-    private transient int charPositionInLine;
-
     @Override
     public T getEntityToResolve() {
         return entityToResolve;
@@ -66,23 +57,4 @@
         this.holderOfEntityToResolve = holderOfEntityToResolve;
     }
 
-    @Override
-    public int getLineNumber() {
-        return lineNumber;
-    }
-
-    @Override
-    public int getCharPosition() {
-        return charPositionInLine;
-    }
-
-    @Override
-    public void setLineNumber(int lineNumber) {
-        this.lineNumber = lineNumber;
-    }
-
-    @Override
-    public void setCharPosition(int charPositionInLine) {
-        this.charPositionInLine = charPositionInLine;
-    }
 }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEnum.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEnum.java
index 04ea232..47b9381 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEnum.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEnum.java
@@ -51,7 +51,8 @@
 /**
  * Represents the ENUM data type information.
  */
-public class YangEnum implements YangCommonInfo, Parsable, Comparable<YangEnum>, Serializable {
+public class YangEnum extends DefaultLocationInfo implements YangCommonInfo, Parsable, Comparable<YangEnum>,
+        Serializable {
 
     private static final long serialVersionUID = 806201643L;
 
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 a7c6510..f0bb31e 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEnumeration.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEnumeration.java
@@ -97,7 +97,11 @@
     public void addEnumInfo(YangEnum enumInfo)
             throws DataModelException {
         if (!getEnumSet().add(enumInfo)) {
-            throw new DataModelException("YANG ENUM already exists");
+            throw new DataModelException("YANG ENUM already exists " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition() +
+                    " in " + getFileName() + "\"");
         }
     }
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangExtension.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangExtension.java
index 05894fb..294de47 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangExtension.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangExtension.java
@@ -60,7 +60,7 @@
 /**
  * Represents data model node to maintain information defined in YANG extension.
  */
-public class YangExtension
+public class YangExtension extends DefaultLocationInfo
         implements YangCommonInfo, Serializable, Parsable {
 
     private static final long serialVersionUID = 806201605L;
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangFeature.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangFeature.java
index 3a7557c..5fcaadf 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangFeature.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangFeature.java
@@ -55,7 +55,8 @@
 /**
  * Represents data model node to maintain information defined in YANG feature.
  */
-public class YangFeature implements YangCommonInfo, Parsable, YangIfFeatureHolder, Serializable {
+public class YangFeature extends DefaultLocationInfo
+        implements YangCommonInfo, Parsable, YangIfFeatureHolder, Serializable {
 
     private static final long serialVersionUID = 806201635L;
 
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 9bd7720..03a24a4 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangGrouping.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangGrouping.java
@@ -319,7 +319,10 @@
             throws DataModelException {
         if (getName().equals(identifierName)) {
             throw new DataModelException("YANG file error: Duplicate input identifier detected, same as grouping \"" +
-                    getName() + "\"");
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition() +
+                    " in " + getFileName() + "\"");
         }
     }
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIdentityRef.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIdentityRef.java
index dd0caf7..db0b9f2 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIdentityRef.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIdentityRef.java
@@ -46,7 +46,7 @@
  */
 public class YangIdentityRef
         extends YangNode
-        implements Cloneable, Parsable, Resolvable, Serializable, LocationInfo {
+        implements Cloneable, Parsable, Resolvable, Serializable {
 
     private static final long serialVersionUID = 806201692L;
 
@@ -69,12 +69,6 @@
      */
     private boolean isIdentityForInterFileGroupingResolution;
 
-    // Error line number.
-    private transient int lineNumber;
-
-    // Error character position in number.
-    private transient int charPositionInLine;
-
     // Creates a specific identityref of node.
     public YangIdentityRef() {
         super(YangNodeType.IDENTITYREF_NODE, null);
@@ -122,7 +116,11 @@
         YangIdentity identity = getReferredIdentity();
 
         if (identity == null) {
-            throw new DataModelException("Linker Error: Identity information is missing.");
+            throw new DataModelException("Linker Error: Identity information is missing. " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition() +
+                    " in " + getFileName() + "\"");
         }
 
         while (identity.getBaseNode() != null) {
@@ -233,26 +231,6 @@
         this.referredIdentity = referredIdentity;
     }
 
-    @Override
-    public int getLineNumber() {
-        return lineNumber;
-    }
-
-    @Override
-    public int getCharPosition() {
-        return charPositionInLine;
-    }
-
-    @Override
-    public void setLineNumber(int lineNumber) {
-        this.lineNumber = lineNumber;
-    }
-
-    @Override
-    public void setCharPosition(int charPositionInLine) {
-        this.charPositionInLine = charPositionInLine;
-    }
-
     public boolean isIdentityForInterFileGroupingResolution() {
         return isIdentityForInterFileGroupingResolution;
     }
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 151477d..5134356 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIfFeature.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIfFeature.java
@@ -46,7 +46,8 @@
 /**
  * Represents data model node to maintain information defined in YANG if-feature.
  */
-public class YangIfFeature implements Parsable, Resolvable, Serializable {
+public class YangIfFeature extends DefaultLocationInfo
+        implements Parsable, Resolvable, Serializable {
 
     private static final long serialVersionUID = 806201635L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangImport.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangImport.java
index f6405e1..b60f742 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangImport.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangImport.java
@@ -69,8 +69,8 @@
 /**
  * Represents the information about the imported modules.
  */
-public class YangImport
-        implements Parsable, LocationInfo, Serializable {
+public class YangImport extends DefaultLocationInfo
+        implements Parsable, Serializable {
 
     private static final long serialVersionUID = 806201642L;
 
@@ -99,12 +99,6 @@
      */
     private YangNode importedNode;
 
-    // Error Line number.
-    private transient int lineNumber;
-
-    // Error character position.
-    private transient int charPosition;
-
     /**
      * Creates a YANG import.
      */
@@ -218,26 +212,6 @@
         this.importedNode = importedNode;
     }
 
-    @Override
-    public int getLineNumber() {
-        return lineNumber;
-    }
-
-    @Override
-    public int getCharPosition() {
-        return charPosition;
-    }
-
-    @Override
-    public void setLineNumber(int lineNumber) {
-        this.lineNumber = lineNumber;
-    }
-
-    @Override
-    public void setCharPosition(int charPositionInLine) {
-        charPosition = charPositionInLine;
-    }
-
     /**
      * Adds reference to an import.
      *
@@ -284,6 +258,7 @@
                 + importedModuleName + " with revision " + importedModuleRevision + " is not found.");
         exception.setLine(getLineNumber());
         exception.setCharPosition(getCharPosition());
+        exception.setFileName(getFileName());
         throw exception;
     }
 }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInclude.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInclude.java
index 48b796f..68c093c 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInclude.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInclude.java
@@ -43,8 +43,8 @@
 /**
  * Represents the information about the included sub-modules.
  */
-public class YangInclude
-        implements Parsable, LocationInfo, Serializable {
+public class YangInclude extends DefaultLocationInfo
+        implements Parsable, Serializable {
 
     private static final long serialVersionUID = 806201644L;
 
@@ -64,12 +64,6 @@
      */
     private YangNode includedNode;
 
-    // Error Line number.
-    private transient int lineNumber;
-
-    // Error character position.
-    private transient int charPosition;
-
     /**
      * Creates a YANG include.
      */
@@ -154,26 +148,6 @@
         this.includedNode = includedNode;
     }
 
-    @Override
-    public int getLineNumber() {
-        return lineNumber;
-    }
-
-    @Override
-    public int getCharPosition() {
-        return charPosition;
-    }
-
-    @Override
-    public void setLineNumber(int lineNumber) {
-        this.lineNumber = lineNumber;
-    }
-
-    @Override
-    public void setCharPosition(int charPositionInLine) {
-        charPosition = charPositionInLine;
-    }
-
     /**
      * Adds reference to an include.
      *
@@ -221,6 +195,7 @@
                 includedSubModuleName + "with a given revision is not found.");
         exception.setLine(getLineNumber());
         exception.setCharPosition(getCharPosition());
+        exception.setFileName(getFileName());
         throw exception;
     }
 
@@ -238,6 +213,7 @@
                 "to sub-module belonging to the same parent module.");
         exception.setLine(getLineNumber());
         exception.setCharPosition(getCharPosition());
+        exception.setFileName(getFileName());
         throw exception;
     }
 }
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 bf8f4ab..eff6acf 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java
@@ -151,8 +151,11 @@
     public void detectSelfCollision(String identifierName, YangConstructType dataType)
             throws DataModelException {
         if (getName().equals(identifierName)) {
-            throw new DataModelException("YANG file error: Duplicate input identifier detected, same as input \""
-                    + getName() + "\"");
+            throw new DataModelException("YANG file error: Duplicate input identifier detected, same as input \"" +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition() +
+                    " in " + getFileName() + "\"");
         }
     }
 
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 847b98b..7eb9fe0 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
@@ -61,7 +61,7 @@
 /**
  * Represents leaf data represented in YANG.
  */
-public abstract class YangLeaf
+public abstract class YangLeaf extends DefaultLocationInfo
         implements YangCommonInfo, Parsable, Cloneable, Serializable,
         YangMustHolder, YangIfFeatureHolder, YangWhenHolder, YangSchemaNode,
         YangConfig {
@@ -413,7 +413,11 @@
     @Override
     public YangSchemaNodeContextInfo getChildSchema(YangSchemaNodeIdentifier dataNodeIdentifier)
             throws DataModelException {
-        throw new DataModelException("leaf cannot have any child schema nodes");
+        throw new DataModelException("leaf cannot have any child schema nodes " +
+                getName() + " in " +
+                getLineNumber() + " at " +
+                getCharPosition() +
+                " in " + getFileName() + "\"");
     }
 
     @Override
@@ -425,7 +429,11 @@
     @Override
     public int getMandatoryChildCount()
             throws DataModelException {
-        throw new DataModelException("Leaf can't have child.");
+        throw new DataModelException("Leaf can't have child. " +
+                getName() + " in " +
+                getLineNumber() + " at " +
+                getCharPosition() +
+                " in " + getFileName() + "\"");
     }
 
     @Override
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 75af697..b2c003a 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
@@ -57,7 +57,7 @@
 /**
  * Represents leaf-list data represented in YANG.
  */
-public abstract class YangLeafList
+public abstract class YangLeafList extends DefaultLocationInfo
         implements YangCommonInfo, Parsable, Cloneable, Serializable,
         YangMustHolder, YangWhenHolder, YangIfFeatureHolder, YangSchemaNode,
         YangConfig {
@@ -430,7 +430,11 @@
     @Override
     public YangSchemaNodeContextInfo getChildSchema(YangSchemaNodeIdentifier dataNodeIdentifier)
             throws DataModelException {
-        throw new DataModelException("leaf cannot have any child schema nodes");
+        throw new DataModelException("leaf cannot have any child schema nodes" +
+                getName() + " in " +
+                getLineNumber() + " at " +
+                getCharPosition() +
+                " in " + getFileName() + "\"");
     }
 
     @Override
@@ -442,7 +446,10 @@
     @Override
     public int getMandatoryChildCount()
             throws DataModelException {
-        throw new DataModelException("TODO");
+        throw new DataModelException("leaf list can't have child " + getName() + " in " +
+                getLineNumber() + " at " +
+                getCharPosition() +
+                " in " + getFileName() + "\"");
     }
 
     @Override
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafRef.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafRef.java
index 764e37c..fb0bee7 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafRef.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafRef.java
@@ -47,9 +47,9 @@
  *
  * @param <T> YANG leafref info
  */
-public class YangLeafRef<T>
+public class YangLeafRef<T> extends DefaultLocationInfo
         implements Cloneable, Parsable, Resolvable, Serializable, YangIfFeatureHolder,
-        YangXPathResolver, YangAppErrorHolder, LocationInfo {
+        YangXPathResolver, YangAppErrorHolder {
 
     private static final long serialVersionUID = 286201644L;
 
@@ -107,16 +107,6 @@
     private YangNode parentNodeOfLeafref;
 
     /**
-     * Error line number.
-     */
-    private transient int lineNumber;
-
-    /**
-     * Error character position in number.
-     */
-    private transient int charPositionInLine;
-
-    /**
      * Prefix in the nodes of the leafref path and its imported node name.
      */
     private Map<String, String> prefixAndItsImportedModule;
@@ -358,7 +348,11 @@
             throws DataModelException {
 
         if (getReferredLeafOrLeafList() == null) {
-            throw new DataModelException("Linker Error: The leafref does not refer to any leaf/leaf-list.");
+            throw new DataModelException("Linker Error: The leafref does not refer to any leaf/leaf-list." +
+                    " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition() +
+                    " in " + getFileName() + "\"");
         }
 
         // Initiate the resolution
@@ -389,7 +383,11 @@
                 //Check whether the referred typedef is resolved.
                 if (referredLeafRefInfo.getResolvableStatus() != INTRA_FILE_RESOLVED
                         && referredLeafRefInfo.getResolvableStatus() != RESOLVED) {
-                    throw new DataModelException("Linker Error: Referred typedef is not resolved for type.");
+                    throw new DataModelException("Linker Error: Referred typedef is not resolved for type." +
+                            " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition() +
+                            " in " + getFileName() + "\"");
                 }
 
                 /*
@@ -415,7 +413,11 @@
                 // Check whether the referred typedef is resolved.
                 if (baseType.getResolvableStatus() != INTRA_FILE_RESOLVED
                         && baseType.getResolvableStatus() != RESOLVED) {
-                    throw new DataModelException("Linker Error: Referred typedef is not resolved for type.");
+                    throw new DataModelException("Linker Error: Referred typedef is not resolved for type." +
+                            " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition() +
+                            " in " + getFileName() + "\"");
                 }
                 /*
                  * Check if the referred typedef is intra file resolved, if yes
@@ -449,7 +451,11 @@
                 //Check whether the referred typedef is resolved.
                 if (referredLeafRefInfo.getResolvableStatus() != INTRA_FILE_RESOLVED
                         && referredLeafRefInfo.getResolvableStatus() != RESOLVED) {
-                    throw new DataModelException("Linker Error: Referred typedef is not resolved for type.");
+                    throw new DataModelException("Linker Error: Referred typedef is not resolved for type." +
+                            " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition() +
+                            " in " + getFileName() + "\"");
                 }
                 /*
                  * Check if the referred typedef is intra file resolved, if yes
@@ -475,7 +481,11 @@
                 //Check whether the referred typedef is resolved.
                 if (baseType.getResolvableStatus() != INTRA_FILE_RESOLVED
                         && baseType.getResolvableStatus() != RESOLVED) {
-                    throw new DataModelException("Linker Error: Referred typedef is not resolved for type.");
+                    throw new DataModelException("Linker Error: Referred typedef is not resolved for type." +
+                            " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition() +
+                            " in " + getFileName() + "\"");
                 }
                 /*
                  * Check if the referred typedef is intra file resolved, if yes
@@ -499,31 +509,15 @@
             }
             return RESOLVED;
         } else {
-            throw new DataModelException("Linker Error: The leafref must refer only to leaf/leaf-list.");
+            throw new DataModelException("Linker Error: The leafref must refer only to leaf/leaf-list." +
+                    " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition() +
+                    " in " + getFileName() + "\"");
         }
     }
 
     @Override
-    public int getLineNumber() {
-        return lineNumber;
-    }
-
-    @Override
-    public int getCharPosition() {
-        return charPositionInLine;
-    }
-
-    @Override
-    public void setLineNumber(int lineNumber) {
-        this.lineNumber = lineNumber;
-    }
-
-    @Override
-    public void setCharPosition(int charPositionInLine) {
-        this.charPositionInLine = charPositionInLine;
-    }
-
-    @Override
     public YangLeafRef<T> clone()
             throws CloneNotSupportedException {
         YangLeafRef<T> clonedLeafRef = (YangLeafRef<T>) super.clone();
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeavesHolder.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeavesHolder.java
index 79f1cae..9d5aa82 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeavesHolder.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeavesHolder.java
@@ -23,7 +23,7 @@
  * data holders of leaf or leaf list. Used in leaves parsing or attribute code
  * generation.
  */
-public interface YangLeavesHolder {
+public interface YangLeavesHolder extends LocationInfo {
 
     /**
      * Returns the list of leaves from data holder like container / list.
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLengthRestriction.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLengthRestriction.java
index e3ea833..5df0f8f 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLengthRestriction.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLengthRestriction.java
@@ -33,7 +33,8 @@
 /**
  * Represents the restriction for length data type.
  */
-public class YangLengthRestriction implements YangDesc, YangReference, Parsable, Serializable, YangAppErrorHolder {
+public class YangLengthRestriction extends DefaultLocationInfo
+        implements YangDesc, YangReference, Parsable, Serializable, YangAppErrorHolder {
 
     /*-
      * Reference RFC 6020.
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 63d1790..f0d5c99 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
@@ -373,7 +373,11 @@
 
         if (getKeyList().contains(key)) {
             throw new DataModelException("A leaf identifier must not appear more than once in the\n" +
-                    "   key");
+                    "   key" +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition() +
+                    " in " + getFileName() + "\"");
         }
 
         getKeyList().add(key);
@@ -392,7 +396,11 @@
         }
         if (getUniqueList().contains(unique)) {
             throw new DataModelException("A leaf identifier must not appear more than once in the\n" +
-                    "   unique");
+                    "   unique" +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition() +
+                    " in " + getFileName() + "\"");
         }
         getUniqueList().add(unique);
     }
@@ -571,7 +579,11 @@
         //A list must have atleast one key leaf if config is true
         if (isConfig && (keys.isEmpty() || leaves.isEmpty()) && !isUsesPresentInList()
                 && !isListPresentInGrouping()) {
-            throw new DataModelException("A list must have atleast one key leaf if config is true;");
+            throw new DataModelException("A list must have atleast one key leaf if config is true; " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition() +
+                    " in " + getFileName() + "\"");
         } else if (keys != null) {
             validateKey(leaves, keys);
         }
@@ -595,7 +607,11 @@
             for (YangLeaf leaf : leaves) {
                 if (leaf.isConfig()) {
                     throw new DataModelException("If a list has \"config\" set to \"false\", no node underneath " +
-                            "it can have \"config\" set to \"true\".");
+                            "it can have \"config\" set to \"true\"." +
+                            getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition() +
+                            " in " + getFileName() + "\"");
                 }
             }
         }
@@ -604,7 +620,10 @@
             for (YangLeafList leafList : leafLists) {
                 if (leafList.isConfig()) {
                     throw new DataModelException("If a list has \"config\" set to \"false\", no node underneath " +
-                            "it can have \"config\" set to \"true\".");
+                            "it can have \"config\" set to \"true\"." + getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition() +
+                            " in " + getFileName() + "\"");
                 }
             }
         }
@@ -632,7 +651,11 @@
                     if (key.equals(leaf.getName())) {
                         if (leaf.getDataType().getDataType() == YangDataTypes.EMPTY) {
                             throw new DataModelException(" A leaf that is part of the key must not be the built-in " +
-                                    "type \"empty\".");
+                                    "type \"empty\"." +
+                                    getName() + " in " +
+                                    getLineNumber() + " at " +
+                                    getCharPosition() +
+                                    " in " + getFileName() + "\"");
                         }
                         leafFound = true;
                         keyLeaves.add(leaf);
@@ -642,7 +665,11 @@
             }
 
             if (!leafFound && !isUsesPresentInList() && !isListPresentInGrouping()) {
-                throw new DataModelException("An identifier, in key, must refer to a child leaf of the list");
+                throw new DataModelException("An identifier, in key, must refer to a child leaf of the list" +
+                        getName() + " in " +
+                        getLineNumber() + " at " +
+                        getCharPosition() +
+                        " in " + getFileName() + "\"");
             }
             leafFound = false;
         }
@@ -654,7 +681,11 @@
         for (YangLeaf keyLeaf : keyLeaves) {
             if (isConfig != keyLeaf.isConfig()) {
                 throw new DataModelException("All key leafs in a list must have the same value for their" +
-                        " \"config\" as the list itself.");
+                        " \"config\" as the list itself." +
+                        getName() + " in " +
+                        getLineNumber() + " at " +
+                        getCharPosition() +
+                        " in " + getFileName() + "\"");
             }
         }
     }
@@ -671,7 +702,10 @@
             throws DataModelException {
         if (getName().equals(identifierName)) {
             throw new DataModelException("YANG file error: Duplicate input identifier detected, same as list \"" +
-                    getName() + "\"");
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition() +
+                    " in " + getFileName() + "\"");
         }
     }
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMaxElement.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMaxElement.java
index 6ec7f47..c6ebdd7 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMaxElement.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMaxElement.java
@@ -24,7 +24,8 @@
 /**
  * Represents max element data represented in YANG.
  */
-public class YangMaxElement implements YangAppErrorHolder, Serializable {
+public class YangMaxElement extends DefaultLocationInfo
+        implements YangAppErrorHolder, Serializable {
 
     private static final long serialVersionUID = 807201694L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMinElement.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMinElement.java
index 4eab3a8..8af5849 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMinElement.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMinElement.java
@@ -24,7 +24,8 @@
 /**
  * Represents minimum element data represented in YANG.
  */
-public class YangMinElement implements YangAppErrorHolder, Serializable {
+public class YangMinElement extends DefaultLocationInfo
+        implements YangAppErrorHolder, Serializable {
 
     private static final long serialVersionUID = 807201695L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMust.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMust.java
index 62f6c9e..5e0346b 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMust.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMust.java
@@ -50,7 +50,8 @@
 /**
  * Represents information defined in YANG must.
  */
-public class YangMust implements YangDesc, YangReference, Parsable, Serializable, YangAppErrorHolder {
+public class YangMust extends DefaultLocationInfo
+        implements YangDesc, YangReference, Parsable, Serializable, YangAppErrorHolder {
 
     private static final long serialVersionUID = 806201646L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNameSpace.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNameSpace.java
index 60f327f..72da0fa 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNameSpace.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNameSpace.java
@@ -34,7 +34,8 @@
 /**
  * Represents name space to be used for the XML data tree.
  */
-public class YangNameSpace implements Parsable, Serializable {
+public class YangNameSpace extends DefaultLocationInfo
+        implements Parsable, Serializable {
 
     private static final long serialVersionUID = 806201647L;
 
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 c65af25..cd6cc7c 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
@@ -29,7 +29,7 @@
 /**
  * Represents base class of a node in data model tree.
  */
-public abstract class YangNode
+public abstract class YangNode extends DefaultLocationInfo
         implements Cloneable, Serializable, YangSchemaNode,
         Comparable<YangNode> {
 
@@ -86,6 +86,11 @@
     private int mandatoryChildCount;
 
     /**
+     * Yang revision.
+     */
+    private YangRevision revision;
+
+    /**
      * Map of default schema nodes.
      */
     private Map<YangSchemaNodeIdentifier, YangSchemaNode> defaultChildMap;
@@ -227,31 +232,45 @@
     public void addChild(YangNode newChild)
             throws DataModelException {
         if (newChild.getNodeType() == null) {
-            throw new DataModelException("Abstract node cannot be inserted " +
-                                                 "into a tree");
+            throw new DataModelException("Abstract node cannot be inserted into a tree " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition() +
+                    " in " + getFileName() + "\"");
         }
 
         if (newChild.getParent() == null) {
             newChild.setParent(this);
         } else if (newChild.getParent() != this) {
-            throw new DataModelException("Node is already part of a tree");
+            throw new DataModelException("Node is already part of a tree " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition() +
+                    " in " + getFileName() + "\"");
         }
 
         if (newChild.getChild() != null) {
-            throw new DataModelException("Child to be added is not atomic, " +
-                                                 "it already has a child");
+            throw new DataModelException("Child to be added is not atomic, it already has a child "
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
 
         if (newChild.getNextSibling() != null) {
-            throw new DataModelException("Child to be added is not atomic, " +
-                                                 "it already has a next " +
-                                                 "sibling");
+            throw new DataModelException("Child to be added is not atomic, it already has a next sibling "
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
 
         if (newChild.getPreviousSibling() != null) {
-            throw new DataModelException("Child to be added is not atomic, " +
-                                                 "it already has a previous " +
-                                                 "sibling");
+            throw new DataModelException("Child to be added is not atomic, it already has a previous sibling "
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
 
         /* First child to be added */
@@ -398,9 +417,11 @@
         try {
             while (nextNodeToClone != srcRootNode) {
                 if (nextNodeToClone == null) {
-                    throw new DataModelException("Internal error: Cloning " +
-                                                         "failed, source tree " +
-                                                         "null pointer reached");
+                    throw new DataModelException("Internal error: Cloning failed, source tree null pointer reached "
+                            + nextNodeToClone.getName() + " in " +
+                            nextNodeToClone.getLineNumber() + " at " +
+                            nextNodeToClone.getCharPosition()
+                            + " in " + nextNodeToClone.getFileName() + "\"");
                 }
                 if (curTraversal != PARENT) {
                     newNode = nextNodeToClone.clone(yangUses);
@@ -450,7 +471,10 @@
                 }
             }
         } catch (CloneNotSupportedException e) {
-            throw new DataModelException("Failed to clone the tree");
+            throw new DataModelException("Failed to clone the tree " + nextNodeToClone.getName() + " in " +
+                    nextNodeToClone.getLineNumber() + " at " +
+                    nextNodeToClone.getCharPosition()
+                    + " in " + nextNodeToClone.getFileName() + "\"");
         }
 
     }
@@ -469,8 +493,11 @@
             throws DataModelException {
         if (!(currentNode instanceof CollisionDetector)
                 || !(newNode instanceof Parsable)) {
-            throw new DataModelException("Node in data model tree does not " +
-                                                 "support collision detection");
+            throw new DataModelException("Node in data model tree does not support collision detection " +
+                    newNode.getName() + " in " +
+                    newNode.getLineNumber() + " at " +
+                    newNode.getCharPosition()
+                    + " in " + newNode.getFileName() + "\"");
         }
 
         CollisionDetector collisionDetector = (CollisionDetector) currentNode;
@@ -481,15 +508,20 @@
         } else if (addAs == TraversalType.SIBILING) {
             currentNode = currentNode.getParent();
             if (!(currentNode instanceof CollisionDetector)) {
-                throw new DataModelException("Node in data model tree does " +
-                                                     "not support collision " +
-                                                     "detection");
+                throw new DataModelException("Node in data model tree does not support collision detection"
+                        + currentNode.getName() + " in " +
+                        currentNode.getLineNumber() + " at " +
+                        currentNode.getCharPosition()
+                        + " in " + currentNode.getFileName() + "\"");
             }
             collisionDetector = (CollisionDetector) currentNode;
             collisionDetector.detectCollidingChild(newNode.getName(),
                                                    parsable.getYangConstructType());
         } else {
-            throw new DataModelException("Errored tree cloning");
+            throw new DataModelException("Error tree cloning " + currentNode.getName() + " in " +
+                    currentNode.getLineNumber() + " at " +
+                    currentNode.getCharPosition()
+                    + " in " + currentNode.getFileName() + "\"");
         }
 
     }
@@ -522,8 +554,11 @@
             throws DataModelException {
 
         if (newSibling.getNodeType() == null) {
-            throw new DataModelException("Cloned abstract node cannot be " +
-                                                 "inserted into a tree");
+            throw new DataModelException("Cloned abstract node cannot be inserted into a tree "
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
 
         if (newSibling.getParent() == null) {
@@ -534,28 +569,38 @@
             newSibling.setParent(getParent());
 
         } else {
-            throw new DataModelException("Node is already part of a tree, " +
-                                                 "and cannot be added as a " +
-                                                 "sibling");
+            throw new DataModelException("Node is already part of a tree, and cannot be added as a sibling "
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
 
         if (newSibling.getPreviousSibling() == null) {
             newSibling.setPreviousSibling(this);
             setNextSibling(newSibling);
         } else {
-            throw new DataModelException("New sibling to be added is not " +
-                                                 "atomic, it already has a " +
-                                                 "previous sibling");
+            throw new DataModelException("New sibling to be added is not atomic, it already has a previous sibling "
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
 
         if (newSibling.getChild() != null) {
-            throw new DataModelException("Sibling to be added is not atomic, " +
-                                                 "it already has a child");
+            throw new DataModelException("Sibling to be added is not atomic, it already has a child "
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
 
         if (newSibling.getNextSibling() != null) {
-            throw new DataModelException("Sibling to be added is not atomic, " +
-                                                 "it already has a next sibling");
+            throw new DataModelException("Sibling to be added is not atomic, it already has a next sibling "
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
     }
 
@@ -565,10 +610,11 @@
         YangSchemaNodeContextInfo childSchemaContext =
                 ysnContextInfoMap.get(dataNodeIdentifier);
         if (childSchemaContext == null) {
-            throw new DataModelException("Requested " +
-                                                 dataNodeIdentifier.getName() +
-                                                 "is not child in "
-                    + getName());
+            throw new DataModelException("Requested " + dataNodeIdentifier.getName() + "is not child in "
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
         return childSchemaContext;
     }
@@ -691,7 +737,11 @@
     @Override
     public void isValueValid(String value)
             throws DataModelException {
-        throw new DataModelException("Value validation asked for YANG node.");
+        throw new DataModelException("Value validation asked for YANG node. "
+                + getName() + " in " +
+                getLineNumber() + " at " +
+                getCharPosition()
+                + " in " + getFileName() + "\"");
     }
 
     @Override
@@ -745,6 +795,24 @@
         yangSchemaNodeIdentifier.setNameSpace(namespace);
     }
 
+    /**
+     * Returns YANG revision.
+     *
+     * @return YANG revision
+     */
+    public YangRevision getRevision() {
+        return revision;
+    }
+
+    /**
+     * Sets YANG revision.
+     *
+     * @param revision YANG revision
+     */
+    public void setRevision(YangRevision revision) {
+        this.revision = revision;
+    }
+
     @Override
     public YangSchemaNode getNotificationSchemaNode(String notificationNameInEnum)
             throws DataModelException {
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNodeIdentifier.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNodeIdentifier.java
index 8c0ff9f..42f0aa9 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNodeIdentifier.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNodeIdentifier.java
@@ -21,7 +21,8 @@
 /**
  * Represents YANG node identifier which is a combination of prefix and name.
  */
-public class YangNodeIdentifier implements Serializable {
+public class YangNodeIdentifier extends DefaultLocationInfo
+        implements Serializable {
 
     private static final long serialVersionUID = 806201648L;
 
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 4cd8b42..0802366 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java
@@ -161,7 +161,10 @@
             throws DataModelException {
         if (getName().equals(identifierName)) {
             throw new DataModelException("YANG file error: Duplicate input identifier detected, same as notification \""
-                    + getName() + "\"");
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
     }
 
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 7f429f6..52044df 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
@@ -151,7 +151,10 @@
             throws DataModelException {
         if (getName().equals(identifierName)) {
             throw new DataModelException("YANG file error: Duplicate identifier detected, same as output \""
-                    + getName() + "\"");
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
     }
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPathPredicate.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPathPredicate.java
index cf45349..2af0e65 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPathPredicate.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPathPredicate.java
@@ -20,7 +20,8 @@
 /**
  * Representation of data model node to maintain path predicate in YANG absolute-path or relative-path.
  */
-public class YangPathPredicate<T> implements Serializable {
+public class YangPathPredicate<T> extends DefaultLocationInfo
+        implements Serializable {
 
     private static final long serialVersionUID = 806201689L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPatternRestriction.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPatternRestriction.java
index 9e5d8ef..048d8c4 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPatternRestriction.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPatternRestriction.java
@@ -52,7 +52,8 @@
  * Represents pattern restriction information. The regular expression restriction on string
  * data type.
  */
-public class YangPatternRestriction implements Serializable, YangAppErrorHolder {
+public class YangPatternRestriction extends DefaultLocationInfo
+        implements Serializable, YangAppErrorHolder {
 
     private static final long serialVersionUID = 806201649L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeInterval.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeInterval.java
index 4ee9787..58f893a 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeInterval.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeInterval.java
@@ -22,7 +22,8 @@
  *
  * @param <T> range type based on the data type
  */
-public class YangRangeInterval<T extends YangBuiltInDataTypeInfo<T>> implements Serializable {
+public class YangRangeInterval<T extends YangBuiltInDataTypeInfo<T>> extends DefaultLocationInfo
+        implements Serializable {
 
     private static final long serialVersionUID = 806201650L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java
index b1aaf2f..e664a64 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java
@@ -59,7 +59,7 @@
  *
  * @param <T> range type (data type)
  */
-public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>>
+public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>> extends DefaultLocationInfo
         implements YangDesc, YangReference, Parsable, Serializable, YangAppErrorHolder {
 
     private static final long serialVersionUID = 8062016051L;
@@ -117,10 +117,18 @@
      */
     public T getMinRestrictedvalue() throws DataModelException {
         if (getAscendingRangeIntervals() == null) {
-            throw new DataModelException("No range restriction info");
+            throw new DataModelException("No range restriction info "
+                    + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
         if (getAscendingRangeIntervals().isEmpty()) {
-            throw new DataModelException("No range interval info");
+            throw new DataModelException("No range interval info "
+                    + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
         return getAscendingRangeIntervals().get(0).getStartValue();
     }
@@ -133,10 +141,18 @@
      */
     public T getMaxRestrictedvalue() throws DataModelException {
         if (getAscendingRangeIntervals() == null) {
-            throw new DataModelException("No range restriction info");
+            throw new DataModelException("No range restriction info "
+                    + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
         if (getAscendingRangeIntervals().isEmpty()) {
-            throw new DataModelException("No range interval info");
+            throw new DataModelException("No range interval info "
+                    + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
         return getAscendingRangeIntervals()
                 .get(getAscendingRangeIntervals().size() - 1).getEndValue();
@@ -168,7 +184,11 @@
 
         if (newInterval.getStartValue().compareTo(curMaxvalue) < 1) {
             throw new DataModelException(
-                    "New added range interval is lesser than the old interval(s)");
+                    "New added range interval is lesser than the old interval(s) "
+                            + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + "\"");
         }
 
         getAscendingRangeIntervals()
@@ -188,7 +208,11 @@
                 || getAscendingRangeIntervals().isEmpty()) {
             // Throw exception, At least one default range needs to be set in
             // constructor or in linker.
-            throw new DataModelException("Range interval missing in range restriction.");
+            throw new DataModelException("Range interval missing in range restriction. "
+                    + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
 
         }
 
@@ -219,7 +243,11 @@
                 || getAscendingRangeIntervals().isEmpty()) {
             // Throw exception, At least one default range needs to be set in
             // constructor or in linker.
-            throw new DataModelException("Range interval missing in range restriction.");
+            throw new DataModelException("Range interval missing in range restriction. "
+                    + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
 
         for (YangRangeInterval<T> interval : getAscendingRangeIntervals()) {
@@ -230,7 +258,11 @@
                 return true;
             }
         }
-        throw new DataModelException("Range interval doesn't fall within the referred restriction ranges");
+        throw new DataModelException("Range interval doesn't fall within the referred restriction ranges "
+                + " in " +
+                getLineNumber() + " at " +
+                getCharPosition()
+                + " in " + getFileName() + "\"");
     }
 
     /**
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRelativePath.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRelativePath.java
index a7af2a2..0dee381 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRelativePath.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRelativePath.java
@@ -21,7 +21,8 @@
 /**
  * Representation of data model node to maintain relative path defined in YANG path-arg.
  */
-public class YangRelativePath implements Serializable {
+public class YangRelativePath extends DefaultLocationInfo
+        implements Serializable {
 
     private static final long serialVersionUID = 806201690L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangResolutionInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangResolutionInfo.java
index c63e832..9876815 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangResolutionInfo.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangResolutionInfo.java
@@ -23,7 +23,7 @@
  *
  * @param <T> type of resolution entity uses / type
  */
-public interface YangResolutionInfo<T> extends LocationInfo {
+public interface YangResolutionInfo<T> {
 
     /**
      * Resolves linking with all the ancestors node for a resolution info.
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRevision.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRevision.java
index 6f59cf5..8736083 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRevision.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRevision.java
@@ -46,7 +46,8 @@
 /**
  * Represents the information about the revision.
  */
-public class YangRevision implements YangDesc, YangReference, Parsable, Serializable {
+public class YangRevision extends DefaultLocationInfo
+        implements YangDesc, YangReference, Parsable, Serializable {
 
     private static final long serialVersionUID = 8062016052L;
 
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 f467053..68197ce 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRpc.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRpc.java
@@ -142,7 +142,10 @@
             throws DataModelException {
         if (getName().equals(identifierName)) {
             throw new DataModelException("YANG file error: Duplicate input identifier detected, same as rpc \""
-                    + getName() + "\"");
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
     }
 
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 9f851f0..2397c41 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeContextInfo.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeContextInfo.java
@@ -22,7 +22,8 @@
  * Abstraction of YANG data node context information, used by YMS to abstractly
  * refer the YANG data nodes schema context information.
  */
-public class YangSchemaNodeContextInfo implements Serializable {
+public class YangSchemaNodeContextInfo extends DefaultLocationInfo
+        implements Serializable {
 
     private static final long serialVersionUID = 806201613L;
 
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 68e9f52..62cd275 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeIdentifier.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeIdentifier.java
@@ -23,7 +23,8 @@
  * Represents YANG data node identifier which is a combination of name and namespace.
  * Namespace will be present only if node is module/sub-module or augmented node.
  */
-public class YangSchemaNodeIdentifier implements Serializable {
+public class YangSchemaNodeIdentifier extends DefaultLocationInfo
+        implements Serializable {
 
     private static final long serialVersionUID = 806201648L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangStringRestriction.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangStringRestriction.java
index dcd0f1d..cfa8088 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangStringRestriction.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangStringRestriction.java
@@ -35,7 +35,8 @@
 /**
  * Represents the restriction for string data type.
  */
-public class YangStringRestriction implements YangDesc, YangReference, Parsable, Serializable {
+public class YangStringRestriction extends DefaultLocationInfo
+        implements YangDesc, YangReference, Parsable, Serializable {
 
     /*-
      * Reference RFC 6020.
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangType.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangType.java
index ecc9184..5fc6075 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangType.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangType.java
@@ -63,8 +63,8 @@
  *
  * @param <T> YANG data type info
  */
-public class YangType<T>
-        implements Cloneable, Parsable, Resolvable, Serializable, LocationInfo {
+public class YangType<T> extends DefaultLocationInfo
+        implements Cloneable, Parsable, Resolvable, Serializable {
 
     private static final long serialVersionUID = 8062016054L;
 
@@ -104,18 +104,6 @@
      */
     private boolean isTypeNotResolvedTillRootNode;
 
-
-    /**
-     * Error line number.
-     */
-    private transient int lineNumber;
-
-    /**
-     * Error character position in number.
-     */
-    private transient int charPositionInLine;
-
-
     /**
      * Creates a YANG type object.
      */
@@ -274,13 +262,21 @@
          * Check whether the data type is derived.
          */
         if (getDataType() != DERIVED) {
-            throw new DataModelException("Linker Error: Resolve should only be called for derived data types.");
+            throw new DataModelException("Linker Error: Resolve should only be called for derived data types. "
+                    + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
 
         // Check if the derived info is present.
         YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) getDataTypeExtendedInfo();
         if (derivedInfo == null) {
-            throw new DataModelException("Linker Error: Derived information is missing.");
+            throw new DataModelException("Linker Error: Derived information is missing. " + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
+
         }
 
         // Initiate the resolution
@@ -526,26 +522,6 @@
         return isMatched;
     }
 
-    @Override
-    public int getLineNumber() {
-        return lineNumber;
-    }
-
-    @Override
-    public int getCharPosition() {
-        return charPositionInLine;
-    }
-
-    @Override
-    public void setLineNumber(int lineNumber) {
-        this.lineNumber = lineNumber;
-    }
-
-    @Override
-    public void setCharPosition(int charPositionInLine) {
-        this.charPositionInLine = charPositionInLine;
-    }
-
     public boolean isTypeForInterFileGroupingResolution() {
         return isTypeForInterFileGroupingResolution;
     }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangTypeDef.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangTypeDef.java
index 6e2db7f..5e77f7a 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangTypeDef.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangTypeDef.java
@@ -296,7 +296,10 @@
             throws DataModelException {
         if (getName().equals(identifierName)) {
             throw new DataModelException("YANG file error: Duplicate input identifier detected, same as typedef \""
-                    + getName() + "\"");
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
     }
 }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java
index efebd5d..a0ea239 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java
@@ -137,7 +137,10 @@
             throws DataModelException {
         if (yangType.getDataType() == YangDataTypes.EMPTY || yangType.getDataType() == YangDataTypes.LEAFREF) {
             throw new DataModelException("Union member type must not be one of the built-in types \"empty\" or " +
-                    "\"leafref\"");
+                    "\"leafref\"" + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
         getTypeList().add(yangType);
     }
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 28a31e5..ae05a20 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java
@@ -385,7 +385,11 @@
         YangGrouping referredGrouping = getRefGroup();
 
         if (referredGrouping == null) {
-            throw new DataModelException("YANG uses linker error, cannot resolve uses");
+            throw new DataModelException("YANG uses linker error, cannot resolve uses " + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
+
         } else {
             /*
              * if referredGrouping has uses which is not resolved then set the status
@@ -399,7 +403,11 @@
         YangNode usesParentNode = getParentNodeInGenCode(this);
         if (!(usesParentNode instanceof YangLeavesHolder)
                 || !(usesParentNode instanceof CollisionDetector)) {
-            throw new DataModelException("YANG uses holder construct is wrong");
+            throw new DataModelException("YANG uses holder construct is wrong "
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
 
         YangLeavesHolder usesParentLeavesHolder = (YangLeavesHolder) usesParentNode;
@@ -536,7 +544,11 @@
                                            YangLeavesHolder usesParentNode)
             throws DataModelException {
         if (listOfLeaves == null || listOfLeaves.size() == 0) {
-            throw new DataModelException("No leaves to clone");
+            throw new DataModelException("No leaves to clone "
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
 
         List<YangLeaf> newLeavesList = new LinkedList<YangLeaf>();
@@ -568,7 +580,11 @@
             YangLeavesHolder usesParentNode)
             throws DataModelException {
         if (listOfLeafList == null || listOfLeafList.size() == 0) {
-            throw new DataModelException("No leaf lists to clone");
+            throw new DataModelException("No leaf lists to clone "
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
 
         List<YangLeafList> newListOfLeafList = new LinkedList<YangLeafList>();
@@ -611,7 +627,10 @@
 
         if (getName().equals(identifierName)) {
             throw new DataModelException("YANG file error: Duplicate input identifier detected, same as uses \""
-                    + getName() + "\"");
+                    + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + "\"");
         }
     }
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangWhen.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangWhen.java
index 5cfb050..1982d5a 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangWhen.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangWhen.java
@@ -47,7 +47,8 @@
 /**
  * Represents information defined in YANG when.
  */
-public class YangWhen implements YangDesc, YangReference, Parsable, Serializable {
+public class YangWhen extends DefaultLocationInfo
+        implements YangDesc, YangReference, Parsable, Serializable {
 
     private static final long serialVersionUID = 806201646L;
 
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 ca2dd6b..5728b30 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
@@ -23,6 +23,7 @@
     private static final long serialVersionUID = 201601270658L;
     private transient int lineNumber;
     private transient int charPositionInLine;
+    private transient String fileName;
 
     /**
      * Creates a data model exception with message.
@@ -87,4 +88,22 @@
     public void setCharPosition(int charPosition) {
         this.charPositionInLine = charPosition;
     }
+
+    /**
+     * Returns YANG file name of the exception.
+     *
+     * @return YANG file name of the exception
+     */
+    public String getFileName() {
+        return this.fileName;
+    }
+
+    /**
+     * Sets file name in datamodel exception.
+     *
+     * @param fileName YANG file name
+     */
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
 }
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 9480198..e52f234 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
@@ -140,8 +140,11 @@
         }
         for (YangLeaf leaf : listOfLeaf) {
             if (leaf.getName().equals(identifierName)) {
-                throw new DataModelException("YANG file error: Duplicate input identifier detected, same as leaf \""
-                        + leaf.getName() + "\"");
+                throw new DataModelException("YANG file error: Duplicate input identifier detected, same as leaf \"" +
+                        leaf.getName() + " in " +
+                        leaf.getLineNumber() + " at " +
+                        leaf.getCharPosition() +
+                        " in " + leaf.getFileName() + "\"");
             }
         }
     }
@@ -162,7 +165,10 @@
         for (YangLeafList leafList : listOfLeafList) {
             if (leafList.getName().equals(identifierName)) {
                 throw new DataModelException("YANG file error: Duplicate input identifier detected, same as leaf " +
-                        "list \"" + leafList.getName() + "\"");
+                        "list \"" + leafList.getName() + " in " +
+                        leafList.getLineNumber() + " at " +
+                        leafList.getCharPosition() +
+                        " in " + leafList.getFileName() + "\"");
             }
         }
     }
@@ -595,7 +601,11 @@
                         throw e;
                     } catch (CloneNotSupportedException e) {
                         e.printStackTrace();
-                        throw new DataModelException("Could not clone Type node");
+                        throw new DataModelException("Could not clone Type node " +
+                                leaf.getDataType().getDataTypeName() + " in " +
+                                leaf.getDataType().getLineNumber() + " at " +
+                                leaf.getDataType().getCharPosition() +
+                                " in " + leaf.getDataType().getFileName() + "\"");
                     }
                 }
             }
@@ -615,7 +625,11 @@
                         throw e;
                     } catch (CloneNotSupportedException e) {
                         e.printStackTrace();
-                        throw new DataModelException("Could not clone Type node");
+                        throw new DataModelException("Could not clone Type node " +
+                                leafList.getDataType().getDataTypeName() + " in " +
+                                leafList.getDataType().getLineNumber() + " at " +
+                                leafList.getDataType().getCharPosition() +
+                                " in " + leafList.getDataType().getFileName() + "\"");
                     }
                 }
             }
@@ -631,7 +645,11 @@
     private static void updateClonedTypeRef(YangType dataType, YangLeavesHolder leavesHolder)
             throws DataModelException {
         if (!(leavesHolder instanceof YangNode)) {
-            throw new DataModelException("Data model error: cloned leaves holder is not a node");
+            throw new DataModelException("Data model error: cloned leaves holder is not a node " +
+                    " in " +
+                    leavesHolder.getLineNumber() + " at " +
+                    leavesHolder.getCharPosition() +
+                    " in " + leavesHolder.getFileName() + "\"");
         }
         YangNode potentialTypeNode = ((YangNode) leavesHolder).getChild();
         while (potentialTypeNode != null) {
@@ -650,7 +668,12 @@
             potentialTypeNode = potentialTypeNode.getNextSibling();
         }
 
-        throw new DataModelException("Data model error: cloned leaves type is not found");
+        throw new DataModelException("Data model error: cloned leaves type is not found " +
+                dataType.getDataTypeName() + " in " +
+                dataType.getLineNumber() + " at " +
+                dataType.getCharPosition() +
+                " in " + dataType.getFileName() + "\"");
+
     }
 
     /**
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/FractionDigits.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/FractionDigits.java
index f5c644a..536ca10 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/FractionDigits.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/FractionDigits.java
@@ -16,11 +16,12 @@
 
 package org.onosproject.yangutils.datamodel.utils;
 
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-
 import java.math.BigDecimal;
 import java.util.ArrayList;
 
+import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
+import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
+
 /**
  * The "fraction-digits" statement, which is a substatement to the
  * "type" statement, MUST be present if the type is "decimal64".  It
@@ -56,7 +57,7 @@
 /**
  * Represents the decimal64 value range based on fraction-digits.
  */
-public final class FractionDigits {
+public final class FractionDigits extends DefaultLocationInfo {
 
     public static class Range {
         private double min;
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt16.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt16.java
index 9124356..978463b 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt16.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt16.java
@@ -18,12 +18,15 @@
 
 import java.io.Serializable;
 
+import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
+
 /**
  * Handles the YANG's int16 data type processing.
  *
  * int16 represents integer values between -32768 and 32767, inclusively.
  */
-public class YangInt16 implements YangBuiltInDataTypeInfo<YangInt16>, Serializable {
+public class YangInt16 extends DefaultLocationInfo
+        implements YangBuiltInDataTypeInfo<YangInt16>, Serializable {
 
     private static final long serialVersionUID = 8006201667L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt32.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt32.java
index f8a3275..f344ebe 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt32.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt32.java
@@ -18,12 +18,15 @@
 
 import java.io.Serializable;
 
+import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
+
 /**
  * Handles the YANG's int32 data type processing.
  *
  * int32 represents integer values between -2147483648 and 2147483647, inclusively.
  */
-public class YangInt32 implements YangBuiltInDataTypeInfo<YangInt32>, Serializable {
+public class YangInt32 extends DefaultLocationInfo
+        implements YangBuiltInDataTypeInfo<YangInt32>, Serializable {
 
     private static final long serialVersionUID = 8006201666L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt64.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt64.java
index 26e9237..779ce8f 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt64.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt64.java
@@ -18,12 +18,15 @@
 
 import java.io.Serializable;
 
+import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
+
 /**
  * Handles the YANG's int8 data type processing.
  *
  * int8 represents integer values between -9223372036854775808 and 9223372036854775807, inclusively.
  */
-public class YangInt64 implements YangBuiltInDataTypeInfo<YangInt64>, Serializable {
+public class YangInt64 extends DefaultLocationInfo
+        implements YangBuiltInDataTypeInfo<YangInt64>, Serializable {
 
     private static final long serialVersionUID = 8006201665L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt8.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt8.java
index 455e343..cdf94ed 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt8.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt8.java
@@ -18,12 +18,15 @@
 
 import java.io.Serializable;
 
+import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
+
 /**
  * Handles the YANG's int8 data type processing.
  *
  * int8 represents integer values between -128 and 127, inclusively.
  */
-public class YangInt8 implements YangBuiltInDataTypeInfo<YangInt8>, Serializable {
+public class YangInt8 extends DefaultLocationInfo
+        implements YangBuiltInDataTypeInfo<YangInt8>, Serializable {
 
     private static final long serialVersionUID = 8006201664L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint16.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint16.java
index 310f9d6..4930414 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint16.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint16.java
@@ -18,12 +18,14 @@
 
 import java.io.Serializable;
 
+import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
 /**
  * Handles the YANG's Uint16 data type processing.
  *
  * Uint16 represents integer values between 0 and 65535, inclusively.
  */
-public class YangUint16 implements YangBuiltInDataTypeInfo<YangUint16>, Serializable {
+public class YangUint16 extends DefaultLocationInfo
+        implements YangBuiltInDataTypeInfo<YangUint16>, Serializable {
 
     private static final long serialVersionUID = 8006201663L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint32.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint32.java
index 287d284..0e35027 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint32.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint32.java
@@ -18,12 +18,15 @@
 
 import java.io.Serializable;
 
+import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
+
 /**
  * Handles the YANG's Uint32 data type processing.
  *
  * Uint32 represents integer values between 0 and 4294967295, inclusively.
  */
-public class YangUint32 implements YangBuiltInDataTypeInfo<YangUint32>, Serializable {
+public class YangUint32 extends DefaultLocationInfo
+        implements YangBuiltInDataTypeInfo<YangUint32>, Serializable {
 
     private static final long serialVersionUID = 8006201662L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint64.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint64.java
index 16576c9..ca6a112 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint64.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint64.java
@@ -19,12 +19,15 @@
 import java.io.Serializable;
 import java.math.BigInteger;
 
+import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
+
 /**
  * Handles the YANG's Uint16 data type processing.
  *
  * Uint64 represents integer values between 0 and 18446744073709551615, inclusively.
  */
-public class YangUint64 implements YangBuiltInDataTypeInfo<YangUint64>, Serializable {
+public class YangUint64 extends DefaultLocationInfo
+        implements YangBuiltInDataTypeInfo<YangUint64>, Serializable {
 
     private static final long serialVersionUID = 8006201661L;
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint8.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint8.java
index f2f4604..3c65d8c 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint8.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint8.java
@@ -18,12 +18,15 @@
 
 import java.io.Serializable;
 
+import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
+
 /**
  * Handles the YANG's Uint8 data type processing.
  *
  * Uint8 represents integer values between 0 and 255, inclusively.
  */
-public class YangUint8 implements YangBuiltInDataTypeInfo<YangUint8>, Serializable {
+public class YangUint8 extends DefaultLocationInfo
+        implements YangBuiltInDataTypeInfo<YangUint8>, Serializable {
 
     private static final long serialVersionUID = 8006201660L;
 
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 c1b6726..daf035e 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
@@ -100,9 +100,10 @@
                 try {
                     ((YangSubModule) yangNode).linkWithModule(getYangNodeSet());
                 } catch (DataModelException e) {
-                    String errorInfo = "YANG file error: " + yangNode.getName() + " at line: "
-                            + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
-                            + e.getMessage();
+                    String errorInfo = "Error in file: " + yangNode.getName() + " in " +
+                            yangNode.getFileName() + " at " +
+                            "line: " + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
+                            + e.getLocalizedMessage();
                     throw new LinkerException(errorInfo);
                     // TODO add file path in exception message in util manager.
                 }
@@ -123,9 +124,10 @@
                 try {
                     ((YangReferenceResolver) yangNode).addReferencesToImportList(getYangNodeSet());
                 } catch (DataModelException e) {
-                    String errorInfo = "Error in file: " + yangNode.getName() + " at line: "
-                            + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
-                            + e.getMessage();
+                    String errorInfo = "Error in file: " + yangNode.getName() + " in " +
+                            yangNode.getFileName() + " at " +
+                            "line: " + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
+                            + e.getLocalizedMessage();
                     throw new LinkerException(errorInfo);
                     // TODO add file path in exception message in util manager.
                 }
@@ -146,9 +148,10 @@
                 try {
                     ((YangReferenceResolver) yangNode).addReferencesToIncludeList(getYangNodeSet());
                 } catch (DataModelException e) {
-                    String errorInfo = "Error in file: " + yangNode.getName() + " at line: "
-                            + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
-                            + e.getMessage();
+                    String errorInfo = "Error in file: " + yangNode.getName() + " in " +
+                            yangNode.getFileName() + " at " +
+                            "line: " + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
+                            + e.getLocalizedMessage();
                     throw new LinkerException(errorInfo);
                     // TODO add file path in exception message in util manager.
                 }
@@ -186,13 +189,17 @@
                 ((YangReferenceResolver) yangNode)
                         .resolveInterFileLinking(ResolvableType.YANG_COMPILER_ANNOTATION);
             } catch (DataModelException e) {
-                String errorInfo = "Error in file: " + yangNode.getName() + " at line: "
-                        + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE + e.getMessage();
+                String errorInfo = "Error in file: " + yangNode.getName() + " in " +
+                        yangNode.getFileName() + " at " +
+                        "line: " + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
+                        + e.getLocalizedMessage();
                 throw new LinkerException(errorInfo);
                 // TODO add file path in exception message in util manager.
             } catch (LinkerException e) {
-                String errorInfo = "Error in file: " + yangNode.getName() + " at line: "
-                        + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE + e.getMessage();
+                String errorInfo = "Error in file: " + yangNode.getName() + " in " +
+                        yangNode.getFileName() + " at " +
+                        "line: " + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
+                        + e.getLocalizedMessage();
                 throw new LinkerException(errorInfo);
                 // TODO add file path in exception message in util manager.
             }
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 37a04df..23e190c 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
@@ -54,6 +54,7 @@
 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.YangConstructType.getYangConstructType;
 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;
@@ -118,7 +119,8 @@
                     if (targetLeaf.getName().equals(leaf.getName())) {
                         throw new LinkerException("target node " + targetNode.getName()
                                 + " contains augmented leaf " + leaf.getName() + " in module "
-                                + parent.getName());
+                                + parent.getName() + " in " + targetNode.getLineNumber()
+                                + " at " + targetNode.getCharPosition() + " in " + targetNode.getFileName());
                     }
                 }
             }
@@ -130,7 +132,8 @@
                     if (targetLeafList.getName().equals(leafList.getName())) {
                         throw new LinkerException("target node " + targetNode.getName()
                                 + " contains augmented leaf-list" + leafList.getName() + " in module "
-                                + parent.getName());
+                                + parent.getName() + " in " + targetNode.getLineNumber()
+                                + " at " + targetNode.getCharPosition() + " in " + targetNode.getFileName());
                     }
                 }
             }
@@ -144,8 +147,9 @@
             while (targetNodesChild != null) {
                 if (targetNodesChild.getName().equals(augmentsChild.getName())) {
                     throw new LinkerException("target node " + targetName
-                            + " contains augmented child node" + augmentsChild.getName() + " in module "
-                            + parentName);
+                            + " contains augmented child node " + augmentsChild.getName() + " in module "
+                            + parentName + " in " + targetNodesChild.getLineNumber()
+                            + " at " + targetNodesChild.getCharPosition() + " in " + targetNodesChild.getFileName());
                 }
                 targetNodesChild = targetNodesChild.getNextSibling();
             }
@@ -198,7 +202,9 @@
             }
 
         } catch (DataModelException e) {
-            throw new TranslatorException("Failed to add child nodes to case node of augment " + augment.getName());
+            throw new TranslatorException("Failed to add child nodes to case node of augment " + augment.getName()
+                    + " in " + augment.getLineNumber() + " at "
+                    + augment.getCharPosition() + " in " + augment.getFileName());
         }
     }
 
@@ -220,7 +226,8 @@
             for (YangNode aChild : augmentChildren) {
                 if (cChild.getName().equals(aChild.getName())) {
                     throw new LinkerException("case node " + aChild.getName() + "already present in choice " +
-                            choice.getName());
+                            choice.getName() + " in " + cChild.getLineNumber() + " at " + cChild.getCharPosition()
+                            + " in " + cChild.getFileName());
                 }
             }
         }
@@ -261,8 +268,6 @@
                 listOfPathName.add(atomicPath.getNodeIdentifier().getName());
             }
         }
-
-
         for (int countOfAncestor = 0; countOfAncestor < remainingAncestors; countOfAncestor++) {
             listOfPathName.remove(listOfPathName.size() - 1);
         }
@@ -282,7 +287,8 @@
         while (currentParent instanceof YangChoice || currentParent instanceof YangCase) {
             if (currentParent.getParent() == null) {
                 throw new LinkerException("YANG file error: The target node, in the leafref path " +
-                        leafref.getPath() + ", is invalid.");
+                        leafref.getPath() + ", is invalid." + " in " + leafref.getLineNumber()
+                        + " at " + leafref.getCharPosition() + " in " + leafref.getFileName());
             }
             currentParent = currentParent.getParent();
         }
@@ -310,7 +316,7 @@
             return nodeIdentifier;
         } else {
             throw new LinkerException("YANG file error : " +
-                    YangConstructType.getYangConstructType(yangConstruct) + " name " + nodeIdentifierString +
+                    getYangConstructType(yangConstruct) + " name " + nodeIdentifierString +
                     " is not valid.");
         }
     }
@@ -326,15 +332,15 @@
 
         if (identifier.length() > IDENTIFIER_LENGTH) {
             throw new LinkerException("YANG file error : " +
-                    YangConstructType.getYangConstructType(yangConstruct) + " name " + identifier + " is " +
+                    getYangConstructType(yangConstruct) + " name " + identifier + " is " +
                     "greater than 64 characters.");
         } else if (!IDENTIFIER_PATTERN.matcher(identifier).matches()) {
             throw new LinkerException("YANG file error : " +
-                    YangConstructType.getYangConstructType(yangConstruct) + " name " + identifier + " is not " +
+                    getYangConstructType(yangConstruct) + " name " + identifier + " is not " +
                     "valid.");
         } else if (identifier.toLowerCase().startsWith(XML)) {
             throw new LinkerException("YANG file error : " +
-                    YangConstructType.getYangConstructType(yangConstruct) + " identifier " + identifier +
+                    getYangConstructType(yangConstruct) + " identifier " + identifier +
                     " must not start with (('X'|'x') ('M'|'m') ('L'|'l')).");
         } else {
             return identifier;
@@ -448,7 +454,13 @@
                                 try {
                                     addResolutionInfo(resolutionInfo);
                                 } catch (DataModelException e) {
-                                    throw new LinkerException("Failed to add type info in grouping to resolution ");
+                                    String errorInfo = "Error in file: " + curNode.getName() + " in " +
+                                            curNode.getFileName() + " at " +
+                                            "line: " + e.getLineNumber() +
+                                            " at position: " + e.getCharPositionInLine()
+                                            + e.getLocalizedMessage();
+                                    throw new LinkerException("Failed to add type info in grouping to resolution "
+                                            + errorInfo);
                                 }
                             }
                         }
@@ -485,7 +497,7 @@
 
                     // Add resolution information to the list
                     YangResolutionInfoImpl resolutionInfo =
-                            new YangResolutionInfoImpl<YangType>(type, (YangNode) leavesHolder,
+                            new YangResolutionInfoImpl<>(type, (YangNode) leavesHolder,
                                     type.getLineNumber(), type.getCharPosition());
                     try {
                         addResolutionInfo(resolutionInfo);
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 0c21bc9..f40f6ff 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
@@ -22,6 +22,7 @@
 import java.util.List;
 import java.util.Stack;
 
+import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
 import org.onosproject.yangutils.datamodel.Resolvable;
 import org.onosproject.yangutils.datamodel.ResolvableType;
 import org.onosproject.yangutils.datamodel.TraversalType;
@@ -103,7 +104,7 @@
  *
  * @param <T> type of resolution entity uses / type
  */
-public class YangResolutionInfoImpl<T>
+public class YangResolutionInfoImpl<T> extends DefaultLocationInfo
         implements YangResolutionInfo<T>, Serializable {
 
     private static final long serialVersionUID = 806201658L;
@@ -114,16 +115,6 @@
     private YangEntityToResolveInfoImpl<T> entityToResolveInfo;
 
     /**
-     * Error line number.
-     */
-    private transient int lineNumber;
-
-    /**
-     * Error character position in number.
-     */
-    private transient int charPosition;
-
-    /**
      * Current module/sub-module reference, will be used in inter-file/
      * inter-jar scenario to get the import/include list.
      */
@@ -548,7 +539,11 @@
         int currentParentCount = 1;
         while (currentParentCount < ancestorCount) {
             if (currentParent.getParent() == null) {
-                throw new DataModelException("YANG file error: The target node of leafref is invalid.");
+                throw new DataModelException("YANG file error: The target node of leafref is invalid."
+                        + currentParent.getName() + " in " +
+                        currentParent.getLineNumber() + " at " +
+                        currentParent.getCharPosition()
+                        + " in " + currentParent.getFileName() + "\"");
             }
             currentParent = currentParent.getParent();
             currentParentCount = currentParentCount + 1;
@@ -719,7 +714,11 @@
                     if (potentialReferredNode.getParent() instanceof YangRpc) {
                         potentialReferredNode = potentialReferredNode.getNextSibling();
                     } else {
-                        throw new DataModelException("YANG file error: The target node of leafref is invalid.");
+                        throw new DataModelException("YANG file error: The target node of leafref is invalid. "
+                                + potentialReferredNode.getName() + " in " +
+                                potentialReferredNode.getLineNumber() + " at " +
+                                potentialReferredNode.getCharPosition()
+                                + " in " + potentialReferredNode.getFileName() + "\"");
                     }
                 }
                 return potentialReferredNode;
@@ -770,7 +769,11 @@
              */
             return currentReferredNode.getName().contentEquals(nameOfNodeinPath);
         } else {
-            throw new DataModelException("Data Model Exception: Entity to resolved is other than leafref");
+            throw new DataModelException("Data Model Exception: Entity to resolved is other than leafref "
+                    + currentReferredNode.getName() + " in " +
+                    currentReferredNode.getLineNumber() + " at " +
+                    currentReferredNode.getCharPosition()
+                    + " in " + currentReferredNode.getFileName() + "\"");
         }
     }
 
@@ -791,7 +794,11 @@
             //Check if name of node name matches with the current reference node.
             return currentReferredNode.getName().contentEquals(nameOfIdentityRefBase);
         } else {
-            throw new DataModelException("Data Model Exception: Entity to resolved is other than identityref");
+            throw new DataModelException("Data Model Exception: Entity to resolved is other than identityref"
+                    + currentReferredNode.getName() + " in " +
+                    currentReferredNode.getLineNumber() + " at " +
+                    currentReferredNode.getCharPosition()
+                    + " in " + currentReferredNode.getFileName() + "\"");
         }
     }
 
@@ -875,7 +882,11 @@
             }
         } else {
             throw new DataModelException("Data Model Exception: Entity to resolved is other than type/" +
-                    "uses/base/identityref");
+                    "uses/base/identityref"
+                    + potentialReferredNode.getName() + " in " +
+                    potentialReferredNode.getLineNumber() + " at " +
+                    potentialReferredNode.getCharPosition()
+                    + " in " + potentialReferredNode.getFileName() + "\"");
         }
         return false;
     }
@@ -916,7 +927,11 @@
                 return true;
             }
         } else {
-            throw new DataModelException("Data Model Exception: Entity to resolved is other than type/uses");
+            throw new DataModelException("Data Model Exception: Entity to resolved is other than type/uses "
+                    + node.getName() + " in " +
+                    node.getLineNumber() + " at " +
+                    node.getCharPosition()
+                    + " in " + node.getFileName() + "\"");
         }
         return false;
     }
@@ -965,7 +980,11 @@
             ((YangIdentityRef) getCurrentEntityToResolveFromStack()).setReferredIdentity((YangIdentity) referredNode);
         } else {
             throw new DataModelException("Data Model Exception: Entity to resolved is other than type" +
-                    "/uses/base/identityref");
+                    "/uses/base/identityref"
+                    + referredNode.getName() + " in " +
+                    referredNode.getLineNumber() + " at " +
+                    referredNode.getCharPosition()
+                    + " in " + referredNode.getFileName() + "\"");
         }
 
         // Sets the resolution status in inside the type/uses.
@@ -1004,7 +1023,11 @@
             addUnResolvedIfFeatureToStack(referredNode);
         } else if (getCurrentEntityToResolveFromStack() instanceof YangLeafRef) {
             // do nothing , referred node is already set
-            throw new DataModelException("Data Model Exception: Entity to resolved is other than type/uses");
+            throw new DataModelException("Data Model Exception: Entity to resolved is other than type/uses "
+                    + referredNode.getName() + " in " +
+                    referredNode.getLineNumber() + " at " +
+                    referredNode.getCharPosition()
+                    + " in " + referredNode.getFileName() + "\"");
         } else if ((getCurrentEntityToResolveFromStack() instanceof YangBase) ||
                 (getCurrentEntityToResolveFromStack() instanceof YangIdentityRef)) {
 
@@ -1012,7 +1035,11 @@
             addUnResolvedBaseToStack(referredNode);
         } else {
             throw new DataModelException("Data Model Exception: Entity to resolved is other than type/uses/" +
-                    "base/identityref");
+                    "base/identityref " + referredNode.getName() + " in " +
+                    referredNode.getLineNumber() + " at " +
+                    referredNode.getCharPosition()
+                    + " in " + referredNode.getFileName() + "\"");
+
         }
     }
 
@@ -1147,26 +1174,6 @@
         this.entityToResolveInfo = entityToResolveInfo;
     }
 
-    @Override
-    public int getLineNumber() {
-        return lineNumber;
-    }
-
-    @Override
-    public int getCharPosition() {
-        return charPosition;
-    }
-
-    @Override
-    public void setLineNumber(int lineNumber) {
-        this.lineNumber = lineNumber;
-    }
-
-    @Override
-    public void setCharPosition(int charPositionInLine) {
-        this.charPosition = charPositionInLine;
-    }
-
     /**
      * Returns current module/sub-module reference, will be used in inter-file/
      * inter-jar scenario to get the import/include list.
@@ -1248,10 +1255,16 @@
                     resolvable.setResolvableStatus(RESOLVED);
                 } else {
                     throw new LinkerException("Invalid target node type " + targetNode.getNodeType() + " for "
-                            + augment.getName());
+                            + augment.getName() + " for " + targetNode.getName() +
+                            "in " + targetNode.getLineNumber()
+                            + " at " + targetNode.getCharPosition() +
+                            " in " + targetNode.getFileName());
                 }
             } else {
-                throw new LinkerException("Failed to link " + augment.getName());
+                throw new LinkerException("Failed to link " + augment.getName() +
+                        "in " + augment.getLineNumber()
+                        + " at " + augment.getCharPosition() +
+                        " in " + augment.getFileName());
             }
         } else if (entityToResolve instanceof YangCompilerAnnotation) {
             YangNode targetNode;
@@ -1267,18 +1280,21 @@
                     resolvable.setResolvableStatus(RESOLVED);
                 } else {
                     throw new LinkerException("Invalid target node type " + targetNode.getNodeType() + " for compiler" +
-                            " annotation " + ca.getPath());
+                            " annotation " + ca.getPath() + " in " + ca.getLineNumber() + " at "
+                            + ca.getCharPosition() + " in " + ca.getFileName());
                 }
             } else {
-                throw new LinkerException("Failed to link compiler annotation " + ca.getPath());
+                throw new LinkerException("Failed to link compiler annotation " + ca.getPath()
+                        + " in " + ca.getLineNumber() + " at "
+                        + ca.getCharPosition() + " in " + ca.getFileName());
             }
         } else if (entityToResolve instanceof YangLeafRef) {
             YangLeafRef leafRef = (YangLeafRef) entityToResolve;
             Object target = xPathLinker.processLeafRefXpathLinking(leafRef.getAtomicPath(),
                     (YangNode) root, leafRef);
             if (target != null) {
-                YangLeaf leaf = null;
-                YangLeafList leafList = null;
+                YangLeaf leaf;
+                YangLeafList leafList;
                 leafRef.setReferredLeafOrLeafList(target);
                 if (target instanceof YangLeaf) {
                     leaf = (YangLeaf) target;
@@ -1297,6 +1313,7 @@
                         + leafRef.getPath());
                 linkerException.setCharPosition(leafRef.getCharPosition());
                 linkerException.setLine(leafRef.getLineNumber());
+                linkerException.setFileName(leafRef.getFileName());
                 throw linkerException;
             }
         }
@@ -1554,6 +1571,7 @@
                     "leafref path " + leafref.getPath() + ", is invalid.");
             dataModelException.setCharPosition(leafref.getCharPosition());
             dataModelException.setLine(leafref.getLineNumber());
+            dataModelException.setFileName(leafref.getFileName());
             throw dataModelException;
         }
     }
@@ -1582,7 +1600,11 @@
                 if (currentSkippedParent == currentParent) {
                     if (currentParent.getParent() == null) {
                         throw new DataModelException("YANG file error: The target node, in the leafref path "
-                                + leafref.getPath() + ", is invalid.");
+                                + leafref.getPath() + ", is invalid."
+                                + " in " +
+                                leafref.getLineNumber() + " at " +
+                                leafref.getCharPosition()
+                                + " in " + leafref.getFileName() + "\"");
                     }
                     currentParent = currentParent.getParent();
                 } else {
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 d77fe7d..a53e727 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
@@ -63,6 +63,7 @@
     private YangNode rootNode;
     private Map<YangAtomicPath, PrefixResolverType> prefixResolverTypes;
     private String curPrefix;
+    private String constructsParentsPrefix;
 
     /**
      * Creates an instance of x-path linker.
@@ -163,6 +164,24 @@
     }
 
     /**
+     * Returns unresolved construct's parent's prefix.
+     *
+     * @return unresolved construct's parent's prefix
+     */
+    private String getConstructsParentsPrefix() {
+        return constructsParentsPrefix;
+    }
+
+    /**
+     * Sets unresolved construct's parent's prefix.
+     *
+     * @param constructsParentsPrefix unresolved construct's parent's prefix
+     */
+    private void setConstructsParentsPrefix(String constructsParentsPrefix) {
+        this.constructsParentsPrefix = constructsParentsPrefix;
+    }
+
+    /**
      * Adds node to resolved nodes.
      *
      * @param path absolute path
@@ -237,6 +256,7 @@
                             + leafref.getPath());
                     linkerException.setCharPosition(leafref.getCharPosition());
                     linkerException.setLine(leafref.getLineNumber());
+                    linkerException.setFileName(leafref.getFileName());
                     throw linkerException;
                 }
             }
@@ -261,6 +281,7 @@
                         "leafref path " + leafref.getPath() + ", is invalid.");
                 linkerException.setCharPosition(leafref.getCharPosition());
                 linkerException.setLine(leafref.getLineNumber());
+                linkerException.setFileName(leafref.getFileName());
                 throw linkerException;
             }
         }
@@ -314,7 +335,8 @@
     private YangLeaf searchReferredLeaf(YangNode targetNode, String leafName) {
         if (!(targetNode instanceof YangLeavesHolder)) {
             throw new LinkerException("Referred node " + targetNode.getName() +
-                    "should be of type leaves holder ");
+                    "should be of type leaves holder in " + targetNode.getLineNumber() +
+                    " at " + targetNode.getCharPosition() + " in " + targetNode.getFileName());
         }
         YangLeavesHolder holder = (YangLeavesHolder) targetNode;
         List<YangLeaf> leaves = holder.getListOfLeaf();
@@ -338,7 +360,8 @@
     private YangLeafList searchReferredLeafList(YangNode targetNode, String leafListName) {
         if (!(targetNode instanceof YangLeavesHolder)) {
             throw new LinkerException("Referred node " + targetNode.getName() +
-                    "should be of type leaves holder ");
+                    "should be of type leaves holder in " + targetNode.getLineNumber() +
+                    " at " + targetNode.getCharPosition() + " in " + targetNode.getFileName());
         }
         YangLeavesHolder holder = (YangLeavesHolder) targetNode;
         List<YangLeafList> leavesList = holder.getListOfLeafList();
@@ -360,6 +383,7 @@
      */
     private YangNode parseData(YangNode root) {
         String rootPrefix = getRootsPrefix(root);
+        setConstructsParentsPrefix(rootPrefix);
         Iterator<YangAtomicPath> pathIterator = getAbsPaths().iterator();
         YangAtomicPath path = pathIterator.next();
         if (path.getNodeIdentifier().getPrefix() != null
@@ -382,27 +406,28 @@
         Stack<YangNode> linkerStack = new Stack<>();
         Iterator<YangAtomicPath> pathIterator = getAbsPaths().iterator();
         YangAtomicPath tempPath = pathIterator.next();
+        YangNodeIdentifier nodeId;
         setCurPrefix(tempPath.getNodeIdentifier().getPrefix());
         int index = 0;
         YangNode tempAugment;
         do {
-
+            nodeId = tempPath.getNodeIdentifier();
             if (tempPath.getNodeIdentifier().getPrefix() == null) {
                 tempAugment = resolveIntraFileAugment(tempPath, root);
             } else {
                 tempAugment = resolveInterFileAugment(tempPath, root);
             }
-
             if (tempAugment != null) {
                 linkerStack.push(tempNode);
                 tempNode = tempAugment;
             }
 
-            tempNode = searchTargetNode(tempNode, tempPath.getNodeIdentifier());
+            tempNode = searchTargetNode(tempNode, nodeId);
+
             if (tempNode == null && linkerStack.size() != 0) {
                 tempNode = linkerStack.peek();
                 linkerStack.pop();
-                tempNode = searchTargetNode(tempNode, tempPath.getNodeIdentifier());
+                tempNode = searchTargetNode(tempNode, nodeId);
             }
 
             if (tempNode != null) {
@@ -558,6 +583,9 @@
             }
         }
 
+        if (nodeId.getName() != null && nodeId.getPrefix().equals(getConstructsParentsPrefix())) {
+            return getRootNode();
+        }
         return root;
     }
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/YangUtilsParserManager.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/YangUtilsParserManager.java
index c8b7804..c2b29ed 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/YangUtilsParserManager.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/YangUtilsParserManager.java
@@ -47,7 +47,7 @@
         try {
             input = new ANTLRFileStream(yangFile);
         } catch (IOException e) {
-            throw new ParserException("YANG file error : YANG file does not exist.");
+            throw new ParserException("YANG file error : YANG file does not exist. " + yangFile);
         }
 
         // Create a lexer that feeds off of input char stream.
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AppDataStructureListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AppDataStructureListener.java
index c541bda..e9ff96c 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AppDataStructureListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AppDataStructureListener.java
@@ -80,6 +80,9 @@
         YangAppDataStructure appDataStructure = new YangAppDataStructure();
         appDataStructure.setPrefix(prefix);
         appDataStructure.setDataStructure(dataStructure);
+        appDataStructure.setLineNumber(ctx.getStart().getLine());
+        appDataStructure.setCharPosition(ctx.getStart().getCharPositionInLine());
+        appDataStructure.setFileName(listener.getFileName());
 
         Parsable curData = listener.getParsedDataStack().peek();
         if (curData instanceof YangCompilerAnnotation) {
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AppExtendedNameListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AppExtendedNameListener.java
index b72b95c..7ff8bbe 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AppExtendedNameListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AppExtendedNameListener.java
@@ -71,6 +71,9 @@
         extendedName.setPrefix(prefix);
         extendedName.setYangAppExtendedName(removeQuotesAndHandleConcat(ctx.extendedName().getText()));
 
+        extendedName.setLineNumber(ctx.getStart().getLine());
+        extendedName.setCharPosition(ctx.getStart().getCharPositionInLine());
+        extendedName.setFileName(listener.getFileName());
         Parsable curData = listener.getParsedDataStack().peek();
         if (curData instanceof YangCompilerAnnotation) {
             YangCompilerAnnotation compilerAnnotation = ((YangCompilerAnnotation) curData);
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ArgumentListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ArgumentListener.java
index 2d06fa4..797da12 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ArgumentListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ArgumentListener.java
@@ -75,6 +75,10 @@
         Parsable curData = listener.getParsedDataStack().peek();
         if (curData instanceof YangExtension) {
             YangExtension extension = ((YangExtension) curData);
+
+            extension.setLineNumber(ctx.getStart().getLine());
+            extension.setCharPosition(ctx.getStart().getCharPositionInLine());
+            extension.setFileName(listener.getFileName());
             extension.setArgumentName(identifier);
         } else {
             throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ARGUMENT_DATA,
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListener.java
index 375a9b8..2717e74 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListener.java
@@ -118,7 +118,9 @@
         if (curData instanceof YangModule || curData instanceof YangSubModule || curData instanceof YangUses) {
             YangNode curNode = (YangNode) curData;
             YangAugment yangAugment = getYangAugmentNode(JAVA_GENERATION);
-
+            yangAugment.setLineNumber(line);
+            yangAugment.setCharPosition(charPositionInLine);
+            yangAugment.setFileName(listener.getFileName());
             //validateTargetNodePath(targetNodes, curNode, ctx);
             // TODO: handle in linker.
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BaseListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BaseListener.java
index 25bb595..ebf85a7 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BaseListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BaseListener.java
@@ -90,6 +90,10 @@
         int errorLine = ctx.getStart().getLine();
         int errorPosition = ctx.getStart().getCharPositionInLine();
 
+        yangBase.setLineNumber(errorLine);
+        yangBase.setCharPosition(errorPosition);
+        yangBase.setFileName(listener.getFileName());
+
         // Add resolution information to the list
         YangResolutionInfoImpl resolutionInfo =
                 new YangResolutionInfoImpl<YangBase>(yangBase, (YangNode) tmpData, errorLine, errorPosition);
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BelongsToListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BelongsToListener.java
index ab12d46..4f7ecf8 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BelongsToListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BelongsToListener.java
@@ -93,6 +93,7 @@
         int errorPosition = ctx.getStart().getCharPositionInLine();
         belongstoNode.setLineNumber(errorLine);
         belongstoNode.setCharPosition(errorPosition);
+        belongstoNode.setFileName(listener.getFileName());
 
         // Push belongsto into the stack.
         listener.getParsedDataStack().push(belongstoNode);
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BitListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BitListener.java
index e011fca..bd60910 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BitListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BitListener.java
@@ -112,6 +112,10 @@
 
         YangBit bitNode = new YangBit();
         bitNode.setBitName(identifier);
+
+        bitNode.setLineNumber(ctx.getStart().getLine());
+        bitNode.setCharPosition(ctx.getStart().getCharPositionInLine());
+        bitNode.setFileName(listener.getFileName());
         listener.getParsedDataStack().push(bitNode);
     }
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BitsListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BitsListener.java
index f2c326d..a476902 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BitsListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BitsListener.java
@@ -89,6 +89,10 @@
 
         if (listener.getParsedDataStack().peek() instanceof YangType) {
             YangBits bitsNode = new YangBits();
+
+            bitsNode.setLineNumber(ctx.getStart().getLine());
+            bitsNode.setCharPosition(ctx.getStart().getCharPositionInLine());
+            bitsNode.setFileName(listener.getFileName());
             Parsable typeData = listener.getParsedDataStack().pop();
 
             // Check for stack to be non empty.
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/CaseListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/CaseListener.java
index 2440521..f3803da 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/CaseListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/CaseListener.java
@@ -108,6 +108,9 @@
         if (curData instanceof YangChoice || curData instanceof YangAugment) {
             YangCase caseNode = getYangCaseNode(JAVA_GENERATION);
             caseNode.setName(identifier);
+            caseNode.setLineNumber(line);
+            caseNode.setCharPosition(charPositionInLine);
+            caseNode.setFileName(listener.getFileName());
             YangNode curNode = (YangNode) curData;
             try {
                 curNode.addChild(caseNode);
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ChoiceListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ChoiceListener.java
index ff476c7..00b9973 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ChoiceListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ChoiceListener.java
@@ -129,7 +129,9 @@
 
             YangChoice choiceNode = getYangChoiceNode(JAVA_GENERATION);
             choiceNode.setName(identifier);
-
+            choiceNode.setLineNumber(line);
+            choiceNode.setCharPosition(charPositionInLine);
+            choiceNode.setFileName(listener.getFileName());
             /*
              * If "config" is not specified, the default is the same as the parent
              * schema node's "config" value.
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/CompilerAnnotationListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/CompilerAnnotationListener.java
index d8abb31..ed892b3 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/CompilerAnnotationListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/CompilerAnnotationListener.java
@@ -91,6 +91,9 @@
         compilerAnnotation.setPrefix(prefix);
         compilerAnnotation.setPath(removeQuotesAndHandleConcat(ctx.string().getText()));
 
+        compilerAnnotation.setLineNumber(ctx.getStart().getLine());
+        compilerAnnotation.setCharPosition(ctx.getStart().getCharPositionInLine());
+        compilerAnnotation.setFileName(listener.getFileName());
         // Validate augment argument string
         List<YangAtomicPath> targetNodes = getValidAbsoluteSchemaNodeId(ctx.string().getText(),
                                                                         COMPILER_ANNOTATION_DATA, ctx);
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListener.java
index 5ff73e2..7ea261b 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListener.java
@@ -124,6 +124,9 @@
         YangContainer container = getYangContainerNode(JAVA_GENERATION);
         container.setName(identifier);
 
+        container.setLineNumber(line);
+        container.setCharPosition(charPositionInLine);
+        container.setFileName(listener.getFileName());
         /*
          * If "config" is not specified, the default is the same as the parent
          * schema node's "config" value.
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DataStructureKeyListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DataStructureKeyListener.java
index 65fc50b..9cee91f 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DataStructureKeyListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DataStructureKeyListener.java
@@ -69,6 +69,10 @@
         Parsable tmpData = listener.getParsedDataStack().peek();
         if (listener.getParsedDataStack().peek() instanceof YangAppDataStructure) {
             YangAppDataStructure dataStructure = (YangAppDataStructure) tmpData;
+
+            dataStructure.setLineNumber(ctx.getStart().getLine());
+            dataStructure.setCharPosition(ctx.getStart().getCharPositionInLine());
+            dataStructure.setFileName(listener.getFileName());
             String tmpKeyValue = removeQuotesAndHandleConcat(ctx.string().getText());
             if (tmpKeyValue.contains(SPACE)) {
                 String[] keyValues = tmpKeyValue.split(SPACE);
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/Decimal64Listener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/Decimal64Listener.java
index 1806c4c..14ae935 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/Decimal64Listener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/Decimal64Listener.java
@@ -112,6 +112,10 @@
                     (YangType<YangDecimal64<YangRangeRestriction>>) tmpNode;
             YangDecimal64 decimal64Node = new YangDecimal64();
             typeNode.setDataTypeExtendedInfo(decimal64Node);
+
+            decimal64Node.setLineNumber(ctx.getStart().getLine());
+            decimal64Node.setCharPosition(ctx.getStart().getCharPositionInLine());
+            decimal64Node.setFileName(listener.getFileName());
         } else {
             throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, DECIMAL64_DATA, "", ENTRY));
         }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListener.java
index bc7c060..b93fe52 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListener.java
@@ -46,13 +46,13 @@
 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
 import org.onosproject.yangutils.parser.exceptions.ParserException;
 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-import org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil;
 
 import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DEFAULT_DATA;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
 
 /**
@@ -83,17 +83,17 @@
         switch (tmpNode.getYangConstructType()) {
             case TYPEDEF_DATA: {
                 YangTypeDef typeDef = (YangTypeDef) tmpNode;
-                typeDef.setDefaultValueInString(ListenerUtil.removeQuotesAndHandleConcat(ctx.string().getText()));
+                typeDef.setDefaultValueInString(removeQuotesAndHandleConcat(ctx.string().getText()));
                 break;
             }
             case LEAF_DATA: {
                 YangLeaf leaf = (YangLeaf) tmpNode;
-                leaf.setDefaultValueInString(ListenerUtil.removeQuotesAndHandleConcat(ctx.string().getText()));
+                leaf.setDefaultValueInString(removeQuotesAndHandleConcat(ctx.string().getText()));
                 break;
             }
             case CHOICE_DATA: {
                 YangChoice choice = (YangChoice) tmpNode;
-                choice.setDefaultValueInString(ListenerUtil.removeQuotesAndHandleConcat(ctx.string().getText()));
+                choice.setDefaultValueInString(removeQuotesAndHandleConcat(ctx.string().getText()));
                 break;
             }
             default:
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumListener.java
index 3440e2e..b0beef5 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumListener.java
@@ -107,6 +107,10 @@
 
         YangEnum enumNode = new YangEnum();
         enumNode.setNamedValue(getValidNamedValue(ctx.string().getText()));
+
+        enumNode.setLineNumber(ctx.getStart().getLine());
+        enumNode.setCharPosition(ctx.getStart().getCharPositionInLine());
+        enumNode.setFileName(listener.getFileName());
         listener.getParsedDataStack().push(enumNode);
     }
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumerationListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumerationListener.java
index bc6dd45..5eff217 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumerationListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumerationListener.java
@@ -102,6 +102,9 @@
 
         if (listener.getParsedDataStack().peek() instanceof YangType) {
             YangEnumeration enumerationNode = getYangEnumerationNode(JAVA_GENERATION);
+            enumerationNode.setLineNumber(ctx.getStart().getLine());
+            enumerationNode.setCharPosition(ctx.getStart().getCharPositionInLine());
+            enumerationNode.setFileName(listener.getFileName());
             Parsable typeData = listener.getParsedDataStack().pop();
 
             // Check for stack to be non empty.
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ErrorAppTagListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ErrorAppTagListener.java
index befc70a..64f718b 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ErrorAppTagListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ErrorAppTagListener.java
@@ -73,6 +73,10 @@
         if (tmpNode instanceof YangAppErrorHolder) {
             YangAppErrorInfo yangAppErrorInfo = ((YangAppErrorHolder) tmpNode).getAppErrorInfo();
             yangAppErrorInfo.setErrorAppTag(errorMessage);
+
+            yangAppErrorInfo.setLineNumber(ctx.getStart().getLine());
+            yangAppErrorInfo.setCharPosition(ctx.getStart().getCharPositionInLine());
+            yangAppErrorInfo.setFileName(listener.getFileName());
         } else {
             throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ERROR_APP_TAG_DATA,
                     ctx.string().getText(), ENTRY));
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ErrorMessageListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ErrorMessageListener.java
index e36fe74..ead1746 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ErrorMessageListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ErrorMessageListener.java
@@ -74,6 +74,10 @@
         if (tmpNode instanceof YangAppErrorHolder) {
             YangAppErrorInfo yangAppErrorInfo = ((YangAppErrorHolder) tmpNode).getAppErrorInfo();
             yangAppErrorInfo.setErrorMessage(errorMessage);
+
+            yangAppErrorInfo.setLineNumber(ctx.getStart().getLine());
+            yangAppErrorInfo.setCharPosition(ctx.getStart().getCharPositionInLine());
+            yangAppErrorInfo.setFileName(listener.getFileName());
         } else {
             throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ERROR_MESSAGE_DATA,
                     ctx.string().getText(), ENTRY));
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ExtensionListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ExtensionListener.java
index 2169640..9a1180f 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ExtensionListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ExtensionListener.java
@@ -80,6 +80,10 @@
         String identifier = getValidIdentifier(ctx.identifier().getText(), EXTENSION_DATA, ctx);
 
         YangExtension extension = new YangExtension();
+
+        extension.setLineNumber(ctx.getStart().getLine());
+        extension.setCharPosition(ctx.getStart().getCharPositionInLine());
+        extension.setFileName(listener.getFileName());
         extension.setName(identifier);
 
         Parsable curData = listener.getParsedDataStack().peek();
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/FeatureListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/FeatureListener.java
index 6a70f31..12e83b1 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/FeatureListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/FeatureListener.java
@@ -88,6 +88,9 @@
             YangFeature feature = new YangFeature();
             feature.setName(identifier);
 
+            feature.setLineNumber(ctx.getStart().getLine());
+            feature.setCharPosition(ctx.getStart().getCharPositionInLine());
+            feature.setFileName(listener.getFileName());
             featureHolder.addFeatureList(feature);
             listener.getParsedDataStack().push(feature);
         } else {
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 4dc224f..46ca2e0 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
@@ -122,6 +122,10 @@
             YangGrouping groupingNode = getYangGroupingNode(JAVA_GENERATION);
             groupingNode.setName(identifier);
             groupingNode.setGroupingDepth(listener.getGroupingDepth());
+
+            groupingNode.setLineNumber(line);
+            groupingNode.setCharPosition(charPositionInLine);
+            groupingNode.setFileName(listener.getFileName());
             YangNode curNode = (YangNode) curData;
             try {
                 curNode.addChild(groupingNode);
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IdentityListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IdentityListener.java
index 29443ef..332ae4f 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IdentityListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IdentityListener.java
@@ -82,6 +82,9 @@
         YangIdentity identity = getYangIdentityNode(JAVA_GENERATION);
         identity.setName(identifier);
 
+        identity.setLineNumber(ctx.getStart().getLine());
+        identity.setCharPosition(ctx.getStart().getCharPositionInLine());
+        identity.setFileName(listener.getFileName());
         Parsable curData = listener.getParsedDataStack().peek();
         if (curData instanceof YangModule || curData instanceof YangSubModule) {
             YangNode curNode = (YangNode) curData;
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IdentityrefListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IdentityrefListener.java
index c61eb3e..ad197a6 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IdentityrefListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IdentityrefListener.java
@@ -94,6 +94,9 @@
             int errorLine = ctx.getStart().getLine();
             int errorPosition = ctx.getStart().getCharPositionInLine();
 
+            identityRef.setLineNumber(errorLine);
+            identityRef.setCharPosition(errorPosition);
+            identityRef.setFileName(listener.getFileName());
             Parsable tmpData = listener.getParsedDataStack().peek();
             switch (tmpData.getYangConstructType()) {
                 case LEAF_DATA:
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IfFeatureListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IfFeatureListener.java
index 29899de..ab11780 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IfFeatureListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IfFeatureListener.java
@@ -87,6 +87,10 @@
         YangIfFeature ifFeature = new YangIfFeature();
         ifFeature.setName(nodeIdentifier);
         ifFeature.setResolvableStatus(UNRESOLVED);
+
+        ifFeature.setLineNumber(ctx.getStart().getLine());
+        ifFeature.setCharPosition(ctx.getStart().getCharPositionInLine());
+        ifFeature.setFileName(listener.getFileName());
         YangIfFeatureHolder ifFeatureHolder;
 
         // Obtain the node of the stack.
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ImportListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ImportListener.java
index 76a2e30..1f7a7d7 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ImportListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ImportListener.java
@@ -90,6 +90,7 @@
         int errorPosition = ctx.getStart().getCharPositionInLine();
         importNode.setLineNumber(errorLine);
         importNode.setCharPosition(errorPosition);
+        importNode.setFileName(listener.getFileName());
 
         // Push import node to the stack.
         listener.getParsedDataStack().push(importNode);
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IncludeListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IncludeListener.java
index 847712f..5842a7e 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IncludeListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IncludeListener.java
@@ -90,6 +90,7 @@
         int errorPosition = ctx.getStart().getCharPositionInLine();
         includeNode.setLineNumber(errorLine);
         includeNode.setCharPosition(errorPosition);
+        includeNode.setFileName(listener.getFileName());
 
         listener.getParsedDataStack().push(includeNode);
     }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/InputListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/InputListener.java
index 83e47d4..3003d56 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/InputListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/InputListener.java
@@ -93,6 +93,10 @@
 
             YangInput yangInput = getYangInputNode(JAVA_GENERATION);
             yangInput.setName(((YangRpc) curData).getName() + INPUT_KEYWORD);
+
+            yangInput.setLineNumber(ctx.getStart().getLine());
+            yangInput.setCharPosition(ctx.getStart().getCharPositionInLine());
+            yangInput.setFileName(listener.getFileName());
             YangNode curNode = (YangNode) curData;
             try {
                 curNode.addChild(yangInput);
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListener.java
index 99e8cae..8dd33b8 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListener.java
@@ -111,7 +111,9 @@
 
         YangLeafList leafList = getYangLeafList(JAVA_GENERATION);
         leafList.setName(identifier);
-
+        leafList.setLineNumber(line);
+        leafList.setCharPosition(charPositionInLine);
+        leafList.setFileName(listener.getFileName());
         /*
          * If "config" is not specified, the default is the same as the parent
          * schema node's "config" value.
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListener.java
index edf0ed4..d6f06ff 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListener.java
@@ -115,6 +115,9 @@
 
         YangLeaf leaf = getYangLeaf(JAVA_GENERATION);
         leaf.setName(identifier);
+        leaf.setLineNumber(line);
+        leaf.setCharPosition(charPositionInLine);
+        leaf.setFileName(listener.getFileName());
 
         /*
          * If "config" is not specified, the default is the same as the parent
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafrefListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafrefListener.java
index fea7f38..a90b87b 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafrefListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafrefListener.java
@@ -102,6 +102,7 @@
 
         leafRef.setLineNumber(errorLine);
         leafRef.setCharPosition(errorPosition);
+        leafRef.setFileName(listener.getFileName());
         Parsable typeData = listener.getParsedDataStack().pop();
 
         if (!(typeData instanceof YangType)) {
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ListListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ListListener.java
index 5154171..ab91675 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ListListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ListListener.java
@@ -129,7 +129,9 @@
 
         YangList yangList = getYangListNode(JAVA_GENERATION);
         yangList.setName(identifier);
-
+        yangList.setLineNumber(line);
+        yangList.setCharPosition(charPositionInLine);
+        yangList.setFileName(listener.getFileName());
         /*
          * If "config" is not specified, the default is the same as the parent
          * schema node's "config" value.
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListener.java
index 90acba6..93cd621 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListener.java
@@ -78,19 +78,21 @@
 
         int maxElementsValue = getValidMaxElementValue(ctx);
 
+        YangMaxElement maxElement = new YangMaxElement();
+        maxElement.setMaxElement(maxElementsValue);
+
+        maxElement.setLineNumber(ctx.getStart().getLine());
+        maxElement.setCharPosition(ctx.getStart().getCharPositionInLine());
+        maxElement.setFileName(listener.getFileName());
         Parsable tmpData = listener.getParsedDataStack().peek();
         switch (tmpData.getYangConstructType()) {
             case LEAF_LIST_DATA:
                 YangLeafList leafList = (YangLeafList) tmpData;
-                YangMaxElement maxLeafListElement = new YangMaxElement();
-                maxLeafListElement.setMaxElement(maxElementsValue);
-                leafList.setMaxElements(maxLeafListElement);
+                leafList.setMaxElements(maxElement);
                 break;
             case LIST_DATA:
                 YangList yangList = (YangList) tmpData;
-                YangMaxElement maxListElement = new YangMaxElement();
-                maxListElement.setMaxElement(maxElementsValue);
-                yangList.setMaxElements(maxListElement);
+                yangList.setMaxElements(maxElement);
                 break;
             default:
                 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, MAX_ELEMENT_DATA, "", ENTRY));
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MinElementsListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MinElementsListener.java
index 64069ae..3fae538 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MinElementsListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MinElementsListener.java
@@ -75,18 +75,20 @@
 
         int minElementValue = getValidNonNegativeIntegerValue(ctx.minValue().getText(), MIN_ELEMENT_DATA, ctx);
 
+        YangMinElement minElement = new YangMinElement();
+
+        minElement.setMinElement(minElementValue);
+        minElement.setLineNumber(ctx.getStart().getLine());
+        minElement.setCharPosition(ctx.getStart().getCharPositionInLine());
+        minElement.setFileName(listener.getFileName());
         Parsable tmpData = listener.getParsedDataStack().peek();
         switch (tmpData.getYangConstructType()) {
             case LEAF_LIST_DATA:
                 YangLeafList leafList = (YangLeafList) tmpData;
-                YangMinElement minLeafListElement = new YangMinElement();
-                minLeafListElement.setMinElement(minElementValue);
-                leafList.setMinElements(minLeafListElement);
+                leafList.setMinElements(minElement);
                 break;
             case LIST_DATA:
                 YangList yangList = (YangList) tmpData;
-                YangMinElement minElement = new YangMinElement();
-                minElement.setMinElement(minElementValue);
                 yangList.setMinElements(minElement);
                 break;
             default:
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ModuleListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ModuleListener.java
index c77ffea..5598561 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ModuleListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ModuleListener.java
@@ -91,6 +91,9 @@
 
         YangModule yangModule = getYangModuleNode(JAVA_GENERATION);
         yangModule.setName(identifier);
+        yangModule.setLineNumber(ctx.getStart().getLine());
+        yangModule.setCharPosition(ctx.getStart().getCharPositionInLine());
+        yangModule.setFileName(listener.getFileName());
 
         if (ctx.moduleBody().moduleHeaderStatement().yangVersionStatement() == null) {
             yangModule.setVersion((byte) 1);
@@ -149,6 +152,7 @@
             LinkerException linkerException = new LinkerException(e.getMessage());
             linkerException.setLine(e.getLineNumber());
             linkerException.setCharPosition(e.getCharPositionInLine());
+            linkerException.setFileName(listener.getFileName());
             throw linkerException;
         }
     }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MustListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MustListener.java
index b6cbf20..421ede1 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MustListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MustListener.java
@@ -86,6 +86,9 @@
             YangMust must = new YangMust();
             must.setConstraint(constraint);
 
+            must.setLineNumber(ctx.getStart().getLine());
+            must.setCharPosition(ctx.getStart().getCharPositionInLine());
+            must.setFileName(listener.getFileName());
             YangMustHolder mustHolder = (YangMustHolder) tmpNode;
             mustHolder.addMust(must);
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NotificationListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NotificationListener.java
index 94369d7..6109518 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NotificationListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NotificationListener.java
@@ -113,6 +113,10 @@
 
             YangNotification notification = getYangNotificationNode(JAVA_GENERATION);
             notification.setName(identifier);
+
+            notification.setLineNumber(ctx.getStart().getLine());
+            notification.setCharPosition(ctx.getStart().getCharPositionInLine());
+            notification.setFileName(listener.getFileName());
             ((RpcNotificationContainer) curData).setNotificationPresenceFlag(true);
             YangNode curNode = (YangNode) curData;
             try {
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/OutputListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/OutputListener.java
index aee77b0..70c135f 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/OutputListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/OutputListener.java
@@ -93,6 +93,10 @@
 
             YangOutput yangOutput = getYangOutputNode(JAVA_GENERATION);
             yangOutput.setName(((YangRpc) curData).getName() + OUTPUT_KEYWORD);
+
+            yangOutput.setLineNumber(ctx.getStart().getLine());
+            yangOutput.setCharPosition(ctx.getStart().getCharPositionInLine());
+            yangOutput.setFileName(listener.getFileName());
             YangNode curNode = (YangNode) curData;
             try {
                 curNode.addChild(yangOutput);
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RpcListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RpcListener.java
index 89f7eb7..e037e52 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RpcListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RpcListener.java
@@ -111,6 +111,10 @@
 
             YangNode curNode = (YangNode) curData;
             YangRpc yangRpc = getYangRpcNode(JAVA_GENERATION);
+
+            yangRpc.setLineNumber(ctx.getStart().getLine());
+            yangRpc.setCharPosition(ctx.getStart().getCharPositionInLine());
+            yangRpc.setFileName(listener.getFileName());
             yangRpc.setName(identifier);
             try {
                 curNode.addChild(yangRpc);
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ShortCaseListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ShortCaseListener.java
index 90b5269..6963a98 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ShortCaseListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ShortCaseListener.java
@@ -86,6 +86,9 @@
 
         YangCase caseNode = getYangCaseNode(JAVA_GENERATION);
 
+        caseNode.setLineNumber(ctx.getStart().getLine());
+        caseNode.setCharPosition(ctx.getStart().getCharPositionInLine());
+        caseNode.setFileName(listener.getFileName());
         if (ctx.containerStatement() != null) {
             caseNode.setName(getValidIdentifier(ctx.containerStatement().identifier().getText(), CASE_DATA, ctx));
             errorConstructContext = ctx.containerStatement();
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/SubModuleListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/SubModuleListener.java
index a19431d..b429e6d 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/SubModuleListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/SubModuleListener.java
@@ -96,6 +96,9 @@
         YangSubModule yangSubModule = getYangSubModuleNode(JAVA_GENERATION);
         yangSubModule.setName(identifier);
 
+        yangSubModule.setLineNumber(ctx.getStart().getLine());
+        yangSubModule.setCharPosition(ctx.getStart().getCharPositionInLine());
+        yangSubModule.setFileName(listener.getFileName());
         if (ctx.submoduleBody().submoduleHeaderStatement().yangVersionStatement() == null) {
             yangSubModule.setVersion((byte) 1);
         }
@@ -155,7 +158,7 @@
             LinkerException linkerException = new LinkerException(e.getMessage());
             linkerException.setLine(e.getLineNumber());
             linkerException.setCharPosition(e.getCharPositionInLine());
-
+            linkerException.setFileName(listener.getFileName());
             throw linkerException;
         }
     }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeDefListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeDefListener.java
index 4a629ba..4821cfa 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeDefListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeDefListener.java
@@ -130,6 +130,9 @@
         YangTypeDef typeDefNode = getYangTypeDefNode(JAVA_GENERATION);
         typeDefNode.setName(identifier);
 
+        typeDefNode.setLineNumber(ctx.getStart().getLine());
+        typeDefNode.setCharPosition(ctx.getStart().getCharPositionInLine());
+        typeDefNode.setFileName(listener.getFileName());
         Parsable curData = listener.getParsedDataStack().peek();
 
         if (curData instanceof YangModule || curData instanceof YangSubModule || curData instanceof YangContainer
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeListener.java
index 9d92018..ab0ad3c 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeListener.java
@@ -104,6 +104,9 @@
         type.setNodeIdentifier(nodeIdentifier);
         type.setDataType(yangDataTypes);
 
+        type.setLineNumber(ctx.getStart().getLine());
+        type.setCharPosition(ctx.getStart().getCharPositionInLine());
+        type.setFileName(listener.getFileName());
         // Set default require instance value as true for instance identifier.
         setDefaultRequireInstanceForInstanceIdentifier(type);
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UnionListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UnionListener.java
index 63a09c5..9653e40 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UnionListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UnionListener.java
@@ -100,6 +100,9 @@
             YangUnion unionNode = getYangUnionNode(JAVA_GENERATION);
             Parsable typeData = listener.getParsedDataStack().pop();
 
+            unionNode.setLineNumber(ctx.getStart().getLine());
+            unionNode.setCharPosition(ctx.getStart().getCharPositionInLine());
+            unionNode.setFileName(listener.getFileName());
             // Check for stack to be non empty.
             checkStackIsNotEmpty(listener, MISSING_HOLDER, UNION_DATA, "", ENTRY);
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UsesListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UsesListener.java
index 6e27a1b..2609d44 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UsesListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UsesListener.java
@@ -135,6 +135,10 @@
                 || curData instanceof YangNotification) {
 
             YangUses usesNode = getYangUsesNode(JAVA_GENERATION);
+
+            usesNode.setLineNumber(ctx.getStart().getLine());
+            usesNode.setCharPosition(ctx.getStart().getCharPositionInLine());
+            usesNode.setFileName(listener.getFileName());
             YangNodeIdentifier nodeIdentifier = getValidNodeIdentifier(ctx.string().getText(), USES_DATA, ctx);
             usesNode.setNodeIdentifier(nodeIdentifier);
             usesNode.setCurrentGroupingDepth(listener.getGroupingDepth());
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/WhenListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/WhenListener.java
index 15092a1..218440f 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/WhenListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/WhenListener.java
@@ -88,6 +88,10 @@
             YangWhen when = new YangWhen();
             when.setCondition(condition);
 
+            when.setLineNumber(ctx.getStart().getLine());
+            when.setCharPosition(ctx.getStart().getCharPositionInLine());
+            when.setFileName(listener.getFileName());
+
             whenHolder.setWhen(when);
             listener.getParsedDataStack().push(when);
         } else {
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 ab3c6e1..d89eee4 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
@@ -16,13 +16,6 @@
 
 package org.onosproject.yangutils.plugin.manager;
 
-import java.io.IOException;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -45,7 +38,14 @@
 import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
 import org.sonatype.plexus.build.incremental.BuildContext;
 
-import static org.apache.maven.plugins.annotations.LifecyclePhase.GENERATE_SOURCES;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import static org.apache.maven.plugins.annotations.LifecyclePhase.PROCESS_SOURCES;
 import static org.apache.maven.plugins.annotations.ResolutionScope.COMPILE;
 import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_DERIVED_DATA_TYPE;
 import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_IDENTITYREF;
@@ -59,6 +59,8 @@
 import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_BASE_PKG;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
 import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
+import static org.onosproject.yangutils.utils.UtilConstants.TEMP;
+import static org.onosproject.yangutils.utils.UtilConstants.YANG_RESOURCES;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getDirectory;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
@@ -69,8 +71,7 @@
  * Execution phase is generate-sources.
  * requiresDependencyResolution at compile time.
  */
-@Mojo(name = "yang2java", defaultPhase = GENERATE_SOURCES, requiresDependencyResolution = COMPILE,
-        requiresProject = true)
+@Mojo(name = "yang2java", defaultPhase = PROCESS_SOURCES, requiresDependencyResolution = COMPILE)
 public class YangUtilManager
         extends AbstractMojo {
 
@@ -83,6 +84,7 @@
     private YangLinker yangLinker = new YangLinkerManager();
     private YangFileInfo curYangFileInfo = new YangFileInfo();
     private Set<YangNode> yangNodeSet = new HashSet<>();
+
     /**
      * Source directory for YANG files.
      */
@@ -170,8 +172,8 @@
             /*
              * For deleting the generated code in previous build.
              */
-            deleteDirectory(getDirectory(baseDir, outputDirectory));
-
+            deleteDirectory(getDirectory(baseDir, outputDirectory + SLASH + TEMP));
+            deleteDirectory(getDirectory(baseDir, outputDirectory + SLASH + YANG_RESOURCES));
             String searchDir = getDirectory(baseDir, yangFilesDir);
             String codeGenDir = getDirectory(baseDir, classFileDir) + SLASH;
 
@@ -227,7 +229,7 @@
                 throw new MojoExecutionException(
                         "Error handler failed to delete files for data model node.");
             }
-            e.printStackTrace();
+            getLog().info(e);
             throw new MojoExecutionException(
                     "Exception occurred due to " + e.getLocalizedMessage() + " in " + fileName
                             + " YANG file.");
@@ -320,7 +322,7 @@
 
                     }
                     if (e.getMessage() != null) {
-                        logInfo = logInfo + NEW_LINE + e.getMessage();
+                        logInfo = logInfo + NEW_LINE + e.getLocalizedMessage();
                     }
                     getLog().info(logInfo);
                     throw e;
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 c737175..935f6b6 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
@@ -23,6 +23,8 @@
 
     private static final long serialVersionUID = 20160311L;
     private transient String fileName;
+    private transient int lineNumber;
+    private transient int charPosition;
 
     /**
      * Creates a new exception.
@@ -69,9 +71,45 @@
     }
 
     /**
-     * Sets file name in translator exception.
+     * Returns line number of the exception.
      *
-     * @param fileName generated file name
+     * @return line number of the exception
+     */
+    public int getLineNumber() {
+        return this.lineNumber;
+    }
+
+    /**
+     * Returns position of the exception.
+     *
+     * @return position of the exception
+     */
+    public int getCharPositionInLine() {
+        return this.charPosition;
+    }
+
+    /**
+     * Sets line number of YANG file.
+     *
+     * @param line line number of YANG file
+     */
+    public void setLine(int line) {
+        this.lineNumber = line;
+    }
+
+    /**
+     * Sets position of exception.
+     *
+     * @param charPosition position of exception
+     */
+    public void setCharPosition(int charPosition) {
+        this.charPosition = charPosition;
+    }
+
+    /**
+     * Sets file name in exception.
+     *
+     * @param fileName YANG file name
      */
     public void setFileName(String fileName) {
         this.fileName = fileName;
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 a033a00..0f68e97 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
@@ -23,6 +23,8 @@
 
     private static final long serialVersionUID = 20160311L;
     private transient String fileName;
+    private transient int lineNumber;
+    private transient int charPosition;
 
     /**
      * Create a new translator exception.
@@ -60,18 +62,54 @@
     }
 
     /**
-     * Returns generated file name for the exception.
+     * Returns line number of the exception.
      *
-     * @return generated file name for the exception
+     * @return line number of the exception
+     */
+    public int getLineNumber() {
+        return this.lineNumber;
+    }
+
+    /**
+     * Returns YANG file name of the exception.
+     *
+     * @return YANG file name of the exception
      */
     public String getFileName() {
         return this.fileName;
     }
 
     /**
+     * Returns position of the exception.
+     *
+     * @return position of the exception
+     */
+    public int getCharPositionInLine() {
+        return this.charPosition;
+    }
+
+    /**
+     * Sets line number of YANG file.
+     *
+     * @param line line number of YANG file
+     */
+    public void setLine(int line) {
+        this.lineNumber = line;
+    }
+
+    /**
+     * Sets position of exception.
+     *
+     * @param charPosition position of exception
+     */
+    public void setCharPosition(int charPosition) {
+        this.charPosition = charPosition;
+    }
+
+    /**
      * Sets file name in translator exception.
      *
-     * @param fileName generated file name
+     * @param fileName YANG file name
      */
     public void setFileName(String fileName) {
         this.fileName = fileName;
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorInfo.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorInfo.java
index 6edd208..4ddde17 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorInfo.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorInfo.java
@@ -16,6 +16,8 @@
 
 package org.onosproject.yangutils.translator.tojava;
 
+import org.onosproject.yangutils.datamodel.LocationInfo;
+
 /**
  * Represents YANG java info containing interface for java code generator, java
  * file information, java import data and temp java code fragment files. This
@@ -23,5 +25,5 @@
  * entry function.
  */
 public interface JavaCodeGeneratorInfo
-        extends JavaFileInfoContainer, TempJavaCodeFragmentFilesContainer {
+        extends JavaFileInfoContainer, TempJavaCodeFragmentFilesContainer, LocationInfo {
 }
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 089a1b3..724c9cf 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
@@ -90,7 +90,9 @@
         while (codeGenNode != null) {
             if (curTraversal != PARENT) {
                 if (!(codeGenNode instanceof JavaCodeGenerator)) {
-                    throw new TranslatorException("Unsupported node to generate code");
+                    throw new TranslatorException("Unsupported node to generate code " +
+                            codeGenNode.getName() + " in " + codeGenNode.getLineNumber() + " at "
+                            + codeGenNode.getCharPosition() + " in " + codeGenNode.getFileName());
                 }
                 setCurNode(codeGenNode);
                 try {
@@ -155,7 +157,9 @@
         } else {
             close(codeGenNode, yangPlugin);
             throw new TranslatorException(
-                    "Generated data model node cannot be translated to target language code");
+                    "Generated data model node cannot be translated to target language code for " +
+                            codeGenNode.getName() + " in " + codeGenNode.getLineNumber()
+                            + " at " + codeGenNode.getCharPosition() + " in " + codeGenNode.getFileName());
         }
     }
 
@@ -175,7 +179,9 @@
         } else {
             close(codeGenNode, pluginConfig);
             throw new TranslatorException(
-                    "Generated data model node cannot be translated to target language code");
+                    "Generated data model node cannot be translated to target language code for " +
+                            codeGenNode.getName() + " in " + codeGenNode.getLineNumber()
+                            + " at " + codeGenNode.getCharPosition() + " in " + codeGenNode.getFileName());
         }
     }
 
@@ -281,18 +287,17 @@
         if (node instanceof JavaCodeGenerator && ((TempJavaCodeFragmentFilesContainer) node)
                 .getTempJavaCodeFragmentFiles() != null) {
             ((TempJavaCodeFragmentFilesContainer) node).getTempJavaCodeFragmentFiles().freeTemporaryResources(true);
-        } else {
-
-            if (getRootNode() != null) {
-                JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) getRootNode()).getJavaFileInfo();
-                if (javaFileInfo != null) {
-                    searchAndDeleteTempDir(javaFileInfo.getBaseCodeGenPath() +
-                            javaFileInfo.getPackageFilePath());
-                } else {
-                    searchAndDeleteTempDir(yangPlugin.getCodeGenDir());
-                }
+        }
+        if (getRootNode() != null) {
+            JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) getRootNode()).getJavaFileInfo();
+            if (javaFileInfo.getPackage() != null) {
+                searchAndDeleteTempDir(javaFileInfo.getBaseCodeGenPath() +
+                        javaFileInfo.getPackageFilePath());
+            } else {
+                searchAndDeleteTempDir(yangPlugin.getCodeGenDir());
             }
         }
+
     }
 
     /**
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 a0e7b93..27cba78 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
@@ -91,7 +91,8 @@
         JavaQualifiedTypeInfoTranslator importInfo = (JavaQualifiedTypeInfoTranslator) leaf.getJavaQualifiedInfo();
 
         if (leaf.getDataType() == null) {
-            throw new TranslatorException("missing data type of leaf " + leaf.getName());
+            throw new TranslatorException("missing data type of leaf " + leaf.getName()
+                    + " in " + leaf.getLineNumber() + " at" + leaf.getCharPosition() + " in " + leaf.getFileName());
         }
 
         /*
@@ -109,7 +110,9 @@
             String classPkg = getJavaImportPackage(leaf.getDataType(),
                     leaf.isLeafList(), leaf.getConflictResolveConfig());
             if (classPkg == null) {
-                throw new TranslatorException("import package cannot be null when the class is used");
+                throw new TranslatorException("import package cannot be null when the class is used for "
+                        + leaf.getName()
+                        + " in " + leaf.getLineNumber() + " at" + leaf.getCharPosition() + " in " + leaf.getFileName());
             }
             importInfo.setPkgInfo(classPkg);
         } else {
@@ -119,7 +122,9 @@
              */
             String dataTypeName = AttributesJavaDataType.getJavaDataType(leaf.getDataType());
             if (dataTypeName == null) {
-                throw new TranslatorException("not supported data type");
+                throw new TranslatorException("not supported data type for "
+                        + leaf.getName()
+                        + " in " + leaf.getLineNumber() + " at" + leaf.getCharPosition() + " in " + leaf.getFileName());
             }
             importInfo.setClassInfo(dataTypeName);
         }
@@ -144,7 +149,9 @@
 
         if (!(curNode instanceof JavaFileInfoContainer)) {
             throw new TranslatorException("missing java file information to get the package details "
-                    + "of attribute corresponding to child node");
+                    + "of attribute corresponding to child node " + curNode.getName() +
+                    " in " + curNode.getLineNumber() + " at " + curNode.getCharPosition() + " in " +
+                    curNode.getFileName());
         }
 
         importInfo.setClassInfo(attributeName);
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 5068458..7bf3f2a 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
@@ -218,7 +218,9 @@
                 addJavaSnippetInfoToApplicableTempFiles(curEnum.getNamedValue(), pluginConfig);
             }
         } else {
-            throw new TranslatorException("current node should be of enumeration type.");
+            throw new TranslatorException("current node should be of enumeration type. " +
+                    curNode.getName() + " in " + curNode.getLineNumber() + " at " + curNode.getCharPosition()
+                    + " in " + curNode.getFileName());
         }
     }
 
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 14fcdc1..e20d788 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
@@ -525,7 +525,9 @@
             throws IOException {
         YangNode parent = getParentNodeInGenCode(curNode);
         if (!(parent instanceof JavaCodeGenerator)) {
-            throw new TranslatorException("missing parent node to contain current node info in generated file");
+            throw new TranslatorException("missing parent node to contain current node info in generated file "
+                    + parent.getName() + " in " + parent.getLineNumber() + " at " + parent.getCharPosition()
+                    + " in " + parent.getFileName());
         }
 
         if (parent instanceof YangJavaGroupingTranslator) {
@@ -569,7 +571,9 @@
         JavaQualifiedTypeInfoTranslator qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
                 getCapitalCase(curNodeName));
         if (!(targetNode instanceof TempJavaCodeFragmentFilesContainer)) {
-            throw new TranslatorException("Parent node does not have file info");
+            throw new TranslatorException("Parent node does not have file info "
+                    + targetNode.getName() + " in " + targetNode.getLineNumber() + " at " + targetNode.getCharPosition()
+                    + " in " + targetNode.getFileName());
         }
         JavaImportData parentImportData = tempJavaFragmentFiles.getJavaImportData();
         JavaFileInfoTranslator fileInfo = ((JavaFileInfoContainer) targetNode).getJavaFileInfo();
@@ -1332,7 +1336,8 @@
                 throw new IOException("failed to create temporary file for " + fileName);
             }
         } else {
-            throw new IOException(fileName + " is reused due to YANG naming");
+            throw new IOException(fileName + " is reused due to YANG naming. probably your previous build would have " +
+                    "failed");
         }
         return file;
     }
@@ -1438,7 +1443,9 @@
         }
         if (!(curNode instanceof JavaFileInfoContainer)) {
             throw new TranslatorException("missing java file information to get the package details "
-                    + "of attribute corresponding to child node");
+                    + "of attribute corresponding to child node " +
+                    curNode.getName() + " in " + curNode.getLineNumber() + " at " + curNode.getCharPosition()
+                    + " in " + curNode.getFileName());
         }
         caseImportInfo.setClassInfo(getCapitalCase(getCamelCase(parent.getName(),
                 pluginConfig.getConflictResolver())));
@@ -1465,7 +1472,10 @@
         if (listOfLeaves != null) {
             for (YangLeaf leaf : listOfLeaves) {
                 if (!(leaf instanceof JavaLeafInfoContainer)) {
-                    throw new TranslatorException("Leaf does not have java information");
+                    throw new TranslatorException("Leaf does not have java information " +
+                            leaf.getName() + " in " + leaf.getLineNumber() + " at " +
+                            leaf.getCharPosition()
+                            + " in " + leaf.getFileName());
                 }
                 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
                     TempJavaBeanFragmentFiles tempJavaBeanFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
@@ -1494,7 +1504,9 @@
         if (listOfLeafList != null) {
             for (YangLeafList leafList : listOfLeafList) {
                 if (!(leafList instanceof JavaLeafInfoContainer)) {
-                    throw new TranslatorException("Leaf-list does not have java information");
+                    throw new TranslatorException("Leaf-list does not have java information " +
+                            curNode.getName() + " in " + curNode.getLineNumber() + " at " + curNode.getCharPosition()
+                            + " in " + curNode.getFileName());
                 }
                 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
                     TempJavaBeanFragmentFiles tempJavaBeanFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
@@ -1520,7 +1532,9 @@
                                          YangPluginConfig yangPluginConfig)
             throws IOException {
         if (!(curNode instanceof YangLeavesHolder)) {
-            throw new TranslatorException("Data model node does not have any leaves");
+            throw new TranslatorException("Data model node does not have any leaves " +
+                    curNode.getName() + " in " + curNode.getLineNumber() + " at " + curNode.getCharPosition()
+                    + " in " + curNode.getFileName());
         }
         YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
         addLeavesInfoToTempFiles(leavesHolder.getListOfLeaf(), yangPluginConfig, curNode);
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 62c6390..32f6c17 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
@@ -274,7 +274,10 @@
         if (typeList != null) {
             for (YangType<?> yangType : typeList) {
                 if (!(yangType instanceof YangJavaTypeTranslator)) {
-                    throw new TranslatorException("Type does not have Java info");
+                    throw new TranslatorException("Type does not have Java info " +
+                            yangType.getDataTypeName() + " in " + yangType.getLineNumber() + " at " + yangType
+                            .getCharPosition()
+                            + " in " + yangType.getFileName());
                 }
                 JavaAttributeInfo javaAttributeInfo = getAttributeForType(yangType, pluginConfig);
                 addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfo,
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 f89ad3d..08a6d9b 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
@@ -227,7 +227,10 @@
         } else if (javaCodeGeneratorInfo instanceof YangChoice) {
             /*Do nothing, only the interface needs to be generated*/
         } else {
-            throw new TranslatorException("Unsupported Node Translation");
+            throw new TranslatorException("Unsupported Node Translation "
+                    + javaCodeGeneratorInfo.getLineNumber() + " at " +
+                    javaCodeGeneratorInfo.getCharPosition()
+                    + " in " + javaCodeGeneratorInfo.getFileName());
         }
     }
 
@@ -242,7 +245,10 @@
                                           YangPluginConfig yangPluginConfig)
             throws IOException {
         if (!(javaCodeGeneratorInfo instanceof YangNode)) {
-            throw new TranslatorException("translation is not supported for the node");
+            throw new TranslatorException("translation is not supported for the node "
+                    + javaCodeGeneratorInfo.getLineNumber() + " at " +
+                    javaCodeGeneratorInfo.getCharPosition()
+                    + " in " + javaCodeGeneratorInfo.getFileName());
         }
         createTempFragmentFile(javaCodeGeneratorInfo);
         updateTempFragmentFiles(javaCodeGeneratorInfo, yangPluginConfig);
@@ -288,7 +294,10 @@
                                                      YangPluginConfig yangPlugin, boolean isMultiInstance)
             throws IOException {
         if (!(javaCodeGeneratorInfo instanceof YangNode)) {
-            throw new TranslatorException("Invalid node for translation");
+            throw new TranslatorException("Invalid node for translation " +
+                    javaCodeGeneratorInfo.getLineNumber() + " at " +
+                    javaCodeGeneratorInfo.getCharPosition()
+                    + " in " + javaCodeGeneratorInfo.getFileName());
         }
 
         /*
@@ -313,7 +322,10 @@
                                                      YangPluginConfig yangPlugin)
             throws IOException {
         if (!(javaCodeGeneratorInfo instanceof YangNode)) {
-            throw new TranslatorException("invalid node for translation");
+            throw new TranslatorException("invalid node for translation " +
+                    javaCodeGeneratorInfo.getLineNumber() + " at " +
+                    javaCodeGeneratorInfo.getCharPosition()
+                    + " in " + javaCodeGeneratorInfo.getFileName());
         }
 
         generateCodeOfNode(javaCodeGeneratorInfo, yangPlugin);
@@ -375,7 +387,10 @@
                                           YangPluginConfig yangPluginConfig)
             throws IOException {
         if (!(javaCodeGeneratorInfo instanceof YangNode)) {
-            throw new TranslatorException("invalid node for translation");
+            throw new TranslatorException("invalid node for translation "
+                    + javaCodeGeneratorInfo.getLineNumber() + " at " +
+                    javaCodeGeneratorInfo.getCharPosition()
+                    + " in " + javaCodeGeneratorInfo.getFileName());
         }
         updatePackageInfo(javaCodeGeneratorInfo, yangPluginConfig);
         generateTempFiles(javaCodeGeneratorInfo, yangPluginConfig);
@@ -393,7 +408,10 @@
                                               YangPluginConfig yangPluginConfig, String rootPkg)
             throws IOException {
         if (!(javaCodeGeneratorInfo instanceof YangNode)) {
-            throw new TranslatorException("invalid node for translation");
+            throw new TranslatorException("invalid node for translation " + javaCodeGeneratorInfo.getLineNumber()
+                    + " at " +
+                    javaCodeGeneratorInfo.getCharPosition()
+                    + " in " + javaCodeGeneratorInfo.getFileName());
         }
         updatePackageInfo(javaCodeGeneratorInfo, yangPluginConfig, rootPkg);
 
@@ -415,12 +433,20 @@
         String pkg;
         if (!(curNode instanceof JavaFileInfoContainer)
                 || curNode.getParent() == null) {
-            throw new TranslatorException("missing parent node to get current node's package");
+            throw new TranslatorException("missing parent node to get current node's package " +
+                    curNode.getName() + " in " +
+                    curNode.getLineNumber() + " at " +
+                    curNode.getCharPosition()
+                    + " in " + curNode.getFileName());
         }
 
         YangNode parentNode = DataModelUtils.getParentNodeInGenCode(curNode);
         if (!(parentNode instanceof JavaFileInfoContainer)) {
-            throw new TranslatorException("missing parent java node to get current node's package");
+            throw new TranslatorException("missing parent java node to get current node's package " +
+                    curNode.getName() + " in " +
+                    curNode.getLineNumber() + " at " +
+                    curNode.getCharPosition()
+                    + " in " + curNode.getFileName());
         }
         JavaFileInfoTranslator parentJavaFileHandle = ((JavaFileInfoContainer) parentNode).getJavaFileInfo();
         pkg = parentJavaFileHandle.getPackage() + PERIOD + parentJavaFileHandle.getJavaName();
@@ -460,6 +486,26 @@
     }
 
     /**
+     * Returns true if only augment nodes present in module.
+     *
+     * @param curNode root node
+     * @return true if only augment nodes present in module
+     */
+    public static boolean isOnlyAugmentNodeInRoot(YangNode curNode) {
+        List<Boolean> booleanData = new ArrayList<>();
+        curNode = curNode.getChild();
+        while (curNode != null) {
+            if (curNode instanceof YangAugment) {
+                booleanData.add(true);
+            } else {
+                booleanData.add(false);
+            }
+            curNode = curNode.getNextSibling();
+        }
+        return !booleanData.contains(false);
+    }
+
+    /**
      * Returns nodes package.
      *
      * @param node             YANG node
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
index ce172ff..85c190b 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
@@ -17,6 +17,7 @@
 package org.onosproject.yangutils.translator.tojava.javamodel;
 
 import java.util.Stack;
+
 import org.onosproject.yangutils.datamodel.YangDerivedInfo;
 import org.onosproject.yangutils.datamodel.YangEnumeration;
 import org.onosproject.yangutils.datamodel.YangIdentity;
@@ -110,7 +111,11 @@
             case LEAFREF:
                 return getJavaDataType(getReferredTypeFromLeafref(yangType));
             default:
-                throw new TranslatorException("given data type is not supported.");
+                throw new TranslatorException("given data type is not supported. " +
+                        yangType.getDataTypeName() + " in " +
+                        yangType.getLineNumber() + " at " +
+                        yangType.getCharPosition()
+                        + " in " + yangType.getFileName());
         }
     }
 
@@ -178,7 +183,11 @@
                     return getCapitalCase(
                             getCamelCase(yangType.getDataTypeName(), pluginConfig));
                 default:
-                    throw new TranslatorException("given data type is not supported.");
+                    throw new TranslatorException("given data type is not supported ." +
+                            yangType.getDataTypeName() + " in " +
+                            yangType.getLineNumber() + " at " +
+                            yangType.getCharPosition()
+                            + " in " + yangType.getFileName());
             }
         } else {
             switch (type) {
@@ -263,7 +272,11 @@
                 case DERIVED:
                     return getTypeDefsPackage(yangType, conflictResolver);
                 default:
-                    throw new TranslatorException("given data type is not supported.");
+                    throw new TranslatorException("given data type is not supported. " +
+                            yangType.getDataTypeName() + " in " +
+                            yangType.getLineNumber() + " at " +
+                            yangType.getCharPosition()
+                            + " in " + yangType.getFileName());
             }
         } else {
             switch (type) {
@@ -304,11 +317,19 @@
     private static String getTypeDefsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
         Object var = type.getDataTypeExtendedInfo();
         if (!(var instanceof YangDerivedInfo)) {
-            throw new TranslatorException("type should have been derived.");
+            throw new TranslatorException("type should have been derived. " +
+                    type.getDataTypeName() + " in " +
+                    type.getLineNumber() + " at " +
+                    type.getCharPosition()
+                    + " in " + type.getFileName());
         }
 
         if (!(((YangDerivedInfo<?>) var).getReferredTypeDef() != null)) {
-            throw new TranslatorException("derived info is not an instance of typedef.");
+            throw new TranslatorException("derived info is not an instance of typedef. " +
+                    type.getDataTypeName() + " in " +
+                    type.getLineNumber() + " at " +
+                    type.getCharPosition()
+                    + " in " + type.getFileName());
         }
 
         YangJavaTypeDefTranslator typedef = (YangJavaTypeDefTranslator) ((YangDerivedInfo<?>) var).getReferredTypeDef();
@@ -328,7 +349,11 @@
     private static String getUnionPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
 
         if (!(type.getDataTypeExtendedInfo() instanceof YangUnion)) {
-            throw new TranslatorException("type should have been union.");
+            throw new TranslatorException("type should have been union. " +
+                    type.getDataTypeName() + " in " +
+                    type.getLineNumber() + " at " +
+                    type.getCharPosition()
+                    + " in " + type.getFileName());
         }
 
         YangJavaUnionTranslator union = (YangJavaUnionTranslator) type.getDataTypeExtendedInfo();
@@ -348,7 +373,11 @@
     private static String getEnumsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
 
         if (!(type.getDataTypeExtendedInfo() instanceof YangEnumeration)) {
-            throw new TranslatorException("type should have been enumeration.");
+            throw new TranslatorException("type should have been enumeration. " +
+                    type.getDataTypeName() + " in " +
+                    type.getLineNumber() + " at " +
+                    type.getCharPosition()
+                    + " in " + type.getFileName());
         }
         YangJavaEnumerationTranslator enumeration = (YangJavaEnumerationTranslator) type.getDataTypeExtendedInfo();
         if (enumeration.getJavaFileInfo().getPackage() == null) {
@@ -367,7 +396,11 @@
     private static String getIdentityRefPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
 
         if (!(type.getDataTypeExtendedInfo() instanceof YangIdentityRef)) {
-            throw new TranslatorException("type should have been identityref.");
+            throw new TranslatorException("type should have been identityref. " +
+                    type.getDataTypeName() + " in " +
+                    type.getLineNumber() + " at " +
+                    type.getCharPosition()
+                    + " in " + type.getFileName());
         }
         YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
         YangJavaIdentityTranslator identity = (YangJavaIdentityTranslator) (identityRef.getReferredIdentity());
@@ -387,7 +420,11 @@
     private static String getPackageFromParent(YangNode parent,
                                                YangToJavaNamingConflictUtil conflictResolver) {
         if (!(parent instanceof JavaFileInfoContainer)) {
-            throw new TranslatorException("invalid child node is being processed.");
+            throw new TranslatorException("invalid child node is being processed. " +
+                    parent.getName() + " in " +
+                    parent.getLineNumber() + " at " +
+                    parent.getCharPosition()
+                    + " in " + parent.getFileName());
         }
         JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
         if (parentInfo.getPackage() == null) {
@@ -434,7 +471,12 @@
                         submodule.getNameSpaceFromModule(submodule.getBelongsTo()),
                         submodule.getRevision().getRevDate(), conflictResolver);
             } else {
-                throw new TranslatorException("Invalid root node of data model tree");
+                throw new TranslatorException("Invalid root node of data model tree " +
+                        yangNode.getName() + " in " +
+                        yangNode.getLineNumber() + " at " +
+                        yangNode.getCharPosition()
+                        + " in " + yangNode.getFileName());
+
             }
 
             ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
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 49f2f41..c1c6e60 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
@@ -15,15 +15,16 @@
  */
 package org.onosproject.yangutils.translator.tojava.javamodel;
 
+import org.onosproject.yangutils.datamodel.LocationInfo;
 import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
 import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfoContainer;
+import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
 
 /**
  * Represent java based identification of the YANG leaves.
  */
 public interface JavaLeafInfoContainer
-        extends JavaQualifiedTypeInfoContainer {
+        extends JavaQualifiedTypeInfoContainer, LocationInfo {
     /**
      * Retrieves the data type of the leaf.
      *
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaAugmentTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaAugmentTranslator.java
index 6589201..1607b9f 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaAugmentTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaAugmentTranslator.java
@@ -18,13 +18,13 @@
 import java.io.IOException;
 
 import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaAugment;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
 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;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
 import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
@@ -61,7 +61,11 @@
     public JavaFileInfoTranslator getJavaFileInfo() {
 
         if (javaFileInfo == null) {
-            throw new TranslatorException("Missing java info in java datamodel node");
+            throw new TranslatorException("Missing java info in java datamodel node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -107,7 +111,11 @@
         try {
             generateCodeOfAugmentableNode(this, yangPlugin);
         } catch (IOException e) {
-            throw new TranslatorException("Failed to generate code for augmentable node " + getName());
+            throw new TranslatorException("Failed to generate code for augmentable node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
@@ -123,7 +131,11 @@
                 getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
             }
         } catch (IOException e) {
-            throw new TranslatorException("Failed to generate code for augmentable node " + getName());
+            throw new TranslatorException("Failed to generate code for augmentable node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCaseTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCaseTranslator.java
index 88498db..b1d8a1c 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCaseTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCaseTranslator.java
@@ -60,7 +60,11 @@
     @Override
     public JavaFileInfoTranslator getJavaFileInfo() {
         if (javaFileInfo == null) {
-            throw new TranslatorException("Missing java info in java datamodel node");
+            throw new TranslatorException("Missing java info in java datamodel node" +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -108,7 +112,11 @@
             generateCodeOfAugmentableNode(this, yangPlugin);
         } catch (IOException e) {
             throw new TranslatorException(
-                    "Failed to prepare generate code entry for case node " + getName());
+                    "Failed to prepare generate code entry for case node " +
+                            getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
@@ -120,7 +128,11 @@
         try {
             getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
         } catch (IOException e) {
-            throw new TranslatorException("Failed to generate code for case node " + getName());
+            throw new TranslatorException("Failed to generate code for case node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoiceTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoiceTranslator.java
index 2f51b65..1c253eb 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoiceTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoiceTranslator.java
@@ -17,13 +17,13 @@
 
 import java.io.IOException;
 
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaChoice;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
 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;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
 import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeAndUpdateInParent;
@@ -60,7 +60,11 @@
     @Override
     public JavaFileInfoTranslator getJavaFileInfo() {
         if (javaFileInfo == null) {
-            throw new TranslatorException("Missing java info in java datamodel node");
+            throw new TranslatorException("Missing java info in java datamodel node" +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -108,7 +112,11 @@
             generateCodeAndUpdateInParent(this, yangPlugin, false);
         } catch (IOException e) {
             throw new TranslatorException(
-                    "Failed to prepare generate code entry for choice node " + getName());
+                    "Failed to prepare generate code entry for choice node " +
+                            getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
@@ -120,7 +128,11 @@
         try {
             getTempJavaCodeFragmentFiles().generateJavaFile(INTERFACE_MASK, this);
         } catch (IOException e) {
-            throw new TranslatorException("Failed to generate code for choice node " + getName());
+            throw new TranslatorException("Failed to generate code for choice node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaContainerTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaContainerTranslator.java
index a355b01..31e51c9 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaContainerTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaContainerTranslator.java
@@ -17,13 +17,13 @@
 
 import java.io.IOException;
 
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaContainer;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
 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;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
 import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeAndUpdateInParent;
@@ -60,7 +60,11 @@
     @Override
     public JavaFileInfoTranslator getJavaFileInfo() {
         if (javaFileInfo == null) {
-            throw new TranslatorException("Missing java info in java datamodel node");
+            throw new TranslatorException("Missing java info in java datamodel node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -108,7 +112,11 @@
             generateCodeAndUpdateInParent(this, yangPlugin, false);
         } catch (IOException e) {
             throw new TranslatorException(
-                    "Failed to prepare generate code entry for container node " + getName());
+                    "Failed to prepare generate code entry for container node " +
+                            getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
@@ -122,7 +130,11 @@
         try {
             getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
         } catch (IOException e) {
-            throw new TranslatorException("Failed to generate code for container node " + getName());
+            throw new TranslatorException("Failed to generate code for container node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumerationTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumerationTranslator.java
index e2fad05..da4531f 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumerationTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumerationTranslator.java
@@ -18,13 +18,13 @@
 
 import java.io.IOException;
 
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaEnumeration;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
 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;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
 import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfNode;
@@ -62,7 +62,11 @@
     public JavaFileInfoTranslator getJavaFileInfo() {
 
         if (javaFileInfo == null) {
-            throw new TranslatorException("Missing java info in java datamodel node");
+            throw new TranslatorException("Missing java info in java datamodel node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -110,7 +114,11 @@
             generateCodeOfNode(this, yangPlugin);
         } catch (IOException e) {
             throw new TranslatorException(
-                    "Failed to prepare generate code entry for enumeration node " + getName());
+                    "Failed to prepare generate code entry for enumeration node " +
+                            getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
@@ -124,7 +132,11 @@
         try {
             getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_ENUM_CLASS, this);
         } catch (IOException e) {
-            throw new TranslatorException("Failed to generate code for enumeration node " + getName());
+            throw new TranslatorException("Failed to generate code for enumeration node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaGroupingTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaGroupingTranslator.java
index e2f55de..bd54469 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaGroupingTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaGroupingTranslator.java
@@ -15,14 +15,14 @@
  */
 package org.onosproject.yangutils.translator.tojava.javamodel;
 
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaGrouping;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
 import org.onosproject.yangutils.translator.exception.InvalidNodeForTranslatorException;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
 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;
 
 /**
  * Represents grouping information extended to support java code generation.
@@ -55,7 +55,11 @@
     @Override
     public JavaFileInfoTranslator getJavaFileInfo() {
         if (javaFileInfo == null) {
-            throw new TranslatorException("Missing java info in java datamodel node");
+            throw new TranslatorException("Missing java info in java datamodel node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -94,7 +98,11 @@
     @Override
     public void generateCodeEntry(YangPluginConfig yangPlugin)
             throws TranslatorException {
-        throw new InvalidNodeForTranslatorException();
+        InvalidNodeForTranslatorException exception = new InvalidNodeForTranslatorException();
+        exception.setFileName(this.getFileName());
+        exception.setCharPosition(this.getCharPosition());
+        exception.setLine(this.getLineNumber());
+        throw exception;
     }
 
     @Override
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaIdentityTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaIdentityTranslator.java
index 073eed3..a63bca0 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaIdentityTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaIdentityTranslator.java
@@ -19,15 +19,15 @@
 import java.io.IOException;
 import java.util.List;
 
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaIdentity;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
 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.JavaImportData;
 import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
 import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yangutils.utils.io.YangPluginConfig;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
@@ -37,6 +37,7 @@
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
 import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
 
 /**
  * Represents input information extended to support java code generation.
@@ -73,7 +74,11 @@
     @Override
     public JavaFileInfoTranslator getJavaFileInfo() {
         if (javaFileInfo == null) {
-            throw new TranslatorException("Missing java info in java datamodel node");
+            throw new TranslatorException("Missing java info in java datamodel node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -129,7 +134,11 @@
 
             if (getBaseNode() != null && getBaseNode().getReferredIdentity() != null) {
                 if (!(getBaseNode().getReferredIdentity() instanceof YangJavaIdentityTranslator)) {
-                    throw new TranslatorException("Failed to prepare generate code entry for base node");
+                    throw new TranslatorException("Failed to prepare generate code entry for base node "
+                            + getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName());
                 }
                 YangJavaIdentityTranslator baseIdentity = (YangJavaIdentityTranslator) getBaseNode()
                         .getReferredIdentity();
@@ -146,10 +155,15 @@
             File file = getFileObject(path, className, JAVA_FILE_EXTENSION, getJavaFileInfo());
 
             initiateJavaFileGeneration(file, GENERATE_IDENTITY_CLASS, imports, this, className);
+            file = validateLineLength(file);
             closeFile(file, false);
         } catch (IOException e) {
             throw new TranslatorException(
-                    "Failed to prepare generate code entry for identity node " + this.getName());
+                    "Failed to prepare generate code entry for identity node " +
+                            getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName());
         }
     }
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaInputTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaInputTranslator.java
index 2d7bf2c..878a591 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaInputTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaInputTranslator.java
@@ -18,13 +18,13 @@
 
 import java.io.IOException;
 
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaInput;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
 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;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
 import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
@@ -61,7 +61,11 @@
     @Override
     public JavaFileInfoTranslator getJavaFileInfo() {
         if (javaFileInfo == null) {
-            throw new TranslatorException("missing java info in java datamodel node");
+            throw new TranslatorException("missing java info in java datamodel node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -109,7 +113,11 @@
             generateCodeOfAugmentableNode(this, yangPlugin);
         } catch (IOException e) {
             throw new TranslatorException(
-                    "Failed to prepare generate code entry for input node " + getName());
+                    "Failed to prepare generate code entry for input node " +
+                            getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
@@ -123,7 +131,11 @@
         try {
             getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
         } catch (IOException e) {
-            throw new TranslatorException("Failed to generate code for input node " + getName());
+            throw new TranslatorException("Failed to generate code for input node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaListTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaListTranslator.java
index 0ec8198..6082963 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaListTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaListTranslator.java
@@ -17,13 +17,13 @@
 
 import java.io.IOException;
 
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaList;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
 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;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
 import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeAndUpdateInParent;
@@ -60,7 +60,11 @@
     @Override
     public JavaFileInfoTranslator getJavaFileInfo() {
         if (javaFileInfo == null) {
-            throw new TranslatorException("Missing java info in java datamodel node");
+            throw new TranslatorException("Missing java info in java datamodel node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -108,7 +112,11 @@
             generateCodeAndUpdateInParent(this, yangPlugin, true);
         } catch (IOException e) {
             throw new TranslatorException(
-                    "Failed to prepare generate code entry for list node " + getName());
+                    "Failed to prepare generate code entry for list node " +
+                            getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
@@ -122,7 +130,11 @@
         try {
             getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
         } catch (IOException e) {
-            throw new TranslatorException("Failed to generate code for list node " + getName());
+            throw new TranslatorException("Failed to generate code for list node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 }
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 0f46f76..cf1f455 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
@@ -76,7 +76,11 @@
     @Override
     public JavaFileInfoTranslator getJavaFileInfo() {
         if (javaFileInfo == null) {
-            throw new TranslatorException("Missing java info in java datamodel node");
+            throw new TranslatorException("Missing java info in java datamodel node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -130,7 +134,11 @@
             generateCodeOfRootNode(this, yangPlugin, modulePkg);
         } catch (IOException e) {
             throw new TranslatorException(
-                    "Failed to prepare generate code entry for module node " + getName());
+                    "Failed to prepare generate code entry for module node " +
+                            getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
@@ -167,7 +175,11 @@
             searchAndDeleteTempDir(getJavaFileInfo().getPluginConfig().getCodeGenDir() +
                     getJavaFileInfo().getPackageFilePath());
         } catch (IOException e) {
-            throw new TranslatorException("Failed to generate code for module node " + getName());
+            throw new TranslatorException("Failed to generate code for module node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotificationTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotificationTranslator.java
index a44164f..ce7f8b0 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotificationTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotificationTranslator.java
@@ -73,8 +73,11 @@
     public JavaFileInfoTranslator getJavaFileInfo() {
 
         if (javaFileInfo == null) {
-            throw new TranslatorException("Missing java info in java " +
-                                                  "datamodel node");
+            throw new TranslatorException("Missing java info in java datamodel node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -117,14 +120,11 @@
      * @throws TranslatorException translator operation fail
      */
     @Override
-    public void generateCodeEntry(YangPluginConfig yangPlugin)
-            throws TranslatorException {
+    public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
 
         /*
-         * As part of the notification support the following files needs to
-         * be generated.
-         * 1) Subject of the notification(event), this is simple interface with
-         * builder class.
+         * As part of the notification support the following files needs to be generated.
+         * 1) Subject of the notification(event), this is simple interface with builder class.
          * 2) Event class extending "AbstractEvent" and defining event type enum.
          * 3) Event listener interface extending "EventListener".
          *
@@ -138,8 +138,11 @@
             addNotificationToExtendsList();
         } catch (IOException e) {
             throw new TranslatorException(
-                    "Failed to prepare generate code entry for notification " +
-                            "node " + getName());
+                    "Failed to prepare generate code entry for notification node " +
+                            getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
@@ -174,11 +177,12 @@
         try {
             getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
         } catch (IOException e) {
-            throw new TranslatorException("Failed to generate code for " +
-                                                  "notification node " +
-                                                  getName());
+            throw new TranslatorException("Failed to generate code for notification node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
-
     }
 
     @Override
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaOutputTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaOutputTranslator.java
index 2411f27..fe640ea 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaOutputTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaOutputTranslator.java
@@ -18,13 +18,13 @@
 
 import java.io.IOException;
 
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaOutput;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
 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;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
 import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
@@ -61,7 +61,11 @@
     @Override
     public JavaFileInfoTranslator getJavaFileInfo() {
         if (javaFileInfo == null) {
-            throw new TranslatorException("missing java info in java datamodel node");
+            throw new TranslatorException("missing java info in java datamodel node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -109,7 +113,11 @@
             generateCodeOfAugmentableNode(this, yangPlugin);
         } catch (IOException e) {
             throw new TranslatorException(
-                    "Failed to prepare generate code entry for output node " + getName());
+                    "Failed to prepare generate code entry for output node " +
+                            getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
 
     }
@@ -125,7 +133,11 @@
             getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
         } catch (IOException e) {
             throw new TranslatorException(
-                    "Failed to prepare generate code exit for output node " + getName());
+                    "Failed to prepare generate code exit for output node " +
+                            getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpcTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpcTranslator.java
index e5c775e..6e6482b 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpcTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpcTranslator.java
@@ -22,13 +22,13 @@
 import org.onosproject.yangutils.datamodel.YangInput;
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.datamodel.YangOutput;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaRpc;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
 import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
 import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
 import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
 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.TempJavaCodeFragmentFiles;
 import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
@@ -73,7 +73,11 @@
     public JavaFileInfoTranslator getJavaFileInfo() {
 
         if (javaFileInfo == null) {
-            throw new TranslatorException("missing java info in java datamodel node");
+            throw new TranslatorException("missing java info in java datamodel node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -113,7 +117,11 @@
         try {
             updatePackageInfo(this, yangPlugin);
         } catch (IOException e) {
-            throw new TranslatorException("Failed to prepare generate code entry for RPC node " + getName());
+            throw new TranslatorException("Failed to prepare generate code entry for RPC node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
@@ -130,7 +138,11 @@
 
         // Parent should be holder of rpc or notification.
         if (!(parent instanceof RpcNotificationContainer)) {
-            throw new TranslatorException("parent node of rpc can only be module or sub-module");
+            throw new TranslatorException("parent node of rpc can only be module or sub-module " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
 
         /*
@@ -151,13 +163,22 @@
             } else if (yangNode instanceof YangOutput) {
                 javaAttributeInfoOfOutput = getChildNodeAsAttributeInParentService(yangNode, this);
             } else {
-                throw new TranslatorException("RPC should contain only input/output child nodes.");
+                throw new TranslatorException("RPC should contain only input/output child nodes. " +
+                        yangNode.getName() + " in " +
+                        yangNode.getLineNumber() + " at " +
+                        yangNode.getCharPosition()
+                        + " in " + yangNode.getFileName());
+
             }
             yangNode = yangNode.getNextSibling();
         }
 
         if (!(parent instanceof TempJavaCodeFragmentFilesContainer)) {
-            throw new TranslatorException("missing parent temp file handle");
+            throw new TranslatorException("missing parent temp file handle " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
 
         /*
@@ -170,7 +191,11 @@
                             ((JavaFileInfoContainer) parent).getJavaFileInfo().getPluginConfig(), getName());
 
         } catch (IOException e) {
-            throw new TranslatorException("Failed to generate code for RPC node " + getName());
+            throw new TranslatorException("Failed to generate code for RPC node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
         // No file will be generated during RPC exit.
     }
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 009a86f..4ab4be8 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
@@ -23,11 +23,11 @@
 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;
 
@@ -80,7 +80,11 @@
     @Override
     public JavaFileInfoTranslator getJavaFileInfo() {
         if (javaFileInfo == null) {
-            throw new TranslatorException("Missing java info in java datamodel node");
+            throw new TranslatorException("Missing java info in java datamodel node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -144,7 +148,11 @@
             generateCodeOfRootNode(this, yangPlugin, subModulePkg);
         } catch (IOException e) {
             throw new TranslatorException(
-                    "failed to prepare generate code entry for submodule node " + getName());
+                    "failed to prepare generate code entry for submodule node " +
+                            getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
 
     }
@@ -181,7 +189,11 @@
             searchAndDeleteTempDir(getJavaFileInfo().getPluginConfig().getCodeGenDir() +
                     getJavaFileInfo().getPackageFilePath());
         } catch (IOException e) {
-            throw new TranslatorException("Failed to generate code for submodule node " + getName());
+            throw new TranslatorException("Failed to generate code for submodule node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDefTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDefTranslator.java
index 6475af3..1f043cf 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDefTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDefTranslator.java
@@ -19,14 +19,14 @@
 
 import org.onosproject.yangutils.datamodel.YangDerivedInfo;
 import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaTypeDef;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
 import org.onosproject.yangutils.translator.exception.InvalidNodeForTranslatorException;
 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;
 
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
@@ -66,7 +66,11 @@
     public JavaFileInfoTranslator getJavaFileInfo() {
 
         if (javaFileInfo == null) {
-            throw new TranslatorException("Missing java info in java datamodel node");
+            throw new TranslatorException("Missing java info in java datamodel node " +
+                    getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -111,19 +115,25 @@
     @Override
     public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
         YangType typeInTypeDef = this.getTypeDefBaseType();
+        InvalidNodeForTranslatorException exception = new InvalidNodeForTranslatorException();
+        exception.setFileName(this.getFileName());
+        exception.setCharPosition(this.getCharPosition());
+        exception.setLine(this.getLineNumber());
         if (typeInTypeDef.getDataType() == DERIVED) {
             YangDerivedInfo derivedInfo = (YangDerivedInfo) typeInTypeDef.getDataTypeExtendedInfo();
             if (derivedInfo.getEffectiveBuiltInType() == LEAFREF) {
-                throw new InvalidNodeForTranslatorException();
+                throw exception;
             }
         } else if (typeInTypeDef.getDataType() == LEAFREF) {
-            throw new InvalidNodeForTranslatorException();
+            throw exception;
         }
         try {
             generateCodeOfNode(this, yangPlugin);
         } catch (IOException e) {
             throw new TranslatorException(
-                    "Failed to prepare generate code entry for typedef node " + getName());
+                    "Failed to prepare generate code entry for typedef node " + getName()
+                            + "in " + getLineNumber() + " at " + getCharPosition() + " in " + getFileName()
+                            + " " + e.getLocalizedMessage());
         }
 
     }
@@ -138,7 +148,10 @@
         try {
             getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_TYPEDEF_CLASS, this);
         } catch (IOException e) {
-            throw new TranslatorException("Failed to generate code for typedef node " + getName());
+            throw new TranslatorException(
+                    "Failed to prepare generate code for typedef node " + getName()
+                            + "in " + getLineNumber() + " at " + getCharPosition() + " in " + getFileName()
+                            + " " + e.getLocalizedMessage());
         }
     }
 
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 911e0c4..93e4858 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
@@ -56,7 +56,11 @@
             String classPkg = getJavaImportPackage(this,
                     false, conflictResolver);
             if (classPkg == null) {
-                throw new TranslatorException("import package cannot be null when the class is used");
+                throw new TranslatorException("import package cannot be null when the class is used " +
+                        getDataTypeName() + " in " +
+                        getLineNumber() + " at " +
+                        getCharPosition()
+                        + " in " + getFileName());
             }
             importInfo.setPkgInfo(classPkg);
         } else {
@@ -66,7 +70,11 @@
              */
             String dataTypeName = getJavaDataType(this);
             if (dataTypeName == null) {
-                throw new TranslatorException("not supported data type");
+                throw new TranslatorException("not supported data type " +
+                        getDataTypeName() + " in " +
+                        getLineNumber() + " at " +
+                        getCharPosition()
+                        + " in " + getFileName());
             }
             importInfo.setClassInfo(dataTypeName);
         }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnionTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnionTranslator.java
index ce701af..60f200f 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnionTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnionTranslator.java
@@ -17,13 +17,13 @@
 
 import java.io.IOException;
 
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
 import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaUnion;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
 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;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
 import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfNode;
@@ -60,7 +60,10 @@
     @Override
     public JavaFileInfoTranslator getJavaFileInfo() {
         if (javaFileInfo == null) {
-            throw new RuntimeException("Missing java info in java datamodel node");
+            throw new RuntimeException("Missing java info in java datamodel node " + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -108,7 +111,10 @@
             generateCodeOfNode(this, yangPlugin);
         } catch (IOException e) {
             throw new TranslatorException(
-                    "Failed to prepare generate code entry for union node " + getName());
+                    "Failed to prepare generate code entry for union node " + getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition()
+                            + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
 
     }
@@ -123,7 +129,10 @@
         try {
             getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_UNION_CLASS, this);
         } catch (IOException e) {
-            throw new TranslatorException("Failed to generate code for union node " + getName());
+            throw new TranslatorException("Failed to generate code for union node " + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName() + " " + e.getLocalizedMessage());
         }
     }
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUsesTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUsesTranslator.java
index d1b8220..a213faf 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUsesTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUsesTranslator.java
@@ -55,7 +55,10 @@
     @Override
     public JavaFileInfoTranslator getJavaFileInfo() {
         if (javaFileInfo == null) {
-            throw new TranslatorException("Missing java info in java datamodel node");
+            throw new TranslatorException("Missing java info in java datamodel node " + getName() + " in " +
+                    getLineNumber() + " at " +
+                    getCharPosition()
+                    + " in " + getFileName());
         }
         return (JavaFileInfoTranslator) javaFileInfo;
     }
@@ -93,7 +96,11 @@
     @Override
     public void generateCodeEntry(YangPluginConfig yangPlugin)
             throws TranslatorException {
-        throw new InvalidNodeForTranslatorException();
+        InvalidNodeForTranslatorException exception = new InvalidNodeForTranslatorException();
+        exception.setFileName(this.getFileName());
+        exception.setCharPosition(this.getCharPosition());
+        exception.setLine(this.getLineNumber());
+        throw exception;
     }
 
     @Override
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 60191de..d65907d 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;
 
@@ -247,13 +247,21 @@
      */
     private static String getIdentityClassDefinition(String yangName, YangNode curNode) {
         if (!(curNode instanceof YangIdentity)) {
-            throw new TranslatorException("Expected java identity instance node");
+            throw new TranslatorException("Expected java identity instance node " +
+                    curNode.getName() + " in " +
+                    curNode.getLineNumber() + " at " +
+                    curNode.getCharPosition()
+                    + " in " + curNode.getFileName());
         }
         YangIdentity identity = (YangIdentity) curNode;
         if (identity.getBaseNode() != null) {
             YangIdentity baseIdentity = identity.getBaseNode().getReferredIdentity();
             if (baseIdentity == null) {
-                throw new TranslatorException("Expected java identity instance node");
+                throw new TranslatorException("Expected java identity instance node " +
+                        curNode.getName() + " in " +
+                        curNode.getLineNumber() + " at " +
+                        curNode.getCharPosition()
+                        + " in " + curNode.getFileName());
             }
 
             JavaFileInfoTranslator fileInfo = ((JavaFileInfoContainer) baseIdentity).getJavaFileInfo();
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 5c7f463..f1f258b 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
@@ -412,4 +412,12 @@
         return "        this.onosYangNodeOperationType = builderObject.onosYangNodeOperationType();\n";
     }
 
+    /**
+     * Returns attribute in constructor for yang augmented info map.
+     *
+     * @return attribute in constructor for yang augmented info map
+     */
+    static String getYangAugmentedMapObjectForConstruct() {
+        return "        this.yangAugmentedInfoMap = builderObject.yangAugmentedInfoMap();\n";
+    }
 }
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 ec671aa..ab37d7c 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
@@ -281,7 +281,8 @@
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils
         .validateLineLength;
-
+import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen
+        .getYangAugmentedMapObjectForConstruct;
 import static java.util.Collections.sort;
 
 /**
@@ -806,6 +807,9 @@
                 constructor =
                         constructor + getOperationAttributeForConstructor();
             }
+            if (curNode instanceof YangAugmentableNode) {
+                constructor = constructor + getYangAugmentedMapObjectForConstruct();
+            }
             methods.add(
                     constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
                             NEW_LINE);
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
index a591435..09bb72b 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
@@ -334,6 +334,12 @@
                                                   String pkg, YangPluginConfig pluginConfig)
             throws IOException {
 
+        if (file.exists()) {
+            throw new IOException(" file " + file.getName() + " is already generated." +
+                    "please check whether multiple yang files has same module/submodule \"name\" and \"namespace\"" +
+                    "or You may have generated code of previous build present in your directory.");
+        }
+
         boolean isFileCreated;
         try {
             isFileCreated = file.createNewFile();
@@ -360,6 +366,11 @@
                                                   YangNode curNode, String className)
             throws IOException {
 
+        if (file.exists()) {
+            throw new IOException(" file " + file.getName() + " is already generated." +
+                    "please check whether multiple yang files has same module/submodule \"name\" and \"namespace\"" +
+                    "or You may have generated code of previous build present in your directory.");
+        }
         boolean isFileCreated;
         try {
             isFileCreated = file.createNewFile();
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
index 9836c5c..8c14295 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
@@ -26,10 +26,10 @@
 import java.util.List;
 
 import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
 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.utils.io.YangToJavaNamingConflictUtil;
 
 import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
 import static org.onosproject.yangutils.utils.UtilConstants.COLAN;
@@ -205,7 +205,11 @@
      */
     public static void createPackage(YangNode yangNode) throws IOException {
         if (!(yangNode instanceof JavaFileInfoContainer)) {
-            throw new TranslatorException("current node must have java file info");
+            throw new TranslatorException("current node must have java file info " +
+                    yangNode.getName() + " in " +
+                    yangNode.getLineNumber() + " at " +
+                    yangNode.getCharPosition()
+                    + " in " + yangNode.getFileName());
         }
         String pkgInfo;
         JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) yangNode).getJavaFileInfo();
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 0ab080e..d044456 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
@@ -1356,7 +1356,11 @@
             case DERIVED:
                 return targetDataType + PERIOD + FROM_STRING_METHOD_NAME;
             default:
-                throw new TranslatorException("given data type is not supported.");
+                throw new TranslatorException("given data type is not supported. " +
+                        yangType.getDataTypeName() + " in " +
+                        yangType.getLineNumber() + " at " +
+                        yangType.getCharPosition()
+                        + " in " + yangType.getFileName());
         }
     }
 
@@ -1432,7 +1436,8 @@
         } else {
             method = method + EIGHT_SPACE_INDENTATION
                     + RETURN + SPACE + VALUE + SPACE + DIAMOND_CLOSE_BRACKET + EQUAL + SPACE + MIN_RANGE + SPACE + AND +
-                    AND + SPACE + VALUE + DIAMOND_OPEN_BRACKET + EQUAL + SPACE + MAX_RANGE + SEMI_COLAN + NEW_LINE;
+                    AND + SPACE + VALUE + SPACE + DIAMOND_OPEN_BRACKET + EQUAL + SPACE + MAX_RANGE + SEMI_COLAN +
+                    NEW_LINE;
         }
         return method + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
     }
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 8a578c3..6ac0581 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
@@ -43,6 +43,7 @@
 import static org.onosproject.yangutils.utils.UtilConstants.JAVA_KEY_WORDS;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
 import static org.onosproject.yangutils.utils.UtilConstants.ONE;
+import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
 import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
 import static org.onosproject.yangutils.utils.UtilConstants.ORG;
 import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
@@ -77,8 +78,8 @@
  */
 public final class YangIoUtils {
 
-    private static final int LINE_SIZE = 116;
-    private static final int SUB_LINE_SIZE = 114;
+    private static final int LINE_SIZE = 118;
+    private static final int SUB_LINE_SIZE = 116;
     private static final int ZERO = 0;
 
     /**
@@ -311,7 +312,7 @@
         try {
             appendFileContents(appendFile, srcFile);
         } catch (IOException e) {
-            throw new IOException("Failed to append " + appendFile + " in " + srcFile);
+            throw new IOException("Failed to merge " + appendFile + " in " + srcFile);
         }
     }
 
@@ -437,8 +438,31 @@
         StringBuilder tempBuilder = new StringBuilder();
         String append;
         for (String str : strArray) {
-            append = str + string;
-            tempBuilder.append(append);
+            if (strArray[strArray.length - 1].contains(OPEN_CURLY_BRACKET)) {
+                if (str.equals(strArray[strArray.length - 2])
+                        && !str.equals(strArray[0])
+                        && tempBuilder.length() < SUB_LINE_SIZE) {
+                    String tempString = stringBuilder.toString();
+                    stringBuilder.delete(ZERO, stringBuilder.length());
+                    tempString = trimAtLast(tempString, string);
+                    stringBuilder.append(tempString);
+                    if (string.equals(PERIOD)) {
+                        append = NEW_LINE + TWELVE_SPACE_INDENTATION + PERIOD + str + string;
+                    } else {
+                        append = NEW_LINE + TWELVE_SPACE_INDENTATION + str + string;
+                    }
+                    stringBuilder.append(append);
+                    append = EMPTY_STRING;
+                    tempBuilder.delete(ZERO, tempBuilder.length());
+                    tempBuilder.append(TWELVE_SPACE_INDENTATION);
+                } else {
+                    append = str + string;
+                    tempBuilder.append(append);
+                }
+            } else {
+                append = str + string;
+                tempBuilder.append(append);
+            }
             if (tempBuilder.length() > lineSize) {
                 String tempString = stringBuilder.toString();
                 stringBuilder.delete(ZERO, stringBuilder.length());
diff --git a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/IntraFileUsesLinkingTest.java b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/IntraFileUsesLinkingTest.java
index 716e21c..6d81c09 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/IntraFileUsesLinkingTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/IntraFileUsesLinkingTest.java
@@ -262,7 +262,8 @@
 
         thrown.expect(LinkerException.class);
         thrown.expectMessage(
-                "YANG file error: Duplicate input identifier detected, same as leaf \"zip-code\"");
+                "YANG file error: Duplicate input identifier detected, same as leaf \"zip-code in 7 at 13 in " +
+                        "src/test/resources/SelfResolutionGroupingReferencingItselfFailureScenerio.yang\"");
         YangNode node = manager
                 .getDataModel("src/test/resources/SelfResolutionGroupingReferencingItselfFailureScenerio.yang");
 
@@ -372,7 +373,8 @@
 
         thrown.expect(ParserException.class);
         thrown.expectMessage(
-                "YANG file error: Duplicate input identifier detected, same as uses \"failure\"");
+                "YANG file error: Duplicate input identifier detected, same as uses \"failure in 10 at 13 in" +
+                        " src/test/resources/SelfResolutionGroupingHavingSameUsesManyTimes.yang\"");
         YangNode node = manager
                 .getDataModel("src/test/resources/SelfResolutionGroupingHavingSameUsesManyTimes.yang");
     }
diff --git a/plugin/src/test/resources/augmentTranslator/test5.yang b/plugin/src/test/resources/augmentTranslator/test5.yang
new file mode 100644
index 0000000..b7cf234
--- /dev/null
+++ b/plugin/src/test/resources/augmentTranslator/test5.yang
@@ -0,0 +1,25 @@
+module test5 {  
+    namespace "test:test";  
+    prefix test5 ;  
+           
+    import test{  
+       prefix test;
+    }        
+    organization "";  
+    contact "";  
+       
+    description   
+       "Defines basic service types for L3VPN service.";  
+       
+    revision "2015-12-16" {  
+       reference "";  
+    }  
+                    
+    augment /test:cont1 {
+        leaf leaf1 {
+           type int32;
+         }
+    }
+
+}
+