add WithRecover helper