diff --git a/ChangeLog b/ChangeLog
index 0516a0406fa2d60d2e6d1cbbd2a64e5de2e622bb..0f0e2173db84d5b44441c01cad268cd6d45dd6c5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2019-12-15  Niels Möller  <nisse@lysator.liu.se>
+
+	* ecc-dup-eh.c (ecc_dup_eh): Eliminate one unneeded ecc_modp_add.
+
 2019-12-14  Niels Möller  <nisse@lysator.liu.se>
 
 	* ecc-mul-m.c (ecc_mul_m): New file and function. Implements
diff --git a/ecc-dup-eh.c b/ecc-dup-eh.c
index a850346c9f3b7e77ed3b9413a65ac4b45abf413c..6b678a40e415b6d5ee0c5625814cc4010a75dd0b 100644
--- a/ecc-dup-eh.c
+++ b/ecc-dup-eh.c
@@ -67,12 +67,13 @@ ecc_dup_eh (const struct ecc_curve *ecc,
      F = -C+D				B, C, D, F
      H = Z1^2		sqr		B, C, D, F, H
      J = 2*H - F			B, C, D, F, J
-     X3 = (B-C-D)*J	mul		C, D, F, J
+     X3 = (B-C-D)*J	mul		C, F, J  (Replace C <-- C+D)
      Y3 = F*(C+D)	mul		F, J
      Z3 = F*J		mul
 
      3M+4S
   */
+  /* FIXME: Could reduce scratch need by reusing D storage. */
 #define B scratch
 #define C (scratch  + ecc->p.size)
 #define D (scratch  + 2*ecc->p.size)
@@ -92,8 +93,8 @@ ecc_dup_eh (const struct ecc_curve *ecc,
   /* F, */
   ecc_modp_sub (ecc, F, D, C);
   /* B - C - D */
+  ecc_modp_add (ecc, C, C, D);
   ecc_modp_sub (ecc, B, B, C);
-  ecc_modp_sub (ecc, B, B, D);
   /* J */
   ecc_modp_add (ecc, r, r, r);
   ecc_modp_sub (ecc, J, r, F);
@@ -101,7 +102,6 @@ ecc_dup_eh (const struct ecc_curve *ecc,
   /* x' */
   ecc_modp_mul (ecc, r, B, J);
   /* y' */
-  ecc_modp_add (ecc, C, C, D); /* Redundant */
   ecc_modp_mul (ecc, r + ecc->p.size, F, C);
   /* z' */
   ecc_modp_mul (ecc, B, F, J);