handle multiple type parameters