adjust class/c to compute projections once, instead of once per
use of the resulting contract