This can be made lazy as well.