diff --git a/bundleplugin/src/main/java/aQute/bnd/build/Container.java b/bundleplugin/src/main/java/aQute/bnd/build/Container.java
index 394a14a..8a721c9 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/Container.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/Container.java
@@ -4,8 +4,8 @@
 import java.util.*;
 import java.util.jar.*;
 
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.RepositoryPlugin.Strategy;
-import aQute.lib.osgi.*;
 
 public class Container {
 	public enum TYPE {
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/Project.java b/bundleplugin/src/main/java/aQute/bnd/build/Project.java
index 54c2436..a106aae 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/Project.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/Project.java
@@ -8,19 +8,18 @@
 import java.util.concurrent.locks.*;
 import java.util.jar.*;
 
+import aQute.bnd.header.*;
 import aQute.bnd.help.*;
 import aQute.bnd.maven.support.*;
+import aQute.bnd.osgi.*;
+import aQute.bnd.osgi.eclipse.*;
 import aQute.bnd.service.*;
 import aQute.bnd.service.RepositoryPlugin.Strategy;
 import aQute.bnd.service.action.*;
 import aQute.lib.io.*;
-import aQute.lib.osgi.*;
-import aQute.lib.osgi.eclipse.*;
 import aQute.libg.generics.*;
-import aQute.libg.header.*;
 import aQute.libg.reporter.*;
 import aQute.libg.sed.*;
-import aQute.libg.version.*;
 
 /**
  * This class is NOT threadsafe
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/ProjectBuilder.java b/bundleplugin/src/main/java/aQute/bnd/build/ProjectBuilder.java
index 4abb350..5cf4f0e 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/ProjectBuilder.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/ProjectBuilder.java
@@ -3,7 +3,7 @@
 import java.io.*;
 import java.util.*;
 
-import aQute.lib.osgi.*;
+import aQute.bnd.osgi.*;
 
 public class ProjectBuilder extends Builder {
 	Project	project;
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/ProjectLauncher.java b/bundleplugin/src/main/java/aQute/bnd/build/ProjectLauncher.java
index 78d12e3..7c85fb3 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/ProjectLauncher.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/ProjectLauncher.java
@@ -6,11 +6,11 @@
 import java.util.concurrent.*;
 import java.util.jar.*;
 
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.RepositoryPlugin.Strategy;
-import aQute.lib.osgi.*;
 import aQute.libg.command.*;
 import aQute.libg.generics.*;
-import aQute.libg.header.*;
 
 /**
  * A Project Launcher is a base class to be extended by launchers. Launchers are
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/ProjectMessages.java b/bundleplugin/src/main/java/aQute/bnd/build/ProjectMessages.java
index ac8d7fb..e5f0444 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/ProjectMessages.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/ProjectMessages.java
@@ -3,11 +3,10 @@
 import java.io.*;
 import java.util.*;
 
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.*;
 import aQute.bnd.service.RepositoryPlugin.Strategy;
-import aQute.lib.osgi.*;
 import aQute.libg.reporter.*;
-import aQute.libg.version.*;
 
 public interface ProjectMessages extends Messages {
 
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/Workspace.java b/bundleplugin/src/main/java/aQute/bnd/build/Workspace.java
index 04d14fc..9111773 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/Workspace.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/Workspace.java
@@ -10,11 +10,11 @@
 import javax.naming.*;
 
 import aQute.bnd.maven.support.*;
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.*;
 import aQute.bnd.service.action.*;
 import aQute.lib.deployer.*;
 import aQute.lib.io.*;
-import aQute.lib.osgi.*;
 import aQute.service.reporter.*;
 
 public class Workspace extends Processor {
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/WorkspaceRepository.java b/bundleplugin/src/main/java/aQute/bnd/build/WorkspaceRepository.java
index 64c0078..99a6325 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/WorkspaceRepository.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/WorkspaceRepository.java
@@ -4,9 +4,8 @@
 import java.util.*;
 import java.util.regex.*;
 
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.*;
-import aQute.lib.osgi.*;
-import aQute.libg.version.*;
 
 public class WorkspaceRepository implements RepositoryPlugin {
 	private final Workspace	workspace;
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/model/BndEditModel.java b/bundleplugin/src/main/java/aQute/bnd/build/model/BndEditModel.java
index d11fbc6..c3b550d 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/model/BndEditModel.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/model/BndEditModel.java
@@ -5,15 +5,14 @@
 import java.util.*;
 import java.util.Map.Entry;
 
-import org.osgi.resource.Requirement;
+import org.osgi.resource.*;
 
 import aQute.bnd.build.model.clauses.*;
 import aQute.bnd.build.model.conversions.*;
-import aQute.lib.osgi.Constants;
-import aQute.lib.properties.*;
-import aQute.libg.header.*;
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
+import aQute.bnd.properties.*;
 import aQute.libg.tuple.*;
-import aQute.libg.version.Version;
 
 /**
  * A model for a Bnd file. In the first iteration, use a simple Properties
@@ -31,17 +30,17 @@
 
 	protected static String[]										KNOWN_PROPERTIES			= new String[] {
 			Constants.BUNDLE_SYMBOLICNAME, Constants.BUNDLE_VERSION, Constants.BUNDLE_ACTIVATOR,
-			Constants.EXPORT_PACKAGE, Constants.IMPORT_PACKAGE, aQute.lib.osgi.Constants.PRIVATE_PACKAGE,
-			aQute.lib.osgi.Constants.SOURCES,
-			aQute.lib.osgi.Constants.SERVICE_COMPONENT, aQute.lib.osgi.Constants.CLASSPATH,
-			aQute.lib.osgi.Constants.BUILDPATH, aQute.lib.osgi.Constants.BUILDPACKAGES,
-			aQute.lib.osgi.Constants.RUNBUNDLES, aQute.lib.osgi.Constants.RUNPROPERTIES, aQute.lib.osgi.Constants.SUB,
-			aQute.lib.osgi.Constants.RUNFRAMEWORK,
-			aQute.lib.osgi.Constants.RUNVM,
+			Constants.EXPORT_PACKAGE, Constants.IMPORT_PACKAGE, aQute.bnd.osgi.Constants.PRIVATE_PACKAGE,
+			aQute.bnd.osgi.Constants.SOURCES,
+			aQute.bnd.osgi.Constants.SERVICE_COMPONENT, aQute.bnd.osgi.Constants.CLASSPATH,
+			aQute.bnd.osgi.Constants.BUILDPATH, aQute.bnd.osgi.Constants.BUILDPACKAGES,
+			aQute.bnd.osgi.Constants.RUNBUNDLES, aQute.bnd.osgi.Constants.RUNPROPERTIES, aQute.bnd.osgi.Constants.SUB,
+			aQute.bnd.osgi.Constants.RUNFRAMEWORK,
+			aQute.bnd.osgi.Constants.RUNVM,
 			// BndConstants.RUNVMARGS,
 			// BndConstants.TESTSUITES,
-			aQute.lib.osgi.Constants.TESTCASES, aQute.lib.osgi.Constants.PLUGIN, aQute.lib.osgi.Constants.PLUGINPATH,
-			aQute.lib.osgi.Constants.RUNREPOS, aQute.lib.osgi.Constants.RUNREQUIRES, aQute.lib.osgi.Constants.RUNEE};
+			aQute.bnd.osgi.Constants.TESTCASES, aQute.bnd.osgi.Constants.PLUGIN, aQute.bnd.osgi.Constants.PLUGINPATH,
+			aQute.bnd.osgi.Constants.RUNREPOS, aQute.bnd.osgi.Constants.RUNREQUIRES, aQute.bnd.osgi.Constants.RUNEE};
 
 	public static final String										BUNDLE_VERSION_MACRO		= "${"
 																										+ Constants.BUNDLE_VERSION
@@ -166,7 +165,7 @@
 	protected Converter<String,EE>									eeFormatter					= new EEFormatter();
 	Converter<String,Collection< ? extends String>>					runReposFormatter			= new CollectionFormatter<String>(
 																										LIST_SEPARATOR,
-																										aQute.lib.osgi.Constants.EMPTY_HEADER);
+																										aQute.bnd.osgi.Constants.EMPTY_HEADER);
 
 	// Converter<String, ResolveMode> resolveModeFormatter =
 	// EnumFormatter.create(ResolveMode.class, ResolveMode.manual);
@@ -174,56 +173,56 @@
 	@SuppressWarnings("deprecation")
 	public BndEditModel() {
 		// register converters
-		converters.put(aQute.lib.osgi.Constants.BUILDPATH, buildPathConverter);
-		converters.put(aQute.lib.osgi.Constants.BUILDPACKAGES, buildPackagesConverter);
-		converters.put(aQute.lib.osgi.Constants.RUNBUNDLES, clauseListConverter);
+		converters.put(aQute.bnd.osgi.Constants.BUILDPATH, buildPathConverter);
+		converters.put(aQute.bnd.osgi.Constants.BUILDPACKAGES, buildPackagesConverter);
+		converters.put(aQute.bnd.osgi.Constants.RUNBUNDLES, clauseListConverter);
 		converters.put(Constants.BUNDLE_SYMBOLICNAME, stringConverter);
 		converters.put(Constants.BUNDLE_VERSION, stringConverter);
 		converters.put(Constants.BUNDLE_ACTIVATOR, stringConverter);
-		converters.put(aQute.lib.osgi.Constants.OUTPUT, stringConverter);
-		converters.put(aQute.lib.osgi.Constants.SOURCES, includedSourcesConverter);
-		converters.put(aQute.lib.osgi.Constants.PRIVATE_PACKAGE, listConverter);
-		converters.put(aQute.lib.osgi.Constants.CLASSPATH, listConverter);
+		converters.put(aQute.bnd.osgi.Constants.OUTPUT, stringConverter);
+		converters.put(aQute.bnd.osgi.Constants.SOURCES, includedSourcesConverter);
+		converters.put(aQute.bnd.osgi.Constants.PRIVATE_PACKAGE, listConverter);
+		converters.put(aQute.bnd.osgi.Constants.CLASSPATH, listConverter);
 		converters.put(Constants.EXPORT_PACKAGE, exportPackageConverter);
-		converters.put(aQute.lib.osgi.Constants.SERVICE_COMPONENT, serviceComponentConverter);
+		converters.put(aQute.bnd.osgi.Constants.SERVICE_COMPONENT, serviceComponentConverter);
 		converters.put(Constants.IMPORT_PACKAGE, importPatternConverter);
-		converters.put(aQute.lib.osgi.Constants.RUNFRAMEWORK, stringConverter);
-		converters.put(aQute.lib.osgi.Constants.SUB, listConverter);
-		converters.put(aQute.lib.osgi.Constants.RUNPROPERTIES, propertiesConverter);
-		converters.put(aQute.lib.osgi.Constants.RUNVM, stringConverter);
+		converters.put(aQute.bnd.osgi.Constants.RUNFRAMEWORK, stringConverter);
+		converters.put(aQute.bnd.osgi.Constants.SUB, listConverter);
+		converters.put(aQute.bnd.osgi.Constants.RUNPROPERTIES, propertiesConverter);
+		converters.put(aQute.bnd.osgi.Constants.RUNVM, stringConverter);
 		// converters.put(BndConstants.RUNVMARGS, stringConverter);
-		converters.put(aQute.lib.osgi.Constants.TESTSUITES, listConverter);
-		converters.put(aQute.lib.osgi.Constants.TESTCASES, listConverter);
-		converters.put(aQute.lib.osgi.Constants.PLUGIN, headerClauseListConverter);
-		converters.put(aQute.lib.osgi.Constants.RUNREQUIRES, requirementListConverter);
-		converters.put(aQute.lib.osgi.Constants.RUNEE, eeConverter);
-		converters.put(aQute.lib.osgi.Constants.RUNREPOS, listConverter);
+		converters.put(aQute.bnd.osgi.Constants.TESTSUITES, listConverter);
+		converters.put(aQute.bnd.osgi.Constants.TESTCASES, listConverter);
+		converters.put(aQute.bnd.osgi.Constants.PLUGIN, headerClauseListConverter);
+		converters.put(aQute.bnd.osgi.Constants.RUNREQUIRES, requirementListConverter);
+		converters.put(aQute.bnd.osgi.Constants.RUNEE, eeConverter);
+		converters.put(aQute.bnd.osgi.Constants.RUNREPOS, listConverter);
 		// converters.put(BndConstants.RESOLVE_MODE, resolveModeConverter);
 
-		formatters.put(aQute.lib.osgi.Constants.BUILDPATH, headerClauseListFormatter);
-		formatters.put(aQute.lib.osgi.Constants.BUILDPACKAGES, headerClauseListFormatter);
-		formatters.put(aQute.lib.osgi.Constants.RUNBUNDLES, headerClauseListFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.BUILDPATH, headerClauseListFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.BUILDPACKAGES, headerClauseListFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.RUNBUNDLES, headerClauseListFormatter);
 		formatters.put(Constants.BUNDLE_SYMBOLICNAME, newlineEscapeFormatter);
 		formatters.put(Constants.BUNDLE_VERSION, newlineEscapeFormatter);
 		formatters.put(Constants.BUNDLE_ACTIVATOR, newlineEscapeFormatter);
-		formatters.put(aQute.lib.osgi.Constants.OUTPUT, newlineEscapeFormatter);
-		formatters.put(aQute.lib.osgi.Constants.SOURCES, defaultFalseBoolFormatter);
-		formatters.put(aQute.lib.osgi.Constants.PRIVATE_PACKAGE, stringListFormatter);
-		formatters.put(aQute.lib.osgi.Constants.CLASSPATH, stringListFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.OUTPUT, newlineEscapeFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.SOURCES, defaultFalseBoolFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.PRIVATE_PACKAGE, stringListFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.CLASSPATH, stringListFormatter);
 		formatters.put(Constants.EXPORT_PACKAGE, headerClauseListFormatter);
-		formatters.put(aQute.lib.osgi.Constants.SERVICE_COMPONENT, headerClauseListFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.SERVICE_COMPONENT, headerClauseListFormatter);
 		formatters.put(Constants.IMPORT_PACKAGE, headerClauseListFormatter);
-		formatters.put(aQute.lib.osgi.Constants.RUNFRAMEWORK, newlineEscapeFormatter);
-		formatters.put(aQute.lib.osgi.Constants.SUB, stringListFormatter);
-		formatters.put(aQute.lib.osgi.Constants.RUNPROPERTIES, propertiesFormatter);
-		formatters.put(aQute.lib.osgi.Constants.RUNVM, newlineEscapeFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.RUNFRAMEWORK, newlineEscapeFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.SUB, stringListFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.RUNPROPERTIES, propertiesFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.RUNVM, newlineEscapeFormatter);
 		// formatters.put(BndConstants.RUNVMARGS, newlineEscapeFormatter);
 		// formatters.put(BndConstants.TESTSUITES, stringListFormatter);
-		formatters.put(aQute.lib.osgi.Constants.TESTCASES, stringListFormatter);
-		formatters.put(aQute.lib.osgi.Constants.PLUGIN, headerClauseListFormatter);
-		formatters.put(aQute.lib.osgi.Constants.RUNREQUIRES, requirementListFormatter);
-		formatters.put(aQute.lib.osgi.Constants.RUNEE, eeFormatter);
-		formatters.put(aQute.lib.osgi.Constants.RUNREPOS, runReposFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.TESTCASES, stringListFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.PLUGIN, headerClauseListFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.RUNREQUIRES, requirementListFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.RUNEE, eeFormatter);
+		formatters.put(aQute.bnd.osgi.Constants.RUNREPOS, runReposFormatter);
 		// formatters.put(BndConstants.RESOLVE_MODE, resolveModeFormatter);
 	}
 
@@ -373,42 +372,42 @@
 	}
 
 	public String getOutputFile() {
-		return doGetObject(aQute.lib.osgi.Constants.OUTPUT, stringConverter);
+		return doGetObject(aQute.bnd.osgi.Constants.OUTPUT, stringConverter);
 	}
 
 	public void setOutputFile(String name) {
-		doSetObject(aQute.lib.osgi.Constants.OUTPUT, getOutputFile(), name, newlineEscapeFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.OUTPUT, getOutputFile(), name, newlineEscapeFormatter);
 	}
 
 	public boolean isIncludeSources() {
-		return doGetObject(aQute.lib.osgi.Constants.SOURCES, includedSourcesConverter);
+		return doGetObject(aQute.bnd.osgi.Constants.SOURCES, includedSourcesConverter);
 	}
 
 	public void setIncludeSources(boolean includeSources) {
 		boolean oldValue = isIncludeSources();
-		doSetObject(aQute.lib.osgi.Constants.SOURCES, oldValue, includeSources, defaultFalseBoolFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.SOURCES, oldValue, includeSources, defaultFalseBoolFormatter);
 	}
 
 	public List<String> getPrivatePackages() {
-		return doGetObject(aQute.lib.osgi.Constants.PRIVATE_PACKAGE, listConverter);
+		return doGetObject(aQute.bnd.osgi.Constants.PRIVATE_PACKAGE, listConverter);
 	}
 
 	public void setPrivatePackages(List< ? extends String> packages) {
 		List<String> oldPackages = getPrivatePackages();
-		doSetObject(aQute.lib.osgi.Constants.PRIVATE_PACKAGE, oldPackages, packages, stringListFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.PRIVATE_PACKAGE, oldPackages, packages, stringListFormatter);
 	}
 
 	public List<ExportedPackage> getSystemPackages() {
-		return doGetObject(aQute.lib.osgi.Constants.RUNSYSTEMPACKAGES, exportPackageConverter);
+		return doGetObject(aQute.bnd.osgi.Constants.RUNSYSTEMPACKAGES, exportPackageConverter);
 	}
 
 	public void setSystemPackages(List< ? extends ExportedPackage> packages) {
 		List<ExportedPackage> oldPackages = getSystemPackages();
-		doSetObject(aQute.lib.osgi.Constants.RUNSYSTEMPACKAGES, oldPackages, packages, headerClauseListFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.RUNSYSTEMPACKAGES, oldPackages, packages, headerClauseListFormatter);
 	}
 
 	public List<String> getClassPath() {
-		return doGetObject(aQute.lib.osgi.Constants.CLASSPATH, listConverter);
+		return doGetObject(aQute.bnd.osgi.Constants.CLASSPATH, listConverter);
 	}
 
 	public void addPrivatePackage(String packageName) {
@@ -423,7 +422,7 @@
 
 	public void setClassPath(List< ? extends String> classPath) {
 		List<String> oldClassPath = getClassPath();
-		doSetObject(aQute.lib.osgi.Constants.CLASSPATH, oldClassPath, classPath, stringListFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.CLASSPATH, oldClassPath, classPath, stringListFormatter);
 	}
 
 	public List<ExportedPackage> getExportedPackages() {
@@ -457,21 +456,21 @@
 	}
 
 	public List<String> getDSAnnotationPatterns() {
-		return doGetObject(aQute.lib.osgi.Constants.DSANNOTATIONS, listConverter);
+		return doGetObject(aQute.bnd.osgi.Constants.DSANNOTATIONS, listConverter);
 	}
 
 	public void setDSAnnotationPatterns(List< ? extends String> patterns) {
 		List<String> oldValue = getDSAnnotationPatterns();
-		doSetObject(aQute.lib.osgi.Constants.DSANNOTATIONS, oldValue, patterns, stringListFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.DSANNOTATIONS, oldValue, patterns, stringListFormatter);
 	}
 
 	public List<ServiceComponent> getServiceComponents() {
-		return doGetObject(aQute.lib.osgi.Constants.SERVICE_COMPONENT, serviceComponentConverter);
+		return doGetObject(aQute.bnd.osgi.Constants.SERVICE_COMPONENT, serviceComponentConverter);
 	}
 
 	public void setServiceComponents(List< ? extends ServiceComponent> components) {
 		List<ServiceComponent> oldValue = getServiceComponents();
-		doSetObject(aQute.lib.osgi.Constants.SERVICE_COMPONENT, oldValue, components, headerClauseListFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.SERVICE_COMPONENT, oldValue, components, headerClauseListFormatter);
 	}
 
 	public List<ImportPattern> getImportPatterns() {
@@ -484,30 +483,30 @@
 	}
 
 	public List<VersionedClause> getBuildPath() {
-		return doGetObject(aQute.lib.osgi.Constants.BUILDPATH, buildPathConverter);
+		return doGetObject(aQute.bnd.osgi.Constants.BUILDPATH, buildPathConverter);
 	}
 
 	public void setBuildPath(List< ? extends VersionedClause> paths) {
 		List<VersionedClause> oldValue = getBuildPath();
-		doSetObject(aQute.lib.osgi.Constants.BUILDPATH, oldValue, paths, headerClauseListFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.BUILDPATH, oldValue, paths, headerClauseListFormatter);
 	}
 
 	public List<VersionedClause> getBuildPackages() {
-		return doGetObject(aQute.lib.osgi.Constants.BUILDPACKAGES, buildPackagesConverter);
+		return doGetObject(aQute.bnd.osgi.Constants.BUILDPACKAGES, buildPackagesConverter);
 	}
 
 	public void setBuildPackages(List< ? extends VersionedClause> paths) {
 		List<VersionedClause> oldValue = getBuildPackages();
-		doSetObject(aQute.lib.osgi.Constants.BUILDPACKAGES, oldValue, paths, headerClauseListFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.BUILDPACKAGES, oldValue, paths, headerClauseListFormatter);
 	}
 
 	public List<VersionedClause> getRunBundles() {
-		return doGetObject(aQute.lib.osgi.Constants.RUNBUNDLES, clauseListConverter);
+		return doGetObject(aQute.bnd.osgi.Constants.RUNBUNDLES, clauseListConverter);
 	}
 
 	public void setRunBundles(List< ? extends VersionedClause> paths) {
 		List<VersionedClause> oldValue = getBuildPath();
-		doSetObject(aQute.lib.osgi.Constants.RUNBUNDLES, oldValue, paths, headerClauseListFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.RUNBUNDLES, oldValue, paths, headerClauseListFormatter);
 	}
 
 	public boolean isIncludedPackage(String packageName) {
@@ -528,16 +527,16 @@
 	}
 
 	public List<String> getSubBndFiles() {
-		return doGetObject(aQute.lib.osgi.Constants.SUB, listConverter);
+		return doGetObject(aQute.bnd.osgi.Constants.SUB, listConverter);
 	}
 
 	public void setSubBndFiles(List<String> subBndFiles) {
 		List<String> oldValue = getSubBndFiles();
-		doSetObject(aQute.lib.osgi.Constants.SUB, oldValue, subBndFiles, stringListFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.SUB, oldValue, subBndFiles, stringListFormatter);
 	}
 
 	public Map<String,String> getRunProperties() {
-		return doGetObject(aQute.lib.osgi.Constants.RUNPROPERTIES, propertiesConverter);
+		return doGetObject(aQute.bnd.osgi.Constants.RUNPROPERTIES, propertiesConverter);
 	}
 
 	/*
@@ -546,7 +545,7 @@
 	 */
 	public void setRunProperties(Map<String,String> props) {
 		Map<String,String> old = getRunProperties();
-		doSetObject(aQute.lib.osgi.Constants.RUNPROPERTIES, old, props, propertiesFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.RUNPROPERTIES, old, props, propertiesFormatter);
 	}
 
 	/*
@@ -554,7 +553,7 @@
 	 * @see bndtools.editor.model.IBndModel#getRunVMArgs()
 	 */
 	public String getRunVMArgs() {
-		return doGetObject(aQute.lib.osgi.Constants.RUNVM, stringConverter);
+		return doGetObject(aQute.bnd.osgi.Constants.RUNVM, stringConverter);
 	}
 
 	/*
@@ -563,15 +562,15 @@
 	 */
 	public void setRunVMArgs(String args) {
 		String old = getRunVMArgs();
-		doSetObject(aQute.lib.osgi.Constants.RUNVM, old, args, newlineEscapeFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.RUNVM, old, args, newlineEscapeFormatter);
 	}
 
 	@SuppressWarnings("deprecation")
 	public List<String> getTestSuites() {
-		List<String> testCases = doGetObject(aQute.lib.osgi.Constants.TESTCASES, listConverter);
+		List<String> testCases = doGetObject(aQute.bnd.osgi.Constants.TESTCASES, listConverter);
 		testCases = testCases != null ? testCases : Collections.<String> emptyList();
 
-		List<String> testSuites = doGetObject(aQute.lib.osgi.Constants.TESTSUITES, listConverter);
+		List<String> testSuites = doGetObject(aQute.bnd.osgi.Constants.TESTSUITES, listConverter);
 		testSuites = testSuites != null ? testSuites : Collections.<String> emptyList();
 
 		List<String> result = new ArrayList<String>(testCases.size() + testSuites.size());
@@ -583,63 +582,63 @@
 	@SuppressWarnings("deprecation")
 	public void setTestSuites(List<String> suites) {
 		List<String> old = getTestSuites();
-		doSetObject(aQute.lib.osgi.Constants.TESTCASES, old, suites, stringListFormatter);
-		doSetObject(aQute.lib.osgi.Constants.TESTSUITES, null, null, stringListFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.TESTCASES, old, suites, stringListFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.TESTSUITES, null, null, stringListFormatter);
 	}
 
 	public List<HeaderClause> getPlugins() {
-		return doGetObject(aQute.lib.osgi.Constants.PLUGIN, headerClauseListConverter);
+		return doGetObject(aQute.bnd.osgi.Constants.PLUGIN, headerClauseListConverter);
 	}
 
 	public void setPlugins(List<HeaderClause> plugins) {
 		List<HeaderClause> old = getPlugins();
-		doSetObject(aQute.lib.osgi.Constants.PLUGIN, old, plugins, headerClauseListFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.PLUGIN, old, plugins, headerClauseListFormatter);
 	}
 
 	public List<String> getPluginPath() {
-		return doGetObject(aQute.lib.osgi.Constants.PLUGINPATH, listConverter);
+		return doGetObject(aQute.bnd.osgi.Constants.PLUGINPATH, listConverter);
 	}
 
 	public void setPluginPath(List<String> pluginPath) {
 		List<String> old = getPluginPath();
-		doSetObject(aQute.lib.osgi.Constants.PLUGINPATH, old, pluginPath, stringListFormatter);
+		doSetObject(aQute.bnd.osgi.Constants.PLUGINPATH, old, pluginPath, stringListFormatter);
 	}
 	
     public List<String> getRunRepos() {
-        return doGetObject(aQute.lib.osgi.Constants.RUNREPOS, listConverter);
+        return doGetObject(aQute.bnd.osgi.Constants.RUNREPOS, listConverter);
     }
 
     public void setRunRepos(List<String> repos) {
         List<String> old = getRunRepos();
-        doSetObject(aQute.lib.osgi.Constants.RUNREPOS, old, repos, runReposFormatter);
+        doSetObject(aQute.bnd.osgi.Constants.RUNREPOS, old, repos, runReposFormatter);
     }
     
     public String getRunFramework() {
-        return doGetObject(aQute.lib.osgi.Constants.RUNFRAMEWORK, stringConverter);
+        return doGetObject(aQute.bnd.osgi.Constants.RUNFRAMEWORK, stringConverter);
     }
 
     public EE getEE() {
-        return doGetObject(aQute.lib.osgi.Constants.RUNEE, eeConverter);
+        return doGetObject(aQute.bnd.osgi.Constants.RUNEE, eeConverter);
     }
 
     public void setEE(EE ee) {
         EE old = getEE();
-        doSetObject(aQute.lib.osgi.Constants.RUNEE, old, ee, eeFormatter);
+        doSetObject(aQute.bnd.osgi.Constants.RUNEE, old, ee, eeFormatter);
     }
 
     
     public void setRunFramework(String clause) {
         String oldValue = getRunFramework();
-        doSetObject(aQute.lib.osgi.Constants.RUNFRAMEWORK, oldValue, clause, newlineEscapeFormatter);
+        doSetObject(aQute.bnd.osgi.Constants.RUNFRAMEWORK, oldValue, clause, newlineEscapeFormatter);
     }
     
     public List<Requirement> getRunRequires() {
-    	return doGetObject(aQute.lib.osgi.Constants.RUNREQUIRES, requirementListConverter);
+    	return doGetObject(aQute.bnd.osgi.Constants.RUNREQUIRES, requirementListConverter);
     }
     
     public void setRunRequires(List<Requirement> requires) {
     	List<Requirement> oldValue = getRunRequires();
-    	doSetObject(aQute.lib.osgi.Constants.RUNREQUIRES, oldValue, requires, requirementListFormatter);
+    	doSetObject(aQute.bnd.osgi.Constants.RUNREQUIRES, oldValue, requires, requirementListFormatter);
     }
 
 
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/ExportedPackage.java b/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/ExportedPackage.java
index c55ebe2..47b37bd 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/ExportedPackage.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/ExportedPackage.java
@@ -1,8 +1,8 @@
 package aQute.bnd.build.model.clauses;
 
-import org.osgi.framework.Constants;
+import org.osgi.framework.*;
 
-import aQute.libg.header.Attrs;
+import aQute.bnd.header.*;
 
 public class ExportedPackage extends HeaderClause {
 
@@ -24,14 +24,14 @@
 	}
 
 	public boolean isProvided() {
-		return Boolean.valueOf(attribs.get(aQute.lib.osgi.Constants.PROVIDE_DIRECTIVE));
+		return Boolean.valueOf(attribs.get(aQute.bnd.osgi.Constants.PROVIDE_DIRECTIVE));
 	}
 
 	public void setProvided(boolean provided) {
 		if (provided)
-			attribs.put(aQute.lib.osgi.Constants.PROVIDE_DIRECTIVE, Boolean.toString(true));
+			attribs.put(aQute.bnd.osgi.Constants.PROVIDE_DIRECTIVE, Boolean.toString(true));
 		else
-			attribs.remove(aQute.lib.osgi.Constants.PROVIDE_DIRECTIVE);
+			attribs.remove(aQute.bnd.osgi.Constants.PROVIDE_DIRECTIVE);
 	}
 
 	@Override
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/HeaderClause.java b/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/HeaderClause.java
index f17a069..4af4dde 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/HeaderClause.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/HeaderClause.java
@@ -1,17 +1,9 @@
 package aQute.bnd.build.model.clauses;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.Map.Entry;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.TreeSet;
 
-import aQute.libg.header.Attrs;
+import aQute.bnd.header.*;
 
 public class HeaderClause implements Cloneable, Comparable<HeaderClause> {
 
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/ImportPattern.java b/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/ImportPattern.java
index caaea09..bdca772 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/ImportPattern.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/ImportPattern.java
@@ -1,8 +1,8 @@
 package aQute.bnd.build.model.clauses;
 
-import org.osgi.framework.Constants;
+import org.osgi.framework.*;
 
-import aQute.libg.header.Attrs;
+import aQute.bnd.header.*;
 
 public class ImportPattern extends VersionedClause implements Cloneable {
 
@@ -11,15 +11,15 @@
 	}
 
 	public boolean isOptional() {
-		String resolution = attribs.get(aQute.lib.osgi.Constants.RESOLUTION_DIRECTIVE);
+		String resolution = attribs.get(aQute.bnd.osgi.Constants.RESOLUTION_DIRECTIVE);
 		return Constants.RESOLUTION_OPTIONAL.equals(resolution);
 	}
 
 	public void setOptional(boolean optional) {
 		if (optional)
-			attribs.put(aQute.lib.osgi.Constants.RESOLUTION_DIRECTIVE, Constants.RESOLUTION_OPTIONAL);
+			attribs.put(aQute.bnd.osgi.Constants.RESOLUTION_DIRECTIVE, Constants.RESOLUTION_OPTIONAL);
 		else
-			attribs.remove(aQute.lib.osgi.Constants.RESOLUTION_DIRECTIVE);
+			attribs.remove(aQute.bnd.osgi.Constants.RESOLUTION_DIRECTIVE);
 	}
 
 	@Override
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/ServiceComponent.java b/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/ServiceComponent.java
index dcbd8f5..d8e4c6b 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/ServiceComponent.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/ServiceComponent.java
@@ -1,17 +1,10 @@
 package aQute.bnd.build.model.clauses;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.Map.Entry;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import java.util.regex.*;
 
-import aQute.libg.header.Attrs;
+import aQute.bnd.header.*;
 
 public class ServiceComponent extends HeaderClause implements Cloneable {
 
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/VersionedClause.java b/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/VersionedClause.java
index a6e79a9..358ec08 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/VersionedClause.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/model/clauses/VersionedClause.java
@@ -1,8 +1,8 @@
 package aQute.bnd.build.model.clauses;
 
-import org.osgi.framework.Constants;
+import org.osgi.framework.*;
 
-import aQute.libg.header.Attrs;
+import aQute.bnd.header.*;
 
 public class VersionedClause extends HeaderClause implements Cloneable {
 	public VersionedClause(String name, Attrs attribs) {
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/ClauseListConverter.java b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/ClauseListConverter.java
index 130b60b..893a22f 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/ClauseListConverter.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/ClauseListConverter.java
@@ -3,8 +3,8 @@
 import java.util.*;
 import java.util.Map.Entry;
 
-import aQute.lib.osgi.*;
-import aQute.libg.header.*;
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
 import aQute.libg.tuple.*;
 
 public class ClauseListConverter<R> implements Converter<List<R>,String> {
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/EEConverter.java b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/EEConverter.java
index de6d2ea..a2defbf 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/EEConverter.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/EEConverter.java
@@ -1,6 +1,6 @@
 package aQute.bnd.build.model.conversions;
 
-import aQute.bnd.build.model.EE;
+import aQute.bnd.build.model.*;
 
 public class EEConverter implements Converter<EE,String> {
 
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/EEFormatter.java b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/EEFormatter.java
index 1853685..44a7de6 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/EEFormatter.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/EEFormatter.java
@@ -1,6 +1,6 @@
 package aQute.bnd.build.model.conversions;
 
-import aQute.bnd.build.model.EE;
+import aQute.bnd.build.model.*;
 
 public final class EEFormatter implements Converter<String,EE> {
 	public String convert(EE input) throws IllegalArgumentException {
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/HeaderClauseConverter.java b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/HeaderClauseConverter.java
index dfb3a5d..dffd900 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/HeaderClauseConverter.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/HeaderClauseConverter.java
@@ -1,7 +1,7 @@
 package aQute.bnd.build.model.conversions;
 
 import aQute.bnd.build.model.clauses.*;
-import aQute.libg.header.*;
+import aQute.bnd.header.*;
 import aQute.libg.tuple.*;
 
 public class HeaderClauseConverter implements Converter<HeaderClause,Pair<String,Attrs>> {
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/PropertiesConverter.java b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/PropertiesConverter.java
index a1ecf5f..cd45c60 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/PropertiesConverter.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/PropertiesConverter.java
@@ -2,7 +2,7 @@
 
 import java.util.*;
 
-import aQute.libg.header.*;
+import aQute.bnd.header.*;
 
 public class PropertiesConverter implements Converter<Map<String,String>,String> {
 
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/RequirementFormatter.java b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/RequirementFormatter.java
index b64f1bd..2a293ef 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/RequirementFormatter.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/RequirementFormatter.java
@@ -2,7 +2,7 @@
 
 import java.util.Map.Entry;
 
-import org.osgi.resource.Requirement;
+import org.osgi.resource.*;
 
 public class RequirementFormatter implements Converter<String,Requirement> {
 
@@ -12,11 +12,11 @@
 		builder.append(req.getNamespace());
 		
 		for (Entry<String,String> directive : req.getDirectives().entrySet()) {
-			builder.append(';').append(directive.getKey()).append(":=").append(directive.getValue());
+			builder.append(';').append(directive.getKey()).append(":='").append(directive.getValue()).append('\'');
 		}
 		
 		for (Entry<String,Object> attribute : req.getAttributes().entrySet()) {
-			builder.append(';').append(attribute.getKey()).append("=").append(attribute.getValue());
+			builder.append(';').append(attribute.getKey()).append("='").append(attribute.getValue()).append('\'');
 		}
 		
 		return builder.toString();
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/RequirementListConverter.java b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/RequirementListConverter.java
index 6249c0f..dacd6ed 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/RequirementListConverter.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/RequirementListConverter.java
@@ -2,11 +2,11 @@
 
 import java.util.Map.Entry;
 
-import org.osgi.resource.Requirement;
+import org.osgi.resource.*;
 
-import aQute.lib.osgi.resource.CapReqBuilder;
-import aQute.libg.header.Attrs;
-import aQute.libg.tuple.Pair;
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.resource.*;
+import aQute.libg.tuple.*;
 
 public class RequirementListConverter extends ClauseListConverter<Requirement> {
 
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/SimpleListConverter.java b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/SimpleListConverter.java
index 2291be3..a3a262b 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/SimpleListConverter.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/SimpleListConverter.java
@@ -2,7 +2,7 @@
 
 import java.util.*;
 
-import aQute.lib.osgi.*;
+import aQute.bnd.osgi.*;
 import aQute.libg.qtokens.*;
 
 public class SimpleListConverter<R> implements Converter<List<R>,String> {
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/VersionedClauseConverter.java b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/VersionedClauseConverter.java
index 5aead1c..31a1663 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/VersionedClauseConverter.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/model/conversions/VersionedClauseConverter.java
@@ -1,7 +1,7 @@
 package aQute.bnd.build.model.conversions;
 
 import aQute.bnd.build.model.clauses.*;
-import aQute.libg.header.*;
+import aQute.bnd.header.*;
 import aQute.libg.tuple.*;
 
 public class VersionedClauseConverter implements Converter<VersionedClause,Pair<String,Attrs>> {
diff --git a/bundleplugin/src/main/java/aQute/bnd/compatibility/ParseSignatureBuilder.java b/bundleplugin/src/main/java/aQute/bnd/compatibility/ParseSignatureBuilder.java
index 133abb1..6cb52ce 100644
--- a/bundleplugin/src/main/java/aQute/bnd/compatibility/ParseSignatureBuilder.java
+++ b/bundleplugin/src/main/java/aQute/bnd/compatibility/ParseSignatureBuilder.java
@@ -2,8 +2,8 @@
 
 import java.io.*;
 
-import aQute.lib.osgi.*;
-import aQute.lib.osgi.Descriptors.TypeRef;
+import aQute.bnd.osgi.*;
+import aQute.bnd.osgi.Descriptors.TypeRef;
 
 public class ParseSignatureBuilder {
 	final Scope	root;
diff --git a/bundleplugin/src/main/java/aQute/bnd/component/AnnotationReader.java b/bundleplugin/src/main/java/aQute/bnd/component/AnnotationReader.java
index d0b915c..989fdc9 100644
--- a/bundleplugin/src/main/java/aQute/bnd/component/AnnotationReader.java
+++ b/bundleplugin/src/main/java/aQute/bnd/component/AnnotationReader.java
@@ -6,11 +6,10 @@
 
 import org.osgi.service.component.annotations.*;
 
+import aQute.bnd.osgi.*;
+import aQute.bnd.osgi.Clazz.MethodDef;
+import aQute.bnd.osgi.Descriptors.TypeRef;
 import aQute.lib.collections.*;
-import aQute.lib.osgi.*;
-import aQute.lib.osgi.Clazz.MethodDef;
-import aQute.lib.osgi.Descriptors.TypeRef;
-import aQute.libg.version.*;
 
 /**
  * fixup any unbind methods To declare no unbind method, the value "-" must be
@@ -27,7 +26,7 @@
 public class AnnotationReader extends ClassDataCollector {
 	final static TypeRef[]		EMPTY					= new TypeRef[0];
 	final static Pattern		PROPERTY_PATTERN		= Pattern
-																.compile("([^=]+(:(Boolean|Byte|Char|Short|Integer|Long|Float|Double|String))?)\\s*=(.*)");
+																.compile("\\s*([^=]+(\\s*:\\s*(Boolean|Byte|Char|Short|Integer|Long|Float|Double|String))?)\\s*=(.*)");
 
 	public static final Version	V1_1					= new Version("1.1.0");																												// "1.1.0"
 	public static final Version	V1_2					= new Version("1.2.0");																												// "1.1.0"
diff --git a/bundleplugin/src/main/java/aQute/bnd/component/ComponentDef.java b/bundleplugin/src/main/java/aQute/bnd/component/ComponentDef.java
index edcd909..98f7d36 100644
--- a/bundleplugin/src/main/java/aQute/bnd/component/ComponentDef.java
+++ b/bundleplugin/src/main/java/aQute/bnd/component/ComponentDef.java
@@ -5,11 +5,10 @@
 
 import org.osgi.service.component.annotations.*;
 
+import aQute.bnd.osgi.*;
+import aQute.bnd.osgi.Descriptors.TypeRef;
 import aQute.lib.collections.*;
-import aQute.lib.osgi.*;
-import aQute.lib.osgi.Descriptors.TypeRef;
 import aQute.lib.tag.*;
-import aQute.libg.version.*;
 
 /**
  * This class just holds the information for the component, implementation, and
diff --git a/bundleplugin/src/main/java/aQute/bnd/component/DSAnnotations.java b/bundleplugin/src/main/java/aQute/bnd/component/DSAnnotations.java
index 0fd4011..5d16b9a 100644
--- a/bundleplugin/src/main/java/aQute/bnd/component/DSAnnotations.java
+++ b/bundleplugin/src/main/java/aQute/bnd/component/DSAnnotations.java
@@ -2,9 +2,9 @@
 
 import java.util.*;
 
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.*;
-import aQute.lib.osgi.*;
-import aQute.libg.header.*;
 
 /**
  * Analyze the class space for any classes that have an OSGi annotation for DS.
diff --git a/bundleplugin/src/main/java/aQute/bnd/component/ReferenceDef.java b/bundleplugin/src/main/java/aQute/bnd/component/ReferenceDef.java
index a626e52..6c64fe0 100644
--- a/bundleplugin/src/main/java/aQute/bnd/component/ReferenceDef.java
+++ b/bundleplugin/src/main/java/aQute/bnd/component/ReferenceDef.java
@@ -2,9 +2,8 @@
 
 import org.osgi.service.component.annotations.*;
 
-import aQute.lib.osgi.*;
+import aQute.bnd.osgi.*;
 import aQute.lib.tag.*;
-import aQute.libg.version.*;
 
 /**
  * Holds the information in the reference element.
diff --git a/bundleplugin/src/main/java/aQute/bnd/differ/Baseline.java b/bundleplugin/src/main/java/aQute/bnd/differ/Baseline.java
index 4319b6b..b5eabb5 100644
--- a/bundleplugin/src/main/java/aQute/bnd/differ/Baseline.java
+++ b/bundleplugin/src/main/java/aQute/bnd/differ/Baseline.java
@@ -4,12 +4,11 @@
 import java.util.*;
 import java.util.jar.*;
 
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.diff.*;
 import aQute.bnd.service.diff.Diff.Ignore;
-import aQute.lib.osgi.*;
 import aQute.libg.generics.*;
-import aQute.libg.header.*;
-import aQute.libg.version.*;
 import aQute.service.reporter.*;
 
 /**
diff --git a/bundleplugin/src/main/java/aQute/bnd/differ/DiffPluginImpl.java b/bundleplugin/src/main/java/aQute/bnd/differ/DiffPluginImpl.java
index 2fb366b..4da23cc 100644
--- a/bundleplugin/src/main/java/aQute/bnd/differ/DiffPluginImpl.java
+++ b/bundleplugin/src/main/java/aQute/bnd/differ/DiffPluginImpl.java
@@ -6,13 +6,13 @@
 import java.util.*;
 import java.util.jar.*;
 
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.diff.*;
 import aQute.bnd.service.diff.Tree.Data;
 import aQute.lib.hex.*;
 import aQute.lib.io.*;
-import aQute.lib.osgi.*;
 import aQute.libg.cryptography.*;
-import aQute.libg.header.*;
 
 /**
  * This Diff Plugin Implementation will compare JARs for their API (based on the
@@ -120,7 +120,7 @@
 				Digester<SHA1> digester = SHA1.getDigester();
 				IO.copy(in, digester);
 				String value = Hex.toHexString(digester.digest().digest());
-				resources.add(new Element(Type.RESOURCE, entry.getKey() + "=" + value, null, CHANGED, CHANGED, null));
+				resources.add(new Element(Type.RESOURCE, entry.getKey(), Arrays.asList(new Element(Type.SHA,value)), CHANGED, CHANGED, null));
 			}
 			finally {
 				in.close();
diff --git a/bundleplugin/src/main/java/aQute/bnd/differ/JavaElement.java b/bundleplugin/src/main/java/aQute/bnd/differ/JavaElement.java
index fd3515a..0be044b 100644
--- a/bundleplugin/src/main/java/aQute/bnd/differ/JavaElement.java
+++ b/bundleplugin/src/main/java/aQute/bnd/differ/JavaElement.java
@@ -11,17 +11,17 @@
 import java.util.jar.*;
 
 import aQute.bnd.annotation.*;
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
+import aQute.bnd.osgi.Clazz.JAVA;
+import aQute.bnd.osgi.Clazz.MethodDef;
+import aQute.bnd.osgi.Descriptors.PackageRef;
+import aQute.bnd.osgi.Descriptors.TypeRef;
+import aQute.bnd.osgi.Version;
 import aQute.bnd.service.diff.*;
 import aQute.bnd.service.diff.Type;
 import aQute.lib.collections.*;
-import aQute.lib.osgi.*;
-import aQute.lib.osgi.Clazz.JAVA;
-import aQute.lib.osgi.Clazz.MethodDef;
-import aQute.lib.osgi.Descriptors.PackageRef;
-import aQute.lib.osgi.Descriptors.TypeRef;
 import aQute.libg.generics.*;
-import aQute.libg.header.*;
-import aQute.libg.version.Version;
 
 /**
  * An element that compares the access field in a binary compatible way. This
diff --git a/bundleplugin/src/main/java/aQute/bnd/differ/RepositoryElement.java b/bundleplugin/src/main/java/aQute/bnd/differ/RepositoryElement.java
index 23a5f20..5577e0e 100644
--- a/bundleplugin/src/main/java/aQute/bnd/differ/RepositoryElement.java
+++ b/bundleplugin/src/main/java/aQute/bnd/differ/RepositoryElement.java
@@ -2,9 +2,9 @@
 
 import java.util.*;
 
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.*;
 import aQute.bnd.service.diff.*;
-import aQute.libg.version.*;
 
 public class RepositoryElement {
 
diff --git a/bundleplugin/src/main/java/aQute/libg/filerepo/FileRepo.java b/bundleplugin/src/main/java/aQute/bnd/filerepo/FileRepo.java
similarity index 97%
rename from bundleplugin/src/main/java/aQute/libg/filerepo/FileRepo.java
rename to bundleplugin/src/main/java/aQute/bnd/filerepo/FileRepo.java
index e278a74..c0113ac 100644
--- a/bundleplugin/src/main/java/aQute/libg/filerepo/FileRepo.java
+++ b/bundleplugin/src/main/java/aQute/bnd/filerepo/FileRepo.java
@@ -1,10 +1,10 @@
-package aQute.libg.filerepo;
+package aQute.bnd.filerepo;
 
 import java.io.*;
 import java.util.*;
 import java.util.regex.*;
 
-import aQute.libg.version.*;
+import aQute.bnd.osgi.*;
 
 public class FileRepo {
 	File	root;
diff --git a/bundleplugin/src/main/java/aQute/libg/filerepo/packageinfo b/bundleplugin/src/main/java/aQute/bnd/filerepo/packageinfo
similarity index 100%
rename from bundleplugin/src/main/java/aQute/libg/filerepo/packageinfo
rename to bundleplugin/src/main/java/aQute/bnd/filerepo/packageinfo
diff --git a/bundleplugin/src/main/java/aQute/libg/header/Attrs.java b/bundleplugin/src/main/java/aQute/bnd/header/Attrs.java
similarity index 98%
rename from bundleplugin/src/main/java/aQute/libg/header/Attrs.java
rename to bundleplugin/src/main/java/aQute/bnd/header/Attrs.java
index 40fefcc..8daaee7 100644
--- a/bundleplugin/src/main/java/aQute/libg/header/Attrs.java
+++ b/bundleplugin/src/main/java/aQute/bnd/header/Attrs.java
@@ -1,10 +1,10 @@
-package aQute.libg.header;
+package aQute.bnd.header;
 
 import java.util.*;
 import java.util.regex.*;
 
+import aQute.bnd.osgi.*;
 import aQute.lib.collections.*;
-import aQute.libg.version.*;
 
 public class Attrs implements Map<String,String> {
 	public enum Type {
diff --git a/bundleplugin/src/main/java/aQute/libg/header/OSGiHeader.java b/bundleplugin/src/main/java/aQute/bnd/header/OSGiHeader.java
similarity index 99%
rename from bundleplugin/src/main/java/aQute/libg/header/OSGiHeader.java
rename to bundleplugin/src/main/java/aQute/bnd/header/OSGiHeader.java
index a372527..810513a 100755
--- a/bundleplugin/src/main/java/aQute/libg/header/OSGiHeader.java
+++ b/bundleplugin/src/main/java/aQute/bnd/header/OSGiHeader.java
@@ -1,4 +1,4 @@
-package aQute.libg.header;
+package aQute.bnd.header;
 
 import java.util.*;
 
diff --git a/bundleplugin/src/main/java/aQute/libg/header/Parameters.java b/bundleplugin/src/main/java/aQute/bnd/header/Parameters.java
similarity index 99%
rename from bundleplugin/src/main/java/aQute/libg/header/Parameters.java
rename to bundleplugin/src/main/java/aQute/bnd/header/Parameters.java
index 02e3463..413b6a5 100644
--- a/bundleplugin/src/main/java/aQute/libg/header/Parameters.java
+++ b/bundleplugin/src/main/java/aQute/bnd/header/Parameters.java
@@ -1,4 +1,4 @@
-package aQute.libg.header;
+package aQute.bnd.header;
 
 import java.util.*;
 
diff --git a/bundleplugin/src/main/java/aQute/libg/header/packageinfo b/bundleplugin/src/main/java/aQute/bnd/header/packageinfo
similarity index 100%
rename from bundleplugin/src/main/java/aQute/libg/header/packageinfo
rename to bundleplugin/src/main/java/aQute/bnd/header/packageinfo
diff --git a/bundleplugin/src/main/java/aQute/bnd/help/Syntax.java b/bundleplugin/src/main/java/aQute/bnd/help/Syntax.java
index e1a6c53..2b6ccbf 100644
--- a/bundleplugin/src/main/java/aQute/bnd/help/Syntax.java
+++ b/bundleplugin/src/main/java/aQute/bnd/help/Syntax.java
@@ -3,7 +3,7 @@
 import java.util.*;
 import java.util.regex.*;
 
-import aQute.lib.osgi.*;
+import aQute.bnd.osgi.*;
 
 public class Syntax implements Constants {
 	final String							header;
diff --git a/bundleplugin/src/main/java/aQute/bnd/make/Make.java b/bundleplugin/src/main/java/aQute/bnd/make/Make.java
index a42b5e0..59d252a 100644
--- a/bundleplugin/src/main/java/aQute/bnd/make/Make.java
+++ b/bundleplugin/src/main/java/aQute/bnd/make/Make.java
@@ -4,9 +4,9 @@
 import java.util.Map.Entry;
 import java.util.regex.*;
 
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.*;
-import aQute.lib.osgi.*;
-import aQute.libg.header.*;
 
 public class Make {
 	Builder								builder;
diff --git a/bundleplugin/src/main/java/aQute/bnd/make/MakeBnd.java b/bundleplugin/src/main/java/aQute/bnd/make/MakeBnd.java
index 3ef7076..cda13b4 100644
--- a/bundleplugin/src/main/java/aQute/bnd/make/MakeBnd.java
+++ b/bundleplugin/src/main/java/aQute/bnd/make/MakeBnd.java
@@ -5,8 +5,8 @@
 import java.util.regex.*;
 
 import aQute.bnd.build.*;
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.*;
-import aQute.lib.osgi.*;
 
 public class MakeBnd implements MakePlugin, Constants {
 	final static Pattern	JARFILE	= Pattern.compile("(.+)\\.(jar|ipa)");
diff --git a/bundleplugin/src/main/java/aQute/bnd/make/MakeCopy.java b/bundleplugin/src/main/java/aQute/bnd/make/MakeCopy.java
index 9a6897e..c799dc7 100644
--- a/bundleplugin/src/main/java/aQute/bnd/make/MakeCopy.java
+++ b/bundleplugin/src/main/java/aQute/bnd/make/MakeCopy.java
@@ -4,8 +4,8 @@
 import java.net.*;
 import java.util.*;
 
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.*;
-import aQute.lib.osgi.*;
 
 public class MakeCopy implements MakePlugin {
 
diff --git a/bundleplugin/src/main/java/aQute/bnd/make/calltree/CalltreeResource.java b/bundleplugin/src/main/java/aQute/bnd/make/calltree/CalltreeResource.java
index ddcf0f5..505cfc2 100644
--- a/bundleplugin/src/main/java/aQute/bnd/make/calltree/CalltreeResource.java
+++ b/bundleplugin/src/main/java/aQute/bnd/make/calltree/CalltreeResource.java
@@ -4,8 +4,8 @@
 import java.lang.reflect.*;
 import java.util.*;
 
-import aQute.lib.osgi.*;
-import aQute.lib.osgi.Clazz.MethodDef;
+import aQute.bnd.osgi.*;
+import aQute.bnd.osgi.Clazz.MethodDef;
 
 /**
  * Create an XML call tree of a set of classes. The structure of the XML is:
diff --git a/bundleplugin/src/main/java/aQute/bnd/make/component/ComponentAnnotationReader.java b/bundleplugin/src/main/java/aQute/bnd/make/component/ComponentAnnotationReader.java
index 614071f..d081bb9 100644
--- a/bundleplugin/src/main/java/aQute/bnd/make/component/ComponentAnnotationReader.java
+++ b/bundleplugin/src/main/java/aQute/bnd/make/component/ComponentAnnotationReader.java
@@ -1,15 +1,15 @@
 package aQute.bnd.make.component;
 
-import static aQute.lib.osgi.Constants.*;
+import static aQute.bnd.osgi.Constants.*;
 
 import java.lang.reflect.*;
 import java.util.*;
 import java.util.regex.*;
 
 import aQute.bnd.annotation.component.*;
-import aQute.lib.osgi.*;
-import aQute.lib.osgi.Clazz.MethodDef;
-import aQute.lib.osgi.Descriptors.TypeRef;
+import aQute.bnd.osgi.*;
+import aQute.bnd.osgi.Clazz.MethodDef;
+import aQute.bnd.osgi.Descriptors.TypeRef;
 import aQute.service.reporter.*;
 
 public class ComponentAnnotationReader extends ClassDataCollector {
@@ -256,16 +256,17 @@
 		return Modifier.isPublic(method.getAccess()) || Modifier.isProtected(method.getAccess());
 	}
 
-	static Pattern	PROPERTY_PATTERN	= Pattern.compile("[^=]+=.+");
+	static Pattern	PROPERTY_PATTERN	= Pattern.compile("\\s*([^=\\s])+\\s*=(.+)");
 
-	private void doProperties(aQute.lib.osgi.Annotation annotation) {
+	private void doProperties(aQute.bnd.osgi.Annotation annotation) {
 		Object[] properties = annotation.get(Component.PROPERTIES);
 
 		if (properties != null) {
 			for (Object o : properties) {
 				String p = (String) o;
-				if (PROPERTY_PATTERN.matcher(p).matches())
-					this.properties.add(p);
+				Matcher m = PROPERTY_PATTERN.matcher(p);
+				if (m.matches())
+					this.properties.add(m.group(1)+"="+m.group(2));
 				else
 					throw new IllegalArgumentException("Malformed property '" + p + "' on: "
 							+ annotation.get(Component.NAME));
diff --git a/bundleplugin/src/main/java/aQute/bnd/make/component/ServiceComponent.java b/bundleplugin/src/main/java/aQute/bnd/make/component/ServiceComponent.java
index 273ccbe..89c36be 100644
--- a/bundleplugin/src/main/java/aQute/bnd/make/component/ServiceComponent.java
+++ b/bundleplugin/src/main/java/aQute/bnd/make/component/ServiceComponent.java
@@ -6,13 +6,12 @@
 import java.util.regex.*;
 
 import aQute.bnd.annotation.component.*;
+import aQute.bnd.header.*;
 import aQute.bnd.make.metatype.*;
+import aQute.bnd.osgi.*;
+import aQute.bnd.osgi.Clazz.QUERY;
+import aQute.bnd.osgi.Descriptors.TypeRef;
 import aQute.bnd.service.*;
-import aQute.lib.osgi.*;
-import aQute.lib.osgi.Clazz.QUERY;
-import aQute.lib.osgi.Descriptors.TypeRef;
-import aQute.libg.header.*;
-import aQute.libg.version.*;
 
 /**
  * This class is an analyzer plugin. It looks at the properties and tries to
diff --git a/bundleplugin/src/main/java/aQute/bnd/make/coverage/Coverage.java b/bundleplugin/src/main/java/aQute/bnd/make/coverage/Coverage.java
index 024b5fe..6ca638c 100644
--- a/bundleplugin/src/main/java/aQute/bnd/make/coverage/Coverage.java
+++ b/bundleplugin/src/main/java/aQute/bnd/make/coverage/Coverage.java
@@ -3,9 +3,9 @@
 import java.io.*;
 import java.util.*;
 
-import aQute.lib.osgi.*;
-import aQute.lib.osgi.Clazz.MethodDef;
-import aQute.lib.osgi.Descriptors.TypeRef;
+import aQute.bnd.osgi.*;
+import aQute.bnd.osgi.Clazz.MethodDef;
+import aQute.bnd.osgi.Descriptors.TypeRef;
 
 /**
  * This class can create a coverage table between two classspaces. The
diff --git a/bundleplugin/src/main/java/aQute/bnd/make/coverage/CoverageResource.java b/bundleplugin/src/main/java/aQute/bnd/make/coverage/CoverageResource.java
index 56abb77..753b69d 100644
--- a/bundleplugin/src/main/java/aQute/bnd/make/coverage/CoverageResource.java
+++ b/bundleplugin/src/main/java/aQute/bnd/make/coverage/CoverageResource.java
@@ -5,8 +5,8 @@
 import java.io.*;
 import java.util.*;
 
-import aQute.lib.osgi.*;
-import aQute.lib.osgi.Clazz.MethodDef;
+import aQute.bnd.osgi.*;
+import aQute.bnd.osgi.Clazz.MethodDef;
 import aQute.lib.tag.*;
 
 /**
diff --git a/bundleplugin/src/main/java/aQute/bnd/make/metatype/MetaTypeReader.java b/bundleplugin/src/main/java/aQute/bnd/make/metatype/MetaTypeReader.java
index cd0fc4b..4f57467 100644
--- a/bundleplugin/src/main/java/aQute/bnd/make/metatype/MetaTypeReader.java
+++ b/bundleplugin/src/main/java/aQute/bnd/make/metatype/MetaTypeReader.java
@@ -5,9 +5,9 @@
 import java.util.regex.*;
 
 import aQute.bnd.annotation.metatype.*;
-import aQute.lib.osgi.*;
-import aQute.lib.osgi.Clazz.MethodDef;
-import aQute.lib.osgi.Descriptors.TypeRef;
+import aQute.bnd.osgi.*;
+import aQute.bnd.osgi.Clazz.MethodDef;
+import aQute.bnd.osgi.Descriptors.TypeRef;
 import aQute.lib.tag.*;
 import aQute.libg.generics.*;
 
diff --git a/bundleplugin/src/main/java/aQute/bnd/make/metatype/MetatypePlugin.java b/bundleplugin/src/main/java/aQute/bnd/make/metatype/MetatypePlugin.java
index c6218a1..4f30469 100644
--- a/bundleplugin/src/main/java/aQute/bnd/make/metatype/MetatypePlugin.java
+++ b/bundleplugin/src/main/java/aQute/bnd/make/metatype/MetatypePlugin.java
@@ -3,10 +3,10 @@
 import java.util.*;
 
 import aQute.bnd.annotation.metatype.*;
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
+import aQute.bnd.osgi.Clazz.QUERY;
 import aQute.bnd.service.*;
-import aQute.lib.osgi.*;
-import aQute.lib.osgi.Clazz.QUERY;
-import aQute.libg.header.*;
 
 /**
  * This class is responsible for meta type types. It is a plugin that can
diff --git a/bundleplugin/src/main/java/aQute/bnd/maven/MavenCommand.java b/bundleplugin/src/main/java/aQute/bnd/maven/MavenCommand.java
index 3717062..7fb4dfd 100644
--- a/bundleplugin/src/main/java/aQute/bnd/maven/MavenCommand.java
+++ b/bundleplugin/src/main/java/aQute/bnd/maven/MavenCommand.java
@@ -8,15 +8,15 @@
 import java.util.jar.*;
 import java.util.regex.*;
 
+import aQute.bnd.header.*;
 import aQute.bnd.maven.support.*;
 import aQute.bnd.maven.support.Pom.Scope;
+import aQute.bnd.osgi.*;
+import aQute.bnd.osgi.Descriptors.PackageRef;
 import aQute.bnd.settings.*;
 import aQute.lib.collections.*;
 import aQute.lib.io.*;
-import aQute.lib.osgi.*;
-import aQute.lib.osgi.Descriptors.PackageRef;
 import aQute.libg.command.*;
-import aQute.libg.header.*;
 
 public class MavenCommand extends Processor {
 	final Settings	settings	= new Settings();
diff --git a/bundleplugin/src/main/java/aQute/bnd/maven/MavenDeploy.java b/bundleplugin/src/main/java/aQute/bnd/maven/MavenDeploy.java
index 4cc4cf3..ff383b4 100644
--- a/bundleplugin/src/main/java/aQute/bnd/maven/MavenDeploy.java
+++ b/bundleplugin/src/main/java/aQute/bnd/maven/MavenDeploy.java
@@ -5,10 +5,10 @@
 import java.util.jar.*;
 
 import aQute.bnd.build.*;
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.*;
-import aQute.lib.osgi.*;
 import aQute.libg.command.*;
-import aQute.libg.header.*;
 import aQute.service.reporter.*;
 
 public class MavenDeploy implements Deploy, Plugin {
diff --git a/bundleplugin/src/main/java/aQute/bnd/maven/MavenDeployCmd.java b/bundleplugin/src/main/java/aQute/bnd/maven/MavenDeployCmd.java
index 8f80562..10829ca 100644
--- a/bundleplugin/src/main/java/aQute/bnd/maven/MavenDeployCmd.java
+++ b/bundleplugin/src/main/java/aQute/bnd/maven/MavenDeployCmd.java
@@ -5,9 +5,9 @@
 import java.util.jar.*;
 
 import aQute.bnd.build.*;
-import aQute.lib.osgi.*;
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
 import aQute.libg.command.*;
-import aQute.libg.header.*;
 import aQute.service.reporter.*;
 
 public class MavenDeployCmd extends Processor {
diff --git a/bundleplugin/src/main/java/aQute/bnd/maven/MavenRepository.java b/bundleplugin/src/main/java/aQute/bnd/maven/MavenRepository.java
index 06f279f..2f55a07 100644
--- a/bundleplugin/src/main/java/aQute/bnd/maven/MavenRepository.java
+++ b/bundleplugin/src/main/java/aQute/bnd/maven/MavenRepository.java
@@ -4,9 +4,8 @@
 import java.util.*;
 import java.util.regex.*;
 
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.*;
-import aQute.lib.osgi.*;
-import aQute.libg.version.*;
 import aQute.service.reporter.*;
 
 public class MavenRepository implements RepositoryPlugin, Plugin, BsnToMavenPath {
diff --git a/bundleplugin/src/main/java/aQute/bnd/maven/PomFromManifest.java b/bundleplugin/src/main/java/aQute/bnd/maven/PomFromManifest.java
index 782c282..66954e0 100644
--- a/bundleplugin/src/main/java/aQute/bnd/maven/PomFromManifest.java
+++ b/bundleplugin/src/main/java/aQute/bnd/maven/PomFromManifest.java
@@ -6,11 +6,10 @@
 import java.util.jar.*;
 import java.util.regex.*;
 
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
 import aQute.lib.io.*;
-import aQute.lib.osgi.*;
 import aQute.lib.tag.*;
-import aQute.libg.header.*;
-import aQute.libg.version.*;
 
 public class PomFromManifest extends WriteResource {
 	final Manifest			manifest;
diff --git a/bundleplugin/src/main/java/aQute/bnd/maven/PomParser.java b/bundleplugin/src/main/java/aQute/bnd/maven/PomParser.java
index 12c2edc..3eda682 100644
--- a/bundleplugin/src/main/java/aQute/bnd/maven/PomParser.java
+++ b/bundleplugin/src/main/java/aQute/bnd/maven/PomParser.java
@@ -8,8 +8,8 @@
 
 import org.w3c.dom.*;
 
+import aQute.bnd.osgi.*;
 import aQute.lib.io.*;
-import aQute.lib.osgi.*;
 
 /**
  * Provides a way to parse a maven pom as properties. This provides most of the
diff --git a/bundleplugin/src/main/java/aQute/bnd/maven/PomResource.java b/bundleplugin/src/main/java/aQute/bnd/maven/PomResource.java
index b722d0f..b3582a3 100644
--- a/bundleplugin/src/main/java/aQute/bnd/maven/PomResource.java
+++ b/bundleplugin/src/main/java/aQute/bnd/maven/PomResource.java
@@ -6,10 +6,10 @@
 import java.util.jar.*;
 import java.util.regex.*;
 
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
 import aQute.lib.io.*;
-import aQute.lib.osgi.*;
 import aQute.lib.tag.*;
-import aQute.libg.header.*;
 
 public class PomResource extends WriteResource {
 	final Manifest				manifest;
diff --git a/bundleplugin/src/main/java/aQute/bnd/maven/support/MavenRemoteRepository.java b/bundleplugin/src/main/java/aQute/bnd/maven/support/MavenRemoteRepository.java
index 26ba26f..0cce3b3 100644
--- a/bundleplugin/src/main/java/aQute/bnd/maven/support/MavenRemoteRepository.java
+++ b/bundleplugin/src/main/java/aQute/bnd/maven/support/MavenRemoteRepository.java
@@ -4,10 +4,9 @@
 import java.net.*;
 import java.util.*;
 
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.*;
 import aQute.lib.io.*;
-import aQute.lib.osgi.*;
-import aQute.libg.version.*;
 import aQute.service.reporter.*;
 
 public class MavenRemoteRepository implements RepositoryPlugin, RegistryPlugin, Plugin {
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/About.java b/bundleplugin/src/main/java/aQute/bnd/osgi/About.java
similarity index 97%
rename from bundleplugin/src/main/java/aQute/lib/osgi/About.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/About.java
index 0fdf402..f2b7240 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/About.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/About.java
@@ -1,6 +1,6 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
-import aQute.libg.header.*;
+import aQute.bnd.header.*;
 
 /**
  * This package contains a number of classes that assists by analyzing JARs and
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/AbstractResource.java b/bundleplugin/src/main/java/aQute/bnd/osgi/AbstractResource.java
similarity index 97%
rename from bundleplugin/src/main/java/aQute/lib/osgi/AbstractResource.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/AbstractResource.java
index 782e615..e023985 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/AbstractResource.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/AbstractResource.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Analyzer.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Analyzer.java
similarity index 95%
rename from bundleplugin/src/main/java/aQute/lib/osgi/Analyzer.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/Analyzer.java
index 4f26d94..1a5c61b 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Analyzer.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Analyzer.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 /**
  * This class can calculate the required headers for a (potential) JAR file. It
@@ -30,20 +30,19 @@
 import java.util.regex.*;
 
 import aQute.bnd.annotation.*;
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.Descriptors.Descriptor;
+import aQute.bnd.osgi.Descriptors.PackageRef;
+import aQute.bnd.osgi.Descriptors.TypeRef;
 import aQute.bnd.service.*;
 import aQute.lib.base64.*;
 import aQute.lib.collections.*;
 import aQute.lib.filter.*;
 import aQute.lib.hex.*;
 import aQute.lib.io.*;
-import aQute.lib.osgi.Descriptors.Descriptor;
-import aQute.lib.osgi.Descriptors.PackageRef;
-import aQute.lib.osgi.Descriptors.TypeRef;
 import aQute.libg.cryptography.*;
 import aQute.libg.generics.*;
-import aQute.libg.header.*;
 import aQute.libg.reporter.*;
-import aQute.libg.version.Version;
 
 public class Analyzer extends Processor {
 	private final SortedSet<Clazz.JAVA>				ees						= new TreeSet<Clazz.JAVA>();
@@ -59,8 +58,11 @@
 
 	// Global parameters
 	private final MultiMap<PackageRef,PackageRef>	uses					= new MultiMap<PackageRef,PackageRef>(
-																					PackageRef.class, PackageRef.class,
-																					true);
+			PackageRef.class, PackageRef.class,
+			true);
+	private final MultiMap<PackageRef,PackageRef>	apiUses					= new MultiMap<PackageRef,PackageRef>(
+			PackageRef.class, PackageRef.class,
+			true);
 	private final Packages							classpathExports		= new Packages();
 	private final Descriptors						descriptors				= new Descriptors();
 	private final List<Jar>							classpath				= list();
@@ -115,6 +117,7 @@
 		if (!analyzed) {
 			analyzed = true;
 			uses.clear();
+			apiUses.clear();
 			classspace.clear();
 			classpathExports.clear();
 
@@ -229,7 +232,40 @@
 			// USES
 			//
 			// Add the uses clause to the exports
-			doUses(exports, uses, imports);
+			
+			boolean api = isTrue(getProperty(EXPERIMENTS)) || true; // brave, lets see
+			
+			doUses(exports, api ? apiUses : uses, imports);
+			
+			//
+			// Verify that no exported package has a reference to a private
+			// package
+			// This can cause a lot of harm.
+			// TODO restrict the check to public API only, but even then
+			// exported packages
+			// should preferably not refer to private packages.
+			//
+			Set<PackageRef> privatePackages = new HashSet<PackageRef>(contained.keySet());
+			privatePackages.removeAll(exports.keySet());
+			privatePackages.removeAll(imports.keySet());
+
+			// References to java are not imported so they would show up as
+			// private
+			// packages, lets kill them as well.
+
+			for (Iterator<PackageRef> p = privatePackages.iterator(); p.hasNext();)
+				if (p.next().isJava())
+					p.remove();
+
+			for (PackageRef exported : exports.keySet()) {
+				List<PackageRef> used = uses.get(exported);
+				if (used != null) {
+					Set<PackageRef> privateReferences = new HashSet<PackageRef>(apiUses.get(exported));
+					privateReferences.retainAll(privatePackages);
+					if (!privateReferences.isEmpty())
+						msgs.Export_Has_PrivateReferences_(exported, privateReferences.size(), privateReferences);
+				}
+			}
 
 			//
 			// Checks
@@ -383,6 +419,10 @@
 			}
 		}
 
+		// Copy old values into new manifest, when they
+		// exist in the old one, but not in the new one
+		merge(manifest, dot.getManifest());
+
 		//
 		// Calculate the bundle symbolic name if it is
 		// not set.
@@ -406,16 +446,14 @@
 		if (main.getValue(BUNDLE_VERSION) == null)
 			main.putValue(BUNDLE_VERSION, "0");
 
-		// Copy old values into new manifest, when they
-		// exist in the old one, but not in the new one
-		merge(manifest, dot.getManifest());
-
 		// Remove all the headers mentioned in -removeheaders
 		Instructions instructions = new Instructions(getProperty(REMOVEHEADERS));
 		Collection<Object> result = instructions.select(main.keySet(), false);
 		main.keySet().removeAll(result);
 
-		dot.setManifest(manifest);
+		// We should not set the manifest here, this is in general done
+		// by the caller.
+		// dot.setManifest(manifest);
 		return manifest;
 	}
 
@@ -561,7 +599,8 @@
 		return value.trim();
 	}
 
-	public String _bsn(@SuppressWarnings("unused") String args[]) {
+	public String _bsn(@SuppressWarnings("unused")
+	String args[]) {
 		return getBsn();
 	}
 
@@ -638,6 +677,10 @@
 		return uses;
 	}
 
+	public MultiMap<PackageRef,PackageRef> getAPIUses() {
+		return apiUses;
+	}
+
 	/**
 	 * Get the version for this bnd
 	 * 
@@ -1358,7 +1401,8 @@
 	 * @param value
 	 * @throws Exception
 	 */
-	void getExportVersionsFromPackageInfo(PackageRef packageRef, Resource r, Packages classpathExports) throws Exception {
+	void getExportVersionsFromPackageInfo(PackageRef packageRef, Resource r, Packages classpathExports)
+			throws Exception {
 		if (r == null)
 			return;
 
@@ -1701,16 +1745,19 @@
 						if (info != null)
 							contained.merge(packageRef, false, info);
 
-						Set<PackageRef> set = Create.set();
 
 						// Look at the referred packages
 						// and copy them to our baseline
+						Set<PackageRef> refs = Create.set();
 						for (PackageRef p : clazz.getReferred()) {
 							referred.put(p);
-							set.add(p);
+							refs.add(p);
 						}
-						set.remove(packageRef);
-						uses.addAll(packageRef, set);
+						refs.remove(packageRef);
+						uses.addAll(packageRef, refs);
+	
+						// Collect the API
+						apiUses.addAll(packageRef, clazz.getAPIUses());
 					}
 				}
 			}
@@ -2294,7 +2341,8 @@
 		return ees.first();
 	}
 
-	public String _ee(@SuppressWarnings("unused") String args[]) {
+	public String _ee(@SuppressWarnings("unused")
+	String args[]) {
 		return getLowestEE().getEE();
 	}
 
@@ -2328,8 +2376,9 @@
 		} else
 			outputDir = getBase();
 
-		if (getBundleSymbolicName() != null) {
-			String bsn = getBundleSymbolicName();
+		Entry<String,Attrs> name = getBundleSymbolicName();
+		if (name != null) {
+			String bsn = name.getKey();
 			String version = getBundleVersion();
 			Version v = Version.parseVersion(version);
 			String outputName = bsn + "-" + v.getWithoutQualifier() + Constants.DEFAULT_JAR_EXTENSION;
@@ -2411,4 +2460,25 @@
 		if (version != null && getBundleVersion() == null)
 			setBundleVersion(version);
 	}
+
+	/**
+	 * Remove the own references and optionall java references from the uses lib
+	 * @param apiUses
+	 * @param removeJava
+	 * @return
+	 */
+	public MultiMap<PackageRef,PackageRef> cleanupUses(MultiMap<PackageRef,PackageRef> apiUses, boolean removeJava) {
+		MultiMap<PackageRef,PackageRef> map = new MultiMap<PackageRef,PackageRef>(apiUses);
+		for ( Entry<PackageRef,List<PackageRef>> e : map.entrySet()) {
+			e.getValue().remove(e.getKey());
+			if (!removeJava)
+				continue;
+			
+			for (Iterator<PackageRef> i = e.getValue().iterator(); i.hasNext(); ) {
+				if ( i.next().isJava())
+					i.remove();
+			}
+		}		
+		return map;
+	}
 }
diff --git a/bundleplugin/src/main/java/aQute/bnd/osgi/AnalyzerMessages.java b/bundleplugin/src/main/java/aQute/bnd/osgi/AnalyzerMessages.java
new file mode 100644
index 0000000..aac1a52
--- /dev/null
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/AnalyzerMessages.java
@@ -0,0 +1,13 @@
+package aQute.bnd.osgi;
+
+import java.util.*;
+
+import aQute.bnd.osgi.Descriptors.PackageRef;
+import aQute.libg.reporter.*;
+
+public interface AnalyzerMessages extends Messages {
+
+	WARNING Export_Has_PrivateReferences_(PackageRef exported, int count, Collection<PackageRef> local);
+/**/
+}
+
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Annotation.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Annotation.java
similarity index 95%
rename from bundleplugin/src/main/java/aQute/lib/osgi/Annotation.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/Annotation.java
index e364949..37c4cad 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Annotation.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Annotation.java
@@ -1,10 +1,10 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.lang.annotation.*;
 import java.util.*;
 
 import aQute.bnd.annotation.metatype.*;
-import aQute.lib.osgi.Descriptors.TypeRef;
+import aQute.bnd.osgi.Descriptors.TypeRef;
 
 public class Annotation {
 	TypeRef				name;
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Builder.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Builder.java
similarity index 99%
rename from bundleplugin/src/main/java/aQute/lib/osgi/Builder.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/Builder.java
index 152f326..a5bb7f6 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Builder.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Builder.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 import java.util.*;
@@ -10,18 +10,18 @@
 import aQute.bnd.component.*;
 import aQute.bnd.differ.*;
 import aQute.bnd.differ.Baseline.Info;
+import aQute.bnd.header.*;
 import aQute.bnd.make.*;
 import aQute.bnd.make.component.*;
 import aQute.bnd.make.metatype.*;
 import aQute.bnd.maven.*;
+import aQute.bnd.osgi.Descriptors.PackageRef;
+import aQute.bnd.osgi.Descriptors.TypeRef;
 import aQute.bnd.service.*;
 import aQute.bnd.service.RepositoryPlugin.Strategy;
 import aQute.bnd.service.diff.*;
 import aQute.lib.collections.*;
-import aQute.lib.osgi.Descriptors.PackageRef;
-import aQute.lib.osgi.Descriptors.TypeRef;
 import aQute.libg.generics.*;
-import aQute.libg.header.*;
 
 /**
  * Include-Resource: ( [name '=' ] file )+ Private-Package: package-decl ( ','
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/BundleId.java b/bundleplugin/src/main/java/aQute/bnd/osgi/BundleId.java
similarity index 96%
rename from bundleplugin/src/main/java/aQute/lib/osgi/BundleId.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/BundleId.java
index 87fc25f..2d711ad 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/BundleId.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/BundleId.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 /**
  * Holds the bundle bsn + version pair
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/ClassDataCollector.java b/bundleplugin/src/main/java/aQute/bnd/osgi/ClassDataCollector.java
similarity index 97%
rename from bundleplugin/src/main/java/aQute/lib/osgi/ClassDataCollector.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/ClassDataCollector.java
index 04a8406..c8d79c6 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/ClassDataCollector.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/ClassDataCollector.java
@@ -1,6 +1,6 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
-import aQute.lib.osgi.Descriptors.TypeRef;
+import aQute.bnd.osgi.Descriptors.TypeRef;
 
 public class ClassDataCollector {
 	public void classBegin(@SuppressWarnings("unused") int access, @SuppressWarnings("unused") TypeRef name) {}
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Clazz.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Clazz.java
similarity index 92%
rename from bundleplugin/src/main/java/aQute/lib/osgi/Clazz.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/Clazz.java
index 87ce8a5..dc8784c 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Clazz.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Clazz.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 import java.lang.annotation.*;
@@ -7,9 +7,9 @@
 import java.util.*;
 import java.util.regex.*;
 
-import aQute.lib.osgi.Descriptors.Descriptor;
-import aQute.lib.osgi.Descriptors.PackageRef;
-import aQute.lib.osgi.Descriptors.TypeRef;
+import aQute.bnd.osgi.Descriptors.Descriptor;
+import aQute.bnd.osgi.Descriptors.PackageRef;
+import aQute.bnd.osgi.Descriptors.TypeRef;
 import aQute.libg.generics.*;
 
 public class Clazz {
@@ -337,8 +337,6 @@
 	int					accessx		= 0;
 	String				sourceFile;
 	Set<TypeRef>		xref;
-	Set<Integer>		classes;
-	Set<Integer>		descriptors;
 	Set<TypeRef>		annotations;
 	int					forName		= 0;
 	int					class$		= 0;
@@ -348,9 +346,10 @@
 	Resource			resource;
 	FieldDef			last		= null;
 	boolean				deprecated;
-
+	Set<PackageRef>		api;
 	final Analyzer		analyzer;
 
+
 	public Clazz(Analyzer analyzer, String path, Resource resource) {
 		this.path = path;
 		this.resource = resource;
@@ -389,9 +388,7 @@
 
 	Set<TypeRef> parseClassFile(DataInputStream in) throws Exception {
 		xref = new HashSet<TypeRef>();
-		classes = new HashSet<Integer>();
-		descriptors = new HashSet<Integer>();
-
+		
 		boolean crawl = cd != null; // Crawl the byte code if we have a
 		// collector
 		int magic = in.readInt();
@@ -466,16 +463,36 @@
 		}
 
 		pool(pool, intPool);
+		
+		// All name& type and class constant records contain descriptors we must treat
+		// as references, though not API
+		
+		for ( Object o : pool ) {
+			if ( o == null)
+				continue;
+			
+			if (o instanceof Assoc && ((Assoc)o).tag ==12 ) {
+				referTo( ((Assoc)o).b, 0); // Descriptor
+			} else if ( o instanceof ClassConstant) {
+				String binaryClassName = (String) pool[((ClassConstant)o).cname];
+				TypeRef typeRef = analyzer.getTypeRef(binaryClassName);
+				referTo( typeRef, 0);
+			}
+		}
+		
 		/*
 		 * Parse after the constant pool, code thanks to Hans Christian
 		 * Falkenberg
 		 */
 
 		accessx = in.readUnsignedShort(); // access
-
+		if ( Modifier.isPublic(accessx))
+			api = new HashSet<PackageRef>();
+		
 		int this_class = in.readUnsignedShort();
 		className = analyzer.getTypeRef((String) pool[intPool[this_class]]);
-
+		referTo(className, Modifier.PUBLIC);
+		
 		try {
 
 			if (cd != null) {
@@ -490,7 +507,7 @@
 			}
 
 			if (zuper != null) {
-				referTo(zuper);
+				referTo(zuper, accessx);
 				if (cd != null)
 					cd.extendsClass(zuper);
 			}
@@ -498,8 +515,10 @@
 			int interfacesCount = in.readUnsignedShort();
 			if (interfacesCount > 0) {
 				interfaces = new TypeRef[interfacesCount];
-				for (int i = 0; i < interfacesCount; i++)
+				for (int i = 0; i < interfacesCount; i++) {
 					interfaces[i] = analyzer.getTypeRef((String) pool[intPool[in.readUnsignedShort()]]);
+					referTo(interfaces[i],accessx);
+				}
 				if (cd != null)
 					cd.implementsInterfaces(interfaces);
 			}
@@ -526,8 +545,9 @@
 				}
 				if (cd != null)
 					cd.field(last = new FieldDef(access_flags, name, pool[descriptor_index].toString()));
-				descriptors.add(Integer.valueOf(descriptor_index));
-				doAttributes(in, ElementType.FIELD, false);
+				
+				referTo( descriptor_index, access_flags);
+				doAttributes(in, ElementType.FIELD, false, access_flags);
 			}
 
 			//
@@ -562,7 +582,7 @@
 				int access_flags = in.readUnsignedShort();
 				int name_index = in.readUnsignedShort();
 				int descriptor_index = in.readUnsignedShort();
-				descriptors.add(Integer.valueOf(descriptor_index));
+				referTo(descriptor_index, access_flags);
 				String name = pool[name_index].toString();
 				String descriptor = pool[descriptor_index].toString();
 				if (cd != null) {
@@ -572,40 +592,20 @@
 				}
 
 				if ("<init>".equals(name)) {
-					doAttributes(in, ElementType.CONSTRUCTOR, crawl);
+					doAttributes(in, ElementType.CONSTRUCTOR, crawl, access_flags);
 				} else {
-					doAttributes(in, ElementType.METHOD, crawl);
+					doAttributes(in, ElementType.METHOD, crawl, access_flags);
 				}
 			}
 			if (cd != null)
 				cd.memberEnd();
 
-			doAttributes(in, ElementType.TYPE, false);
-
-			//
-			// Now iterate over all classes we found and
-			// parse those as well. We skip duplicates
-			//
-
-			for (int n : classes) {
-				String descr = (String) pool[n];
-
-				TypeRef clazz = analyzer.getTypeRef(descr);
-				referTo(clazz);
-			}
+			doAttributes(in, ElementType.TYPE, false, accessx);
 
 			//
 			// Parse all the descriptors we found
 			//
 
-			for (Iterator<Integer> e = descriptors.iterator(); e.hasNext();) {
-				Integer index = e.next();
-				String prototype = (String) pool[index.intValue()];
-				if (prototype != null)
-					parseDescriptor(prototype);
-				else
-					System.err.println("Unrecognized descriptor: " + index);
-			}
 			Set<TypeRef> xref = this.xref;
 			reset();
 			return xref;
@@ -640,7 +640,6 @@
 	protected void nameAndType(DataInputStream in, int poolIndex, byte tag) throws IOException {
 		int name_index = in.readUnsignedShort();
 		int descriptor_index = in.readUnsignedShort();
-		descriptors.add(Integer.valueOf(descriptor_index));
 		pool[poolIndex] = new Assoc(tag, name_index, descriptor_index);
 	}
 
@@ -673,7 +672,6 @@
 	 */
 	protected void constantClass(DataInputStream in, int poolIndex) throws IOException {
 		int class_index = in.readUnsignedShort();
-		classes.add(Integer.valueOf(class_index));
 		intPool[poolIndex] = class_index;
 		ClassConstant c = new ClassConstant(class_index);
 		pool[poolIndex] = c;
@@ -755,13 +753,14 @@
 	 * 
 	 * @param in
 	 *            The stream
+	 * @param access_flags 
 	 * @throws Exception
 	 */
-	private void doAttributes(DataInputStream in, ElementType member, boolean crawl) throws Exception {
+	private void doAttributes(DataInputStream in, ElementType member, boolean crawl, int access_flags) throws Exception {
 		int attributesCount = in.readUnsignedShort();
 		for (int j = 0; j < attributesCount; j++) {
 			// skip name CONSTANT_Utf8 pointer
-			doAttribute(in, member, crawl);
+			doAttribute(in, member, crawl, access_flags);
 		}
 	}
 
@@ -770,9 +769,10 @@
 	 * 
 	 * @param in
 	 *            the data stream
+	 * @param access_flags 
 	 * @throws Exception
 	 */
-	private void doAttribute(DataInputStream in, ElementType member, boolean crawl) throws Exception {
+	private void doAttribute(DataInputStream in, ElementType member, boolean crawl, int access_flags) throws Exception {
 		int attribute_name_index = in.readUnsignedShort();
 		String attributeName = (String) pool[attribute_name_index];
 		long attribute_length = in.readInt();
@@ -797,7 +797,7 @@
 		else if ("Code".equals(attributeName) && crawl)
 			doCode(in);
 		else if ("Signature".equals(attributeName))
-			doSignature(in, member);
+			doSignature(in, member, access_flags);
 		else if ("ConstantValue".equals(attributeName))
 			doConstantValue(in);
 		else {
@@ -901,20 +901,14 @@
 	 * </pre>
 	 * 
 	 * @param member
+	 * @param access_flags 
 	 */
 
-	void doSignature(DataInputStream in, ElementType member) throws IOException {
+	void doSignature(DataInputStream in, ElementType member, int access_flags) throws IOException {
 		int signature_index = in.readUnsignedShort();
 		String signature = (String) pool[signature_index];
 
-		// s.println("Signature " + signature );
-
-		// // The type signature is kind of weird,
-		// // lets skip it for now. Seems to be some kind of
-		// // type variable name index but it does not seem to
-		// // conform to the language specification.
-		// if (member != ElementType.TYPE)
-		parseDescriptor(signature);
+		parseDescriptor(signature, access_flags);
 
 		if (last != null)
 			last.signature = signature;
@@ -972,7 +966,7 @@
 		crawl(code);
 		int exception_table_length = in.readUnsignedShort();
 		in.skipBytes(exception_table_length * 8);
-		doAttributes(in, ElementType.METHOD, false);
+		doAttributes(in, ElementType.METHOD, false, 0);
 	}
 
 	/**
@@ -1027,7 +1021,7 @@
 						String fqn = (String) pool[intPool[lastReference]];
 						if (!fqn.equals("class") && fqn.indexOf('.') > 0) {
 							TypeRef clazz = analyzer.getTypeRefFromFQN(fqn);
-							referTo(clazz);
+							referTo(clazz, 0);
 						}
 						lastReference = -1;
 					}
@@ -1107,7 +1101,7 @@
 		annotations.add(tr);
 
 		if (policy == RetentionPolicy.RUNTIME) {
-			descriptors.add(Integer.valueOf(type_index));
+			referTo(type_index,0);
 			hasRuntimeAnnotations = true;
 		} else {
 			hasClassAnnotations = true;
@@ -1155,14 +1149,14 @@
 			case 'e' : // enum constant
 				int type_name_index = in.readUnsignedShort();
 				if (policy == RetentionPolicy.RUNTIME)
-					descriptors.add(Integer.valueOf(type_name_index));
+					referTo(type_name_index,0);
 				int const_name_index = in.readUnsignedShort();
 				return pool[const_name_index];
 
 			case 'c' : // Class
 				int class_info_index = in.readUnsignedShort();
 				if (policy == RetentionPolicy.RUNTIME)
-					descriptors.add(Integer.valueOf(class_info_index));
+					referTo(class_info_index,0);
 				return pool[class_info_index];
 
 			case '@' : // Annotation type
@@ -1187,7 +1181,7 @@
 	 * @param packageRef
 	 *            A '.' delimited package name
 	 */
-	void referTo(TypeRef typeRef) {
+	void referTo(TypeRef typeRef, int modifiers) {
 		if (xref != null)
 			xref.add(typeRef);
 		if (typeRef.isPrimitive())
@@ -1198,6 +1192,14 @@
 			return;
 
 		imports.add(packageRef);
+		
+		if ( api != null && (Modifier.isPublic(modifiers)||Modifier.isProtected(modifiers)))
+			api.add(packageRef);
+	}
+	
+	void referTo( int index, int modifiers) {
+		String descriptor = (String) pool[index];
+		parseDescriptor(descriptor, modifiers);
 	}
 
 	/**
@@ -1217,19 +1219,20 @@
 	 * @param rover
 	 *            The pointer to start at
 	 */
-	public void parseDescriptor(String descriptor) {
+	
+	public void parseDescriptor(String descriptor, int modifiers) {
 		// Some descriptors are weird, they start with a generic
 		// declaration that contains ':', not sure what they mean ...
 		int rover = 0;
 		if (descriptor.charAt(0) == '<') {
-			rover = parseFormalTypeParameters(descriptor, rover);
+			rover = parseFormalTypeParameters(descriptor, rover, modifiers);
 		}
 
 		if (descriptor.charAt(rover) == '(') {
-			rover = parseReferences(descriptor, rover + 1, ')');
+			rover = parseReferences(descriptor, rover + 1, ')', modifiers);
 			rover++;
 		}
-		parseReferences(descriptor, rover, (char) 0);
+		parseReferences(descriptor, rover, (char) 0, modifiers);
 	}
 
 	/**
@@ -1244,10 +1247,10 @@
 	 *            The end character or 0
 	 * @return the last index processed, one character after the delimeter
 	 */
-	int parseReferences(String descriptor, int rover, char delimiter) {
+	int parseReferences(String descriptor, int rover, char delimiter, int modifiers) {
 		int r = rover;
 		while (r < descriptor.length() && descriptor.charAt(r) != delimiter) {
-			r = parseReference(descriptor, r);
+			r = parseReference(descriptor, r, modifiers);
 		}
 		return r;
 	}
@@ -1262,14 +1265,14 @@
 	 *            The place to start
 	 * @return The return index after the reference
 	 */
-	int parseReference(String descriptor, int rover) {
+	int parseReference(String descriptor, int rover, int modifiers) {
 		int r = rover;
 		char c = descriptor.charAt(r);
 		while (c == '[')
 			c = descriptor.charAt(++r);
 
 		if (c == '<') {
-			r = parseReferences(descriptor, r + 1, '>');
+			r = parseReferences(descriptor, r + 1, '>', modifiers);
 		} else if (c == 'T') {
 			// Type variable name
 			r++;
@@ -1280,7 +1283,7 @@
 			r++;
 			while ((c = descriptor.charAt(r)) != ';') {
 				if (c == '<') {
-					r = parseReferences(descriptor, r + 1, '>');
+					r = parseReferences(descriptor, r + 1, '>', modifiers);
 				} else
 					sb.append(c);
 				r++;
@@ -1289,7 +1292,7 @@
 			if (cd != null)
 				cd.addReference(ref);
 
-			referTo(ref);
+			referTo(ref, modifiers);
 		} else {
 			if ("+-*BCDFIJSZV".indexOf(c) < 0)
 				;// System.err.println("Should not skip: " + c);
@@ -1308,7 +1311,7 @@
 	 * @param index
 	 * @return
 	 */
-	private int parseFormalTypeParameters(String descriptor, int index) {
+	private int parseFormalTypeParameters(String descriptor, int index, int modifiers) {
 		index++;
 		while (descriptor.charAt(index) != '>') {
 			// Skip IDENTIFIER
@@ -1322,14 +1325,14 @@
 
 			// Class Bound?
 			if (c == 'L' || c == 'T') {
-				index = parseReference(descriptor, index); // class reference
+				index = parseReference(descriptor, index, modifiers); // class reference
 				c = descriptor.charAt(index);
 			}
 
 			// Interface Bounds
 			while (c == ':') {
 				index++;
-				index = parseReference(descriptor, index);
+				index = parseReference(descriptor, index, modifiers);
 				c = descriptor.charAt(index);
 			} // for each interface
 
@@ -1364,8 +1367,6 @@
 		pool = null;
 		intPool = null;
 		xref = null;
-		classes = null;
-		descriptors = null;
 	}
 
 	public boolean is(QUERY query, Instruction instr, Analyzer analyzer) throws Exception {
@@ -1621,4 +1622,10 @@
 	public boolean isAnnotation() {
 		return (accessx & ACC_ANNOTATION) != 0;
 	}
+
+	public Set<PackageRef> getAPIUses() {
+		if ( api == null)
+			return Collections.emptySet();
+		return  api;
+	}
 }
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/CombinedResource.java b/bundleplugin/src/main/java/aQute/bnd/osgi/CombinedResource.java
similarity index 96%
rename from bundleplugin/src/main/java/aQute/lib/osgi/CombinedResource.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/CombinedResource.java
index 3886c48..d38f416 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/CombinedResource.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/CombinedResource.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 import java.util.*;
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/CommandResource.java b/bundleplugin/src/main/java/aQute/bnd/osgi/CommandResource.java
similarity index 98%
rename from bundleplugin/src/main/java/aQute/lib/osgi/CommandResource.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/CommandResource.java
index 47ba4ac..eb66635 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/CommandResource.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/CommandResource.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Constants.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Constants.java
similarity index 97%
rename from bundleplugin/src/main/java/aQute/lib/osgi/Constants.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/Constants.java
index 767e516..755e9a2 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Constants.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Constants.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.nio.charset.*;
 import java.util.*;
@@ -52,11 +52,11 @@
 	String							CREATED_BY									= "Created-By";
 	String							TOOL										= "Tool";
 	String							TESTCASES									= "Test-Cases";
-        /**
-         * @deprecated Use {@link Constants#TESTCASES}.
-         */
-        @Deprecated
-        String                                                  TESTSUITES                                                                      = "Test-Suites";
+	/**
+	 * @deprecated Use {@link Constants#TESTCASES}.
+	 */
+	@Deprecated
+	String							TESTSUITES									= "Test-Suites";
 	String							SIGNATURE_TEST								= "-signaturetest";
 
 	String							headers[]									= {
@@ -66,7 +66,7 @@
 			BUNDLE_NAME, BUNDLE_NATIVECODE, BUNDLE_REQUIREDEXECUTIONENVIRONMENT, BUNDLE_SYMBOLICNAME, BUNDLE_VERSION,
 			FRAGMENT_HOST, PRIVATE_PACKAGE, IGNORE_PACKAGE, INCLUDE_RESOURCE, REQUIRE_BUNDLE, IMPORT_SERVICE,
 			EXPORT_SERVICE, CONDITIONAL_PACKAGE, BND_LASTMODIFIED, TESTCASES, SIGNATURE_TEST, REQUIRE_CAPABILITY,
-			PROVIDE_CAPABILITY
+			PROVIDE_CAPABILITY, BUNDLE_ICON
 																				};
 
 	String							BUILDPATH									= "-buildpath";
@@ -82,6 +82,7 @@
 	String							DSANNOTATIONS								= "-dsannotations";
 	String							DONOTCOPY									= "-donotcopy";
 	String							DEBUG										= "-debug";
+	String							EXPERIMENTS									= "-experiments";
 	String							EXPORT_CONTENTS								= "-exportcontents";
 	String							FAIL_OK										= "-failok";
 	String							INCLUDE										= "-include";
@@ -112,13 +113,14 @@
 	String							RUNREPOS									= "-runrepos";
 
 	/**
-	 * @deprecated This is for support of the legacy OBR requirement format, use {@link #RUNREQUIRES} for new format.
+	 * @deprecated This is for support of the legacy OBR requirement format, use
+	 *             {@link #RUNREQUIRES} for new format.
 	 */
 	@Deprecated
 	String							RUNREQUIRE									= "-runrequire";
-	
+
 	String							RUNREQUIRES									= "-runrequires";
-	
+
 	String							RUNEE										= "-runee";
 	String							RUNPATH										= "-runpath";
 	String							RUNSTORAGE									= "-runstorage";
@@ -156,7 +158,7 @@
 			PROVIDER_POLICY, REMOVEHEADERS, RESOURCEONLY, SOURCES, SOURCEPATH, SOURCES, SOURCEPATH, SUB, RUNBUNDLES,
 			RUNPATH, RUNSYSTEMPACKAGES, RUNPROPERTIES, REPORTNEWER, UNDERTEST, TESTPATH, TESTPACKAGES, TESTREPORT,
 			VERBOSE, NOMANIFEST, DEPLOYREPO, RELEASEREPO, SAVEMANIFEST, RUNVM, WAB, WABLIB, RUNFRAMEWORK, RUNTRACE,
-			TESTCONTINUOUS, SNAPSHOT, NAMESECTION, DIGESTS, DSANNOTATIONS
+			TESTCONTINUOUS, SNAPSHOT, NAMESECTION, DIGESTS, DSANNOTATIONS, EXPERIMENTS
 																				};
 
 	// Ignore bundle specific headers. These bundles do not make
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Descriptors.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Descriptors.java
similarity index 99%
rename from bundleplugin/src/main/java/aQute/lib/osgi/Descriptors.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/Descriptors.java
index f9c6a31..b435b27 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Descriptors.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Descriptors.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.util.*;
 
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Domain.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Domain.java
similarity index 81%
rename from bundleplugin/src/main/java/aQute/lib/osgi/Domain.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/Domain.java
index e705534..828f1cf 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Domain.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Domain.java
@@ -1,12 +1,13 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
-import static aQute.lib.osgi.Constants.*;
+import static aQute.bnd.osgi.Constants.*;
 
 import java.util.*;
+import java.util.Map.Entry;
 import java.util.jar.*;
 
-import aQute.libg.header.*;
-import aQute.libg.version.*;
+import aQute.bnd.header.*;
+import aQute.lib.converter.*;
 import aQute.service.reporter.*;
 
 /**
@@ -234,8 +235,11 @@
 		return Processor.isTrue(get(SOURCES));
 	}
 
-	public String getBundleSymbolicName() {
-		return get(BUNDLE_SYMBOLICNAME);
+	public Map.Entry<String,Attrs> getBundleSymbolicName() {
+		Parameters p = getParameters(BUNDLE_SYMBOLICNAME);
+		if (p.isEmpty())
+			return null;
+		return p.entrySet().iterator().next();
 	}
 
 	public void setBundleSymbolicName(String s) {
@@ -262,4 +266,39 @@
 	public boolean isFailOk() {
 		return Processor.isTrue(get(FAIL_OK));
 	}
+
+	/**
+	 * Find an icon with the requested size in the list of icons.
+	 * 
+	 * @param requestedSize
+	 *            the number of pixels desired
+	 * @return null or a the selected URI (which may be relative)
+	 */
+	public String getIcon(int requestedSize) throws Exception {
+		String spec = get(Constants.BUNDLE_ICON);
+		if (spec == null)
+			return null;
+
+		Parameters p = OSGiHeader.parseHeader(spec);
+		int dist = Integer.MAX_VALUE;
+		String selected = null;
+
+		for (Entry<String,Attrs> e : p.entrySet()) {
+			String url = e.getKey();
+			if (selected == null)
+				selected = url;
+
+			int size = Converter.cnv(Integer.class, e.getValue().get("size"));
+			if (size != 0 && Math.abs(requestedSize - size) < dist) {
+				dist = Math.abs(requestedSize - size);
+				selected = url;
+			}
+		}
+		return selected;
+	}
+
+	public void setConditionalPackage(String string) {
+		set(CONDITIONAL_PACKAGE, string);
+		
+	}
 }
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/EmbeddedResource.java b/bundleplugin/src/main/java/aQute/bnd/osgi/EmbeddedResource.java
similarity index 98%
rename from bundleplugin/src/main/java/aQute/lib/osgi/EmbeddedResource.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/EmbeddedResource.java
index 3aff084..0aad605 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/EmbeddedResource.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/EmbeddedResource.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 import java.util.zip.*;
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/FileResource.java b/bundleplugin/src/main/java/aQute/bnd/osgi/FileResource.java
similarity index 98%
rename from bundleplugin/src/main/java/aQute/lib/osgi/FileResource.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/FileResource.java
index 4d2459d..cd18cf5 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/FileResource.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/FileResource.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 import java.util.regex.*;
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Instruction.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Instruction.java
similarity index 99%
rename from bundleplugin/src/main/java/aQute/lib/osgi/Instruction.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/Instruction.java
index bfb80bb..a660169 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Instruction.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Instruction.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 import java.util.regex.*;
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Instructions.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Instructions.java
similarity index 98%
rename from bundleplugin/src/main/java/aQute/lib/osgi/Instructions.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/Instructions.java
index 6ac56dd..bfb7e28 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Instructions.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Instructions.java
@@ -1,8 +1,8 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.util.*;
 
-import aQute.libg.header.*;
+import aQute.bnd.header.*;
 
 public class Instructions implements Map<Instruction,Attrs> {
 	private LinkedHashMap<Instruction,Attrs>	map;
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Jar.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Jar.java
similarity index 95%
rename from bundleplugin/src/main/java/aQute/lib/osgi/Jar.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/Jar.java
index 725b065..b864297 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Jar.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Jar.java
@@ -1,8 +1,9 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import static aQute.lib.io.IO.*;
 
 import java.io.*;
+import java.net.*;
 import java.security.*;
 import java.util.*;
 import java.util.jar.*;
@@ -779,4 +780,34 @@
 		if (closed)
 			throw new RuntimeException("Already closed " + name);
 	}
+
+	/**
+	 * Return a data uri from the JAR. The data must be less than 32k
+	 * 
+	 * @param jar
+	 *            The jar to load the data from
+	 * @param path
+	 *            the path in the jar
+	 * @param mime
+	 *            the mime type
+	 * @return a URI or null if conversion could not take place
+	 */
+
+	public URI getDataURI(String path, String mime, int max) throws Exception {
+		Resource r = getResource(path);
+
+		if (r.size() >= max || r.size() <= 0)
+			return null;
+
+		byte[] data = new byte[(int) r.size()];
+		DataInputStream din = new DataInputStream(r.openInputStream());
+		try {
+			din.readFully(data);
+			String encoded = Base64.encodeBase64(data);
+			return new URI("data:" + mime + ";base64," + encoded);
+		}
+		finally {
+			din.close();
+		}
+	}
 }
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/JarResource.java b/bundleplugin/src/main/java/aQute/bnd/osgi/JarResource.java
similarity index 95%
rename from bundleplugin/src/main/java/aQute/lib/osgi/JarResource.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/JarResource.java
index c51aba3..2fb5c54 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/JarResource.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/JarResource.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Macro.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Macro.java
similarity index 99%
rename from bundleplugin/src/main/java/aQute/lib/osgi/Macro.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/Macro.java
index 8730b69..b6a6087 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Macro.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Macro.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 import java.lang.reflect.*;
@@ -10,7 +10,6 @@
 import aQute.lib.collections.*;
 import aQute.lib.io.*;
 import aQute.libg.sed.*;
-import aQute.libg.version.*;
 
 /**
  * Provide a macro processor. This processor can replace variables in strings
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/OpCodes.java b/bundleplugin/src/main/java/aQute/bnd/osgi/OpCodes.java
similarity index 99%
rename from bundleplugin/src/main/java/aQute/lib/osgi/OpCodes.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/OpCodes.java
index 17b6d2b..4299556 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/OpCodes.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/OpCodes.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 public class OpCodes {
 	final static short	nop				= 0x00;			// [No change]
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Packages.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Packages.java
similarity index 97%
rename from bundleplugin/src/main/java/aQute/lib/osgi/Packages.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/Packages.java
index 64e4a4e..53a92da 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Packages.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Packages.java
@@ -1,9 +1,9 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.util.*;
 
-import aQute.lib.osgi.Descriptors.PackageRef;
-import aQute.libg.header.*;
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.Descriptors.PackageRef;
 
 public class Packages implements Map<PackageRef,Attrs> {
 	private LinkedHashMap<PackageRef,Attrs>	map;
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/PreprocessResource.java b/bundleplugin/src/main/java/aQute/bnd/osgi/PreprocessResource.java
similarity index 97%
rename from bundleplugin/src/main/java/aQute/lib/osgi/PreprocessResource.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/PreprocessResource.java
index 8b3f79e..a1b5095 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/PreprocessResource.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/PreprocessResource.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Processor.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Processor.java
similarity index 99%
rename from bundleplugin/src/main/java/aQute/lib/osgi/Processor.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/Processor.java
index ef4013f..17b4df3 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Processor.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Processor.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 import java.net.*;
@@ -8,11 +8,11 @@
 import java.util.jar.*;
 import java.util.regex.*;
 
+import aQute.bnd.header.*;
 import aQute.bnd.service.*;
 import aQute.lib.collections.*;
 import aQute.lib.io.*;
 import aQute.libg.generics.*;
-import aQute.libg.header.*;
 import aQute.service.reporter.*;
 
 public class Processor extends Domain implements Reporter, Registry, Constants, Closeable {
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Resource.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Resource.java
similarity index 91%
rename from bundleplugin/src/main/java/aQute/lib/osgi/Resource.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/Resource.java
index 6605eef..8be81aa 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Resource.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Resource.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/TagResource.java b/bundleplugin/src/main/java/aQute/bnd/osgi/TagResource.java
similarity index 95%
rename from bundleplugin/src/main/java/aQute/lib/osgi/TagResource.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/TagResource.java
index e138175..183f1cd 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/TagResource.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/TagResource.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/URLResource.java b/bundleplugin/src/main/java/aQute/bnd/osgi/URLResource.java
similarity index 98%
rename from bundleplugin/src/main/java/aQute/lib/osgi/URLResource.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/URLResource.java
index 7c4772f..2cd2375 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/URLResource.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/URLResource.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 import java.net.*;
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Verifier.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Verifier.java
similarity index 99%
rename from bundleplugin/src/main/java/aQute/lib/osgi/Verifier.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/Verifier.java
index 2759049..eac2f6f 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Verifier.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Verifier.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 import java.util.*;
@@ -6,12 +6,12 @@
 import java.util.jar.*;
 import java.util.regex.*;
 
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.Descriptors.PackageRef;
+import aQute.bnd.osgi.Descriptors.TypeRef;
 import aQute.lib.base64.*;
 import aQute.lib.io.*;
-import aQute.lib.osgi.Descriptors.PackageRef;
-import aQute.lib.osgi.Descriptors.TypeRef;
 import aQute.libg.cryptography.*;
-import aQute.libg.header.*;
 import aQute.libg.qtokens.*;
 
 public class Verifier extends Processor {
diff --git a/bundleplugin/src/main/java/aQute/libg/version/Version.java b/bundleplugin/src/main/java/aQute/bnd/osgi/Version.java
similarity index 98%
rename from bundleplugin/src/main/java/aQute/libg/version/Version.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/Version.java
index 77d21e4..951ad25 100755
--- a/bundleplugin/src/main/java/aQute/libg/version/Version.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/Version.java
@@ -1,4 +1,4 @@
-package aQute.libg.version;
+package aQute.bnd.osgi;
 
 import java.util.regex.*;
 
diff --git a/bundleplugin/src/main/java/aQute/libg/version/VersionRange.java b/bundleplugin/src/main/java/aQute/bnd/osgi/VersionRange.java
similarity index 98%
rename from bundleplugin/src/main/java/aQute/libg/version/VersionRange.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/VersionRange.java
index 3e00c76..8ff69a3 100755
--- a/bundleplugin/src/main/java/aQute/libg/version/VersionRange.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/VersionRange.java
@@ -1,4 +1,4 @@
-package aQute.libg.version;
+package aQute.bnd.osgi;
 
 import java.util.*;
 import java.util.regex.*;
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/WriteResource.java b/bundleplugin/src/main/java/aQute/bnd/osgi/WriteResource.java
similarity index 98%
rename from bundleplugin/src/main/java/aQute/lib/osgi/WriteResource.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/WriteResource.java
index 5cc5229..494c678 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/WriteResource.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/WriteResource.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/ZipResource.java b/bundleplugin/src/main/java/aQute/bnd/osgi/ZipResource.java
similarity index 98%
rename from bundleplugin/src/main/java/aQute/lib/osgi/ZipResource.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/ZipResource.java
index f5e2095..edf6a68 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/ZipResource.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/ZipResource.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi;
+package aQute.bnd.osgi;
 
 import java.io.*;
 import java.util.*;
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/eclipse/EclipseClasspath.java b/bundleplugin/src/main/java/aQute/bnd/osgi/eclipse/EclipseClasspath.java
similarity index 99%
rename from bundleplugin/src/main/java/aQute/lib/osgi/eclipse/EclipseClasspath.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/eclipse/EclipseClasspath.java
index c146477..5415985 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/eclipse/EclipseClasspath.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/eclipse/EclipseClasspath.java
@@ -1,4 +1,4 @@
-package aQute.lib.osgi.eclipse;
+package aQute.bnd.osgi.eclipse;
 
 import java.io.*;
 import java.util.*;
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/packageinfo b/bundleplugin/src/main/java/aQute/bnd/osgi/packageinfo
similarity index 100%
rename from bundleplugin/src/main/java/aQute/lib/osgi/packageinfo
rename to bundleplugin/src/main/java/aQute/bnd/osgi/packageinfo
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/resource/CapReq.java b/bundleplugin/src/main/java/aQute/bnd/osgi/resource/CapReq.java
similarity index 91%
rename from bundleplugin/src/main/java/aQute/lib/osgi/resource/CapReq.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/resource/CapReq.java
index c175060..d5fe2c6 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/resource/CapReq.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/resource/CapReq.java
@@ -1,13 +1,8 @@
-package aQute.lib.osgi.resource;
+package aQute.bnd.osgi.resource;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 
-import org.osgi.resource.Capability;
-import org.osgi.resource.Namespace;
-import org.osgi.resource.Requirement;
-import org.osgi.resource.Resource;
+import org.osgi.resource.*;
 
 class CapReq implements Capability, Requirement {
 	
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/resource/CapReqBuilder.java b/bundleplugin/src/main/java/aQute/bnd/osgi/resource/CapReqBuilder.java
similarity index 80%
rename from bundleplugin/src/main/java/aQute/lib/osgi/resource/CapReqBuilder.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/resource/CapReqBuilder.java
index 1e259c9..b06f37a 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/resource/CapReqBuilder.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/resource/CapReqBuilder.java
@@ -1,19 +1,12 @@
-package aQute.lib.osgi.resource;
+package aQute.bnd.osgi.resource;
 
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 
-import org.osgi.framework.namespace.PackageNamespace;
-import org.osgi.resource.Capability;
-import org.osgi.resource.Namespace;
-import org.osgi.resource.Requirement;
-import org.osgi.resource.Resource;
+import org.osgi.framework.namespace.*;
+import org.osgi.resource.*;
 
-import aQute.lib.osgi.resource.CapReq.MODE;
-import aQute.libg.filters.AndFilter;
-import aQute.libg.filters.Filter;
-import aQute.libg.filters.SimpleFilter;
-import aQute.libg.version.VersionRange;
+import aQute.bnd.osgi.resource.CapReq.MODE;
+import aQute.libg.filters.*;
 
 public class CapReqBuilder {
 
@@ -85,11 +78,11 @@
 		return new CapReq(MODE.Requirement, namespace, null, directives, attributes);
 	}
 	
-	public static final CapReqBuilder createPackageRequirement(String pkgName, VersionRange range) {
+	public static final CapReqBuilder createPackageRequirement(String pkgName, String range) {
 		Filter filter;
 		SimpleFilter pkgNameFilter = new SimpleFilter(PackageNamespace.PACKAGE_NAMESPACE, pkgName);
 		if (range != null)
-			filter = new AndFilter().addChild(pkgNameFilter).addChild(Filters.fromVersionRange(range));
+			filter = new AndFilter().addChild(pkgNameFilter).addChild(new LiteralFilter(Filters.fromVersionRange(range)));
 		else
 			filter = pkgNameFilter;
 		
diff --git a/bundleplugin/src/main/java/aQute/bnd/osgi/resource/Filters.java b/bundleplugin/src/main/java/aQute/bnd/osgi/resource/Filters.java
new file mode 100644
index 0000000..3194146
--- /dev/null
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/resource/Filters.java
@@ -0,0 +1,64 @@
+package aQute.bnd.osgi.resource;
+
+import org.osgi.framework.namespace.*;
+
+import aQute.bnd.osgi.*;
+import aQute.libg.filters.*;
+
+public class Filters {
+	
+	public static final String DEFAULT_VERSION_ATTR = IdentityNamespace.CAPABILITY_VERSION_ATTRIBUTE;
+	
+	/**
+	 * Generate an LDAP-style version filter from a version range, e.g.
+	 * {@code [1.0,2.0)} generates {@code (&(version>=1.0)(!(version>=2.0))}
+	 * 
+	 * @param range
+	 * @return The generated filter.
+	 * @throws IllegalArgumentException
+	 *             If the supplied range is invalid.
+	 */
+	public static String fromVersionRange(String range) throws IllegalArgumentException {
+		return fromVersionRange(range, DEFAULT_VERSION_ATTR);
+	}
+
+	/**
+	 * Generate an LDAP-style version filter from a version range, using a
+	 * specific attribute name for the version; for example can be used to
+	 * generate a range using the {@code bundle-version} attribute such as
+	 * {@code (&(bundle-version>=1.0)(!(bundle-version>=2.0))}.
+	 * 
+	 * @param range
+	 * @param versionAttr
+	 * @return The generated filter
+	 * @throws IllegalArgumentException
+	 *             If the supplied range is invalid.
+	 */
+	public static String fromVersionRange(String range, String versionAttr) throws IllegalArgumentException {
+		if (range == null)
+			return null;
+		VersionRange parsedRange = new VersionRange(range);
+		
+		Filter left;
+		if (parsedRange.includeLow())
+			left = new SimpleFilter(versionAttr, Operator.GreaterThanOrEqual, parsedRange.getLow().toString());
+		else
+			left = new NotFilter(new SimpleFilter(versionAttr, Operator.LessThanOrEqual, parsedRange.getLow().toString()));
+		
+		Filter right;
+		if (!parsedRange.isRange())
+			right = null;
+		else if (parsedRange.includeHigh())
+			right = new SimpleFilter(versionAttr, Operator.LessThanOrEqual, parsedRange.getHigh().toString());
+		else
+			right = new NotFilter(new SimpleFilter(versionAttr, Operator.GreaterThanOrEqual, parsedRange.getHigh().toString()));
+		
+		Filter result;
+		if (right != null)
+			result = new AndFilter().addChild(left).addChild(right);
+		else
+			result = left;
+		
+		return result.toString();
+	}
+}
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/resource/ResourceBuilder.java b/bundleplugin/src/main/java/aQute/bnd/osgi/resource/ResourceBuilder.java
similarity index 87%
rename from bundleplugin/src/main/java/aQute/lib/osgi/resource/ResourceBuilder.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/resource/ResourceBuilder.java
index 9e9cde3..69e95b0 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/resource/ResourceBuilder.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/resource/ResourceBuilder.java
@@ -1,11 +1,8 @@
-package aQute.lib.osgi.resource;
+package aQute.bnd.osgi.resource;
 
-import java.util.LinkedList;
-import java.util.List;
+import java.util.*;
 
-import org.osgi.resource.Capability;
-import org.osgi.resource.Requirement;
-import org.osgi.resource.Resource;
+import org.osgi.resource.*;
 
 public class ResourceBuilder {
 
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/resource/ResourceImpl.java b/bundleplugin/src/main/java/aQute/bnd/osgi/resource/ResourceImpl.java
similarity index 87%
rename from bundleplugin/src/main/java/aQute/lib/osgi/resource/ResourceImpl.java
rename to bundleplugin/src/main/java/aQute/bnd/osgi/resource/ResourceImpl.java
index 7305148..f8c3a84 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/resource/ResourceImpl.java
+++ b/bundleplugin/src/main/java/aQute/bnd/osgi/resource/ResourceImpl.java
@@ -1,14 +1,9 @@
-package aQute.lib.osgi.resource;
+package aQute.bnd.osgi.resource;
 
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
-import org.osgi.framework.namespace.IdentityNamespace;
-import org.osgi.resource.Capability;
-import org.osgi.resource.Requirement;
-import org.osgi.resource.Resource;
+import org.osgi.framework.namespace.*;
+import org.osgi.resource.*;
 
 class ResourceImpl implements Resource {
 
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/resource/packageinfo b/bundleplugin/src/main/java/aQute/bnd/osgi/resource/packageinfo
similarity index 100%
rename from bundleplugin/src/main/java/aQute/lib/osgi/resource/packageinfo
rename to bundleplugin/src/main/java/aQute/bnd/osgi/resource/packageinfo
diff --git a/bundleplugin/src/main/java/aQute/lib/properties/BadLocationException.java b/bundleplugin/src/main/java/aQute/bnd/properties/BadLocationException.java
similarity index 87%
rename from bundleplugin/src/main/java/aQute/lib/properties/BadLocationException.java
rename to bundleplugin/src/main/java/aQute/bnd/properties/BadLocationException.java
index 2d9207d..30647db 100644
--- a/bundleplugin/src/main/java/aQute/lib/properties/BadLocationException.java
+++ b/bundleplugin/src/main/java/aQute/bnd/properties/BadLocationException.java
@@ -1,4 +1,4 @@
-package aQute.lib.properties;
+package aQute.bnd.properties;
 
 public class BadLocationException extends Exception {
 
diff --git a/bundleplugin/src/main/java/aQute/lib/properties/CopyOnWriteTextStore.java b/bundleplugin/src/main/java/aQute/bnd/properties/CopyOnWriteTextStore.java
similarity index 98%
rename from bundleplugin/src/main/java/aQute/lib/properties/CopyOnWriteTextStore.java
rename to bundleplugin/src/main/java/aQute/bnd/properties/CopyOnWriteTextStore.java
index 179ab25..edcba0e 100644
--- a/bundleplugin/src/main/java/aQute/lib/properties/CopyOnWriteTextStore.java
+++ b/bundleplugin/src/main/java/aQute/bnd/properties/CopyOnWriteTextStore.java
@@ -1,4 +1,4 @@
-package aQute.lib.properties;
+package aQute.bnd.properties;
 
 /**
  * Copy-on-write <code>ITextStore</code> wrapper.
diff --git a/bundleplugin/src/main/java/aQute/lib/properties/Document.java b/bundleplugin/src/main/java/aQute/bnd/properties/Document.java
similarity index 97%
rename from bundleplugin/src/main/java/aQute/lib/properties/Document.java
rename to bundleplugin/src/main/java/aQute/bnd/properties/Document.java
index 4df75a6..3818b72 100644
--- a/bundleplugin/src/main/java/aQute/lib/properties/Document.java
+++ b/bundleplugin/src/main/java/aQute/bnd/properties/Document.java
@@ -1,4 +1,4 @@
-package aQute.lib.properties;
+package aQute.bnd.properties;
 
 public class Document implements IDocument {
 
diff --git a/bundleplugin/src/main/java/aQute/lib/properties/GapTextStore.java b/bundleplugin/src/main/java/aQute/bnd/properties/GapTextStore.java
similarity index 99%
rename from bundleplugin/src/main/java/aQute/lib/properties/GapTextStore.java
rename to bundleplugin/src/main/java/aQute/bnd/properties/GapTextStore.java
index 7c4a043..a32c219 100644
--- a/bundleplugin/src/main/java/aQute/lib/properties/GapTextStore.java
+++ b/bundleplugin/src/main/java/aQute/bnd/properties/GapTextStore.java
@@ -1,4 +1,4 @@
-package aQute.lib.properties;
+package aQute.bnd.properties;
 
 /**
  * Implements a gap managing text store. The gap text store relies on the
diff --git a/bundleplugin/src/main/java/aQute/lib/properties/IDocument.java b/bundleplugin/src/main/java/aQute/bnd/properties/IDocument.java
similarity index 93%
rename from bundleplugin/src/main/java/aQute/lib/properties/IDocument.java
rename to bundleplugin/src/main/java/aQute/bnd/properties/IDocument.java
index aba541f..267003d 100644
--- a/bundleplugin/src/main/java/aQute/lib/properties/IDocument.java
+++ b/bundleplugin/src/main/java/aQute/bnd/properties/IDocument.java
@@ -1,4 +1,4 @@
-package aQute.lib.properties;
+package aQute.bnd.properties;
 
 public interface IDocument {
 
diff --git a/bundleplugin/src/main/java/aQute/lib/properties/IRegion.java b/bundleplugin/src/main/java/aQute/bnd/properties/IRegion.java
similarity index 69%
rename from bundleplugin/src/main/java/aQute/lib/properties/IRegion.java
rename to bundleplugin/src/main/java/aQute/bnd/properties/IRegion.java
index 70230e7..2712d71 100644
--- a/bundleplugin/src/main/java/aQute/lib/properties/IRegion.java
+++ b/bundleplugin/src/main/java/aQute/bnd/properties/IRegion.java
@@ -1,4 +1,4 @@
-package aQute.lib.properties;
+package aQute.bnd.properties;
 
 public interface IRegion {
 
diff --git a/bundleplugin/src/main/java/aQute/lib/properties/ITextStore.java b/bundleplugin/src/main/java/aQute/bnd/properties/ITextStore.java
similarity index 97%
rename from bundleplugin/src/main/java/aQute/lib/properties/ITextStore.java
rename to bundleplugin/src/main/java/aQute/bnd/properties/ITextStore.java
index f4cf2c7..19791de 100644
--- a/bundleplugin/src/main/java/aQute/lib/properties/ITextStore.java
+++ b/bundleplugin/src/main/java/aQute/bnd/properties/ITextStore.java
@@ -1,4 +1,4 @@
-package aQute.lib.properties;
+package aQute.bnd.properties;
 
 /**
  * Interface for storing and managing text.
diff --git a/bundleplugin/src/main/java/aQute/lib/properties/Line.java b/bundleplugin/src/main/java/aQute/bnd/properties/Line.java
similarity index 97%
rename from bundleplugin/src/main/java/aQute/lib/properties/Line.java
rename to bundleplugin/src/main/java/aQute/bnd/properties/Line.java
index 8d07ce1..6ff1c07 100644
--- a/bundleplugin/src/main/java/aQute/lib/properties/Line.java
+++ b/bundleplugin/src/main/java/aQute/bnd/properties/Line.java
@@ -1,4 +1,4 @@
-package aQute.lib.properties;
+package aQute.bnd.properties;
 
 /**
  * Describes a line as a particular number of characters beginning at a
diff --git a/bundleplugin/src/main/java/aQute/lib/properties/LineTracker.java b/bundleplugin/src/main/java/aQute/bnd/properties/LineTracker.java
similarity index 98%
rename from bundleplugin/src/main/java/aQute/lib/properties/LineTracker.java
rename to bundleplugin/src/main/java/aQute/bnd/properties/LineTracker.java
index a3c3adf..df65c78 100644
--- a/bundleplugin/src/main/java/aQute/lib/properties/LineTracker.java
+++ b/bundleplugin/src/main/java/aQute/bnd/properties/LineTracker.java
@@ -1,9 +1,9 @@
-package aQute.lib.properties;
+package aQute.bnd.properties;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import aQute.lib.properties.Document.DelimiterInfo;
+import aQute.bnd.properties.Document.DelimiterInfo;
 
 public class LineTracker {
 
diff --git a/bundleplugin/src/main/java/aQute/lib/properties/LineType.java b/bundleplugin/src/main/java/aQute/bnd/properties/LineType.java
similarity index 64%
rename from bundleplugin/src/main/java/aQute/lib/properties/LineType.java
rename to bundleplugin/src/main/java/aQute/bnd/properties/LineType.java
index 69eda5f..58dd96b 100644
--- a/bundleplugin/src/main/java/aQute/lib/properties/LineType.java
+++ b/bundleplugin/src/main/java/aQute/bnd/properties/LineType.java
@@ -1,4 +1,4 @@
-package aQute.lib.properties;
+package aQute.bnd.properties;
 
 public enum LineType {
 	blank, comment, entry, eof
diff --git a/bundleplugin/src/main/java/aQute/lib/properties/PropertiesLineReader.java b/bundleplugin/src/main/java/aQute/bnd/properties/PropertiesLineReader.java
similarity index 97%
rename from bundleplugin/src/main/java/aQute/lib/properties/PropertiesLineReader.java
rename to bundleplugin/src/main/java/aQute/bnd/properties/PropertiesLineReader.java
index c3ea14b..720dde0 100644
--- a/bundleplugin/src/main/java/aQute/lib/properties/PropertiesLineReader.java
+++ b/bundleplugin/src/main/java/aQute/bnd/properties/PropertiesLineReader.java
@@ -1,6 +1,6 @@
-package aQute.lib.properties;
+package aQute.bnd.properties;
 
-import static aQute.lib.properties.LineType.*;
+import static aQute.bnd.properties.LineType.*;
 
 public class PropertiesLineReader {
 
diff --git a/bundleplugin/src/main/java/aQute/lib/properties/PropertiesReader.java b/bundleplugin/src/main/java/aQute/bnd/properties/PropertiesReader.java
similarity index 98%
rename from bundleplugin/src/main/java/aQute/lib/properties/PropertiesReader.java
rename to bundleplugin/src/main/java/aQute/bnd/properties/PropertiesReader.java
index 58426af..10d7f4a 100644
--- a/bundleplugin/src/main/java/aQute/lib/properties/PropertiesReader.java
+++ b/bundleplugin/src/main/java/aQute/bnd/properties/PropertiesReader.java
@@ -1,4 +1,4 @@
-package aQute.lib.properties;
+package aQute.bnd.properties;
 
 import java.io.*;
 import java.net.*;
diff --git a/bundleplugin/src/main/java/aQute/lib/properties/Region.java b/bundleplugin/src/main/java/aQute/bnd/properties/Region.java
similarity index 90%
rename from bundleplugin/src/main/java/aQute/lib/properties/Region.java
rename to bundleplugin/src/main/java/aQute/bnd/properties/Region.java
index 5ece58e..d94a06f 100644
--- a/bundleplugin/src/main/java/aQute/lib/properties/Region.java
+++ b/bundleplugin/src/main/java/aQute/bnd/properties/Region.java
@@ -1,4 +1,4 @@
-package aQute.lib.properties;
+package aQute.bnd.properties;
 
 public class Region implements IRegion {
 
diff --git a/bundleplugin/src/main/java/aQute/lib/properties/packageinfo b/bundleplugin/src/main/java/aQute/bnd/properties/packageinfo
similarity index 100%
rename from bundleplugin/src/main/java/aQute/lib/properties/packageinfo
rename to bundleplugin/src/main/java/aQute/bnd/properties/packageinfo
diff --git a/bundleplugin/src/main/java/aQute/bnd/repo/eclipse/EclipseRepo.java b/bundleplugin/src/main/java/aQute/bnd/repo/eclipse/EclipseRepo.java
index e52ef24..1f3bfdc 100644
--- a/bundleplugin/src/main/java/aQute/bnd/repo/eclipse/EclipseRepo.java
+++ b/bundleplugin/src/main/java/aQute/bnd/repo/eclipse/EclipseRepo.java
@@ -5,12 +5,11 @@
 import java.util.Map.Entry;
 import java.util.jar.*;
 
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.*;
 import aQute.lib.io.*;
-import aQute.lib.osgi.*;
 import aQute.libg.generics.*;
-import aQute.libg.header.*;
-import aQute.libg.version.*;
 import aQute.service.reporter.*;
 
 public class EclipseRepo implements Plugin, RepositoryPlugin {
diff --git a/bundleplugin/src/main/java/aQute/bnd/service/AnalyzerPlugin.java b/bundleplugin/src/main/java/aQute/bnd/service/AnalyzerPlugin.java
index 1a5b19a..9c3e51d 100644
--- a/bundleplugin/src/main/java/aQute/bnd/service/AnalyzerPlugin.java
+++ b/bundleplugin/src/main/java/aQute/bnd/service/AnalyzerPlugin.java
@@ -1,6 +1,6 @@
 package aQute.bnd.service;
 
-import aQute.lib.osgi.*;
+import aQute.bnd.osgi.*;
 
 public interface AnalyzerPlugin {
 
diff --git a/bundleplugin/src/main/java/aQute/bnd/service/Deploy.java b/bundleplugin/src/main/java/aQute/bnd/service/Deploy.java
index c2f2b61..a8fc577 100644
--- a/bundleplugin/src/main/java/aQute/bnd/service/Deploy.java
+++ b/bundleplugin/src/main/java/aQute/bnd/service/Deploy.java
@@ -1,7 +1,7 @@
 package aQute.bnd.service;
 
 import aQute.bnd.build.*;
-import aQute.lib.osgi.*;
+import aQute.bnd.osgi.*;
 
 /**
  * Deploy this artifact to maven.
diff --git a/bundleplugin/src/main/java/aQute/bnd/service/MakePlugin.java b/bundleplugin/src/main/java/aQute/bnd/service/MakePlugin.java
index 2e564e5..8541436 100644
--- a/bundleplugin/src/main/java/aQute/bnd/service/MakePlugin.java
+++ b/bundleplugin/src/main/java/aQute/bnd/service/MakePlugin.java
@@ -2,7 +2,7 @@
 
 import java.util.*;
 
-import aQute.lib.osgi.*;
+import aQute.bnd.osgi.*;
 
 public interface MakePlugin {
 
diff --git a/bundleplugin/src/main/java/aQute/bnd/service/RepositoryListenerPlugin.java b/bundleplugin/src/main/java/aQute/bnd/service/RepositoryListenerPlugin.java
index 92238ab..abd24f4 100644
--- a/bundleplugin/src/main/java/aQute/bnd/service/RepositoryListenerPlugin.java
+++ b/bundleplugin/src/main/java/aQute/bnd/service/RepositoryListenerPlugin.java
@@ -2,7 +2,7 @@
 
 import java.io.*;
 
-import aQute.lib.osgi.*;
+import aQute.bnd.osgi.*;
 
 public interface RepositoryListenerPlugin {
 
diff --git a/bundleplugin/src/main/java/aQute/bnd/service/RepositoryPlugin.java b/bundleplugin/src/main/java/aQute/bnd/service/RepositoryPlugin.java
index accda4f..769238c 100644
--- a/bundleplugin/src/main/java/aQute/bnd/service/RepositoryPlugin.java
+++ b/bundleplugin/src/main/java/aQute/bnd/service/RepositoryPlugin.java
@@ -3,8 +3,7 @@
 import java.io.*;
 import java.util.*;
 
-import aQute.lib.osgi.*;
-import aQute.libg.version.*;
+import aQute.bnd.osgi.*;
 
 public interface RepositoryPlugin {
 	public enum Strategy {
diff --git a/bundleplugin/src/main/java/aQute/bnd/service/SignerPlugin.java b/bundleplugin/src/main/java/aQute/bnd/service/SignerPlugin.java
index b503652..54b4e80 100644
--- a/bundleplugin/src/main/java/aQute/bnd/service/SignerPlugin.java
+++ b/bundleplugin/src/main/java/aQute/bnd/service/SignerPlugin.java
@@ -1,6 +1,6 @@
 package aQute.bnd.service;
 
-import aQute.lib.osgi.*;
+import aQute.bnd.osgi.*;
 
 public interface SignerPlugin {
 	/**
diff --git a/bundleplugin/src/main/java/aQute/bnd/service/diff/Differ.java b/bundleplugin/src/main/java/aQute/bnd/service/diff/Differ.java
index 6d60c82..151051b 100644
--- a/bundleplugin/src/main/java/aQute/bnd/service/diff/Differ.java
+++ b/bundleplugin/src/main/java/aQute/bnd/service/diff/Differ.java
@@ -1,6 +1,6 @@
 package aQute.bnd.service.diff;
 
-import aQute.lib.osgi.*;
+import aQute.bnd.osgi.*;
 
 /**
  * Compare two Jars and report the differences.
diff --git a/bundleplugin/src/main/java/aQute/bnd/service/diff/Type.java b/bundleplugin/src/main/java/aQute/bnd/service/diff/Type.java
index ec4c1b2..91b186c 100644
--- a/bundleplugin/src/main/java/aQute/bnd/service/diff/Type.java
+++ b/bundleplugin/src/main/java/aQute/bnd/service/diff/Type.java
@@ -1,7 +1,7 @@
 package aQute.bnd.service.diff;
 
 public enum Type {
-	ACCESS, BUNDLE, API, MANIFEST, PACKAGE, CLASS, INTERFACE, ANNOTATION, ENUM, EXTENDS, IMPLEMENTS, FIELD, METHOD, ANNOTATED, PROPERTY, RESOURCE, CUSTOM, CLAUSE, HEADER, PARAMETER, CLASS_VERSION, RESOURCES, CONSTANT, RETURN, VERSION, DEPRECATED, REPO, PROGRAM, REVISION;
+	ACCESS, BUNDLE, API, MANIFEST, PACKAGE, CLASS, INTERFACE, ANNOTATION, ENUM, EXTENDS, IMPLEMENTS, FIELD, METHOD, ANNOTATED, PROPERTY, RESOURCE, SHA, CUSTOM, CLAUSE, HEADER, PARAMETER, CLASS_VERSION, RESOURCES, CONSTANT, RETURN, VERSION, DEPRECATED, REPO, PROGRAM, REVISION;
 
 	public boolean isInherited() {
 		// TODO Auto-generated method stub
diff --git a/bundleplugin/src/main/java/aQute/bnd/signing/JartoolSigner.java b/bundleplugin/src/main/java/aQute/bnd/signing/JartoolSigner.java
index 346491f..fe317b8 100644
--- a/bundleplugin/src/main/java/aQute/bnd/signing/JartoolSigner.java
+++ b/bundleplugin/src/main/java/aQute/bnd/signing/JartoolSigner.java
@@ -5,8 +5,8 @@
 import java.util.Map.Entry;
 import java.util.concurrent.*;
 
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.*;
-import aQute.lib.osgi.*;
 import aQute.libg.command.*;
 import aQute.service.reporter.*;
 
diff --git a/bundleplugin/src/main/java/aQute/bnd/signing/Signer.java b/bundleplugin/src/main/java/aQute/bnd/signing/Signer.java
index f885d4d..1841a58 100644
--- a/bundleplugin/src/main/java/aQute/bnd/signing/Signer.java
+++ b/bundleplugin/src/main/java/aQute/bnd/signing/Signer.java
@@ -7,12 +7,12 @@
 import java.util.jar.*;
 import java.util.regex.*;
 
+import aQute.bnd.osgi.*;
 import aQute.lib.base64.*;
 import aQute.lib.io.*;
-import aQute.lib.osgi.*;
 
 /**
- * This class is used with the aQute.lib.osgi package, it signs jars with DSA
+ * This class is used with the aQute.bnd.osgi package, it signs jars with DSA
  * signature. -sign: md5, sha1
  */
 public class Signer extends Processor {
diff --git a/bundleplugin/src/main/java/aQute/lib/collections/MultiMap.java b/bundleplugin/src/main/java/aQute/lib/collections/MultiMap.java
index 21c1509..322a2e8 100644
--- a/bundleplugin/src/main/java/aQute/lib/collections/MultiMap.java
+++ b/bundleplugin/src/main/java/aQute/lib/collections/MultiMap.java
@@ -2,6 +2,7 @@
 
 import java.util.*;
 
+
 public class MultiMap<K, V> extends HashMap<K,List<V>> {
 	private static final long	serialVersionUID	= 1L;
 	final boolean				noduplicates;
@@ -22,6 +23,15 @@
 		this.valueClass = valueClass;
 	}
 
+	public MultiMap(MultiMap<K,V> other) {
+		keyClass = other.keyClass;
+		valueClass  = other.valueClass;
+		noduplicates = other.noduplicates;
+		for ( java.util.Map.Entry<K,List<V>> e : other.entrySet()) {
+			addAll(e.getKey(), e.getValue());
+		}
+	}
+
 	@SuppressWarnings("unchecked")
 	public boolean add(K key, V value) {
 		assert keyClass.isInstance(key);
@@ -57,7 +67,7 @@
 			boolean r = false;
 			for (V v : value) {
 				assert valueClass.isInstance(v);
-				if (!set.contains(value))
+				if (!set.contains(v))
 					r |= set.add(v);
 			}
 			return r;
diff --git a/bundleplugin/src/main/java/aQute/lib/converter/Converter.java b/bundleplugin/src/main/java/aQute/lib/converter/Converter.java
index 621b558..a227d71 100644
--- a/bundleplugin/src/main/java/aQute/lib/converter/Converter.java
+++ b/bundleplugin/src/main/java/aQute/lib/converter/Converter.java
@@ -38,8 +38,8 @@
 	public Object convert(Type type, Object o) throws Exception {
 		Class resultType = getRawClass(type);
 		if (o == null) {
-			if (resultType.isPrimitive()||  Number.class.isAssignableFrom(resultType)) 
-				return convert(type,0);
+			if (resultType.isPrimitive() || Number.class.isAssignableFrom(resultType))
+				return convert(type, 0);
 
 			return null; // compatible with any
 		}
@@ -231,27 +231,40 @@
 		}
 
 		if (o instanceof Map) {
+			String key = null;
 			try {
 				Map<Object,Object> map = (Map) o;
 				Object instance = resultType.newInstance();
 				for (Map.Entry e : map.entrySet()) {
-					String key = (String) e.getKey();
-					Field f = resultType.getField(key);
-					Object value = convert(f.getGenericType(), e.getValue());
-					f.set(instance, value);
+					key = (String) e.getKey();
+					try {
+						Field f = resultType.getField(key);
+						Object value = convert(f.getGenericType(), e.getValue());
+						f.set(instance, value);
+					}
+					catch (Exception ee) {
+						
+						// We cannot find the key, so try the __extra field
+						Field f = resultType.getField("__extra");
+						Map<String,Object> extra = (Map<String,Object>) f.get(instance);
+						if ( extra == null) {
+							extra = new HashMap<String,Object>();
+							f.set(instance, extra);
+						}
+						extra.put(key, convert(Object.class,e.getValue()));
+						
+					}
 				}
 				return instance;
 			}
 			catch (Exception e) {
-				// fall through
+				return error("No conversion found for " + o.getClass() + " to " + type + ", error " + e + " on key " + key);
 			}
 		}
 
 		return error("No conversion found for " + o.getClass() + " to " + type);
 	}
 
-
-
 	private Number number(Object o) {
 		if (o instanceof Number)
 			return (Number) o;
@@ -446,10 +459,10 @@
 
 			public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
 				Object o = properties.get(method.getName());
-				if ( o == null)
+				if (o == null)
 					o = properties.get(mangleMethodName(method.getName()));
 
-				return convert( method.getGenericReturnType(), o);
+				return convert(method.getGenericReturnType(), o);
 			}
 
 		});
@@ -471,4 +484,17 @@
 		}
 		return sb.toString();
 	}
+
+	public static <T> T cnv(TypeReference<T> tr, Object source) throws Exception {
+		return new Converter().convert(tr, source);
+	}
+
+	public static <T> T cnv(Class<T> tr, Object source) throws Exception {
+		return new Converter().convert(tr, source);
+	}
+
+	public static Object cnv(Type tr, Object source) throws Exception {
+		return new Converter().convert(tr, source);
+	}
+
 }
diff --git a/bundleplugin/src/main/java/aQute/lib/deployer/FileInstallRepo.java b/bundleplugin/src/main/java/aQute/lib/deployer/FileInstallRepo.java
index 9b01ff7..84c3c46 100644
--- a/bundleplugin/src/main/java/aQute/lib/deployer/FileInstallRepo.java
+++ b/bundleplugin/src/main/java/aQute/lib/deployer/FileInstallRepo.java
@@ -5,9 +5,8 @@
 import java.util.jar.*;
 import java.util.regex.*;
 
-import aQute.lib.osgi.*;
-import aQute.libg.header.*;
-import aQute.libg.version.*;
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
 import aQute.service.reporter.*;
 
 public class FileInstallRepo extends FileRepo {
diff --git a/bundleplugin/src/main/java/aQute/lib/deployer/FileRepo.java b/bundleplugin/src/main/java/aQute/lib/deployer/FileRepo.java
index 3703b8b..d34ef98 100644
--- a/bundleplugin/src/main/java/aQute/lib/deployer/FileRepo.java
+++ b/bundleplugin/src/main/java/aQute/lib/deployer/FileRepo.java
@@ -5,11 +5,10 @@
 import java.util.jar.*;
 import java.util.regex.*;
 
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.*;
 import aQute.lib.io.*;
-import aQute.lib.osgi.*;
-import aQute.libg.header.*;
-import aQute.libg.version.*;
 import aQute.service.reporter.*;
 
 public class FileRepo implements Plugin, RepositoryPlugin, Refreshable, RegistryPlugin {
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/AnalyzerMessages.java b/bundleplugin/src/main/java/aQute/lib/osgi/AnalyzerMessages.java
deleted file mode 100644
index a91a0f0..0000000
--- a/bundleplugin/src/main/java/aQute/lib/osgi/AnalyzerMessages.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package aQute.lib.osgi;
-
-import aQute.libg.reporter.*;
-
-public interface AnalyzerMessages extends Messages {
-/**/
-}
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/resource/Filters.java b/bundleplugin/src/main/java/aQute/lib/osgi/resource/Filters.java
deleted file mode 100644
index 20af48d..0000000
--- a/bundleplugin/src/main/java/aQute/lib/osgi/resource/Filters.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package aQute.lib.osgi.resource;
-
-import aQute.libg.filters.AndFilter;
-import aQute.libg.filters.Filter;
-import aQute.libg.filters.NotFilter;
-import aQute.libg.filters.Operator;
-import aQute.libg.filters.SimpleFilter;
-import aQute.libg.version.VersionRange;
-
-public class Filters {
-	
-	public static Filter fromVersionRange(VersionRange range) {
-		return fromVersionRange(range, "version");
-	}
-	
-	public static Filter fromVersionRange(VersionRange range, @SuppressWarnings("unused") String versionAttr) {
-		if (range == null)
-			return null;
-		
-		Filter left;
-		if (range.includeLow())
-			left = new SimpleFilter("version", Operator.GreaterThanOrEqual, range.getLow().toString());
-		else
-			left = new NotFilter(new SimpleFilter("version", Operator.LessThanOrEqual, range.getLow().toString()));
-		
-		Filter right;
-		if (!range.isRange())
-			right = null;
-		else if (range.includeHigh())
-			right = new SimpleFilter("version", Operator.LessThanOrEqual, range.getHigh().toString());
-		else
-			right = new NotFilter(new SimpleFilter("version", Operator.GreaterThanOrEqual, range.getHigh().toString()));
-		
-		Filter result;
-		if (right != null)
-			result = new AndFilter().addChild(left).addChild(right);
-		else
-			result = left;
-		
-		return result;
-	}
-}
diff --git a/bundleplugin/src/main/java/aQute/lib/spring/JPAComponent.java b/bundleplugin/src/main/java/aQute/lib/spring/JPAComponent.java
index 4fcbc34..2f08e10 100644
--- a/bundleplugin/src/main/java/aQute/lib/spring/JPAComponent.java
+++ b/bundleplugin/src/main/java/aQute/lib/spring/JPAComponent.java
@@ -2,7 +2,7 @@
 
 import java.util.*;
 
-import aQute.lib.osgi.*;
+import aQute.bnd.osgi.*;
 
 /**
  * This component is called when we find a resource in the META-INF/*.xml
diff --git a/bundleplugin/src/main/java/aQute/lib/spring/SpringComponent.java b/bundleplugin/src/main/java/aQute/lib/spring/SpringComponent.java
index c8678a8..eff6ef4 100644
--- a/bundleplugin/src/main/java/aQute/lib/spring/SpringComponent.java
+++ b/bundleplugin/src/main/java/aQute/lib/spring/SpringComponent.java
@@ -8,10 +8,10 @@
 import javax.xml.transform.*;
 import javax.xml.transform.stream.*;
 
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
+import aQute.bnd.osgi.Descriptors.PackageRef;
 import aQute.bnd.service.*;
-import aQute.lib.osgi.*;
-import aQute.lib.osgi.Descriptors.PackageRef;
-import aQute.libg.header.*;
 
 /**
  * This component is called when we find a resource in the META-INF/*.xml
diff --git a/bundleplugin/src/main/java/aQute/lib/spring/SpringXMLType.java b/bundleplugin/src/main/java/aQute/lib/spring/SpringXMLType.java
index b4840d0..ae524d3 100644
--- a/bundleplugin/src/main/java/aQute/lib/spring/SpringXMLType.java
+++ b/bundleplugin/src/main/java/aQute/lib/spring/SpringXMLType.java
@@ -2,7 +2,7 @@
 
 import java.util.*;
 
-import aQute.lib.osgi.*;
+import aQute.bnd.osgi.*;
 
 /**
  * This component is called when we find a resource in the META-INF/*.xml
diff --git a/bundleplugin/src/main/java/aQute/lib/spring/XMLType.java b/bundleplugin/src/main/java/aQute/lib/spring/XMLType.java
index 7d65d1c..d01fd57 100644
--- a/bundleplugin/src/main/java/aQute/lib/spring/XMLType.java
+++ b/bundleplugin/src/main/java/aQute/lib/spring/XMLType.java
@@ -8,8 +8,8 @@
 import javax.xml.transform.*;
 import javax.xml.transform.stream.*;
 
-import aQute.lib.osgi.*;
-import aQute.lib.osgi.Descriptors.PackageRef;
+import aQute.bnd.osgi.*;
+import aQute.bnd.osgi.Descriptors.PackageRef;
 
 public class XMLType {
 
diff --git a/bundleplugin/src/main/java/aQute/lib/spring/XMLTypeProcessor.java b/bundleplugin/src/main/java/aQute/lib/spring/XMLTypeProcessor.java
index dc17eb1..e8ca286 100644
--- a/bundleplugin/src/main/java/aQute/lib/spring/XMLTypeProcessor.java
+++ b/bundleplugin/src/main/java/aQute/lib/spring/XMLTypeProcessor.java
@@ -2,9 +2,9 @@
 
 import java.util.*;
 
+import aQute.bnd.header.*;
+import aQute.bnd.osgi.*;
 import aQute.bnd.service.*;
-import aQute.lib.osgi.*;
-import aQute.libg.header.*;
 
 public class XMLTypeProcessor implements AnalyzerPlugin {
 
diff --git a/bundleplugin/src/main/java/aQute/libg/cryptography/Digest.java b/bundleplugin/src/main/java/aQute/libg/cryptography/Digest.java
index 93d48ad..aeb4bbb 100644
--- a/bundleplugin/src/main/java/aQute/libg/cryptography/Digest.java
+++ b/bundleplugin/src/main/java/aQute/libg/cryptography/Digest.java
@@ -17,6 +17,10 @@
 		return digest;
 	}
 
+	public String asHex() {
+		return Hex.toHexString(digest());
+	}
+
 	@Override
 	public String toString() {
 		return String.format("%s(d=%s)", getAlgorithm(), Hex.toHexString(digest));
diff --git a/bundleplugin/src/main/java/aQute/libg/cryptography/MD5.java b/bundleplugin/src/main/java/aQute/libg/cryptography/MD5.java
index 05a6bdd..a1a5a0a 100644
--- a/bundleplugin/src/main/java/aQute/libg/cryptography/MD5.java
+++ b/bundleplugin/src/main/java/aQute/libg/cryptography/MD5.java
@@ -35,4 +35,7 @@
 		return ALGORITHM;
 	}
 
+	public static MD5 digest(byte [] data) throws Exception {
+		return getDigester().digest(data);
+	}
 }
\ No newline at end of file
diff --git a/bundleplugin/src/main/java/aQute/libg/cryptography/SHA1.java b/bundleplugin/src/main/java/aQute/libg/cryptography/SHA1.java
index d0a486c..c76f182 100644
--- a/bundleplugin/src/main/java/aQute/libg/cryptography/SHA1.java
+++ b/bundleplugin/src/main/java/aQute/libg/cryptography/SHA1.java
@@ -35,4 +35,7 @@
 		return ALGORITHM;
 	}
 
+	public static SHA1 digest(byte [] data) throws Exception {
+		return getDigester().digest(data);
+	}
 }
\ No newline at end of file
diff --git a/bundleplugin/src/main/java/aQute/libg/cryptography/SHA256.java b/bundleplugin/src/main/java/aQute/libg/cryptography/SHA256.java
index b6eeacc..743a431 100644
--- a/bundleplugin/src/main/java/aQute/libg/cryptography/SHA256.java
+++ b/bundleplugin/src/main/java/aQute/libg/cryptography/SHA256.java
@@ -35,4 +35,7 @@
 		return ALGORITHM;
 	}
 
+	public static SHA256 digest(byte [] data) throws Exception {
+		return getDigester().digest(data);
+	}
 }
\ No newline at end of file
diff --git a/bundleplugin/src/main/java/aQute/libg/filters/LiteralFilter.java b/bundleplugin/src/main/java/aQute/libg/filters/LiteralFilter.java
new file mode 100644
index 0000000..ca09228
--- /dev/null
+++ b/bundleplugin/src/main/java/aQute/libg/filters/LiteralFilter.java
@@ -0,0 +1,16 @@
+package aQute.libg.filters;
+
+public class LiteralFilter extends Filter {
+	
+	private String	filterString;
+
+	public LiteralFilter(String filterString) {
+		this.filterString = filterString;
+	}
+
+	@Override
+	public void append(StringBuilder builder) {
+		builder.append(filterString);
+	}
+
+}
diff --git a/bundleplugin/src/main/java/aQute/libg/reporter/ReporterAdapter.java b/bundleplugin/src/main/java/aQute/libg/reporter/ReporterAdapter.java
index 4ed2ff1..e08c569 100644
--- a/bundleplugin/src/main/java/aQute/libg/reporter/ReporterAdapter.java
+++ b/bundleplugin/src/main/java/aQute/libg/reporter/ReporterAdapter.java
@@ -10,7 +10,7 @@
 /**
  * Mainly used for testing where reporters are needed.
  */
-public class ReporterAdapter implements Reporter, Report {
+public class ReporterAdapter implements Reporter, Report, Runnable {
 	final List<String>	errors		= new ArrayList<String>();
 	final List<String>	warnings	= new ArrayList<String>();
 	final List<LocationImpl> locations = new ArrayList<LocationImpl>();
@@ -204,8 +204,9 @@
 			return true;
 
 		if (!missed.isEmpty())
-			error("Missed the following patterns in the warnings or errors: %s", missed);
+			System.err.println("Missed the following patterns in the warnings or errors: " + missed);
 
+		report(System.err);
 		return false;
 	}
 
@@ -258,4 +259,19 @@
 		return null;
 	}
 
+	/**
+	 * Handy routine that can be extended by subclasses
+	 * so they can run inside the context
+	 */
+	public void run() {
+		throw new UnsupportedOperationException("Must be implemented by subclass");
+	}
+
+	/**
+	 * Return a messages object bound to this adapter
+	 */
+	
+	public <T> T getMessages(Class<T> c) {
+		return ReporterMessages.base(this, c);
+	}
 }
diff --git a/bundleplugin/src/main/java/aQute/libg/reporter/ReporterMessages.java b/bundleplugin/src/main/java/aQute/libg/reporter/ReporterMessages.java
index 375dbc6..d2ca832 100644
--- a/bundleplugin/src/main/java/aQute/libg/reporter/ReporterMessages.java
+++ b/bundleplugin/src/main/java/aQute/libg/reporter/ReporterMessages.java
@@ -10,7 +10,7 @@
 
 public class ReporterMessages {
 
-	static class WARNINGImpl implements ERROR {
+	static class WARNINGImpl implements WARNING {
 		Reporter.SetLocation	loc;
 
 		public SetLocation file(String file) {
@@ -42,7 +42,7 @@
 		}
 	}
 
-	static class ERRORImpl extends WARNINGImpl implements WARNING {
+	static class ERRORImpl extends WARNINGImpl implements ERROR {
 		public ERRORImpl(SetLocation e) {
 			super(e);
 		}
diff --git a/bundleplugin/src/main/java/aQute/libg/version/packageinfo b/bundleplugin/src/main/java/aQute/libg/version/packageinfo
deleted file mode 100644
index b3d1f97..0000000
--- a/bundleplugin/src/main/java/aQute/libg/version/packageinfo
+++ /dev/null
@@ -1 +0,0 @@
-version 1.0.1
diff --git a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/AbstractDependencyFilter.java b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/AbstractDependencyFilter.java
index d111023..e550df1 100644
--- a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/AbstractDependencyFilter.java
+++ b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/AbstractDependencyFilter.java
@@ -28,8 +28,8 @@
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.plugin.MojoExecutionException;
 
-import aQute.lib.osgi.Instruction;
-import aQute.libg.header.OSGiHeader;
+import aQute.bnd.osgi.Instruction;
+import aQute.bnd.header.OSGiHeader;
 
 
 /**
diff --git a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/AntPlugin.java b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/AntPlugin.java
index ac54f0c..63d7b34 100644
--- a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/AntPlugin.java
+++ b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/AntPlugin.java
@@ -31,8 +31,8 @@
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.StringUtils;
 
-import aQute.lib.osgi.Builder;
-import aQute.lib.osgi.Jar;
+import aQute.bnd.osgi.Builder;
+import aQute.bnd.osgi.Jar;
 
 
 /**
diff --git a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BlueprintPlugin.java b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BlueprintPlugin.java
index 746bb26..608e4b3 100644
--- a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BlueprintPlugin.java
+++ b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BlueprintPlugin.java
@@ -40,11 +40,11 @@
 import javax.xml.transform.stream.StreamSource;
 
 import aQute.bnd.service.AnalyzerPlugin;
-import aQute.lib.osgi.Analyzer;
-import aQute.lib.osgi.Descriptors.PackageRef;
-import aQute.lib.osgi.Jar;
-import aQute.lib.osgi.Processor;
-import aQute.lib.osgi.Resource;
+import aQute.bnd.osgi.Analyzer;
+import aQute.bnd.osgi.Descriptors.PackageRef;
+import aQute.bnd.osgi.Jar;
+import aQute.bnd.osgi.Processor;
+import aQute.bnd.osgi.Resource;
 import aQute.libg.generics.Create;
 import aQute.libg.qtokens.QuotedTokenizer;
 import aQute.service.reporter.Reporter;
diff --git a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java
index 8dfa153..17280e7 100644
--- a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java
+++ b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java
@@ -53,8 +53,8 @@
 import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
 import org.codehaus.plexus.util.FileUtils;
 
-import aQute.lib.osgi.Analyzer;
-import aQute.lib.osgi.Jar;
+import aQute.bnd.osgi.Analyzer;
+import aQute.bnd.osgi.Jar;
 
 
 /**
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 fb4948a..496f844 100644
--- a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java
+++ b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java
@@ -67,13 +67,13 @@
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.StringUtils;
 
-import aQute.lib.osgi.Analyzer;
-import aQute.lib.osgi.Builder;
-import aQute.lib.osgi.Constants;
-import aQute.lib.osgi.EmbeddedResource;
-import aQute.lib.osgi.FileResource;
-import aQute.lib.osgi.Jar;
-import aQute.lib.osgi.Processor;
+import aQute.bnd.osgi.Analyzer;
+import aQute.bnd.osgi.Builder;
+import aQute.bnd.osgi.Constants;
+import aQute.bnd.osgi.EmbeddedResource;
+import aQute.bnd.osgi.FileResource;
+import aQute.bnd.osgi.Jar;
+import aQute.bnd.osgi.Processor;
 import aQute.lib.spring.SpringXMLType;
 
 
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 1ab4ccf..0f5578a 100644
--- a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/DependencyEmbedder.java
+++ b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/DependencyEmbedder.java
@@ -29,7 +29,7 @@
 import org.apache.maven.plugin.logging.Log;
 import org.codehaus.plexus.util.StringUtils;
 
-import aQute.lib.osgi.Analyzer;
+import aQute.bnd.osgi.Analyzer;
 
 
 /**
diff --git a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/InstructionsPlugin.java b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/InstructionsPlugin.java
index 9427f92..55ae76e 100644
--- a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/InstructionsPlugin.java
+++ b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/InstructionsPlugin.java
@@ -29,7 +29,7 @@
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.project.MavenProject;
 
-import aQute.lib.osgi.Jar;
+import aQute.bnd.osgi.Jar;
 
 
 /**
diff --git a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java
index c0f3c2b..bbf361d 100644
--- a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java
+++ b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java
@@ -35,10 +35,10 @@
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.project.MavenProject;
 
-import aQute.lib.osgi.Analyzer;
-import aQute.lib.osgi.Builder;
-import aQute.lib.osgi.Jar;
-import aQute.lib.osgi.Resource;
+import aQute.bnd.osgi.Analyzer;
+import aQute.bnd.osgi.Builder;
+import aQute.bnd.osgi.Jar;
+import aQute.bnd.osgi.Resource;
 
 
 /**
diff --git a/bundleplugin/src/main/java/org/apache/maven/shared/osgi/DefaultMaven2OsgiConverter.java b/bundleplugin/src/main/java/org/apache/maven/shared/osgi/DefaultMaven2OsgiConverter.java
index 3bbe15a..e8342d4 100644
--- a/bundleplugin/src/main/java/org/apache/maven/shared/osgi/DefaultMaven2OsgiConverter.java
+++ b/bundleplugin/src/main/java/org/apache/maven/shared/osgi/DefaultMaven2OsgiConverter.java
@@ -33,7 +33,7 @@
 
 import org.apache.maven.artifact.Artifact;
 
-import aQute.lib.osgi.Analyzer;
+import aQute.bnd.osgi.Analyzer;
 
 
 /**
diff --git a/bundleplugin/src/main/resources/aQute/lib/osgi/bnd.info b/bundleplugin/src/main/resources/aQute/bnd/osgi/bnd.info
similarity index 100%
rename from bundleplugin/src/main/resources/aQute/lib/osgi/bnd.info
rename to bundleplugin/src/main/resources/aQute/bnd/osgi/bnd.info
diff --git a/bundleplugin/src/test/java/org/apache/felix/bundleplugin/BlueprintComponentTest.java b/bundleplugin/src/test/java/org/apache/felix/bundleplugin/BlueprintComponentTest.java
index b62083e..21bc367 100644
--- a/bundleplugin/src/test/java/org/apache/felix/bundleplugin/BlueprintComponentTest.java
+++ b/bundleplugin/src/test/java/org/apache/felix/bundleplugin/BlueprintComponentTest.java
@@ -34,7 +34,7 @@
 import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
 import org.osgi.framework.Constants;
 
-import aQute.lib.osgi.Builder;
+import aQute.bnd.osgi.Builder;
 
 
 public class BlueprintComponentTest extends TestCase
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 5aad008..c6f1a7f 100644
--- a/bundleplugin/src/test/java/org/apache/felix/bundleplugin/BundlePluginTest.java
+++ b/bundleplugin/src/test/java/org/apache/felix/bundleplugin/BundlePluginTest.java
@@ -37,9 +37,9 @@
 import org.apache.maven.shared.osgi.DefaultMaven2OsgiConverter;
 import org.osgi.framework.Constants;
 
-import aQute.lib.osgi.Analyzer;
-import aQute.lib.osgi.Builder;
-import aQute.lib.osgi.Jar;
+import aQute.bnd.osgi.Analyzer;
+import aQute.bnd.osgi.Builder;
+import aQute.bnd.osgi.Jar;
 
 
 /**
