add caching ability