diff --git a/src/main/java/org/onosproject/yangutils/parser/YangUtilsParser.java b/src/main/java/org/onosproject/yangutils/parser/YangUtilsParser.java
index 3385e2d..19d9f3b 100644
--- a/src/main/java/org/onosproject/yangutils/parser/YangUtilsParser.java
+++ b/src/main/java/org/onosproject/yangutils/parser/YangUtilsParser.java
@@ -17,6 +17,9 @@
 package org.onosproject.yangutils.parser;
 
 import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.parser.exceptions.ParserException;
+
+import java.io.IOException;
 
 /**
  * Abstraction of entity which provides parser service of YANG files for yangutils-maven-plugin.
@@ -28,6 +31,7 @@
      *
      * @param file input YANG file
      * @return YangNode root node of the data model tree
+     * @throws ParserException when fails to get the data model
      */
-    YangNode getDataModel(String file);
+    YangNode getDataModel(String file) throws IOException, ParserException;
 }
diff --git a/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java b/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
index cc0c225..b8c9f35 100644
--- a/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
+++ b/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
@@ -16,25 +16,94 @@
 
 package org.onosproject.yangutils.plugin.manager;
 
+import java.io.File;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.ResolutionScope;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.plugins.annotations.Component;
+import org.sonatype.plexus.build.incremental.BuildContext;
+
+import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.parser.YangUtilsParser;
+import org.onosproject.yangutils.parser.exceptions.ParserException;
+import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
 
 /**
-* ONOS YANG utility maven plugin.
-* Goal of plugin is yang2java
-* Execution phase in generate-sources
-* requiresDependencyResolution at compile time
-*/
+ * ONOS YANG utility maven plugin.
+ * Goal of plugin is yang2java
+ * Execution phase in generate-sources
+ * requiresDependencyResolution at compile time
+ */
 @Mojo(name = "yang2java", defaultPhase = LifecyclePhase.GENERATE_SOURCES,
-        requiresDependencyResolution = ResolutionScope.COMPILE, requiresProject = true)
+requiresDependencyResolution = ResolutionScope.COMPILE, requiresProject = true)
 public class YangUtilManager extends AbstractMojo {
 
+    /**
+     * Source directory for YANG files.
+     */
+    @Parameter(property = "yangFilesDir", defaultValue = "src/main/yang")
+    private String yangFilesDir;
+
+    /**
+     * Output directory.
+     */
+    @Parameter(property = "project.build.outputDirectory", required = true, defaultValue = "target/classes")
+    private File outputDirectory;
+
+    /**
+     * Current maven project.
+     */
+    @Parameter(property = "project", required = true, readonly = true, defaultValue = "${project}")
+    private MavenProject project;
+
+    /**
+     * Build context.
+     */
+    @Component
+    private BuildContext context;
+
+    private YangUtilsParser yangUtilsParser;
+    private String baseDir;
+    private String searchDir;
+
+    /**
+     * Set current project.
+     *
+     * @param project maven project.
+     */
+    public void setCurrentProject(final MavenProject project) {
+        this.project = project;
+    }
+
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
-        //TODO: implement the MOJO plugin
+
+        try {
+            baseDir = project.getBasedir().toString();
+            searchDir = baseDir + File.separator + yangFilesDir;
+
+            List<String> yangFiles = YangFileScanner.getYangFiles(searchDir);
+            Iterator<String> yangFileIterator = yangFiles.iterator();
+            while (yangFileIterator.hasNext()) {
+                String yangFile = yangFileIterator.next();
+                try {
+                    YangNode yangNode = yangUtilsParser.getDataModel(yangFile);
+                    //TODO: send this data model to translator and create the corresponding java files.
+                } catch (ParserException e) {
+                    getLog().info("Invalid yang file.");
+                }
+            }
+        } catch (final IOException e) {
+            getLog().info("Exception occured");
+        }
     }
-}
+}
\ No newline at end of file
