added undo/redo and clear