not that it matter much but since this is now a public entry point of the API should `propertyFactory` also be null checked?