Make repositories return iterators instead of fullblown arrays. The results will be mostly used once anyway. Add a method Provider::components that returns all components of a provider.