add caching mechainsm