* Add factory-method patter
* code clean up