Moved for tidy abstract factory