Optimization suggested by Matthijs Kooijman.