diff --git a/addlaws.c b/addlaws.c
index cce993ffd90f0b7b0a5857b3855ea901ac630655..705a315cd7857220fb32c0248e4f2f7124dd81c6 100644
--- a/addlaws.c
+++ b/addlaws.c
@@ -16,8 +16,6 @@
 
 #include "addlaws.h"
 
-#define DEBUG_ADD_LAWS 0
-
 #if DEBUG_ADD_LAWS >= 1
 void
 print_mpz_from_mpres(mpres_t x, mpmod_t n)
@@ -799,63 +797,6 @@ twisted_hessian_sub(ell_point_t R, ell_point_t P, ell_point_t Q, ell_curve_t E,
     return ret;
 }
 
-/* 8M+6S+M_a            +M_{1/d}  or 2*M_d */
-int
-twisted_hessian_triplicate(ell_point_t R, ell_point_t P, 
-			   ATTRIBUTE_UNUSED ell_curve_t E, mpmod_t n)
-{
-    // R = buf[0], V = [1], S = [2], A = [3], B = [4], C = [5], D = [6]
-    // E = [7], tmp = [8]
-    /*	R:=(a*X1^3) mod N;*/
-    mpres_sqr(E->buf[0], P->x, n);
-    mpres_mul(E->buf[0], E->buf[0], P->x, n);
-    mpres_mul(E->buf[0], E->buf[0], E->a4, n);
-    /*	V:=Y1^3 mod N;*/
-    mpres_sqr(E->buf[1], P->y, n);
-    mpres_mul(E->buf[1], E->buf[1], P->y, n);
-    /*	S:=Z1^3 mod N;*/
-    mpres_sqr(E->buf[2], P->z, n);
-    mpres_mul(E->buf[2], E->buf[2], P->z, n);
-    /*	A:=(R-V)^2 mod N;*/
-    mpres_sub(E->buf[3], E->buf[0], E->buf[1], n);
-    mpres_sqr(E->buf[3], E->buf[3], n);
-    /*	B:=(R-S)^2 mod N;*/
-    mpres_sub(E->buf[4], E->buf[0], E->buf[2], n);
-    mpres_sqr(E->buf[4], E->buf[4], n);
-    /*	C:=(V-S)^2 mod N;*/
-    mpres_sub(E->buf[5], E->buf[1], E->buf[2], n);
-    mpres_sqr(E->buf[5], E->buf[5], n);
-    /*	D:=(A+C) mod N;*/
-    mpres_add(E->buf[6], E->buf[3], E->buf[5], n);
-    /*	E:=(A+B) mod N;*/
-    mpres_add(E->buf[7], E->buf[3], E->buf[4], n);
-// ok if 1/d small
-// 	X3:=(1/d)*(R+V+S)*(B+D) mod N;
-    // d small => scaling Y3 and Z3*/
-    /* 	X3:=(R+V+S)*(B+D) mod N; */
-    mpres_add(R->x, E->buf[0], E->buf[1], n);
-    mpres_add(R->x, R->x, E->buf[2], n);
-    mpres_add(E->buf[8], E->buf[4], E->buf[6], n);
-    mpres_mul(R->x, R->x, E->buf[8], n);
-    /*	Y3:=(2*R*C-V*(C-E)) mod N;*/
-    mpres_mul(R->y, E->buf[0], E->buf[5], n);
-    mpres_add(R->y, R->y, R->y, n);
-    mpres_sub(E->buf[8], E->buf[5], E->buf[7], n);
-    mpres_mul(E->buf[8], E->buf[8], E->buf[1], n);
-    mpres_sub(R->y, R->y, E->buf[8], n);
-    /*	Z3:=(2*V*B-R*(B-D)) mod N;*/
-    mpres_mul(R->z, E->buf[1], E->buf[4], n);
-    mpres_add(R->z, R->z, R->z, n);
-    mpres_sub(E->buf[8], E->buf[4], E->buf[6], n);
-    mpres_mul(E->buf[8], E->buf[8], E->buf[0], n);
-    mpres_sub(R->z, R->z, E->buf[8], n);
-    /*	Y3:=(d*Y3) mod N; scaling when d small*/
-    mpres_mul(R->y, R->y, E->a6, n);
-    /*	Z3:=(d*Z3) mod N; scaling when d small*/
-    mpres_mul(R->z, R->z, E->a6, n);
-    return 1;
-}
-
 /* INPUT: a*x^3+y^3+1 = d*x*y
    OUTPUT: Y^2 = X^3+A*X+B
    If a=c^3, then curve isom to Hessian (c*x)^3+y^3+1=3*(d/(3*c))*(c*x)*y
diff --git a/addlaws.h b/addlaws.h
index 0177ec84fe06fa57fa356bcda3e1cf6d44c2e284..b05db5002aa554cd4b40d370a2f636c971637026 100644
--- a/addlaws.h
+++ b/addlaws.h
@@ -1,3 +1,4 @@
+#define DEBUG_ADD_LAWS 0
 #define USE_ADD_SUB_CHAINS 0
 
 #define pt_is_equal(P, Q) (mpz_cmp((P)->x, (Q)->x) == 0 \
@@ -9,13 +10,6 @@ int pt_is_zero(ell_point_t P, ATTRIBUTE_UNUSED mpmod_t n);
 void pt_set_to_zero(ell_point_t P, mpmod_t n);
 void pt_assign(ell_point_t Q, ell_point_t P, ATTRIBUTE_UNUSED mpmod_t n);
 void pt_neg(ell_point_t P, mpmod_t n);
-void pt_many_set_to_zero(ell_point_t *tP, int nE, mpmod_t n);
-void pt_many_neg(ell_point_t *tP, int nE, mpmod_t n);
-void pt_many_assign(ell_point_t *tQ, ell_point_t *tP, int nE, mpmod_t n);
-void pt_many_print(ell_curve_t *tE, ell_point_t *tP, int nE, mpmod_t n);
-void print_mpz_from_mpres(mpres_t x, mpmod_t n);
-int pt_many_duplicate(mpz_t f, ell_point_t *tQ, ell_point_t *tP, ell_curve_t *tE, int nE, mpmod_t n, mpres_t *num, mpres_t *den, mpres_t *inv, char *ok);
-int pt_many_mul(mpz_t f, ell_point_t *tQ, ell_point_t *tP, ell_curve_t *tE, int nE, mpz_t e, mpmod_t n, mpres_t *num, mpres_t *den, mpres_t *inv, char *ok);
 
 int hessian_to_weierstrass(mpz_t f, mpres_t x, mpres_t y, mpres_t D, mpmod_t n);
 int