Index: src/org/openstreetmap/josm/actions/SimplifyWayAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/SimplifyWayAction.java	(revision 16899)
+++ src/org/openstreetmap/josm/actions/SimplifyWayAction.java	(working copy)
@@ -46,6 +46,7 @@
 import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.Notification;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.spi.preferences.IPreferences;
 import org.openstreetmap.josm.tools.GBC;
@@ -514,13 +515,22 @@
                 UndoRedoHandler.getInstance().undo();
             }
             double threshold = errorModel.getNumber().doubleValue();
+            MainApplication.worker.submit(() -> updateNodesToRemove(this.ways, threshold));
+        }
+
+        private synchronized void updateNodesToRemove(List<Way> ways, double threshold) {
+            if (lastCommand != null && lastCommand.equals(UndoRedoHandler.getInstance().getLastCommand())) {
+                GuiHelper.runInEDTAndWait(() -> UndoRedoHandler.getInstance().undo());
+            }
             int removeNodes = simplifyWaysCountNodesRemoved(ways, threshold);
+            GuiHelper.runInEDTAndWait(() -> {
             nodesToRemove.setText(trn(
                     "(about {0} node to remove)",
                     "(about {0} nodes to remove)", removeNodes, removeNodes));
+            });
             lastCommand = SimplifyWayAction.buildSimplifyWaysCommand(ways, threshold);
             if (lastCommand != null) {
-                UndoRedoHandler.getInstance().add(lastCommand);
+                GuiHelper.runInEDTAndWait(() -> UndoRedoHandler.getInstance().add(lastCommand));
             }
         }
     }
