rewrote using lazy builder