added caching system