diff --git a/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerErrorMessageConstructionTest.java b/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerErrorMessageConstructionTest.java
index 7cbc7f6..0c1473e 100644
--- a/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerErrorMessageConstructionTest.java
+++ b/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerErrorMessageConstructionTest.java
@@ -17,13 +17,14 @@
 package org.onosproject.yangutils.parser.parseutils;
 
 import org.junit.Test;
-import org.onosproject.yangutils.parser.ParsableDataType;
-import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation;
-import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction;
-import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType;
 
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
+import static org.onosproject.yangutils.parser.ParsableDataType.CONTACT_DATA;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
 
 /**
  * Test case for testing listener error message construction util.
@@ -37,9 +38,7 @@
     public void checkErrorMsgConstructionWithName() {
 
         // Create an test error message
-        String testErrorMessage = ListenerErrorMessageConstruction
-                .constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, ParsableDataType.CONTACT_DATA,
-                                               "Test Instance", ListenerErrorLocation.ENTRY);
+        String testErrorMessage = constructListenerErrorMessage(INVALID_HOLDER, CONTACT_DATA, "Test Instance", ENTRY);
 
         // Check message.
         assertThat(testErrorMessage, is("Internal parser error detected: Invalid holder for contact "
@@ -53,9 +52,7 @@
     public void checkErrorMsgConstructionWithoutName() {
 
         // Create an test error message
-        String testErrorMessage = ListenerErrorMessageConstruction
-                .constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, ParsableDataType.CONTACT_DATA,
-                                               "Test Instance", ListenerErrorLocation.ENTRY);
+        String testErrorMessage = constructListenerErrorMessage(INVALID_HOLDER, CONTACT_DATA, "Test Instance", ENTRY);
 
         // Check message.
         assertThat(testErrorMessage,
@@ -64,16 +61,16 @@
     }
 
     /**
-     * Checks for extended error message construction with parsable data type name.
+     * Checks for extended error message construction with parsable data type
+     * name.
      */
     @Test
     public void checkExtendedErrorMsgConstructionWithName() {
 
         // Create an test error message
-        String testErrorMessage = ListenerErrorMessageConstruction
-                .constructExtendedListenerErrorMessage(ListenerErrorType.INVALID_HOLDER,
-                                                       ParsableDataType.CONTACT_DATA, "Test Instance",
-                                                       ListenerErrorLocation.ENTRY, "Extended Information");
+        String testErrorMessage = constructExtendedListenerErrorMessage(INVALID_HOLDER, CONTACT_DATA,
+                                                                        "Test Instance", ENTRY,
+                                                                        "Extended Information");
 
         // Check message.
         assertThat(testErrorMessage,
@@ -82,19 +79,18 @@
     }
 
     /**
-     * Checks for extended error message construction without parsable data type name.
+     * Checks for extended error message construction without parsable data type
+     * name.
      */
     @Test
     public void checkExtendedErrorMsgConstructionWithoutName() {
 
         // Create an test error message
-        String testErrorMessage = ListenerErrorMessageConstruction
-                .constructExtendedListenerErrorMessage(ListenerErrorType.INVALID_HOLDER,
-                                                       ParsableDataType.CONTACT_DATA, "",
-                                                       ListenerErrorLocation.ENTRY, "Extended Information");
+        String testErrorMessage = constructExtendedListenerErrorMessage(INVALID_HOLDER, CONTACT_DATA, "", ENTRY,
+                                                                        "Extended Information");
 
         // Check message.
         assertThat(testErrorMessage, is("Internal parser error detected: Invalid holder for contact"
                 + " before processing.\n" + "Error Information: Extended Information"));
     }
-}
\ No newline at end of file
+}
diff --git a/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerValidationTest.java b/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerValidationTest.java
index 85eb48d..d39b0ae 100644
--- a/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerValidationTest.java
+++ b/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerValidationTest.java
@@ -20,13 +20,15 @@
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.onosproject.yangutils.datamodel.YangRevision;
-import org.onosproject.yangutils.parser.ParsableDataType;
 import org.onosproject.yangutils.parser.exceptions.ParserException;
 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation;
-import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction;
-import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType;
-import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation;
+
+import static org.onosproject.yangutils.parser.ParsableDataType.YANGBASE_DATA;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsEmpty;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
 
 /**
  * Test case for testing listener validation util.
@@ -43,9 +45,7 @@
     @Test
     public void validateStackIsNotEmptyForEmptyStack() {
 
-        String expectedError = ListenerErrorMessageConstruction
-                .constructListenerErrorMessage(ListenerErrorType.MISSING_HOLDER, ParsableDataType.YANGBASE_DATA, "",
-                        ListenerErrorLocation.EXIT);
+        String expectedError = constructListenerErrorMessage(MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
 
         // Get the exception occurred during parsing.
         thrown.expect(ParserException.class);
@@ -54,13 +54,12 @@
         // Create test walker and assign test error to it.
         TreeWalkListener testWalker = new TreeWalkListener();
 
-        ListenerValidation.checkStackIsNotEmpty(testWalker, ListenerErrorType.MISSING_HOLDER,
-                ParsableDataType.YANGBASE_DATA, "", ListenerErrorLocation.EXIT);
+        checkStackIsNotEmpty(testWalker, MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
     }
 
     /**
-     * Checks if there is no exception in case parsable stack is not empty while validating
-     * for not empty scenario.
+     * Checks if there is no exception in case parsable stack is not empty while
+     * validating for not empty scenario.
      */
     @Test
     public void validateStackIsNotEmptyForNonEmptyStack() {
@@ -72,8 +71,7 @@
         YangRevision tmpNode = new YangRevision();
         testWalker.getParsedDataStack().push(tmpNode);
 
-        ListenerValidation.checkStackIsNotEmpty(testWalker, ListenerErrorType.MISSING_HOLDER,
-                                                ParsableDataType.YANGBASE_DATA, "", ListenerErrorLocation.EXIT);
+        checkStackIsNotEmpty(testWalker, MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
     }
 
     /**
@@ -83,9 +81,7 @@
     @Test
     public void validateStackIsEmptyForNonEmptyStack() {
 
-        String expectedError = ListenerErrorMessageConstruction
-                .constructListenerErrorMessage(ListenerErrorType.MISSING_HOLDER, ParsableDataType.YANGBASE_DATA, "",
-                        ListenerErrorLocation.EXIT);
+        String expectedError = constructListenerErrorMessage(MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
 
         // Get the exception occurred during parsing.
         thrown.expect(ParserException.class);
@@ -98,13 +94,12 @@
         YangRevision tmpNode = new YangRevision();
         testWalker.getParsedDataStack().push(tmpNode);
 
-        ListenerValidation.checkStackIsEmpty(testWalker, ListenerErrorType.MISSING_HOLDER,
-                                             ParsableDataType.YANGBASE_DATA, "", ListenerErrorLocation.EXIT);
+        checkStackIsEmpty(testWalker, MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
     }
 
     /**
-     * Checks if there is no exception in case parsable stack is empty while validating
-     * for empty scenario.
+     * Checks if there is no exception in case parsable stack is empty while
+     * validating for empty scenario.
      */
     @Test
     public void validateStackIsEmptyForEmptyStack() {
@@ -112,7 +107,6 @@
         // Create test walker and assign test error to it.
         TreeWalkListener testWalker = new TreeWalkListener();
 
-        ListenerValidation.checkStackIsEmpty(testWalker, ListenerErrorType.MISSING_HOLDER,
-                                             ParsableDataType.YANGBASE_DATA, "", ListenerErrorLocation.EXIT);
+        checkStackIsEmpty(testWalker, MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
     }
-}
\ No newline at end of file
+}
