Extract provider processing logic to a method

This change extracts the provider processing logic to a separate method
which can be invoked from a subtype, providing a custom provider.