easier to reuse and extend lazy api