getting caching and multiple levels of dirtiness to work