implemented various caching strategies