added Builder Pattern