add builder pattern.