         update_benchmarking_function(scenario_context, scenario)
       parallel_benchmark(scenario, scenario_context)
     end)
+  end
+
+  defp update_num_iterations(scenario_context, scenario, num_iterations) do
+    # every update of the number iterations could mean we need a different
+    # benchmarking function (as we go from 1 to n iterations)
+    %ScenarioContext{scenario_context | num_iterations: num_iterations}
+    |> update_benchmarking_function(scenario)
   end
 
   defp update_benchmarking_function(scenario_context, scenario) do

      {1, run_time}
    else
      if fast_warning, do: printer.fast_warning()
      new_context =
        %ScenarioContext{scenario_context | num_iterations: @times_multiplier}
        |> update_benchmarking_function(scenario)
      try_n_times(scenario, new_context)
    end
  end

    if run_time >= @minimum_execution_time do
      {num_iterations, run_time / num_iterations}
    else
      new_context = update_num_iterations(scenario_context,
                                          scenario,
                                          num_iterations * @times_multiplier)
      try_n_times(scenario, new_context)
    end
  end
