implementing provider handlers and caching