added static caching with timeout