diff --git a/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/IDestinationsManager.java b/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/IDestinationsManager.java
new file mode 100644
index 0000000..81f9c48
--- /dev/null
+++ b/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/IDestinationsManager.java
@@ -0,0 +1,15 @@
+package org.eclipse.platform.discovery.core.internal;
+
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.swt.widgets.Shell;
+
+public interface IDestinationsManager {
+	/**
+	 * Opens a preference dialog to manage destinations. It contains all registered preference pages, and a preference page pre-selected based on the
+	 * current destination category selected.<br>
+	 * This method can block and must be called in the UI thread.
+	 * @param selectedDestCategory can be null
+	 * @param searchConfig
+	 */
+	public void manageDestinations(Shell parentShell, IDestinationCategoryDescription selectedDestCategory);
+}
diff --git a/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/ISearchConsoleView.java b/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/ISearchConsoleView.java
index 08d9e45..31efa14 100644
--- a/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/ISearchConsoleView.java
+++ b/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/ISearchConsoleView.java
@@ -26,5 +26,7 @@
 	 * Sets the default session ID
 	 * @param sessionId
 	 */
-	public void setDefaultSessionId(final String sessionId);
+	public void setDefaultSessionId(final String sessionId);
+	
+	public void setDestinationsManager(final IDestinationsManager destManager);
 }
diff --git a/bundles/org.eclipse.platform.discovery.destprefs/META-INF/MANIFEST.MF b/bundles/org.eclipse.platform.discovery.destprefs/META-INF/MANIFEST.MF
index 942c52b..c2ed4eb 100644
--- a/bundles/org.eclipse.platform.discovery.destprefs/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.platform.discovery.destprefs/META-INF/MANIFEST.MF
@@ -16,4 +16,6 @@
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
  org.eclipse.platform.discovery.runtime,
- org.eclipse.platform.discovery.util
+ org.eclipse.platform.discovery.util,
+ org.eclipse.platform.discovery.core
+
diff --git a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/DestinationsManager.java b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/DestinationsManager.java
new file mode 100644
index 0000000..5fa51a1
--- /dev/null
+++ b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/DestinationsManager.java
@@ -0,0 +1,79 @@
+package org.eclipse.platform.discovery.destprefs.internal;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.platform.discovery.core.internal.IDestinationsManager;
+import org.eclipse.platform.discovery.destprefs.internal.xpparser.ISearchDestinationsConfiguratorDescription;
+import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.xp.impl.AbstractExtensionPointParser;
+import org.eclipse.swt.widgets.Shell;
+
+public class DestinationsManager implements IDestinationsManager {
+
+	public static final String GENERIC_PREFPAGE_ID = "org.eclipse.platform.discovery.destprefs.preferencepage"; //$NON-NLS-1$
+
+	private final AbstractExtensionPointParser<ISearchDestinationsConfiguratorDescription> destConfigurator;
+	private final ISearchProviderConfiguration searchConfig;
+	private final IPreferenceDialogCreator dialogCreator;
+
+	public DestinationsManager(AbstractExtensionPointParser<ISearchDestinationsConfiguratorDescription> destConfigurator, IPreferenceDialogCreator dialogCreator,
+			ISearchProviderConfiguration searchConfig) {
+		this.destConfigurator = destConfigurator;
+		this.dialogCreator = dialogCreator;
+		this.searchConfig = searchConfig;
+	}
+
+	@Override
+	public void manageDestinations(Shell parentShell, IDestinationCategoryDescription selectedDestCategory) {
+
+		final List<String> prefPageIDs = allPreferencePages();
+		dialogCreator.openPreferenceDialog(parentShell, getPrefPageIdToPreselect(selectedDestCategory), prefPageIDs.toArray(new String[prefPageIDs.size()]));
+
+	}
+
+	private List<String> allPreferencePages() {
+		final List<String> prefPageIDs = new LinkedList<String>(); 
+		prefPageIDs.add(GENERIC_PREFPAGE_ID);
+		for (IDestinationsProviderDescription provider: searchConfig.getAvailableDestinationProviders()) {
+			if (provider.getPreferencePageId()!=null) {
+				prefPageIDs.add(provider.getPreferencePageId());
+			}
+		}
+		return prefPageIDs;
+	}
+
+	private String getPrefPageIdToPreselect(IDestinationCategoryDescription selectedDestCategory) {
+		if(selectedDestCategory!=null && !hasDestinationsConfigurator(selectedDestCategory)) {
+			String prefPageId = getPrefPageIdFor(selectedDestCategory);
+			if(prefPageId!=null) {
+				return prefPageId;
+			}
+		}
+
+		return GENERIC_PREFPAGE_ID;
+	}
+
+	private String getPrefPageIdFor(IDestinationCategoryDescription selectedDestCategory) {
+		for(IDestinationsProviderDescription destProvider: searchConfig.getDestinationProvidersForCategory(selectedDestCategory)) {
+			if(destProvider.getPreferencePageId()!=null) {
+				return destProvider.getPreferencePageId();
+			}
+		}
+		return null;
+	}
+
+	private boolean hasDestinationsConfigurator(IDestinationCategoryDescription selectedDestCategory) {
+		for(IDestinationsProviderDescription destProvider: searchConfig.getDestinationProvidersForCategory(selectedDestCategory)) {
+			for(ISearchDestinationsConfiguratorDescription desc: destConfigurator.readContributions()) {
+				if(desc.destinationProviderId().equals(destProvider.getId()) && desc.destinationCategoryId().equals(selectedDestCategory.getId())) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+}
diff --git a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/IPreferenceDialogCreator.java b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/IPreferenceDialogCreator.java
new file mode 100644
index 0000000..fd96c9b
--- /dev/null
+++ b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/IPreferenceDialogCreator.java
@@ -0,0 +1,13 @@
+package org.eclipse.platform.discovery.destprefs.internal;
+
+import org.eclipse.swt.widgets.Shell;
+
+/** To facilitate unit testing, the functionality to open a preference dialog is hidden
+ * behind this interface.
+ **/
+
+public interface IPreferenceDialogCreator {
+
+	public void openPreferenceDialog(Shell parentShell, String preselectedPageId, String[] pageIds);
+
+}
diff --git a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/PreferenceDialogCreator.java b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/PreferenceDialogCreator.java
new file mode 100644
index 0000000..5e41870
--- /dev/null
+++ b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/PreferenceDialogCreator.java
@@ -0,0 +1,16 @@
+package org.eclipse.platform.discovery.destprefs.internal;
+
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.PreferencesUtil;
+
+public class PreferenceDialogCreator implements IPreferenceDialogCreator {
+
+	@Override
+	public void openPreferenceDialog(Shell parentShell, String preselectedPageId, String[] pageIds) {
+		PreferenceDialog prefDialog = PreferencesUtil.createPreferenceDialogOn(parentShell, preselectedPageId, pageIds, null);
+		prefDialog.getTreeViewer().expandAll();
+		prefDialog.open();
+	}
+
+}
diff --git a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/i18n/DestPrefsMessages.java b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/i18n/DestPrefsMessages.java
index 50099ae..b4de5dc 100644
--- a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/i18n/DestPrefsMessages.java
+++ b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/i18n/DestPrefsMessages.java
@@ -13,7 +13,7 @@
 import org.eclipse.osgi.util.NLS;
 
 public class DestPrefsMessages extends NLS {
-    private static final String BUNDLE_NAME = "org.eclipse.platform.discovery.destprefs.internal.i18n.DestPrefsMessages";
+    private static final String BUNDLE_NAME = "org.eclipse.platform.discovery.destprefs.internal.i18n.DestPrefsMessages"; //$NON-NLS-1$
     static {
         NLS.initializeMessages(BUNDLE_NAME, DestPrefsMessages.class);
     }
diff --git a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/DestinationConfiguratorsPresenter.java b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/DestinationConfiguratorsPresenter.java
index e51ad4e..0d06d14 100644
--- a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/DestinationConfiguratorsPresenter.java
+++ b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/DestinationConfiguratorsPresenter.java
@@ -54,7 +54,7 @@
 				return provider;
 			}
 		}
-		throw new RuntimeException("cannot find dest provider:"+destinationProviderId);
+		throw new RuntimeException("cannot find dest provider:"+destinationProviderId); //$NON-NLS-1$
 	}
 
 	private IDestinationCategoryDescription findCategory(String destinationCategoryId) {
@@ -63,7 +63,7 @@
 				return category;
 			}
 		}
-		throw new RuntimeException("cannot find dest category:"+destinationCategoryId);
+		throw new RuntimeException("cannot find dest category:"+destinationCategoryId); //$NON-NLS-1$
 	}
 
 	@Override
@@ -88,7 +88,7 @@
 
 	@Override
 	public void addDestination() {
-		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId");
+		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId"); //$NON-NLS-1$
 		ISearchDestinationConfigurator<?> configurator = getConfigDescription(destinationProviderId).createConfigurator();
 		IStatus result = configurator.createDestination(view.getShell());
 		updateView(result);
@@ -107,13 +107,13 @@
 				return desc;
 			}
 		}
-		throw new RuntimeException("cannot find destination configurator for dest provider id:"+destinationProviderId);
+		throw new RuntimeException("cannot find destination configurator for dest provider id:"+destinationProviderId); //$NON-NLS-1$
 	}
 
 	@Override
 	 public <T extends ISearchDestination> void editDestination() {
-		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId");
-		ContractChecker.nullCheckField(destination, "destination");
+		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId"); //$NON-NLS-1$
+		ContractChecker.nullCheckField(destination, "destination"); //$NON-NLS-1$
 		
 		ISearchDestinationConfigurator<T> configurator = getConfigDescription(destinationProviderId).createConfigurator();
 		@SuppressWarnings("unchecked") IStatus result = configurator.editDestination(view.getShell(), (T)destination);
@@ -123,8 +123,8 @@
 
 	@Override
 	public <T extends ISearchDestination> void removeDestination() {
-		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId");
-		ContractChecker.nullCheckField(destination, "destination");
+		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId"); //$NON-NLS-1$
+		ContractChecker.nullCheckField(destination, "destination"); //$NON-NLS-1$
 		
 		ISearchDestinationConfigurator<T> configurator = getConfigDescription(destinationProviderId).createConfigurator();
 		@SuppressWarnings("unchecked") IStatus result = configurator.deleteDestination(view.getShell(), (T)destination);
@@ -134,8 +134,8 @@
 	@SuppressWarnings("unchecked")
 	@Override
 	public <T extends ISearchDestination> void testDestination() {
-		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId");
-		ContractChecker.nullCheckField(destination, "destination");
+		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId"); //$NON-NLS-1$
+		ContractChecker.nullCheckField(destination, "destination"); //$NON-NLS-1$
 		ISearchDestinationTester<T> tester = (ISearchDestinationTester<T>) getConfigDescription(destinationProviderId).createConfigurator().getSearchDestinationTester();
 		IStatus result = tester.test(view.getShell(), (T)destination);
 		view.setStatus(result);
diff --git a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/DestinationsLabelProvider.java b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/DestinationsLabelProvider.java
index 17c5aa4..70f0461 100644
--- a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/DestinationsLabelProvider.java
+++ b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/DestinationsLabelProvider.java
@@ -32,7 +32,7 @@
 
     private StyledString getCategoryNodeText(CategoryNode category) {
         StyledString styledString = new StyledString(category.getDisplayName());
-        styledString.append(" (" + category.getDestinationsCount() + ")", StyledString.COUNTER_STYLER);
+        styledString.append(" (" + category.getDestinationsCount() + ")", StyledString.COUNTER_STYLER); //$NON-NLS-1$ //$NON-NLS-2$
         return styledString;
     }
 }
diff --git a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/DestinationsPreferencePage.java b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/DestinationsPreferencePage.java
index 2cf89a1..264d061 100644
--- a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/DestinationsPreferencePage.java
+++ b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/DestinationsPreferencePage.java
@@ -55,7 +55,8 @@
     }
 
     public DestinationsPreferencePage() {
-        this(new DestinationConfiguratorsPresenter(new SearchDestinationsConfiguratorXPParser(Platform.getExtensionRegistry()), SearchProviderConfigurationFactory.getDefault()));
+        this(new DestinationConfiguratorsPresenter(new SearchDestinationsConfiguratorXPParser(Platform.getExtensionRegistry()),
+        		new SearchProviderConfigurationFactory().getSearchProviderConfiguration(Platform.getExtensionRegistry())));
     }
 
     @Override
@@ -124,7 +125,7 @@
                     presenter.selectionChanged(new DestinationConfiguratorSelection(destNode.getParentNode().getDestinationProviderId(), destNode.getDestination()));
                     return;
                 }
-                throw new IllegalArgumentException("Unsupported element: " + selectedElement);
+                throw new IllegalArgumentException("Unsupported element: " + selectedElement); //$NON-NLS-1$
             }
         };
     }
diff --git a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/xpparser/SearchDestinationsConfiguratorXPParser.java b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/xpparser/SearchDestinationsConfiguratorXPParser.java
index a46f985..e36a46f 100644
--- a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/xpparser/SearchDestinationsConfiguratorXPParser.java
+++ b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/xpparser/SearchDestinationsConfiguratorXPParser.java
@@ -24,11 +24,11 @@
 
 public class SearchDestinationsConfiguratorXPParser extends AbstractExtensionPointParser<ISearchDestinationsConfiguratorDescription> implements
         ISearchDestinationsConfiguratorXPParser {
-    public static final String XP_ID = "org.eclipse.platform.discovery.destprefs.configurator";
-    public static final String CONFIGURATOR_ELEMENT_NAME = "destinationConfigurator";
-    public static final String CONFIGURATOR_ID_ELEMENT_NAME = "id";
-    public static final String CONFIGURATOR_DEST_PROVIDER_ID_ELEMENT_NAME = "destProviderId";
-    public static final String CONFIGURATOR_FQNAME_ELEMENT_NAME = "contributorClass";
+    public static final String XP_ID = "org.eclipse.platform.discovery.destprefs.configurator"; //$NON-NLS-1$
+    public static final String CONFIGURATOR_ELEMENT_NAME = "destinationConfigurator"; //$NON-NLS-1$
+    public static final String CONFIGURATOR_ID_ELEMENT_NAME = "id"; //$NON-NLS-1$
+    public static final String CONFIGURATOR_DEST_PROVIDER_ID_ELEMENT_NAME = "destProviderId"; //$NON-NLS-1$
+    public static final String CONFIGURATOR_FQNAME_ELEMENT_NAME = "contributorClass"; //$NON-NLS-1$
 
     public SearchDestinationsConfiguratorXPParser(final IExtensionRegistry extRegistry) {
         super(extRegistry, XP_ID, CONFIGURATOR_ELEMENT_NAME);
@@ -49,7 +49,8 @@
                 return destCategoryId;
             }
 
-            @Override
+            @SuppressWarnings("unchecked")
+			@Override
             public ISearchDestinationConfigurator<?> createConfigurator() {
                 try {
                     return (ISearchDestinationConfigurator<?>) element.createExecutableExtension(CONFIGURATOR_FQNAME_ELEMENT_NAME);
@@ -68,7 +69,7 @@
                 return destCategory.getId();
             }
         }
-        throw new IllegalArgumentException("Could not find destination category for destination provider " + destProviderId);
+        throw new IllegalArgumentException("Could not find destination category for destination provider " + destProviderId); //$NON-NLS-1$
     }
 
     private IDestinationsProviderDescription getDestinationProvider(IDestinationCategoryDescription destCategory, final String destProviderId) {
@@ -81,6 +82,6 @@
     }
 
     protected ISearchProviderConfiguration searchProviderConfiguration() {
-        return SearchProviderConfigurationFactory.getDefault();
+        return new SearchProviderConfigurationFactory().getSearchProviderConfiguration(extRegistry);
     }
 }
diff --git a/bundles/org.eclipse.platform.discovery.integration/META-INF/MANIFEST.MF b/bundles/org.eclipse.platform.discovery.integration/META-INF/MANIFEST.MF
index 32dd5c3..f2f5804 100644
--- a/bundles/org.eclipse.platform.discovery.integration/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.platform.discovery.integration/META-INF/MANIFEST.MF
@@ -12,7 +12,8 @@
  org.eclipse.platform.discovery.runtime,
  org.eclipse.ui.views,
  org.eclipse.ui.views.properties.tabbed,
- org.eclipse.platform.discovery.util
+ org.eclipse.platform.discovery.util,
+ org.eclipse.platform.discovery.destprefs
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ActivationPolicy: lazy
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/plugin/DiscoveryIntegrationPlugin.java b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/plugin/DiscoveryIntegrationPlugin.java
index 6f6b5f3..da7b429 100644
--- a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/plugin/DiscoveryIntegrationPlugin.java
+++ b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/plugin/DiscoveryIntegrationPlugin.java
@@ -16,8 +16,10 @@
 import java.util.List;
 import java.util.Set;
 
+import org.eclipse.core.runtime.IExtensionRegistry;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.core.runtime.jobs.Job;
@@ -40,6 +42,9 @@
 import org.eclipse.platform.discovery.core.internal.favorites.SearchFavoritesController;
 import org.eclipse.platform.discovery.core.internal.favorites.SearchFavoritesPersistenceUtil;
 import org.eclipse.platform.discovery.core.internal.favorites.SearchFavoritesPersistenceUtil.IPersistenceContext;
+import org.eclipse.platform.discovery.destprefs.internal.DestinationsManager;
+import org.eclipse.platform.discovery.destprefs.internal.PreferenceDialogCreator;
+import org.eclipse.platform.discovery.destprefs.internal.xpparser.SearchDestinationsConfiguratorXPParser;
 import org.eclipse.platform.discovery.integration.internal.slavecontrollers.SlaveControllersConfiguration;
 import org.eclipse.platform.discovery.integration.internal.viewcustomization.ViewCustomizationConfiguration;
 import org.eclipse.platform.discovery.runtime.api.persistence.DestinationItemPair;
@@ -331,7 +336,8 @@
 			
 			final Set<IGenericViewCustomization> viewCust = new HashSet<IGenericViewCustomization>(viewCustomizationsConfig().availableSearchConsoleCustomizations()); 
 			customizeView(customizableView, masterView, new HashSet<ISlaveController>(slaveControllers), viewCust);
-			consoleView.registerController(consoleController);
+			consoleView.registerController(consoleController);
+			consoleView.setDestinationsManager(new DestinationsManager(new SearchDestinationsConfiguratorXPParser(extensionRegistry()), new PreferenceDialogCreator(), searchProviderConfiguration()));
 			consoleView.initializationCompleted();
 		}
 		else
@@ -525,7 +531,11 @@
 
 	private ISearchProviderConfiguration searchProviderConfiguration()
 	{
-		return SearchProviderConfigurationFactory.getDefault();
+		return new SearchProviderConfigurationFactory().getSearchProviderConfiguration(extensionRegistry());
+	}
+
+	private IExtensionRegistry extensionRegistry() {
+		return Platform.getExtensionRegistry();
 	}
 	
 	private IErrorHandler errorHandler()
diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/SearchProviderConfigurationFactory.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/SearchProviderConfigurationFactory.java
index 1a17fac..2e931c5 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/SearchProviderConfigurationFactory.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/SearchProviderConfigurationFactory.java
@@ -10,28 +10,18 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.internal;
 
+import org.eclipse.core.runtime.IExtensionRegistry;
 import org.eclipse.platform.discovery.runtime.internal.impl.SearchProviderConfiguration;
 import org.eclipse.platform.discovery.runtime.internal.impl.XpParsersFactory;
 import org.eclipse.platform.discovery.runtime.internal.search.activation.SearchProviderActivationConfigDummy;
 
 public class SearchProviderConfigurationFactory
-{
-	private static ISearchProviderConfiguration config;
+{
 
-	public static ISearchProviderConfiguration getDefault()
+	public ISearchProviderConfiguration getSearchProviderConfiguration(IExtensionRegistry registry)
 	{
-		if (config == null)
-		{
-			config = createConfig();
-		}
-
-		return config;
-	}
-
-	private static ISearchProviderConfiguration createConfig()
-	{
-		final XpParsersFactory parsersFactory = new XpParsersFactory();
-		return new SearchProviderConfiguration(parsersFactory, new SearchProviderActivationConfigDummy(parsersFactory.createSearchProviderParser()), new SubdestinationsActivationConfig(parsersFactory
-										.createSubdestinationsParser()));
+		final XpParsersFactory parsersFactory = new XpParsersFactory(registry);
+		return new SearchProviderConfiguration(parsersFactory, new SearchProviderActivationConfigDummy(parsersFactory.createSearchProviderParser()), new SubdestinationsActivationConfig(parsersFactory
+										.createSubdestinationsParser()));
 	}
 }
diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/impl/XpParsersFactory.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/impl/XpParsersFactory.java
index 079d56f..72847a4 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/impl/XpParsersFactory.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/impl/XpParsersFactory.java
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.internal.impl;
 
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.platform.discovery.runtime.internal.IXPParsersFactory;
 import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationCategoryExtensionParser;
 import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationsProviderExtensionParser;
@@ -29,35 +31,43 @@
  *
  */
 public class XpParsersFactory implements IXPParsersFactory
-{
+{
+	private final IExtensionRegistry extensionRegistry;
+
+	public XpParsersFactory() {
+		this(Platform.getExtensionRegistry());
+	}
+	public XpParsersFactory(IExtensionRegistry extensionRegistry) {
+		this.extensionRegistry = extensionRegistry;
+	}
 	@Override
 	public IDestinationsProviderExtensionParser createDestinationsProviderParser()
 	{
-		return new DestinationsProviderExtensionParser();
+		return new DestinationsProviderExtensionParser(extensionRegistry);
 	}
 
 	@Override
 	public IDestinationCategoryExtensionParser createDestinationsCategoryParser()
 	{
-		return new DestinationsCategoryExtensionParser();
+		return new DestinationsCategoryExtensionParser(extensionRegistry);
 	}
 
 	@Override
 	public IObjectTypeExtensionParser createObjectTypeParser()
 	{
-		return new ObjectTypeExtensionParser();
+		return new ObjectTypeExtensionParser(extensionRegistry);
 	}
 
 	@Override
 	public ISearchProvidersExtensionParser createSearchProviderParser()
 	{
-		return new SearchProvidersExtensionParser(createDestinationsCategoryParser(), createObjectTypeParser());
+		return new SearchProvidersExtensionParser(extensionRegistry);
 	}
 
 	@Override
 	public ISearchSubdestinationExtensionParser createSubdestinationsParser()
 	{
-		return new SearchSubdestinationExtensionParser();
+		return new SearchSubdestinationExtensionParser(extensionRegistry);
 	}
 	
 }
diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/AbstractExtensionPointParser.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/AbstractExtensionPointParser.java
index 96cdf41..46ef746 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/AbstractExtensionPointParser.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/AbstractExtensionPointParser.java
@@ -28,7 +28,7 @@
  */
 public abstract class AbstractExtensionPointParser<T> implements IContributionsReader<T>
 {
-	private final IExtensionRegistry extRegistry;
+	protected final IExtensionRegistry extRegistry;
 	private final String xpId;
 	private final String elementName;
 	
diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/SearchDestinationsSelector.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/SearchDestinationsSelector.java
index 841bc67..df70b19 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/SearchDestinationsSelector.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/SearchDestinationsSelector.java
@@ -17,8 +17,11 @@
 
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeSelection;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.TreeSelection;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.platform.discovery.core.internal.selectors.IItemSelector;
 import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;
@@ -232,5 +235,29 @@
 	{
 		// TODO: Maybe take a percentage of screen size!?
 		return 80;
+	}
+	
+	public IDestinationCategoryDescription getActiveDestinationCategory() {
+		IStructuredSelection selection = lastKnownSelection.get();
+		
+		if(!(selection instanceof TreeSelection)) {
+			//this means initial empty selection
+			return null;
+		}
+		
+		TreeSelection treeSelection = (TreeSelection) selection;
+		
+		Object selectedElement = treeSelection.getFirstElement();
+		if (selectedElement instanceof IDestinationCategoryDescription) {
+			return (IDestinationCategoryDescription)selectedElement;
+		}
+		
+		if(selectedElement instanceof ISearchDestination) {
+			TreePath pathToSelected = treeSelection.getPathsFor(selectedElement)[0];
+			assert pathToSelected.getFirstSegment() instanceof IDestinationCategoryDescription;
+			return (IDestinationCategoryDescription) pathToSelected.getFirstSegment() ;
+		}
+		
+		return null;
 	}
 }
diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/ISearchProviderSelector.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/ISearchProviderSelector.java
index 530c012..76354a6 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/ISearchProviderSelector.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/ISearchProviderSelector.java
@@ -52,6 +52,8 @@
 	
 	public ISearchProviderDescription getSelectedSearchProvider();
 	
+	public IDestinationCategoryDescription getActiveDestinationCategory();
+	
 	public void setObjectTypes(final List<IObjectTypeDescription> objectTypes);
 
 	public void setDestinations(List<IDestinationCategoryDescription> categories);
diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchConsoleView.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchConsoleView.java
index b79a83f..604accc 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchConsoleView.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchConsoleView.java
@@ -13,14 +13,14 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
 
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.platform.discovery.core.api.ISearchContext;
 import org.eclipse.platform.discovery.core.api.SearchEvent;
+import org.eclipse.platform.discovery.core.internal.IDestinationsManager;
 import org.eclipse.platform.discovery.core.internal.ISearchConsoleView;
 import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleController;
 import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleControllerOutputView;
@@ -35,7 +35,6 @@
 import org.eclipse.platform.discovery.runtime.internal.ProviderNotFoundException;
 import org.eclipse.platform.discovery.runtime.internal.SearchProviderConfigurationFactory;
 import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;
 import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;
 import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;
 import org.eclipse.platform.discovery.ui.api.IGenericViewCustomization;
@@ -81,7 +80,6 @@
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.PreferencesUtil;
 import org.eclipse.ui.forms.events.HyperlinkEvent;
 import org.eclipse.ui.forms.events.IHyperlinkListener;
 import org.eclipse.ui.forms.widgets.FormToolkit;
@@ -112,7 +110,7 @@
 	 */
 	public static final int UI_IN_CONTROL_SPACING = 5;
 	
-	private ISearchProviderSelector searchProviderSelector;
+	protected ISearchProviderSelector searchProviderSelector;
 	
 	private IAdvancedSearchParamsDisplayer advancedSearchParamsDisplayer;
 	private ITabbedSessionDisplayer<ISearchContext> sdm;
@@ -135,7 +133,9 @@
 	
 	private ControlBackgroundImageManager upperCompositeGradientManager;
 
-	private ISearchConsoleController controller;
+	private ISearchConsoleController controller;
+
+	private IDestinationsManager destManager;
 	
 	public SearchConsoleView()
 	{
@@ -222,7 +222,7 @@
 	
 	protected ISearchProviderConfiguration getSearchProviderConfiguration()
 	{
-		return SearchProviderConfigurationFactory.getDefault();
+		return new SearchProviderConfigurationFactory().getSearchProviderConfiguration(Platform.getExtensionRegistry());
 	}
 
 	@Override
@@ -279,21 +279,12 @@
 		manageConfigurationHyperlink.setUnderlined(true);
 		manageConfigurationHyperlink.setCursor(hyperlinkCursor);
 		
-		final List<String> prefPageIDs = new LinkedList<String>(); 
-		prefPageIDs.add("org.eclipse.platform.discovery.destprefs.preferencepage");
-		for (IDestinationsProviderDescription provider : this.getSearchProviderConfiguration().getAvailableDestinationProviders()) {
-			if (provider.getPreferencePageId()!=null) {
-				prefPageIDs.add(provider.getPreferencePageId());
-			}
-		}
-		
 		manageConfigurationHyperlink.addHyperlinkListener(new IHyperlinkListener()
 		{
-			public void linkActivated(HyperlinkEvent e) {
-				final PreferenceDialog pageDialog = PreferencesUtil.createPreferenceDialogOn(parent.getShell(), null, prefPageIDs.toArray(new String[prefPageIDs.size()]), null);
-				pageDialog.getTreeViewer().expandAll();
-				pageDialog.open();
-			}
+			public void linkActivated(HyperlinkEvent e) {
+				destManager.manageDestinations(parent.getShell(), searchProviderSelector.getActiveDestinationCategory());
+			}
+			
 			public void linkEntered(HyperlinkEvent e) {
 			}
 			public void linkExited(HyperlinkEvent e) {
@@ -780,5 +771,11 @@
 	public ISearchConsoleControllerOutputView getControllerView()
 	{
 		return this;
-	}
+	}
+
+	@Override
+	public void setDestinationsManager(IDestinationsManager destManager) {
+		this.destManager = destManager;
+	}
+	
 }
diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchProviderSelector.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchProviderSelector.java
index 73bbdbf..03125ea 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchProviderSelector.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchProviderSelector.java
@@ -197,4 +197,9 @@
 	public Composite getControl() {
 		return this.selectorComposite;
 	}
+
+	@Override
+	public IDestinationCategoryDescription getActiveDestinationCategory() {
+		return destinationsSelector.getActiveDestinationCategory();
+	}
 }
diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/SearchConsoleDestinationsSelector.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/SearchConsoleDestinationsSelector.java
index c4b5c1d..57aab11 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/SearchConsoleDestinationsSelector.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/SearchConsoleDestinationsSelector.java
@@ -131,5 +131,6 @@
 			}
 		}
 		currentDestinationProviders.clear();
-	}
+	}
+	
 }
diff --git a/tests/org.eclipse.platform.discovery.core.test.unit/src/org/eclipse/platform/discovery/core/test/unit/internal/SearchConsoleControllerFixture.java b/tests/org.eclipse.platform.discovery.core.test.unit/src/org/eclipse/platform/discovery/core/test/unit/internal/SearchConsoleControllerFixture.java
index 2344bfd..fc531f8 100644
--- a/tests/org.eclipse.platform.discovery.core.test.unit/src/org/eclipse/platform/discovery/core/test/unit/internal/SearchConsoleControllerFixture.java
+++ b/tests/org.eclipse.platform.discovery.core.test.unit/src/org/eclipse/platform/discovery/core/test/unit/internal/SearchConsoleControllerFixture.java
@@ -32,7 +32,7 @@
 import org.eclipse.platform.discovery.util.internal.session.ISessionManager;
 
 
-public class SearchConsoleControllerFixture extends MockObjectTestCase {
+public abstract class SearchConsoleControllerFixture extends MockObjectTestCase {
 
 	protected static final String searchSessionId = "searchSessionId";
 	protected static final String defaultSessionId = "defaultSessionId"; 
diff --git a/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/DestinationsManagerTest.java b/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/DestinationsManagerTest.java
new file mode 100644
index 0000000..7d0766e
--- /dev/null
+++ b/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/DestinationsManagerTest.java
@@ -0,0 +1,174 @@
+package org.eclipse.platform.discovery.destprefs.test.unit;
+
+import static org.eclipse.platform.discovery.testutils.utils.matchers.Matchers.arrayEqualsWithoutOrder;
+import static org.junit.Assert.fail;
+import static org.mockito.Matchers.argThat;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Matchers.same;
+import static org.mockito.Mockito.verify;
+
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.platform.discovery.destprefs.internal.DestinationsManager;
+import org.eclipse.platform.discovery.destprefs.internal.IPreferenceDialogCreator;
+import org.eclipse.platform.discovery.destprefs.internal.xpparser.ISearchDestinationsConfiguratorDescription;
+import org.eclipse.platform.discovery.destprefs.internal.xpparser.SearchDestinationsConfiguratorXPParser;
+import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;
+import org.eclipse.platform.discovery.runtime.internal.SearchProviderConfigurationFactory;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.platform.discovery.runtime.internal.xp.impl.AbstractExtensionPointParser;
+import org.eclipse.platform.discovery.testutils.utils.registry.ExtensionRegistryBuilder;
+import org.eclipse.swt.widgets.Shell;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+public class DestinationsManagerTest {
+	
+	private static final String PREFPAGE_ID = "prefpage_id";
+	private static final String DEST_CATEGORY_ID = "category";
+
+	private DestinationsManager destinationsManager;
+	
+	@Mock
+	private AbstractExtensionPointParser<ISearchDestinationsConfiguratorDescription> destConfigurator;
+	
+	@Mock
+	private IPreferenceDialogCreator preferenceDialogCreator;
+	@Mock
+	private Shell shell;
+
+	private ExtensionRegistryBuilder registryBuilder;
+
+	private ISearchProviderConfiguration searchConfig;
+	
+	@Before
+	public void setup() {
+		MockitoAnnotations.initMocks(this);
+		registryBuilder = new ExtensionRegistryBuilder();
+	}
+	
+	@Test
+	public void noPreferencePages() {
+		
+		IExtensionRegistry registry = registryBuilder.getRegistry();
+		init(registry);
+		
+		destinationsManager.manageDestinations(shell, null);
+		
+		verify(preferenceDialogCreator).openPreferenceDialog(same(shell), eq(DestinationsManager.GENERIC_PREFPAGE_ID), argThat(arrayEqualsWithoutOrder(DestinationsManager.GENERIC_PREFPAGE_ID)));
+	}
+	
+	@Test
+	public void onePreferencePageNoSelection() {
+		
+		registryBuilder.addDestinationCategory(DEST_CATEGORY_ID, DEST_CATEGORY_ID);
+		registryBuilder.addDestinationsProvider("destprovider", DEST_CATEGORY_ID, PREFPAGE_ID, "foo", null);
+		
+		IExtensionRegistry registry = registryBuilder.getRegistry();
+		init(registry);
+		
+		destinationsManager.manageDestinations(shell, null);
+		
+		verify(preferenceDialogCreator).openPreferenceDialog(same(shell), eq(DestinationsManager.GENERIC_PREFPAGE_ID),  argThat(arrayEqualsWithoutOrder(DestinationsManager.GENERIC_PREFPAGE_ID, PREFPAGE_ID)));
+	}
+	
+	@Test
+	public void onePreferencePageAndDestCategorySelected() {
+		registryBuilder.addDestinationCategory(DEST_CATEGORY_ID, DEST_CATEGORY_ID);
+		registryBuilder.addDestinationsProvider("destprovider", DEST_CATEGORY_ID, PREFPAGE_ID, "foo", null);
+		
+		IExtensionRegistry registry = registryBuilder.getRegistry();
+		init(registry);
+		
+		IDestinationCategoryDescription category = getCategory(DEST_CATEGORY_ID);
+		
+		destinationsManager.manageDestinations(shell, category);
+		
+		verify(preferenceDialogCreator).openPreferenceDialog(same(shell), eq(PREFPAGE_ID),  argThat(arrayEqualsWithoutOrder(DestinationsManager.GENERIC_PREFPAGE_ID, PREFPAGE_ID)));
+
+	}
+	
+	@Test
+	public void oneDestinationNoPreferencePageAndDestCategorySelected() {
+		registryBuilder.addDestinationCategory(DEST_CATEGORY_ID, DEST_CATEGORY_ID);
+		registryBuilder.addDestinationsProvider("destprovider", DEST_CATEGORY_ID, null, "foo", null);
+		
+		IExtensionRegistry registry = registryBuilder.getRegistry();
+		init(registry);
+		
+		IDestinationCategoryDescription category = getCategory(DEST_CATEGORY_ID);
+		
+		destinationsManager.manageDestinations(shell, category);
+		
+		verify(preferenceDialogCreator).openPreferenceDialog(same(shell), eq(DestinationsManager.GENERIC_PREFPAGE_ID),  argThat(arrayEqualsWithoutOrder(DestinationsManager.GENERIC_PREFPAGE_ID)));
+
+	}
+	
+	@Test
+	public void oneConfiguratorNoSelection() {
+		
+		registryBuilder.addDestinationCategory(DEST_CATEGORY_ID, DEST_CATEGORY_ID);
+		registryBuilder.addDestinationsProvider("destprovider", DEST_CATEGORY_ID, null, "foo", null);
+		registryBuilder.addSearchDestinationsConfigurator("configurator", "destprovider", "bar", null);
+
+		IExtensionRegistry registry = registryBuilder.getRegistry();
+		init(registry);
+		
+		destinationsManager.manageDestinations(shell, null);
+		
+		verify(preferenceDialogCreator).openPreferenceDialog(same(shell), eq(DestinationsManager.GENERIC_PREFPAGE_ID),  argThat(arrayEqualsWithoutOrder(DestinationsManager.GENERIC_PREFPAGE_ID)));
+	}
+	
+	@Test
+	public void oneConfiguratorAndDestCategorySelected() {
+		
+		registryBuilder.addDestinationCategory(DEST_CATEGORY_ID, DEST_CATEGORY_ID);
+		registryBuilder.addDestinationsProvider("destprovider", DEST_CATEGORY_ID, null, "foo", null);
+		registryBuilder.addSearchDestinationsConfigurator("configurator", "destprovider", "bar", null);
+
+		IExtensionRegistry registry = registryBuilder.getRegistry();
+		init(registry);
+		
+		IDestinationCategoryDescription category = getCategory(DEST_CATEGORY_ID);
+
+		destinationsManager.manageDestinations(shell, category);
+		
+		verify(preferenceDialogCreator).openPreferenceDialog(same(shell), eq(DestinationsManager.GENERIC_PREFPAGE_ID),  argThat(arrayEqualsWithoutOrder(DestinationsManager.GENERIC_PREFPAGE_ID)));
+	}
+	
+	@Test
+	public void configuratorTakesPrecedenceOverPrefPage() {
+		
+		registryBuilder.addDestinationCategory(DEST_CATEGORY_ID, DEST_CATEGORY_ID);
+		registryBuilder.addDestinationsProvider("destprovider", DEST_CATEGORY_ID, PREFPAGE_ID, "foo", null);
+		registryBuilder.addSearchDestinationsConfigurator("configurator", "destprovider", "bar", null);
+
+		IExtensionRegistry registry = registryBuilder.getRegistry();
+		init(registry);
+		
+		IDestinationCategoryDescription category = getCategory(DEST_CATEGORY_ID);
+
+		destinationsManager.manageDestinations(shell, category);
+		
+		verify(preferenceDialogCreator).openPreferenceDialog(same(shell), eq(DestinationsManager.GENERIC_PREFPAGE_ID),  argThat(arrayEqualsWithoutOrder(DestinationsManager.GENERIC_PREFPAGE_ID,PREFPAGE_ID)));
+	}
+	
+	
+
+	private IDestinationCategoryDescription getCategory(String destCategoryId) {
+		for(IDestinationCategoryDescription desc: searchConfig.getDestinationCategories()) {
+			if(desc.getId().equals(destCategoryId)) {
+				return desc;
+			}
+		}
+		
+		fail("dest category not found:"+destCategoryId);return null;
+ 	}
+
+	private void init(IExtensionRegistry registry) {
+		searchConfig = new SearchProviderConfigurationFactory().getSearchProviderConfiguration(registry);
+		destinationsManager = new DestinationsManager(new SearchDestinationsConfiguratorXPParser(registry), preferenceDialogCreator, searchConfig);
+
+	}
+}
diff --git a/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/SearchConfiguratorsFixture.java b/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/SearchConfiguratorsFixture.java
index 70e49af..efeb716 100644
--- a/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/SearchConfiguratorsFixture.java
+++ b/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/SearchConfiguratorsFixture.java
@@ -15,7 +15,6 @@
 import java.util.List;
 import java.util.Set;
 
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.platform.discovery.destprefs.api.ISearchDestinationConfigurator;
 import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;
 import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
@@ -65,7 +64,7 @@
 	public void setup(ExtensionRegistryBuilder registryBuilder) {
 		MockitoAnnotations.initMocks(this);
 		setupSearchProviderConfiguration();
-		
+
 		setupDestProvider();
 
 		registryBuilder.addDestinationCategory(CATEGORY_1, CATEGORY_1);
@@ -77,13 +76,9 @@
 		.addDestinationsProvider(DEST_PROVIDER_CAT1_2, CATEGORY_1, null, "someprovider_1_2", destprovider1);
 		registryBuilder.addDestinationsProvider(DEST_PROVIDER_CAT2, CATEGORY_2, null, "someprovider2", destprovider1);
 
-		try {
-			registryBuilder.addSearchDestinationsConfigurator(CONFIGURATOR_1_1_ID, DEST_PROVIDER_CAT1_1, CONFIGURATOR_1_1_FQNAME, configurator_1_1);
-			registryBuilder.addSearchDestinationsConfigurator(CONFIGURATOR_1_2_ID, DEST_PROVIDER_CAT1_2, CONFIGURATOR_1_2_FQNAME, configurator_1_2);
-			registryBuilder.addSearchDestinationsConfigurator(CONFIGURATOR_2_ID, DEST_PROVIDER_CAT2, CONFIGURATOR_2_FQNAME, configurator_2);
-		} catch (CoreException e) {
-			throw new IllegalStateException(e);
-		}
+		registryBuilder.addSearchDestinationsConfigurator(CONFIGURATOR_1_1_ID, DEST_PROVIDER_CAT1_1, CONFIGURATOR_1_1_FQNAME, configurator_1_1);
+		registryBuilder.addSearchDestinationsConfigurator(CONFIGURATOR_1_2_ID, DEST_PROVIDER_CAT1_2, CONFIGURATOR_1_2_FQNAME, configurator_1_2);
+		registryBuilder.addSearchDestinationsConfigurator(CONFIGURATOR_2_ID, DEST_PROVIDER_CAT2, CONFIGURATOR_2_FQNAME, configurator_2);
 	}
 
 	private void setupDestProvider() {
diff --git a/tests/org.eclipse.platform.discovery.integration.test.unit/META-INF/MANIFEST.MF b/tests/org.eclipse.platform.discovery.integration.test.unit/META-INF/MANIFEST.MF
index 71fa401..2fc0083 100644
--- a/tests/org.eclipse.platform.discovery.integration.test.unit/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.platform.discovery.integration.test.unit/META-INF/MANIFEST.MF
@@ -15,7 +15,8 @@
  org.eclipse.platform.discovery.util,
  org.eclipse.core.runtime,
  org.eclipse.platform.discovery.integration,
- org.eclipse.jface
+ org.eclipse.jface,
+ org.eclipse.platform.discovery.destprefs
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.platform.discovery.integration.internal.plugin,
  org.eclipse.platform.discovery.integration.test.unit,
diff --git a/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/internal/plugin/DiscoveryIntegrationPluginTest.java b/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/internal/plugin/DiscoveryIntegrationPluginTest.java
index 801aa9d..38c78ab 100644
--- a/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/internal/plugin/DiscoveryIntegrationPluginTest.java
+++ b/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/internal/plugin/DiscoveryIntegrationPluginTest.java
@@ -76,7 +76,8 @@
 		
 		consoleViewOutputController = mock(ISearchConsoleControllerOutputView.class);
 		consoleView = mock(ISearchConsoleView.class);
-		consoleView.stubs().method("getControllerView").will(returnValue(consoleViewOutputController.proxy()));
+		consoleView.stubs().method("getControllerView").will(returnValue(consoleViewOutputController.proxy()));
+		
 		consoleController = mock(ISearchConsoleController.class);
 		contributedAction = mock(IContributedAction.class);
 		customizableView = mock(ICustomizableView.class);
@@ -91,6 +92,7 @@
 		
 		setupSlaveControllers();
 		setupViewCustomizations();
+		
 		
 		plugin = new TestedIntegrationPlugin();
 	}
@@ -140,7 +142,9 @@
 		customizableView.expects(once()).method("setUiContext").with(isA(IViewUiContext.class));
 		
 		slaveController.expects(once()).method("setMasterController").with(eq(consoleController.proxy()));
-		searchConsoleViewCustomization.expects(once()).method("setMasterView").with(eq(masterView.proxy()));
+		searchConsoleViewCustomization.expects(once()).method("setMasterView").with(eq(masterView.proxy()));
+		consoleView.expects(once()).method("setDestinationsManager");
+		
 		plugin.partOpenedInternal(wbPartReference.proxy());
 	}
 	
diff --git a/tests/org.eclipse.platform.discovery.test.testutils/META-INF/MANIFEST.MF b/tests/org.eclipse.platform.discovery.test.testutils/META-INF/MANIFEST.MF
index 78f2dfb..d88e41e 100644
--- a/tests/org.eclipse.platform.discovery.test.testutils/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.platform.discovery.test.testutils/META-INF/MANIFEST.MF
@@ -27,6 +27,7 @@
  org.eclipse.platform.discovery.testutils.utils.jmock,
  org.eclipse.platform.discovery.testutils.utils.junit.util.assertions,
  org.eclipse.platform.discovery.testutils.utils.junit.util.threading,
+ org.eclipse.platform.discovery.testutils.utils.matchers,
  org.eclipse.platform.discovery.testutils.utils.model,
  org.eclipse.platform.discovery.testutils.utils.pageobjects,
  org.eclipse.platform.discovery.testutils.utils.reflection,
diff --git a/tests/org.eclipse.platform.discovery.test.testutils/src/org/eclipse/platform/discovery/testutils/utils/matchers/Matchers.java b/tests/org.eclipse.platform.discovery.test.testutils/src/org/eclipse/platform/discovery/testutils/utils/matchers/Matchers.java
new file mode 100644
index 0000000..779ffdc
--- /dev/null
+++ b/tests/org.eclipse.platform.discovery.test.testutils/src/org/eclipse/platform/discovery/testutils/utils/matchers/Matchers.java
@@ -0,0 +1,33 @@
+package org.eclipse.platform.discovery.testutils.utils.matchers;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+
+public class Matchers {
+	
+	public static <T> Matcher<T[]> arrayEqualsWithoutOrder(final T... elements) {
+		return new BaseMatcher<T[]>() {
+
+			@Override
+			public boolean matches(Object item) {
+				@SuppressWarnings("unchecked")
+				T[] args = (T[])item;
+				return set(elements).equals(set(args));
+			}
+			
+			private <Q> Set<Q> set(Q... elems) {
+				return new HashSet<Q>(Arrays.asList(elems));
+			}
+
+			@Override
+			public void describeTo(Description description) {
+				description.appendText(Arrays.toString(elements));
+			}
+		};
+	}
+}
diff --git a/tests/org.eclipse.platform.discovery.test.testutils/src/org/eclipse/platform/discovery/testutils/utils/registry/ExtensionRegistryBuilder.java b/tests/org.eclipse.platform.discovery.test.testutils/src/org/eclipse/platform/discovery/testutils/utils/registry/ExtensionRegistryBuilder.java
index 3e50cc2..3984a17 100644
--- a/tests/org.eclipse.platform.discovery.test.testutils/src/org/eclipse/platform/discovery/testutils/utils/registry/ExtensionRegistryBuilder.java
+++ b/tests/org.eclipse.platform.discovery.test.testutils/src/org/eclipse/platform/discovery/testutils/utils/registry/ExtensionRegistryBuilder.java
@@ -42,9 +42,9 @@
 import org.eclipse.platform.discovery.util.internal.StatusUtils;
 import org.osgi.framework.FrameworkUtil;
 public class ExtensionRegistryBuilder {
-	
+
 	private IExtensionRegistry extensionRegistry;
-	
+
 	private IExtensionPoint objectTypesExtensionPoint;
 	private IExtensionPoint destinationProvidersExtensionPoint;
 	private IExtensionPoint destinationCategoriesExtensionPoint;
@@ -69,7 +69,7 @@
 
 
 	public ExtensionRegistryBuilder() {
-		
+
 		this.extensionRegistry = mock(IExtensionRegistry.class, "extension registry");
 		objectTypesExtensionPoint = setupExtensionPoint(ObjectTypeExtensionParser.XP_ID);
 		destinationProvidersExtensionPoint = setupExtensionPoint(DestinationsProviderExtensionParser.XP_ID);
@@ -88,14 +88,14 @@
 		when(extensionRegistry.getExtensionPoint(eq(xpId))).thenReturn(point);
 		return point;
 	}
-	
+
 	public void addObjectType(String id, String displayName) {
 		IConfigurationElement element = createConfigurationElement(ObjectTypeExtensionParser.XP_ELEMENT_NAME);
 		setAttribute(element, ObjectTypeExtensionParser.ID_ATTR_NAME, id);
 		setAttribute(element, ObjectTypeExtensionParser.DISPLAY_NAME_ATTR_NAME, displayName);
 		objectTypes.add(element);
 	}
-	
+
 	public void addDestinationsProvider(String providerId, String destinationCategory, String preferencePageId, String providerInstanceFqName, IDestinationsProvider providerInstance) {
 		IConfigurationElement element = createConfigurationElement(DestinationsProviderExtensionParser.XP_ELEMENT_NAME);
 		setAttribute(element, DestinationsProviderExtensionParser.PROVIDER_ID_ATTR, providerId);
@@ -123,21 +123,21 @@
 		when(element.getName()).thenReturn(elementName);
 		return element;
 	}
-	
+
 	public void addDestinationCategory(String categoryId, String categoryName, Class<? extends ISearchDestination> destinationsClass) {
 		IConfigurationElement element = createConfigurationElement(DestinationsCategoryExtensionParser.XP_ELEMENT_NAME);
 		setAttribute(element, DestinationsCategoryExtensionParser.CATEGORY_ID_ATTRIBUTE, categoryId);
 		setAttribute(element, DestinationsCategoryExtensionParser.CATEGORY_DISPLAY_NAME_ATTRIBUTE, categoryName);
-		
+
 		if(destinationsClass!=null) {
 			String bundleSymbolicName = FrameworkUtil.getBundle(destinationsClass).getSymbolicName();
 			setNamespaceIdentifier(element, bundleSymbolicName);
 			setAttribute(element, DestinationsCategoryExtensionParser.DESTINATIONS_CLASS_ATTRIBUTE, destinationsClass.getName());
 		}
-		
+
 		destinationCategories.add(element);
 	}
-	
+
 	public void addDestinationCategory(String categoryId, String categoryName) {
 		addDestinationCategory(categoryId, categoryName, null);
 	}
@@ -175,15 +175,15 @@
 			categoriesList.add(categoryElement);
 		}
 		setChildren(searchProviderElement, categoriesList, SearchProvidersExtensionParser.CATEGORY_ELEMENT_NAME);
-		
+
 		searchProviders.add(searchProviderElement);
-		
+
 	}
 
 	private void setChildren(IConfigurationElement element, List<IConfigurationElement> children, String childrenElementsName) {
 		when(element.getChildren(childrenElementsName)).thenReturn(children.toArray(new IConfigurationElement[]{}));
 	}
-	
+
 	public void addSearchSubdestination(String id, String displayName, String categoryId, String objectTypeId, String defaultSelected, String... conflicts) {
 		IConfigurationElement subdestinationElement = createConfigurationElement(SearchSubdestinationExtensionParser.XP_ELEMENT_NAME);
 		setAttribute(subdestinationElement, SearchSubdestinationExtensionParser.ID_ATTR, id);
@@ -191,7 +191,7 @@
 		setAttribute(subdestinationElement, SearchSubdestinationExtensionParser.CATEGORY_ID_ATTR, categoryId);
 		setAttribute(subdestinationElement, SearchSubdestinationExtensionParser.OBJECT_ATTR, objectTypeId);
 		setAttribute(subdestinationElement, SearchSubdestinationExtensionParser.DEFAULT_SELECTED_ATTR, defaultSelected);
-		
+
 		List<IConfigurationElement> conflictsList = new ArrayList<IConfigurationElement>();
 		for(String conflictId: conflicts) {
 			IConfigurationElement conflictElement = mock(IConfigurationElement.class);
@@ -199,10 +199,10 @@
 			conflictsList.add(conflictElement);
 		}
 		setChildren(subdestinationElement, conflictsList, SearchSubdestinationExtensionParser.CONFLICT_ELEMENT_NAME);
-		
+
 		searchSubdestinations.add(subdestinationElement);
 	}
-	
+
 	public void addAdvancedSearchParamsUiContributor(String id, String searchProviderId, String contributorFQName, IAdvancedSearchParamsUiContributor contributorInstance) {
 		IConfigurationElement advancedUiContributorElement = createAdvancedParamsUiElement(id, searchProviderId, contributorFQName);
 
@@ -218,7 +218,7 @@
 		setAttribute(advancedUiContributorElement, AdvancedSearchParamsUiContribXpParser.CONTRIBUTOR_CLASS_NAME_ATTR_NAME, contributorFQName);
 		return advancedUiContributorElement;
 	}
-	
+
 	public void addExceptionThrowingAdvancedSearchParamsUiContributor(String id, String searchProviderId, String contributorFQName) {
 		IConfigurationElement advancedUiContributorElement = createAdvancedParamsUiElement(id, searchProviderId, contributorFQName);
 		setupCreateExecutableExtensionToThrowException(advancedUiContributorElement, AdvancedSearchParamsUiContribXpParser.CONTRIBUTOR_CLASS_NAME_ATTR_NAME);
@@ -228,7 +228,7 @@
 	protected void setupCreateExecutableExtensionToThrowException(IConfigurationElement element, String classAttributeName) {
 		setupCreateExecutableExtensionToThrowException(element, classAttributeName, new CoreException(StatusUtils.statusError("TEST")));
 	}
-	
+
 	protected void setupCreateExecutableExtensionToThrowException(IConfigurationElement element, String classAttributeName, CoreException toThrow) {
 		try {
 			when(element.createExecutableExtension(classAttributeName)).thenThrow(toThrow);
@@ -236,7 +236,7 @@
 			throw new RuntimeException(e);
 		}
 	}
-	
+
 	public void addCustomResultUiContributor(String id, String searchProviderId, String contributorFQName, ISearchResultCustomUiCreator cobntributorInstance) {
 		IConfigurationElement customResultUiElement = createCustomResultUIElement(id, searchProviderId, contributorFQName);
 		setExecutableExtension(customResultUiElement, cobntributorInstance, CustomResultUiXpParser.UI_CREATOR_CLASS_NAME_ATTR_NAME);
@@ -251,7 +251,7 @@
 		setAttribute(customResultUiElement, CustomResultUiXpParser.UI_CREATOR_CLASS_NAME_ATTR_NAME, contributorFQName);
 		return customResultUiElement;
 	}
-	
+
 	public void addExceptionThrowingCustomResultUiContributor(String id, String searchProviderId, String contributorFQName) {
 		IConfigurationElement customResultUiElement = createCustomResultUIElement(id, searchProviderId, contributorFQName);
 		setupCreateExecutableExtensionToThrowException(customResultUiElement, CustomResultUiXpParser.UI_CREATOR_CLASS_NAME_ATTR_NAME);
@@ -264,22 +264,27 @@
 		clearState();
 		return extensionRegistry;
 	}
-	
-	public void addSearchDestinationsConfigurator(final String id, final String destinationProviderId, final String configuratorFQName, final ISearchDestinationConfigurator<?> configuratorInstance) throws CoreException {
-	    searchDestinationConfigurators.add(createSearchDestinationsConfiguratorElement(id, destinationProviderId, configuratorFQName, configuratorInstance));
+
+	public void addSearchDestinationsConfigurator(final String id, final String destinationProviderId, final String configuratorFQName, final ISearchDestinationConfigurator<?> configuratorInstance) {
+		searchDestinationConfigurators.add(createSearchDestinationsConfiguratorElement(id, destinationProviderId, configuratorFQName, configuratorInstance));
 	}
 
-	private IConfigurationElement createSearchDestinationsConfiguratorElement(final String id, final String destinationProviderId, final String configuratorFQName, final ISearchDestinationConfigurator<?> configuratorInstance) throws CoreException {
-	    final IConfigurationElement element = createConfigurationElement(SearchDestinationsConfiguratorXPParser.CONFIGURATOR_ELEMENT_NAME);
-        setAttribute(element, SearchDestinationsConfiguratorXPParser.CONFIGURATOR_ID_ELEMENT_NAME, id);
-        setAttribute(element, SearchDestinationsConfiguratorXPParser.CONFIGURATOR_DEST_PROVIDER_ID_ELEMENT_NAME, destinationProviderId);
-        setAttribute(element, SearchDestinationsConfiguratorXPParser.CONFIGURATOR_FQNAME_ELEMENT_NAME, configuratorFQName);
-        when(element.createExecutableExtension(eq(SearchDestinationsConfiguratorXPParser.CONFIGURATOR_FQNAME_ELEMENT_NAME))).thenReturn(configuratorInstance);
-        
-        return element;
-    }
+	private IConfigurationElement createSearchDestinationsConfiguratorElement(final String id, final String destinationProviderId, final String configuratorFQName, final ISearchDestinationConfigurator<?> configuratorInstance) {
+		try{
+			final IConfigurationElement element = createConfigurationElement(SearchDestinationsConfiguratorXPParser.CONFIGURATOR_ELEMENT_NAME);
+			setAttribute(element, SearchDestinationsConfiguratorXPParser.CONFIGURATOR_ID_ELEMENT_NAME, id);
+			setAttribute(element, SearchDestinationsConfiguratorXPParser.CONFIGURATOR_DEST_PROVIDER_ID_ELEMENT_NAME, destinationProviderId);
+			setAttribute(element, SearchDestinationsConfiguratorXPParser.CONFIGURATOR_FQNAME_ELEMENT_NAME, configuratorFQName);
+			when(element.createExecutableExtension(eq(SearchDestinationsConfiguratorXPParser.CONFIGURATOR_FQNAME_ELEMENT_NAME))).thenReturn(configuratorInstance);
 
-    protected void setupExtensionPointConfigElements() {
+			return element;
+		} catch(CoreException ex) {
+			throw new IllegalStateException(ex);
+		}
+
+	}
+
+	protected void setupExtensionPointConfigElements() {
 		when(objectTypesExtensionPoint.getConfigurationElements()).thenReturn(objectTypes.toArray(new IConfigurationElement[]{}));
 		when(destinationProvidersExtensionPoint.getConfigurationElements()).thenReturn(destinationProviders.toArray(new IConfigurationElement[]{}));
 		when(destinationCategoriesExtensionPoint.getConfigurationElements()).thenReturn(destinationCategories.toArray(new IConfigurationElement[]{}));
@@ -288,14 +293,14 @@
 		when(searchProvidersExtensionPoint.getConfigurationElements()).thenReturn(searchProviders.toArray(new IConfigurationElement[]{}));
 		when(searchSubdestinationsExtensionPoint.getConfigurationElements()).thenReturn(searchSubdestinations.toArray(new IConfigurationElement[]{}));
 		when(advancedSearchUiContributorsExtensionPoint.getConfigurationElements()).thenReturn(advancedSearchUiContributors.toArray(new IConfigurationElement[]{}));
-        when(customResultUiContributorsExtensionPoint.getConfigurationElements()).thenReturn(customResultUiContributors.toArray(new IConfigurationElement[]{}));
-        when(searchDestinationsConfiguratorExtensionPoint.getConfigurationElements()).thenReturn(searchDestinationConfigurators.toArray(new IConfigurationElement[]{}));
+		when(customResultUiContributorsExtensionPoint.getConfigurationElements()).thenReturn(customResultUiContributors.toArray(new IConfigurationElement[]{}));
+		when(searchDestinationsConfiguratorExtensionPoint.getConfigurationElements()).thenReturn(searchDestinationConfigurators.toArray(new IConfigurationElement[]{}));
 	}
-	
+
 	protected void clearState() {
 		for(List<?> list: new List<?>[]{objectTypes, destinationProviders, destinationCategories, loadProviders, storeProviders, searchProviders, searchSubdestinations,
 				advancedSearchUiContributors, customResultUiContributors, searchDestinationConfigurators})
 			list.clear();
 	}
-	
+
 }
diff --git a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/OpenPropsViewActionTest.java b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/OpenPropsViewActionTest.java
index 0c95291..7b644a1 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/OpenPropsViewActionTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/OpenPropsViewActionTest.java
@@ -13,6 +13,7 @@
 import static org.junit.Assert.assertEquals;
 
 import org.eclipse.platform.discovery.ui.internal.view.impl.OpenPropsViewAction;
+import org.eclipse.ui.IViewPart;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.PlatformUI;
 import org.junit.Before;
@@ -37,19 +38,22 @@
 		PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
 			@Override
 			public void run() {
-				IWorkbenchPage page = PlatformUI.getWorkbench()
-						.getActiveWorkbenchWindow().getActivePage();
-				if (page.getActivePart().getTitle().equals("Properties")) {
-					throw new IllegalStateException(
-							"properties view is the active part at the beginning of the fixture so the test cant decide if the"
-									+ "console action code behaves correctly");
-				}
-
+				closePropsIfOpen();
 				
-				action.run();
-				page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+				action.run();
+				
+				IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
 				assertEquals("properties view is not the active part", "Properties", page.getActivePart().getTitle());
-			}
+			}
+
 		});
+	}
+	
+	private void closePropsIfOpen() {
+		IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+		if (page.getActivePart().getTitle().equals("Properties")) {
+			//close it, so we can verify search console opened it
+			page.hideView((IViewPart) page.getActivePart());
+		}
 	}
 }
diff --git a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/pageobjects/SearchConsolePageObject.java b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/pageobjects/SearchConsolePageObject.java
index 7640289..98ac3cf 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/pageobjects/SearchConsolePageObject.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/pageobjects/SearchConsolePageObject.java
@@ -1,7 +1,6 @@
 package org.eclipse.platform.discovery.ui.test.comp.internal.pageobjects;
 
 import static org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable.syncExec;
-import static org.junit.Assert.assertNotNull;
 
 import java.text.MessageFormat;
 import java.util.Collection;
@@ -11,6 +10,7 @@
 
 import org.eclipse.platform.discovery.core.api.ISearchContext;
 import org.eclipse.platform.discovery.core.api.SearchEvent;
+import org.eclipse.platform.discovery.core.internal.IDestinationsManager;
 import org.eclipse.platform.discovery.core.internal.ISearchSession;
 import org.eclipse.platform.discovery.core.internal.SearchConsoleController;
 import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleControllerOutputView;
@@ -24,6 +24,7 @@
 import org.eclipse.platform.discovery.ui.api.impl.DefaultSessionIds;
 import org.eclipse.platform.discovery.ui.internal.plugin.DiscoveryUIMessages;
 import org.eclipse.platform.discovery.ui.internal.search.advancedparams.IAdvancedSearchParamsDisplayer;
+import org.eclipse.platform.discovery.ui.internal.view.ISearchProviderSelector;
 import org.eclipse.platform.discovery.ui.internal.view.SearchConsoleView;
 import org.eclipse.platform.discovery.ui.internal.view.impl.ITabbedSessionDisplayer;
 import org.eclipse.platform.discovery.ui.test.comp.internal.pageobjects.swtbot.SWTBotHyperlink;
@@ -45,24 +46,24 @@
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotButton;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotCombo;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotLabel;
-import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
 import org.eclipse.ui.IWorkbenchPartSite;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.Hyperlink;
-import org.hamcrest.BaseMatcher;
-import org.hamcrest.Description;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
 
 public class SearchConsolePageObject extends InShellPageObject
 {
-	private static final String TEST_PREFERENCE_PAGE_NAME = "DiscoveryUiTestPreferencePage";
 
 	@Mock
 	private IWorkbenchPartSite viewSite;
+	
+	@Mock
+	private IDestinationsManager destManager;
+
 
 	private final ISearchProviderConfiguration searchProviderConfiguration;
 	private final ITabbedSessionDisplayer<ISearchContext> sessionDisplayer;
@@ -103,6 +104,7 @@
 			{
 				parent.setLayout(new FillLayout(SWT.VERTICAL));
 				consoleView = new PageObjectConsoleView();
+				
 				consoleView.setEnvironment(env);
 				consoleView.setUiContext(uiContext);
 				consoleView.createPartControl(parent);
@@ -125,6 +127,7 @@
 				consoleView.setEnvironment(env);
 				viewController = new PageObjectController(searchProviderConfiguration, consoleView, env, null, DefaultSessionIds.mainSearchSessionId);
 				consoleView.registerController(viewController);
+				consoleView.setDestinationsManager(destManager);
 				consoleView.initializationCompleted();
 			}
 		});
@@ -162,12 +165,9 @@
 		final SWTBotHyperlink manageDestinationsLink = new SWTBotHyperlink(botUtils.findOneChildControlOfExactType(shell().widget, Hyperlink.class, true));
 		manageDestinationsLink.click();
 
-		final SWTBotShell preferencePageShell = findPreferencePageShell();
-		verifyDestinationPreferenceDisplayed(preferencePageShell);
-		verifyGenericDestinationPreferencesDisplayed(preferencePageShell);
-		preferencePageShell.close();
+		Mockito.verify(destManager).manageDestinations(Mockito.same(shell().widget), Mockito.same(consoleView.getSearchProviderSelector().getActiveDestinationCategory()));
+		
 	}
-
     public void verifySearchPerformed(final String objectTypeId, final String destinationName, final String keyword)
 	{
 		Assert.assertNotNull("Search was not invoked", viewController.lastSearchEvent);
@@ -380,57 +380,6 @@
 		return new SWTBotCombo(findSiblingByLabel(DiscoveryUIMessages.GROUP_BY_LABEL, Combo.class));
 	}
 
-	private SWTBotShell findPreferencePageShell()
-	{
-		final SWTBotShell preferencePageShell = botUtils.findShell(new BaseMatcher<Shell>()
-		{
-			@Override
-			public boolean matches(Object item)
-			{
-				if (!(item instanceof SWTBotShell))
-				{
-					return false;
-				}
-				final SWTBotShell theShell = (SWTBotShell)item;
-				try
-				{
-					theShell.bot().tree().getTreeItem(TEST_PREFERENCE_PAGE_NAME);
-					return true;
-				}
-				catch (WidgetNotFoundException e)
-				{
-					return false;
-				}
-			}
-
-			@Override
-			public void describeTo(Description description)
-			{
-			}
-		});
-
-		return preferencePageShell;
-	}
-
-	private void verifyDestinationPreferenceDisplayed(final SWTBotShell preferencePageShell)
-	{
-		preferencePageShell.bot().tree().getTreeItem(TEST_PREFERENCE_PAGE_NAME).click();
-		try
-		{
-			preferencePageShell.bot().text("MyTestLabel");
-			preferencePageShell.bot().button("Button1");
-		}
-		catch (WidgetNotFoundException e)
-		{
-		}
-	}
-	
-    private void verifyGenericDestinationPreferencesDisplayed(SWTBotShell preferencePageShell) {
-        assertNotNull(preferencePageShell.bot().tree().getTreeItem("Search Destinations"));
-    }
-
-	
-
 	private class PageObjectConsoleView extends SearchConsoleView
 	{
 		protected ISearchProviderConfiguration getSearchProviderConfiguration()
@@ -455,6 +404,10 @@
 		{
 			return advancedParamsDisplayer;
 		}
+		
+		protected ISearchProviderSelector getSearchProviderSelector() {
+			return searchProviderSelector;
+		}
 	}
 
 	private class PageObjectController extends SearchConsoleController
diff --git a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/pageobjects/swtbot/SWTBotHyperlink.java b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/pageobjects/swtbot/SWTBotHyperlink.java
index da11ae2..37bb780 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/pageobjects/swtbot/SWTBotHyperlink.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/pageobjects/swtbot/SWTBotHyperlink.java
@@ -14,19 +14,19 @@
 import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException;
 import org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot;
 import org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBotControl;
-import org.eclipse.ui.forms.widgets.Hyperlink;
+import org.eclipse.ui.forms.widgets.AbstractHyperlink;
 
-public class SWTBotHyperlink extends AbstractSWTBotControl<Hyperlink>
+public class SWTBotHyperlink extends AbstractSWTBotControl<AbstractHyperlink>
 {
 	private final MouseUtils mouseUtils;
 
-	public SWTBotHyperlink(Hyperlink w) throws WidgetNotFoundException
+	public SWTBotHyperlink(AbstractHyperlink h) throws WidgetNotFoundException
 	{
-		super(w);
+		super(h);
 		this.mouseUtils = new MouseUtils(display);
 	}
 
-	public AbstractSWTBot<Hyperlink> click()
+	public AbstractSWTBot<AbstractHyperlink> click()
 	{
 		mouseUtils.clickOn(this);
 		return this;
diff --git a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/pageobjects/swtbot/SWTBotSection.java b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/pageobjects/swtbot/SWTBotSection.java
index bac4e91..d363904 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/pageobjects/swtbot/SWTBotSection.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/pageobjects/swtbot/SWTBotSection.java
@@ -10,10 +10,12 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.test.comp.internal.pageobjects.swtbot;
 
-import org.eclipse.platform.discovery.ui.test.comp.internal.pageobjects.swtbot.utils.MouseUtils;
 import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException;
+import org.eclipse.swtbot.swt.finder.finders.ChildrenControlFinder;
+import org.eclipse.swtbot.swt.finder.matchers.WidgetOfType;
 import org.eclipse.swtbot.swt.finder.results.BoolResult;
 import org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBotControl;
+import org.eclipse.ui.forms.widgets.AbstractHyperlink;
 import org.eclipse.ui.forms.widgets.Section;
 
 /**
@@ -26,19 +28,16 @@
  */
 public class SWTBotSection extends AbstractSWTBotControl<Section>
 {
-	private final MouseUtils mouseUtils;
-
 	public SWTBotSection(Section w) throws WidgetNotFoundException
 	{
 		super(w);
-		this.mouseUtils = new MouseUtils(display);
 	}
 
 	public void toggle()
 	{
-		mouseUtils.clickOn(this, 10, 5);
-		
-	};
+		AbstractHyperlink hyperlink = new ChildrenControlFinder(widget).findControls(WidgetOfType.widgetOfType(AbstractHyperlink.class)).get(0);
+		new SWTBotHyperlink(hyperlink).click();
+	}
 
 	private boolean isExpanded()
 	{
diff --git a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/pageobjects/swtbot/utils/MouseUtils.java b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/pageobjects/swtbot/utils/MouseUtils.java
index 6c57377..eb5e444 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/pageobjects/swtbot/utils/MouseUtils.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/pageobjects/swtbot/utils/MouseUtils.java
@@ -126,7 +126,7 @@
 		moveMouseTo(new Point(targetX, targetY));
 	}
 
-	private void click()
+	public void click()
 	{
 		final Robot awtRobot = awtRobot();
 		syncExec(new VoidResult()
diff --git a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/AbstractTooltipConfiguratorTest.java b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/AbstractTooltipConfiguratorTest.java
index 0966374..9069796 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/AbstractTooltipConfiguratorTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/AbstractTooltipConfiguratorTest.java
@@ -22,7 +22,7 @@
 import org.eclipse.platform.discovery.ui.internal.tooltip.AbstractTooltipConfigurator.TooltipFormTextBuilder;
 
 
-public class AbstractTooltipConfiguratorTest extends MockObjectTestCase
+public abstract class AbstractTooltipConfiguratorTest extends MockObjectTestCase
 {
 	protected Mock<IFormTextBuilder> textBuilder;
 	private IToolTipConfigurator configurator;
