added builder pattern.