Refactor the factory and choice preparer