builder pattern improved