begin to use builder pattern