diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/dependencies/BundleDependencyEditorPage.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/dependencies/BundleDependencyEditorPage.java
index 97f2483..acb669e 100644
--- a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/dependencies/BundleDependencyEditorPage.java
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/dependencies/BundleDependencyEditorPage.java
@@ -253,14 +253,10 @@
 				Object selection = ((IStructuredSelection) event.getSelection()).getFirstElement();
 				if (selection instanceof IBundle) {
 					IBundle bundle = (IBundle) selection;
-					searchControl.getSearchText().setText(bundle.getSymbolicName() + " (" + bundle.getVersion() + ")");
-					history.add(bundle.getSymbolicName() + " (" + bundle.getVersion() + ")");
-					forwardAction.setEnabled(history.canForward());
-					backAction.setEnabled(history.canBack());
-					toolBarManager.update(true);
-					new BundleDependencyUpdateJob(true).schedule();
+					setSelection(bundle);
 				}
 			}
+			
 		});
 
 		toolBarManager = sform.getToolBarManager();
@@ -322,8 +318,7 @@
 								
 								try {
 									Map<Long, IBundle> allBundles = admin.getBundles(monitor);
-									contentProvider.setBundles(allBundles);
-									viewer.setInput(allBundles.values());
+									refresh(allBundles);
 								} catch (CoreException e) {
 									EditorUIPlugin.log(e);
 									setStatus(e.getStatus());
@@ -378,6 +373,20 @@
 		});
 
 	}
+	
+	private void setSelection(IBundle bundle) {
+		setSelection(bundle.getSymbolicName(), bundle.getVersion());
+	}
+	
+	private void setSelection(String bundle, String version) {
+		String filterText = bundle + " (" + version + ")";
+		searchControl.getSearchText().setText(filterText);
+		history.add(filterText);
+		forwardAction.setEnabled(history.canForward());
+		backAction.setEnabled(history.canBack());
+		toolBarManager.update(true);
+		new BundleDependencyUpdateJob(true).schedule();
+	}
 
 	public AbstractZoomableViewer getZoomableViewer() {
 		return viewer;
@@ -423,19 +432,37 @@
 	}
 
 	public void showDependenciesForBundle(String bundle, String version) {
-		this.searchControl.getSearchText().setText(bundle + " (" + version + ")");
-		refreshAction.run();
+		setSelection(bundle, version);
 	}
 
 	public void openDependencyPage(IBundle bundle) {
+		BundleInformationEditorPage infoPage = openInformationPage();
+		if (infoPage != null) {
+			commandManager.getServerEditor().setActiveEditor(infoPage);
+			infoPage.showOverviewForBundle(bundle);
+		}
+	}
+	
+	public void refresh(Map<Long, IBundle> bundles) {
+		if (bundles != null && !bundles.equals(viewer.getInput())) {
+			contentProvider.setBundles(bundles);
+			viewer.setInput(bundles.values());
+			
+			BundleInformationEditorPage infoPage = openInformationPage();
+			if (infoPage != null) {
+				infoPage.refresh(bundles);
+			}
+		}
+	}
+	
+	private BundleInformationEditorPage openInformationPage() {
 		IEditorPart[] parts = commandManager.getServerEditor().findEditors(getEditorInput());
 		for (IEditorPart part : parts) {
 			if (part instanceof BundleInformationEditorPage) {
-				commandManager.getServerEditor().setActiveEditor(part);
-				((BundleInformationEditorPage) part).showOverviewForBundle(bundle);
-				break;
+				return (BundleInformationEditorPage) part;
 			}
 		}
+		return null;
 	}
 
 	@Override
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationMasterDetailsBlock.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationMasterDetailsBlock.java
index 807ecfd..18af1c6 100644
--- a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationMasterDetailsBlock.java
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationMasterDetailsBlock.java
@@ -139,8 +139,14 @@
 	 * @param bundles
 	 */
 	public void refresh(Map<Long, IBundle> bundles) {
-		masterPart.refresh(bundles);
-		detailsPart.refresh(bundles);
+		if (masterPart.refresh(bundles)) {
+			detailsPart.refresh(bundles);
+			
+			BundleDependencyEditorPage depPage = getDependencyPage();
+			if (depPage != null) {
+				depPage.refresh(bundles);
+			}
+		}
 	}
 
 	private void hookResizeListener() {
@@ -249,16 +255,23 @@
 	public void clear() {
 		masterPart.clear();
 	}
-
-	public void openDependencyPage(String bundle, String version) {
+	
+	private BundleDependencyEditorPage getDependencyPage() {
 		IEditorPart[] parts = serverEditor.findEditors(editorPage.getEditorInput());
 		for (IEditorPart part : parts) {
 			if (part instanceof BundleDependencyEditorPage) {
-				serverEditor.setActiveEditor(part);
-				((BundleDependencyEditorPage) part).showDependenciesForBundle(bundle, version);
-				break;
+				return (BundleDependencyEditorPage) part;
 			}
 		}
+		return null;
+	}
+
+	public void openDependencyPage(String bundle, String version) {
+		BundleDependencyEditorPage depPage = getDependencyPage();
+		if (depPage != null) {
+			serverEditor.setActiveEditor(depPage);
+			depPage.showDependenciesForBundle(bundle, version);
+		}
 	}
 
 	/**
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationMasterPart.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationMasterPart.java
index 6173c14..317afc2 100644
--- a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationMasterPart.java
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/internal/overview/BundleInformationMasterPart.java
@@ -365,9 +365,13 @@
 		section.setTextClient(toolbar);
 	}
 
-	public void refresh(Map<Long, IBundle> bundles) {
-		super.refresh();
-		bundleTableViewer.setInput(bundles);
+	public boolean refresh(Map<Long, IBundle> bundles) {
+		if (bundles != null && !bundles.equals(bundleTableViewer.getInput())) {
+			super.refresh();
+			bundleTableViewer.setInput(bundles);
+			return true;
+		}
+		return false;
 	}
 
 	public void clear() {
diff --git a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/overview/BundleInformationEditorPage.java b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/overview/BundleInformationEditorPage.java
index e69ae23..94c0bdc 100644
--- a/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/overview/BundleInformationEditorPage.java
+++ b/plugins/org.eclipse.libra.framework.editor.ui/src/org/eclipse/libra/framework/editor/ui/overview/BundleInformationEditorPage.java
@@ -11,20 +11,12 @@
  *******************************************************************************/
 package org.eclipse.libra.framework.editor.ui.overview;
 
-import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
 
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.operation.IRunnableContext;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.libra.framework.editor.core.IOSGiFrameworkAdmin;
 import org.eclipse.libra.framework.editor.core.model.IBundle;
 import org.eclipse.libra.framework.editor.ui.internal.AbstractBundleEditorPage;
-import org.eclipse.libra.framework.editor.ui.internal.EditorUIPlugin;
 import org.eclipse.libra.framework.editor.ui.internal.overview.BundleInformationMasterDetailsBlock;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.forms.ManagedForm;
@@ -85,34 +77,11 @@
 	}
 
 	public void showOverviewForBundle(final IBundle bundle) {
-		IRunnableWithProgress runnable = new IRunnableWithProgress() {
+		masterDetailsBlock.setSelectedBundle(bundle);
+	}
 
-			public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-				monitor.beginTask("Updating bundle status from server", 1);
-				Display.getDefault().asyncExec(new Runnable() {
-					public void run() {
-						IOSGiFrameworkAdmin admin = (IOSGiFrameworkAdmin) masterDetailsBlock.getServer()
-								.loadAdapter(IOSGiFrameworkAdmin.class, monitor);
-						try {
-							masterDetailsBlock.refresh(admin.getBundles(monitor));
-							masterDetailsBlock.setSelectedBundle(bundle);
-						} catch (CoreException e) {
-							EditorUIPlugin.log(e);
-						}
-					}
-				});
-				monitor.worked(1);
-			}
-		};
-
-		try {
-			IRunnableContext context = new ProgressMonitorDialog(Display.getCurrent().getActiveShell());
-			context.run(true, true, runnable);
-		}
-		catch (InvocationTargetException e1) {
-		}
-		catch (InterruptedException e2) {
-		}
+	public void refresh(Map<Long, IBundle> bundles) {
+		masterDetailsBlock.refresh(bundles);
 	}
 
 }
