fully functional revert