diff --git a/ChangeLog b/ChangeLog
index 95024c77ffae6ccb6599a6720fb9365affb37685..8a9a5073b138cf0c5d3c0ab5ab1f939fb3575fe9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2014-09-09  Niels Möller  <nisse@lysator.liu.se>
+
+	* gmp-glue.c (cnd_swap): Moved function here, made non-static.
+	Changed cnd type to mp_limb_t, for consistency with GMP
+	mpn_cnd_add_n.
+	* sec-modinv.c (cnd_swap): ... old location.
+	* gmp-glue.h (cnd_swap): Declare function.
+
 2014-09-06  Niels Möller  <nisse@lysator.liu.se>
 
 	* examples/hogweed-benchmark.c (bench_curve25519_mul_g)
diff --git a/gmp-glue.c b/gmp-glue.c
index 013c4cfa0dd60a8af3d12604538665749570fd4e..5de167eb87cca2920cb23b60301de2b998f294bd 100644
--- a/gmp-glue.c
+++ b/gmp-glue.c
@@ -142,6 +142,22 @@ mpn_zero (mp_ptr ptr, mp_size_t n)
 }
 #endif /* !GMP_HAVE_mpn_copyd */
 
+void
+cnd_swap (mp_limb_t cnd, mp_limb_t *ap, mp_limb_t *bp, mp_size_t n)
+{
+  mp_limb_t mask = - (mp_limb_t) (cnd != 0);
+  mp_size_t i;
+  for (i = 0; i < n; i++)
+    {
+      mp_limb_t a, b, t;
+      a = ap[i];
+      b = bp[i];
+      t = (a ^ b) & mask;
+      ap[i] = a ^ t;
+      bp[i] = b ^ t;
+    }
+}
+
 /* Additional convenience functions. */
 
 int
diff --git a/gmp-glue.h b/gmp-glue.h
index f9e149ada64b92b18ede13aeb81e39d332422aeb..7713757c4dbace397b9b9a33748227d3a647793f 100644
--- a/gmp-glue.h
+++ b/gmp-glue.h
@@ -66,6 +66,7 @@
 #define mpn_sqr(rp, ap, n) mpn_mul_n((rp), (ap), (ap), (n))
 #endif
 
+#define cnd_swap _nettle_cnd_swap
 #define mpz_limbs_cmp _nettle_mpz_limbs_cmp
 #define mpz_limbs_read_n _nettle_mpz_limbs_read_n
 #define mpz_limbs_copy _nettle_mpz_limbs_copy
@@ -143,6 +144,9 @@ void
 mpn_zero (mp_ptr ptr, mp_size_t n);
 #endif /* !GMP_HAVE_mpn_copyd */
 
+void
+cnd_swap (mp_limb_t cnd, mp_limb_t *ap, mp_limb_t *bp, mp_size_t n);
+
 /* Convenience functions */
 int
 mpz_limbs_cmp (mpz_srcptr a, const mp_limb_t *bp, mp_size_t bn);
diff --git a/sec-modinv.c b/sec-modinv.c
index ea94abd3ac85810de14f264179221ecde99d5e30..7f80ba85815d7a84559b82bd70c9c77eae45f5b4 100644
--- a/sec-modinv.c
+++ b/sec-modinv.c
@@ -54,22 +54,6 @@ cnd_neg (int cnd, mp_limb_t *rp, const mp_limb_t *ap, mp_size_t n)
     }
 }
 
-static void
-cnd_swap (int cnd, mp_limb_t *ap, mp_limb_t *bp, mp_size_t n)
-{
-  mp_limb_t mask = - (mp_limb_t) (cnd != 0);
-  mp_size_t i;
-  for (i = 0; i < n; i++)
-    {
-      mp_limb_t a, b, t;
-      a = ap[i];
-      b = bp[i];
-      t = (a ^ b) & mask;
-      ap[i] = a ^ t;
-      bp[i] = b ^ t;
-    }
-}
-
 /* Compute a^{-1} mod m, with running time depending only on the size.
    Returns zero if a == 0 (mod m), to be consistent with a^{phi(m)-1}.
    Also needs (m+1)/2, and m must be odd. */