implemented builder pattern