Merge with HEAD 20031119
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/ProgressMonitorDialog.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/ProgressMonitorDialog.java
index 5d4dfe8..499b671 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/ProgressMonitorDialog.java
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/ProgressMonitorDialog.java
@@ -120,7 +120,7 @@
 	/**
 	 * The cursor used in the cancel button;
 	 */
-	private Cursor arrowCursor;
+	protected Cursor arrowCursor;
 
 	/**
 	 * The cursor used in the shell;
@@ -273,23 +273,30 @@
  */
 public boolean close() {
 	if (getNestingDepth() <= 0) {
-		if (cancel != null && !cancel.isDisposed()) {
-			cancel.setCursor(null);
-		}
-		Shell shell = getShell();
-		if (shell != null && !shell.isDisposed()) {
-			shell.setCursor(null);
-		}
-		if (arrowCursor != null)
-			arrowCursor.dispose();
-		if (waitCursor != null)
-			waitCursor.dispose();
-		arrowCursor = null;
-		waitCursor = null;
+		clearCursors();
 		return super.close();
 	}
 	return false;
 }
+
+/**
+ * Clear the cursors in the dialog.
+ */
+protected void clearCursors() {
+	if (cancel != null && !cancel.isDisposed()) {
+		cancel.setCursor(null);
+	}
+	Shell shell = getShell();
+	if (shell != null && !shell.isDisposed()) {
+		shell.setCursor(null);
+	}
+	if (arrowCursor != null)
+		arrowCursor.dispose();
+	if (waitCursor != null)
+		waitCursor.dispose();
+	arrowCursor = null;
+	waitCursor = null;
+}
 /* (non-Javadoc)
  * Method declared in Window.
  */
@@ -477,7 +484,7 @@
  * @param b <code>true</code> to enable the cancel button,
  *   and <code>false</code> to disable it
  */
-private void setOperationCancelButtonEnabled(boolean b) {
+protected void setOperationCancelButtonEnabled(boolean b) {
 	operationCancelableState = b;
 	cancel.setEnabled(b);
 }
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/ISaveablePart.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/ISaveablePart.java
index 5af1c7f..847e991 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/ISaveablePart.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/ISaveablePart.java
@@ -17,10 +17,6 @@
  * Workbench parts implement or adapt to this interface to participate
  * in the enablement and execution of the <code>Save</code> and
  * <code>Save As</code> actions.
- * <p>
- * NOTE: This is experimental API, which may be changed or removed at any point in time.
- * This API should not be called, overridden or otherwise used in production code.
- * </p>
  * 
  * @since 2.1
  * @see org.eclipse.ui.IEditorPart  
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/actions/PerspectiveMenu.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/actions/PerspectiveMenu.java
index 437769a..f2c2edd 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/actions/PerspectiveMenu.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/actions/PerspectiveMenu.java
@@ -218,7 +218,7 @@
         IObjectActivityManager activityManager = window.getWorkbench().getObjectActivityManager(IWorkbenchConstants.PL_PERSPECTIVES, false);
         if (activityManager != null) {
             // prune all non-active contributions.
-            ids.retainAll(activityManager.getActiveObjects());
+            ids.retainAll(activityManager.getEnabledObjects());
         }
 
 		for (int i = 0; i < ids.size(); i++) {
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/activities/IActivity.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/activities/IActivity.java
index 07ffe3a..c42d6ad 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/activities/IActivity.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/activities/IActivity.java
@@ -151,7 +151,7 @@
 	 *             if the activity represented by this handle is not defined.
 	 */
 	String getParentId() throws NotDefinedException;
-
+	
 	/**
 	 * <p>
 	 * Returns whether or not the activity represented by this handle is
@@ -190,10 +190,9 @@
 	/**
 	 * TODO javadoc
 	 * 
-	 * @deprecated use isMatch(string)
+	 * @deprecated use isMatch(String)
 	 */
-	boolean match(String string);
-	
+	boolean match(String string);	
 	
 	/**
 	 * Unregisters an instance of <code>IActivityListener</code> listening
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/activities/IActivityManager.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/activities/IActivityManager.java
index 64dda6d..98e935b 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/activities/IActivityManager.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/activities/IActivityManager.java
@@ -133,19 +133,25 @@
 	/**
 	 * TODO javadoc
 	 */
-	Set getMatches(String string, Set activityIds);
+	Set getMatchingActivityIds(String string, Set activityIds);
 
 	/**
 	 * TODO javadoc
 	 */
+	Set getRequiredActivityIds(Set activityIds);	
+	
+	/**
+	 * TODO javadoc
+	 */
 	boolean isMatch(String string, Set activityIds);
 
 	/**
 	 * TODO javadoc
+	 * 
 	 * @deprecated use isMatch(String, Set);
 	 */
 	boolean match(String string, Set activityIds);
-	
+
 	/**
 	 * Unregisters an instance of <code>IActivityManagerListener</code>
 	 * listening for changes to attributes of this instance.
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/activities/IObjectActivityManager.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/activities/IObjectActivityManager.java
index 27c1b37..00983a3 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/activities/IObjectActivityManager.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/activities/IObjectActivityManager.java
@@ -72,15 +72,14 @@
 
 	/**
 	 * Adds a binding between object-&gt;activity. If the given activity is not
-	 * defined in the RoleManager registry then no action is taken.
+	 * defined in the receivers <code>IActivityManager</code> then no action is taken.
 	 * 
 	 * @param record
 	 *            the contribution record to bind.
 	 * @param activityId
 	 *            the activity ID to bind to.
-	 * @since 3.0
 	 */
-	public abstract void addActivityBinding(
+	public void addActivityBinding(
 		IObjectContributionRecord record,
 		String activityId);
 
@@ -89,16 +88,15 @@
 	 * reciever only once.
 	 * 
 	 * @param pluginId
-	 *            The plugin id
+	 *            The plugin id.
 	 * @param localId
-	 *            The local id
+	 *            The local id.
 	 * @param object
-	 *            The object being added
+	 *            The object being added.
 	 * @return the <code>IObjectContributionRecord</code> that was used as a
 	 *         key to store the provided object.
-	 * @since 3.0
 	 */
-	public abstract IObjectContributionRecord addObject(
+	public IObjectContributionRecord addObject(
 		String pluginId,
 		String localId,
 		Object object);
@@ -106,49 +104,42 @@
 	/**
 	 * Apply default pattern bindings to all of the objects governed by the
 	 * receiver.
-	 * 
-	 * @since 3.0
 	 */
 	public void applyPatternBindings();
 
 	/**
 	 * Apply default pattern bindings based on the provided
-	 * ObjectContributionRecord that is governed by the receiver.
+	 * <code>IObjectContributionRecord</code> that is governed by the receiver.
 	 * 
 	 * @param record
-	 *            IObjectContributionRecord
-	 * @since 3.0
+	 *            <code>IObjectContributionRecord</code> the record to apply bindings on.
 	 */
 	public void applyPatternBindings(IObjectContributionRecord record);
 
 	/**
-	 * Find the IObjectContributionRecords that maps to the given object, or
-	 * null.
+	 * Find the <code>IObjectContributionRecords</code> that maps to the given object.
 	 * 
 	 * @param objectOfInterest
 	 *            the object to key on.
-	 * @return a Collection of IObjectContributionRecord objects that bind to
+	 * @return a <code>Collection</code> of <code>IObjectContributionRecord</code>s  that bind to
 	 *         the supplied object. Typically this collection will have either
 	 *         0 or 1 element in it.
-	 * @since 3.0
 	 */
 	public Collection findObjectContributionRecords(Object objectOfInterest);
 
 	/**
-	 * Return a set of objects that are currently valid based on the active
-	 * activities, or all objects if role filtering is currently disabled.
+	 * Return a <code>Set</code> of objects that are currently valid based on the enabled
+	 * activities.  This <code>Set</code> is read only.
 	 * 
-	 * @return the collection of active objects.
-	 * @since 3.0
+	 * @return the <code>Collection</code> of active objects.
 	 */
-	public abstract Collection getActiveObjects();
+	public Collection getEnabledObjects();
 
 	/**
-	 * Get the Set of IObjectContributionRecord keys from the object store.
-	 * This Set is read only.
+	 * Get the <code>Set<code> of <code>IObjectContributionRecord</code> keys from the object store.
+	 * This <code>Set</code> is read only.
 	 * 
-	 * @return the set of keys.
-	 * @since 3.0
+	 * @return the <code>Set</code> of keys.
 	 */
 	public Set getObjectIds();
 
@@ -157,8 +148,7 @@
 	 * record.
 	 * 
 	 * @param record
-	 *            IObjectContributionRecord the record of the object to remove.
-	 * @since 3.0
+	 *            the <code>IObjectContributionRecord</code> of the object to remove.
 	 */
 	public void removeObject(IObjectContributionRecord record);
 
@@ -167,12 +157,11 @@
 	 * based on key-points in the UI (ie: the New wizard).
 	 * 
 	 * @param objectOfInterest
-	 *            the Object to enable or disable.
+	 *            the object to enable or disable.
 	 * @param enablement
 	 *            the enablment state to grant to all matching activities.
-	 * @since 3.0
 	 */
-	public abstract void setEnablementFor(
+	public void setEnablementFor(
 		Object objectOfInterest,
 		boolean enablement);
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PluginActionContributionItem.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PluginActionContributionItem.java
index cb898f9..3346fe8 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PluginActionContributionItem.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PluginActionContributionItem.java
@@ -103,7 +103,7 @@
         if (activityObject == null) 
             return super.isVisible();
 
-        Collection activeObjects = objectManager.getActiveObjects();
+        Collection activeObjects = objectManager.getEnabledObjects();
         // check for visibility only if the active objects contains this object.
         if (activeObjects.contains(activityObject)) {
             return super.isVisible();
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ShowViewMenu.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ShowViewMenu.java
index af1014e..4cc1bb3 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ShowViewMenu.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ShowViewMenu.java
@@ -126,7 +126,7 @@
         IObjectActivityManager objectManager = window.getWorkbench().getObjectActivityManager(IWorkbenchConstants.PL_VIEWS, false);
         if (objectManager != null) {
             // prune off all filtered views
-            viewIds.retainAll(objectManager.getActiveObjects());
+            viewIds.retainAll(objectManager.getEnabledObjects());
         }
         // add all open views
         viewIds = addOpenedViews(page, viewIds);
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java
index d8be952..1456ac3 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java
@@ -961,6 +961,7 @@
 	 * flags have been set correctly (e.i. closing and updateDisabled)
 	 */
 	private boolean hardClose() {
+		boolean result;
 		try {
 			// Clear the action sets, fix for bug 27416.
 			actionPresentation.clearActionSets();
@@ -969,8 +970,9 @@
 			getAdvisor().postWindowClose(getWindowConfigurer());
 			getWorkbenchImpl().fireWindowClosed(this);
 		} finally {
-			return super.close();
+			result = super.close();
 		}
+		return result;
 	}
 	/**
 	 * @see IWorkbenchWindow
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/MutableActivityManager.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/MutableActivityManager.java
index 0457e89..d4d2ccc 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/MutableActivityManager.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/MutableActivityManager.java
@@ -148,6 +148,53 @@
 		return Collections.unmodifiableSet(enabledCategoryIds);
 	}
 
+	public Set getMatchingActivityIds(String string, Set activityIds) {
+		Set matchingActivityIds = new HashSet();
+		activityIds = Util.safeCopy(activityIds, String.class);
+
+		for (Iterator iterator = activityIds.iterator(); iterator.hasNext();) {
+			String activityId = (String) iterator.next();
+			IActivity activity = getActivity(activityId);
+
+			if (activity.isMatch(string))
+				matchingActivityIds.add(activityId);
+		}
+
+		return Collections.unmodifiableSet(matchingActivityIds);
+	}
+
+	public Set getRequiredActivityIds(Set activityIds) {
+		activityIds = Util.safeCopy(activityIds, String.class);
+		Set requiredActivityIds = new HashSet();
+		getRequiredActivityIdsImpl(activityIds, requiredActivityIds);
+		return Collections.unmodifiableSet(requiredActivityIds);
+	}
+
+	private void getRequiredActivityIdsImpl(
+		Set activityIds,
+		Set requiredActivityIds) {
+		for (Iterator iterator = activityIds.iterator(); iterator.hasNext();) {
+			String activityId = (String) iterator.next();
+			IActivity activity = getActivity(activityId);
+			Set childActivityIds = new HashSet();
+			Set activityActivityBindings =
+				activity.getActivityActivityBindings();
+
+			for (Iterator iterator2 = activityActivityBindings.iterator();
+				iterator2.hasNext();
+				) {
+				IActivityActivityBinding activityActivityBinding =
+					(IActivityActivityBinding) iterator2.next();
+				childActivityIds.add(
+					activityActivityBinding.getChildActivityId());
+			}
+
+			childActivityIds.removeAll(requiredActivityIds);
+			requiredActivityIds.addAll(childActivityIds);
+			getRequiredActivityIdsImpl(childActivityIds, requiredActivityIds);
+		}
+	}
+
 	public boolean isMatch(String string, Set activityIds) {
 		activityIds = Util.safeCopy(activityIds, String.class);
 
@@ -162,25 +209,10 @@
 		return false;
 	}
 
-	public Set getMatches(String string, Set activityIds) {
-		Set matches = new HashSet();
-		activityIds = Util.safeCopy(activityIds, String.class);
-
-		for (Iterator iterator = activityIds.iterator(); iterator.hasNext();) {
-			String activityId = (String) iterator.next();
-			IActivity activity = getActivity(activityId);
-
-			if (activity.isMatch(string))
-				matches.add(activityId);
-		}
-
-		return Collections.unmodifiableSet(matches);
-	}
-
 	public boolean match(String string, Set activityIds) {
 		return isMatch(string, activityIds);
 	}
-	
+
 	private void notifyActivities(Map activityEventsByActivityId) {
 		for (Iterator iterator =
 			activityEventsByActivityId.entrySet().iterator();
@@ -273,8 +305,7 @@
 			Map.Entry entry = (Map.Entry) iterator.next();
 			String parentActivityId = (String) entry.getKey();
 
-			if (activityActivityBindingsByParentActivityId
-				.containsKey(parentActivityId)) {
+			if (activityDefinitionsById.containsKey(parentActivityId)) {
 				Collection activityActivityBindingDefinitions =
 					(Collection) entry.getValue();
 
@@ -290,7 +321,8 @@
 							activityActivityBindingDefinition
 								.getChildActivityId();
 
-						if (childActivityId != null) {
+						if (activityDefinitionsById
+							.containsKey(childActivityId)) {
 							IActivityActivityBinding activityActivityBinding =
 								new ActivityActivityBinding(
 									childActivityId,
@@ -380,7 +412,7 @@
 			Map.Entry entry = (Map.Entry) iterator.next();
 			String categoryId = (String) entry.getKey();
 
-			if (categoryActivityBindingsByCategoryId.containsKey(categoryId)) {
+			if (categoryDefinitionsById.containsKey(categoryId)) {
 				Collection categoryActivityBindingDefinitions =
 					(Collection) entry.getValue();
 
@@ -395,7 +427,7 @@
 						String activityId =
 							categoryActivityBindingDefinition.getActivityId();
 
-						if (activityId != null) {
+						if (activityDefinitionsById.containsKey(activityId)) {
 							ICategoryActivityBinding categoryActivityBinding =
 								new CategoryActivityBinding(
 									activityId,
@@ -524,12 +556,13 @@
 
 	private ActivityEvent updateActivity(Activity activity) {
 		Set activityActivityBindings =
-		(Set) activityActivityBindingsByParentActivityId.get(activity.getId());
+			(Set) activityActivityBindingsByParentActivityId.get(
+				activity.getId());
 		boolean activityActivityBindingsChanged =
-		activity.setActivityActivityBindings(
+			activity.setActivityActivityBindings(
 				activityActivityBindings != null
-				? activityActivityBindings
-				: Collections.EMPTY_SET);
+					? activityActivityBindings
+					: Collections.EMPTY_SET);
 		Set activityPatternBindings =
 			(Set) activityPatternBindingsByActivityId.get(activity.getId());
 		boolean activityPatternBindingsChanged =
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/ObjectActivityManager.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/ObjectActivityManager.java
index 68825c9..4fc87fd 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/ObjectActivityManager.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/ObjectActivityManager.java
@@ -293,7 +293,7 @@
 	 * 
 	 * @see org.eclipse.ui.activities.IObjectActivityManager#getActiveObjects()
 	 */
-	public Collection getActiveObjects() {
+	public Collection getEnabledObjects() {
 		synchronized (activeObjects) {
 			if (!activityManager.getDefinedCategoryIds().isEmpty()) {
 				if (dirty) {
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/ProxyActivityManager.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/ProxyActivityManager.java
index ab3275c..429ec92 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/ProxyActivityManager.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/ProxyActivityManager.java
@@ -47,26 +47,34 @@
 		return activityManager.getActivity(activityId);
 	}
 
-	public Set getDefinedActivityIds() {
-		return activityManager.getDefinedActivityIds();
-	}
-
-	public Set getEnabledActivityIds() {
-		return activityManager.getEnabledActivityIds();
-	}
-
 	public ICategory getCategory(String categoryId) {
 		return activityManager.getCategory(categoryId);
 	}
 
+	public Set getDefinedActivityIds() {
+		return activityManager.getDefinedActivityIds();
+	}
+
 	public Set getDefinedCategoryIds() {
 		return activityManager.getDefinedCategoryIds();
 	}
 
+	public Set getEnabledActivityIds() {
+		return activityManager.getEnabledActivityIds();
+	}
+
 	public Set getEnabledCategoryIds() {
 		return activityManager.getEnabledCategoryIds();
 	}	
 	
+	public Set getMatchingActivityIds(String string, Set activityIds) {
+		return activityManager.getMatchingActivityIds(string, activityIds);
+	}
+
+	public Set getRequiredActivityIds(Set activityIds) {
+		return activityManager.getRequiredActivityIds(activityIds);
+	}	
+	
 	public boolean isMatch(String string, Set activityIds) {
 		return activityManager.isMatch(string, activityIds);
 	}
@@ -74,8 +82,4 @@
 	public boolean match(String string, Set activityIds) {
 		return isMatch(string, activityIds);
 	}	
-	
-	public Set getMatches(String string, Set activityIds) {
-		return activityManager.getMatches(string, activityIds);
-	}
 }
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PerspContentProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PerspContentProvider.java
index 05ec641..29b368b 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PerspContentProvider.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PerspContentProvider.java
@@ -58,7 +58,7 @@
         if (manager == null) {
             return descriptors;
         }
-        Collection activePerspectives = manager.getActiveObjects();
+        Collection activePerspectives = manager.getEnabledObjects();
             
         Collection filtered = new ArrayList();
         for (int i = 0; i < descriptors.length; i++) {
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PropertyDialog.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PropertyDialog.java
index b02dafa..c0bf76b 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PropertyDialog.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PropertyDialog.java
@@ -86,7 +86,7 @@
 				IWorkbenchConstants.PL_PROPERTY_PAGES,
 				false);
 		if (propManager != null) {
-			Collection activeContributions = propManager.getActiveObjects();
+			Collection activeContributions = propManager.getEnabledObjects();
 			if (node instanceof PropertyPageNode
 				&& !activeContributions.contains(((PropertyPageNode) node).getContributor())) {
 				return;
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/ViewContentProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/ViewContentProvider.java
index 7c820f3..2d3d0ea 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/ViewContentProvider.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/ViewContentProvider.java
@@ -49,7 +49,7 @@
             			IWorkbenchConstants.PL_VIEWS, false);
             if (objectManager != null) {
                 ArrayList filtered = new ArrayList();
-                Collection activeObjects = objectManager.getActiveObjects();                
+                Collection activeObjects = objectManager.getEnabledObjects();                
     			for (int i = 0; i < categories.length; i++) {
                     if (activeObjects.contains(WorkbenchActivityHelper.createViewCategoryIdKey(categories[i].getId()))) {
                         filtered.add(categories[i]);
@@ -72,7 +72,7 @@
 						.getObjectActivityManager(
 							IWorkbenchConstants.PL_VIEWS, false);              
                 if (objectManager != null) {
-					Collection activeObjects = objectManager.getActiveObjects();
+					Collection activeObjects = objectManager.getEnabledObjects();
                     ArrayList filtered = new ArrayList();
                     for (Iterator i = list.iterator(); i.hasNext();) {
                         IViewDescriptor desc = (IViewDescriptor) i.next();
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchPreferenceDialog.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchPreferenceDialog.java
index 3d74989..a75ef27 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchPreferenceDialog.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchPreferenceDialog.java
@@ -278,7 +278,7 @@
         		.getObjectActivityManager(
         			IWorkbenchConstants.PL_PREFERENCES, false);
         if (prefManager != null) {
-            Collection activePages = prefManager.getActiveObjects();            
+            Collection activePages = prefManager.getEnabledObjects();            
             if (node instanceof WorkbenchPreferenceNode && !activePages.contains(node)) {
                 return;
             }
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressMonitorJobsDialog.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressMonitorJobsDialog.java
index fce779b..fe66c3b 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressMonitorJobsDialog.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressMonitorJobsDialog.java
@@ -151,4 +151,30 @@
 		}
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
+	 */
+	protected void createButtonsForButtonBar(Composite parent) {
+		super.createButtonsForButtonBar(parent);
+		detailsButton.setCursor(arrowCursor);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.ProgressMonitorDialog#clearCursors()
+	 */
+	protected void clearCursors() {
+		if (detailsButton != null && !detailsButton.isDisposed()) {
+			detailsButton.setCursor(null);
+		}
+		super.clearCursors();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.ProgressMonitorDialog#setOperationCancelButtonEnabled(boolean)
+	 */
+	protected void setOperationCancelButtonEnabled(boolean b) {
+		super.setOperationCancelButtonEnabled(b);
+		detailsButton.setEnabled(b);
+	}
+
 }
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/FileEditorMapping.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/FileEditorMapping.java
index 26a6e7f..45e12fe 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/FileEditorMapping.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/FileEditorMapping.java
@@ -274,7 +274,7 @@
         if(objectManager == null)
         	return editors;
         ArrayList filtered = new ArrayList(editors);
-        filtered.retainAll(objectManager.getActiveObjects());
+        filtered.retainAll(objectManager.getEnabledObjects());
         return filtered;
 	}
 
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/progress/DeferredTreeContentManager.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/progress/DeferredTreeContentManager.java
index cea57d8..d221b96 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/progress/DeferredTreeContentManager.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/progress/DeferredTreeContentManager.java
@@ -269,16 +269,10 @@
 				if (!placeholder.isRemoved()) {
 					Control control = treeViewer.getControl();
 					
-					//Workaround for Bug 42175
-					TreeItem top = null;
-					Tree tree = null;
-					if(control instanceof Tree){
-						tree = (Tree) control;
-						top = tree.getTopItem();						
-					}
+					if(control.isDisposed())
+						return Status.CANCEL_STATUS;
+					
 					treeViewer.remove(placeholder);
-					if(top != null)
-						tree.setTopItem(top);
 					placeholder.setRemoved(true);
 				}
 				return Status.OK_STATUS;
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/progress/ProgressUtil.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/progress/ProgressUtil.java
deleted file mode 100644
index 216668d..0000000
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/progress/ProgressUtil.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2003 IBM Corporation and others. All rights reserved.   This
- * program and the accompanying materials are made available under the terms of
- * the Common Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors: 
- * IBM - Initial API and implementation
- **********************************************************************/
-package org.eclipse.ui.progress;
-
-import org.eclipse.ui.IWorkbenchPartSite;
-import org.eclipse.ui.internal.PartSite;
-import org.eclipse.ui.internal.progress.WorkbenchSiteProgressService;
-
-/**
- * The ProgressUtil is a repository for methods that will be replaced by
- * eventual API changes. All methods here are subject to change.
- */
-public class ProgressUtil {
-
-	/**
-	 * Return the progress service for this site if there is on. <b>NOTE:</b>.
-	 * This is temporary API that will be replaced by
-	 * IWorkbenchPartSite.getAdapter(IWorkbenchSiteProgressService) when
-	 * changes can be made to IWorkbenchPartSite.
-	 * 
-	 * @param site
-	 * @return
-	 */
-	public IWorkbenchSiteProgressService getProgressService(IWorkbenchPartSite site) {
-		if (site instanceof PartSite)
-			return new WorkbenchSiteProgressService((PartSite) site);
-		else
-			return null;
-	}
-
-}