diff --git a/org.eclipse.mylyn.web.tasks/META-INF/MANIFEST.MF b/org.eclipse.mylyn.web.tasks/META-INF/MANIFEST.MF
index bb8a4d5..836d9fe 100644
--- a/org.eclipse.mylyn.web.tasks/META-INF/MANIFEST.MF
+++ b/org.eclipse.mylyn.web.tasks/META-INF/MANIFEST.MF
@@ -1,10 +1,10 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
-Bundle-Name: Mylyn Web Templates Connector (Incubation)
+Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.mylyn.web.tasks;singleton:=true
 Bundle-Version: 3.6.0.qualifier
 Bundle-Activator: org.eclipse.mylyn.internal.web.tasks.TasksWebPlugin
-Bundle-Vendor: Eclipse Mylyn
+Bundle-Vendor: %Bundle-Vendor
 Require-Bundle: com.sun.syndication;bundle-version="0.9.0",
  org.jdom;bundle-version="1.0.0",
  org.eclipse.core.runtime,
@@ -18,3 +18,4 @@
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.mylyn.internal.web.tasks;x-internal:=true
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Localization: plugin
diff --git a/org.eclipse.mylyn.web.tasks/build.properties b/org.eclipse.mylyn.web.tasks/build.properties
index 3701a2e..91a1759 100644
--- a/org.eclipse.mylyn.web.tasks/build.properties
+++ b/org.eclipse.mylyn.web.tasks/build.properties
@@ -11,5 +11,6 @@
                .,\
                plugin.xml,\
                icons/,\
-               about.html
-src.includes = about.html
+               about.html,\
+               plugin.properties
+src.includes = about.html
\ No newline at end of file
diff --git a/org.eclipse.mylyn.web.tasks/plugin.properties b/org.eclipse.mylyn.web.tasks/plugin.properties
new file mode 100644
index 0000000..ade762b
--- /dev/null
+++ b/org.eclipse.mylyn.web.tasks/plugin.properties
@@ -0,0 +1,3 @@
+#Properties file for org.eclipse.mylyn.web.tasks
+Bundle-Vendor = Eclipse Mylyn
+Bundle-Name = Mylyn Web Templates Connector (Incubation)
diff --git a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/Messages.java b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/Messages.java
new file mode 100644
index 0000000..0775c99
--- /dev/null
+++ b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/Messages.java
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2008 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.web.tasks;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS {
+	private static final String BUNDLE_NAME = "org.eclipse.mylyn.internal.web.tasks.messages"; //$NON-NLS-1$
+
+	public static String ParameterEditorDialog_New_Property;
+
+	public static String ParameterEditorDialog_Edit_Property;
+
+	public static String ParameterEditorDialog_Name_;
+
+	public static String ParameterEditorDialog_Value_;
+
+	public static String ParameterEditorDialog_Name_should_be_Java_identifier;
+
+	public static String ParametersEditor_Parameter;
+
+	public static String ParametersEditor_Value;
+
+	public static String ParametersEditor_Add_;
+
+	public static String ParametersEditor_Remove_;
+
+	public static String ParametersEditor_Edit_;
+
+	public static String WebQueryWizardPage_Advanced_Configuration;
+
+	public static String WebQueryWizardPage_complete;
+
+	public static String WebQueryWizardPage_Create_web_query;
+
+	public static String WebQueryWizardPage_Description;
+
+	public static String WebQueryWizardPage_Id;
+
+	public static String WebQueryWizardPage_incomplete;
+
+	public static String WebQueryWizardPage_New_web_query;
+
+	public static String WebQueryWizardPage_No_matching_results_Check_query_regexp;
+
+	public static String WebQueryWizardPage_Open;
+
+	public static String WebQueryWizardPage_Opening_Browser;
+
+	public static String WebQueryWizardPage_Owner;
+
+	public static String WebQueryWizardPage_Parsing_error_;
+
+	public static String WebQueryWizardPage_Preview;
+
+	public static String WebQueryWizardPage_Query_Pattern_;
+
+	public static String WebQueryWizardPage_Query_result;
+
+	public static String WebQueryWizardPage_Query_Title_;
+
+	public static String WebQueryWizardPage_Query_URL_;
+
+	public static String WebQueryWizardPage_Specify_query_parameters_for_X;
+
+	public static String WebQueryWizardPage_Status;
+
+	public static String WebQueryWizardPage_Type;
+
+	public static String WebQueryWizardPage_Unable_to_fetch_resource_;
+
+	public static String WebQueryWizardPage_Updating_preview;
+
+	public static String WebRepositoryConnector_Require_two_matching_groups;
+
+	public static String WebRepositoryConnector_Web_Template_Advanced_;
+
+	public static String WebRepositoryConnector_Failed_to_parse_RSS_feed;
+
+	public static String WebRepositoryConnector_Could_not_fetch_resource;
+
+	public static String WebRepositorySettingsPage_Web_Repository_Settings;
+
+	public static String WebRepositorySettingsPage_Select_server_template_example_and_modify_to_match_settings_for_your_project;
+
+	public static String WebRepositorySettingsPage_Login_Form_URL_;
+
+	public static String WebRepositorySettingsPage_Login_Token_Pattern;
+
+	public static String WebRepositorySettingsPage_Advanced_Configuration;
+
+	public static String WebRepositorySettingsPage_Task_URL_;
+
+	public static String WebRepositorySettingsPage_New_Task_URL_;
+
+	public static String WebRepositorySettingsPage_Query_Request_URL_;
+
+	public static String WebRepositorySettingsPage_Query_Pattern_;
+
+	public static String WebRepositorySettingsPage_Login_Request_URL_;
+
+	public static String WebTaskEditorPageFactory_Browser;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
+
+	private Messages() {
+	}
+}
diff --git a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/NamedPattern.java b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/NamedPattern.java
index 12dcbb5..6cd6478 100644
--- a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/NamedPattern.java
+++ b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/NamedPattern.java
@@ -51,7 +51,7 @@
 
 	private String prepare(String namedRegex) {
 		StringBuilder regex = new StringBuilder();
-		Matcher m = Pattern.compile("\\((\\{(\\S+?)})").matcher(namedRegex);
+		Matcher m = Pattern.compile("\\((\\{(\\S+?)})").matcher(namedRegex); //$NON-NLS-1$
 		int pos = 0;
 		while (m.find()) {
 			groups.add(m.group(2));
diff --git a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/ParameterEditorDialog.java b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/ParameterEditorDialog.java
index e02c959..ce9fba3 100644
--- a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/ParameterEditorDialog.java
+++ b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/ParameterEditorDialog.java
@@ -44,12 +44,12 @@
 
 	public ParameterEditorDialog(Shell parent) {
 		super(parent);
-		this.title = "New Property";
+		this.title = Messages.ParameterEditorDialog_New_Property;
 	}
 
 	public ParameterEditorDialog(Shell parent, String name, String value) {
 		super(parent);
-		this.title = "Edit Property";
+		this.title = Messages.ParameterEditorDialog_Edit_Property;
 		this.name = name;
 		this.value = value;
 	}
@@ -62,7 +62,7 @@
 		composite.setLayout(gridLayout);
 
 		Label nameLabel = new Label(composite, SWT.NONE);
-		nameLabel.setText("&Name:");
+		nameLabel.setText(Messages.ParameterEditorDialog_Name_);
 
 		nameText = new Text(composite, SWT.BORDER);
 		GridData gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
@@ -71,7 +71,7 @@
 
 		Label valueLabel = new Label(composite, SWT.NONE);
 		valueLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
-		valueLabel.setText("&Value:");
+		valueLabel.setText(Messages.ParameterEditorDialog_Value_);
 
 		valueText = new Text(composite, SWT.BORDER);
 		GridData gridData_1 = new GridData(SWT.FILL, SWT.CENTER, true, false);
@@ -99,6 +99,8 @@
 		status = new Text(composite, SWT.READ_ONLY);
 		status.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
 
+		applyDialogFont(composite);
+
 		return composite;
 	}
 
@@ -125,7 +127,7 @@
 
 	private boolean isValid() {
 		if (name.length() == 0 || !Character.isLetter(name.charAt(0))) {
-			status.setText("Name should be a Java identifier");
+			status.setText(Messages.ParameterEditorDialog_Name_should_be_Java_identifier);
 			return false;
 		}
 		for (int i = 1; i < name.length(); i++) {
@@ -133,10 +135,10 @@
 			if (Character.isLetterOrDigit(c) || c == '_' || c == '-') {
 				continue;
 			}
-			status.setText("Name should be a Java identifier");
+			status.setText(Messages.ParameterEditorDialog_Name_should_be_Java_identifier);
 			return false;
 		}
-		status.setText("");
+		status.setText(""); //$NON-NLS-1$
 		return true;
 	}
 
diff --git a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/ParametersEditor.java b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/ParametersEditor.java
index fec180f..5d8fb06 100644
--- a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/ParametersEditor.java
+++ b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/ParametersEditor.java
@@ -53,15 +53,15 @@
 
 		TableColumn colVariable = new TableColumn(paramsTable, SWT.NONE);
 		colVariable.setWidth(170);
-		colVariable.setText("Parameter");
+		colVariable.setText(Messages.ParametersEditor_Parameter);
 
 		TableColumn colValue = new TableColumn(paramsTable, SWT.NONE);
 		colValue.setWidth(280);
-		colValue.setText("Value");
+		colValue.setText(Messages.ParametersEditor_Value);
 
 		Button bAdd = new Button(this, SWT.NONE);
 		bAdd.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
-		bAdd.setText("&Add...");
+		bAdd.setText(Messages.ParametersEditor_Add_);
 		bAdd.addSelectionListener(new SelectionAdapter() {
 			@Override
 			public void widgetSelected(SelectionEvent e) {
@@ -75,7 +75,7 @@
 
 		final Button bRemove = new Button(this, SWT.NONE);
 		bRemove.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
-		bRemove.setText("&Remove");
+		bRemove.setText(Messages.ParametersEditor_Remove_);
 		bRemove.setEnabled(false);
 		bRemove.addSelectionListener(new SelectionAdapter() {
 			@Override
@@ -87,7 +87,7 @@
 
 		final Button bEdit = new Button(this, SWT.NONE);
 		bEdit.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, true));
-		bEdit.setText("&Edit...");
+		bEdit.setText(Messages.ParametersEditor_Edit_);
 		bEdit.setEnabled(false);
 		bEdit.addSelectionListener(new SelectionAdapter() {
 			@Override
@@ -137,7 +137,7 @@
 				params.put(key.substring(WebRepositoryConnector.PARAM_PREFIX.length()), value);
 			}
 			for (String var : WebRepositoryConnector.getTemplateVariables(value)) {
-				variables.put(var, "");
+				variables.put(var, ""); //$NON-NLS-1$
 			}
 		}
 
@@ -147,7 +147,7 @@
 
 		for (String var : variables.keySet()) {
 			if (!params.containsKey(var)) {
-				params.put(var, "");
+				params.put(var, ""); //$NON-NLS-1$
 			}
 		}
 
diff --git a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/TasksWebPlugin.java b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/TasksWebPlugin.java
index d42d8b8..38a1dd8 100644
--- a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/TasksWebPlugin.java
+++ b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/TasksWebPlugin.java
@@ -19,7 +19,7 @@
  */
 public class TasksWebPlugin extends AbstractUIPlugin {
 
-	public static final String ID_PLUGIN = "org.eclipse.mylyn.tasks.web";
+	public static final String ID_PLUGIN = "org.eclipse.mylyn.tasks.web"; //$NON-NLS-1$
 
 	private static TasksWebPlugin plugin;
 
diff --git a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/Util.java b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/Util.java
index c60331c..5721dfc 100644
--- a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/Util.java
+++ b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/Util.java
@@ -23,7 +23,7 @@
 	}
 
 	public static String nvl(String value) {
-		return value == null ? "" : value;
+		return value == null ? "" : value; //$NON-NLS-1$
 	}
 
 }
\ No newline at end of file
diff --git a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebContentProposalProvider.java b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebContentProposalProvider.java
index 5a4ee88..142b10e 100644
--- a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebContentProposalProvider.java
+++ b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebContentProposalProvider.java
@@ -47,25 +47,25 @@
 	public IContentProposal[] getProposals(String contents, int position) {
 		ArrayList<IContentProposal> proposals = new ArrayList<IContentProposal>();
 		if (includeTemplates) {
-			addProposal(proposals, "({Id}.+?)");
-			addProposal(proposals, "({Description}.+?)");
-			addProposal(proposals, "({Owner}.+?)");
-			addProposal(proposals, "({Type}.+?)");
-			addProposal(proposals, "({Status}.+?)");
+			addProposal(proposals, "({Id}.+?)"); //$NON-NLS-1$
+			addProposal(proposals, "({Description}.+?)"); //$NON-NLS-1$
+			addProposal(proposals, "({Owner}.+?)"); //$NON-NLS-1$
+			addProposal(proposals, "({Type}.+?)"); //$NON-NLS-1$
+			addProposal(proposals, "({Status}.+?)"); //$NON-NLS-1$
 			// proposals.add("({Due}.+?)");
 			// proposals.add("({Updated}.+?)");
 			// proposals.add("({Created}.+?)");
-			addProposal(proposals, "(.+?)");
-			addProposal(proposals, ".+?");
+			addProposal(proposals, "(.+?)"); //$NON-NLS-1$
+			addProposal(proposals, ".+?"); //$NON-NLS-1$
 		}
-		addProposal(proposals, "${" + WebRepositoryConnector.PARAM_SERVER_URL + "}");
-		addProposal(proposals, "${" + WebRepositoryConnector.PARAM_USER_ID + "}");
-		addProposal(proposals, "${" + WebRepositoryConnector.PARAM_PASSWORD + "}");
-		addProposal(proposals, "${" + WebRepositoryConnector.PARAM_LOGIN_TOKEN + "}");
+		addProposal(proposals, "${" + WebRepositoryConnector.PARAM_SERVER_URL + "}"); //$NON-NLS-1$ //$NON-NLS-2$
+		addProposal(proposals, "${" + WebRepositoryConnector.PARAM_USER_ID + "}"); //$NON-NLS-1$ //$NON-NLS-2$
+		addProposal(proposals, "${" + WebRepositoryConnector.PARAM_PASSWORD + "}");  //$NON-NLS-1$//$NON-NLS-2$
+		addProposal(proposals, "${" + WebRepositoryConnector.PARAM_LOGIN_TOKEN + "}"); //$NON-NLS-1$ //$NON-NLS-2$
 		for (String param : parametersEditor.getParameters().keySet()) {
-			addProposal(proposals, "${" + param.substring(WebRepositoryConnector.PARAM_PREFIX.length()) + "}");
+			addProposal(proposals, "${" + param.substring(WebRepositoryConnector.PARAM_PREFIX.length()) + "}"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
-		addProposal(proposals, "${}");
+		addProposal(proposals, "${}"); //$NON-NLS-1$
 		return proposals.toArray(new IContentProposal[proposals.size()]);
 	}
 
@@ -104,7 +104,7 @@
 
 		KeyStroke keystroke = null;
 		try {
-			keystroke = KeyStroke.getInstance("Ctrl" + KeyStroke.KEY_DELIMITER + "Space");
+			keystroke = KeyStroke.getInstance("Ctrl" + KeyStroke.KEY_DELIMITER + "Space"); //$NON-NLS-1$ //$NON-NLS-2$
 		} catch (ParseException e) {
 		}
 
diff --git a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebImages.java b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebImages.java
index 33dbfd3..b27a105 100644
--- a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebImages.java
+++ b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebImages.java
@@ -25,11 +25,11 @@
 
 	private static ImageRegistry imageRegistry;
 
-	private static final String T_OBJ = "obj16";
+	private static final String T_OBJ = "obj16"; //$NON-NLS-1$
 
-	private static final URL baseURL = TasksWebPlugin.getDefault().getBundle().getEntry("/icons/");
+	private static final URL baseURL = TasksWebPlugin.getDefault().getBundle().getEntry("/icons/"); //$NON-NLS-1$
 
-	public static final ImageDescriptor OVERLAY_TASK_WEB = create(T_OBJ, "overlay-web.gif");
+	public static final ImageDescriptor OVERLAY_TASK_WEB = create(T_OBJ, "overlay-web.gif"); //$NON-NLS-1$
 
 	public static ImageDescriptor create(String prefix, String name) {
 		try {
@@ -64,10 +64,10 @@
 	public static Image getImage(ImageDescriptor imageDescriptor) {
 		ImageRegistry imageRegistry = getImageRegistry();
 
-		Image image = imageRegistry.get("" + imageDescriptor.hashCode());
+		Image image = imageRegistry.get("" + imageDescriptor.hashCode()); //$NON-NLS-1$
 		if (image == null) {
 			image = imageDescriptor.createImage();
-			imageRegistry.put("" + imageDescriptor.hashCode(), image);
+			imageRegistry.put("" + imageDescriptor.hashCode(), image); //$NON-NLS-1$
 		}
 		return image;
 	}
diff --git a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebQueryWizardPage.java b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebQueryWizardPage.java
index 6bb109a..e597144 100644
--- a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebQueryWizardPage.java
+++ b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebQueryWizardPage.java
@@ -92,9 +92,10 @@
 	private Text title;
 
 	public WebQueryWizardPage(TaskRepository repository, IRepositoryQuery query) {
-		super("New web query", repository, query);
-		setTitle("Create web query");
-		setDescription("Specify query parameters for " + repository.getRepositoryUrl());
+		super(Messages.WebQueryWizardPage_New_web_query, repository, query);
+		setTitle(Messages.WebQueryWizardPage_Create_web_query);
+		setDescription(Messages.bind(Messages.WebQueryWizardPage_Specify_query_parameters_for_X,
+				repository.getRepositoryUrl()));
 	}
 
 	@Override
@@ -137,7 +138,7 @@
 		group.setLayoutData(gd);
 
 		Label label = new Label(group, SWT.NONE);
-		label.setText("Query Title:");
+		label.setText(Messages.WebQueryWizardPage_Query_Title_);
 
 		title = new Text(group, SWT.BORDER);
 		title.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
@@ -181,7 +182,7 @@
 		gridData_1.minimumHeight = 150;
 		expComposite.setLayoutData(gridData_1);
 		expComposite.setBackground(parent.getBackground());
-		expComposite.setText("Advanced &Configuration");
+		expComposite.setText(Messages.WebQueryWizardPage_Advanced_Configuration);
 		expComposite.addExpansionListener(new ExpansionAdapter() {
 			@Override
 			public void expansionStateChanged(ExpansionEvent e) {
@@ -194,7 +195,7 @@
 		composite1.setLayout(new GridLayout(3, false));
 		expComposite.setClient(composite1);
 
-		toolkit.createLabel(composite1, "&Query URL:", SWT.NONE);
+		toolkit.createLabel(composite1, Messages.WebQueryWizardPage_Query_URL_, SWT.NONE);
 
 		queryUrlText = new Text(composite1, SWT.BORDER);
 		final GridData gridData_2 = new GridData(SWT.FILL, SWT.CENTER, true, false);
@@ -209,7 +210,7 @@
 
 		Button button = new Button(composite1, SWT.NONE);
 		button.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
-		button.setText("&Open");
+		button.setText(Messages.WebQueryWizardPage_Open);
 		button.addSelectionListener(new SelectionAdapter() {
 			@Override
 			public void widgetSelected(SelectionEvent e) {
@@ -217,7 +218,7 @@
 			}
 		});
 
-		Label queryPatternLabel = toolkit.createLabel(composite1, "Query &Pattern:", SWT.NONE);
+		Label queryPatternLabel = toolkit.createLabel(composite1, Messages.WebQueryWizardPage_Query_Pattern_, SWT.NONE);
 		queryPatternLabel.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false));
 
 		queryPatternText = new Text(composite1, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.WRAP);
@@ -229,7 +230,7 @@
 
 		Button preview = new Button(composite1, SWT.NONE);
 		preview.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
-		preview.setText("Previe&w");
+		preview.setText(Messages.WebQueryWizardPage_Preview);
 		preview.addSelectionListener(new SelectionAdapter() {
 			@Override
 			public void widgetSelected(final SelectionEvent e) {
@@ -250,25 +251,25 @@
 
 		TableColumn colId = new TableColumn(table, SWT.NONE);
 		colId.setWidth(100);
-		colId.setText("Id");
+		colId.setText(Messages.WebQueryWizardPage_Id);
 
 		TableColumn colDescription = new TableColumn(table, SWT.NONE);
 		colDescription.setWidth(200);
-		colDescription.setText("Description");
+		colDescription.setText(Messages.WebQueryWizardPage_Description);
 
 		TableColumn colStatus = new TableColumn(table, SWT.NONE);
-		colStatus.setText("Status");
+		colStatus.setText(Messages.WebQueryWizardPage_Status);
 		colStatus.setWidth(80);
 
 		TableColumn colType = new TableColumn(table, SWT.NONE);
-		colType.setText("Type");
+		colType.setText(Messages.WebQueryWizardPage_Type);
 		colType.setWidth(80);
 
 		TableColumn colOwner = new TableColumn(table, SWT.NONE);
-		colOwner.setText("Owner");
+		colOwner.setText(Messages.WebQueryWizardPage_Owner);
 		colOwner.setWidth(120);
 
-		previewTable.setColumnProperties(new String[] { "Id", "Description", "Status", "Type", "Owner" });
+		previewTable.setColumnProperties(new String[] { "Id", "Description", "Status", "Type", "Owner" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
 		previewTable.setContentProvider(new IStructuredContentProvider() {
 
 			public void dispose() {
@@ -295,7 +296,8 @@
 				case 1:
 					return task.getSummary();
 				case 2:
-					return task.getCompletionDate() != null ? "complete" : "incomplete";
+					return task.getCompletionDate() != null ? Messages.WebQueryWizardPage_complete
+							: Messages.WebQueryWizardPage_incomplete;
 				case 3:
 					return task.getTaskKind();
 				case 4:
@@ -349,17 +351,17 @@
 
 	private static String addVars(LinkedHashMap<String, String> vars, String property) {
 		if (property == null) {
-			return "";
+			return ""; //$NON-NLS-1$
 		}
 		for (String var : WebRepositoryConnector.getTemplateVariables(property)) {
-			vars.put(var, "");
+			vars.put(var, ""); //$NON-NLS-1$
 		}
 		return property;
 	}
 
 	synchronized void updatePreview() {
 		if (updatePreviewJob == null) {
-			updatePreviewJob = new UpdatePreviewJob("Updating preview");
+			updatePreviewJob = new UpdatePreviewJob(Messages.WebQueryWizardPage_Updating_preview);
 			updatePreviewJob.setPriority(Job.DECORATE);
 		}
 		updatePreviewJob.setParams(queryUrlText.getText(), queryPatternText.getText(), parametersEditor.getParameters());
@@ -422,7 +424,7 @@
 		} else {
 			StringBuffer sb = new StringBuffer();
 			for (IStatus status : queryStatus.getChildren()) {
-				sb.append(status.getMessage()).append("\n");
+				sb.append(status.getMessage()).append("\n"); //$NON-NLS-1$
 			}
 			setMessage(sb.toString(), IMessageProvider.WARNING);
 		}
@@ -460,8 +462,8 @@
 					WebRepositoryConnector.PROPERTY_TASK_URL), params, getTaskRepository());
 			active = true;
 			do {
-				final MultiStatus queryStatus = new MultiStatus(TasksWebPlugin.ID_PLUGIN, IStatus.OK, "Query result",
-						null);
+				final MultiStatus queryStatus = new MultiStatus(TasksWebPlugin.ID_PLUGIN, IStatus.OK,
+						Messages.WebQueryWizardPage_Query_result, null);
 				final List<TaskMapper> queryHits = new ArrayList<TaskMapper>();
 				try {
 					if (webPage == null) {
@@ -487,15 +489,15 @@
 						queryStatus.add(status);
 					} else if (queryHits.size() == 0) {
 						queryStatus.add(new Status(IStatus.ERROR, TasksWebPlugin.ID_PLUGIN, 0,
-								"No matching results. Check query regexp", null));
+								Messages.WebQueryWizardPage_No_matching_results_Check_query_regexp, null));
 					}
 
 				} catch (IOException ex) {
 					queryStatus.add(new Status(IStatus.ERROR, TasksWebPlugin.ID_PLUGIN, IStatus.ERROR, //
-							"Unable to fetch resource: " + ex.getMessage(), null));
+							Messages.WebQueryWizardPage_Unable_to_fetch_resource_ + ex.getMessage(), null));
 				} catch (Exception ex) {
 					queryStatus.add(new Status(IStatus.ERROR, TasksWebPlugin.ID_PLUGIN, IStatus.ERROR, //
-							"Parsing error: " + ex.getMessage(), null));
+							Messages.WebQueryWizardPage_Parsing_error_ + ex.getMessage(), null));
 				}
 
 				Display.getDefault().asyncExec(new Runnable() {
diff --git a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebRepositoryConnector.java b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebRepositoryConnector.java
index 7e2130b..16f0b49 100644
--- a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebRepositoryConnector.java
+++ b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebRepositoryConnector.java
@@ -72,49 +72,49 @@
  */
 public class WebRepositoryConnector extends AbstractRepositoryConnector {
 
-	public static final String REPOSITORY_TYPE = "web";
+	public static final String REPOSITORY_TYPE = "web"; //$NON-NLS-1$
 
-	public static final String PROPERTY_TASK_CREATION_URL = "taskCreationUrl";
+	public static final String PROPERTY_TASK_CREATION_URL = "taskCreationUrl"; //$NON-NLS-1$
 
-	public static final String PROPERTY_TASK_URL = "taskUrl";
+	public static final String PROPERTY_TASK_URL = "taskUrl"; //$NON-NLS-1$
 
-	public static final String PROPERTY_QUERY_URL = "queryUrl";
+	public static final String PROPERTY_QUERY_URL = "queryUrl"; //$NON-NLS-1$
 
-	public static final String PROPERTY_QUERY_METHOD = "queryMethod";
+	public static final String PROPERTY_QUERY_METHOD = "queryMethod"; //$NON-NLS-1$
 
-	public static final String PROPERTY_QUERY_REGEXP = "queryPattern";
+	public static final String PROPERTY_QUERY_REGEXP = "queryPattern"; //$NON-NLS-1$
 
-	public static final String PROPERTY_LOGIN_FORM_URL = "loginFormUrl";
+	public static final String PROPERTY_LOGIN_FORM_URL = "loginFormUrl"; //$NON-NLS-1$
 
-	public static final String PROPERTY_LOGIN_TOKEN_REGEXP = "loginTokenPattern";
+	public static final String PROPERTY_LOGIN_TOKEN_REGEXP = "loginTokenPattern"; //$NON-NLS-1$
 
-	public static final String PROPERTY_LOGIN_REQUEST_METHOD = "loginRequestMethod";
+	public static final String PROPERTY_LOGIN_REQUEST_METHOD = "loginRequestMethod"; //$NON-NLS-1$
 
-	public static final String PROPERTY_LOGIN_REQUEST_URL = "loginRequestUrl";
+	public static final String PROPERTY_LOGIN_REQUEST_URL = "loginRequestUrl"; //$NON-NLS-1$
 
-	public static final String PARAM_PREFIX = "param_";
+	public static final String PARAM_PREFIX = "param_"; //$NON-NLS-1$
 
-	public static final String PARAM_SERVER_URL = "serverUrl";
+	public static final String PARAM_SERVER_URL = "serverUrl"; //$NON-NLS-1$
 
-	public static final String PARAM_USER_ID = "userId";
+	public static final String PARAM_USER_ID = "userId"; //$NON-NLS-1$
 
-	public static final String PARAM_PASSWORD = "password";
+	public static final String PARAM_PASSWORD = "password"; //$NON-NLS-1$
 
-	public static final String PARAM_LOGIN_TOKEN = "loginToken";
+	public static final String PARAM_LOGIN_TOKEN = "loginToken"; //$NON-NLS-1$
 
-	public static final String REQUEST_POST = "POST";
+	public static final String REQUEST_POST = "POST"; //$NON-NLS-1$
 
-	public static final String REQUEST_GET = "GET";
+	public static final String REQUEST_GET = "GET"; //$NON-NLS-1$
 
-	private static final String COMPLETED_STATUSES = "completed|fixed|resolved|invalid|verified|deleted|closed|done";
+	private static final String COMPLETED_STATUSES = "completed|fixed|resolved|invalid|verified|deleted|closed|done"; //$NON-NLS-1$
 
-	public static final String KEY_TASK_PREFIX = "taskPrefix";
+	public static final String KEY_TASK_PREFIX = "taskPrefix"; //$NON-NLS-1$
 
-	public static final String KEY_QUERY_TEMPLATE = "UrlTemplate";
+	public static final String KEY_QUERY_TEMPLATE = "UrlTemplate"; //$NON-NLS-1$
 
-	public static final String KEY_QUERY_PATTERN = "Regexp";
+	public static final String KEY_QUERY_PATTERN = "Regexp"; //$NON-NLS-1$
 
-	private static final String USER_AGENT = "WebTemplatesConnector";
+	private static final String USER_AGENT = "WebTemplatesConnector"; //$NON-NLS-1$
 
 	private final static Date DEFAULT_DATE = new Date(0);
 
@@ -125,7 +125,7 @@
 
 	@Override
 	public String getLabel() {
-		return "Web Template (Advanced)";
+		return Messages.WebRepositoryConnector_Web_Template_Advanced_;
 	}
 
 	@Override
@@ -203,7 +203,7 @@
 		IRepositoryManager repositoryManager = TasksUi.getRepositoryManager();
 		for (TaskRepository repository : repositoryManager.getRepositories(getConnectorKind())) {
 			String taskUrl = evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository);
-			if (taskUrl != null && !taskUrl.equals("") && url.startsWith(taskUrl)) {
+			if (taskUrl != null && !taskUrl.equals("") && url.startsWith(taskUrl)) { //$NON-NLS-1$
 				return repository.getRepositoryUrl();
 			}
 		}
@@ -215,7 +215,7 @@
 			if (repository != null) {
 				String queryUrl = evaluateParams(query.getAttribute(KEY_TASK_PREFIX), //
 						getQueryParams(query), repository);
-				if (queryUrl != null && !queryUrl.equals("") && url.startsWith(queryUrl)) {
+				if (queryUrl != null && !queryUrl.equals("") && url.startsWith(queryUrl)) { //$NON-NLS-1$
 					return query.getRepositoryUrl();
 				}
 			}
@@ -280,7 +280,7 @@
 		} catch (IOException e) {
 			String msg = e.getMessage() == null ? e.toString() : e.getMessage();
 			return new Status(IStatus.ERROR, TasksWebPlugin.ID_PLUGIN, IStatus.ERROR, //
-					"Could not fetch resource: " + queryUrl + "\n" + msg, e);
+					Messages.WebRepositoryConnector_Could_not_fetch_resource + queryUrl + "\n" + msg, e); //$NON-NLS-1$ 
 		}
 	}
 
@@ -351,16 +351,16 @@
 						resultCollector.accept(data);
 					}
 				} else {
-					String id = p.group("Id", matcher);
-					String description = p.group("Description", matcher);
+					String id = p.group("Id", matcher); //$NON-NLS-1$
+					String description = p.group("Description", matcher); //$NON-NLS-1$
 					if (id == null || description == null) {
 						isCorrect = false;
 					}
 					if (id != null) {
 						description = unescapeHtml(description);
 
-						String owner = unescapeHtml(cleanup(p.group("Owner", matcher), repository));
-						String type = unescapeHtml(cleanup(p.group("Type", matcher), repository));
+						String owner = unescapeHtml(cleanup(p.group("Owner", matcher), repository)); //$NON-NLS-1$
+						String type = unescapeHtml(cleanup(p.group("Type", matcher), repository)); //$NON-NLS-1$
 
 						TaskData data = createTaskData(repository, id);
 						TaskMapper mapper = new TaskMapper(data, true);
@@ -371,7 +371,7 @@
 						mapper.setOwner(owner);
 						mapper.setTaskKind(type);
 
-						String status = p.group("Status", matcher);
+						String status = p.group("Status", matcher); //$NON-NLS-1$
 						if (status != null) {
 							if (COMPLETED_STATUSES.contains(status.toLowerCase())) {
 								// TODO set actual completion date here
@@ -388,7 +388,7 @@
 				return Status.OK_STATUS;
 			} else {
 				return new Status(IStatus.ERROR, TasksWebPlugin.ID_PLUGIN, IStatus.ERROR,
-						"Require two matching groups (taskId and summary). Check query regexp", null);
+						Messages.WebRepositoryConnector_Require_two_matching_groups, null);
 			}
 		}
 	}
@@ -402,7 +402,7 @@
 
 	private static String unescapeHtml(String text) {
 		if (text == null) {
-			return "";
+			return ""; //$NON-NLS-1$
 		}
 		return StringEscapeUtils.unescapeHtml(text);
 	}
@@ -419,15 +419,15 @@
 		// // ignore
 		// }
 
-		text = text.replaceAll("<!--.+?-->", "");
+		text = text.replaceAll("<!--.+?-->", ""); //$NON-NLS-1$ //$NON-NLS-2$
 
-		String[] tokens = text.split(" |\\t|\\n|\\r");
+		String[] tokens = text.split(" |\\t|\\n|\\r"); //$NON-NLS-1$
 		StringBuilder sb = new StringBuilder();
-		String sep = "";
+		String sep = ""; //$NON-NLS-1$
 		for (String token : tokens) {
 			if (token.length() > 0) {
 				sb.append(sep).append(token);
-				sep = " ";
+				sep = " "; //$NON-NLS-1$
 			}
 		}
 
@@ -440,7 +440,7 @@
 		try {
 			SyndFeed feed = input.build(new XmlReader(new ByteArrayInputStream(content.getBytes())));
 
-			SimpleDateFormat df = new SimpleDateFormat("yy-MM-dd HH:mm");
+			SimpleDateFormat df = new SimpleDateFormat("yy-MM-dd HH:mm"); //$NON-NLS-1$
 
 			Iterator<?> it;
 			for (it = feed.getEntries().iterator(); it.hasNext();) {
@@ -448,7 +448,7 @@
 
 				String author = entry.getAuthor();
 				if (author == null) {
-					DCModule module = (DCModule) entry.getModule("http://purl.org/dc/elements/1.1/");
+					DCModule module = (DCModule) entry.getModule("http://purl.org/dc/elements/1.1/"); //$NON-NLS-1$
 					author = module.getCreator();
 				}
 
@@ -457,7 +457,7 @@
 					date = entry.getPublishedDate();
 				}
 				if (date == null) {
-					DCModule module = (DCModule) entry.getModule("http://purl.org/dc/elements/1.1/");
+					DCModule module = (DCModule) entry.getModule("http://purl.org/dc/elements/1.1/"); //$NON-NLS-1$
 					date = module.getDate();
 				}
 
@@ -468,9 +468,9 @@
 
 				String entrTitle = entry.getTitle();
 
-				TaskData data = createTaskData(repository, entryUri.replaceAll("-", "%2D"));
+				TaskData data = createTaskData(repository, entryUri.replaceAll("-", "%2D")); //$NON-NLS-1$ //$NON-NLS-2$
 				TaskMapper schema = new TaskMapper(data, true);
-				schema.setSummary(((date == null ? "" : df.format(date) + " - ") + entrTitle));
+				schema.setSummary(((date == null ? "" : df.format(date) + " - ") + entrTitle)); //$NON-NLS-1$ //$NON-NLS-2$
 				schema.setCreationDate(date);
 				schema.setOwner(author);
 				schema.setTaskUrl(entryUri);
@@ -480,7 +480,7 @@
 		} catch (Exception e) {
 			String msg = e.getMessage() == null ? e.toString() : e.getMessage();
 			return new Status(IStatus.ERROR, TasksWebPlugin.ID_PLUGIN, IStatus.ERROR, //
-					"Failed to parse RSS feed: \"" + msg + "\"", e);
+					Messages.WebRepositoryConnector_Failed_to_parse_RSS_feed + "\"" + msg + "\"", e); //$NON-NLS-1$ //$NON-NLS-2$ 
 		}
 	}
 
@@ -542,11 +542,11 @@
 		PostMethod postMethod = new PostMethod(requestUrl.substring(0, n));
 		// TODO this does not take into account escaped values
 		n = requestTemplate.indexOf('?');
-		String[] requestParams = requestTemplate.substring(n + 1).split("&");
+		String[] requestParams = requestTemplate.substring(n + 1).split("&"); //$NON-NLS-1$
 		for (String requestParam : requestParams) {
-			String[] nv = requestParam.split("=");
+			String[] nv = requestParam.split("="); //$NON-NLS-1$
 			if (nv.length == 1) {
-				postMethod.addParameter(nv[0], "");
+				postMethod.addParameter(nv[0], ""); //$NON-NLS-1$
 			} else {
 				String value = evaluateParams(nv[1], getParams(repository, params), false);
 				postMethod.addParameter(nv[0], value);
@@ -589,19 +589,19 @@
 	}
 
 	private static String getRefreshUrl(String url, HttpMethod method) {
-		Header refreshHeader = method.getResponseHeader("Refresh");
+		Header refreshHeader = method.getResponseHeader("Refresh"); //$NON-NLS-1$
 		if (refreshHeader == null) {
 			return null;
 		}
 		String value = refreshHeader.getValue();
-		int n = value.indexOf(";url=");
+		int n = value.indexOf(";url="); //$NON-NLS-1$
 		if (n == -1) {
 			return null;
 		}
 		value = value.substring(n + 5);
 		int requestPath;
 		if (value.charAt(0) == '/') {
-			int colonSlashSlash = url.indexOf("://");
+			int colonSlashSlash = url.indexOf("://"); //$NON-NLS-1$
 			requestPath = url.indexOf('/', colonSlashSlash + 3);
 		} else {
 			requestPath = url.lastIndexOf('/');
@@ -609,7 +609,7 @@
 
 		String refreshUrl;
 		if (requestPath == -1) {
-			refreshUrl = url + "/" + value;
+			refreshUrl = url + "/" + value; //$NON-NLS-1$
 		} else {
 			refreshUrl = url.substring(0, requestPath + 1) + value;
 		}
@@ -625,16 +625,16 @@
 	}
 
 	private static String evaluateParams(String value, Map<String, String> params, boolean encode) {
-		if (value == null || value.indexOf("${") == -1) {
+		if (value == null || value.indexOf("${") == -1) { //$NON-NLS-1$
 			return value;
 		}
 
 		int n = 0;
-		int n1 = value.indexOf("${");
+		int n1 = value.indexOf("${"); //$NON-NLS-1$
 		StringBuilder evaluatedValue = new StringBuilder(value.length());
 		while (n1 > -1) {
 			evaluatedValue.append(value.substring(n, n1));
-			int n2 = value.indexOf("}", n1);
+			int n2 = value.indexOf("}", n1); //$NON-NLS-1$
 			if (n2 > -1) {
 				String key = value.substring(n1 + 2, n2);
 				if (PARAM_SERVER_URL.equals(key) || PARAM_USER_ID.equals(key) || PARAM_PASSWORD.equals(key)) {
@@ -645,7 +645,7 @@
 				}
 			}
 			n = n2 + 1;
-			n1 = value.indexOf("${", n2);
+			n1 = value.indexOf("${", n2); //$NON-NLS-1$
 		}
 		if (n > -1) {
 			evaluatedValue.append(value.substring(n));
@@ -681,7 +681,7 @@
 		}
 
 		List<String> vars = new ArrayList<String>();
-		Matcher m = Pattern.compile("\\$\\{(.+?)\\}").matcher(value);
+		Matcher m = Pattern.compile("\\$\\{(.+?)\\}").matcher(value); //$NON-NLS-1$
 		while (m.find()) {
 			vars.add(m.group(1));
 		}
diff --git a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebRepositorySettingsPage.java b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebRepositorySettingsPage.java
index 539a01f..7e3c766 100644
--- a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebRepositorySettingsPage.java
+++ b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebRepositorySettingsPage.java
@@ -49,10 +49,9 @@
  */
 public class WebRepositorySettingsPage extends AbstractRepositorySettingsPage implements IPropertyChangeListener {
 
-	private static final String TITLE = "Web Repository Settings";
+	private static final String TITLE = Messages.WebRepositorySettingsPage_Web_Repository_Settings;
 
-	private static final String DESCRIPTION = "Select a server template example and modify to match the settings for "
-			+ "your project, \nusually found in the query URL.  For more connectors see http://eclipse.org/mylyn";
+	private static final String DESCRIPTION = Messages.WebRepositorySettingsPage_Select_server_template_example_and_modify_to_match_settings_for_your_project;
 
 	private ParametersEditor parametersEditor;
 
@@ -204,7 +203,7 @@
 		expComposite.setLayoutData(gridData_2);
 		expComposite.setFont(composite.getFont());
 		expComposite.setBackground(composite.getBackground());
-		expComposite.setText("Advanced &Configuration");
+		expComposite.setText(Messages.WebRepositorySettingsPage_Advanced_Configuration);
 		expComposite.addExpansionListener(new ExpansionAdapter() {
 			@Override
 			public void expansionStateChanged(ExpansionEvent e) {
@@ -220,14 +219,14 @@
 		composite2.setLayout(gridLayout2);
 		expComposite.setClient(composite2);
 
-		Label taskUrlLabel = toolkit.createLabel(composite2, "&Task URL:", SWT.NONE);
+		Label taskUrlLabel = toolkit.createLabel(composite2, Messages.WebRepositorySettingsPage_Task_URL_, SWT.NONE);
 		taskUrlLabel.setLayoutData(new GridData());
 
 		taskUrlText = new Text(composite2, SWT.BORDER);
 		taskUrlText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
 		decorations.add(WebContentProposalProvider.createDecoration(taskUrlText, parametersEditor, false));
 
-		Label newTaskLabel = toolkit.createLabel(composite2, "&New Task URL:", SWT.NONE);
+		Label newTaskLabel = toolkit.createLabel(composite2, Messages.WebRepositorySettingsPage_New_Task_URL_, SWT.NONE);
 		newTaskLabel.setLayoutData(new GridData());
 
 		newTaskText = new Text(composite2, SWT.BORDER);
@@ -241,7 +240,8 @@
 		separatorLabel2.setLayoutData(gridData_4);
 		toolkit.adapt(separatorLabel2, true, true);
 
-		Label queryUrlLabel = toolkit.createLabel(composite2, "&Query Request URL:", SWT.NONE);
+		Label queryUrlLabel = toolkit.createLabel(composite2, Messages.WebRepositorySettingsPage_Query_Request_URL_,
+				SWT.NONE);
 		queryUrlLabel.setLayoutData(new GridData());
 
 		queryUrlText = new Text(composite2, SWT.BORDER);
@@ -250,14 +250,15 @@
 
 		queryRequestMethod = new ComboViewer(composite2, SWT.BORDER | SWT.READ_ONLY);
 		queryRequestMethod.setContentProvider(new MethodTypeContentProvider());
-		queryRequestMethod.setInput("");
+		queryRequestMethod.setInput(""); //$NON-NLS-1$
 		{
 			Combo combo = queryRequestMethod.getCombo();
 			toolkit.adapt(combo, true, true);
 			combo.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
 		}
 
-		Label queryPatternLabel = toolkit.createLabel(composite2, "Query &Pattern:", SWT.NONE);
+		Label queryPatternLabel = toolkit.createLabel(composite2, Messages.WebRepositorySettingsPage_Query_Pattern_,
+				SWT.NONE);
 		queryPatternLabel.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, true));
 
 		queryPatternText = new Text(composite2, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.WRAP);
@@ -277,7 +278,7 @@
 		final Label loginrequestUrlLabel = new Label(composite2, SWT.NONE);
 		loginrequestUrlLabel.setLayoutData(new GridData());
 		toolkit.adapt(loginrequestUrlLabel, true, true);
-		loginrequestUrlLabel.setText("Login &Request URL:");
+		loginrequestUrlLabel.setText(Messages.WebRepositorySettingsPage_Login_Request_URL_);
 
 		loginRequestUrlText = new Text(composite2, SWT.BORDER);
 		toolkit.adapt(loginRequestUrlText, true, true);
@@ -286,21 +287,23 @@
 
 		loginRequestMethod = new ComboViewer(composite2, SWT.BORDER | SWT.READ_ONLY);
 		loginRequestMethod.setContentProvider(new MethodTypeContentProvider());
-		loginRequestMethod.setInput("");
+		loginRequestMethod.setInput(""); //$NON-NLS-1$
 		{
 			Combo combo = loginRequestMethod.getCombo();
 			toolkit.adapt(combo, true, true);
 			combo.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
 		}
 
-		Label loginPageLabel = toolkit.createLabel(composite2, "Login &Form URL:", SWT.NONE);
+		Label loginPageLabel = toolkit.createLabel(composite2, Messages.WebRepositorySettingsPage_Login_Form_URL_,
+				SWT.NONE);
 		loginPageLabel.setLayoutData(new GridData());
 
 		loginFormUrlText = new Text(composite2, SWT.BORDER);
 		loginFormUrlText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1));
 		decorations.add(WebContentProposalProvider.createDecoration(loginFormUrlText, parametersEditor, false));
 
-		Label loginTokenLabel = toolkit.createLabel(composite2, "Login T&oken Pattern:", SWT.NONE);
+		Label loginTokenLabel = toolkit.createLabel(composite2, Messages.WebRepositorySettingsPage_Login_Token_Pattern,
+				SWT.NONE);
 		loginTokenLabel.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, true));
 
 		loginTokenPatternText = new Text(composite2, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.WRAP);
diff --git a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebTaskEditorPageFactory.java b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebTaskEditorPageFactory.java
index 8aa0caf..45f7613 100644
--- a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebTaskEditorPageFactory.java
+++ b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebTaskEditorPageFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 Tasktop Technologies and others.
+* Copyright (c) 2004, 2008 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,7 +25,7 @@
  */
 public class WebTaskEditorPageFactory extends AbstractTaskEditorPageFactory {
 
-	private static final String TITLE = "Browser";
+	private static final String TITLE = Messages.WebTaskEditorPageFactory_Browser;
 
 	@Override
 	public boolean canCreatePageFor(TaskEditorInput input) {
diff --git a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebTaskListMigrator.java b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebTaskListMigrator.java
index 7ac4ad6..28d6d3d 100644
--- a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebTaskListMigrator.java
+++ b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebTaskListMigrator.java
@@ -30,17 +30,17 @@
  */
 public class WebTaskListMigrator extends AbstractTaskListMigrator {
 
-	private static final String KEY_WEB = "Web";
+	private static final String KEY_WEB = "Web"; //$NON-NLS-1$
 
 	private static final String KEY_WEB_QUERY = KEY_WEB + KEY_QUERY;
 
-	private static final String KEY_WEB_ISSUE = "WebIssue";
+	private static final String KEY_WEB_ISSUE = "WebIssue"; //$NON-NLS-1$
 
-	private static final String KEY_URL_TEMPLATE = "UrlTemplate";
+	private static final String KEY_URL_TEMPLATE = "UrlTemplate"; //$NON-NLS-1$
 
-	private static final String KEY_REGEXP = "Regexp";
+	private static final String KEY_REGEXP = "Regexp"; //$NON-NLS-1$
 
-	private static final String KEY_PREFIX = "TaskPrefix";
+	private static final String KEY_PREFIX = "TaskPrefix"; //$NON-NLS-1$
 
 	@Override
 	public String getConnectorKind() {
@@ -62,7 +62,7 @@
 		if (element.hasAttribute(KEY_PREFIX)) {
 			task.setAttribute(WebRepositoryConnector.KEY_TASK_PREFIX, element.getAttribute(KEY_PREFIX));
 		} else {
-			task.setTaskKind("RSS");
+			task.setTaskKind("RSS"); //$NON-NLS-1$
 			task.setTaskKey(null);
 		}
 	}
diff --git a/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/messages.properties b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/messages.properties
new file mode 100644
index 0000000..7f28cbc
--- /dev/null
+++ b/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/messages.properties
@@ -0,0 +1,47 @@
+ParameterEditorDialog_New_Property=New Property
+ParameterEditorDialog_Edit_Property=Edit Property
+ParameterEditorDialog_Name_=&Name:
+ParameterEditorDialog_Value_=&Value:
+ParameterEditorDialog_Name_should_be_Java_identifier=Name should be a Java identifier
+ParametersEditor_Parameter=Parameter
+ParametersEditor_Value=Value
+ParametersEditor_Add_=&Add...
+ParametersEditor_Remove_=&Remove
+ParametersEditor_Edit_=&Edit...
+WebQueryWizardPage_Advanced_Configuration=Advanced &Configuration
+WebQueryWizardPage_complete=complete
+WebQueryWizardPage_Create_web_query=Create web query
+WebQueryWizardPage_Description=Description
+WebQueryWizardPage_Id=Id
+WebQueryWizardPage_incomplete=incomplete
+WebQueryWizardPage_New_web_query=New web query
+WebQueryWizardPage_No_matching_results_Check_query_regexp=No matching results. Check query regexp
+WebQueryWizardPage_Open=&Open
+WebQueryWizardPage_Opening_Browser=Opening Browser
+WebQueryWizardPage_Owner=Owner
+WebQueryWizardPage_Parsing_error_=Parsing error: 
+WebQueryWizardPage_Preview=Previe&w
+WebQueryWizardPage_Query_Pattern_=Query &Pattern:
+WebQueryWizardPage_Query_result=Query result
+WebQueryWizardPage_Query_Title_=Query Title:
+WebQueryWizardPage_Query_URL_=&Query URL:
+WebQueryWizardPage_Specify_query_parameters_for_X=Specify query parameters for {0}
+WebQueryWizardPage_Status=Status
+WebQueryWizardPage_Type=Type
+WebQueryWizardPage_Unable_to_fetch_resource_=Unable to fetch resource: 
+WebQueryWizardPage_Updating_preview=Updating preview
+WebRepositoryConnector_Require_two_matching_groups=Require two matching groups (taskId and summary). Check query regexp
+WebRepositoryConnector_Web_Template_Advanced_=Web Template (Advanced)
+WebRepositoryConnector_Failed_to_parse_RSS_feed=Failed to parse RSS feed: 
+WebRepositoryConnector_Could_not_fetch_resource=Could not fetch resource: 
+WebRepositorySettingsPage_Web_Repository_Settings=Web Repository Settings
+WebRepositorySettingsPage_Select_server_template_example_and_modify_to_match_settings_for_your_project=Select a server template example and modify to match the settings for your project, \nusually found in the query URL.  For more connectors see http://eclipse.org/mylyn
+WebRepositorySettingsPage_Login_Form_URL_=Login &Form URL:
+WebRepositorySettingsPage_Login_Token_Pattern=Login T&oken Pattern:
+WebRepositorySettingsPage_Advanced_Configuration=Advanced &Configuration
+WebRepositorySettingsPage_Task_URL_=&Task URL:
+WebRepositorySettingsPage_New_Task_URL_=&New Task URL:
+WebRepositorySettingsPage_Query_Request_URL_=&Query Request URL:
+WebRepositorySettingsPage_Query_Pattern_=Query &Pattern:
+WebRepositorySettingsPage_Login_Request_URL_=Login &Request URL:
+WebTaskEditorPageFactory_Browser=Browser
