a bit of caching on file reads