computationally intense, but seems to work better