diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java
index 78c4f64..c3bd23a 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java
@@ -28,6 +28,7 @@
 import org.onosproject.yangutils.datamodel.YangOutput;
 import org.onosproject.yangutils.datamodel.YangRpc;
 import org.onosproject.yangutils.datamodel.YangType;
+import org.onosproject.yangutils.datamodel.YangUses;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
 import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
 import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
@@ -48,8 +49,10 @@
 import static org.onosproject.yangutils.translator.tojava.utils.AttributesJavaDataType.getJavaImportPackage;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getParentNodeInGenCode;
 import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.updatePackageInfo;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
 
 /**
  * Represents rpc information extended to support java code generation.
@@ -189,11 +192,37 @@
          * Add the rpc information to the parent's service temp file.
          */
         try {
+            String rpcsChildNodePkg = getPackageDirPathFromJavaJPackage(getJavaFileInfo().getBaseCodeGenPath() +
+                    (getJavaFileInfo().getPackage() + "." + getJavaFileInfo().getJavaName()).toLowerCase());
+
             ((TempJavaCodeFragmentFilesContainer) parent).getTempJavaCodeFragmentFiles().getServiceTempFiles()
                     .addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfoOfInput, javaAttributeInfoOfOutput,
                             ((JavaFileInfoContainer) parent).getJavaFileInfo().getPluginConfig(),
                             ((YangNode) this).getName(), isInputLeafHolder(), isOutputLeafHolder(),
                             isInputSingleChildHolder(), isOutputSingleChildHolder());
+
+            if (javaAttributeInfoOfInput != null && javaAttributeInfoOfOutput != null
+                    && isInputLeafHolder() && isOutputLeafHolder()) {
+                deleteDirectoryWhenNoFileIsGeneratedForInputOutput(rpcsChildNodePkg);
+            } else if (javaAttributeInfoOfInput != null && javaAttributeInfoOfOutput == null
+                    && isInputLeafHolder()) {
+                deleteDirectoryWhenNoFileIsGeneratedForInputOutput(rpcsChildNodePkg);
+            } else if (javaAttributeInfoOfInput == null && javaAttributeInfoOfOutput != null
+                    && isOutputLeafHolder()) {
+                deleteDirectoryWhenNoFileIsGeneratedForInputOutput(rpcsChildNodePkg);
+            } else {
+                YangNode node = this.getChild();
+                while (node != null) {
+                    YangNode tempNode = node.getChild();
+                    while (tempNode != null) {
+                        if (tempNode instanceof YangUses) {
+                            deleteDirectoryWhenNoFileIsGeneratedForInputOutput(rpcsChildNodePkg);
+                        }
+                        tempNode = tempNode.getNextSibling();
+                    }
+                    node = node.getNextSibling();
+                }
+            }
         } catch (IOException e) {
             throw new TranslatorException("Failed to generate code for RPC node " + this.getName());
         }
@@ -201,6 +230,17 @@
     }
 
     /**
+     * When there is no file generation for input output node we should delete the directory generated
+     * for RPC.
+     *
+     * @param emptyPkg empty package
+     * @throws IOException when fails to do IO operations
+     */
+    private void deleteDirectoryWhenNoFileIsGeneratedForInputOutput(String emptyPkg) throws IOException {
+        deleteDirectory(emptyPkg);
+    }
+
+    /**
      * Creates an attribute info object corresponding to a data model node and
      * return it.
      *
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/AugmentationHolder.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/AugmentationHolder.java
similarity index 95%
rename from utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/AugmentationHolder.java
rename to utils/yangutils/src/main/java/org/onosproject/yangutils/utils/AugmentationHolder.java
index 324a27f..b306fe2 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/AugmentationHolder.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/AugmentationHolder.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yangutils.translator.tojava;
+package org.onosproject.yangutils.utils;
 
 import java.util.List;
 
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/AugmentedInfo.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/AugmentedInfo.java
similarity index 92%
rename from utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/AugmentedInfo.java
rename to utils/yangutils/src/main/java/org/onosproject/yangutils/utils/AugmentedInfo.java
index 64053c9..566caf0 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/AugmentedInfo.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/AugmentedInfo.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yangutils.translator.tojava;
+package org.onosproject.yangutils.utils;
 
 /**
  * Abstraction of an entity which represents augmented info.
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
index 9ca906f..7e89998 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
@@ -930,7 +930,7 @@
      * Static attribute for AugmentationHolder class import package.
      */
     public static final String PROVIDED_AUGMENTATION_CLASS_IMPORT_PKG =
-            "org.onosproject.yangutils.translator.tojava";
+            "org.onosproject.yangutils.utils";
 
     /**
      * Static attribute for AugmentationHolder class import class.
@@ -940,7 +940,7 @@
     /**
      * Static attribute for AugmentedInfo class import package.
      */
-    public static final String AUGMENTED_INFO_CLASS_IMPORT_PKG = "org.onosproject.yangutils.translator.tojava";
+    public static final String AUGMENTED_INFO_CLASS_IMPORT_PKG = "org.onosproject.yangutils.utils";
 
     /**
      * Static attribute for AugmentedInfo class import class.
