this one is rigorous, but I think it could have better parameter choices