diff --git a/src/lib.rs b/src/lib.rs
index bfd9a187a04c568ac4b2e69eb7e4239d41e420ce..c1874273db15ef23c3995b118785ca6dd5c3546e 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -26,6 +26,7 @@ impl<T, I: Iterator<Item = T>> PreemptiveIterator for I {
         let react_us = reactivity.as_micros();
         loop {
             let start = Instant::now();
+            let mut total_block = 0;
             let mut time = Duration::from_micros(0);
             while time < reactivity {
                 acc = self.by_ref().take(n_iters - 1).fold(acc, &mut f);
@@ -38,12 +39,13 @@ impl<T, I: Iterator<Item = T>> PreemptiveIterator for I {
                     return acc;
                 }
                 time = start.elapsed();
+                total_block += n_iters;
                 n_iters *= 2;
             }
             let time_us = time.as_micros();
             // forced to pass by percent value to avoid floats for adjusting iteration
             let percent = ((100 * (time_us - react_us)) / react_us) as usize;
-            n_iters = n_iters.saturating_sub(((n_iters - 1) * percent) / 100);
+            n_iters = total_block.saturating_sub(((total_block - 1) * percent) / 100);
             yield_now().await;
         }
     }