It turns out that the bug is indeed not in Org, but in Emacs. The part of combine-change-call which creates the undo-list element was totally broken. For example, with a buffer-undo-list like nil ofter body has been evaluated, the buffer-undo-list after combine-change-call is (apply ... #'undo--wrap-and-run-primitive-undo ... ()) nil which is clearly wrong, because and should be considered as a single undo step. IOW, after combine-change-call buffer-undo-list should be: (apply ... #'undo--wrap-and-run-primitive-undo ... ( )) nil Patch attached.