Index: src/org/openstreetmap/josm/data/UndoRedoHandler.java
===================================================================
--- src/org/openstreetmap/josm/data/UndoRedoHandler.java	(revision 14821)
+++ src/org/openstreetmap/josm/data/UndoRedoHandler.java	(working copy)
@@ -316,8 +316,10 @@
      */
     public void afterAdd(List<? extends Command> cmds) {
         if (cmds != null) {
-            for (Command cmd : cmds) {
-                fireEvent(new CommandAddedEvent(this, cmd));
+            int n = cmds.size();
+            // performance: only add the last commands if the list is longer than the max allowed
+            for (int i = Math.max(0, n - Config.getPref().getInt("undo.max", 1000)); i < n; i++) {
+                fireEvent(new CommandAddedEvent(this, cmds.get(i)));
             }
         }
         fireCommandsChanged();
