diff --git a/plugin/src/test/java/org/onosproject/yangutils/ietfyang/IetfYangFileTest.java b/plugin/src/test/java/org/onosproject/yangutils/ietfyang/IetfYangFileTest.java
index 0fb1108..ac81198 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/ietfyang/IetfYangFileTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/ietfyang/IetfYangFileTest.java
@@ -54,7 +54,6 @@
         String userDir = System.getProperty("user.dir");
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/ietfyang/l3vpnservice/");
-        yangPluginConfig.setManagerCodeGenDir("target/ietfyang/l3vpnservice/");
 
         utilManager.translateToJava(yangPluginConfig);
 
diff --git a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/AugmentTranslatorTest.java b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/AugmentTranslatorTest.java
index 16914a3..fc4c6b1 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/AugmentTranslatorTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/AugmentTranslatorTest.java
@@ -20,9 +20,9 @@
 
 import org.apache.maven.plugin.MojoExecutionException;
 import org.junit.Test;
+import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
 import org.onosproject.yangutils.parser.exceptions.ParserException;
 import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
 
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
 
@@ -49,10 +49,8 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/augmentTranslator/");
-        yangPluginConfig.setManagerCodeGenDir("target/augmentTranslator/");
         utilManager.translateToJava(yangPluginConfig);
 
-        deleteDirectory("target/augmentTranslator/");
+        deleteDirectory("target/augmentTranslator1/");
     }
-
 }
diff --git a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/ChoiceCaseTranslatorTest.java b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/ChoiceCaseTranslatorTest.java
index ef1b774..ef179ff 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/ChoiceCaseTranslatorTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/ChoiceCaseTranslatorTest.java
@@ -44,7 +44,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/ChoiceCaseTestGenFile/");
-        yangPluginConfig.setManagerCodeGenDir("target/ChoiceCaseTestGenFile/");
 
         generateJavaCode(node, yangPluginConfig);
 
diff --git a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/EnumTranslatorTest.java b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/EnumTranslatorTest.java
index 69f6c7e..1a16f2a 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/EnumTranslatorTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/EnumTranslatorTest.java
@@ -45,7 +45,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/EnumTestGenFile/");
-        yangPluginConfig.setManagerCodeGenDir("target/EnumTestGenFile/");
 
         generateJavaCode(node, yangPluginConfig);
 
diff --git a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileLeafrefLinkingTest.java b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileLeafrefLinkingTest.java
index cc39c53..dd1029e 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileLeafrefLinkingTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileLeafrefLinkingTest.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.util.Iterator;
 import java.util.ListIterator;
+
 import org.apache.maven.plugin.MojoExecutionException;
 import org.junit.Rule;
 import org.junit.Test;
@@ -32,7 +33,6 @@
 import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
 import org.onosproject.yangutils.linker.impl.YangLinkerManager;
 import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
 import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
 
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -52,7 +52,6 @@
 
     private final YangUtilManager utilManager = new YangUtilManager();
     private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
-    private final YangUtilsParserManager manager = new YangUtilsParserManager();
 
     /**
      * Checks inter file leafref linking.
diff --git a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileLinkingTest.java b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileLinkingTest.java
index a99cd6c..d899e67 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileLinkingTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileLinkingTest.java
@@ -656,7 +656,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/interfilewithusesreferringtype/");
-        yangPluginConfig.setManagerCodeGenDir("target/interfilewithusesreferringtype/");
 
         utilManager.translateToJava(yangPluginConfig);
 
@@ -678,7 +677,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/file1UsesFile2TypeDefFile3Type/");
-        yangPluginConfig.setManagerCodeGenDir("target/file1UsesFile2TypeDefFile3Type/");
 
         utilManager.translateToJava(yangPluginConfig);
 
@@ -700,7 +698,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/interfileietf/");
-        yangPluginConfig.setManagerCodeGenDir("target/interfileietf/");
 
         utilManager.translateToJava(yangPluginConfig);
 
@@ -722,7 +719,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/usesInContainer/");
-        yangPluginConfig.setManagerCodeGenDir("target/usesInContainer/");
 
         utilManager.translateToJava(yangPluginConfig);
 
@@ -744,7 +740,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/groupingNodeSameAsModule/");
-        yangPluginConfig.setManagerCodeGenDir("target/groupingNodeSameAsModule/");
 
         utilManager.translateToJava(yangPluginConfig);
 
diff --git a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/InterJarLinkerTest.java b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/InterJarLinkerTest.java
index 615e63a..900aca9 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/InterJarLinkerTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/InterJarLinkerTest.java
@@ -41,11 +41,10 @@
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
+import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.deSerializeDataModel;
-import static org.onosproject.yangutils.plugin.manager.YangPluginUtils.parseJarFile;
+import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.parseJarFile;
 import static org.onosproject.yangutils.plugin.manager.YangPluginUtils.serializeDataModel;
 import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
 import static org.onosproject.yangutils.utils.UtilConstants.TEMP;
@@ -189,7 +188,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir(TARGET);
-        yangPluginConfig.setManagerCodeGenDir(TARGET);
 
         utilManager.translateToJava(yangPluginConfig);
 
@@ -206,7 +204,7 @@
         File folder = new File(System.getProperty("user.dir") + SLASH + FLOW_CLASSIFIER_FOLDER);
         File file = new File(System.getProperty("user.dir") + SLASH + FLOW_CLASSIFIER_MANAGER);
         assertThat(true, is(folder.exists()));
-        assertThat(true, is(file.exists()));
+        assertThat(false, is(file.exists()));
     }
 
     /**
@@ -304,7 +302,7 @@
      */
     private void addInterJarRootNodes(String jarFile) throws IOException {
         try {
-            List<YangNode> interJarResolvedNodes = deSerializeDataModel(parseJarFile(jarFile, TARGET));
+            List<YangNode> interJarResolvedNodes = parseJarFile(jarFile, TARGET);
 
             for (YangNode node : interJarResolvedNodes) {
                 YangFileInfo dependentFileInfo = new YangFileInfo();
@@ -326,7 +324,6 @@
 
         File file = new File(TARGET + TARGET_RESOURCE_PATH);
         File[] files = file.listFiles();
-
         String[] source = new String[files.length];
 
         for (int i = 0; i < files.length; i++) {
diff --git a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/ManagerCodeGeneratorTest.java b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/ManagerCodeGeneratorTest.java
deleted file mode 100644
index e72471c..0000000
--- a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/ManagerCodeGeneratorTest.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Test;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Unit test case to test code generation for root nodes.
- */
-public class ManagerCodeGeneratorTest {
-
-    private final YangUtilManager utilManager = new YangUtilManager();
-
-    /**
-     * Checks manager translation should not result in any exception.
-     *
-     * @throws MojoExecutionException when fails to do mojo operations
-     */
-    @Test
-    public void processManagerTranslator() throws IOException, ParserException, MojoExecutionException {
-
-        String searchDir = "src/test/resources/manager/singleChild";
-        utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
-        utilManager.parseYangFileInfoSet();
-        utilManager.createYangNodeSet();
-        utilManager.resolveDependenciesUsingLinker();
-
-        YangPluginConfig yangPluginConfig = new YangPluginConfig();
-        yangPluginConfig.setCodeGenDir("target/manager/");
-        yangPluginConfig.setManagerCodeGenDir("target/manager/");
-
-        utilManager.translateToJava(yangPluginConfig);
-        String file1 = "target/manager/org/onosproject/yang/gen/v1/test5/test/rev20160704/Test5Manager.java";
-        String file2 = "target/manager/org/onosproject/yang/gen/v1/test5/test/rev20160704/Test6Manager.java";
-        String file3 = "target/manager/org/onosproject/yang/gen/v1/test5/test/rev20160704/Test7Manager.java";
-        File manager = new File(file1);
-        assertThat(false, is(manager.exists()));
-
-        File manager2 = new File(file2);
-        assertThat(false, is(manager2.exists()));
-
-        File manager3 = new File(file3);
-        assertThat(true, is(manager3.exists()));
-
-        deleteDirectory("target/manager/");
-    }
-
-    /**
-     * Checks manager translation in different package should not result in any exception.
-     *
-     * @throws MojoExecutionException when fails to do mojo operations
-     */
-    @Test
-    public void processManagerInDifferentPackageTranslator() throws IOException, ParserException,
-            MojoExecutionException {
-
-        String searchDir = "src/test/resources/manager/singleChild";
-        utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
-        utilManager.parseYangFileInfoSet();
-        utilManager.createYangNodeSet();
-        utilManager.resolveDependenciesUsingLinker();
-
-        YangPluginConfig yangPluginConfig = new YangPluginConfig();
-        yangPluginConfig.setCodeGenDir("target/manager/");
-        yangPluginConfig.setManagerCodeGenDir("target/manager/");
-
-        utilManager.translateToJava(yangPluginConfig);
-        String file3 = "target/manager/org/onosproject/yang/gen/v1/test5/test/rev20160704/Test7Manager.java";
-
-        File manager3 = new File(file3);
-        assertThat(true, is(manager3.exists()));
-
-        deleteDirectory("target/manager/");
-        deleteDirectory("target/manager1/");
-    }
-
-    /**
-     * Checks manager translation in different package should not result in any exception.
-     *
-     * @throws MojoExecutionException when fails to do mojo operations
-     */
-    @Test
-    public void processManagerforMultiChildTranslator() throws IOException, ParserException,
-            MojoExecutionException {
-
-        String searchDir = "src/test/resources/manager/MultiChild";
-        utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
-        utilManager.parseYangFileInfoSet();
-        utilManager.createYangNodeSet();
-        utilManager.resolveDependenciesUsingLinker();
-
-        YangPluginConfig yangPluginConfig = new YangPluginConfig();
-        yangPluginConfig.setCodeGenDir("target/manager/");
-        yangPluginConfig.setManagerCodeGenDir("target/manager/");
-
-        utilManager.translateToJava(yangPluginConfig);
-        String file1 = "target/manager/org/onosproject/yang/gen/v1/test5/test/rev20160704/Test5Manager.java";
-
-        File manager1 = new File(file1);
-        assertThat(false, is(manager1.exists()));
-
-        String file2 = "target/manager/org/onosproject/yang/gen/v1/test5/test/rev20160704/Test6Manager.java";
-
-        File manager2 = new File(file2);
-        assertThat(false, is(manager2.exists()));
-
-        String file3 = "target/manager/org/onosproject/yang/gen/v1/test5/test/rev20160704/Test7Manager.java";
-
-        File manager3 = new File(file3);
-        assertThat(false, is(manager3.exists()));
-
-        String file4 = "target/manager/org/onosproject/yang/gen/v1/test8/test/rev20160704/Test8Manager.java";
-
-        File manager4 = new File(file4);
-        assertThat(true, is(manager4.exists()));
-
-        deleteDirectory("target/manager/");
-        deleteDirectory("target/manager/");
-    }
-
-    /**
-     * Checks manager translation in different package should not result in any exception.
-     *
-     * @throws MojoExecutionException when fails to do mojo operations
-     */
-    @Test
-    public void processManagerforMultiChildWithDifferentPackageTranslator() throws IOException, ParserException,
-            MojoExecutionException {
-
-        String searchDir = "src/test/resources/manager/MultiChild";
-        utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
-        utilManager.parseYangFileInfoSet();
-        utilManager.createYangNodeSet();
-        utilManager.resolveDependenciesUsingLinker();
-
-        YangPluginConfig yangPluginConfig = new YangPluginConfig();
-        yangPluginConfig.setCodeGenDir("target/manager/");
-        yangPluginConfig.setManagerCodeGenDir("target/manager1/");
-
-        utilManager.translateToJava(yangPluginConfig);
-
-        String file1 = "target/manager1/org/onosproject/yang/gen/v1/test8/test/rev20160704/Test8Manager.java";
-
-        File manager1 = new File(file1);
-        assertThat(true, is(manager1.exists()));
-
-
-        String file2 = "target/manager/org/onosproject/yang/gen/v1/test8/test/rev20160704/Test8Service.java";
-
-        File service2 = new File(file2);
-        assertThat(true, is(service2.exists()));
-
-        deleteDirectory("target/manager/");
-        deleteDirectory("target/manager1/");
-    }
-}
diff --git a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/NotificationTranslatorTest.java b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/NotificationTranslatorTest.java
index 8ef8a6a..2c8a7c2 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/NotificationTranslatorTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/NotificationTranslatorTest.java
@@ -45,12 +45,10 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/NotificationTest/");
-        yangPluginConfig.setManagerCodeGenDir("target/NotificationTest1/");
 
         generateJavaCode(node, yangPluginConfig);
 
         deleteDirectory("target/NotificationTest/");
-        deleteDirectory("target/NotificationTest1/");
     }
 
     // TODO enhance the test cases, after having a framework of translator test.
diff --git a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/RpcTranslatorTest.java b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/RpcTranslatorTest.java
index c8961d7..d014b84 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/RpcTranslatorTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/RpcTranslatorTest.java
@@ -45,7 +45,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/RpcTestGenFile/");
-        yangPluginConfig.setManagerCodeGenDir("target/RpcTestGenFile/");
 
         generateJavaCode(node, yangPluginConfig);
 
diff --git a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/TypeDefTranslatorTest.java b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/TypeDefTranslatorTest.java
index b674d26..3c97292 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/TypeDefTranslatorTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/TypeDefTranslatorTest.java
@@ -20,9 +20,9 @@
 
 import org.apache.maven.plugin.MojoExecutionException;
 import org.junit.Test;
+import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
 import org.onosproject.yangutils.parser.exceptions.ParserException;
 import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
 
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
 
@@ -49,7 +49,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/typedefTranslator/");
-        yangPluginConfig.setManagerCodeGenDir("target/typedefTranslator/");
         utilManager.translateToJava(yangPluginConfig);
 
         deleteDirectory("target/typedefTranslator/");
@@ -63,7 +62,6 @@
     @Test
     public void processTypeDefWithRestrictionsTranslator() throws IOException, ParserException, MojoExecutionException {
 
-        /*FIXME: After typedef with leafref is fixed.
         String searchDir = "src/test/resources/typedefTranslator/with";
         utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
         utilManager.parseYangFileInfoSet();
@@ -72,10 +70,10 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/typedefTranslator/");
-        yangPluginConfig.setManagerCodeGenDir("target/typedefTranslator/");
         utilManager.translateToJava(yangPluginConfig);
 
         deleteDirectory("target/typedefTranslator/");
-        */
+
     }
+
 }
diff --git a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/UnionTranslatorTest.java b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/UnionTranslatorTest.java
index 1d5e548..08db37f 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/UnionTranslatorTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/UnionTranslatorTest.java
@@ -47,7 +47,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/UnionTestGenFile/");
-        yangPluginConfig.setManagerCodeGenDir("target/UnionTestGenFile/");
 
         generateJavaCode(node, yangPluginConfig);
 
@@ -71,7 +70,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/unionTranslator/");
-        yangPluginConfig.setManagerCodeGenDir("target/unionTranslator/");
 
         utilManager.translateToJava(yangPluginConfig);
         deleteDirectory("target/unionTranslator/");
@@ -94,7 +92,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/unionTranslator/");
-        yangPluginConfig.setManagerCodeGenDir("target/unionTranslator/");
 
         utilManager.translateToJava(yangPluginConfig);
         deleteDirectory("target/unionTranslator/");
@@ -117,7 +114,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/unionTranslator/");
-        yangPluginConfig.setManagerCodeGenDir("target/unionTranslator/");
 
         utilManager.translateToJava(yangPluginConfig);
         deleteDirectory("target/unionTranslator/");
@@ -140,7 +136,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/unionTranslator/");
-        yangPluginConfig.setManagerCodeGenDir("target/unionTranslator/");
 
         utilManager.translateToJava(yangPluginConfig);
         deleteDirectory("target/unionTranslator/");
@@ -163,7 +158,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/unionTranslator/");
-        yangPluginConfig.setManagerCodeGenDir("target/unionTranslator/");
 
         utilManager.translateToJava(yangPluginConfig);
         deleteDirectory("target/unionTranslator/");
@@ -187,7 +181,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/unionTranslator/");
-        yangPluginConfig.setManagerCodeGenDir("target/unionTranslator/");
 
         utilManager.translateToJava(yangPluginConfig);
         deleteDirectory("target/unionTranslator/");
@@ -211,7 +204,6 @@
 
         YangPluginConfig yangPluginConfig = new YangPluginConfig();
         yangPluginConfig.setCodeGenDir("target/unionTranslator/");
-        yangPluginConfig.setManagerCodeGenDir("target/unionTranslator/");
 
         utilManager.translateToJava(yangPluginConfig);
         deleteDirectory("target/unionTranslator/");
diff --git a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/YangXpathLinkerTest.java b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/YangXpathLinkerTest.java
index 5dd50ca..a6de459 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/YangXpathLinkerTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/YangXpathLinkerTest.java
@@ -18,6 +18,7 @@
 
 import java.io.IOException;
 import java.util.List;
+
 import org.apache.maven.plugin.MojoExecutionException;
 import org.junit.Test;
 import org.onosproject.yangutils.datamodel.ResolvableType;
@@ -28,22 +29,24 @@
 import org.onosproject.yangutils.linker.impl.YangLinkerManager;
 import org.onosproject.yangutils.linker.impl.YangXpathLinker;
 import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
+import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
 import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.updateFilePriority;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
 
 /**
  * Unit test cases for x-path linker.
  */
 public class YangXpathLinkerTest {
 
-    private YangUtilManager utilManager = new YangUtilManager();
-    private YangXpathLinker linker = new YangXpathLinker();
-    private YangLinkerManager linkerManager = new YangLinkerManager();
     private static final String INTRA_FILE_PATH = "src/test/resources/xPathLinker/IntraFile/";
     private static final String INTER_FILE_PATH = "src/test/resources/xPathLinker/InterFile/";
     private static final String CASE_FILE_PATH = "src/test/resources/xPathLinker/Case/";
+    private YangUtilManager utilManager = new YangUtilManager();
+    private YangXpathLinker linker = new YangXpathLinker();
+    private YangLinkerManager linkerManager = new YangLinkerManager();
 
     /**
      * Unit test case for intra file linking for single level container.
@@ -622,6 +625,7 @@
         linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
         linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
         updateFilePriority(utilManager.getYangNodeSet());
+
         linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
 
         YangNode targetNode = null;
@@ -649,30 +653,34 @@
     @Test
     public void processInterFileLinkingInMultipleUses() throws IOException {
 
-        /** FIXME: once order of linking is done.
-         utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(CASE_FILE_PATH + "uses/"));
-         utilManager.parseYangFileInfoSet();
-         utilManager.createYangNodeSet();
-         linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-         linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
-         linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-         linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
-         linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+        utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(CASE_FILE_PATH + "uses/"));
+        utilManager.parseYangFileInfoSet();
+        utilManager.createYangNodeSet();
+        linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+        linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+        linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+        linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+        updateFilePriority(utilManager.getYangNodeSet());
+        linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
 
-         YangNode targetNode = null;
-         String targetNodeName = null;
+        YangNode targetNode = null;
+        String targetNodeName = null;
 
-         for (YangNode node : utilManager.getYangNodeSet()) {
-         List<YangAugment> augments = linker.getListOfYangAugment(node);
+        for (YangNode node : utilManager.getYangNodeSet()) {
+            List<YangAugment> augments = linker.getListOfYangAugment(node);
 
-         for (YangAugment augment : augments) {
-         targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1)
-         .getNodeIdentifier().getName();
-         targetNode = augment.getAugmentedNode();
-         }
-         }
+            for (YangAugment augment : augments) {
+                targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1)
+                        .getNodeIdentifier().getName();
+                targetNode = augment.getAugmentedNode();
+            }
+        }
 
-         assertThat(true, is(targetNode.getName().equals(targetNodeName)));
-         */
+        YangPluginConfig yangPluginConfig = new YangPluginConfig();
+        yangPluginConfig.setCodeGenDir("target/xpath/");
+        utilManager.translateToJava(yangPluginConfig);
+        assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+
+        deleteDirectory("target/xpath/");
     }
 }
diff --git a/plugin/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGenTest.java b/plugin/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGenTest.java
index 48655cd..e5021d3 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGenTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGenTest.java
@@ -26,7 +26,7 @@
 import static org.hamcrest.core.Is.is;
 import static org.hamcrest.core.IsNot.not;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getImportText;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefination;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefinition;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaClassDefClose;
 import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
 import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
@@ -53,11 +53,11 @@
     /**
      * Unit test for private constructor.
      *
-     * @throws SecurityException if any security violation is observed
-     * @throws NoSuchMethodException if when the method is not found
-     * @throws IllegalArgumentException if there is illegal argument found
-     * @throws InstantiationException if instantiation is provoked for the private constructor
-     * @throws IllegalAccessException if instance is provoked or a method is provoked
+     * @throws SecurityException         if any security violation is observed
+     * @throws NoSuchMethodException     if when the method is not found
+     * @throws IllegalArgumentException  if there is illegal argument found
+     * @throws InstantiationException    if instantiation is provoked for the private constructor
+     * @throws IllegalAccessException    if instance is provoked or a method is provoked
      * @throws InvocationTargetException when an exception occurs by the method or constructor
      */
     @Test
@@ -65,7 +65,7 @@
             throws SecurityException, NoSuchMethodException, IllegalArgumentException,
             InstantiationException, IllegalAccessException, InvocationTargetException {
 
-        Class<?>[] classesToConstruct = {JavaCodeSnippetGen.class };
+        Class<?>[] classesToConstruct = {JavaCodeSnippetGen.class};
         for (Class<?> clazz : classesToConstruct) {
             Constructor<?> constructor = clazz.getDeclaredConstructor();
             constructor.setAccessible(true);
@@ -102,26 +102,26 @@
     @Test
     public void testForJavaAttributeInfo() {
 
-        String attributeWithoutTypePkg = getJavaAttributeDefination(null, STRING_DATA_TYPE, YANG_NAME,
-                                                                    false, PRIVATE);
+        String attributeWithoutTypePkg = getJavaAttributeDefinition(null, STRING_DATA_TYPE, YANG_NAME,
+                false, PRIVATE);
         assertThat(true, is(attributeWithoutTypePkg.equals(
                 PRIVATE + SPACE + STRING_DATA_TYPE + SPACE + YANG_NAME + SEMI_COLAN + NEW_LINE)));
 
-        String attributeWithTypePkg = getJavaAttributeDefination(JAVA_LANG, STRING_DATA_TYPE, YANG_NAME,
-                                                                 false, PRIVATE);
+        String attributeWithTypePkg = getJavaAttributeDefinition(JAVA_LANG, STRING_DATA_TYPE, YANG_NAME,
+                false, PRIVATE);
         assertThat(true, is(attributeWithTypePkg.equals(PRIVATE + SPACE + JAVA_LANG + PERIOD
                 + STRING_DATA_TYPE + SPACE + YANG_NAME + SEMI_COLAN + NEW_LINE)));
 
-        String attributeWithListPkg = getJavaAttributeDefination(JAVA_LANG, STRING_DATA_TYPE, YANG_NAME,
-                                                                 true, PRIVATE);
-        assertThat(true, is(attributeWithListPkg.equals(
+        String attributeWithListPkg = getJavaAttributeDefinition(JAVA_LANG, STRING_DATA_TYPE, YANG_NAME,
+                true, PRIVATE);
+        assertThat(true, is(attributeWithListPkg.contains(
                 PRIVATE + SPACE + LIST + DIAMOND_OPEN_BRACKET + JAVA_LANG + PERIOD + STRING_DATA_TYPE
-                        + DIAMOND_CLOSE_BRACKET + SPACE + YANG_NAME + SEMI_COLAN + NEW_LINE)));
+                        + DIAMOND_CLOSE_BRACKET + SPACE + YANG_NAME)));
 
-        String attributeWithListWithoutPkg = getJavaAttributeDefination(null, STRING_DATA_TYPE, YANG_NAME,
-                                                                        true, PRIVATE);
-        assertThat(true, is(attributeWithListWithoutPkg.equals(
+        String attributeWithListWithoutPkg = getJavaAttributeDefinition(null, STRING_DATA_TYPE, YANG_NAME,
+                true, PRIVATE);
+        assertThat(true, is(attributeWithListWithoutPkg.contains(
                 PRIVATE + SPACE + LIST + DIAMOND_OPEN_BRACKET + STRING_DATA_TYPE + DIAMOND_CLOSE_BRACKET + SPACE
-                        + YANG_NAME + SEMI_COLAN + NEW_LINE)));
+                        + YANG_NAME)));
     }
 }
diff --git a/plugin/src/test/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGeneratorTest.java b/plugin/src/test/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGeneratorTest.java
index cd25b6d..ceebd35 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGeneratorTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGeneratorTest.java
@@ -21,9 +21,9 @@
 
 import org.junit.Test;
 import org.onosproject.yangutils.datamodel.YangType;
+import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
 import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
 import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
-import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
 
 import static org.hamcrest.core.Is.is;
 import static org.hamcrest.core.IsNot.not;
@@ -131,7 +131,7 @@
      */
     @Test
     public void getBuildTest() {
-        String method = getBuild(CLASS_NAME);
+        String method = getBuild(CLASS_NAME, false);
         assertThat(true, is(method.equals(FOUR_SPACE_INDENTATION + PUBLIC + SPACE + CLASS_NAME + SPACE + BUILD
                 + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION
                 + RETURN + SPACE + NEW + SPACE + "Default" + CLASS_NAME + OPEN_PARENTHESIS + THIS + CLOSE_PARENTHESIS
@@ -177,7 +177,7 @@
     @Test
     public void getConstructorStartTest() {
         YangPluginConfig pluginConfig = new YangPluginConfig();
-        String method = getConstructorStart(CLASS_NAME, pluginConfig);
+        String method = getConstructorStart(CLASS_NAME, pluginConfig, false);
         assertThat(true, is(method.contains(PUBLIC + SPACE + "Default" + CLASS_NAME + OPEN_PARENTHESIS + CLASS_NAME
                 + BUILDER + SPACE + BUILDER.toLowerCase() + OBJECT + CLOSE_PARENTHESIS + SPACE
                 + OPEN_CURLY_BRACKET + NEW_LINE)));
diff --git a/plugin/src/test/java/org/onosproject/yangutils/utils/io/impl/YangIoUtilsTest.java b/plugin/src/test/java/org/onosproject/yangutils/utils/io/impl/YangIoUtilsTest.java
index 5b8cddb..393408a 100644
--- a/plugin/src/test/java/org/onosproject/yangutils/utils/io/impl/YangIoUtilsTest.java
+++ b/plugin/src/test/java/org/onosproject/yangutils/utils/io/impl/YangIoUtilsTest.java
@@ -47,7 +47,7 @@
     private static final String CHECK1 = "check1";
     private static final String PKG_INFO = "package-info.java";
     private static final String PATH = "src/main/yangmodel/";
-    private static final String MSG = "Exception occured while creating package info file.";
+    private static final String MSG = "Exception occurred while creating package info file.";
 
     /**
      * Expected exceptions.
diff --git a/plugin/src/test/resources/augmentTranslator/test.yang b/plugin/src/test/resources/augmentTranslator/test.yang
index 76ea6c9..3fa36b9 100644
--- a/plugin/src/test/resources/augmentTranslator/test.yang
+++ b/plugin/src/test/resources/augmentTranslator/test.yang
@@ -31,6 +31,19 @@
         }
      }
 
+    choice choice1 {
+         case case1 {
+              leaf case-leaf {
+                  type int32;
+               }
+              container case-container3 {
+                 leaf leafs {
+                     type int64;
+                 }
+              }  
+         }
+     }
+                    
 
     augment /cont3 {
         leaf leaf1 {
@@ -39,10 +52,28 @@
     }
 
     augment /cont1/cont2 {
-        leaf leaf2 {
+        leaf-list leaf2 {
            type int32;
         }
     }
+    augment /choice1 {
+        leaf-list leaf2 {
+           type int32;
+        }
+        leaf leaf1 {
+           type int32;
+         }
+         container case-container {
+            leaf leafs {
+                 type int64;
+             }
+         }  
+         container case-container2 {
+            leaf leafs {
+                 type int64;
+             }
+         }         
+    }
 
     augment /test1:cont1/test1:cont2 {
        leaf a {
@@ -57,10 +88,25 @@
       }
 
      augment /test1:cont1/test1:cont2/test1:cont1s/test1:cont1s/test2:aa {
-        leaf a {
+        leaf name {
+              type string;
+          }
+        leaf surname {
+              type string;
+          }
+        leaf-list aleaflist {
            type int32;
         }
-        container aa {
+        container cont1 {
+        }
+        list alist {
+          key "name";
+          leaf name {
+              type string;
+          }
+          leaf-list surname {
+              type string;
+          }
         }
      }
 
diff --git a/plugin/src/test/resources/xPathLinker/Case/uses/test.yang b/plugin/src/test/resources/xPathLinker/Case/uses/test.yang
index e57a468..b326024 100644
--- a/plugin/src/test/resources/xPathLinker/Case/uses/test.yang
+++ b/plugin/src/test/resources/xPathLinker/Case/uses/test.yang
@@ -2,9 +2,7 @@
     namespace "xpath:intra:single";  
     prefix test ;  
    
-    include test1;
     include test2;
-    include test4;
 
     organization "";  
     contact "";  
@@ -21,11 +19,5 @@
           type int32;
        }
     }
-
-   augment /group1/cont3/cont4/cont8 {
-       leaf a {
-          type int32;
-       }
-    }
 }
     
diff --git a/plugin/src/test/resources/xPathLinker/Case/uses/test1.yang b/plugin/src/test/resources/xPathLinker/Case/uses/test1.yang
index 2c5dc20..bd75dba 100644
--- a/plugin/src/test/resources/xPathLinker/Case/uses/test1.yang
+++ b/plugin/src/test/resources/xPathLinker/Case/uses/test1.yang
@@ -4,8 +4,6 @@
          prefix test;
     }           
 
-    include test4;
-
     organization "";  
     contact "";  
        
@@ -35,13 +33,5 @@
        }
     }
 
-     augment /group1/cont3/cont4 {
-        container cont8 {
-          leaf leaf8 {
-             type int32;
-          }
-       }
-    }
-
 }
     
diff --git a/plugin/src/test/resources/xPathLinker/Case/uses/test2.yang b/plugin/src/test/resources/xPathLinker/Case/uses/test2.yang
index fedb0aa..e42101e 100644
--- a/plugin/src/test/resources/xPathLinker/Case/uses/test2.yang
+++ b/plugin/src/test/resources/xPathLinker/Case/uses/test2.yang
@@ -3,8 +3,8 @@
          prefix test;
     }
 
+    include test3;
     include test1;
-    include test4;
 
     organization "";  
     contact "";  
@@ -52,5 +52,13 @@
           
        }
     }
+
+     augment /group1/cont3/cont4 {
+        container cont8 {
+          leaf leaf8 {
+             type int32;
+          }
+       }
+    }
 }
     
diff --git a/plugin/src/test/resources/xPathLinker/Case/uses/test4.yang b/plugin/src/test/resources/xPathLinker/Case/uses/test4.yang
index 589179d..b45bb7d 100644
--- a/plugin/src/test/resources/xPathLinker/Case/uses/test4.yang
+++ b/plugin/src/test/resources/xPathLinker/Case/uses/test4.yang
@@ -1,10 +1,9 @@
-submodule test4 {  
+submodule test3 {  
 
     belongs-to test {
          prefix test;
     } 
-      
-    include test2;
+    
     organization "";  
     contact "";  
        
@@ -27,11 +26,5 @@
             }
         }
     }
-
-    augment /ethernet/cont11 {
-       leaf leaf11 {
-             type int32;
-       }
-   }
     
 }
