it's handled at the beginning of the factory function