added builder pattern