diff --git a/bundleplugin/pom.xml b/bundleplugin/pom.xml
index 5bc178e..a50f391 100644
--- a/bundleplugin/pom.xml
+++ b/bundleplugin/pom.xml
@@ -51,7 +51,7 @@
   <dependency>
    <groupId>biz.aQute</groupId>
    <artifactId>bndlib</artifactId>
-   <version>0.0.198</version>
+   <version>0.0.203</version>
   </dependency>
   <dependency>
    <groupId>junit</groupId>
diff --git a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java
index 4e2ff06..56f4a29 100644
--- a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java
+++ b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java
@@ -500,7 +500,7 @@
         return project.getBuild().getFinalName() + ".jar";
     }
 
-    public String getBuildDirectory()
+    protected String getBuildDirectory()
     {
         return this.buildDirectory;
     }
@@ -510,26 +510,6 @@
         this.buildDirectory = buildirectory;
     }
 
-    /**
-     * Get a list of packages inside a Jar
-     *
-     * @param jar
-     * @return list of package names
-     */
-    public List getPackages(Jar jar)
-    {
-        List packages = new ArrayList();
-        for (Iterator p = jar.getDirectories().entrySet().iterator(); p.hasNext();)
-        {
-            Map.Entry directory = (Map.Entry) p.next();
-            String path = (String) directory.getKey();
-
-            String pack = path.replace('/', '.');
-            packages.add(pack);
-        }
-        return packages;
-    }
-
     protected Properties getDefaultProperties(MavenProject project)
     {
         Properties properties = new Properties();
diff --git a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/DependencyEmbedder.java b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/DependencyEmbedder.java
index e3e6297..99158dc 100644
--- a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/DependencyEmbedder.java
+++ b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/DependencyEmbedder.java
@@ -30,7 +30,7 @@
 
 import aQute.lib.osgi.Analyzer;
 import aQute.lib.osgi.Instruction;
-import aQute.lib.osgi.header.OSGiHeader;
+import aQute.lib.header.OSGiHeader;
 
 /**
  * Add BND directives to embed selected dependencies inside a bundle
diff --git a/bundleplugin/src/test/java/org/apache/felix/bundleplugin/BundlePluginTest.java b/bundleplugin/src/test/java/org/apache/felix/bundleplugin/BundlePluginTest.java
index 1a92d5c..edb66a2 100644
--- a/bundleplugin/src/test/java/org/apache/felix/bundleplugin/BundlePluginTest.java
+++ b/bundleplugin/src/test/java/org/apache/felix/bundleplugin/BundlePluginTest.java
@@ -19,18 +19,13 @@
  * under the License.
  */
 
-import org.apache.felix.bundleplugin.PackageVersionAnalyzer;
 import java.io.File;
-import java.io.IOException;
-import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
 
 import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.osgi.DefaultMaven2OsgiConverter;
-import org.codehaus.plexus.archiver.ArchiverException;
-import org.codehaus.plexus.archiver.jar.JarArchiver;
 
 import aQute.lib.osgi.Analyzer;
 import aQute.lib.osgi.Jar;
@@ -122,38 +117,6 @@
         assertEquals( 3, analyzer.getExports().size() );
     }
 
-    public void testGetPackages()
-        throws Exception
-    {
-        File jarFile = getTestFile( "target/test-jar.jar" );
-
-        createTestJar( jarFile );
-
-        Jar jar = new Jar( "testJar", jarFile );
-        List packages = plugin.getPackages( jar );
-
-        assertEquals( 4, packages.size() );
-        int i = 0;
-        assertEquals( "META-INF", packages.get( i++ ) );
-        assertEquals( "META-INF.maven.org.apache.maven.plugins.maven-bundle-plugin", packages.get( i++ ) );
-        assertEquals( "org.apache.maven.test", packages.get( i++ ) );
-        assertEquals( "org.apache.maven.test.resources", packages.get( i++ ) );
-    }
-
-    private void createTestJar( File jarFile )
-        throws ArchiverException, IOException
-    {
-        JarArchiver archiver = new JarArchiver();
-        archiver
-            .addFile( getTestFile( "target/classes/" + BundlePlugin.class.getName().replace( '.', '/' ) + ".class" ),
-                      "org/apache/maven/test/BundlePlugin.class" );
-        archiver.addFile( getTestFile( "pom.xml" ),
-                          "META-INF/maven/org.apache.maven.plugins/maven-bundle-plugin/pom.xml" );
-        archiver.addFile( getTestFile( "pom.xml" ), "org/apache/maven/test/resources/someresource" );
-        archiver.setDestFile( jarFile );
-        archiver.createArchive();
-    }
-
     public void testTransformDirectives()
         throws Exception
     {
