caching + hash