factory should not be exposed