*** empty log message ***
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/forms/DetailsForm.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/forms/DetailsForm.java
index d5f5938..d9b6d04 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/forms/DetailsForm.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/forms/DetailsForm.java
@@ -505,7 +505,7 @@
 					IFeatureAdapter adapter = (IFeatureAdapter) obj;
 					try {
 						currentAdapter = adapter;
-						currentFeature = adapter.getFeature();
+						currentFeature = adapter.getFeature(null);
 					} catch (CoreException e) {
 						//UpdateUIPlugin.logException(e);
 						currentFeature =
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/forms/SiteForm.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/forms/SiteForm.java
index a91431a..e956559 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/forms/SiteForm.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/forms/SiteForm.java
@@ -144,7 +144,7 @@
 		if (webSite)
 			return currentAdapter.getURL();
 		else {
-			ISite site = currentAdapter.getSite();
+			ISite site = currentAdapter.getSite(null);
 			if (site == null)
 				return null;
 			if (rawURL)
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/ConfiguredFeatureAdapter.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/ConfiguredFeatureAdapter.java
index 654c85b..8c5c5aa 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/ConfiguredFeatureAdapter.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/ConfiguredFeatureAdapter.java
@@ -7,7 +7,9 @@
 package org.eclipse.update.internal.ui.model;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.PluginVersionIdentifier;
+import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.update.configuration.*;
 import org.eclipse.update.core.*;
 
@@ -47,19 +49,22 @@
 	public boolean isUpdated() {
 		return updated;
 	}
-	public IFeatureAdapter[] getIncludedFeatures() {
+	public IFeatureAdapter[] getIncludedFeatures(IProgressMonitor monitor) {
 		try {
 			IIncludedFeatureReference[] included =
-				getFeature().getIncludedFeatureReferences();
+				getFeature(null).getIncludedFeatureReferences();
 			ConfiguredFeatureAdapter[] result =
 				new ConfiguredFeatureAdapter[included.length];
+			SubProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1);
+			subMonitor.beginTask("", included.length);
+
 			for (int i = 0; i < included.length; i++) {
 				IIncludedFeatureReference fref = included[i];
 				IFeature feature;
 				boolean childConfigured=configured;
 				boolean updated = false;
 				try {
-					feature = fref.getFeature(!configured, getConfigurationSite());
+					feature = fref.getFeature(!configured, getConfigurationSite(), new SubProgressMonitor(subMonitor, 1));
 					childConfigured = adapter.getConfigurationSite().isConfigured(feature);
 					///*
 					PluginVersionIdentifier refpid = fref.getVersionedIdentifier().getVersion();
@@ -67,7 +72,7 @@
 					updated = !refpid.equals(fpid);
 					//*/
 				} catch (CoreException e) {
-					feature = new MissingFeature(getFeature(), fref);
+					feature = new MissingFeature(getFeature(null), fref);
 					childConfigured = false;
 				}
 				
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/FeatureAdapter.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/FeatureAdapter.java
index e701409..209ceab 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/FeatureAdapter.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/FeatureAdapter.java
@@ -8,7 +8,8 @@
 

 import org.eclipse.update.configuration.*;
 import org.eclipse.update.core.*;
-import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 

 /**

  * @version 	1.0

@@ -34,16 +35,16 @@
 	
 	public String toString() {
 		try {
-			IFeature feature = getFeature();
+			IFeature feature = getFeature(null);
 			return feature.getLabel();
 		}
 		catch (CoreException e) {
 			return "<failure>";
 		}
 	}
-	public boolean hasIncludedFeatures() {
+	public boolean hasIncludedFeatures(IProgressMonitor monitor) {
 		try {
-			IFeatureReference [] included = getFeature().getIncludedFeatureReferences();
+			IFeatureReference [] included = getFeature(monitor).getIncludedFeatureReferences();
 			return included.length>0;
 		}
 		catch (CoreException e) {
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/FeatureReferenceAdapter.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/FeatureReferenceAdapter.java
index f4d0986..1b732c4 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/FeatureReferenceAdapter.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/FeatureReferenceAdapter.java
@@ -6,6 +6,7 @@
 import java.net.URL;

 

 import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.IProgressMonitor;

 import org.eclipse.update.core.*;

 

 public class FeatureReferenceAdapter extends FeatureAdapter {

@@ -16,8 +17,12 @@
 		setIncluded(featureRef instanceof IIncludedFeatureReference);

 	}

 	

-	public IFeature getFeature() throws CoreException {

-		return featureRef.getFeature();

+	public IFeature getFeature(IProgressMonitor monitor) throws CoreException {

+		return featureRef.getFeature(monitor);

+	}

+	

+	public String getFastLabel() {

+		return featureRef.getURL().toString();

 	}

 	

 	public ISite getSite() {

@@ -33,10 +38,10 @@
 			((IIncludedFeatureReference)featureRef).isOptional():false;

 	}

 

-	public IFeatureAdapter[] getIncludedFeatures() {

+	public IFeatureAdapter[] getIncludedFeatures(IProgressMonitor monitor) {

 		try {

 			IFeatureReference[] included =

-				getFeature().getIncludedFeatureReferences();

+				getFeature(monitor).getIncludedFeatureReferences();

 			FeatureReferenceAdapter[] result =

 				new FeatureReferenceAdapter[included.length];

 			for (int i = 0; i < included.length; i++) {

diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/IFeatureAdapter.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/IFeatureAdapter.java
index 65300e0..181a7e2 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/IFeatureAdapter.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/IFeatureAdapter.java
@@ -9,7 +9,8 @@
 import java.net.URL;
 
 import org.eclipse.update.core.*;
-import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 

 /**

  * @version 	1.0

@@ -18,9 +19,10 @@
 public interface IFeatureAdapter {
 	public URL getURL();
 	public ISite getSite();
-	public IFeature getFeature() throws CoreException;
-	public IFeatureAdapter [] getIncludedFeatures();
-	public boolean hasIncludedFeatures();
+	public IFeature getFeature(IProgressMonitor monitor) throws CoreException;
+	public IFeatureAdapter [] getIncludedFeatures(IProgressMonitor monitor);
+	public boolean hasIncludedFeatures(IProgressMonitor monitor);
 	public boolean isIncluded();
 	public boolean isOptional();
+	public String getFastLabel();
 }

diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/ISiteAdapter.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/ISiteAdapter.java
index e3bc57b..bba80a8 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/ISiteAdapter.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/ISiteAdapter.java
@@ -1,5 +1,6 @@
 package org.eclipse.update.internal.ui.model;

 

+import org.eclipse.core.runtime.IProgressMonitor;

 import org.eclipse.update.core.ISite;

 import java.net.URL;

 

@@ -7,7 +8,7 @@
 	

 	public String getLabel();

 	public URL getURL();

-	public ISite getSite();

+	public ISite getSite(IProgressMonitor monitor);

 

 }

 

diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/MyComputer.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/MyComputer.java
index 6f7dd84..454d275 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/MyComputer.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/MyComputer.java
@@ -117,7 +117,7 @@
 				monitor.subTask(child.getPath());

 				SiteBookmark bookmark = MyComputerDirectory.createSite(child);

 				if (bookmark != null) {

-					ISite site = bookmark.getSite(false);

+					ISite site = bookmark.getSite(false, null);

 					if (site != null)

 						sites.add(bookmark);

 				} else

diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/SimpleFeatureAdapter.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/SimpleFeatureAdapter.java
index 7efd2ef..f035f79 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/SimpleFeatureAdapter.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/SimpleFeatureAdapter.java
@@ -9,7 +9,8 @@
 import java.net.URL;
 
 import org.eclipse.update.core.*;
-import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 

 /**

  * @version 	1.0

@@ -26,10 +27,14 @@
 		this.optional = optional;
 	}
 	
-	public IFeature getFeature() throws CoreException {
+	public IFeature getFeature(IProgressMonitor monitor) throws CoreException {
 		return feature;
 	}
 	
+	public String getFastLabel() {
+		return feature.getLabel();
+	}
+	
 	public URL getURL() {
 		return feature.getURL();
 	}
@@ -38,9 +43,9 @@
 		return feature.getSite();
 	}
 	
-	public IFeatureAdapter[] getIncludedFeatures() {
+	public IFeatureAdapter[] getIncludedFeatures(IProgressMonitor monitor) {
 		try {
-			IIncludedFeatureReference[] included = getFeature().getIncludedFeatureReferences();
+			IIncludedFeatureReference[] included = getFeature(monitor).getIncludedFeatureReferences();
 			SimpleFeatureAdapter[] result =
 				new SimpleFeatureAdapter[included.length];
 			for (int i = 0; i < included.length; i++) {
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/SiteBookmark.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/SiteBookmark.java
index b1c1a6c..a025978 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/SiteBookmark.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/SiteBookmark.java
@@ -64,14 +64,14 @@
 		notifyObjectChanged(P_URL);

 	}

 	

-	public ISite getSite() {

-		return getSite(true);

+	public ISite getSite(IProgressMonitor monitor) {

+		return getSite(true, monitor);

 	}

 	

-	public ISite getSite(boolean showDialogIfFailed) {

+	public ISite getSite(boolean showDialogIfFailed, IProgressMonitor monitor) {

 		if (site==null) {

 			try {

-				connect();

+				connect(monitor);

 			}

 			catch (CoreException e) {

 				UpdateUIPlugin.logException(e, showDialogIfFailed);

@@ -84,39 +84,50 @@
 		return site!=null;

 	}

 	

-	public void connect() throws CoreException {

-		connect(true);

+	public void connect(IProgressMonitor monitor) throws CoreException {

+		connect(true, monitor);

 	}

 	

-	public void connect(boolean useCache) throws CoreException {

-		site = SiteManager.getSite(url, useCache);

-		createCatalog();

+	public void connect(boolean useCache, IProgressMonitor monitor) throws CoreException {

+		monitor.beginTask("", 2);

+		monitor.subTask("Connecting to "+url.toString()+"...");

+		site = SiteManager.getSite(url, useCache, new SubProgressMonitor(monitor, 1));

+		createCatalog(new SubProgressMonitor(monitor, 1));

 	}

 	

-	private void createCatalog() {

+	private void createCatalog(IProgressMonitor monitor) {

 		catalog = new Vector();

 		otherCategory = new SiteCategory(null, null);

 		// Add all the categories

 		ICategory [] categories;

+		monitor.subTask("Loading categories...");

 		categories = site.getCategories();

+		

+		ISiteFeatureReference [] featureRefs;

+		monitor.subTask("Loading feature references...");

+		featureRefs = site.getRawFeatureReferences();

+		

+		monitor.beginTask("", featureRefs.length + categories.length);

 

 		for (int i=0; i<categories.length; i++) {

 			ICategory category = categories[i];

+			monitor.subTask("Adding category: "+category.getLabel());

 			addCategoryToCatalog(category);

+			monitor.worked(1);

 		}

 		// Add features to categories

-		ISiteFeatureReference [] featureRefs;

-		featureRefs = site.getFeatureReferences();

 

+		monitor.subTask("Linking features and categories...");

 		for (int i=0; i<featureRefs.length; i++) {

 			ISiteFeatureReference featureRef = featureRefs[i];

 			addFeatureToCatalog(featureRef);

+			monitor.worked(1);

 		}

 		if (otherCategory.getChildCount()>0)

 		   catalog.add(otherCategory);

 	}

 

-	public Object [] getCatalog(boolean withCategories) {

+	public Object [] getCatalog(boolean withCategories, IProgressMonitor monitor) {

 		if (withCategories)

 			return catalog.toArray();

 		else {

diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/SiteCategory.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/SiteCategory.java
index 74fe31d..9415d4d 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/SiteCategory.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/model/SiteCategory.java
@@ -98,7 +98,7 @@
 			Object child = children.get(i);

 			if (child instanceof FeatureReferenceAdapter) {

 				FeatureReferenceAdapter cf = (FeatureReferenceAdapter)child;

-				cf.getFeature();

+				cf.getFeature(null);

 			}

 			else if (child instanceof SiteCategory) {

 				((SiteCategory)child).touchFeatures();

diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/SearchObject.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/SearchObject.java
index ddb4f89..1d21a03 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/SearchObject.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/SearchObject.java
@@ -366,7 +366,7 @@
 	private SearchResultSite findResultSite(ISite site) {
 		for (int i = 0; i < result.size(); i++) {
 			SearchResultSite resultSite = (SearchResultSite) result.get(i);
-			if (resultSite.getSite().equals(site))
+			if (resultSite.getSite(null).equals(site))
 				return resultSite;
 		}
 		return null;
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/SearchResultSite.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/SearchResultSite.java
index 85a0047..99bd821 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/SearchResultSite.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/SearchResultSite.java
@@ -7,6 +7,7 @@
 import java.net.URL;
 import java.util.Vector;
 
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.ui.model.IWorkbenchAdapter;
 import org.eclipse.update.core.ISite;
@@ -38,7 +39,7 @@
 		return search;
 	}
 
-	public ISite getSite() {
+	public ISite getSite(IProgressMonitor monitor) {
 		return site;
 	}
 
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/UpdatesSearchCategory.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/UpdatesSearchCategory.java
index 39dcaf3..4267b75 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/UpdatesSearchCategory.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/UpdatesSearchCategory.java
@@ -182,9 +182,9 @@
 				label = getURL().toString();
 			return label;
 		}
-		public ISite getSite() {
+		public ISite getSite(IProgressMonitor monitor) {
 			try {
-				return SiteManager.getSite(getURL());
+				return SiteManager.getSite(getURL(), monitor);
 			} catch (CoreException e) {
 				return null;
 			}
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/ConfigurationView.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/ConfigurationView.java
index dee72ac..cfaac1c 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/ConfigurationView.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/ConfigurationView.java
@@ -204,7 +204,7 @@
 			}
 			if (parent instanceof ConfiguredFeatureAdapter) {
 				return ((ConfiguredFeatureAdapter) parent)
-					.getIncludedFeatures();
+					.getIncludedFeatures(null);
 			}
 			return new Object[0];
 		}
@@ -290,7 +290,7 @@
 				for (int i = 0; i < list.size(); i++) {
 					ConfiguredFeatureAdapter cf =
 						(ConfiguredFeatureAdapter) list.get(i);
-					IFeature feature = cf.getFeature();
+					IFeature feature = cf.getFeature(null);
 					if (feature != null)
 						addChildFeatures(
 							feature,
@@ -301,7 +301,7 @@
 				for (int i = 0; i < list.size(); i++) {
 					ConfiguredFeatureAdapter cf =
 						(ConfiguredFeatureAdapter) list.get(i);
-					IFeature feature = cf.getFeature();
+					IFeature feature = cf.getFeature(null);
 					if (feature != null
 						&& isChildFeature(feature, children) == false)
 						result.add(cf);
@@ -351,7 +351,7 @@
 		public boolean hasChildren(Object parent) {
 			if (parent instanceof ConfiguredFeatureAdapter) {
 				return ((ConfiguredFeatureAdapter) parent)
-					.hasIncludedFeatures();
+					.hasIncludedFeatures(null);
 			}
 			return true;
 		}
@@ -381,7 +381,7 @@
 			}
 			if (obj instanceof IFeatureAdapter) {
 				try {
-					IFeature feature = ((IFeatureAdapter) obj).getFeature();
+					IFeature feature = ((IFeatureAdapter) obj).getFeature(null);
 					if (feature instanceof MissingFeature) {
 						return UpdateUIPlugin.getFormattedMessage(
 							KEY_MISSING_FEATURE,
@@ -461,7 +461,7 @@
 			}
 			ILocalSite localSite = getLocalSite();
 			try {
-				IFeature feature = adapter.getFeature();
+				IFeature feature = adapter.getFeature(null);
 				if (feature instanceof MissingFeature) {
 					MissingFeature mfeature = (MissingFeature) feature;
 					if (mfeature.isOptional() == false)
@@ -858,7 +858,7 @@
 				Object obj = getSelectedObject();
 				try {
 					if (obj instanceof IFeatureAdapter) {
-						IFeature feature = ((IFeatureAdapter) obj).getFeature();
+						IFeature feature = ((IFeatureAdapter) obj).getFeature(null);
 						showFeatureStatus(feature);
 					}
 				} catch (CoreException e) {
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/FeatureSorter.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/FeatureSorter.java
index a735209..fb06996 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/FeatureSorter.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/FeatureSorter.java
@@ -29,8 +29,8 @@
 		IFeature f1, f2;
 
 		try {
-			f1 = a1.getFeature();
-			f2 = a2.getFeature();
+			f1 = a1.getFeature(null);
+			f2 = a2.getFeature(null);
 		} catch (CoreException e) {
 			return super.compare(viewer, e1, e2);
 		}
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/ItemsView.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/ItemsView.java
index 54b220b..2439411 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/ItemsView.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/ItemsView.java
@@ -47,7 +47,7 @@
 		public String getText(Object obj) {
 			if (obj instanceof IFeatureAdapter) {
 				try {
-					IFeature feature = ((IFeatureAdapter) obj).getFeature();
+					IFeature feature = ((IFeatureAdapter) obj).getFeature(null);
 					VersionedIdentifier versionedIdentifier =
 						(feature != null)
 							? feature.getVersionedIdentifier()
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/SearchResultView.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/SearchResultView.java
index 1ddbdf8..f01c6c6 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/SearchResultView.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/SearchResultView.java
@@ -78,7 +78,7 @@
 			if (obj instanceof IFeatureAdapter) {
 				IFeature feature;
 				try {
-					feature = ((IFeatureAdapter) obj).getFeature();
+					feature = ((IFeatureAdapter) obj).getFeature(null);
 				} catch (CoreException e) {
 					if (col == 0)
 						return getText(obj);
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/UpdatesView.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/UpdatesView.java
index d042a62..968b954 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/UpdatesView.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/UpdatesView.java
@@ -4,17 +4,18 @@
  * All Rights Reserved.
  */
 import java.io.File;
+import java.lang.reflect.InvocationTargetException;
 import java.net.URL;
 import java.util.*;
 
-import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.*;
 import org.eclipse.jface.action.*;
-import org.eclipse.jface.dialogs.*;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.*;
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.SWTError;
-import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.dnd.*;
 import org.eclipse.swt.graphics.*;
 import org.eclipse.swt.widgets.*;
@@ -201,20 +202,10 @@
 			}
 			if (parent instanceof SiteCategory) {
 				final SiteCategory category = (SiteCategory) parent;
-				/*BusyIndicator
-					.showWhile(getControl().getDisplay(), new Runnable() {
-					public void run() {
-						try {
-							category.touchFeatures();
-						} catch (CoreException e) {
-							UpdateUIPlugin.logException(e);
-						}
-					}
-				});*/
 				return category.getChildren();
 			}
 			if (parent instanceof IFeatureAdapter) {
-				return ((IFeatureAdapter) parent).getIncludedFeatures();
+				return getIncludedFeatures((IFeatureAdapter)parent);
 			}
 			return new Object[0];
 		}
@@ -252,7 +243,7 @@
 				return ((SearchResultSite) parent).getChildCount() > 0;
 			}
 			if (parent instanceof IFeatureAdapter) {
-				return ((IFeatureAdapter) parent).hasIncludedFeatures();
+				return ((IFeatureAdapter) parent).hasIncludedFeatures(null);
 			}
 			return false;
 		}
@@ -997,6 +988,7 @@
 		final Object obj = sel.getFirstElement();
 
 		if (obj != null) {
+			/*
 			BusyIndicator.showWhile(getControl().getDisplay(), new Runnable() {
 				public void run() {
 					try {
@@ -1006,13 +998,51 @@
 						if (auth != null)
 							auth.reset();
 						if (obj instanceof SiteBookmark)
-							 ((SiteBookmark) obj).connect(false);
+							 ((SiteBookmark) obj).connect(false, null);
 						getViewer().refresh(obj);
 					} catch (CoreException e) {
 						UpdateUIPlugin.logException(e);
 					}
 				}
 			});
+			*/
+			IRunnableWithProgress op = new IRunnableWithProgress() {
+				public void run(IProgressMonitor monitor)
+					throws InvocationTargetException {
+					try {
+						monitor.beginTask("", 3);
+						// reinitialize the authenticator  
+						UpdateManagerAuthenticator auth =
+							UpdateUIPlugin.getDefault().getAuthenticator();
+						if (auth != null)
+							auth.reset();
+						monitor.worked(1);
+						if (obj instanceof SiteBookmark) {
+							((SiteBookmark) obj).connect(
+								false,
+								new SubProgressMonitor(monitor, 1));
+						} else
+							monitor.worked(1);
+						monitor.setTaskName("Updating...");
+						getControl().getDisplay().syncExec(new Runnable() {
+							public void run() {
+								getViewer().refresh(obj);
+							}
+						});
+						monitor.worked(1);
+					} catch (CoreException e) {
+						throw new InvocationTargetException(e);
+					} finally {
+						monitor.done();
+					}
+				}
+			};
+			try {
+				getViewSite().getWorkbenchWindow().run(true, true, op);
+			} catch (InvocationTargetException e) {
+				UpdateUIPlugin.logException(e);
+			} catch (InterruptedException e) {
+			}
 		}
 	}
 
@@ -1075,18 +1105,34 @@
 		final SiteBookmark bookmark,
 		final boolean connect) {
 		final CatalogBag bag = new CatalogBag();
-		BusyIndicator.showWhile(getControl().getDisplay(), new Runnable() {
-			public void run() {
+
+		IRunnableWithProgress op = new IRunnableWithProgress() {
+			public void run(IProgressMonitor monitor)
+				throws InvocationTargetException {
 				try {
+					monitor.beginTask("Connecting...", 2);
+
 					if (connect)
-						bookmark.connect();
+						bookmark.connect(new SubProgressMonitor(monitor, 1));
+					else
+						monitor.worked(1);
 					bag.catalog =
-						bookmark.getCatalog(showCategoriesAction.isChecked());
+						bookmark.getCatalog(
+							showCategoriesAction.isChecked(),
+							new SubProgressMonitor(monitor, 1));
 				} catch (CoreException e) {
-					UpdateUIPlugin.logException(e);
+					throw new InvocationTargetException(e);
+				} finally {
+					monitor.done();
 				}
 			}
-		});
+		};
+		try {
+			getViewSite().getWorkbenchWindow().run(true, true, op);
+		} catch (InvocationTargetException e) {
+			UpdateUIPlugin.logException(e);
+		} catch (InterruptedException e) {
+		}
 		return bag.catalog;
 	}
 
@@ -1163,25 +1209,46 @@
 
 	private IFeature getFeature(final IFeatureAdapter adapter) {
 		final IFeature[] result = new IFeature[1];
-		final CoreException[] exception = new CoreException[1];
 
-		BusyIndicator.showWhile(getControl().getDisplay(), new Runnable() {
-			public void run() {
+		IRunnableWithProgress op = new IRunnableWithProgress() {
+			public void run(IProgressMonitor monitor)
+				throws InvocationTargetException {
 				try {
-					result[0] = adapter.getFeature();
-					exception[0] = null;
+					monitor.beginTask("Downloading "+adapter.getFastLabel()+"...", 1);
+					result[0] = adapter.getFeature(new SubProgressMonitor(monitor, 1));
 				} catch (CoreException e) {
-					exception[0] = e;
 					result[0] =
 						new MissingFeature(adapter.getSite(), adapter.getURL());
+				} finally {
+					monitor.done();
 				}
 			}
-		});
-		/*
-		if (exception[0] != null) {
-			throw exception[0];
+		};
+		try {
+			getViewSite().getWorkbenchWindow().run(true, false, op);
+		} catch (InvocationTargetException e) {
+			UpdateUIPlugin.logException(e);
+		} catch (InterruptedException e) {
 		}
-		*/
+		return result[0];
+	}
+	
+	private Object[] getIncludedFeatures(final IFeatureAdapter adapter) {
+		final Object [][] result = new Object[1][];
+		IRunnableWithProgress op = new IRunnableWithProgress() {
+			public void run(IProgressMonitor monitor)
+				throws InvocationTargetException {
+				monitor.beginTask("Downloading "+adapter.getFastLabel()+"...", 1);
+				result[0] = adapter.getIncludedFeatures(new SubProgressMonitor(monitor, 1));
+				monitor.done();
+			}
+		};
+		try {
+			getViewSite().getWorkbenchWindow().run(true, false, op);
+		} catch (InvocationTargetException e) {
+			UpdateUIPlugin.logException(e);
+		} catch (InterruptedException e) {
+		}
 		return result[0];
 	}
 
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/NewUpdatesWizard.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/NewUpdatesWizard.java
index a99ac98..0baf4a2 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/NewUpdatesWizard.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/NewUpdatesWizard.java
@@ -63,7 +63,7 @@
 		for (int i = 0; i < candidates.length; i++) {
 			SimpleFeatureAdapter adapter = (SimpleFeatureAdapter) candidates[i];
 			try {
-				IFeature feature = adapter.getFeature();
+				IFeature feature = adapter.getFeature(null);
 				IFeature[] installed =
 					UpdateUIPlugin.getInstalledFeatures(feature);
 				PendingChange change = new PendingChange(installed[0], feature);
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/NewUpdatesWizardPage.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/NewUpdatesWizardPage.java
index fff401b..989701f 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/NewUpdatesWizardPage.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/NewUpdatesWizardPage.java
@@ -73,7 +73,7 @@
 		public Image getColumnImage(Object obj, int col) {
 			if (col == 0) {
 				try {
-					IFeature feature = ((IFeatureAdapter) obj).getFeature();
+					IFeature feature = ((IFeatureAdapter) obj).getFeature(null);
 					boolean patch = feature.isPatch();
 					return UpdateUIPlugin.getDefault().getLabelProvider().get(
 						patch
@@ -95,7 +95,7 @@
 			if (obj instanceof IFeatureAdapter) {
 
 				try {
-					IFeature feature = ((IFeatureAdapter) obj).getFeature();
+					IFeature feature = ((IFeatureAdapter) obj).getFeature(null);
 
 					switch (col) {
 						case 0 :