diff --git a/parametrizations.c b/parametrizations.c
index 44249024c9df7448cf5f18d77e2daf7432a85151..77aaff724dc0831a5e31ff7aab693fe5bd2a50cf 100644
--- a/parametrizations.c
+++ b/parametrizations.c
@@ -243,8 +243,8 @@ get_curve_from_param1 (mpres_t A, mpres_t x0, mpz_t sigma, mpmod_t n)
       
   /* A=4*d-2 with d = sigma^2/2^64 */
   /* Compute d = sigma^2/2^64 */
-  mpz_ui_pow_ui(tmp, 2, 64);
-  mpz_invert(tmp, tmp, n->orig_modulus);
+  mpz_ui_pow_ui (tmp, 2, 64);
+  mpz_invert (tmp, tmp, n->orig_modulus);
 
   /* tmp = sigma^2/2^64 */
   mpz_mul (tmp, tmp, sigma);
@@ -264,7 +264,7 @@ get_curve_from_param1 (mpres_t A, mpres_t x0, mpz_t sigma, mpmod_t n)
   mpres_set_z (A, tmp, n);
   mpres_set_ui (x0, 2, n);
 
-  mpz_clear(tmp);
+  mpz_clear (tmp);
   return ECM_NO_FACTOR_FOUND;
 }
 
@@ -433,30 +433,27 @@ get_curve_from_random_parameter (mpz_t f, mpres_t A, mpres_t x, mpz_t sigma,
      to avoid an infinite loop in corner cases (for example with -param 1,
      there is no valid sigma for n=3, see
      https://gitlab.inria.fr/zimmerma/ecm/-/issues/21876) */
+  unsigned long bitsize = (param == ECM_PARAM_BATCH_SQUARE ||
+                           param == ECM_PARAM_BATCH_32BITS_D) ? 32 : 64;
+  mpz_urandomb (sigma, rng, bitsize);
   for (int i = 0; ret == ECM_ERROR && i < 10; i++)
     {
       if (param == ECM_PARAM_SUYAMA)
-        {
-          mpz_urandomb (sigma, rng, 64);
-          ret = get_curve_from_param0 (f, A, x, sigma, modulus);
-        }
+        ret = get_curve_from_param0 (f, A, x, sigma, modulus);
       else if (param == ECM_PARAM_BATCH_SQUARE)
-        {
-          mpz_urandomb (sigma, rng, 32);
-          ret = get_curve_from_param1 (A, x, sigma, modulus);
-        }
+        ret = get_curve_from_param1 (A, x, sigma, modulus);
       else if (param == ECM_PARAM_BATCH_2)
-        {
-          mpz_urandomb (sigma, rng, 64);
-          ret = get_curve_from_param2 (f, A, x, sigma, modulus);
-        }
+        ret = get_curve_from_param2 (f, A, x, sigma, modulus);
       else if (param == ECM_PARAM_BATCH_32BITS_D)
-        {
-          mpz_urandomb (sigma, rng, 32);
-          ret = get_curve_from_param3 (A, x, sigma, modulus);
-        }
+        ret = get_curve_from_param3 (A, x, sigma, modulus);
       else
         return ECM_ERROR;
+      if (ret == ECM_ERROR) // try next sigma value
+      {
+        mpz_add_ui (sigma, sigma, 1);
+        if (mpz_sizeinbase (sigma, 2) > bitsize)
+          mpz_set_ui (sigma, 2);
+      }
     }
 
   return ret;