properly implement undo