adding caching layer