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 2372ed9..1195ae0 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
@@ -87,10 +87,17 @@
 
 	@Override
 	public void addDestination() {
-		ISearchDestinationsConfiguratorDescription configDescription = getConfigDescription(destinationProviderId);		
-		ISearchDestinationConfigurator<?> configurator = configDescription.createConfigurator();
+		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId");
+		ISearchDestinationConfigurator<?> configurator = getConfigDescription(destinationProviderId).createConfigurator();
 		IStatus result = configurator.createDestination(view.getShell());
+		updateView(result);
+	}
+
+	private void updateView(IStatus result) {
 		view.setStatus(result);
+		if(result.isOK()) {
+			view.setInput(buildInput());
+		}
 	}
 
 	private ISearchDestinationsConfiguratorDescription getConfigDescription(String destinationProviderId) {
@@ -103,21 +110,29 @@
 	}
 
 	@Override
-	public void editDestination() {
-		// TODO Auto-generated method stub
+	 public <T extends ISearchDestination> void editDestination() {
+		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId");
+		ContractChecker.nullCheckField(destination, "destination");
+		
+		ISearchDestinationConfigurator<T> configurator = getConfigDescription(destinationProviderId).createConfigurator();
+		@SuppressWarnings("unchecked") IStatus result = configurator.editDestination(view.getShell(), (T)destination);
+		updateView(result);
 		
 	}
 
 	@Override
-	public void removeDestination() {
-		// TODO Auto-generated method stub
+	public <T extends ISearchDestination> void removeDestination() {
+		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId");
+		ContractChecker.nullCheckField(destination, "destination");
 		
+		ISearchDestinationConfigurator<T> configurator = getConfigDescription(destinationProviderId).createConfigurator();
+		@SuppressWarnings("unchecked") IStatus result = configurator.deleteDestination(view.getShell(), (T)destination);
+		updateView(result);		
 	}
 
 	@Override
 	public void testDestination() {
-		// TODO Auto-generated method stub
-		
+		throw new RuntimeException("not implemented");
 	}
 
 }
diff --git a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/IDestinationConfiguratorsPresenter.java b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/IDestinationConfiguratorsPresenter.java
index 9b54729..6a1cfc0 100644
--- a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/IDestinationConfiguratorsPresenter.java
+++ b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/IDestinationConfiguratorsPresenter.java
@@ -1,10 +1,12 @@
 package org.eclipse.platform.discovery.destprefs.internal.prefpage.ui;
 
+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
+
 public interface IDestinationConfiguratorsPresenter {
     public void selectionChanged(final DestinationConfiguratorSelection selection);
     public void addDestination();
-    public void editDestination();
-    public void removeDestination();
-    public void testDestination();
+    public <T extends ISearchDestination> void editDestination();
+    public <T extends ISearchDestination> void removeDestination();
+    public <T extends ISearchDestination> void testDestination();
     public void setView(final IDestinationConfiguratorsView view);
 }
diff --git a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/xpparser/ISearchDestinationsConfiguratorDescription.java b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/xpparser/ISearchDestinationsConfiguratorDescription.java
index d35b8f7..a81366b 100644
--- a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/xpparser/ISearchDestinationsConfiguratorDescription.java
+++ b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/xpparser/ISearchDestinationsConfiguratorDescription.java
@@ -11,6 +11,7 @@
 package org.eclipse.platform.discovery.destprefs.internal.xpparser;
 
 import org.eclipse.platform.discovery.destprefs.api.ISearchDestinationConfigurator;
+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
 
 /**
  * Wrapper interface for {@link ISearchDestinationConfigurator}
@@ -18,7 +19,7 @@
  *
  */
 public interface ISearchDestinationsConfiguratorDescription {
-    public ISearchDestinationConfigurator<?> createConfigurator();
+    public <T extends ISearchDestination> ISearchDestinationConfigurator<T> createConfigurator();
     public String destinationProviderId();
     public String destinationCategoryId();
 }
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 3213d2e..ce62534 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
@@ -36,11 +36,11 @@
 	public final String CONFIGURATOR_2_FQNAME = "org.eclipse.platform.discovery.destprefs.configurator_2";
 
 	@Mock
-	public ISearchDestinationConfigurator<?> configurator_1_1;
+	public ISearchDestinationConfigurator<ISearchDestination> configurator_1_1;
 	@Mock
-	public ISearchDestinationConfigurator<?> configurator_1_2;
+	public ISearchDestinationConfigurator<ISearchDestination> configurator_1_2;
 	@Mock
-	public ISearchDestinationConfigurator<?> configurator_2;
+	public ISearchDestinationConfigurator<ISearchDestination> configurator_2;
 	@Mock
 	public ISearchProviderConfiguration searchProviderConfiguration;
 	@Mock
diff --git a/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/prefpage/DestinationConfiguratorsPresenterTest.java b/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/prefpage/DestinationConfiguratorsPresenterTest.java
index be1c790..388b23d 100644
--- a/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/prefpage/DestinationConfiguratorsPresenterTest.java
+++ b/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/prefpage/DestinationConfiguratorsPresenterTest.java
@@ -13,6 +13,7 @@
 import org.eclipse.platform.discovery.destprefs.internal.prefpage.ui.IDestinationConfiguratorsView;
 import org.eclipse.platform.discovery.destprefs.internal.xpparser.SearchDestinationsConfiguratorXPParser;
 import org.eclipse.platform.discovery.destprefs.test.unit.SearchConfiguratorsFixture;
+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
 import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;
 import org.eclipse.platform.discovery.testutils.utils.registry.ExtensionRegistryBuilder;
 import org.eclipse.swt.widgets.Shell;
@@ -60,6 +61,7 @@
 
 			private Collection<CategoryDestinationProviderPair> actual;
 
+			@SuppressWarnings("unchecked")
 			@Override
 			public boolean matches(Object item) {
 				actual = (Collection<CategoryDestinationProviderPair>)item;
@@ -95,7 +97,7 @@
 	}
 	
 	@Test
-	public void destinationSelectedThenAdd() {
+	public void add() {
 		presenter.selectionChanged(new DestinationConfiguratorSelection(fixture.DEST_PROVIDER_CAT1_1, fixture.destination1));
 
 		ISearchDestinationConfigurator<?> expectedConfigurator = fixture.configurator_1_1;
@@ -106,6 +108,24 @@
 		
 		Mockito.verify(expectedConfigurator).createDestination(Mockito.same(viewShell));
 		Mockito.verify(view).setStatus(Mockito.same(result));
+		Mockito.verify(view, Mockito.times(2)).setInput(Mockito.argThat(matchesFixture()));
+
+	}
+	
+	@Test
+	public void addNotOkDoesNotSetInput() {
+		presenter.selectionChanged(new DestinationConfiguratorSelection(fixture.DEST_PROVIDER_CAT1_1, fixture.destination1));
+
+		ISearchDestinationConfigurator<?> expectedConfigurator = fixture.configurator_1_1;
+		IStatus result = Status.CANCEL_STATUS;
+		Mockito.when(expectedConfigurator.createDestination(Mockito.same(viewShell))).thenReturn(result);
+		
+		presenter.addDestination();	
+		
+		Mockito.verify(expectedConfigurator).createDestination(Mockito.same(viewShell));
+		Mockito.verify(view).setStatus(Mockito.same(result));
+		Mockito.verify(view, Mockito.times(1)).setInput(Mockito.argThat(matchesFixture()));
+
 	}
 	
 	@Test
@@ -118,4 +138,37 @@
 		Mockito.verify(view).setTestEnabled(Mockito.eq(false));
 
 	}
+	
+	@Test
+	public void edit() {
+		presenter.selectionChanged(new DestinationConfiguratorSelection(fixture.DEST_PROVIDER_CAT1_1, fixture.destination1));
+
+		ISearchDestinationConfigurator<ISearchDestination> expectedConfigurator = fixture.configurator_1_1;
+		IStatus result = Status.OK_STATUS;
+		Mockito.when(expectedConfigurator.editDestination(Mockito.same(viewShell), Mockito.same(fixture.destination1))).thenReturn(result);
+		
+		presenter.editDestination();	
+		
+		Mockito.verify(expectedConfigurator).editDestination(Mockito.same(viewShell), Mockito.same(fixture.destination1));
+		Mockito.verify(view).setStatus(Mockito.same(result));
+		Mockito.verify(view, Mockito.times(2)).setInput(Mockito.argThat(matchesFixture()));
+
+	}
+	
+	@Test
+	public void remove() {
+		presenter.selectionChanged(new DestinationConfiguratorSelection(fixture.DEST_PROVIDER_CAT1_1, fixture.destination1));
+
+		ISearchDestinationConfigurator<ISearchDestination> expectedConfigurator = fixture.configurator_1_1;
+		IStatus result = Status.OK_STATUS;
+		Mockito.when(expectedConfigurator.deleteDestination(Mockito.same(viewShell), Mockito.same(fixture.destination1))).thenReturn(result);
+		
+		presenter.removeDestination();	
+		
+		Mockito.verify(expectedConfigurator).deleteDestination(Mockito.same(viewShell), Mockito.same(fixture.destination1));
+		Mockito.verify(view).setStatus(Mockito.same(result));
+		Mockito.verify(view, Mockito.times(2)).setInput(Mockito.argThat(matchesFixture()));
+
+	}
+	
 }
