Bug 247095 - p2 reconciler not deleting lines associated with removed features/plugins/sites from USER-INCLUDE sites in platform.xml from bundles.info
diff --git a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxManipulatorImpl.java b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxManipulatorImpl.java
index 963bcac..6461b54 100644
--- a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxManipulatorImpl.java
+++ b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxManipulatorImpl.java
@@ -628,7 +628,16 @@
 			return urlString;
 
 		String rootString = rootURL.toExternalForm();
-		return urlString.substring(0, index) + makeRelative(urlString.substring(index), rootString.substring(rootString.indexOf(FILE_PROTOCOL) + 5));
+		IPath one = new Path(urlString.substring(index));
+		IPath two = new Path(rootString.substring(rootString.indexOf(FILE_PROTOCOL) + 5));
+		String deviceOne = one.getDevice();
+		String deviceTwo = two.getDevice();
+		// do checking here because we want to return the exact string we got initially if
+		// we are unable to make it relative.
+		if (deviceOne != deviceTwo && (deviceOne == null || !deviceOne.equalsIgnoreCase(two.getDevice())))
+			return urlString;
+
+		return urlString.substring(0, index) + makeRelative(one, two);
 	}
 
 	public static String makeArrayRelative(String array, URL rootURL) {
diff --git a/bundles/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorImpl.java b/bundles/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorImpl.java
index 9737137..7e35e66 100644
--- a/bundles/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorImpl.java
+++ b/bundles/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorImpl.java
@@ -528,7 +528,16 @@
 			return urlString;
 
 		String rootString = rootURL.toExternalForm();
-		return urlString.substring(0, index) + makeRelative(new Path(urlString.substring(index)), new Path(rootString.substring(rootString.indexOf(FILE_PROTOCOL) + 5)));
+		IPath one = new Path(urlString.substring(index));
+		IPath two = new Path(rootString.substring(rootString.indexOf(FILE_PROTOCOL) + 5));
+		String deviceOne = one.getDevice();
+		String deviceTwo = two.getDevice();
+		// do checking here because we want to return the exact string we got initially if
+		// we are unable to make it relative.
+		if (deviceOne != deviceTwo && (deviceOne == null || !deviceOne.equalsIgnoreCase(two.getDevice())))
+			return urlString;
+
+		return urlString.substring(0, index) + makeRelative(one, two);
 	}
 
 	public static String makeAbsolute(String original, String rootPath) {