Now using WeakHashMap for cache