Added caching
Added TryGetValue
Added Logging