Refactor SchematicWorker to SchematicFactory and simplify