added redo functionality