diff --git a/scripts/run_experiments.jl b/scripts/run_experiments.jl
index 3898c227cbbad19d6603d6fcea992de357ed02fc..80c3845ecf6973fafdff795bcb4e92ef3b174cc4 100644
--- a/scripts/run_experiments.jl
+++ b/scripts/run_experiments.jl
@@ -974,6 +974,7 @@ end
 
 
 function denoise_pd(ctx)
+    t_0 = NaN # initialized later
     params = ctx.params
     m = 1
     mesh = ctx.params.mesh
@@ -1041,7 +1042,9 @@ function denoise_pd(ctx)
             norm_step_ = norm_step(st) * domain_factor
             #estimate_pd!(st)
 
+            t_0 = k == 1 ? time() - 1. : t_0 # avoid 0-start
             log!(ctx.params.df; k,
+                t_elapsed = time() - t_0,
                 norm_step = norm_step_,
                 norm_residual = norm_residual(st),
                 #est = estimate_error(st),
@@ -1080,6 +1083,10 @@ function experiment_convergence_rate(ctx)
     st2 = denoise_pd(Util.Context(algctx; algorithm = :pd2, df = df2));
     st3 = denoise_pd(Util.Context(algctx; algorithm = :newton, df = df3));
 
+    df1[!, :steptime_mean] .= mean(diff(df1.t_elapsed))
+    df2[!, :steptime_mean] .= mean(diff(df2.t_elapsed))
+    df3[!, :steptime_mean] .= mean(diff(df3.t_elapsed))
+
     energy_min = min(minimum(df1.primal_energy), minimum(df2.primal_energy),
 		     minimum(df3.primal_energy))
     df1[!, :energy_min] .= energy_min