refactor using Builder