diff --git a/src/evolve.jl b/src/evolve.jl
index c0675e5cd9acf6054f9543166dd707265e5f26f7..7aff7aea2ce43e3443cbf498fdfcededb7c02ed1 100644
--- a/src/evolve.jl
+++ b/src/evolve.jl
@@ -231,8 +231,6 @@ function ode_step!(u!, F, u0, t, dt, tmp_k, coeffs::COEFFS_LSERK4, callback_subs
   for i = 1:nstages
     ti = t + c[i] * dt
     F(ki, i == 1 ? u0 : u!, ti)
-    success = callback_substep(u!, ti, i+1) # +1 because u! is value for next stage
-    !success && return false
     if i == 1
       @. u! = u0 + b[i] * dt * ki
     else
@@ -243,9 +241,11 @@ function ode_step!(u!, F, u0, t, dt, tmp_k, coeffs::COEFFS_LSERK4, callback_subs
     if i < nstages
       @. kim1 = ki
     end
+    success = callback_substep(u!, ti, i+1) # +1 because u! is value for next stage
+    !success && return false
   end # for
 
-  return true
+  return success
 end
 
 
@@ -262,12 +262,12 @@ function ode_step!(u!, F, u0, t, dt, tmp_k, coeffs::TimeStepAlgorithm, callback_
     # assumes that a[1,:] are all zeros
     F(tmp_k[i], i == 1 ? u0 : u!, ti)
     i == nstages && break
-    success = callback_substep(u!, ti, i+1) # +1 because u! is value for next stage
-    !success && return false
     u! .= u0
     for j = 1:i
       @. u! += a[i+1, j] * dt * tmp_k[j]
     end
+    success = callback_substep(u!, ti, i+1) # +1 because u! is value for next stage
+    !success && return false
   end
 
   u! .= u0
@@ -276,7 +276,7 @@ function ode_step!(u!, F, u0, t, dt, tmp_k, coeffs::TimeStepAlgorithm, callback_
   end
   success = callback_substep(u!, t+dt, nstages)
 
-  return true
+  return success
 end