starting to implement undo/redo