Factory pattern first Draft