Separate caching data into wrapper class & make most data updates async.

Also a variety of other performance tweaks.