Hi, I see that mpn_mul() starts by checking for a square: if (up == vp && un == vn) { mpn_sqr_n (prodp, up, un); return prodp[2 * un - 1]; } This is contrary to the gmp-philosophy "use special functions for special cases" (for example mpn_mul_2exp). Why is mpn_sqr_n not exported? Similarly, we might want a "sqr" function for other classes (mpz, mpf, mpq). Paul