diff --git a/org.eclipse.mylyn.discovery.core/src/org/eclipse/mylyn/internal/discovery/core/util/WebUtil.java b/org.eclipse.mylyn.discovery.core/src/org/eclipse/mylyn/internal/discovery/core/util/WebUtil.java
index d1c1f2f..4e2664b 100644
--- a/org.eclipse.mylyn.discovery.core/src/org/eclipse/mylyn/internal/discovery/core/util/WebUtil.java
+++ b/org.eclipse.mylyn.discovery.core/src/org/eclipse/mylyn/internal/discovery/core/util/WebUtil.java
@@ -20,7 +20,6 @@
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.Reader;
-import java.text.MessageFormat;
 
 import org.apache.commons.httpclient.HostConfiguration;
 import org.apache.commons.httpclient.HttpClient;
@@ -29,6 +28,7 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.mylyn.commons.net.AbstractWebLocation;
 import org.eclipse.mylyn.commons.net.Policy;
+import org.eclipse.osgi.util.NLS;
 
 /**
  * 
@@ -89,7 +89,7 @@
 						in.close();
 					}
 				} else {
-					throw new IOException(MessageFormat.format(Messages.WebUtil_cannotDownload,
+					throw new IOException(NLS.bind(Messages.WebUtil_cannotDownload,
 							location.getUrl(), result));
 				}
 			} finally {
diff --git a/org.eclipse.mylyn.discovery.ui/src/org/eclipse/mylyn/internal/discovery/ui/wizards/ConnectorDiscoveryWizard.java b/org.eclipse.mylyn.discovery.ui/src/org/eclipse/mylyn/internal/discovery/ui/wizards/ConnectorDiscoveryWizard.java
index 37bdcf0..fae050e 100644
--- a/org.eclipse.mylyn.discovery.ui/src/org/eclipse/mylyn/internal/discovery/ui/wizards/ConnectorDiscoveryWizard.java
+++ b/org.eclipse.mylyn.discovery.ui/src/org/eclipse/mylyn/internal/discovery/ui/wizards/ConnectorDiscoveryWizard.java
@@ -24,11 +24,10 @@
 import org.eclipse.mylyn.internal.discovery.core.model.ConnectorDescriptorKind;
 import org.eclipse.mylyn.internal.discovery.core.model.ConnectorDiscovery;
 import org.eclipse.mylyn.internal.discovery.ui.DiscoveryUi;
+import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.Version;
 
-import com.ibm.icu.text.MessageFormat;
-
 /**
  * A wizard for performing discovery of connectors and selecting connectors to install. When finish is pressed, selected
  * connectors are downloaded and installed.
@@ -84,7 +83,7 @@
 			IRunnableWithProgress job = new InstallConnectorsJob(mainPage.getInstallableConnectors());
 			getContainer().run(true, true, job);
 		} catch (InvocationTargetException e) {
-			IStatus status = new Status(IStatus.ERROR, DiscoveryUi.BUNDLE_ID, MessageFormat.format(
+			IStatus status = new Status(IStatus.ERROR, DiscoveryUi.BUNDLE_ID, NLS.bind(
 					Messages.ConnectorDiscoveryWizard_installProblems, new Object[] { e.getMessage() }), e);
 			DiscoveryUi.logAndDisplayStatus(Messages.ConnectorDiscoveryWizard_cannotInstall, status);
 		} catch (InterruptedException e) {
diff --git a/org.eclipse.mylyn.discovery.ui/src/org/eclipse/mylyn/internal/discovery/ui/wizards/InstallConnectorsJob.java b/org.eclipse.mylyn.discovery.ui/src/org/eclipse/mylyn/internal/discovery/ui/wizards/InstallConnectorsJob.java
index ba68c26..b70bf0e 100644
--- a/org.eclipse.mylyn.discovery.ui/src/org/eclipse/mylyn/internal/discovery/ui/wizards/InstallConnectorsJob.java
+++ b/org.eclipse.mylyn.discovery.ui/src/org/eclipse/mylyn/internal/discovery/ui/wizards/InstallConnectorsJob.java
@@ -45,11 +45,10 @@
 import org.eclipse.mylyn.internal.discovery.core.model.ConnectorDescriptor;
 import org.eclipse.mylyn.internal.discovery.ui.DiscoveryUi;
 import org.eclipse.mylyn.internal.discovery.ui.util.SimpleSelectionProvider;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.PlatformUI;
 
-import com.ibm.icu.text.MessageFormat;
-
 /**
  * A job that downloads and installs one or more {@link ConnectorDescriptor connectors}. The bulk of the installation
  * work is done by p2; this class just sets up the p2 repository metadata and selects the appropriate features to
@@ -244,14 +243,14 @@
 						public void run() {
 							okayToProceed[0] = MessageDialog.openQuestion(PlatformUI.getWorkbench()
 									.getActiveWorkbenchWindow()
-									.getShell(), Messages.InstallConnectorsJob_questionProceed, MessageFormat.format(
+									.getShell(), Messages.InstallConnectorsJob_questionProceed, NLS.bind(
 									Messages.InstallConnectorsJob_questionProceed_long, new Object[] { notFound }));
 						}
 					});
 					proceed = okayToProceed[0];
 				}
 				if (!proceed) {
-					throw new CoreException(new Status(IStatus.ERROR, DiscoveryUi.BUNDLE_ID, MessageFormat.format(
+					throw new CoreException(new Status(IStatus.ERROR, DiscoveryUi.BUNDLE_ID, NLS.bind(
 							Messages.InstallConnectorsJob_connectorsNotAvailable, new Object[] { notFound }), null));
 				}
 			} else if (installableUnits.size() > installableConnectors.size()) {
