Fix for bug 247095
diff --git a/bundles/org.eclipse.equinox.frameworkadmin/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.frameworkadmin/META-INF/MANIFEST.MF
index 53e28cd..e28b8d7 100644
--- a/bundles/org.eclipse.equinox.frameworkadmin/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.frameworkadmin/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.frameworkadmin;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.3.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Import-Package: org.eclipse.osgi.service.pluginconversion;version="1.0.0",
diff --git a/bundles/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/BundleInfo.java b/bundles/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/BundleInfo.java
index 69a6f58..c3c1c1a 100644
--- a/bundles/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/BundleInfo.java
+++ b/bundles/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/BundleInfo.java
@@ -124,7 +124,6 @@
 	public int hashCode() {
 		int result = symbolicName == null ? 0 : symbolicName.hashCode();
 		result = result + (version == null ? 0 : version.hashCode());
-		result = result + (location == null ? 0 : new Path(location).toFile().hashCode());
 		return result;
 	}
 
diff --git a/bundles/org.eclipse.equinox.p2.extensionlocation/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.p2.extensionlocation/META-INF/MANIFEST.MF
index 8192c6f..ebb4132 100644
--- a/bundles/org.eclipse.equinox.p2.extensionlocation/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.p2.extensionlocation/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.3.qualifier
 Bundle-SymbolicName: org.eclipse.equinox.p2.extensionlocation;singleton:=true
 Bundle-Activator: org.eclipse.equinox.internal.p2.extensionlocation.Activator
 Bundle-RequiredExecutionEnvironment: J2SE-1.4,
diff --git a/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/SiteListener.java b/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/SiteListener.java
index 0154e65..0f1fdab 100644
--- a/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/SiteListener.java
+++ b/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/SiteListener.java
@@ -87,8 +87,6 @@
 			if (contains(list, file))
 				return false;
 		} else if (Site.POLICY_USER_INCLUDE.equals(policy)) {
-			if (isFeature(file))
-				return true;
 			// we are only interested in plug-ins in the list
 			if (!contains(list, file))
 				return false;
@@ -102,11 +100,6 @@
 		return !isToBeRemoved(file);
 	}
 
-	private boolean isFeature(File file) {
-		String parent = file.getParent();
-		return parent != null && parent.endsWith(FEATURES);
-	}
-
 	/*
 	 * Return a boolean value indicating whether or not the feature pointed to
 	 * by the given file is in the update manager's list of features to be
diff --git a/bundles/org.eclipse.equinox.p2.reconciler.dropins/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.p2.reconciler.dropins/META-INF/MANIFEST.MF
index 8894fa2..3970e63 100644
--- a/bundles/org.eclipse.equinox.p2.reconciler.dropins/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.p2.reconciler.dropins/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.3.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.reconciler.dropins.Activator
 Bundle-RequiredExecutionEnvironment: J2SE-1.4,
  CDC-1.1/Foundation-1.1
diff --git a/bundles/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/PlatformXmlListener.java b/bundles/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/PlatformXmlListener.java
index 296d021..b262693 100644
--- a/bundles/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/PlatformXmlListener.java
+++ b/bundles/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/PlatformXmlListener.java
@@ -42,16 +42,32 @@
 	private long lastModified = -1l;
 	private Set configRepositories;
 
-	private String toString(String[] list) {
-		if (list == null || list.length == 0)
-			return ""; //$NON-NLS-1$
+	private String toString(Feature[] features, String[] list) {
 		StringBuffer buffer = new StringBuffer();
-		for (int i = 0; i < list.length; i++) {
-			buffer.append(list[i]);
-			if (i + 1 < list.length)
-				buffer.append(',');
+		if (features != null) {
+			for (int i = 0; i < features.length; i++) {
+				String featureURL = features[i].getUrl();
+				if (featureURL != null)
+					buffer.append(featureURL).append(',');
+				else {
+					String id = features[i].getId();
+					String version = features[i].getVersion();
+					if (id != null && version != null)
+						buffer.append("features/" + id + "_" + version + "/,"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$					
+				}
+			}
 		}
-		return buffer.toString();
+		if (list != null) {
+			for (int i = 0; i < list.length; i++) {
+				buffer.append(list[i]).append(',');
+				if (i + 1 < list.length)
+					buffer.append(',');
+			}
+		}
+		if (buffer.length() == 0)
+			return ""; //$NON-NLS-1$
+
+		return buffer.substring(0, buffer.length() - 1);
 	}
 
 	/*
@@ -181,7 +197,7 @@
 					URL location = new URL(eclipseExtensionURL);
 					Map properties = new HashMap();
 					properties.put(SiteListener.SITE_POLICY, site.getPolicy());
-					properties.put(SiteListener.SITE_LIST, toString(site.getList()));
+					properties.put(SiteListener.SITE_LIST, toString(site.getFeatures(), site.getList()));
 					properties.put(IRepository.PROP_SYSTEM, Boolean.TRUE.toString());
 
 					// deal with the metadata repository