added builder design pattern