diff --git a/docs/source/solving.rst b/docs/source/solving.rst
index 790d5f3..91713e0 100644
--- a/docs/source/solving.rst
+++ b/docs/source/solving.rst
@@ -1300,7 +1300,7 @@
    then it is probably best to keep this false, otherwise it will
    likely lead to worse performance.
 
-   This settings affects the `SPARSE_NORMAL_CHOLESKY` solver.
+   This setting only affects the `SPARSE_NORMAL_CHOLESKY` solver.
 
 .. member:: int Solver::Options::min_linear_solver_iterations
 
diff --git a/internal/ceres/conjugate_gradients_solver.cc b/internal/ceres/conjugate_gradients_solver.cc
index 3d8eb0a..56e7946 100644
--- a/internal/ceres/conjugate_gradients_solver.cc
+++ b/internal/ceres/conjugate_gradients_solver.cc
@@ -114,7 +114,7 @@
   double Q0 = -1.0 * xref.dot(bref + r);
 
   for (summary.num_iterations = 1;
-       summary.num_iterations < options_.max_num_iterations;
+       summary.num_iterations <= options_.max_num_iterations;
        ++summary.num_iterations) {
     // Apply preconditioner
     if (per_solve_options.preconditioner != NULL) {
diff --git a/internal/ceres/graph.h b/internal/ceres/graph.h
index 38fdae3..f639d15 100644
--- a/internal/ceres/graph.h
+++ b/internal/ceres/graph.h
@@ -44,7 +44,7 @@
 namespace internal {
 
 // A unweighted undirected graph templated over the vertex ids. Vertex
-// should be hashable and comparable.
+// should be hashable.
 template <typename Vertex>
 class Graph {
  public:
diff --git a/internal/ceres/graph_algorithms.h b/internal/ceres/graph_algorithms.h
index 46a37c5..fb75e2f 100644
--- a/internal/ceres/graph_algorithms.h
+++ b/internal/ceres/graph_algorithms.h
@@ -172,8 +172,6 @@
 template <typename Vertex>
 int StableIndependentSetOrdering(const Graph<Vertex>& graph,
                                  vector<Vertex>* ordering) {
-  EventLogger event_logger("StableIndependentSetOrdering");
-
   CHECK_NOTNULL(ordering);
   const HashSet<Vertex>& vertices = graph.vertices();
   const int num_vertices = vertices.size();
@@ -188,7 +186,6 @@
 
   stable_sort(vertex_queue.begin(), vertex_queue.end(),
               VertexDegreeLessThan<Vertex>(graph));
-  event_logger.AddEvent("StableSort");
 
   // Mark all vertices white.
   HashMap<Vertex, char> vertex_color;
@@ -197,7 +194,6 @@
        ++it) {
     vertex_color[*it] = kWhite;
   }
-  event_logger.AddEvent("MarkWhite");
 
   ordering->clear();
   ordering->reserve(num_vertices);
@@ -218,7 +214,6 @@
       vertex_color[*it] = kGrey;
     }
   }
-  event_logger.AddEvent("IndependentVertices");
 
   int independent_set_size = ordering->size();
 
@@ -234,7 +229,6 @@
       ordering->push_back(vertex);
     }
   }
-  event_logger.AddEvent("DependentVertices");
 
   CHECK_EQ(ordering->size(), num_vertices);
   return independent_set_size;
diff --git a/internal/ceres/single_linkage_clustering_test.cc b/internal/ceres/single_linkage_clustering_test.cc
index 1d4efd2..95692ea 100644
--- a/internal/ceres/single_linkage_clustering_test.cc
+++ b/internal/ceres/single_linkage_clustering_test.cc
@@ -61,7 +61,8 @@
   ComputeSingleLinkageClustering(options, graph, &membership);
   EXPECT_EQ(membership.size(), kNumVertices);
 
-  EXPECT_EQ(membership[1], membership[0]); EXPECT_EQ(membership[2], membership[0]);
+  EXPECT_EQ(membership[1], membership[0]);
+  EXPECT_EQ(membership[2], membership[0]);
   EXPECT_EQ(membership[3], membership[0]);
   EXPECT_NE(membership[4], membership[0]);
   EXPECT_NE(membership[5], membership[0]);
diff --git a/internal/ceres/solver.cc b/internal/ceres/solver.cc
index e5ad90e..f62ab5d 100644
--- a/internal/ceres/solver.cc
+++ b/internal/ceres/solver.cc
@@ -206,15 +206,15 @@
   if (options.sparse_linear_algebra_library_type == EIGEN_SPARSE) {
     if (options.linear_solver_type == SPARSE_NORMAL_CHOLESKY) {
       *error = "Can't use SPARSE_NORMAL_CHOLESKY with EIGEN_SPARSE because "
-          "Eigen's sparse linear algebra was not enabled when Ceres "
-          " was built.";
+          "Eigen's sparse linear algebra was not enabled when Ceres was "
+          "built.";
       return false;
     }
 
     if (options.linear_solver_type == SPARSE_SCHUR) {
       *error = "Can't use SPARSE_SCHUR with EIGEN_SPARSE because "
-          "Eigen's sparse linear algebra was not enabled when Ceres "
-          " was built.";
+          "Eigen's sparse linear algebra was not enabled when Ceres was "
+          "built.";
       return false;
     }
   }
diff --git a/internal/ceres/visibility.cc b/internal/ceres/visibility.cc
index e46421c..da8beed 100644
--- a/internal/ceres/visibility.cc
+++ b/internal/ceres/visibility.cc
@@ -76,7 +76,8 @@
   }
 }
 
-WeightedGraph<int>* CreateSchurComplementGraph(const vector<set<int> >& visibility) {
+WeightedGraph<int>* CreateSchurComplementGraph(
+    const vector<set<int> >& visibility) {
   const time_t start_time = time(NULL);
   // Compute the number of e_blocks/point blocks. Since the visibility
   // set for each e_block/camera contains the set of e_blocks/points
@@ -122,7 +123,7 @@
     }
   }
 
-  WeightedGraph<int>* graph = new WeightedGraph<int>();
+  WeightedGraph<int>* graph = new WeightedGraph<int>;
 
   // Add vertices and initialize the pairs for self edges so that self
   // edges are guaranteed. This is needed for the Canonical views
diff --git a/internal/ceres/visibility.h b/internal/ceres/visibility.h
index 62d4f0f..322efe9 100644
--- a/internal/ceres/visibility.h
+++ b/internal/ceres/visibility.h
@@ -74,7 +74,8 @@
 //
 // Caller acquires ownership of the returned WeightedGraph pointer
 // (heap-allocated).
-WeightedGraph<int>* CreateSchurComplementGraph(const vector<set<int> >& visibility);
+WeightedGraph<int>* CreateSchurComplementGraph(
+    const vector<set<int> >& visibility);
 
 }  // namespace internal
 }  // namespace ceres
diff --git a/internal/ceres/visibility_based_preconditioner.h b/internal/ceres/visibility_based_preconditioner.h
index 7e0b51b..2f6922d 100644
--- a/internal/ceres/visibility_based_preconditioner.h
+++ b/internal/ceres/visibility_based_preconditioner.h
@@ -156,7 +156,8 @@
                             vector<int>* membership_vector) const;
   void ComputeClusterVisibility(const vector<set<int> >& visibility,
                                 vector<set<int> >* cluster_visibility) const;
-  WeightedGraph<int>* CreateClusterGraph(const vector<set<int> >& visibility) const;
+  WeightedGraph<int>* CreateClusterGraph(
+      const vector<set<int> >& visibility) const;
   void ForestToClusterPairs(const WeightedGraph<int>& forest,
                             HashSet<pair<int, int> >* cluster_pairs) const;
   void ComputeBlockPairsInPreconditioner(const CompressedRowBlockStructure& bs);
