It might be possible to make this lazy as well.