still working on the caching logic