diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/core/Feature.java b/update/org.eclipse.update.core/src/org/eclipse/update/core/Feature.java
index 3f420dd..2e197c9 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/core/Feature.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/core/Feature.java
@@ -238,7 +238,7 @@
 		// make sure we have an InstallMonitor		
 		InstallMonitor monitor;
 		if (progress == null)
-			monitor = null;
+			monitor = new InstallMonitor(new NullProgressMonitor());
 		else if (progress instanceof InstallMonitor)
 			monitor = (InstallMonitor) progress;
 		else
@@ -286,8 +286,7 @@
 			// + 1 task for custom non-plugin entry handling (1 for all combined)
 			// + 5*x tasks for children features (5 subtasks per install)
 			int taskCount = 2 + 2 * pluginsToInstall.length + nonPluginsToInstall.length + 1 + 5 * children.length;
-			if (monitor != null)
-				monitor.beginTask("", taskCount);
+			monitor.beginTask("", taskCount);
 			SubProgressMonitor subMonitor = null;
 
 			// start log
@@ -324,13 +323,12 @@
 			for (int i = 0; i < children.length; i++) {
 				IFeature childFeature = null;
 				try {
-					childFeature = children[i].getFeature();
+					childFeature = children[i].getFeature(null);
 				} catch (CoreException e) {
 					UpdateCore.warn(null, e);
 				}
 				if (childFeature != null) {
-					if (monitor != null)
-						subMonitor = new SubProgressMonitor(monitor, 5);
+					subMonitor = new SubProgressMonitor(monitor, 5);
 					((Site) targetSite).install(// need to cast
 					childFeature, optionalfeatures, consumer, verifier, verificationListener, subMonitor);
 				}
@@ -342,22 +340,18 @@
 				IContentConsumer pluginConsumer = consumer.open(pluginsToInstall[i]);
 
 				String msg = "";
-				if (monitor != null) {
-					subMonitor = new SubProgressMonitor(monitor, 1);
-					VersionedIdentifier pluginVerId = pluginsToInstall[i].getVersionedIdentifier();
-					String pluginID = (pluginVerId == null) ? "" : pluginVerId.getIdentifier();
-					msg = Policy.bind("Feature.TaskInstallPluginFiles", pluginID); //$NON-NLS-1$
-				}
-
+				subMonitor = new SubProgressMonitor(monitor, 1);
+				VersionedIdentifier pluginVerId = pluginsToInstall[i].getVersionedIdentifier();
+				String pluginID = (pluginVerId == null) ? "" : pluginVerId.getIdentifier();
+				msg = Policy.bind("Feature.TaskInstallPluginFiles", pluginID); //$NON-NLS-1$
+				
 				for (int j = 0; j < references.length; j++) {
 					setMonitorTaskName(subMonitor, msg + references[j].getIdentifier());
 					pluginConsumer.store(references[j], subMonitor);
 				}
 
-				if (monitor != null) {
-					if (monitor.isCanceled())
+				if (monitor.isCanceled())
 						abort();
-				}
 			}
 
 			// check if we need to install feature files [16718]	
@@ -369,24 +363,20 @@
 				references = provider.getFeatureEntryContentReferences(monitor);
 
 				String msg = "";
-				if (monitor != null) {
-					subMonitor = new SubProgressMonitor(monitor, 1);
-					msg = Policy.bind("Feature.TaskInstallFeatureFiles"); //$NON-NLS-1$
-				}
-
+				subMonitor = new SubProgressMonitor(monitor, 1);
+				msg = Policy.bind("Feature.TaskInstallFeatureFiles"); //$NON-NLS-1$
+				
 				for (int i = 0; i < references.length; i++) {
 					setMonitorTaskName(subMonitor, msg + " " + references[i].getIdentifier());
 					consumer.store(references[i], subMonitor);
 				}
 			} else {
-				if (monitor != null)
-					monitor.worked(1);
+				monitor.worked(1);
 			}
 
-			if (monitor != null) {
-				if (monitor.isCanceled())
-					abort();
-			}
+			if (monitor.isCanceled())
+				abort();
+			
 
 			// call handler to complete installation (eg. handle non-plugin entries)
 			handler.completeInstall(consumer);
@@ -546,9 +536,9 @@
 
 			IFeatureReference[] children = getIncludedFeatureReferences();
 			for (int i = 0; i < children.length; i++) {
-				plugins = children[i].getFeature().getPluginEntries();
+				plugins = children[i].getFeature(null).getPluginEntries();
 				allPluginEntries.addAll(Arrays.asList(plugins));
-				nonPlugins = children[i].getFeature().getNonPluginEntries();
+				nonPlugins = children[i].getFeature(null).getNonPluginEntries();
 				allNonPluginEntries.addAll(Arrays.asList(nonPlugins));
 			}
 
@@ -587,9 +577,9 @@
 
 			IFeatureReference[] children = getIncludedFeatureReferences();
 			for (int i = 0; i < children.length; i++) {
-				plugins = children[i].getFeature().getPluginEntries();
+				plugins = children[i].getFeature(null).getPluginEntries();
 				allPluginEntries.addAll(Arrays.asList(plugins));
-				nonPlugins = children[i].getFeature().getNonPluginEntries();
+				nonPlugins = children[i].getFeature(null).getNonPluginEntries();
 				allNonPluginEntries.addAll(Arrays.asList(nonPlugins));
 			}
 
@@ -832,7 +822,7 @@
 			currentReference = references[i];
 			// do not compare URL
 			try {
-				if (this.equals(currentReference.getFeature()))
+				if (this.equals(currentReference.getFeature(null)))
 					return currentReference; // 18867
 			} catch (CoreException e) {
 				UpdateCore.warn(null, e);
@@ -856,7 +846,7 @@
 
 		IFeature feature = null;
 		try {
-			feature = referenceToReinitialize.getFeature();
+			feature = referenceToReinitialize.getFeature(null);
 			if (feature != null && feature instanceof Feature) {
 				((Feature) feature).initializeIncludedReferences();
 			}
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/core/FeatureReference.java b/update/org.eclipse.update.core/src/org/eclipse/update/core/FeatureReference.java
index dc14391..b75b988 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/core/FeatureReference.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/core/FeatureReference.java
@@ -65,7 +65,8 @@
 
 	/**
 	 * Returns the feature this reference points to 
-	 *  @return the feature on the Site
+	 * @return the feature on the Site
+	 * @deprecated
 	 */
 	public IFeature getFeature() throws CoreException {
 		return getFeature(null);
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/core/IIncludedFeatureReference.java b/update/org.eclipse.update.core/src/org/eclipse/update/core/IIncludedFeatureReference.java
index f1d6f82..7f72847 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/core/IIncludedFeatureReference.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/core/IIncludedFeatureReference.java
@@ -30,6 +30,7 @@
 	 * equivalent to getFeature(false,null);
 	 * 
 	 * @return the referenced feature
+	 * @deprecated use getFeature(IProgressMonitor) instead
 	 * @since 2.0 
 	 */
 	public IFeature getFeature() throws CoreException;
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/core/IncludedFeatureReference.java b/update/org.eclipse.update.core/src/org/eclipse/update/core/IncludedFeatureReference.java
index d945e1d..c7f8952 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/core/IncludedFeatureReference.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/core/IncludedFeatureReference.java
@@ -114,6 +114,7 @@
 	/**
 	 * @see org.eclipse.update.core.IFeatureReference#getFeature(boolean,
 	 * IConfiguredSite)
+	 * @deprecated
 	 */
 	public IFeature getFeature(boolean perfectMatch,IConfiguredSite configuredSite) throws CoreException {
 		return getFeature(perfectMatch,configuredSite,null);
@@ -180,6 +181,7 @@
 	}			
 	/**
 	 * @see org.eclipse.update.core.IFeatureReference#getFeature()
+	 * @deprecated
 	 */
 	public IFeature getFeature() throws CoreException {
 		return getFeature(null);
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/core/Site.java b/update/org.eclipse.update.core/src/org/eclipse/update/core/Site.java
index b3fe3b3..68a0d80 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/core/Site.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/core/Site.java
@@ -326,12 +326,12 @@
 				for (int indexFeatures = 0; indexFeatures < features.length; indexFeatures++) {
 					IFeature featureToCompare = null;
 					try {
-						featureToCompare = features[indexFeatures].getFeature();
+						featureToCompare = features[indexFeatures].getFeature(null);
 					} catch (CoreException e) {
 						UpdateCore.warn(null, e);
 					}
 					if (!feature.equals(featureToCompare)) {
-						IPluginEntry[] pluginEntries = features[indexFeatures].getFeature().getPluginEntries();
+						IPluginEntry[] pluginEntries = features[indexFeatures].getFeature(null).getPluginEntries();
 						if (pluginEntries != null) {
 							for (int indexEntries = 0; indexEntries < pluginEntries.length; indexEntries++) {
 								allPluginID.add(pluginEntries[indexEntries].getVersionedIdentifier());
@@ -480,6 +480,7 @@
 
 	/**
 	 * @see org.eclipse.update.core.ISite#createFeature(String, URL)
+	 * @deprecated
 	 */
 	public IFeature createFeature(String type, URL url) throws CoreException {
 		return createFeature(type,url,null);
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfigurationPolicy.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfigurationPolicy.java
index 2edd3b9..5be886f 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfigurationPolicy.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfigurationPolicy.java
@@ -90,7 +90,7 @@
 
 		IFeature feature = null;
 		try {
-			feature = featureReference.getFeature();
+			feature = featureReference.getFeature(null);
 		} catch (CoreException e) {
 			if (!UpdateManagerUtils.isOptional(featureReference)){			
 				URL url = featureReference.getURL();
@@ -172,7 +172,7 @@
 
 		IFeature feature = null;
 		try {
-			feature = featureReference.getFeature();
+			feature = featureReference.getFeature(null);
 		} catch (CoreException e) {
 			if (!UpdateManagerUtils.isOptional(featureReference)){
 				URL url = featureReference.getURL();
@@ -384,7 +384,7 @@
 				IFeatureReference element = arrayOfFeatureRef[i];
 				IFeature feature = null;
 				try {
-					feature = element.getFeature();
+					feature = element.getFeature(null);
 				} catch (CoreException e) {
 					UpdateCore.warn(null, e);
 				};
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfiguredSite.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfiguredSite.java
index 9a02a1d..3888f74 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfiguredSite.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfiguredSite.java
@@ -187,7 +187,7 @@
 
 			if (installedFeatureRef != null) {
 				try {
-					installedFeature = installedFeatureRef.getFeature();
+					installedFeature = installedFeatureRef.getFeature(null);
 				} catch (CoreException e) {
 					UpdateCore.warn(null, e);
 				}
@@ -254,7 +254,7 @@
 				// our UI will check.
 				// For non-UI application, throw error is feature is configured
 				if (getConfigurationPolicy().isConfigured(referenceToRemove)) {
-					IFeature featureToRemove = ((IFeatureReference) referenceToRemove).getFeature();
+					IFeature featureToRemove = ((IFeatureReference) referenceToRemove).getFeature(null);
 					String featureLabel = (featureToRemove == null) ? null : featureToRemove.getLabel();
 					throw Utilities.newCoreException(Policy.bind("ConfiguredSite.UnableToRemoveConfiguredFeature"
 					//$NON-NLS-1$
@@ -315,7 +315,7 @@
 
 		for (int i = 0; i < childrenRef.length; i++) {
 			try {
-				IFeature child = childrenRef[i].getFeature();
+				IFeature child = childrenRef[i].getFeature(null);
 				configure(child, optionalFeatures, callInstallHandler);
 			} catch (CoreException e) {
 				// will skip any bad children
@@ -354,8 +354,8 @@
 					// must compare feature as optionalFeatures are from the install site
 					// where children are on the local site
 					try {
-						IFeature installedChildren = optionalfeatures[j].getFeature();
-						if (installedChildren.equals(optionalFeatureToConfigure.getFeature(true, null))) {
+						IFeature installedChildren = optionalfeatures[j].getFeature(null);
+						if (installedChildren.equals(optionalFeatureToConfigure.getFeature(true, null, null))) {
 							childrenToInstall.add(optionalFeatureToConfigure);
 							break;
 						}
@@ -426,7 +426,7 @@
 			IIncludedFeatureReference[] childrenRef = feature.getIncludedFeatureReferences();
 			for (int i = 0; i < childrenRef.length; i++) {
 				try {
-					IFeature child = childrenRef[i].getFeature(true, null); // disable the exact feature
+					IFeature child = childrenRef[i].getFeature(true, null, null); // disable the exact feature
 					unconfigure(child, includePatches, true); // check for parent as we should be the only parent.
 				} catch (CoreException e) {
 					// skip any bad children
@@ -463,7 +463,7 @@
 		for (int i = 0; i < frefs.length; i++) {
 			IFeatureReference fref = frefs[i];
 			try {
-				IFeature candidate = fref.getFeature();
+				IFeature candidate = fref.getFeature(null);
 				if (candidate.equals(feature))
 					continue;
 
@@ -585,7 +585,7 @@
 
 				// attempt to access the feature
 				try {
-					feature = configuredFeatures[i].getFeature();
+					feature = configuredFeatures[i].getFeature(null);
 				} catch (CoreException e) {
 					// notify we cannot find the feature
 					UpdateCore.warn(null, e);
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/FeatureExecutableFactory.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/FeatureExecutableFactory.java
index f1ad847..6742f2c 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/FeatureExecutableFactory.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/FeatureExecutableFactory.java
@@ -11,6 +11,7 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.update.core.*;
 import org.eclipse.update.core.model.FeatureModel;
 
@@ -23,47 +24,45 @@
 	 * @see IFeatureFactory#createFeature(URL,ISite,IProgressMonitor)
 	 */
 	public IFeature createFeature(URL url, ISite site, IProgressMonitor monitor) throws CoreException {
-	
-	
+
 		TargetFeature feature = null;
 		InputStream featureStream = null;
-	
+		if (monitor == null)
+			monitor = new NullProgressMonitor();
+
 		if (url == null)
 			return createFeature(site);
-	
+
 		// the URL should point to a directory
 		url = validate(url);
-	
+
 		try {
-			IFeatureContentProvider contentProvider =
-				new FeatureExecutableContentProvider(url);
+			IFeatureContentProvider contentProvider = new FeatureExecutableContentProvider(url);
 			// PERF: Do not create FeatureContentConsumer
 			//IFeatureContentConsumer contentConsumer =new FeatureExecutableContentConsumer();
-	
-			URL nonResolvedURL =
-				contentProvider.getFeatureManifestReference(null /*InstallMonitor */).asURL(); 
+
+			URL nonResolvedURL = contentProvider.getFeatureManifestReference(null).asURL();
 			URL resolvedURL = URLEncoder.encode(nonResolvedURL);
 			featureStream = UpdateCore.getPlugin().get(resolvedURL).getInputStream();
-	
+
 			feature = (TargetFeature) this.parseFeature(featureStream);
+			monitor.worked(1);
 			feature.setSite(site);
-	
+
 			feature.setFeatureContentProvider(contentProvider);
 			// PERF: FeatureContentConsumer
 			//feature.setContentConsumer(contentConsumer);
-	
+
 			feature.resolve(url, url);
 			feature.markReadOnly();
-		} catch (CoreException e){
+		} catch (CoreException e) {
 			throw e;
-		} catch (Exception e){
-			throw Utilities.newCoreException(
-				Policy.bind("FeatureFactory.CreatingError", url.toExternalForm()),
-				e);
+		} catch (Exception e) {
+			throw Utilities.newCoreException(Policy.bind("FeatureFactory.CreatingError", url.toExternalForm()), e);
 			//$NON-NLS-1$
 		} finally {
 			try {
-				if (featureStream!=null)
+				if (featureStream != null)
 					featureStream.close();
 			} catch (IOException e) {
 			}
@@ -84,10 +83,8 @@
 	private IFeature createFeature(ISite site) throws CoreException {
 		TargetFeature feature = null;
 
-		IFeatureContentProvider contentProvider =
-			new FeatureExecutableContentProvider(null);
-		IFeatureContentConsumer contentConsumer =
-			new FeatureExecutableContentConsumer();
+		IFeatureContentProvider contentProvider = new FeatureExecutableContentProvider(null);
+		IFeatureContentConsumer contentConsumer = new FeatureExecutableContentConsumer();
 		feature = (TargetFeature) createFeatureModel();
 		feature.setSite(site);
 		feature.setFeatureContentProvider(contentProvider);
@@ -103,21 +100,15 @@
 	private URL validate(URL url) throws CoreException {
 
 		if (url == null)
-			throw Utilities.newCoreException(
-				Policy.bind("FeatureExecutableFactory.NullURL"),
-				null);
+			throw Utilities.newCoreException(Policy.bind("FeatureExecutableFactory.NullURL"), null);
 		//$NON-NLS-1$
 
-		if (!(url.getFile().endsWith("/")
-			|| url.getFile().endsWith(File.separator)
-			|| url.getFile().endsWith(Feature.FEATURE_XML))) { //$NON-NLS-1$
+		if (!(url.getFile().endsWith("/") || url.getFile().endsWith(File.separator) || url.getFile().endsWith(Feature.FEATURE_XML))) { //$NON-NLS-1$
 			try {
 				String path = url.getFile() + "/"; //$NON-NLS-1$
 				url = new URL(url.getProtocol(), url.getHost(), url.getPort(), path);
 			} catch (MalformedURLException e) {
-				throw Utilities.newCoreException(
-					Policy.bind("FeatureExecutableFactory.CannotCreateURL", url.toExternalForm()),
-					e);
+				throw Utilities.newCoreException(Policy.bind("FeatureExecutableFactory.CannotCreateURL", url.toExternalForm()), e);
 				//$NON-NLS-1$
 			}
 		}
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/FeaturePackagedFactory.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/FeaturePackagedFactory.java
index 6ae14da..9eba322 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/FeaturePackagedFactory.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/FeaturePackagedFactory.java
@@ -10,6 +10,7 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.update.core.*;
 import org.eclipse.update.core.model.URLEntryModel;
 
@@ -24,12 +25,15 @@
 	public IFeature createFeature(URL url,ISite site, IProgressMonitor monitor) throws CoreException {
 		Feature feature = null;
 		InputStream featureStream = null;
-		
+		if (monitor == null)
+			monitor = new NullProgressMonitor();
+					
 		try {	
 			IFeatureContentProvider contentProvider = new FeaturePackagedContentProvider(url);	
 			ContentReference manifest = contentProvider.getFeatureManifestReference(null/*IProgressMonitor*/);
 			featureStream = manifest.getInputStream();
 			feature = (Feature)parseFeature(featureStream);
+			monitor.worked(1);
 	
 			// if there is no update URL for the Feature
 			// use the Site URL
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/InstallConfiguration.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/InstallConfiguration.java
index 4f6d151..fe31c55 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/InstallConfiguration.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/InstallConfiguration.java
@@ -339,7 +339,7 @@
 			for (int j = 0; j < configuredFeaturesRef.length; j++) {
 				IFeature feature = null;
 				try {
-					feature = configuredFeaturesRef[j].getFeature();
+					feature = configuredFeaturesRef[j].getFeature(null);
 				} catch (CoreException e) {
 					UpdateCore.warn(null, e);
 				}
@@ -604,7 +604,7 @@
 					for (int j = 0; j < featuresToUnconfigure.length; j++) {
 						IFeature featureToUnconfigure = null;
 						try {
-							featureToUnconfigure = featuresToUnconfigure[j].getFeature();
+							featureToUnconfigure = featuresToUnconfigure[j].getFeature(null);
 						} catch (CoreException e) {
 							UpdateCore.warn(null, e);
 						}
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/InternalSiteManager.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/InternalSiteManager.java
index 4422234..1ecf86b 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/InternalSiteManager.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/InternalSiteManager.java
@@ -72,6 +72,7 @@
 	 */
 	public static ISite getSite(URL siteURL, boolean useCache, IProgressMonitor monitor) throws CoreException {
 		ISite site = null;
+		if (monitor==null) monitor = new NullProgressMonitor();
 
 		if (siteURL == null)
 			return null;
@@ -99,20 +100,16 @@
 		}
 
 		//PERF: if file: <path>/ and directory exists then consider executable
-		if (monitor != null) {
-			monitor.beginTask(null, 8);
-		}
+		monitor.beginTask(Policy.bind("InternalSiteManager.ConnectingToSite"), 8);
 		if (fileProtocol && directoryExists) {
 			site = attemptCreateSite(DEFAULT_EXECUTABLE_SITE_TYPE, siteURL, monitor);
-			if (monitor != null)
-				monitor.worked(4); // only one attempt
+			monitor.worked(4); // only one attempt
 		} else {
 			try {
 				site = attemptCreateSite(DEFAULT_SITE_TYPE, siteURL, monitor);
-				if (monitor != null)
-					monitor.worked(4);
+				monitor.worked(4);
 			} catch (CoreException preservedException) {
-				if (monitor==null ||(monitor != null && !monitor.isCanceled())) {
+				if (!monitor.isCanceled()) {
 					// attempt a retry is the protocol is file, with executbale type
 					if (!fileProtocol)
 						throw preservedException;
@@ -149,17 +146,17 @@
 	 * attempt to create a type with the type found in the site.xml
 	 */
 	private static ISite attemptCreateSite(String guessedTypeSite, URL siteURL, IProgressMonitor monitor) throws CoreException {
+		if (monitor != null) monitor = new NullProgressMonitor();
 		ISite site = null;
 
 		try {
 			site = createSite(guessedTypeSite, siteURL, monitor);
-			if (monitor != null)
-				monitor.worked(2); // no error, teh rtry doesn't need to be executed
+			monitor.worked(2); // if no error, occurs the retry branch doesn't need to be executed
 		} catch (InvalidSiteTypeException e) {
+			if (monitor.isCanceled()) return null;
 
 			// the type in the site.xml is not the one expected	
 			// attempt to use this type instead	
-
 			//DEBUG:
 			if (UpdateCore.DEBUG && UpdateCore.DEBUG_SHOW_TYPE) {
 				UpdateCore.debug("The Site :" + siteURL.toExternalForm() + " is a different type than the guessed type based on the protocol. new Type:" + e.getNewType());
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SessionDelta.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SessionDelta.java
index 5b02743..02324e2 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SessionDelta.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SessionDelta.java
@@ -145,7 +145,7 @@
 			configuredFeaturesRef = configuredSites[i].getConfiguredFeatures();
 			for (int j = 0; j < configuredFeaturesRef.length; j++) {
 				try {
-					feature = configuredFeaturesRef[j].getFeature();
+					feature = configuredFeaturesRef[j].getFeature(null);
 					int result = compare(newlyConfiguredFeatures, feature);
 					if (result != 0) {
 						if (result == 1) {
@@ -215,6 +215,7 @@
 	public void process(IFeatureReference[] selected, IProgressMonitor pm) throws CoreException {
 		
 		createInstallConfiguration();
+		if (pm==null) pm = new NullProgressMonitor();
 
 		// process all feature references to configure
 		// find the configured site each feature belongs to
@@ -223,10 +224,8 @@
 			UpdateCore.warn("ENABLE SESSION DELTA");
 			if (featureReferences != null && featureReferences.size() > 0) {
 				// manage ProgressMonitor
-				if (pm != null) {
-					int nbFeatures = featureReferences.size();
-					pm.beginTask(Policy.bind("SessionDelta.EnableFeatures"), nbFeatures);
-				}
+				int nbFeatures = featureReferences.size();
+				pm.beginTask(Policy.bind("SessionDelta.EnableFeatures"), nbFeatures);
 				// since 2.0.2 ISite.getConfiguredSite()
 				// find the configuredSite that maintains this featureReference
 				// configure the feature
@@ -237,15 +236,13 @@
 					ref = (IFeatureReference) selected[i];
 
 					try {
-						featureToConfigure = ref.getFeature();
+						featureToConfigure = ref.getFeature(null);
 					} catch (CoreException e) {
 						UpdateCore.warn(null, e);
 					}
 
 					if (featureToConfigure != null) {
-						if (pm != null)
-							pm.worked(1);
-
+						pm.worked(1);
 						configSite = ref.getSite().getCurrentConfiguredSite();
 						try {
 							// make sure only the latest version of the configured features
@@ -269,7 +266,5 @@
 
 		delete();
 		saveLocalSite();
-				
 	}
-
 }
\ No newline at end of file
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteFile.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteFile.java
index 27c0887..d77956c 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteFile.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteFile.java
@@ -186,12 +186,12 @@
 			for (int i = 0; i < childrenRef.length; i++) {
 				IFeature childFeature = null;
 				try {
-					childFeature = childrenRef[i].getFeature();
+					childFeature = childrenRef[i].getFeature(null);
 				} catch (CoreException e) {
 					UpdateCore.warn("Unable to retrieve feature to remove for:" + childrenRef[i]);
 				}
 				if (childFeature != null)
-					remove(childrenRef[i].getFeature(), monitor);
+					remove(childrenRef[i].getFeature(null), monitor);
 			}
 
 			handler.completeUninstall();
@@ -272,7 +272,7 @@
 			IFeatureReference[] children = feature.getIncludedFeatureReferences();
 			IFeature currentFeature = null;
 			for (int i = 0; i < children.length; i++) {
-				currentFeature = children[i].getFeature();
+				currentFeature = children[i].getFeature(null);
 				if (currentFeature != null) {
 					pluginsToInstall.addAll(Arrays.asList(currentFeature.getPluginEntries()));
 				}
@@ -336,7 +336,7 @@
 	private IFeature createExecutableFeature(IFeature sourceFeature) throws CoreException {
 		IFeature result = null;
 		IFeatureFactory factory = FeatureTypeFactory.getInstance().getFactory(DEFAULT_INSTALLED_FEATURE_TYPE);
-		result = factory.createFeature(/*URL*/null, this);
+		result = factory.createFeature(/*URL*/null, this, null);
 
 		// at least set the version identifier to be the same
 		 ((FeatureModel) result).setFeatureIdentifier(sourceFeature.getVersionedIdentifier().getIdentifier());
@@ -417,7 +417,7 @@
 		IFeature childFeature = null;
 		for (int i = 0; i < childrenRef.length; i++) {
 			try {
-				childFeature = childrenRef[i].getFeature();
+				childFeature = childrenRef[i].getFeature(null);
 			} catch (CoreException e) {
 				UpdateCore.warn("Unable to retrieve feature to remove for:" + childrenRef[i]);
 			}
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteFileContentConsumer.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteFileContentConsumer.java
index c1a8743..fa03778 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteFileContentConsumer.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteFileContentConsumer.java
@@ -245,7 +245,7 @@
 		 ((SiteFile) getSite()).addFeatureReferenceModel((SiteFeatureReferenceModel) localFeatureReference);
 		IFeature localFeature = null;
 		try {
-			localFeature = localFeatureReference.getFeature();
+			localFeature = localFeatureReference.getFeature(null);
 		} catch (CoreException e) {
 			UpdateCore.warn(null, e);
 			return;
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteFileFactory.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteFileFactory.java
index 7e0146d..e3dbaef 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteFileFactory.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteFileFactory.java
@@ -333,18 +333,6 @@
 		}
 	}
 
-	/**
-	 * 
-	 */
-	private IFeature createFeature(URL url, String type) throws CoreException {
-		// InternalFeatureReference
-		SiteFeatureReference ref = new SiteFeatureReference();
-		ref.setSite(site);
-		ref.setURL(url);
-		ref.setType(type);
-		return ref.getFeature();
-	}
-
 	/*
 	 * @see SiteModelFactory#createSiteMapModel()
 	 */
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteReconciler.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteReconciler.java
index f02de6f..d366c8b 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteReconciler.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteReconciler.java
@@ -117,7 +117,7 @@
 				if (UpdateCore.DEBUG && UpdateCore.DEBUG_SHOW_RECONCILER) {
 					UpdateCore.debug("Site not found in previous configurations.Create new Configured Site:" + resolvedURL);
 				}
-				ISite site = SiteManager.getSite(resolvedURL);
+				ISite site = SiteManager.getSite(resolvedURL,null);
 
 				//site policy
 				IPlatformConfiguration.ISitePolicy sitePolicy = currentSiteEntry.getSitePolicy();
@@ -418,8 +418,8 @@
 		IFeature feature1 = null;
 		IFeature feature2 = null;
 		try {
-			feature1 = featureRef1.getFeature();
-			feature2 = featureRef2.getFeature();
+			feature1 = featureRef1.getFeature(null);
+			feature2 = featureRef2.getFeature(null);
 		} catch (CoreException e) {
 			UpdateCore.warn(null, e);
 			return 0;
@@ -669,7 +669,7 @@
 		ArrayList allPossibleConfiguredFeatures = new ArrayList();
 		for (int i = 0; i < configuredRefs.length; i++) {
 			try {
-				IFeature feature = configuredRefs[i].getFeature();
+				IFeature feature = configuredRefs[i].getFeature(null);
 				allPossibleConfiguredFeatures.add(feature);
 				// debug
 				if (UpdateCore.DEBUG && UpdateCore.DEBUG_SHOW_RECONCILER) {
@@ -730,9 +730,9 @@
 					IFeature child = null;
 					try {
 						//remove best match and exact feature
-						child = children[j].getFeature(false, null);
+						child = children[j].getFeature(false, null, null);
 						result.remove(child);
-						child = children[j].getFeature(true, null);
+						child = children[j].getFeature(true, null, null);
 						result.remove(child);
 					} catch (CoreException e) {
 						// if optional, it may not exist, do not throw error for that
@@ -818,7 +818,7 @@
 		for (int j = 0; j < children.length; j++) {
 			IFeature child = null;
 			try {
-				child = children[j].getFeature();
+				child = children[j].getFeature(null);
 			} catch (CoreException e) {
 				if (!UpdateManagerUtils.isOptional(children[j]))
 					UpdateCore.warn("", e);
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteStatusAnalyzer.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteStatusAnalyzer.java
index a7185a0..ce326e5 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteStatusAnalyzer.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteStatusAnalyzer.java
@@ -57,54 +57,6 @@
 			return label;
 		}
 	}
-	/**
-	* compare two feature references
-	* returns 0 if the feature are different
-	* returns 1 if the version of feature 1 is greater than version of feature 2
-	* returns 2 if opposite
-	*/
-	private int compare(IFeatureReference featureRef1, IFeatureReference featureRef2) throws CoreException {
-		if (featureRef1 == null)
-			return 0;
-
-		IFeature feature1 = null;
-		IFeature feature2 = null;
-		try {
-			feature1 = featureRef1.getFeature();
-			feature2 = featureRef2.getFeature();
-		} catch (CoreException e) {
-			UpdateCore.warn(null, e);
-			return 0;
-		}
-
-		if (feature1 == null || feature2 == null) {
-			return 0;
-		}
-
-		VersionedIdentifier id1 = feature1.getVersionedIdentifier();
-		VersionedIdentifier id2 = feature2.getVersionedIdentifier();
-
-		if (id1 == null || id2 == null) {
-			return 0;
-		}
-
-		if (id1.getIdentifier() != null && id1.getIdentifier().equals(id2.getIdentifier())) {
-			PluginVersionIdentifier version1 = id1.getVersion();
-			PluginVersionIdentifier version2 = id2.getVersion();
-			if (version1 != null) {
-				boolean greaterOrEqual = (version1.isGreaterOrEqualTo(version2));
-				if (greaterOrEqual) {
-					return 1;
-				} else {
-					return 2;
-				}
-			} else {
-				return 2;
-			}
-		}
-		return 0;
-	}
-
 	/*
 	 *  check if the Plugins of the feature are on the plugin path
 	 *  If all the plugins are on the plugin path, and the version match and there is no other version -> HAPPY
@@ -191,7 +143,7 @@
 			for (int i = 0; i < children.length; i++) {
 				if (!UpdateManagerUtils.isOptional(children[i])) {
 					try {
-						childFeature = children[i].getFeature();
+						childFeature = children[i].getFeature(null);
 					} catch (CoreException e) {
 						if (!UpdateManagerUtils.isOptional(children[i]))
 							UpdateCore.warn("Error retrieving feature:" + children[i]);
@@ -400,7 +352,7 @@
 				for (int j = 0; j < refs.length; j++) {
 					feature = null;
 					try {
-						feature = refs[j].getFeature();
+						feature = refs[j].getFeature(null);
 					} catch (CoreException e) {
 					}
 					if (feature != null) {
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/UpdateManagerUtils.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/UpdateManagerUtils.java
index 6d534e2..f19785d 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/UpdateManagerUtils.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/UpdateManagerUtils.java
@@ -433,12 +433,12 @@
 		IFeature compareFeature = null;
 		for (int i = 0; i < possiblesParent.length; i++) {
 			try {
-				IFeature possibleParentFeature = possiblesParent[i].getFeature();
+				IFeature possibleParentFeature = possiblesParent[i].getFeature(null);
 				if (possibleParentFeature != null) {
 					children = possibleParentFeature.getIncludedFeatureReferences();
 					for (int j = 0; j < children.length; j++) {
 						try {
-							compareFeature = children[j].getFeature(true,null); // compare with the 'real' feature, not the best match
+							compareFeature = children[j].getFeature(true,null,null); // compare with the 'real' feature, not the best match
 						} catch (CoreException e) {
 							UpdateCore.warn("", e);
 						};
@@ -482,7 +482,7 @@
 
 		IFeature childFeature = null;
 		try {
-			childFeature = child.getFeature();
+			childFeature = child.getFeature(null);
 		} catch (CoreException e) {
 			UpdateCore.warn(null, e);
 		}
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/messages.properties b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/messages.properties
index 41d85a1..747dee1 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/messages.properties
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/messages.properties
@@ -168,6 +168,7 @@
 InternalSiteManager.UnableToCreateURL= Unable to create URL from \"{0}\".
 InternalSiteManager.UnableToParseURL= Unable to parse the stream \"{0}\".
 InternalSiteManager.FailedRetryAccessingSite= Failed retry accessing site using default installed format instead of default packaged format.
+InternalSiteManager.ConnectingToSite = Connecting To Site...
 
 SiteReconciler.UnableToFindInstallDeltaFactory= Internal Error: Unable to find factory to display changes. Open the Update Manager manually.
 
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/model/InstallChangeParser.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/model/InstallChangeParser.java
index ff972c9..12a2834 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/model/InstallChangeParser.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/model/InstallChangeParser.java
@@ -138,7 +138,7 @@
 				e);
 			//$NON-NLS-1$
 		}
-		ISite currentSite = SiteManager.getSite(siteURL);
+		ISite currentSite = SiteManager.getSite(siteURL,null);
 
 		// feature url
 		String featureUrlPath = attributes.getValue("featureURL"); //$NON-NLS-1$
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/model/InstallConfigurationParser.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/model/InstallConfigurationParser.java
index 6105246..a9eafcd 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/model/InstallConfigurationParser.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/model/InstallConfigurationParser.java
@@ -142,7 +142,7 @@
 		//site url
 		String urlString = attributes.getValue("url"); //$NON-NLS-1$
 		siteURL = new URL(urlString);
-		ISite site = SiteManager.getSite(siteURL);
+		ISite site = SiteManager.getSite(siteURL,null);
 		sites.put(urlString,site);
 
 		// policy
