diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/AbstractPostSelectionProvider.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/AbstractPostSelectionProvider.java
deleted file mode 100644
index 707bbcf..0000000
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/AbstractPostSelectionProvider.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2012, 2021 Stephan Wahlbrink and others.
- # 
- # This program and the accompanying materials are made available under the
- # terms of the Eclipse Public License 2.0 which is available at
- # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
- # which is available at https://www.apache.org/licenses/LICENSE-2.0.
- # 
- # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
- # 
- # Contributors:
- #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
- #=============================================================================*/
-
-package org.eclipse.statet.ecommons.ui.util;
-
-import org.eclipse.jface.util.SafeRunnable;
-import org.eclipse.jface.viewers.IPostSelectionProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-
-import org.eclipse.statet.ecommons.collections.FastList;
-
-
-public abstract class AbstractPostSelectionProvider implements IPostSelectionProvider {
-	
-	
-	private final FastList<ISelectionChangedListener> fSelectionListeners= new FastList<>(ISelectionChangedListener.class);
-	private final FastList<ISelectionChangedListener> fPostSelectionListeners= new FastList<>(ISelectionChangedListener.class);
-	
-	
-	public AbstractPostSelectionProvider() {
-	}
-	
-	
-	@Override
-	public void addSelectionChangedListener(final ISelectionChangedListener listener) {
-		fSelectionListeners.add(listener);
-	}
-	
-	@Override
-	public void removeSelectionChangedListener(final ISelectionChangedListener listener) {
-		fSelectionListeners.remove(listener);
-	}
-	
-	
-	@Override
-	public void addPostSelectionChangedListener(final ISelectionChangedListener listener) {
-		fPostSelectionListeners.add(listener);
-	}
-	
-	@Override
-	public void removePostSelectionChangedListener(final ISelectionChangedListener listener) {
-		fPostSelectionListeners.remove(listener);
-	}
-	
-	
-	protected void fireSelectionChanged(final SelectionChangedEvent event) {
-		final ISelectionChangedListener[] listeners = fSelectionListeners.toArray();
-		for (int i = 0; i < listeners.length; i++) {
-			final ISelectionChangedListener l = listeners[i];
-			SafeRunnable.run(new SafeRunnable() {
-				@Override
-				public void run() {
-					l.selectionChanged(event);
-				}
-			});
-		}
-	}
-	
-	protected void firePostSelectionChanged(final SelectionChangedEvent event) {
-		final ISelectionChangedListener[] listeners = fPostSelectionListeners.toArray();
-		for (int i = 0; i < listeners.length; i++) {
-			final ISelectionChangedListener l = listeners[i];
-			SafeRunnable.run(new SafeRunnable() {
-				@Override
-				public void run() {
-					l.selectionChanged(event);
-				}
-			});
-		}
-	}
-	
-}
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/PostSelectionProviderProxy.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/PostSelectionProviderProxy.java
index e363159..3f38160 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/PostSelectionProviderProxy.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/PostSelectionProviderProxy.java
@@ -21,6 +21,8 @@
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
 
+import org.eclipse.statet.ecommons.ui.viewers.AbstractPostSelectionProvider;
+
 
 public class PostSelectionProviderProxy extends AbstractPostSelectionProvider {
 	
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/AbstractPostSelectionProvider.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/AbstractPostSelectionProvider.java
new file mode 100644
index 0000000..31cdd67
--- /dev/null
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/AbstractPostSelectionProvider.java
@@ -0,0 +1,77 @@
+/*=============================================================================#
+ # Copyright (c) 2012, 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.ecommons.ui.viewers;
+
+import java.util.List;
+
+import org.eclipse.jface.util.SafeRunnable;
+import org.eclipse.jface.viewers.IPostSelectionProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+
+import org.eclipse.statet.jcommons.collections.CopyOnWriteList;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+
+@NonNullByDefault
+public abstract class AbstractPostSelectionProvider implements IPostSelectionProvider {
+	
+	
+	private final CopyOnWriteList<ISelectionChangedListener> selectionListeners= new CopyOnWriteList<>();
+	
+	private final CopyOnWriteList<ISelectionChangedListener> postSelectionListeners= new CopyOnWriteList<>();
+	
+	
+	public AbstractPostSelectionProvider() {
+	}
+	
+	
+	@Override
+	public void addSelectionChangedListener(final ISelectionChangedListener listener) {
+		this.selectionListeners.add(listener);
+	}
+	
+	@Override
+	public void removeSelectionChangedListener(final ISelectionChangedListener listener) {
+		this.selectionListeners.remove(listener);
+	}
+	
+	
+	@Override
+	public void addPostSelectionChangedListener(final ISelectionChangedListener listener) {
+		this.postSelectionListeners.add(listener);
+	}
+	
+	@Override
+	public void removePostSelectionChangedListener(final ISelectionChangedListener listener) {
+		this.postSelectionListeners.remove(listener);
+	}
+	
+	
+	protected void fireSelectionChanged(final SelectionChangedEvent event) {
+		final List<ISelectionChangedListener> listeners = this.selectionListeners.toList();
+		for (final ISelectionChangedListener listener : listeners) {
+			SafeRunnable.run(() -> listener.selectionChanged(event));
+		}
+	}
+	
+	protected void firePostSelectionChanged(final SelectionChangedEvent event) {
+		final List<ISelectionChangedListener> listeners = this.postSelectionListeners.toList();
+		for (final ISelectionChangedListener listener : listeners) {
+			SafeRunnable.run(() -> listener.selectionChanged(event));
+		}
+	}
+	
+}
