redo implementation