Finish refactor to Factory design, re add validator method