start implementing Undo, still under construction