diff --git a/src/fec.rs b/src/fec.rs
index a1fd2da61b99e39138be447af095367b4bdfa34c..cbbae67be14032e2e3d161c90e1890b5fe06a8ee 100644
--- a/src/fec.rs
+++ b/src/fec.rs
@@ -206,6 +206,7 @@ mod tests {
     };
 
     use itertools::Itertools;
+    use rand::seq::SliceRandom;
 
     use super::recode_with_coeffs;
 
@@ -441,6 +442,49 @@ mod tests {
         }
     }
 
+    //   (encode) | (select k) |     (recode)    | (decode)
+    //            *
+    // *          *            *     * ... *     * \
+    // *  ------> * ---------> * --> * ... * --> *  |--> ?
+    // *          *            *     * ... *     * /
+    //            *                  \__(#steps)_/
+    //
+    // k          n            k     k     k     k
+    fn long_full_end_to_end_with_recoding_template<F: PrimeField>(
+        data: &[u8],
+        k: usize,
+        n: usize,
+        nb_steps: usize,
+    ) {
+        let mut rng = ark_std::test_rng();
+        let test_case = format!("TEST | data: {} bytes, k: {}, n: {}", data.len(), k, n,);
+
+        let mut shards = encode::<F>(data, &Matrix::random(k, n, &mut rng))
+            .unwrap_or_else(|_| panic!("could not encode {test_case}"));
+        shards.shuffle(&mut rng);
+        shards.truncate(k);
+
+        for _ in 0..nb_steps {
+            shards = (0..k)
+                .map(|_| recode_random(&shards, &mut rng).unwrap().unwrap())
+                .collect();
+        }
+
+        let actual = decode::<F>(shards).unwrap_or_else(|_| panic!("could not decode {test_case}"));
+        assert_eq!(data, actual, "bad decoded data with {test_case}",);
+    }
+
+    #[test]
+    fn long_full_end_to_end_with_recoding() {
+        let bytes = bytes();
+
+        for (k, n) in [(3, 5), (5, 5), (8, 10)] {
+            for nb_steps in [10, 20, 100] {
+                long_full_end_to_end_with_recoding_template::<Fr>(&bytes, k, n, nb_steps);
+            }
+        }
+    }
+
     fn create_fake_shard<F: PrimeField>(linear_combination: &[F], bytes: &[u8]) -> Shard<F> {
         Shard {
             k: 2,