implemented revert