refactored builder