diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumeration.java b/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumeration.java
index ccb82c6..a11fb2c 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumeration.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumeration.java
@@ -17,11 +17,11 @@
 package org.onosproject.yangutils.translator.tojava.javamodel;
 
 import java.io.IOException;
+
 import org.onosproject.yangutils.datamodel.YangEnumeration;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
 import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
 import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
-import org.onosproject.yangutils.translator.tojava.JavaImportData;
 import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
 import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
 
@@ -31,7 +31,9 @@
 /**
  * Represents YANG java enumeration information extended to support java code generation.
  */
-public class YangJavaEnumeration extends YangEnumeration implements JavaCodeGenerator, JavaCodeGeneratorInfo {
+public class YangJavaEnumeration
+        extends YangEnumeration
+        implements JavaCodeGenerator, JavaCodeGeneratorInfo {
 
     /**
      * Contains the information of the java file being generated.
@@ -39,12 +41,6 @@
     private JavaFileInfo javaFileInfo;
 
     /**
-     * Contains information of the imports to be inserted in the java file
-     * generated.
-     */
-    private JavaImportData javaImportData;
-
-    /**
      * File handle to maintain temporary java code fragments as per the code
      * snippet types.
      */
@@ -56,7 +52,6 @@
     public YangJavaEnumeration() {
         super();
         setJavaFileInfo(new JavaFileInfo());
-        setJavaImportData(new JavaImportData());
         getJavaFileInfo().setGeneratedFileTypes(GENERATE_ENUM_CLASS);
     }
 
@@ -86,29 +81,6 @@
     }
 
     /**
-     * Returns the data of java imports to be included in generated file.
-     *
-     * @return data of java imports to be included in generated file
-     */
-    @Override
-    public JavaImportData getJavaImportData() {
-
-        return javaImportData;
-    }
-
-    /**
-     * Sets the data of java imports to be included in generated file.
-     *
-     * @param javaImportData data of java imports to be included in generated
-     *                       file
-     */
-    @Override
-    public void setJavaImportData(JavaImportData javaImportData) {
-
-        this.javaImportData = javaImportData;
-    }
-
-    /**
      * Returns the temporary file handle.
      *
      * @return temporary file handle
@@ -138,7 +110,8 @@
      * @throws IOException IO operations fails
      */
     @Override
-    public void generateCodeEntry(YangPluginConfig yangPlugin) throws IOException {
+    public void generateCodeEntry(YangPluginConfig yangPlugin)
+            throws IOException {
         generateCodeOfNode(this, yangPlugin);
     }
 
@@ -148,7 +121,8 @@
      * @throws IOException IO operation fail
      */
     @Override
-    public void generateCodeExit() throws IOException {
+    public void generateCodeExit()
+            throws IOException {
         getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_ENUM_CLASS, this);
     }
 
