added persistent caching