added caching for canopy