wired up undo and redo