working on multivariate types