Restructured the provider, and added a common provider-prototype