modified builder pattern