diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/AugmentJavaFileNameGenUtilTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/AugmentJavaFileNameGenUtilTest.java
new file mode 100644
index 0000000..ac3658c
--- /dev/null
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/AugmentJavaFileNameGenUtilTest.java
@@ -0,0 +1,320 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yangutils.parser.impl.parseutils;
+
+import org.junit.Test;
+import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+import static org.onosproject.yangutils.parser.impl.parserutils.AugmentJavaFileNameGenUtil.clearOccurrenceCount;
+import static org.onosproject.yangutils.parser.impl.parserutils.AugmentJavaFileNameGenUtil.createValidNameForAugment;
+import static org.onosproject.yangutils.parser.impl.parserutils.AugmentJavaFileNameGenUtil.getAugmentJavaFileNameList;
+import static org.onosproject.yangutils.parser.impl.parserutils.AugmentJavaFileNameGenUtil.updateNameWhenHasMultipleOuccrrence;
+
+/**
+ * Unit test case for augment java file name generator utility.
+ */
+public class AugmentJavaFileNameGenUtilTest {
+
+    private static final String TEST1 = "test1Node";
+    private static final String PARENT_PREFIX = "if";
+    private static final String NODE_PREFIX = "rf";
+
+    private static final String TEST1_AUGMENTED_NAME_WITHOUT_PREFIX = "AugmentedTest1Node";
+    private static final String TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI1 = "AugmentedTest1Node1";
+    private static final String TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI2 = "AugmentedTest1Node2";
+    private static final String TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI3 = "AugmentedTest1Node3";
+
+    private static final String TEST1_AUGMENTED_NAME_WITH_PREFIX = "AugmentedRfTest1Node";
+    private static final String TEST1_AUGMENTED_NAME_WITH_PREFIX_MULTI1 = "AugmentedRfTest1Node1";
+    private static final String TEST1_AUGMENTED_NAME_WITH_PREFIX_MULTI2 = "AugmentedRfTest1Node2";
+    private static final String TEST1_AUGMENTED_NAME_WITH_PREFIX_MULTI3 = "AugmentedRfTest1Node3";
+
+    private static String testString = "";
+
+    /**
+     * Unit test case when parent's prefix is present and one occurrence of augment node to update same target node.
+     */
+    @Test
+    public void testForAugmentNameWhenOneOuccrrenceWithParentPrefix() {
+        clearData();
+        testString = createValidNameForAugment(getStubNodeIdetifierWithParentPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX)));
+    }
+
+    /**
+     * Unit test case when no prefix and one occurrence of augment node to update same target node.
+     */
+    @Test
+    public void testForAugmentNameWhenOneOuccrrenceWithNoPrefix() {
+        clearData();
+        testString = createValidNameForAugment(getStubNodeIdetifierWithNoPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX)));
+    }
+
+    /**
+     * Unit test case when different prefix then parent is present and
+     * one occurrence of augment node to update same target node.
+     */
+    @Test
+    public void testForAugmentNameWhenOneOuccrrenceWithDiffPrefix() {
+        clearData();
+        testString = createValidNameForAugment(getStubNodeIdetifierWithDiffPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITH_PREFIX)));
+    }
+
+    /**
+     * Unit test case when parent's prefix is present and two occurrence of augment node to update
+     * same target node is present.
+     */
+    @Test
+    public void testForAugmentNameWhenTwoOuccrrenceWithParentPrefix() {
+        clearData();
+
+        createValidNameForAugment(getStubNodeIdetifierWithParentPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
+        testString = updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithParentPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
+
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI2)));
+    }
+
+    /**
+     * Unit test case when no prefix and two occurrence of augment node to update
+     * same target node is present.
+     */
+    @Test
+    public void testForAugmentNameWhenTwoOuccrrenceWithNoPrefix() {
+        clearData();
+
+        createValidNameForAugment(getStubNodeIdetifierWithNoPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
+        testString = updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithNoPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI2)));
+    }
+
+    /**
+     * Unit test case when different prefix then parent is present and
+     * two occurrence of augment node to update same target node is present.
+     */
+    @Test
+    public void testForAugmentNameWhenTwoOuccrrenceWithDiffPrefix() {
+        clearData();
+
+        createValidNameForAugment(getStubNodeIdetifierWithDiffPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
+        testString = updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithDiffPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITH_PREFIX_MULTI2)));
+    }
+
+    /**
+     * Unit test case when parent prefix and three occurrence of augment node to update
+     * same target node is present.
+     */
+    @Test
+    public void testForAugmentNameWhenThreeOuccrrenceWithParentPrefix() {
+        clearData();
+
+        createValidNameForAugment(getStubNodeIdetifierWithParentPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
+        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithParentPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
+
+        testString = updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithParentPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI3)));
+    }
+
+    /**
+     * Unit test case when no prefix and three occurrence of augment node to update
+     * same target node is present.
+     */
+    @Test
+    public void testForAugmentNameWhenThreeOuccrrenceNoPrefix() {
+        clearData();
+
+        createValidNameForAugment(getStubNodeIdetifierWithNoPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
+        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithNoPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
+
+        testString = updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithNoPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI3)));
+    }
+
+    /**
+     * Unit test case when different prefix and three occurrence of augment node to update
+     * same target node is present.
+     */
+    @Test
+    public void testForAugmentNameWhenThreeOuccrrenceWithDiffPrefix() {
+        clearData();
+
+        createValidNameForAugment(getStubNodeIdetifierWithDiffPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
+        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithDiffPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
+
+        testString = updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithDiffPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITH_PREFIX_MULTI3)));
+    }
+
+    /**
+     * Unit test case for when three occurrence is there and parent prefix is present,
+     * all the names need to be updated in list.
+     */
+    @Test
+    public void testForPreviousNamesGotUpdatedWhenParentPrefix() {
+        clearData();
+
+        createValidNameForAugment(getStubNodeIdetifierWithParentPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
+        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithParentPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
+        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithParentPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithParentPrefix()));
+
+        testString = getAugmentJavaFileNameList().get(0);
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI1)));
+
+        testString = getAugmentJavaFileNameList().get(1);
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI2)));
+
+        testString = getAugmentJavaFileNameList().get(2);
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI3)));
+    }
+
+    /**
+     * Unit test case for when three occurrence is there and no prefix is present,
+     * all the names need to be updated in list.
+     */
+    @Test
+    public void testForPreviousNamesGotUpdatedWhenNoPrefix() {
+        clearData();
+
+        createValidNameForAugment(getStubNodeIdetifierWithNoPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
+        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithNoPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
+        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithNoPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithNoPrefix()));
+
+        testString = getAugmentJavaFileNameList().get(0);
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI1)));
+
+        testString = getAugmentJavaFileNameList().get(1);
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI2)));
+
+        testString = getAugmentJavaFileNameList().get(2);
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITHOUT_PREFIX_MULTI3)));
+    }
+
+    /**
+     * Unit test case for when three occurrence is there and different prefix is present,
+     * all the names need to be updated in list.
+     */
+    @Test
+    public void testForPreviousNamesGotUpdatedWhenDifferentPrefix() {
+        clearData();
+
+        createValidNameForAugment(getStubNodeIdetifierWithDiffPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
+        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithDiffPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
+        updateNameWhenHasMultipleOuccrrence(getStubNodeIdetifierWithDiffPrefix(),
+                isPrefixPresent(getStubNodeIdetifierWithDiffPrefix()));
+
+        testString = getAugmentJavaFileNameList().get(0);
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITH_PREFIX_MULTI1)));
+
+        testString = getAugmentJavaFileNameList().get(1);
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITH_PREFIX_MULTI2)));
+
+        testString = getAugmentJavaFileNameList().get(2);
+        assertThat(true, is(testString.equals(TEST1_AUGMENTED_NAME_WITH_PREFIX_MULTI3)));
+    }
+
+    /**
+     * Returns stub node identifier when parent prefix is used.
+     *
+     * @param name name of node
+     * @param prefix prefix of node
+     * @return node identifier for node
+     */
+    private YangNodeIdentifier getStubNodeIdetifierWithParentPrefix() {
+        YangNodeIdentifier nodeId = new YangNodeIdentifier();
+        nodeId.setName(TEST1);
+        nodeId.setPrefix(PARENT_PREFIX);
+        return nodeId;
+    }
+
+    /**
+     * Returns stub node identifier when no prefix is used.
+     *
+     * @param name name of node
+     * @param prefix prefix of node
+     * @return node identifier for node
+     */
+    private YangNodeIdentifier getStubNodeIdetifierWithNoPrefix() {
+        YangNodeIdentifier nodeId = new YangNodeIdentifier();
+        nodeId.setName(TEST1);
+        nodeId.setPrefix(null);
+        return nodeId;
+    }
+
+    /**
+     * Returns stub node identifier when different prefix is used.
+     *
+     * @param name name of node
+     * @param prefix prefix of node
+     * @return node identifier for node
+     */
+    private YangNodeIdentifier getStubNodeIdetifierWithDiffPrefix() {
+        YangNodeIdentifier nodeId = new YangNodeIdentifier();
+        nodeId.setName(TEST1);
+        nodeId.setPrefix(NODE_PREFIX);
+        return nodeId;
+    }
+
+    /**
+     * Returns true if a prefix is present and it is not equals to parents prefix.
+     *
+     * @param nodeId YANG node identifier
+     * @param parentsPrefix parent's prefix
+     * @return true if a prefix is present and it is not equals to parents prefix
+     */
+    private static boolean isPrefixPresent(YangNodeIdentifier nodeId) {
+        return nodeId.getPrefix() != null && nodeId.getPrefix() != PARENT_PREFIX;
+    }
+
+    /**
+     * Clears list of names and occurrence count after each test case.
+     */
+    private void clearData() {
+        getAugmentJavaFileNameList().clear();
+        clearOccurrenceCount();
+    }
+
+}
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerErrorMessageConstructionTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ListenerErrorMessageConstructionTest.java
similarity index 98%
rename from utils/yangutils/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerErrorMessageConstructionTest.java
rename to utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ListenerErrorMessageConstructionTest.java
index d10e009..79c46f4 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerErrorMessageConstructionTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ListenerErrorMessageConstructionTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yangutils.parser.parseutils;
+package org.onosproject.yangutils.parser.impl.parseutils;
 
 import org.junit.Test;
 
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerValidationTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ListenerValidationTest.java
similarity index 98%
rename from utils/yangutils/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerValidationTest.java
rename to utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ListenerValidationTest.java
index f4e284e..9cab4dc 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerValidationTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ListenerValidationTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yangutils.parser.parseutils;
+package org.onosproject.yangutils.parser.impl.parseutils;
 
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/parseutils/ParseTreeErrorListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ParseTreeErrorListenerTest.java
similarity index 98%
rename from utils/yangutils/src/test/java/org/onosproject/yangutils/parser/parseutils/ParseTreeErrorListenerTest.java
rename to utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ParseTreeErrorListenerTest.java
index dd09247..4489e77 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/parseutils/ParseTreeErrorListenerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ParseTreeErrorListenerTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yangutils.parser.parseutils;
+package org.onosproject.yangutils.parser.impl.parseutils;
 
 import org.antlr.v4.runtime.ANTLRFileStream;
 import org.antlr.v4.runtime.ANTLRInputStream;
