Well it needs to be a concrete class, if it can be a shared one though. It probably could be, though i'd leave it to future refactoring. Auto-selection on these and some classification of the caches need to be done...