diff --git a/internal/ceres/trust_region_minimizer.cc b/internal/ceres/trust_region_minimizer.cc
index 926bced..c871ae2 100644
--- a/internal/ceres/trust_region_minimizer.cc
+++ b/internal/ceres/trust_region_minimizer.cc
@@ -231,6 +231,15 @@
                                     options_.gradient_tolerance);
     summary->termination_type = CONVERGENCE;
     VLOG_IF(1, is_not_silent) << "Terminating: " << summary->message;
+
+    // Ensure that there is an iteration summary object for iteration
+    // 0 in Summary::iterations.
+    iteration_summary.iteration_time_in_seconds =
+        WallTimeInSeconds() - iteration_start_time;
+    iteration_summary.cumulative_time_in_seconds =
+        WallTimeInSeconds() - start_time +
+        summary->preprocessor_time_in_seconds;
+    summary->iterations.push_back(iteration_summary);
     return;
   }
 
@@ -598,19 +607,9 @@
       }
 
       iteration_summary.gradient_max_norm =
-        (x - projected_gradient_step).lpNorm<Eigen::Infinity>();
+          (x - projected_gradient_step).lpNorm<Eigen::Infinity>();
       iteration_summary.gradient_norm = (x - projected_gradient_step).norm();
 
-      if (iteration_summary.gradient_max_norm <= options.gradient_tolerance) {
-        summary->message = StringPrintf("Gradient tolerance reached. "
-                                        "Gradient max norm: %e <= %e",
-                                        iteration_summary.gradient_max_norm,
-                                        options_.gradient_tolerance);
-        summary->termination_type = CONVERGENCE;
-        VLOG_IF(1, is_not_silent) << "Terminating: " << summary->message;
-        return;
-      }
-
       if (options_.jacobi_scaling) {
         jacobian->ScaleColumns(scale.data());
       }
@@ -668,20 +667,42 @@
 
     iteration_summary.cost = cost + summary->fixed_cost;
     iteration_summary.trust_region_radius = strategy->Radius();
-    if (iteration_summary.trust_region_radius <
-        options_.min_trust_region_radius) {
-      summary->message = "Termination. Minimum trust region radius reached.";
-      summary->termination_type = CONVERGENCE;
-      VLOG_IF(1, is_not_silent) << summary->message;
-      return;
-    }
-
     iteration_summary.iteration_time_in_seconds =
         WallTimeInSeconds() - iteration_start_time;
     iteration_summary.cumulative_time_in_seconds =
         WallTimeInSeconds() - start_time
         + summary->preprocessor_time_in_seconds;
     summary->iterations.push_back(iteration_summary);
+
+    // If the step was successful, check for the gradient norm
+    // collapsing to zero, and if the step is unsuccessful then check
+    // if the trust region radius has collapsed to zero.
+    //
+    // For correctness (Number of IterationSummary objects, correct
+    // final cost, and state update) these convergence tests need to
+    // be performed at the end of the iteration.
+    if (iteration_summary.step_is_successful) {
+      // Gradient norm can only go down in successful steps.
+      if (iteration_summary.gradient_max_norm <= options.gradient_tolerance) {
+        summary->message = StringPrintf("Gradient tolerance reached. "
+                                        "Gradient max norm: %e <= %e",
+                                        iteration_summary.gradient_max_norm,
+                                        options_.gradient_tolerance);
+        summary->termination_type = CONVERGENCE;
+        VLOG_IF(1, is_not_silent) << "Terminating: " << summary->message;
+        return;
+      }
+    } else {
+      // Trust region radius can only go down if the step if
+      // unsuccessful.
+      if (iteration_summary.trust_region_radius <
+          options_.min_trust_region_radius) {
+        summary->message = "Termination. Minimum trust region radius reached.";
+        summary->termination_type = CONVERGENCE;
+        VLOG_IF(1, is_not_silent) << summary->message;
+        return;
+      }
+    }
   }
 }
 
diff --git a/internal/ceres/trust_region_minimizer_test.cc b/internal/ceres/trust_region_minimizer_test.cc
index ae32e96..4cad989 100644
--- a/internal/ceres/trust_region_minimizer_test.cc
+++ b/internal/ceres/trust_region_minimizer_test.cc
@@ -34,6 +34,7 @@
 // Program and Problem machinery.
 
 #include <cmath>
+#include "ceres/autodiff_cost_function.h"
 #include "ceres/cost_function.h"
 #include "ceres/dense_qr_solver.h"
 #include "ceres/dense_sparse_matrix.h"
@@ -394,5 +395,31 @@
   }
 }
 
+struct ExpCostFunctor {
+  template <typename T>
+  bool operator()(const T* const x, T* residual) const {
+    residual[0] = T(10.0) - exp(x[0]);
+    return true;
+  }
+
+  static CostFunction* Create() {
+    return new AutoDiffCostFunction<ExpCostFunctor, 1, 1>(
+        new ExpCostFunctor);
+  }
+};
+
+TEST(TrustRegionMinimizer, GradientToleranceConvergenceUpdatesStep) {
+  double x = 5;
+  Problem problem;
+  problem.AddResidualBlock(ExpCostFunctor::Create(), NULL, &x);
+  problem.SetParameterLowerBound(&x, 0, 3.0);
+  Solver::Options options;
+  Solver::Summary summary;
+  Solve(options, &problem, &summary);
+  EXPECT_NEAR(3.0, x, 1e-12);
+  const double expected_final_cost = 0.5 * pow(10.0 - exp(3.0), 2);
+  EXPECT_NEAR(expected_final_cost, summary.final_cost, 1e-12);
+}
+
 }  // namespace internal
 }  // namespace ceres
