Splitting the caching logic out of the package model