Separate provider logic into simple value based provider and callback based provider