refactoring, sub-factory