diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java b/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java
index 78c4f64..c3bd23a 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java
+++ b/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/src/main/java/org/onosproject/yangutils/translator/tojava/AugmentationHolder.java b/src/main/java/org/onosproject/yangutils/utils/AugmentationHolder.java
similarity index 95%
rename from src/main/java/org/onosproject/yangutils/translator/tojava/AugmentationHolder.java
rename to src/main/java/org/onosproject/yangutils/utils/AugmentationHolder.java
index 324a27f..b306fe2 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/AugmentationHolder.java
+++ b/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/src/main/java/org/onosproject/yangutils/translator/tojava/AugmentedInfo.java b/src/main/java/org/onosproject/yangutils/utils/AugmentedInfo.java
similarity index 92%
rename from src/main/java/org/onosproject/yangutils/translator/tojava/AugmentedInfo.java
rename to src/main/java/org/onosproject/yangutils/utils/AugmentedInfo.java
index 64053c9..566caf0 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/AugmentedInfo.java
+++ b/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/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java b/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
index 9ca906f..7e89998 100644
--- a/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
+++ b/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.
