diff --git a/ChangeLog b/ChangeLog
index 6cdbe4518fc22f728b2c565bbfd1336d391541ad..de6fc6dcdf24c5131077b94594e0d3e1068c2c76 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2017-07-18  Niels Möller  <nisse@lysator.liu.se>
+
+	* ecc-add-eh.c (ecc_add_eh): Fix in-place operation by reordering
+	two multiplies. Previously, in-place operation resulted in an
+	invalid call to mpn_mul with overlapping operands. Reported by
+	Sergei Trofimovich.
+
 2017-06-09  Niels Möller  <nisse@lysator.liu.se>
 
 	* pss.c (pss_verify_mgf1): Check for m being too large, fixing an
diff --git a/ecc-add-eh.c b/ecc-add-eh.c
index a16be4cb849973a3a50ddd39012647011b569ae6..c07ff49a8c2969e48acab70753c11235fd3233ca 100644
--- a/ecc-add-eh.c
+++ b/ecc-add-eh.c
@@ -98,8 +98,8 @@ ecc_add_eh (const struct ecc_curve *ecc,
   ecc_modp_mul (ecc, x3, B, z1);
 
   /* y3 */
-  ecc_modp_mul (ecc, B, F, C); /* ! */
-  ecc_modp_mul (ecc, y3, B, z1);
+  ecc_modp_mul (ecc, B, F, z1); /* ! */
+  ecc_modp_mul (ecc, y3, B, C); /* Clobbers z1 in case r == p. */
 
   /* z3 */
   ecc_modp_mul (ecc, B, F, G);