We should maybe define a Provider interface with generic type...