change sub caching behavior
refactor