pulled out some track caching stuff into another model