diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/BatchInstallOperation.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/BatchInstallOperation.java
index 8ce6b79..a1fde24 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/BatchInstallOperation.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/BatchInstallOperation.java
@@ -68,11 +68,11 @@
 			if (listener != null)
 				listener.beforeExecute(this, null);
 			
-			UpdateManager.makeConfigurationCurrent(
+			UpdateUtils.makeConfigurationCurrent(
 				config,
 				null);
 			monitor.beginTask(
-				UpdateManager.getString(KEY_INSTALLING),
+				UpdateUtils.getString(KEY_INSTALLING),
 				operations.length);
 			for (int i = 0; i < operations.length; i++) {
 				SubProgressMonitor subMonitor =
@@ -89,7 +89,7 @@
 					listener.afterExecute(operations[i], null);
 
 				//monitor.worked(1);
-				UpdateManager.saveLocalSite();
+				UpdateUtils.saveLocalSite();
 				installCount++;
 			}
 			// should we just return true ?
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/ConfigOperation.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/ConfigOperation.java
index 52e1f6c..0487839 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/ConfigOperation.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/ConfigOperation.java
@@ -34,7 +34,7 @@
 		throws CoreException {
 
 		IStatus status =
-			UpdateManager.getValidator().validatePendingConfig(feature);
+			UpdateUtils.getValidator().validatePendingConfig(feature);
 		if (status != null) {
 			throw new CoreException(status);
 		}
@@ -70,7 +70,7 @@
 			return restartNeeded;
 		} catch (CoreException e) {
 			undo();
-			UpdateManager.logException(e);
+			UpdateUtils.logException(e);
 			throw e;
 		}
 	}
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/DuplicateConflictsValidator.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/DuplicateConflictsValidator.java
index 96ea074..ff72c09 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/DuplicateConflictsValidator.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/DuplicateConflictsValidator.java
@@ -63,7 +63,7 @@
 			String version =
 				feature.getVersionedIdentifier().getVersion().toString();
 			String location = configSite.getSite().getURL().getFile();
-			return UpdateManager.getFormattedMessage(
+			return UpdateUtils.getFormattedMessage(
 				KEY_CONFLICT,
 				new String[] { version, location });
 		}
@@ -160,7 +160,7 @@
 		for (int i = 0; i < jobs.length; i++) {
 			IInstallFeatureOperation job = jobs[i];
 			IConfiguredSite targetSite =
-				UpdateManager.getDefaultTargetSite(config, job);
+				UpdateUtils.getDefaultTargetSite(config, job);
 			IFeature newFeature = job.getFeature();
 			try {
 				computeNewFeature(newFeature, targetSite, featureTable, null);
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/FeatureHierarchyElement2.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/FeatureHierarchyElement2.java
index ac6fa6d..4bed61c 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/FeatureHierarchyElement2.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/FeatureHierarchyElement2.java
@@ -135,7 +135,7 @@
 			try {
 				IFeature oldFeature = oldFeatureRef.getFeature(null);
 				IConfiguredSite csite =
-					UpdateManager.getConfigSite(oldFeature, config);
+					UpdateUtils.getConfigSite(oldFeature, config);
 				return csite.isConfigured(oldFeature);
 			} catch (CoreException e) {
 			}
@@ -321,7 +321,7 @@
 				} else if (patch) {
 					// 30849 - find the old reference in the
 					// configuration.
-					if (!UpdateManager.isPatch(newFeature)) {
+					if (!UpdateUtils.isPatch(newFeature)) {
 						oldRef = findPatchedReference(newRef, config);
 					}
 				}
@@ -376,7 +376,7 @@
 			String mode = getUpdateVersionsMode();
 
 			IFeature[] allInstalled =
-				UpdateManager.getInstalledFeatures(vid, false);
+				UpdateUtils.getInstalledFeatures(vid, false);
 			for (int i = 0; i < allInstalled.length; i++) {
 				IFeature candidate = allInstalled[i];
 				PluginVersionIdentifier cversion =
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/FeatureOperation.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/FeatureOperation.java
index 1eedcc6..7bd7849 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/FeatureOperation.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/FeatureOperation.java
@@ -81,11 +81,11 @@
 			return;
 			
 		IFeature localFeature =
-			UpdateManager.getLocalFeature(targetSite, feature);
+			UpdateUtils.getLocalFeature(targetSite, feature);
 		ArrayList oldFeatures = new ArrayList();
 		// First collect all older active features that
 		// have the same ID as new features marked as 'unique'.
-		UpdateManager.collectOldFeatures(localFeature, targetSite, oldFeatures);
+		UpdateUtils.collectOldFeatures(localFeature, targetSite, oldFeatures);
 		// Now unconfigure old features to enforce uniqueness
 		for (int i = 0; i < oldFeatures.size(); i++) {
 			IFeature oldFeature = (IFeature) oldFeatures.get(i);
@@ -95,7 +95,7 @@
 
 	static void configure(IInstallConfiguration config, IFeature feature)
 		throws CoreException {
-		IConfiguredSite site = UpdateManager.getConfigSite(feature, config);
+		IConfiguredSite site = UpdateUtils.getConfigSite(feature, config);
 		if (site != null) {
 			site.configure(feature);
 		}
@@ -103,7 +103,7 @@
 
 	static boolean unconfigure(IInstallConfiguration config, IFeature feature)
 		throws CoreException {
-		IConfiguredSite site = UpdateManager.getConfigSite(feature, config);
+		IConfiguredSite site = UpdateUtils.getConfigSite(feature, config);
 		if (site != null) {
 			PatchCleaner2 cleaner = new PatchCleaner2(site, feature);
 			boolean result = site.unconfigure(feature);
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/InstallOperation.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/InstallOperation.java
index a5f5ebe..84adeb0 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/InstallOperation.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/InstallOperation.java
@@ -36,7 +36,7 @@
 		IFeature[] unconfiguredOptionalElements,
 		IVerificationListener verifier) {
 		super(config, site, feature);
-		IFeature[] installed = UpdateManager.getInstalledFeatures(feature);
+		IFeature[] installed = UpdateUtils.getInstalledFeatures(feature);
 		if (installed.length > 0)
 			this.oldFeature = installed[0];
 		this.unconfiguredOptionalElements = unconfiguredOptionalElements;
@@ -69,16 +69,16 @@
 
 				boolean oldSuccess = unconfigure(config, oldFeature);
 				if (!oldSuccess) {
-					if (!UpdateManager.isNestedChild(config, oldFeature)) {
+					if (!UpdateUtils.isNestedChild(config, oldFeature)) {
 						// "eat" the error if nested child
 						String message =
-							UpdateManager.getFormattedMessage(
+							UpdateUtils.getFormattedMessage(
 								KEY_OLD,
 								oldFeature.getLabel());
 						IStatus status =
 							new Status(
 								IStatus.ERROR,
-								UpdateManager.getPluginId(),
+								UpdateUtils.getPluginId(),
 								IStatus.OK,
 								message,
 								null);
@@ -102,7 +102,7 @@
 			try {
 				// Get the feature that matches the original unconfigured ones.
 				IFeature localFeature =
-					UpdateManager.getLocalFeature(
+					UpdateUtils.getLocalFeature(
 						targetSite,
 						unconfiguredOptionalElements[i]);
 				if (localFeature != null)
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/JobRoot.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/JobRoot.java
index 6d5f214..d6f4804 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/JobRoot.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/JobRoot.java
@@ -49,7 +49,7 @@
 		IConfiguredSite targetSite) {
 
 		ArrayList unconfiguredOptionalFeatures = new ArrayList();
-		getUnconfiguredOptionalFeatures(unconfiguredOptionalFeatures, config, targetSite, getElements(), UpdateManager.isPatch(job.getFeature()));
+		getUnconfiguredOptionalFeatures(unconfiguredOptionalFeatures, config, targetSite, getElements(), UpdateUtils.isPatch(job.getFeature()));
 		IFeature[] unconfiguredOptionalFeaturesArray =
 			new IFeature[unconfiguredOptionalFeatures.size()];
 		unconfiguredOptionalFeatures.toArray(unconfiguredOptionalFeaturesArray);
@@ -81,7 +81,7 @@
 		IFeature oldFeature = job.getOldFeature();
 		IFeature newFeature = job.getFeature();
 		ArrayList list = new ArrayList();
-		boolean patch = UpdateManager.isPatch(newFeature);
+		boolean patch = UpdateUtils.isPatch(newFeature);
 		FeatureHierarchyElement2.computeElements(
 			oldFeature,
 			newFeature,
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/JobTargetSites.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/JobTargetSites.java
index 1073e00..d13c056 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/JobTargetSites.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/JobTargetSites.java
@@ -44,9 +44,9 @@
 			JobTargetSite jobSite = new JobTargetSite();
 			jobSite.job = jobs[i];
 			jobSite.defaultSite =
-				UpdateManager.getDefaultTargetSite(config, jobs[i], false);
+				UpdateUtils.getDefaultTargetSite(config, jobs[i], false);
 			jobSite.affinitySite =
-				UpdateManager.getAffinitySite(config, jobs[i].getFeature());
+				UpdateUtils.getAffinitySite(config, jobs[i].getFeature());
 			if (jobSite.affinitySite == null)
 				jobSite.affinitySite = jobs[i].getTargetSite();
 			jobSite.targetSite = computeTargetSite(jobSite);
@@ -123,7 +123,7 @@
 		for (Iterator enum = this.keySet().iterator(); enum.hasNext();) {
 			JobTargetSite jobSite = (JobTargetSite)get(enum.next());
 			IFeature target = jobSite.job.getFeature();
-			if (!target.equals(patch) && UpdateManager.isPatch(target, patch))
+			if (!target.equals(patch) && UpdateUtils.isPatch(target, patch))
 				return jobSite;
 		}
 		return null;
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/OperationValidator.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/OperationValidator.java
index 7b7bc8a..ac78233 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/OperationValidator.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/OperationValidator.java
@@ -227,15 +227,15 @@
 		throws CoreException {
 		if (feature.isPatch()) {
 			IInstallConfiguration backup =
-				UpdateManager.getBackupConfigurationFor(feature);
+				UpdateUtils.getBackupConfigurationFor(feature);
 			String msg;
 			if (backup != null)
 				msg =
-					UpdateManager.getFormattedMessage(
+					UpdateUtils.getFormattedMessage(
 						KEY_PATCH_UNCONFIGURE_BACKUP,
 						backup.getLabel());
 			else
-				msg = UpdateManager.getString(KEY_PATCH_UNCONFIGURE);
+				msg = UpdateUtils.getString(KEY_PATCH_UNCONFIGURE);
 			status.add(createStatus(feature, msg));
 			return true;
 		}
@@ -337,7 +337,7 @@
 					status.add(
 						createStatus(
 							newFeature,
-							UpdateManager.getString(KEY_EXCLUSIVE)));
+							UpdateUtils.getString(KEY_EXCLUSIVE)));
 					continue;
 				}
 				features =
@@ -370,7 +370,7 @@
 					IStatus conflict =
 						createStatus(
 							newFeature,
-							UpdateManager.getString(KEY_CONFLICT));
+							UpdateUtils.getString(KEY_CONFLICT));
 					status.add(0, conflict);
 					return;
 				}
@@ -453,7 +453,7 @@
 
 		// check for <includes> cycle
 		if (features.contains(feature)) {
-			IStatus status = createStatus(top, UpdateManager.getString(KEY_CYCLE));
+			IStatus status = createStatus(top, UpdateUtils.getString(KEY_CYCLE));
 			throw new CoreException(status);
 		}
 
@@ -556,7 +556,7 @@
 			if (license != null && license.trim().length() > 0)
 				return;
 		}
-		status.add(createStatus(feature, UpdateManager.getString(KEY_NO_LICENSE)));
+		status.add(createStatus(feature, UpdateUtils.getString(KEY_NO_LICENSE)));
 	}
 
 	/*
@@ -617,7 +617,7 @@
 		throws CoreException {
 		for (int i = 0; i < features.size(); i++) {
 			IFeature candidate = (IFeature) features.get(i);
-			if (UpdateManager.isPatch(feature, candidate)) {
+			if (UpdateUtils.isPatch(feature, candidate)) {
 				ArrayList removeTree =
 					computeFeatureSubtree(candidate, null, null, true);
 				result.addAll(removeTree);
@@ -789,7 +789,7 @@
 					if (!version.isGreaterThan(cversion)) {
 						// Don't allow this.
 						String msg =
-							UpdateManager.getFormattedMessage(
+							UpdateUtils.getFormattedMessage(
 								KEY_PATCH_REGRESSION,
 								new String[] {
 									ifeature.getLabel(),
@@ -808,7 +808,7 @@
 				// need to be present.
 				if (!patch && iref.isOptional() == false) {
 					String msg =
-						UpdateManager.getFormattedMessage(
+						UpdateUtils.getFormattedMessage(
 							KEY_PATCH_MISSING_TARGET,
 							new String[] {
 								ifeature.getLabel(),
@@ -857,7 +857,7 @@
 			if (fos.size() > 0) {
 				if (!fos.contains(os)) {
 					status.add(
-						createStatus(feature, UpdateManager.getString(KEY_OS)));
+						createStatus(feature, UpdateUtils.getString(KEY_OS)));
 					continue;
 				}
 			}
@@ -865,7 +865,7 @@
 			if (fws.size() > 0) {
 				if (!fws.contains(ws)) {
 					status.add(
-						createStatus(feature, UpdateManager.getString(KEY_WS)));
+						createStatus(feature, UpdateUtils.getString(KEY_WS)));
 					continue;
 				}
 			}
@@ -873,7 +873,7 @@
 			if (farch.size() > 0) {
 				if (!farch.contains(arch)) {
 					status.add(
-						createStatus(feature, UpdateManager.getString(KEY_ARCH)));
+						createStatus(feature, UpdateUtils.getString(KEY_ARCH)));
 					continue;
 				}
 			}
@@ -905,7 +905,7 @@
 			}
 			if (!found) {
 				status.add(
-					createStatus(null, UpdateManager.getString(KEY_PLATFORM)));
+					createStatus(null, UpdateUtils.getString(KEY_PLATFORM)));
 				return;
 			}
 		}
@@ -930,7 +930,7 @@
 				return;
 		}
 
-		status.add(createStatus(null, UpdateManager.getString(KEY_PRIMARY)));
+		status.add(createStatus(null, UpdateUtils.getString(KEY_PRIMARY)));
 	}
 
 	/*
@@ -1013,17 +1013,17 @@
 					// report status
 					String target =
 						featurePrereq
-							? UpdateManager.getString(KEY_PREREQ_FEATURE)
-							: UpdateManager.getString(KEY_PREREQ_PLUGIN);
+							? UpdateUtils.getString(KEY_PREREQ_FEATURE)
+							: UpdateUtils.getString(KEY_PREREQ_PLUGIN);
 					String msg =
-						UpdateManager.getFormattedMessage(
+						UpdateUtils.getFormattedMessage(
 							KEY_PREREQ,
 							new String[] { target, id });
 
 					if (!ignoreVersion) {
 						if (rule == IImport.RULE_PERFECT)
 							msg =
-								UpdateManager.getFormattedMessage(
+								UpdateUtils.getFormattedMessage(
 									KEY_PREREQ_PERFECT,
 									new String[] {
 										target,
@@ -1031,7 +1031,7 @@
 										version.toString()});
 						else if (rule == IImport.RULE_EQUIVALENT)
 							msg =
-								UpdateManager.getFormattedMessage(
+								UpdateUtils.getFormattedMessage(
 									KEY_PREREQ_EQUIVALENT,
 									new String[] {
 										target,
@@ -1039,7 +1039,7 @@
 										version.toString()});
 						else if (rule == IImport.RULE_COMPATIBLE)
 							msg =
-								UpdateManager.getFormattedMessage(
+								UpdateUtils.getFormattedMessage(
 									KEY_PREREQ_COMPATIBLE,
 									new String[] {
 										target,
@@ -1047,7 +1047,7 @@
 										version.toString()});
 						else if (rule == IImport.RULE_GREATER_OR_EQUAL)
 							msg =
-								UpdateManager.getFormattedMessage(
+								UpdateUtils.getFormattedMessage(
 									KEY_PREREQ_GREATER,
 									new String[] {
 										target,
@@ -1128,7 +1128,7 @@
 		if (included) {
 			// feature is included as optional but
 			// no parent is currently configured.
-			String msg = UpdateManager.getString(KEY_OPTIONAL_CHILD);
+			String msg = UpdateUtils.getString(KEY_OPTIONAL_CHILD);
 			status.add(createStatus(feature, msg));
 		} else {
 			//feature is root - can be configured
@@ -1192,7 +1192,7 @@
 			if (cconfig.getTimeline() != config.getTimeline()) {
 				// Not the same timeline - cannot revert
 				String msg =
-					UpdateManager.getFormattedMessage(
+					UpdateUtils.getFormattedMessage(
 						KEY_WRONG_TIMELINE,
 						config.getLabel());
 				status.add(createStatus(null, msg));
@@ -1209,7 +1209,7 @@
 		ArrayList children) {
 		IStatus[] carray =
 			(IStatus[]) children.toArray(new IStatus[children.size()]);
-		String message = UpdateManager.getString(rootKey);
+		String message = UpdateUtils.getString(rootKey);
 		return new MultiStatus(
 			UpdateCore.getPlugin().getDescriptor().getUniqueIdentifier(),
 			IStatus.ERROR,
@@ -1227,7 +1227,7 @@
 			PluginVersionIdentifier version =
 				feature.getVersionedIdentifier().getVersion();
 			fullMessage =
-				UpdateManager.getFormattedMessage(
+				UpdateUtils.getFormattedMessage(
 					KEY_CHILD_MESSAGE,
 					new String[] {
 						feature.getLabel(),
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/PatchCleaner2.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/PatchCleaner2.java
index 2a7606e..5c7029e 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/PatchCleaner2.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/PatchCleaner2.java
@@ -46,7 +46,7 @@
 	}
 	private void cleanSavedConfigs(IFeature feature) {
 		if (feature.isPatch()) {
-			IInstallConfiguration backupConfig = UpdateManager.getBackupConfigurationFor(feature);
+			IInstallConfiguration backupConfig = UpdateUtils.getBackupConfigurationFor(feature);
 			if (backupConfig!=null) {
 				// clean it
 				remove(backupConfig);
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/RevertConfigurationOperation.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/RevertConfigurationOperation.java
index c6b78ef..0d4f7ab 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/RevertConfigurationOperation.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/RevertConfigurationOperation.java
@@ -36,7 +36,7 @@
 	public boolean execute(IProgressMonitor monitor, IOperationListener listener)
 		throws CoreException, InvocationTargetException {
 		IStatus status =
-			UpdateManager.getValidator().validatePendingRevert(config);
+			UpdateUtils.getValidator().validatePendingRevert(config);
 		if (status != null) {
 			throw new CoreException(status);
 		}
@@ -47,7 +47,7 @@
 			localSite.save();
 			return true;
 		} catch (CoreException e) {
-			UpdateManager.logException(e);
+			UpdateUtils.logException(e);
 			throw e;
 		}
 	}
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/ToggleSiteOperation.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/ToggleSiteOperation.java
index 2f519fa..31d099c 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/ToggleSiteOperation.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/ToggleSiteOperation.java
@@ -37,7 +37,7 @@
 			return false;
 		boolean oldValue = site.isEnabled();
 		site.setEnabled(!oldValue);
-		IStatus status = UpdateManager.getValidator().validateCurrentState();
+		IStatus status = UpdateUtils.getValidator().validateCurrentState();
 		if (status != null) {
 			// revert
 			site.setEnabled(oldValue);
@@ -50,7 +50,7 @@
 			} catch (CoreException e) {
 				//revert
 				site.setEnabled(oldValue);
-				UpdateManager.logException(e);
+				UpdateUtils.logException(e);
 				throw e;
 			}
 		}
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/UnconfigOperation.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/UnconfigOperation.java
index 67a5cca..455b46f 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/UnconfigOperation.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/UnconfigOperation.java
@@ -34,7 +34,7 @@
 		throws CoreException {
 
 		IStatus status =
-			UpdateManager.getValidator().validatePendingUnconfig(feature);
+			UpdateUtils.getValidator().validatePendingUnconfig(feature);
 		if (status != null) {
 			throw new CoreException(status);
 		}
@@ -71,7 +71,7 @@
 			return restartNeeded;
 		} catch (CoreException e) {
 			undo();
-			UpdateManager.logException(e);
+			UpdateUtils.logException(e);
 			throw e;
 		}
 	}
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/UpdateManagerAuthenticator.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/UpdateManagerAuthenticator.java
index e2bfecc..1bea525 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/UpdateManagerAuthenticator.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/UpdateManagerAuthenticator.java
@@ -49,7 +49,7 @@
 		try {
 			Platform.addAuthorizationInfo(serverUrl, realm, scheme, info);
 		} catch (CoreException e) {
-			UpdateManager.logException(e);
+			UpdateUtils.logException(e);
 		}
 	}
 
@@ -71,7 +71,7 @@
 			try {
 				ip = InetAddress.getByName(resourceUrl.getHost());
 			} catch (UnknownHostException e) {
-				UpdateManager.logException(e, false);
+				UpdateUtils.logException(e, false);
 			}
 
 			this.requestingPort = resourceUrl.getPort();
@@ -100,7 +100,7 @@
 		try {
 			Platform.addProtectionSpace(resourceUrl, realm);
 		} catch (CoreException e) {
-			UpdateManager.logException(e, false);
+			UpdateUtils.logException(e, false);
 		}
 	}
 
@@ -151,7 +151,7 @@
 		try {
 			ip = InetAddress.getByName(url.getHost());
 		} catch (UnknownHostException e) {
-			UpdateManager.logException(e, false);
+			UpdateUtils.logException(e, false);
 		}
 
 		if (requestingSite != null && !requestingSite.equals(ip))
@@ -188,7 +188,7 @@
 
 		} catch (MalformedURLException e) {
 			IStatus status = Utilities.newCoreException("", e).getStatus();
-			UpdateManager.log(status, false);
+			UpdateUtils.log(status, false);
 		}
 		return new PasswordAuthentication("", new char[] { ' ' }); //$NON-NLS-1$
 	}
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/UpdateManager.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/UpdateUtils.java
similarity index 97%
rename from update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/UpdateManager.java
rename to update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/UpdateUtils.java
index 1fcb80f..d93a986 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/UpdateManager.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/UpdateUtils.java
@@ -27,7 +27,7 @@
  * Helper class for performing update related tasks, queries, etc.
  * All the methods are static and this class should be a singleton.
  */
-public class UpdateManager {
+public class UpdateUtils {
 	private static final String KEY_SAVED_CONFIG =
 		"MultiInstallWizard.savedConfig";
 	private static final String RESOURCE_BUNDLE =
@@ -46,7 +46,7 @@
 	/**
 	 * Private constructor
 	 */
-	private UpdateManager() {
+	private UpdateUtils() {
 	}
 	
 	/**
@@ -144,14 +144,14 @@
 
 			for (int i = 0; i < isites.length; i++) {
 				IConfiguredSite isite = isites[i];
-				IFeature[] result = UpdateManager.searchSite(id, isite, onlyConfigured);
+				IFeature[] result = UpdateUtils.searchSite(id, isite, onlyConfigured);
 				for (int j = 0; j < result.length; j++) {
 					IFeature installedFeature = result[j];
 					features.add(installedFeature);
 				}
 			}
 		} catch (CoreException e) {
-			UpdateManager.logException(e);
+			UpdateUtils.logException(e);
 		}
 		return (IFeature[]) features.toArray(new IFeature[features.size()]);
 	}
@@ -363,7 +363,7 @@
 			}
 			// find other features and unconfigure
 			String id = iref.getVersionedIdentifier().getIdentifier();
-			IFeature[] sameIds = UpdateManager.searchSite(id, targetSite, true);
+			IFeature[] sameIds = UpdateUtils.searchSite(id, targetSite, true);
 			for (int j = 0; j < sameIds.length; j++) {
 				IFeature sameId = sameIds[j];
 				// Ignore self.
@@ -539,7 +539,7 @@
 	
 	public static URL getUpdateMapURL() {
 		Preferences pref = UpdateCore.getPlugin().getPluginPreferences();
-		String mapFile = pref.getString(UpdateManager.P_MAPPINGS_FILE);
+		String mapFile = pref.getString(UpdateUtils.P_MAPPINGS_FILE);
 		if (mapFile!=null && mapFile.length()>0) {
 			try {
 				String decodedFile = URLDecoder.decode(mapFile);
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/search/UnifiedUpdatesSearchCategory.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/search/UnifiedUpdatesSearchCategory.java
index de648de..be11121 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/search/UnifiedUpdatesSearchCategory.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/search/UnifiedUpdatesSearchCategory.java
@@ -299,14 +299,14 @@
 			if (job == null)
 				continue;
 			// do not accept updates without a license
-			if (!UpdateManager.hasLicense(job.getFeature()))
+			if (!UpdateUtils.hasLicense(job.getFeature()))
 				continue;
-			IStatus status = UpdateManager.getValidator().validatePendingInstall(job.getOldFeature(), job.getFeature());
+			IStatus status = UpdateUtils.getValidator().validatePendingInstall(job.getOldFeature(), job.getFeature());
 			if (status == null) {
 				if (hit.isPatch()) {
 					IFeature patch = job.getFeature();
 					// Do not add the patch if already installed
-					IFeature[] sameId = UpdateManager.getInstalledFeatures(patch, false);
+					IFeature[] sameId = UpdateUtils.getInstalledFeatures(patch, false);
 					if (sameId.length==0) {
 						if (filter.accept(patch))
 							collector.accept(patch);
@@ -346,7 +346,7 @@
 			// Don't waste time searching for updates to 
 			// patches.
 			try {
-				if (UpdateManager.isPatch(ref.getFeature(null)))
+				if (UpdateUtils.isPatch(ref.getFeature(null)))
 					continue;
 			}
 			catch (CoreException e) {
@@ -492,7 +492,7 @@
 			return false;
 		try {
 			IFeature feature = ref.getFeature(null);
-			return UpdateManager.isPatch(candidate, feature);
+			return UpdateUtils.isPatch(candidate, feature);
 		} catch (CoreException e) {
 			return false;
 		}
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/IUpdateModelChangedListener.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/operations/IUpdateModelChangedListener.java
similarity index 93%
rename from update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/IUpdateModelChangedListener.java
rename to update/org.eclipse.update.core/srcnew/org/eclipse/update/operations/IUpdateModelChangedListener.java
index abf83d4..eee2f24 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/internal/operations/IUpdateModelChangedListener.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/operations/IUpdateModelChangedListener.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.update.internal.operations;
+package org.eclipse.update.operations;
 
 public interface IUpdateModelChangedListener {
 	public void objectsAdded(Object parent, Object [] children);
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/operations/OperationsManager.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/operations/OperationsManager.java
index 4a1ed7f..0751210 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/operations/OperationsManager.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/operations/OperationsManager.java
@@ -87,7 +87,7 @@
 
 	public static boolean hasSelectedJobsWithLicenses(IInstallFeatureOperation[] jobs) {
 		for (int i = 0; i < jobs.length; i++) {
-			if (UpdateManager.hasLicense(jobs[i].getFeature()))
+			if (UpdateUtils.hasLicense(jobs[i].getFeature()))
 				return true;
 		}
 		return false;
@@ -95,7 +95,7 @@
 
 	public static boolean hasSelectedJobsWithOptionalFeatures(IInstallFeatureOperation[] jobs) {
 		for (int i = 0; i < jobs.length; i++) {
-			if (UpdateManager.hasOptionalFeatures(jobs[i].getFeature()))
+			if (UpdateUtils.hasOptionalFeatures(jobs[i].getFeature()))
 				return true;
 		}
 		return false;
@@ -104,7 +104,7 @@
 	public static IInstallFeatureOperation[] getSelectedJobsWithLicenses(IInstallFeatureOperation[] jobs) {
 		ArrayList list = new ArrayList();
 		for (int i = 0; i < jobs.length; i++) {
-			if (UpdateManager.hasLicense(jobs[i].getFeature()))
+			if (UpdateUtils.hasLicense(jobs[i].getFeature()))
 				list.add(jobs[i]);
 		}
 		return (IInstallFeatureOperation[]) list.toArray(
@@ -114,7 +114,7 @@
 	public static IInstallFeatureOperation[] getSelectedJobsWithOptionalFeatures(IInstallFeatureOperation[] jobs) {
 		ArrayList list = new ArrayList();
 		for (int i = 0; i < jobs.length; i++) {
-			if (UpdateManager.hasOptionalFeatures(jobs[i].getFeature()))
+			if (UpdateUtils.hasOptionalFeatures(jobs[i].getFeature()))
 				list.add(jobs[i]);
 		}
 		return (IInstallFeatureOperation[]) list.toArray(
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/search/BackLevelFilter.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/search/BackLevelFilter.java
index 07e31eb..6043c3a 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/search/BackLevelFilter.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/search/BackLevelFilter.java
@@ -14,7 +14,7 @@
 import org.eclipse.core.runtime.PluginVersionIdentifier;
 import org.eclipse.update.core.*;
 import org.eclipse.update.core.IFeature;
-import org.eclipse.update.internal.operations.UpdateManager;
+import org.eclipse.update.internal.operations.UpdateUtils;
 
 /**
  * This class can be added to the update search request
@@ -28,7 +28,7 @@
 	public boolean accept(IFeatureReference match) {
 		try {
 			PluginVersionIdentifier matchVid = match.getVersionedIdentifier().getVersion();
-			IFeature [] installed = UpdateManager.getInstalledFeatures(match.getVersionedIdentifier(), false);
+			IFeature [] installed = UpdateUtils.getInstalledFeatures(match.getVersionedIdentifier(), false);
 			if (installed.length==0) return true;
 			
 			for (int i=0; i<installed.length; i++) {
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/standalone/DisableCommand.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/standalone/DisableCommand.java
index 02c1ff9..5bb60ef 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/standalone/DisableCommand.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/standalone/DisableCommand.java
@@ -54,7 +54,7 @@
 				}
 			}
 			
-			IFeature[] features = UpdateManager.searchSite(featureId, targetSite, true);
+			IFeature[] features = UpdateUtils.searchSite(featureId, targetSite, true);
 			if (features == null || features.length == 0) {
 				System.out.println("There are no configured features with id:" + featureId);
 				return;
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/standalone/EnableCommand.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/standalone/EnableCommand.java
index bae5741..18ade4a 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/standalone/EnableCommand.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/standalone/EnableCommand.java
@@ -54,7 +54,7 @@
 				}
 			}
 			
-			IFeature[] features = UpdateManager.searchSite(featureId, targetSite, false);
+			IFeature[] features = UpdateUtils.searchSite(featureId, targetSite, false);
 			if (features == null || features.length == 0) {
 				System.out.println("There are no configured features with id:" + featureId);
 				return;
diff --git a/update/org.eclipse.update.core/srcnew/org/eclipse/update/standalone/UpdateCommand.java b/update/org.eclipse.update.core/srcnew/org/eclipse/update/standalone/UpdateCommand.java
index 929fda6..1e7dc68 100644
--- a/update/org.eclipse.update.core/srcnew/org/eclipse/update/standalone/UpdateCommand.java
+++ b/update/org.eclipse.update.core/srcnew/org/eclipse/update/standalone/UpdateCommand.java
@@ -57,7 +57,7 @@
 			}
 			
 			UpdateSearchScope searchScope = new UpdateSearchScope();
-			searchScope.setUpdateMapURL(UpdateManager.getUpdateMapURL());
+			searchScope.setUpdateMapURL(UpdateUtils.getUpdateMapURL());
 			UnifiedUpdatesSearchCategory category = new UnifiedUpdatesSearchCategory();
 			searchRequest = new UpdateSearchRequest(category, searchScope);
 			searchRequest.addFilter(new EnvironmentFilter());
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/DeltaAdapter.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/DeltaAdapter.java
index 38d5f5d..14b53a3 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/DeltaAdapter.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/DeltaAdapter.java
@@ -138,7 +138,7 @@
 
 	private void computeStatus() {
 		IFeatureReference[] refs = getSelectedReferences();
-		status = UpdateManager.getValidator().validateSessionDelta(delta, refs);
+		status = UpdateUtils.getValidator().validateSessionDelta(delta, refs);
 		statusComputed = true;
 	}
 
diff --git a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/preferences/UpdateSettingsPreferencePage.java b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/preferences/UpdateSettingsPreferencePage.java
index bbc9354..d1fee71 100644
--- a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/preferences/UpdateSettingsPreferencePage.java
+++ b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/preferences/UpdateSettingsPreferencePage.java
@@ -21,7 +21,7 @@
 import org.eclipse.swt.widgets.*;
 import org.eclipse.ui.*;
 import org.eclipse.update.internal.core.UpdateCore;
-import org.eclipse.update.internal.operations.UpdateManager;
+import org.eclipse.update.internal.operations.UpdateUtils;
 
 /**
  * Insert the type's description here.
@@ -69,7 +69,7 @@
 
 	private void initialize() {
 		Preferences pref = UpdateCore.getPlugin().getPluginPreferences();
-		String text = pref.getString(UpdateManager.P_MAPPINGS_FILE);
+		String text = pref.getString(UpdateUtils.P_MAPPINGS_FILE);
 		mappingsFile.setText(text);
 		textChanged();
 	}
@@ -93,9 +93,9 @@
 		Preferences pref = UpdateCore.getPlugin().getPluginPreferences();
 		String text = mappingsFile.getText();
 		if (text.length() > 0)
-			pref.setValue(UpdateManager.P_MAPPINGS_FILE, text);
+			pref.setValue(UpdateUtils.P_MAPPINGS_FILE, text);
 		else
-			pref.setToDefault(UpdateManager.P_MAPPINGS_FILE);
+			pref.setToDefault(UpdateUtils.P_MAPPINGS_FILE);
 		UpdateCore.getPlugin().savePluginPreferences();
 		return true;
 	}
diff --git a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/properties/FeatureStatusPropertyPage.java b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/properties/FeatureStatusPropertyPage.java
index 741653c..01fed8d 100644
--- a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/properties/FeatureStatusPropertyPage.java
+++ b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/properties/FeatureStatusPropertyPage.java
@@ -15,7 +15,7 @@
 import org.eclipse.ui.IWorkbenchPropertyPage;
 import org.eclipse.update.core.IFeature;
 import org.eclipse.update.core.SiteManager;
-import org.eclipse.update.internal.operations.UpdateManager;
+import org.eclipse.update.internal.operations.UpdateUtils;
 import org.eclipse.update.internal.ui.UpdateUI;
 import org.eclipse.update.internal.ui.model.ConfiguredFeatureAdapter;
 import org.eclipse.update.internal.ui.model.MissingFeature;
@@ -148,7 +148,7 @@
 				// If we are here, global status is unhappy
 				// because one or more included features
 				// is disabled.
-				if (UpdateManager.hasObsoletePatches(feature)) {
+				if (UpdateUtils.hasObsoletePatches(feature)) {
 					// The disabled included features
 					// are old patches that are now
 					// subsumed by better versions of
diff --git a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/views/FeatureStateAction.java b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/views/FeatureStateAction.java
index 5fdb3b2..f6e7632 100644
--- a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/views/FeatureStateAction.java
+++ b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/views/FeatureStateAction.java
@@ -65,7 +65,7 @@
 				e.getStatus());
 		} catch (InvocationTargetException e) {
 			// This should not happen
-			UpdateManager.logException(e.getTargetException());
+			UpdateUtils.logException(e.getTargetException());
 		}
 	}
 
diff --git a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/views/FindUpdatesAction.java b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/views/FindUpdatesAction.java
index 543cf72..d935c84 100644
--- a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/views/FindUpdatesAction.java
+++ b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/views/FindUpdatesAction.java
@@ -15,7 +15,7 @@
 import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.update.core.IFeature;
-import org.eclipse.update.internal.operations.UpdateManager;
+import org.eclipse.update.internal.operations.UpdateUtils;
 import org.eclipse.update.internal.search.UnifiedUpdatesSearchCategory;
 import org.eclipse.update.internal.ui.UpdateUI;
 import org.eclipse.update.internal.ui.wizards.*;
@@ -37,7 +37,7 @@
 
 	public void run() {
 		UpdateSearchScope scope = new UpdateSearchScope();
-		scope.setUpdateMapURL(UpdateManager.getUpdateMapURL());
+		scope.setUpdateMapURL(UpdateUtils.getUpdateMapURL());
 		UnifiedUpdatesSearchCategory category = new UnifiedUpdatesSearchCategory();
 		final UpdateSearchRequest searchRequest = new UpdateSearchRequest(category, scope);
 		searchRequest.addFilter(new EnvironmentFilter());
diff --git a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/views/NewConfigurationView.java b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/views/NewConfigurationView.java
index d02a919..0f0a836 100644
--- a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/views/NewConfigurationView.java
+++ b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/views/NewConfigurationView.java
@@ -9,32 +9,31 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.update.internal.ui.views;
-import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.*;
 import java.util.*;
 
 import org.eclipse.core.runtime.*;
 import org.eclipse.jface.action.*;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.operation.*;
+import org.eclipse.jface.resource.*;
 import org.eclipse.jface.viewers.*;
-import org.eclipse.swt.SWT;
+import org.eclipse.swt.*;
 import org.eclipse.swt.custom.*;
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.*;
 import org.eclipse.swt.layout.*;
 import org.eclipse.swt.widgets.*;
 import org.eclipse.ui.*;
-import org.eclipse.ui.dialogs.PropertyDialogAction;
-import org.eclipse.ui.help.WorkbenchHelp;
-import org.eclipse.ui.part.DrillDownAdapter;
-import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.dialogs.*;
+import org.eclipse.ui.help.*;
+import org.eclipse.ui.part.*;
 import org.eclipse.update.configuration.*;
 import org.eclipse.update.core.*;
 import org.eclipse.update.internal.operations.*;
-import org.eclipse.update.internal.operations.IUpdateModelChangedListener;
 import org.eclipse.update.internal.ui.*;
 import org.eclipse.update.internal.ui.model.*;
 import org.eclipse.update.internal.ui.parts.*;
 import org.eclipse.update.operations.*;
+import org.eclipse.update.operations.IUpdateModelChangedListener;
 
 /**
  * Insert the type's description here.
@@ -919,7 +918,7 @@
 				// If we are here, global status is unhappy
 				// because one or more included features
 				// is disabled.
-				if (UpdateManager.hasObsoletePatches(feature)) {
+				if (UpdateUtils.hasObsoletePatches(feature)) {
 					// The disabled included features
 					// are old patches that are now
 					// subsumed by better versions of
diff --git a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/views/NewExtensionLocationAction.java b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/views/NewExtensionLocationAction.java
index 1e3cf47..6a359e4 100644
--- a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/views/NewExtensionLocationAction.java
+++ b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/views/NewExtensionLocationAction.java
@@ -18,7 +18,7 @@
 import org.eclipse.jface.viewers.*;
 import org.eclipse.ui.dialogs.*;
 import org.eclipse.update.configuration.IInstallConfiguration;
-import org.eclipse.update.internal.operations.UpdateManager;
+import org.eclipse.update.internal.operations.UpdateUtils;
 import org.eclipse.update.internal.ui.UpdateUI;
 import org.eclipse.update.internal.ui.model.*;
 import org.eclipse.update.internal.ui.parts.*;
@@ -77,12 +77,12 @@
 		File dir = root.getInstallableDirectory();
 		try {
 			IInstallConfiguration config =
-				UpdateManager.createInstallConfiguration();
+				UpdateUtils.createInstallConfiguration();
 			if (UnifiedTargetPage
 				.addConfiguredSite(UpdateUI.getActiveWorkbenchShell(), config, dir, true)
 				!= null) {
-				UpdateManager.makeConfigurationCurrent(config, null);
-				UpdateManager.saveLocalSite();
+				UpdateUtils.makeConfigurationCurrent(config, null);
+				UpdateUtils.saveLocalSite();
 				UpdateUI.requestRestart();
 			}
 		} catch (CoreException e) {
diff --git a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/wizards/RevertConfigurationWizardPage.java b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/wizards/RevertConfigurationWizardPage.java
index e4fb409..9e1cb7e 100644
--- a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/wizards/RevertConfigurationWizardPage.java
+++ b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/wizards/RevertConfigurationWizardPage.java
@@ -194,7 +194,7 @@
 			(IInstallConfiguration) ssel.getFirstElement();
 
 		IStatus status =
-			UpdateManager.getValidator().validatePendingRevert(target);
+			UpdateUtils.getValidator().validatePendingRevert(target);
 		if (status != null) {
 			ErrorDialog.openError(
 				UpdateUI.getActiveWorkbenchShell(),
diff --git a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/wizards/UnifiedInstallWizard.java b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/wizards/UnifiedInstallWizard.java
index 5bb341e..24ad02a 100644
--- a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/wizards/UnifiedInstallWizard.java
+++ b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/wizards/UnifiedInstallWizard.java
@@ -159,7 +159,7 @@
 		addPage(reviewPage);
 
 		try {
-			config = UpdateManager.createInstallConfiguration();
+			config = UpdateUtils.createInstallConfiguration();
 		} catch (CoreException e) {
 			UpdateUI.logException(e);
 		}
diff --git a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/wizards/UnifiedModeSelectionPage.java b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/wizards/UnifiedModeSelectionPage.java
index f9bac1c..ede013e 100644
--- a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/wizards/UnifiedModeSelectionPage.java
+++ b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/wizards/UnifiedModeSelectionPage.java
@@ -12,7 +12,7 @@
 import org.eclipse.swt.events.*;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.*;
-import org.eclipse.update.internal.operations.UpdateManager;
+import org.eclipse.update.internal.operations.UpdateUtils;
 import org.eclipse.update.internal.search.UnifiedUpdatesSearchCategory;
 import org.eclipse.update.internal.ui.UpdateUI;
 import org.eclipse.update.search.*;
@@ -55,7 +55,7 @@
 	private void initializeSearch() {
 		if (searchRequest!=null) return;
 		UpdateSearchScope scope = new UpdateSearchScope();
-		scope.setUpdateMapURL(UpdateManager.getUpdateMapURL());
+		scope.setUpdateMapURL(UpdateUtils.getUpdateMapURL());
 		UnifiedUpdatesSearchCategory category = new UnifiedUpdatesSearchCategory();
 		searchRequest = new UpdateSearchRequest(category, scope);
 		searchRequest.addFilter(new EnvironmentFilter());
diff --git a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/wizards/UnifiedReviewPage.java b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/wizards/UnifiedReviewPage.java
index a449985..1e66496 100644
--- a/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/wizards/UnifiedReviewPage.java
+++ b/update/org.eclipse.update.ui/srcnew/org/eclipse/update/internal/ui/wizards/UnifiedReviewPage.java
@@ -26,7 +26,7 @@
 import org.eclipse.ui.dialogs.PropertyDialogAction;
 import org.eclipse.ui.help.WorkbenchHelp;
 import org.eclipse.update.core.*;
-import org.eclipse.update.internal.operations.UpdateManager;
+import org.eclipse.update.internal.operations.UpdateUtils;
 import org.eclipse.update.internal.ui.*;
 import org.eclipse.update.internal.ui.model.SimpleFeatureAdapter;
 import org.eclipse.update.internal.ui.parts.*;
@@ -575,7 +575,7 @@
 	public void validateSelection() {
 		IInstallFeatureOperation[] jobs = getSelectedJobs();
 		validationStatus =
-			UpdateManager.getValidator().validatePendingChanges(jobs);
+			UpdateUtils.getValidator().validatePendingChanges(jobs);
 		setPageComplete(validationStatus == null);
 		String errorMessage = null;
 
