make canopytype use caching