add some more caching boilerplate