An in-depth look at the implementation of an Undo/Redo system in a large complex visual application