*** empty log message ***
diff --git a/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ClasspathComputer2_1.java b/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ClasspathComputer2_1.java
index 86dce73..d2a4534 100644
--- a/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ClasspathComputer2_1.java
+++ b/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ClasspathComputer2_1.java
@@ -175,7 +175,9 @@
 		// If model is a fragment, we need to add in the classpath the plugin to which it is related
 		HostSpecification host = model.getHost();
 		if (host != null) {
-			addPluginAndPrerequisites(host.getSupplier(), classpath, location, pluginChain);
+			BundleDescription[] hosts = host.getHosts();
+			for(int i=0; i<hosts.length; i++)
+				addPluginAndPrerequisites(hosts[i], classpath, location, pluginChain);
 		}
 
 		// Add the libraries
diff --git a/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ClasspathComputer3_0.java b/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ClasspathComputer3_0.java
index 04b9c2f..a8db336 100644
--- a/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ClasspathComputer3_0.java
+++ b/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ClasspathComputer3_0.java
@@ -172,7 +172,9 @@
 		// If model is a fragment, we need to add in the classpath the plugin to which it is related
 		HostSpecification host = model.getHost();
 		if (host != null) {
-			addPluginAndPrerequisites(host.getSupplier(), classpath, location, pluginChain, addedPlugins);
+			BundleDescription[] hosts = host.getHosts();
+			for(int i=0; i<hosts.length; i++)
+				addPluginAndPrerequisites(hosts[i], classpath, location, pluginChain, addedPlugins);
 		}
 
 		// Add the libraries
diff --git a/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/BuildTimeSite.java b/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/BuildTimeSite.java
index 21a386e..9d82527 100644
--- a/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/BuildTimeSite.java
+++ b/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/BuildTimeSite.java
@@ -18,6 +18,7 @@
 import org.eclipse.osgi.service.resolver.*;
 import org.eclipse.pde.internal.build.*;
 import org.eclipse.update.core.*;
+import org.osgi.framework.Version;
 
 /**
  * This site represent a site at build time. A build time site is made of code
@@ -87,7 +88,7 @@
 	public String getResolutionFailureMessage(VersionConstraint unsatisfied) {
 		if (unsatisfied.isResolved())
 			throw new IllegalArgumentException();
-		if (unsatisfied instanceof PackageSpecification)
+		if (unsatisfied instanceof ImportPackageSpecification)
 			return Policy.bind("unsatisfied.import", displayVersionConstraint(unsatisfied));//$NON-NLS-1$
 		if (unsatisfied instanceof BundleSpecification) {
 			if (((BundleSpecification) unsatisfied).isOptional())
@@ -115,9 +116,14 @@
 		}
 		int qualifierIdx = -1;
 		if (versionId != null && (qualifierIdx = versionId.indexOf('.' + IBuildPropertiesConstants.PROPERTY_QUALIFIER))!= -1) {
-			Version versionToMatch = new Version(versionId.substring(0, qualifierIdx));
+			Version versionToMatch = Version.parseVersion(versionId.substring(0, qualifierIdx));
 			for (int i = 0; i < features.length; i++) {
-				if (features[i].getVersionedIdentifier().getIdentifier().equals(featureId) && new Version(features[i].getVersionedIdentifier().getVersion().toString()).matchMinor(versionToMatch))
+				Version featureVersion = Version.parseVersion(features[i].getVersionedIdentifier().getVersion().toString());
+				if (features[i].getVersionedIdentifier().getIdentifier().equals(featureId) &&
+						featureVersion.getMajor() == versionToMatch.getMajor() &&
+						featureVersion.getMinor() == versionToMatch.getMinor() &&
+						featureVersion.getMicro() >= versionToMatch.getMicro() &&
+						featureVersion.getQualifier().compareTo(versionToMatch.getQualifier()) >= 0)
 					return features[i].getFeature(null);
 			}		
 		}
diff --git a/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/PDEState.java b/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/PDEState.java
index c72b883..407608b 100644
--- a/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/PDEState.java
+++ b/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/PDEState.java
@@ -20,6 +20,7 @@
 import org.eclipse.osgi.service.resolver.*;
 import org.eclipse.osgi.util.ManifestElement;
 import org.eclipse.pde.internal.build.*;
+import org.osgi.framework.*;
 import org.osgi.framework.BundleException;
 import org.osgi.framework.Constants;
 
@@ -289,15 +290,13 @@
 	public static BundleDescription[] getImportedBundles(BundleDescription root) {
 		if (root == null)
 			return new BundleDescription[0];
-		PackageSpecification[] packages = root.getPackages();
-		ArrayList resolvedImported = new ArrayList(packages.length);
-		for (int i = 0; i < packages.length; i++) {
-			if (!packages[i].isExported() && packages[i].isResolved() && !resolvedImported.contains(packages[i].getSupplier()))
-				resolvedImported.add(packages[i].getSupplier());
+		ExportPackageDescription[] packages = root.getResolvedImports();
+		ArrayList resolvedImports = new ArrayList(packages.length);
+		for (int i = 0; i < packages.length; i++)
+			if (!root.getLocation().equals(packages[i].getExporter().getLocation()) && !resolvedImports.contains(packages[i].getExporter()))
+				resolvedImports.add(packages[i].getExporter());
+		return (BundleDescription[]) resolvedImports.toArray(new BundleDescription[resolvedImports.size()]);
 		}
-		BundleDescription[] result = new BundleDescription[resolvedImported.size()];
-		return (BundleDescription[]) resolvedImported.toArray(result);
-	}
 
 	/**
 	 * This methods return the bundleDescriptions to which required bundles
@@ -308,30 +307,27 @@
 	public static BundleDescription[] getRequiredBundles(BundleDescription root) {
 		if (root == null)
 			return new BundleDescription[0];
-		BundleSpecification[] required = root.getRequiredBundles();
-		ArrayList resolvedRequired = new ArrayList(required.length);
-		for (int i = 0; i < required.length; i++) {
-			if (required[i].isResolved() && !resolvedRequired.contains(required[i].getSupplier()))
-				resolvedRequired.add(required[i].getSupplier());
+		return root.getResolvedRequires();
 		}
-		BundleDescription[] result = new BundleDescription[resolvedRequired.size()];
-		return (BundleDescription[]) resolvedRequired.toArray(result);
-	}
 
 	public BundleDescription getResolvedBundle(String bundleId, String version) {
 		if (IPDEBuildConstants.GENERIC_VERSION_NUMBER.equals(version) || version == null) {
 			return getResolvedBundle(bundleId);
 		}
-		BundleDescription description = getState().getBundle(bundleId, new Version(version));
+		BundleDescription description = getState().getBundle(bundleId, Version.parseVersion(version));
 		if (description != null && description.isResolved())
 			return description;
 
 		int qualifierIdx = -1;
 		if ((qualifierIdx = version.indexOf('.' + IBuildPropertiesConstants.PROPERTY_QUALIFIER)) != -1) {
 			BundleDescription[] bundles = getState().getBundles(bundleId);
-			Version versionToMatch = new Version(version.substring(0, qualifierIdx));
+			Version versionToMatch = Version.parseVersion(version.substring(0, qualifierIdx));
 			for (int i = 0; i < bundles.length; i++) {
-				if (bundles[i].getVersion().matchMinor(versionToMatch))
+				Version bundleVersion = bundles[i].getVersion();
+				if (bundleVersion.getMajor() == versionToMatch.getMajor() &&
+						bundleVersion.getMinor() == versionToMatch.getMinor() &&
+						bundleVersion.getMicro() >= versionToMatch.getMicro() &&
+						bundleVersion.getQualifier().compareTo(versionToMatch.getQualifier()) >= 0)
 					return bundles[i];
 			}
 		}
diff --git a/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/PluginRegistryConverter.java b/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/PluginRegistryConverter.java
index 8d0cc50..4a8aa00 100644
--- a/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/PluginRegistryConverter.java
+++ b/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/PluginRegistryConverter.java
@@ -18,6 +18,7 @@
 import org.eclipse.osgi.service.resolver.*;
 import org.eclipse.pde.internal.build.*;
 import org.osgi.framework.Constants;
+import org.osgi.framework.Version;
 
 /** 
  * @deprecated
@@ -59,7 +60,7 @@
 		PluginFragmentModel[] fragments = registry.getFragments();
 
 		for (int i = 0; i < plugins.length; i++) {
-			BundleDescription bd = state.getFactory().createBundleDescription(getNextId(), plugins[i].getPluginId(), new Version(plugins[i].getVersion()), plugins[i].getLocation(), createBundleSpecification(plugins[i].getRequires()), (HostSpecification[]) null, null, null, true);
+			BundleDescription bd = state.getFactory().createBundleDescription(getNextId(), plugins[i].getPluginId(), Version.parseVersion(plugins[i].getVersion()), plugins[i].getLocation(), createBundleSpecification(plugins[i].getRequires()), (HostSpecification) null, null, null, null, true);
 			String libs = createClasspath(plugins[i].getRuntime());
 			Properties manifest = new Properties();
 			if (libs != null)
@@ -70,8 +71,8 @@
 		}
 
 		for (int i = 0; i < fragments.length; i++) {
-			HostSpecification host = state.getFactory().createHostSpecification(fragments[i].getPluginId(), new Version(fragments[i].getPluginVersion()), fragments[i].getMatch(), false);
-			BundleDescription bd = state.getFactory().createBundleDescription(getNextId(), fragments[i].getId(), new Version(fragments[i].getVersion()), fragments[i].getLocation(), createBundleSpecification(fragments[i].getRequires()), new HostSpecification[] {host}, null, null, true);
+			HostSpecification host = state.getFactory().createHostSpecification(fragments[i].getPluginId(), new VersionRange(fragments[i].getPluginVersion()));
+			BundleDescription bd = state.getFactory().createBundleDescription(getNextId(), fragments[i].getId(), Version.parseVersion(fragments[i].getVersion()), fragments[i].getLocation(), createBundleSpecification(fragments[i].getRequires()), host, null, null, null, true);
 			String libs = createClasspath(fragments[i].getRuntime());
 			Properties manifest = new Properties();
 			if (libs != null)
@@ -87,7 +88,7 @@
 			return new BundleSpecification[0];
 		BundleSpecification[] specs = new BundleSpecification[prereqs.length];
 		for (int i = 0; i < prereqs.length; i++) {
-			specs[i] = state.getFactory().createBundleSpecification(prereqs[i].getPlugin(), new Version(prereqs[i].getVersion()), prereqs[i].getMatchByte(), prereqs[i].getExport(), prereqs[i].getOptional());
+			specs[i] = state.getFactory().createBundleSpecification(prereqs[i].getPlugin(), new VersionRange(prereqs[i].getVersion()), prereqs[i].getExport(), prereqs[i].getOptional());
 		}
 		return specs;
 	}