diff --git a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OSGiWrapper.java b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OSGiWrapper.java
index 5a7de19..86c6938 100644
--- a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OSGiWrapper.java
+++ b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OSGiWrapper.java
@@ -63,6 +63,9 @@
  */
 public class OSGiWrapper implements Step {
 
+    private static final String EMBED_DEPENDENCY = "Embed-Dependency";
+    private static final String EMBEDDED_ARTIFACTS = "Embedded-Artifacts";
+
     private Path inputJar;
     private Path outputJar;
     private Path sourcesDir;
@@ -86,6 +89,8 @@
     private String bundleDescription;
     private String bundleLicense;
 
+    private String bundleClasspath;
+
     private String webContext;
 
     private PrintStream stderr = System.err;
@@ -106,7 +111,8 @@
                        String dynamicimportPackages,
                        String embeddedDependencies,
                        String bundleDescription,
-                       String privatePackages) {
+                       String privatePackages,
+                       String bundleClasspath) {
         this.inputJar = inputJar;
         this.sourcesDir = sourcesDir;
         this.classesDir = classesDir;
@@ -133,9 +139,12 @@
         this.includeResources = includeResources;
 
         this.webContext = webContext;
+
+        this.bundleClasspath = bundleClasspath;
     }
 
     private void setProperties(Analyzer analyzer) {
+
         analyzer.setProperty(Analyzer.BUNDLE_NAME, bundleName);
         analyzer.setProperty(Analyzer.BUNDLE_SYMBOLICNAME, bundleSymbolicName);
         analyzer.setProperty(Analyzer.BUNDLE_VERSION, bundleVersion.replace('-', '.'));
@@ -151,8 +160,6 @@
         //analyzer.setProperty("-provider-policy", "${range;[===,==+)}");
         //analyzer.setProperty("-consumer-policy", "${range;[===,==+)}");
 
-        // There are no good defaults so make sure you set the Import-Package
-        analyzer.setProperty(Analyzer.IMPORT_PACKAGE, importPackages);
         if (privatePackages != null) {
             analyzer.setProperty(Analyzer.PRIVATE_PACKAGE, privatePackages);
         }
@@ -170,19 +177,18 @@
             analyzer.setProperty(Analyzer.INCLUDE_RESOURCE, includeResources);
         }
 
-        if(embeddedDependencies != null) {
-            analyzer.setProperty(Analyzer.BUNDLE_CLASSPATH,
-                                 embeddedDependencies);
-            String finalIncludes = Strings.isNullOrEmpty(includeResources) ?
-                    embeddedDependencies : (includeResources+","+embeddedDependencies);
-            analyzer.setProperty(Analyzer.INCLUDE_RESOURCE,
-                                 finalIncludes);
+        if (embeddedDependencies != null) {
+            analyzer.setProperty(EMBED_DEPENDENCY, embeddedDependencies);
         }
 
+        // There are no good defaults so make sure you set the Import-Package
+        analyzer.setProperty(Analyzer.IMPORT_PACKAGE, importPackages);
+
         if (isWab()) {
             analyzer.setProperty(Analyzer.WAB, "src/main/webapp/");
             analyzer.setProperty("Web-ContextPath", webContext);
-            analyzer.setProperty(Analyzer.IMPORT_PACKAGE, "*,org.glassfish.jersey.servlet,org.jvnet.mimepull\n");
+            analyzer.setProperty(Analyzer.IMPORT_PACKAGE, importPackages +
+                    ",org.glassfish.jersey.servlet,org.jvnet.mimepull\n");
         }
     }
 
@@ -334,8 +340,10 @@
         Jar dot = analyzer.getJar();
 
         log("wab %s", wab);
-        analyzer.setBundleClasspath("WEB-INF/classes," +
-                                            analyzer.getProperty(analyzer.BUNDLE_CLASSPATH));
+
+        if (bundleClasspath != null) {
+            analyzer.setBundleClasspath("WEB-INF/classes," + bundleClasspath);
+        }
 
         Set<String> paths = new HashSet<>(dot.getResources().keySet());
 
diff --git a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java
index 76f5b40..3f27760 100644
--- a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java
+++ b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java
@@ -248,7 +248,7 @@
                                                            args.groupId, args.bundleName, args.bundleVersion,
                                                            args.bundleLicense, args.bundleDescription, args.importPackages,
                                                            args.exportPackages, includedResourcesString,
-                                                           args.dynamicimportPackages, args.privatePackages, args.embeddedDependencies),
+                                                           args.dynamicimportPackages, args.privatePackages, args.embeddedDependencies, args.bundleClasspath),
                                     args.resourcesRoot,
                                     args.manifestFile,
                                     args.mavenCoords,
@@ -330,5 +330,6 @@
         public Optional<ImmutableSortedMap<String, SourcePath>> includeResources;
         public Optional<String> dynamicimportPackages;
         public Optional<String> embeddedDependencies;
+        public Optional<String> bundleClasspath;
     }
 }
\ No newline at end of file
diff --git a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarStepFactory.java b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarStepFactory.java
index ad1c902..6550d89 100644
--- a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarStepFactory.java
+++ b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarStepFactory.java
@@ -62,6 +62,7 @@
     private final String includeResources;
     private final String dynamicimportPackages;
     private final String embeddedDependencies;
+    private final String bundleClasspath;
 
     public OnosJarStepFactory(JavacOptions javacOptions,
                               JavacOptionsAmender amender,
@@ -81,7 +82,8 @@
                               Optional<String> includeResources,
                               Optional<String> dynamicimportPackages,
                               Optional<String> privatePackages,
-                              Optional<String> embeddedDependencies) {
+                              Optional<String> embeddedDependencies,
+                              Optional<String> bundleClasspath) {
         super(javacOptions, amender);
         this.bundleDescription = processParameter(bundleDescription);
         this.importPackages = processParameter(importPackages);
@@ -100,6 +102,7 @@
         this.apiDescription = processParameter(apiDescription);
         this.resources = resources;
         this.embeddedDependencies = processParameter(embeddedDependencies);
+        this.bundleClasspath = processParameter(bundleClasspath);
     }
 
     private String processParameter(Optional<String> p) {
@@ -202,7 +205,8 @@
                 dynamicimportPackages, // dynamic import packages
                 embeddedDependencies, // embedded dependencies
                 bundleDescription,  // bundle description
-                privatePackages // private packages
+                privatePackages, // private packages
+                bundleClasspath // bundle classpath
         );
         steps.add(osgiStep);
 
