add caching layer