Add redo and undo support