diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/ConnectorMigrationUi.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/ConnectorMigrationUi.java
index 8c2edcc..9b48092 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/ConnectorMigrationUi.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/ConnectorMigrationUi.java
@@ -97,7 +97,7 @@
 					@Override
 					public void run() {
 						if (taskListView != null && taskListView.getServiceMessageControl() != null) {
-							ServiceMessage message = new ServiceMessage("") {
+							ServiceMessage message = new ServiceMessage("") { //$NON-NLS-1$
 
 								@Override
 								public boolean openLink(String link) {
@@ -110,7 +110,7 @@
 									return false;
 								}
 							};
-							message.setTitle("Connector Migration");
+							message.setTitle(Messages.ConnectorMigrationUi_Connector_Migration);
 							message.setDescription(NLS.bind(Messages.ConnectorMigrator_complete_migration_prompt_title,
 									COMLETE_MIGRATION));
 							message.setImage(Dialog.DLG_IMG_MESSAGE_WARNING);
@@ -133,7 +133,7 @@
 			@Override
 			public void run() {
 				if (taskListView != null && taskListView.getServiceMessageControl() != null) {
-					ServiceMessage message = new ServiceMessage("") {
+					ServiceMessage message = new ServiceMessage("") { //$NON-NLS-1$
 						@Override
 						public boolean openLink(String link) {
 							if (link.equals(MIGRATE)) {
@@ -146,7 +146,7 @@
 						}
 
 					};
-					message.setTitle("End of Connector Support");
+					message.setTitle(Messages.ConnectorMigrationUi_End_of_Connector_Support);
 					message.setDescription(
 							NLS.bind(Messages.ConnectorMigrator_complete_migration_prompt_message, MIGRATE));
 					message.setImage(Dialog.DLG_IMG_MESSAGE_INFO);
@@ -157,7 +157,7 @@
 	}
 
 	protected Job createPromptToCompleteMigrationJob(ConnectorMigrator migrator) {
-		Job job = new CompleteMigrationJob("Complete Connector Migration Prompt", migrator);
+		Job job = new CompleteMigrationJob(Messages.ConnectorMigrationUi_Complete_Connector_Migration_Prompt, migrator);
 		job.setUser(false);
 		job.setSystem(true);
 		return job;
@@ -191,7 +191,7 @@
 			public void run() {
 				String repositoryList = Joiner.on("\n") //$NON-NLS-1$
 						.join(Iterables.transform(failedValidation, repositoryToLabel()));
-				MessageDialog.openWarning(WorkbenchUtil.getShell(), "Validation Failed",
+				MessageDialog.openWarning(WorkbenchUtil.getShell(), Messages.ConnectorMigrationUi_Validation_Failed,
 						NLS.bind(Messages.ConnectorMigrationWizard_validation_failed, repositoryList));
 			}
 		});
@@ -208,7 +208,7 @@
 
 	protected void backupTaskList(final IProgressMonitor monitor) throws IOException {
 		try {
-			monitor.subTask("Backing up task list");
+			monitor.subTask(Messages.ConnectorMigrationUi_Backing_up_task_list);
 			String backupFolder = TasksUiPlugin.getDefault().getBackupFolderPath();
 			new File(backupFolder).mkdirs();
 			String fileName = getBackupFileName(new Date());
@@ -245,7 +245,7 @@
 		final UnsubmittedTaskContainer unsubmitted = tasksState.getTaskList()
 				.getUnsubmittedContainer(repository.getRepositoryUrl());
 		try {
-			monitor.subTask("Deleting old repository, tasks, and queries");
+			monitor.subTask(Messages.ConnectorMigrationUi_Deleting_old_repository_tasks_and_queries);
 			try {
 				DeleteAction.prepareDeletion(tasks);
 				if (unsubmitted != null) {
@@ -283,7 +283,7 @@
 			}, monitor);
 			tasksState.getRepositoryModel().clear();
 		} catch (CoreException e) {
-			StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Error deleting task", e));
+			StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, Messages.ConnectorMigrationUi_Error_deleting_task, e));
 		}
 	}
 
@@ -303,8 +303,8 @@
 		PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
 			@Override
 			public void run() {
-				MessageDialog.openInformation(WorkbenchUtil.getShell(), "Connector Migration Complete",
-						"Connector migration completed successfully. You may resume using the task list.");
+				MessageDialog.openInformation(WorkbenchUtil.getShell(), Messages.ConnectorMigrationUi_Connector_Migration_Complete,
+						Messages.ConnectorMigrationUi_Connector_migration_completed_successfully_You_may_resume_using_the_task_list);
 			}
 		});
 	}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/ConnectorMigrationWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/ConnectorMigrationWizard.java
index 762a2a7..ec46902 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/ConnectorMigrationWizard.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/ConnectorMigrationWizard.java
@@ -165,7 +165,7 @@
 					AbstractRepositoryConnector connector = manager.getRepositoryConnector(kind);
 					if (connector != null) {
 						return connector.getLabel()
-								+ NLS.bind(" (used by {0} repositories)", manager.getRepositories(kind).size());
+								+ NLS.bind(Messages.ConnectorMigrationWizard_used_by_X_repositories, manager.getRepositories(kind).size());
 					}
 				}
 				return super.getText(element);
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/ConnectorMigrator.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/ConnectorMigrator.java
index 9aad784..487eb68 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/ConnectorMigrator.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/ConnectorMigrator.java
@@ -54,6 +54,7 @@
 import org.eclipse.mylyn.tasks.core.TaskRepository;
 import org.eclipse.mylyn.tasks.core.data.TaskData;
 import org.eclipse.mylyn.tasks.core.sync.SynchronizationJob;
+import org.eclipse.osgi.util.NLS;
 
 import com.google.common.base.Function;
 import com.google.common.collect.FluentIterable;
@@ -172,14 +173,14 @@
 	protected void migrateConnectors(IProgressMonitor monitor) throws IOException {
 		final List<TaskRepository> failedValidation = new ArrayList<>();
 		List<TaskRepository> oldRepositories = gatherRepositoriesToMigrate(connectorsToMigrate);
-		monitor.beginTask("Migrating repositories", oldRepositories.size() + 1);
+		monitor.beginTask(Messages.ConnectorMigrator_Migrating_repositories, oldRepositories.size() + 1);
 		getMigrationUi().backupTaskList(monitor);
 
 		for (TaskRepository repository : oldRepositories) {
 			if (monitor.isCanceled()) {
 				throw new OperationCanceledException();
 			}
-			monitor.subTask("Migrating " + repository.getRepositoryLabel());
+			monitor.subTask(NLS.bind(Messages.ConnectorMigrator_Migrating_X, repository.getRepositoryLabel()));
 			String kind = repository.getConnectorKind();
 			String newKind = getConnectorKinds().get(kind);
 			TaskRepository newRepository = getMigratedRepository(newKind, repository);
@@ -196,12 +197,13 @@
 		}
 
 		Set<TaskRepository> newRepositories = ImmutableSet.copyOf(repositories.values());
-		monitor.beginTask("Validating repository connections", newRepositories.size());
+		monitor.beginTask(Messages.ConnectorMigrator_Validating_repository_connections, newRepositories.size());
 		for (TaskRepository newRepository : newRepositories) {
 			if (monitor.isCanceled()) {
 				throw new OperationCanceledException();
 			}
-			monitor.subTask("Validating connection to " + newRepository.getRepositoryLabel());
+			monitor.subTask(NLS.bind(Messages.ConnectorMigrator_Validating_connection_to_X,
+					newRepository.getRepositoryLabel()));
 			AbstractRepositoryConnector newConnector = getRepositoryManager()
 					.getRepositoryConnector(newRepository.getConnectorKind());
 			try {
@@ -262,7 +264,8 @@
 	protected void disconnect(TaskRepository repository) {
 		repository.setOffline(true);
 		// we need to change the label so that the new repo doesn't have the same label, so that it can be edited
-		repository.setRepositoryLabel(repository.getRepositoryLabel() + " (Unsupported, do not delete)");
+		repository.setRepositoryLabel(
+				NLS.bind(Messages.ConnectorMigrator_X_Unsupported_do_not_delete, repository.getRepositoryLabel()));
 		Set<RepositoryQuery> queriesForUrl = getTaskList().getRepositoryQueries(repository.getRepositoryUrl());
 		for (RepositoryQuery query : Sets.filter(queriesForUrl, isQueryForConnector(repository.getConnectorKind()))) {
 			query.setAutoUpdate(false);// prevent error logged when Mylyn asks new connector to sync query for old connector
@@ -312,14 +315,14 @@
 		for (Entry<TaskRepository, TaskRepository> entry : repositories.entrySet()) {
 			TaskRepository oldRepository = entry.getKey();
 			TaskRepository newRepository = entry.getValue();
-			monitor.subTask("Migrating tasks for " + newRepository);
+			monitor.subTask(NLS.bind(Messages.ConnectorMigrator_Migrating_tasks_for_X, newRepository));
 			AbstractRepositoryConnector newConnector = getRepositoryManager()
 					.getRepositoryConnector(newRepository.getConnectorKind());
 			Set<ITask> tasksToMigrate = Sets.filter(getTaskList().getTasks(oldRepository.getRepositoryUrl()),
 					isTaskForConnector(oldRepository.getConnectorKind()));
 			migrateTasks(tasksToMigrate, oldRepository, newRepository, newConnector, monitor);
 		}
-		monitor.subTask("Waiting for tasks to synchronize");
+		monitor.subTask(Messages.ConnectorMigrator_Waiting_for_tasks_to_synchronize);
 		getSyncTaskJobListener().start();
 		while (!getSyncTaskJobListener().isComplete()) {
 			try {
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/Messages.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/Messages.java
index e366003..1b45869 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/Messages.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/Messages.java
@@ -44,6 +44,24 @@
 
 	public static String CompleteConnectorMigrationWizard_Waiting_for_queries_to_synchronize;
 
+	public static String ConnectorMigrationUi_Backing_up_task_list;
+
+	public static String ConnectorMigrationUi_Complete_Connector_Migration_Prompt;
+
+	public static String ConnectorMigrationUi_Connector_Migration;
+
+	public static String ConnectorMigrationUi_Connector_Migration_Complete;
+
+	public static String ConnectorMigrationUi_Connector_migration_completed_successfully_You_may_resume_using_the_task_list;
+
+	public static String ConnectorMigrationUi_Deleting_old_repository_tasks_and_queries;
+
+	public static String ConnectorMigrationUi_End_of_Connector_Support;
+
+	public static String ConnectorMigrationUi_Error_deleting_task;
+
+	public static String ConnectorMigrationUi_Validation_Failed;
+
 	public static String ConnectorMigrationWizard_Connector_Migration;
 
 	public static String ConnectorMigrationWizard_End_of_Connector_Support;
@@ -56,6 +74,8 @@
 
 	public static String ConnectorMigrationWizard_Select_the_connectors_to_migrate;
 
+	public static String ConnectorMigrationWizard_used_by_X_repositories;
+
 	public static String ConnectorMigrationWizard_validation_failed;
 
 	public static String ConnectorMigrator_complete_migration_prompt_message;
@@ -63,6 +83,20 @@
 	public static String ConnectorMigrator_complete_migration_prompt_title;
 
 	public static String ConnectorMigrator_Migrating_Queries;
+
+	public static String ConnectorMigrator_Migrating_repositories;
+
+	public static String ConnectorMigrator_Migrating_tasks_for_X;
+
+	public static String ConnectorMigrator_Migrating_X;
+
+	public static String ConnectorMigrator_Validating_connection_to_X;
+
+	public static String ConnectorMigrator_Validating_repository_connections;
+
+	public static String ConnectorMigrator_Waiting_for_tasks_to_synchronize;
+
+	public static String ConnectorMigrator_X_Unsupported_do_not_delete;
 	static {
 		// initialize resource bundle
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/messages.properties b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/messages.properties
index 84d6413..d0b7705 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/messages.properties
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/migrator/messages.properties
@@ -22,6 +22,15 @@
 connector-migration-*.zip file stored in <workspace>/.metadata/.mylyn/backup. This will restore your task list and repositories to \
 the state they were in before the migration, but any data stored by 3rd party plugins for Mylyn may be lost.
 CompleteConnectorMigrationWizard_Waiting_for_queries_to_synchronize=Waiting for queries to complete synchronization
+ConnectorMigrationUi_Backing_up_task_list=Backing up task list
+ConnectorMigrationUi_Complete_Connector_Migration_Prompt=Complete Connector Migration Prompt
+ConnectorMigrationUi_Connector_Migration=Connector Migration
+ConnectorMigrationUi_Connector_Migration_Complete=Connector Migration Complete
+ConnectorMigrationUi_Connector_migration_completed_successfully_You_may_resume_using_the_task_list=Connector migration completed successfully. You may resume using the task list.
+ConnectorMigrationUi_Deleting_old_repository_tasks_and_queries=Deleting old repository, tasks, and queries
+ConnectorMigrationUi_End_of_Connector_Support=End of Connector Support
+ConnectorMigrationUi_Error_deleting_task=Error deleting task
+ConnectorMigrationUi_Validation_Failed=Validation Failed
 ConnectorMigrationWizard_Connector_Migration=Connector Migration
 ConnectorMigrationWizard_End_of_Connector_Support=End of Connector Support
 ConnectorMigrationWizard_Message=Support is ending for some connectors, but replacement connectors are installed. This wizard \
@@ -44,10 +53,18 @@
 backed up before migration; you can undo the migration \
 by selecting "Restore Tasks from History" in the Task List view menu and choosing the connector-migration-*.zip file stored \
 in <workspace>/.metadata/.mylyn/backup.
+ConnectorMigrationWizard_used_by_X_repositories=\ (used by {0} repositories)
 ConnectorMigrationWizard_validation_failed=Could not validate the connection to the following repositories. Additional configuration may \
 be required. Please edit the repository settings via the Task Repositories view.\n\n{0}
 ConnectorMigrator_complete_migration_prompt_message=Support is ending for some of your connectors, but replacement connectors are \
 installed. <a href="{0}">Click here</a> for more information or to migrate to the new connectors.
 ConnectorMigrator_complete_migration_prompt_title=Connector migration is not finished. Use the new connectors to recreate any queries \
 that have not automatically migrated and then click <a href="{0}">complete migration</a> to migrate your contexts, scheduled dates, private notes and other data.
+ConnectorMigrator_Migrating_X=Migrating {0}
 ConnectorMigrator_Migrating_Queries=Migrating Queries
+ConnectorMigrator_Migrating_repositories=Migrating repositories
+ConnectorMigrator_Migrating_tasks_for_X=Migrating tasks for {0}
+ConnectorMigrator_X_Unsupported_do_not_delete={0} (Unsupported, do not delete)
+ConnectorMigrator_Validating_connection_to_X=Validating connection to {0}
+ConnectorMigrator_Validating_repository_connections=Validating repository connections
+ConnectorMigrator_Waiting_for_tasks_to_synchronize=Waiting for tasks to synchronize
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/SelectRepositoryPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/SelectRepositoryPage.java
index 5816d3b..f69be22 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/SelectRepositoryPage.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/SelectRepositoryPage.java
@@ -258,7 +258,7 @@
 						getContainer().showPage(getNextPage());
 					} catch (RuntimeException e) {
 						StatusHandler.log(new Status(IStatus.WARNING, TasksUiPlugin.ID_PLUGIN,
-								"Exception while opening the next wizard page", e));
+								"Exception while opening the next wizard page", e)); //$NON-NLS-1$
 					}
 				} else if (canFinish()) {
 					if (getWizard().performFinish()) {
