diff --git a/ecommons/org.eclipse.statet.ecommons.runtime.ui/src/org/eclipse/statet/ecommons/ts/ui/workbench/WorkbenchToolRegistry.java b/ecommons/org.eclipse.statet.ecommons.runtime.ui/src/org/eclipse/statet/ecommons/ts/ui/workbench/WorkbenchToolRegistry.java
index e772789..bb24e24 100644
--- a/ecommons/org.eclipse.statet.ecommons.runtime.ui/src/org/eclipse/statet/ecommons/ts/ui/workbench/WorkbenchToolRegistry.java
+++ b/ecommons/org.eclipse.statet.ecommons.runtime.ui/src/org/eclipse/statet/ecommons/ts/ui/workbench/WorkbenchToolRegistry.java
@@ -18,6 +18,7 @@
 
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
+import org.eclipse.statet.jcommons.ts.core.Tool;
 
 
 /**
@@ -64,6 +65,6 @@
 	 * 
 	 * @return best workbench page, never <code>null</code>
 	 */
-	IWorkbenchPage findWorkbenchPage(final org.eclipse.statet.jcommons.ts.core.Tool process);
+	IWorkbenchPage findWorkbenchPage(final Tool process);
 	
 }
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/UIAccess.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/UIAccess.java
index f4e36fc..5cf82cf 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/UIAccess.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/UIAccess.java
@@ -16,7 +16,6 @@
 
 import static org.eclipse.statet.jcommons.lang.NullDefaultLocation.PARAMETER;
 
-import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Supplier;
 
 import org.eclipse.core.runtime.CoreException;
@@ -30,11 +29,13 @@
 import org.eclipse.ui.PlatformUI;
 
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 
 /**
  * Access to UI resources from other threads.
  */
+@NonNullByDefault
 public class UIAccess {
 	
 	/**
@@ -54,47 +55,40 @@
 	 * @param shell optional shell
 	 * @return display
 	 */
-	public static Display getDisplay(final Shell shell) {
-		Display display = null;
+	public static Display getDisplay(final @Nullable Shell shell) {
+		Display display= null;
 		if (shell != null) {
-			display = shell.getDisplay();
+			display= shell.getDisplay();
 		}
 		if (display == null) {
-			display = PlatformUI.getWorkbench().getDisplay();
+			display= getDisplay();
 		}
 		return display;
 	}
 	
-	public static IWorkbenchWindow getActiveWorkbenchWindow(final boolean inUIThread) {
+	public static @Nullable IWorkbenchWindow getActiveWorkbenchWindow(final boolean inUIThread) {
 		if (inUIThread) {
 			return PlatformUI.getWorkbench().getActiveWorkbenchWindow();
 		}
-		final Display display = getDisplay();
+		final Display display= getDisplay();
 		if (display.getThread() == Thread.currentThread()) {
 			return PlatformUI.getWorkbench().getActiveWorkbenchWindow();
 		}
-		final AtomicReference<IWorkbenchWindow> windowRef= new AtomicReference<>();
-		display.syncExec(new Runnable() {
-			@Override
-			public void run() {
-				windowRef.set(PlatformUI.getWorkbench().getActiveWorkbenchWindow());
-			}
-		});
-		return windowRef.get();
+		return syncExecGet(() -> PlatformUI.getWorkbench().getActiveWorkbenchWindow(), display);
 	}
 	
-	public static IWorkbenchPage getActiveWorkbenchPage(final boolean inUIThread) {
-		final IWorkbenchWindow window = getActiveWorkbenchWindow(inUIThread);
+	public static @Nullable IWorkbenchPage getActiveWorkbenchPage(final boolean inUIThread) {
+		final IWorkbenchWindow window= getActiveWorkbenchWindow(inUIThread);
 		if (window != null) {
 			return window.getActivePage();
 		}
 		return null;
 	}
 	
-	public static IWorkbenchPart getActiveWorkbenchPart(final boolean inUIThread) {
-		final IWorkbenchWindow window = getActiveWorkbenchWindow(inUIThread);
+	public static @Nullable IWorkbenchPart getActiveWorkbenchPart(final boolean inUIThread) {
+		final IWorkbenchWindow window= getActiveWorkbenchWindow(inUIThread);
 		if (window != null) {
-			final IWorkbenchPage activePage = window.getActivePage();
+			final IWorkbenchPage activePage= window.getActivePage();
 			if (activePage != null) {
 				return activePage.getActivePart();
 			}
@@ -102,8 +96,8 @@
 		return null;
 	}
 	
-	public static Shell getActiveWorkbenchShell(final boolean inUIThread) {
-		final IWorkbenchWindow window = getActiveWorkbenchWindow(inUIThread);
+	public static @Nullable Shell getActiveWorkbenchShell(final boolean inUIThread) {
+		final IWorkbenchWindow window= getActiveWorkbenchWindow(inUIThread);
 		if (window != null) {
 			return window.getShell();
 		}
@@ -116,39 +110,55 @@
 		public void run() throws CoreException;
 	}
 	
-	
-	public static void checkedSyncExec(final CheckedRunnable runnable)
+	public static void checkedSyncExec(final CheckedRunnable runnable, final Display display)
 			throws CoreException {
-		final AtomicReference<CoreException> error= new AtomicReference<>();
-		UIAccess.getDisplay().syncExec(new Runnable() {
+		final var catchRunnable= new Runnable() {
+			
+			private volatile @Nullable CoreException error;
 			
 			@Override
 			public void run() {
 				try {
 					runnable.run();
-				} catch (final CoreException e) {
-					error.set(e);
+				}
+				catch (final CoreException e) {
+					this.error= e;
 				}
 			}
-		});
-		if (error.get() != null) {
-			throw error.get();
+			
+		};
+		display.syncExec(catchRunnable);
+		final var error= catchRunnable.error;
+		if (error != null) {
+			throw error;
 		}
 	}
 	
+	public static void checkedSyncExec(final CheckedRunnable runnable)
+			throws CoreException {
+		checkedSyncExec(runnable, getDisplay());
+	}
+	
 	@NonNullByDefault({ PARAMETER })
-	public static <T> T syncExecGet(final Supplier<T> getter) {
-		class GetRunnable implements Runnable {
+	public static <T> T syncExecGet(final Supplier<T> getter, final Display display) {
+		final var getRunnable= new Runnable() {
+			
 			@SuppressWarnings("null")
-			volatile T value;
+			private volatile T value;
+			
 			@Override
 			public void run() {
 				this.value= getter.get();
 			}
-		}
-		final GetRunnable runnable= new GetRunnable();
-		UIAccess.getDisplay().syncExec(runnable);
-		return runnable.value;
+			
+		};
+		display.syncExec(getRunnable);
+		return getRunnable.value;
+	}
+	
+	@NonNullByDefault({ PARAMETER })
+	public static <T> T syncExecGet(final Supplier<T> getter) {
+		return syncExecGet(getter, getDisplay());
 	}
 	
 	
@@ -166,7 +176,7 @@
 	 */
 	public static final boolean isOkToUse(final Viewer viewer) {
 		Control control;
-		return ((viewer != null) && ((control = viewer.getControl()) != null)
+		return ((viewer != null) && ((control= viewer.getControl()) != null)
 				&& !control.isDisposed() && (Display.getCurrent() != null));
 	}
 	
