add caching with a basic file cache