Refactoring Cached proposal

This is a refactoring proposal for issue #2058.
It some more methods to make the overall thing easier to use but the basic idea is here.