The usual undo history of a program would be a list-like data structure. When an editing action is tracked, it is simply appended to the list. If you undo a number of edits, they are lost when when you make new edits.
The C15's undo history, on the other hand, is a tree-like data structure. All editing actions are tracked and new branches are created when you undo edits and then make new changes.
Using this mechanism, there will be no loss of editing steps, as all steps and branches are accessible. Nevertheless, an ever-growing undo tree will require lots of memory and may be capable of slowing down the system. This can be avoided by making a certain element the new root of the tree (elements prior to that position will be lost in this case) or by deleting inactive branches of the undo tree.
Within a branch, the mechanism is quite similar to the ordinary list-based undo, providing backward and forward navigation via undo or redo. The extended tree-based functionalities emerge when navigating to other branches.
The C15 undo mechanism tracks different user actions. Parameter selection, edits to parameters, preset recalls and edits to presets and banks can be undone. However, the modulation mechanism is not integrated into the undo mechanism, as it is part of the user performance.