runExternalCode(Runnable runnable)
diff --git a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/SelectionAggregator.java b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/SelectionAggregator.java
index 08df85a..820ab1f 100644
--- a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/SelectionAggregator.java
+++ b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/SelectionAggregator.java
@@ -158,13 +158,17 @@
 
 					if (activePart == part) {
 						myContext.set(IServiceConstants.ACTIVE_SELECTION, selection);
-						pauseRecording();
-						notifyListeners(part, selection);
-						resumeRecoding();
+						runExternalCode(new Runnable() {
+							public void run() {
+								notifyListeners(part, selection);
+							}
+						});
 					} else {
-						pauseRecording();
-						notifyTargetedListeners(part, selection);
-						resumeRecoding();
+						runExternalCode(new Runnable() {
+							public void run() {
+								notifyTargetedListeners(part, selection);
+							}
+						});
 						// we don't need to keep tracking non-active parts unless
 						// they have targeted listeners
 						String partId = part.getElementId();