diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/WorkspaceUndoUtil.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/WorkspaceUndoUtil.java
index e4f204e..eb01025 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/WorkspaceUndoUtil.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/WorkspaceUndoUtil.java
@@ -690,11 +690,20 @@
 		return true;
 	}
 
-	/*
+	/**
 	 * Return the shell described by the specified adaptable, or the active
 	 * shell if no shell has been specified in the adaptable.
+	 * 
+	 * @param uiInfo
+	 *            the IAdaptable (or <code>null</code>) provided by the
+	 *            caller in order to supply UI information for prompting the
+	 *            user if necessary. When this parameter is not
+	 *            <code>null</code>, it contains an adapter for the
+	 *            org.eclipse.swt.widgets.Shell.class
+	 * 
+	 * @return the Shell that can be used to show information
 	 */
-	private static Shell getShell(IAdaptable uiInfo) {
+	public static Shell getShell(IAdaptable uiInfo) {
 		if (uiInfo != null) {
 			Shell shell = (Shell) uiInfo.getAdapter(Shell.class);
 			if (shell != null) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkAction.java
index 7366aba..5d4852c 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkAction.java
@@ -13,8 +13,10 @@
 
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.operations.IUndoableOperation;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.actions.SelectionProviderAction;
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
@@ -43,13 +45,18 @@
 	/**
 	 * Execute the specified undoable operation
 	 */
-	void execute(IUndoableOperation operation, String message,
+	void execute(IUndoableOperation operation, String title,
 			IProgressMonitor monitor, IAdaptable uiInfo) {
 		try {
 			PlatformUI.getWorkbench().getOperationSupport()
 					.getOperationHistory().execute(operation, monitor, uiInfo);
 		} catch (ExecutionException e) {
-			IDEWorkbenchPlugin.log(message, e);
+			if (e.getCause() instanceof CoreException) {
+	           ErrorDialog.openError(view.getShell(), title,
+	                    null, ((CoreException)e.getCause()).getStatus());
+			} else {
+				IDEWorkbenchPlugin.log(title, e);
+			}
 		}
 	}
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/BookmarkView.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/BookmarkView.java
index 477135a..e74a82f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/BookmarkView.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/BookmarkView.java
@@ -22,6 +22,7 @@
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.viewers.CellEditor;
 import org.eclipse.jface.viewers.ICellModifier;
@@ -99,10 +100,18 @@
 							}
 						}
 					} catch (ExecutionException e) {
-						IDEWorkbenchPlugin.log(MarkerMessages.errorModifyingBookmark, e); 
+						if (e.getCause() instanceof CoreException) {
+							ErrorDialog.openError(
+									getSite().getShell(),
+									MarkerMessages.errorModifyingBookmark, null, ((CoreException)e.getCause()).getStatus()); 
+						} else {
+							// something rather unexpected occurred.
+							IDEWorkbenchPlugin.log(MarkerMessages.errorModifyingBookmark, e); 
+						}
 					} catch (CoreException e) {
-						IDEWorkbenchPlugin.log(MarkerMessages.errorModifyingBookmark, e); 
-										
+						ErrorDialog.openError(
+								getSite().getShell(),
+								MarkerMessages.errorModifyingBookmark, null, e.getStatus()); 
 					}
 				}
 			}
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogMarkerProperties.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogMarkerProperties.java
index 1145dbe..299d6c0 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogMarkerProperties.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogMarkerProperties.java
@@ -23,6 +23,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.TrayDialog;
@@ -535,7 +536,12 @@
 						.getOperationHistory().execute(op,
 								null, WorkspaceUndoUtil.getUIInfoAdapter(getShell()));
 			} catch (ExecutionException e) {
-				IDEWorkbenchPlugin.log(e.getMessage(), e);
+				if (e.getCause() instanceof CoreException) {
+					ErrorDialog.openError(
+	                        getShell(),
+	                        MarkerMessages.Error, null, ((CoreException)e.getCause()).getStatus());
+				} else
+					IDEWorkbenchPlugin.log(e.getMessage(), e);
 			}
 		}
 	}
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSelectionProviderAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSelectionProviderAction.java
index ffc1ad6..33af605 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSelectionProviderAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSelectionProviderAction.java
@@ -15,12 +15,15 @@
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.operations.IUndoableOperation;
 import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.actions.SelectionProviderAction;
+import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 
 /**
@@ -92,13 +95,20 @@
 	/**
 	 * Execute the specified undoable operation
 	 */
-	void execute(IUndoableOperation operation, String message,
+	void execute(IUndoableOperation operation, String title,
 			IProgressMonitor monitor, IAdaptable uiInfo) {
 		try {
 			PlatformUI.getWorkbench().getOperationSupport()
 					.getOperationHistory().execute(operation, monitor, uiInfo);
 		} catch (ExecutionException e) {
-			IDEWorkbenchPlugin.log(message, e);
+			if (e.getCause() instanceof CoreException) {
+				ErrorDialog
+						.openError(WorkspaceUndoUtil.getShell(uiInfo), title,
+								null, ((CoreException) e.getCause())
+										.getStatus());
+			} else {
+				IDEWorkbenchPlugin.log(title, e);
+			}
 		}
 	}
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TaskView.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TaskView.java
index ef65b7d..af8f3bc 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TaskView.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TaskView.java
@@ -18,9 +18,11 @@
 import org.eclipse.core.commands.operations.IUndoContext;
 import org.eclipse.core.commands.operations.IUndoableOperation;
 import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.viewers.CellEditor;
 import org.eclipse.jface.viewers.CheckboxCellEditor;
@@ -118,7 +120,14 @@
 						}
 						concreteMarker.refresh();
 					} catch (ExecutionException e) {
-						IDEWorkbenchPlugin.log(MarkerMessages.errorModifyingTask, e);
+						if (e.getCause() instanceof CoreException) {
+							ErrorDialog.openError(
+									getSite().getShell(),
+									MarkerMessages.errorModifyingTask, null, ((CoreException)e.getCause()).getStatus()); 
+						} else {
+							// something rather unexpected occurred.
+							IDEWorkbenchPlugin.log(MarkerMessages.errorModifyingTask, e); 
+						}
 					}				
 				}
 			}
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskAction.java
index ca21807..a25309c 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskAction.java
@@ -13,69 +13,78 @@
 
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.operations.IUndoableOperation;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 
 /**
- * This is the base class of all the local actions used
- * in the task list view.
+ * This is the base class of all the local actions used in the task list view.
  */
 abstract class TaskAction extends Action {
 
-    private TaskList taskList;
+	private TaskList taskList;
 
-    /**
-     * TaskAction constructor.
-     */
-    protected TaskAction(TaskList tasklist, String id) {
-        super();
-        this.taskList = tasklist;
-        setId(id);
-    }
+	/**
+	 * TaskAction constructor.
+	 */
+	protected TaskAction(TaskList tasklist, String id) {
+		super();
+		this.taskList = tasklist;
+		setId(id);
+	}
 
-    /**
-     * Returns the shell to use within actions.
-     */
-    protected Shell getShell() {
-        return taskList.getSite().getShell();
-    }
+	/**
+	 * Returns the shell to use within actions.
+	 */
+	protected Shell getShell() {
+		return taskList.getSite().getShell();
+	}
 
-    /**
-     * Returns the task list viewer.
-     */
-    protected TaskList getTaskList() {
-        return taskList;
-    }
+	/**
+	 * Returns the task list viewer.
+	 */
+	protected TaskList getTaskList() {
+		return taskList;
+	}
 
-    /**
-     * Stores the current state value of this toggle action
-     * into the dialog store using action ID as a key.
-     */
-    protected void storeValue() {
-        IDialogSettings workbenchSettings = TaskList.getPlugin()
-                .getDialogSettings();
-        IDialogSettings settings = workbenchSettings.getSection("TaskAction");//$NON-NLS-1$
-        if (settings == null) {
+	/**
+	 * Stores the current state value of this toggle action into the dialog
+	 * store using action ID as a key.
+	 */
+	protected void storeValue() {
+		IDialogSettings workbenchSettings = TaskList.getPlugin()
+				.getDialogSettings();
+		IDialogSettings settings = workbenchSettings.getSection("TaskAction");//$NON-NLS-1$
+		if (settings == null) {
 			settings = workbenchSettings.addNewSection("TaskAction");//$NON-NLS-1$
 		}
-        settings.put(getId(), isChecked());
-    }
-    
+		settings.put(getId(), isChecked());
+	}
+
 	/**
 	 * Execute the specified undoable operation
 	 */
-	void execute(IUndoableOperation operation, String message,
+	void execute(IUndoableOperation operation, String title,
 			IProgressMonitor monitor, IAdaptable uiInfo) {
 		try {
 			PlatformUI.getWorkbench().getOperationSupport()
 					.getOperationHistory().execute(operation, monitor, uiInfo);
 		} catch (ExecutionException e) {
-			IDEWorkbenchPlugin.log(message, e);
+			if (e.getCause() instanceof CoreException) {
+				ErrorDialog
+						.openError(WorkspaceUndoUtil.getShell(uiInfo), title,
+								null, ((CoreException) e.getCause())
+										.getStatus());
+			} else {
+				IDEWorkbenchPlugin.log(title, e);
+			}
 		}
 	}
 
