more sensible naming and arguments order for factory