move this
add in the lazy and build_by traits