these could be part of a base `ProviderInterface` to avoid repetition.