diff --git a/algorithms/abc_smc.jl b/algorithms/abc_smc.jl
index ee5b358ba5cc595385b74b8693fbf387a0ce31fe..607768d633b13a6d6ba83016947b59e7c1a5599a 100644
--- a/algorithms/abc_smc.jl
+++ b/algorithms/abc_smc.jl
@@ -28,7 +28,7 @@ end
 function automaton_abc(pm::ParametricModel; 
                        nbr_particles::Int = 100, tolerance::Float64 = 0.0, alpha::Float64 = 0.75, kernel_type = "mvnormal", 
                        NT::Float64 = nbr_particles/2, duration_time::Float64 = Inf, dir_results::Union{Nothing,String} = nothing,
-                       bound_sim::Int = typemax(Int), sym_var_aut::VariableAutomaton = :d, verbose::Int = 0) 
+                       bound_sim::Int = typemax(Int), sym_var_aut::VariableAutomaton = :d, save_iterations::Bool = false, verbose::Int = 0) 
     @assert typeof(pm.m) <: SynchronizedModel "Automaton-ABC is defined for synchronized models only"
     @assert 0 < nbr_particles
     @assert 0.0 < alpha < 1.0
@@ -39,14 +39,15 @@ function automaton_abc(pm::ParametricModel;
         file_cfg = open(dir_results * "config_abc.out", "w")
         write(file_cfg, "ParametricModel : $(pm) \n")
         write(file_cfg, "Number of particles : $(nbr_particles) \n")
+        write(file_cfg, "Final tolerance : $(tolerance) \n")
         write(file_cfg, "alpha : $(alpha) \n")
         write(file_cfg, "kernel type : $(kernel_type) \n")
         close(file_cfg)
     end
     if nprocs() == 1
-        return _abc_smc(pm, nbr_particles, tolerance, alpha, kernel_type, NT, duration_time, bound_sim, dir_results, sym_var_aut)
+        return _abc_smc(pm, nbr_particles, tolerance, alpha, kernel_type, NT, duration_time, bound_sim, dir_results, sym_var_aut, save_iterations)
     end
-    return _distributed_abc_smc(pm, nbr_particles, tolerance, alpha, kernel_type, NT, duration_time, bound_sim, dir_results, sym_var_aut)
+    return _distributed_abc_smc(pm, nbr_particles, tolerance, alpha, kernel_type, NT, duration_time, bound_sim, dir_results, sym_var_aut, save_iterations)
 end
 
 """
@@ -69,7 +70,7 @@ If pm is defined on a ContinuousTimeModel, then `T1` should verify `T1 <: Trajec
 function abc_smc(pm::ParametricModel, l_obs::AbstractVector, func_dist::Function; 
                  nbr_particles::Int = 100, tolerance::Float64 = 0.0, alpha::Float64 = 0.75, kernel_type = "mvnormal", 
                  NT::Float64 = nbr_particles/2, duration_time::Float64 = Inf, dir_results::Union{Nothing,String} = nothing,
-                 bound_sim::Int = typemax(Int), sym_var_aut::VariableAutomaton = :d, verbose::Int = 0) 
+                 bound_sim::Int = typemax(Int), sym_var_aut::VariableAutomaton = :d, save_iterations::Bool = false, verbose::Int = 0) 
     @assert 0 < nbr_particles
     @assert 0.0 < alpha < 1.0
     @assert kernel_type in ["mvnormal", "knn_mvnormal"]
@@ -80,14 +81,15 @@ function abc_smc(pm::ParametricModel, l_obs::AbstractVector, func_dist::Function
         write(file_cfg, "Configuration of ABC algorithm\n")
         write(file_cfg, "ParametricModel : $(pm) \n")
         write(file_cfg, "Number of particles : $(nbr_particles) \n")
+        write(file_cfg, "Final tolerance : $(tolerance) \n")
         write(file_cfg, "alpha : $(alpha) \n")
         write(file_cfg, "kernel type : $(kernel_type) \n")
         close(file_cfg)
     end
     if nprocs() == 1
-        return _abc_smc(pm, nbr_particles, tolerance, alpha, kernel_type, NT, duration_time, bound_sim, dir_results, sym_var_aut; l_obs = l_obs, func_dist = func_dist)
+        return _abc_smc(pm, nbr_particles, tolerance, alpha, kernel_type, NT, duration_time, bound_sim, dir_results, sym_var_aut, save_iterations; l_obs = l_obs, func_dist = func_dist)
     end
-    return _distributed_abc_smc(pm, nbr_particles, tolerance, alpha, kernel_type, NT, duration_time, bound_sim, dir_results, sym_var_aut; l_obs = l_obs, func_dist = func_dist)
+    return _distributed_abc_smc(pm, nbr_particles, tolerance, alpha, kernel_type, NT, duration_time, bound_sim, dir_results, sym_var_aut, save_iterations; l_obs = l_obs, func_dist = func_dist)
 end
 
 
@@ -96,7 +98,7 @@ end
 
 function _abc_smc(pm::ParametricModel, nbr_particles::Int, tolerance::Float64, alpha::Float64, 
                   kernel_type::String, NT::Float64, duration_time::Float64, 
-                  bound_sim::Int, dir_results::Union{Nothing,String}, sym_var_aut::VariableAutomaton; 
+                  bound_sim::Int, dir_results::Union{Nothing,String}, sym_var_aut::VariableAutomaton, save_iterations::Bool; 
                   l_obs::Union{Nothing,AbstractVector} = nothing, func_dist::Union{Nothing,Function} = nothing)
     @info "ABC PMC with $(nworkers()) processus and $(Threads.nthreads()) threads"
     begin_time = time()
@@ -123,6 +125,13 @@ function _abc_smc(pm::ParametricModel, nbr_particles::Int, tolerance::Float64, a
     wl_current = zeros(nbr_particles)
     l_nbr_sim = zeros(Int, nbr_particles) 
     while (epsilon > last_epsilon) && (current_time - begin_time <= duration_time) && (nbr_tot_sim <= bound_sim)
+        if dir_results != "" && save_iterations
+            step_dir = dir_results * "/step_$t/"
+            mkdir(step_dir)
+            writedlm(step_dir * "weights_end.csv", wl_old, ',')
+            writedlm(step_dir * "mat_p_end.csv", mat_p_old, ',')
+            writedlm(step_dir * "vec_dist.csv", vec_dist, ',')
+        end
         t += 1
         begin_time_ite = time()
         @info "Step $t"
@@ -184,6 +193,7 @@ function _abc_smc(pm::ParametricModel, nbr_particles::Int, tolerance::Float64, a
         write(file_cfg, "\n")
         write(file_cfg, "About the results: \n")
         write(file_cfg, "Total number of simulations: $nbr_tot_sim\n")
+        write(file_cfg, "Final tolerance : $(old_epsilon) \n")
         write(file_cfg, "Execution time: $(time() - begin_time)\n")
         write(file_cfg, "Number of jobs: $(nprocs())\n")
         write(file_cfg, "Number of threads: $(Threads.nthreads())\n")
@@ -195,7 +205,7 @@ end
 
 function _distributed_abc_smc(pm::ParametricModel, nbr_particles::Int, tolerance::Float64, alpha::Float64, 
                               kernel_type::String, NT::Float64, duration_time::Float64, bound_sim::Int, 
-                              dir_results::Union{Nothing,String}, sym_var_aut::VariableAutomaton;
+                              dir_results::Union{Nothing,String}, sym_var_aut::VariableAutomaton, save_iterations::Bool;
                               l_obs::Union{Nothing,AbstractVector} = nothing, func_dist::Union{Nothing,Function} = nothing)
     @info "Distributed ABC PMC with $(nworkers()) processus and $(Threads.nthreads()) threads"
     begin_time = time()
@@ -224,6 +234,13 @@ function _distributed_abc_smc(pm::ParametricModel, nbr_particles::Int, tolerance
     mat_p = zeros(0,0)
     wl_current = zeros(0)
     while (epsilon > last_epsilon) && (current_time - begin_time <= duration_time) && (nbr_tot_sim <= bound_sim)
+        if dir_results != "" && save_iterations
+            step_dir = dir_results * "/step_$t/"
+            mkdir(step_dir)
+            writedlm(step_dir * "weights_end.csv", wl_old, ',')
+            writedlm(step_dir * "mat_p_end.csv", mat_p_old, ',')
+            writedlm(step_dir * "vec_dist.csv", vec_dist, ',')
+        end
         t += 1
         begin_time_ite = time()
         @info "Step $t"
@@ -289,10 +306,12 @@ function _distributed_abc_smc(pm::ParametricModel, nbr_particles::Int, tolerance
     if dir_results != nothing
         writedlm(dir_results * "weights_end.csv", wl_old, ',')
         writedlm(dir_results * "mat_p_end.csv", mat_p_old, ',')
+        writedlm(dir_results * "vec_dist.csv", vec_dist, ',')
         file_cfg = open(dir_results * "results_abc.out", "w")
         write(file_cfg, "\n")
         write(file_cfg, "About the results: \n")
         write(file_cfg, "Total number of simulations: $nbr_tot_sim\n")
+        write(file_cfg, "Final tolerance : $(old_epsilon) \n")
         write(file_cfg, "Execution time: $(time() - begin_time)\n")
         write(file_cfg, "Number of jobs: $(nprocs())\n")
         write(file_cfg, "Number of threads: $(Threads.nthreads())\n")