add the ability to undo