diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/RepositorySettingsPageTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/RepositorySettingsPageTest.java
index 3486e53..cfef428 100644
--- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/RepositorySettingsPageTest.java
+++ b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/RepositorySettingsPageTest.java
@@ -11,23 +11,19 @@
 
 package org.eclipse.mylyn.tasks.tests;
 
-import junit.framework.TestCase;
-
-import org.eclipse.jface.preference.StringFieldEditor;
 import org.eclipse.mylyn.commons.net.AuthenticationType;
 import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
-import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
 import org.eclipse.mylyn.tasks.core.TaskRepository;
 import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryConnector;
 import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryConnectorUi;
-import org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage;
+import org.eclipse.mylyn.tasks.tests.connector.MockRepositorySettingsPage;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.PlatformUI;
 
+import junit.framework.TestCase;
+
 /**
  * @author Steffen Pingel
  */
@@ -269,66 +265,4 @@
 
 	}
 
-	private class MockRepositorySettingsPage extends AbstractRepositorySettingsPage {
-
-		public MockRepositorySettingsPage(TaskRepository taskRepository) {
-			super("title", "summary", taskRepository);
-		}
-
-		public MockRepositorySettingsPage(TaskRepository taskRepository, AbstractRepositoryConnector connector) {
-			super("title", "summary", taskRepository, connector);
-		}
-
-		@Override
-		protected void createAdditionalControls(Composite parent) {
-			// ignore
-		}
-
-		@Override
-		protected boolean isValidUrl(String url) {
-			return super.isValidUrl(url);
-		}
-
-		@Override
-		protected void validateSettings() {
-			// ignore
-		}
-
-		Button getAnonymousButton() {
-			return anonymousButton;
-		}
-
-		StringFieldEditor getUserNameEditor() {
-			return repositoryUserNameEditor;
-		}
-
-		StringFieldEditor getPasswordEditor() {
-			return repositoryPasswordEditor;
-		}
-
-		Composite getParent() {
-			return compositeContainer;
-		}
-
-		@Override
-		protected Validator getValidator(TaskRepository repository) {
-			// ignore
-			return null;
-		}
-
-		@Override
-		public String getConnectorKind() {
-			return MockRepositoryConnector.CONNECTOR_KIND;
-		}
-
-		public StringFieldEditor getRepositoryUserNameEditor() {
-			return repositoryUserNameEditor;
-		}
-
-		public StringFieldEditor getRepositoryPasswordEditor() {
-			return repositoryPasswordEditor;
-		}
-
-	}
-
 }
diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryConnectorUi.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryConnectorUi.java
index ffedf9b..d6fc3af 100644
--- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryConnectorUi.java
+++ b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryConnectorUi.java
@@ -41,8 +41,7 @@
 
 	@Override
 	public ITaskRepositoryPage getSettingsPage(TaskRepository taskRepository) {
-		// ignore
-		return null;
+		return new MockRepositorySettingsPage(taskRepository);
 	}
 
 	@Override
@@ -68,7 +67,8 @@
 		List<IHyperlink> links = new ArrayList<IHyperlink>();
 		Matcher m = HYPERLINK_PATTERN.matcher(text);
 		while (m.find()) {
-			links.add(new TaskHyperlink(new Region(textOffset + m.start(), m.end() - m.start()), repository, m.group()));
+			links.add(
+					new TaskHyperlink(new Region(textOffset + m.start(), m.end() - m.start()), repository, m.group()));
 		}
 		return links.toArray(new IHyperlink[0]);
 	}
diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositorySettingsPage.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositorySettingsPage.java
new file mode 100644
index 0000000..618558d
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositorySettingsPage.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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.tasks.tests.connector;
+
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+
+public class MockRepositorySettingsPage extends AbstractRepositorySettingsPage {
+
+	private String brand;
+
+	public MockRepositorySettingsPage(TaskRepository taskRepository) {
+		super("title", "summary", taskRepository);
+	}
+
+	public MockRepositorySettingsPage(TaskRepository taskRepository, AbstractRepositoryConnector connector) {
+		super("title", "summary", taskRepository, connector);
+	}
+
+	@Override
+	protected void createAdditionalControls(Composite parent) {
+		// ignore
+	}
+
+	@Override
+	public boolean isValidUrl(String url) {
+		return super.isValidUrl(url);
+	}
+
+	@Override
+	protected void validateSettings() {
+		// ignore
+	}
+
+	public Button getAnonymousButton() {
+		return anonymousButton;
+	}
+
+	public StringFieldEditor getUserNameEditor() {
+		return repositoryUserNameEditor;
+	}
+
+	public StringFieldEditor getPasswordEditor() {
+		return repositoryPasswordEditor;
+	}
+
+	public Composite getParent() {
+		return compositeContainer;
+	}
+
+	@Override
+	protected Validator getValidator(TaskRepository repository) {
+		// ignore
+		return null;
+	}
+
+	@Override
+	public String getConnectorKind() {
+		return MockRepositoryConnector.CONNECTOR_KIND;
+	}
+
+	public StringFieldEditor getRepositoryUserNameEditor() {
+		return repositoryUserNameEditor;
+	}
+
+	public StringFieldEditor getRepositoryPasswordEditor() {
+		return repositoryPasswordEditor;
+	}
+
+	@Override
+	public void setBrand(String brand) {
+		super.setBrand(brand);
+		this.brand = brand;
+	}
+
+	public String getBrand() {
+		return brand;
+	}
+
+}
diff --git a/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryWizardTest.java b/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryWizardTest.java
index 23ea56b..2629a16 100644
--- a/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryWizardTest.java
+++ b/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryWizardTest.java
@@ -14,28 +14,71 @@
 import static org.eclipse.mylyn.internal.tasks.ui.wizards.Messages.SelectRepositoryConnectorPage_Select_a_task_repository_type;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
 
 import org.eclipse.mylyn.internal.tasks.ui.ConnectorBrand;
 import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryConnector;
+import org.eclipse.mylyn.tasks.tests.connector.MockRepositorySettingsPage;
+import org.junit.Before;
 import org.junit.Test;
 
 public class NewRepositoryWizardTest {
 
+	private NewRepositoryWizard wizard;
+
+	@Before
+	public void setUp() {
+		wizard = new NewRepositoryWizard();
+		wizard.addPages();
+	}
+
 	@Test
 	public void testGetNextPageIWizardPage() {
-		NewRepositoryWizard wizard = new NewRepositoryWizard(null);
-		wizard.addPages();
-		SelectRepositoryConnectorPage page = (SelectRepositoryConnectorPage) wizard.getPage(SelectRepositoryConnectorPage_Select_a_task_repository_type);
+		SelectRepositoryConnectorPage page = (SelectRepositoryConnectorPage) wizard
+				.getPage(SelectRepositoryConnectorPage_Select_a_task_repository_type);
 		page.setConnectorBrand(new ConnectorBrand(new MockRepositoryConnector(), "org.mylyn"));
 
 		wizard.getNextPage(null);
 		assertNull(wizard.getBrand());
-		try {
-			wizard.getNextPage(page);
-		} catch (RuntimeException e) {
-			assertTrue(e.getMessage().startsWith("The connector implementation is incomplete"));
-		}
+		wizard.getNextPage(page);
 		assertEquals("org.mylyn", wizard.getBrand());
 	}
+
+	@Test
+	public void testSetsBrandOnSettingsPage() {
+		MockRepositorySettingsPage settingsPage = navigateWithBrands("org.mylyn");
+		assertEquals("org.mylyn", settingsPage.getBrand());
+	}
+
+	public void testSetsBrandOnSettingsPageNoBrand() {
+		MockRepositorySettingsPage settingsPage = navigateWithBrands((String) null);
+		assertEquals("", settingsPage.getBrand());
+	}
+
+	@Test
+	public void testSetsBrandOnSettingsPageBrandChangeToNull() {
+		MockRepositorySettingsPage settingsPage = navigateWithBrands("org.mylyn", null);
+		assertEquals("", settingsPage.getBrand());
+	}
+
+	@Test
+	public void testSetsBrandOnSettingsPageBrandChangeFromNull() {
+		MockRepositorySettingsPage settingsPage = navigateWithBrands(null, "org.mylyn");
+		assertEquals("org.mylyn", settingsPage.getBrand());
+	}
+
+	@Test
+	public void testSetsBrandOnSettingsPageBrandChange() {
+		MockRepositorySettingsPage settingsPage = navigateWithBrands("org.eclipse", "org.mylyn");
+		assertEquals("org.mylyn", settingsPage.getBrand());
+	}
+
+	private MockRepositorySettingsPage navigateWithBrands(String... brands) {
+		SelectRepositoryConnectorPage selectionPage = (SelectRepositoryConnectorPage) wizard
+				.getPage(SelectRepositoryConnectorPage_Select_a_task_repository_type);
+		for (String brand : brands) {
+			selectionPage.setConnectorBrand(new ConnectorBrand(new MockRepositoryConnector(), brand));
+			wizard.getNextPage(selectionPage);
+		}
+		return (MockRepositorySettingsPage) wizard.getNextPage(selectionPage);
+	}
 }
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryWizard.java
index c8b43b6..ff541ed 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryWizard.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryWizard.java
@@ -36,6 +36,8 @@
 import org.eclipse.ui.INewWizard;
 import org.eclipse.ui.IWorkbench;
 
+import com.google.common.base.Strings;
+
 /**
  * @author Mik Kersten
  * @author Steffen Pingel
@@ -149,8 +151,8 @@
 			settingsPage.setWizard(this);
 			lastConnectorKind = connector.getConnectorKind();
 		}
-		if (settingsPage instanceof AbstractRepositorySettingsPage && brand != null) {
-			((AbstractRepositorySettingsPage) settingsPage).setBrand(brand);
+		if (settingsPage instanceof AbstractRepositorySettingsPage) {
+			((AbstractRepositorySettingsPage) settingsPage).setBrand(Strings.nullToEmpty(brand));
 		}
 	}
 
