refactor using Builders