Index: /trunk/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java	(revision 13222)
+++ /trunk/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java	(revision 13223)
@@ -8,6 +8,4 @@
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.stream.Stream;
-
-import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.data.SelectionChangedListener;
@@ -20,5 +18,7 @@
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
+import org.openstreetmap.josm.tools.bugreport.ReportedException;
 
 /**
@@ -72,4 +72,9 @@
             return Objects.equals(listener, that.listener);
         }
+
+        @Override
+        public String toString() {
+            return "OldListenerInfo [listener=" + listener + ']';
+        }
     }
 
@@ -97,4 +102,9 @@
             DataListenerInfo that = (DataListenerInfo) o;
             return Objects.equals(listener, that.listener);
+        }
+
+        @Override
+        public String toString() {
+            return "DataListenerInfo [listener=" + listener + ']';
         }
     }
@@ -196,5 +206,9 @@
     public void selectionChanged(SelectionChangeEvent event) {
         fireEvent(immedatelyListeners, event);
-        SwingUtilities.invokeLater(() -> fireEvent(inEDTListeners, event));
+        try {
+            GuiHelper.runInEDTAndWaitWithException(() -> fireEvent(inEDTListeners, event));
+        } catch (ReportedException e) {
+            throw BugReport.intercept(e).put("event", event).put("inEDTListeners", inEDTListeners);
+        }
     }
 
