Improved version with caching