add builder pattern