wrapped in require optional factory