diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/DataModelUtils.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/DataModelUtils.java
index 0a12189..a916717 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/DataModelUtils.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/DataModelUtils.java
@@ -67,11 +67,15 @@
 import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
 import org.onosproject.yang.model.LeafObjectType;
 import org.onosproject.yang.model.SchemaId;
+import org.slf4j.Logger;
 
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -111,11 +115,14 @@
 import static org.onosproject.yang.model.LeafObjectType.LONG;
 import static org.onosproject.yang.model.LeafObjectType.SHORT;
 import static org.onosproject.yang.model.LeafObjectType.STRING;
+import static org.slf4j.LoggerFactory.getLogger;
 
 /**
  * Represents utilities for data model tree.
  */
 public final class DataModelUtils {
+    private static final Logger log = getLogger(DataModelUtils.class);
+
     public static final String TRUE = "true";
     public static final String FALSE = "false";
     public static final String FMT_NOT_EXIST =
@@ -865,49 +872,56 @@
     }
 
     /**
-     * Parses jar file and returns list of serialized file names.
+     * Extracts contents from jar file and returns path to YangMetaData.
      *
      * @param jarFile   jar file to be parsed
-     * @param directory directory where to search
-     * @return list of serialized files
+     * @param directory directory where to output
+     * @return path to serialized YangMetaData file copied in {@code directory}
      * @throws IOException when fails to do IO operations
      */
     public static File parseDepSchemaPath(String jarFile, String directory)
             throws IOException {
-        JarFile jar = new JarFile(jarFile);
-        Enumeration<?> enumEntries = jar.entries();
-        File serializedFile = null;
-        while (enumEntries.hasMoreElements()) {
-            JarEntry file = (JarEntry) enumEntries.nextElement();
-            if (file.getName().endsWith(".ser")) {
+        log.trace("From jarfile: {}", jarFile);
+        try (JarFile jar = new JarFile(jarFile)) {
+            Enumeration<?> enumEntries = jar.entries();
+            File serializedFile = null;
+            while (enumEntries.hasMoreElements()) {
+                JarEntry file = (JarEntry) enumEntries.nextElement();
+                if (file.getName().endsWith("YangMetaData.ser")) {
 
-                if (file.getName().contains(SLASH)) {
-                    String[] strArray = file.getName().split(SLASH);
-                    String tempPath = "";
-                    for (int i = 0; i < strArray.length - 1; i++) {
-                        tempPath = SLASH + tempPath + SLASH + strArray[i];
+                    Path jarRelPath = Paths.get(file.getName());
+                    Path outBase = Paths.get(directory);
+                    String inFilename = Paths.get(jarFile).getFileName().toString();
+                    String inBasename = inFilename.substring(0, inFilename.length() - ".jar".length());
+                    // inject input jar basename right before the filename.
+                    Path serializedPath = outBase
+                            .resolve(jarRelPath.getParent())
+                            .resolve(inBasename)
+                            .resolve(jarRelPath.getFileName());
+
+                    if (Files.isDirectory(serializedPath)) {
+                        Files.createDirectories(serializedPath.getParent());
+                        continue;
+                    } else {
+                        Files.createDirectories(serializedPath.getParent());
                     }
-                    File dir = new File(directory + tempPath);
-                    dir.mkdirs();
-                }
-                serializedFile = new File(directory + SLASH + file.getName());
-                if (file.isDirectory()) {
-                    serializedFile.mkdirs();
-                    continue;
-                }
-                InputStream inputStream = jar.getInputStream(file);
+                    serializedFile = serializedPath.toFile();
+                    log.trace(" writing {} to {}", file.getName(), serializedFile);
+                    InputStream inputStream = jar.getInputStream(file);
 
-                FileOutputStream fileOutputStream = new FileOutputStream(serializedFile);
-                IOUtils.copy(inputStream, fileOutputStream);
-                fileOutputStream.close();
-                inputStream.close();
-                //As of now only one metadata files will be there so if we
-                // found one then we should break the loop.
-                break;
+                    FileOutputStream fileOutputStream = new FileOutputStream(serializedFile);
+                    IOUtils.copy(inputStream, fileOutputStream);
+                    fileOutputStream.close();
+                    inputStream.close();
+
+                    //As of now only one metadata files will be there so if we
+                    // found one then we should break the loop.
+                    return serializedFile;
+                }
             }
         }
-        jar.close();
-        return serializedFile;
+        // Not found
+        return null;
     }
 
     /**
diff --git a/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/YangCompilerManager.java b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/YangCompilerManager.java
index 8790df0..f2ae7e7 100644
--- a/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/YangCompilerManager.java
+++ b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/YangCompilerManager.java
@@ -607,16 +607,18 @@
     }
 
     /**
-     * Parses jar file and returns YANG model.
+     * Extracts .yang files and YangMetaData from jar file to
+     * target directory and returns YangModel found.
      *
      * @param jarFile   jar file to be parsed
-     * @param directory directory where to search
-     * @return YANG model
+     * @param directory directory where to extract files to
+     * @return YangModel found
      * @throws IOException when fails to do IO operations
      */
     public static YangModel parseJarFile(String jarFile, String directory)
             throws IOException {
 
+        log.trace("Searching YangModel in {}", jarFile);
         YangModel model = null;
         try (JarFile jar = new JarFile(jarFile)) {
             Enumeration<?> enumEntries = jar.entries();
@@ -643,8 +645,13 @@
 
                         IOUtils.copy(inputStream, fileOutputStream);
                         fileOutputStream.close();
-                        if (serializedFile.getName().endsWith(YANG_META_DATA)) {
+                        // FIXME hack to return first model found
+                        if (model == null &&
+                            serializedFile.getName().endsWith(YANG_META_DATA)) {
                             model = deSerializeDataModel(serializedFile.toString());
+                            log.trace(" found {} at {}",
+                                      model.getYangModelId(),
+                                      serializedFile.getName());
                         }
                     }
                 }
diff --git a/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangGenerator.java b/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangGenerator.java
index 31f0347..9c25249 100644
--- a/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangGenerator.java
+++ b/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangGenerator.java
@@ -77,6 +77,8 @@
             //Need to get dependent schema paths to give inter jar dependencies.
             for (String jar : depJar) {
                 try {
+                    // Note: when there's multiple deps, it all gets copied to
+                    // same directory.
                     File path = parseDepSchemaPath(jar, outputDirectory);
                     if (path != null) {
                         bldr.addDependentSchema(Paths.get(path.getAbsolutePath()));
diff --git a/compiler/plugin/maven/src/main/java/org/onosproject/yang/compiler/plugin/maven/YangPluginUtils.java b/compiler/plugin/maven/src/main/java/org/onosproject/yang/compiler/plugin/maven/YangPluginUtils.java
index b791099..a0ec965 100644
--- a/compiler/plugin/maven/src/main/java/org/onosproject/yang/compiler/plugin/maven/YangPluginUtils.java
+++ b/compiler/plugin/maven/src/main/java/org/onosproject/yang/compiler/plugin/maven/YangPluginUtils.java
@@ -120,6 +120,8 @@
                 project, localRepository, remoteRepos);
         List<Path> serFilePaths = new ArrayList<>();
         for (String dependency : depJars) {
+            // Note: when there's multiple deps, it all gets copied to
+            // same directory.
             File path = parseDepSchemaPath(dependency, directory);
             if (path != null) {
                 serFilePaths.add(Paths.get(path.getAbsolutePath()));
