providers abstraction layer