add undo, redo, load from file