*** empty log message ***
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