diff --git a/internal/ceres/compressed_row_sparse_matrix.cc b/internal/ceres/compressed_row_sparse_matrix.cc
index dceb3bc..225aabf 100644
--- a/internal/ceres/compressed_row_sparse_matrix.cc
+++ b/internal/ceres/compressed_row_sparse_matrix.cc
@@ -378,26 +378,6 @@
   values_.resize(num_nonzeros);
 }
 
-void CompressedRowSparseMatrix::SolveLowerTriangularInPlace(
-    double* solution) const {
-  for (int r = 0; r < num_rows_; ++r) {
-    for (int idx = rows_[r]; idx < rows_[r + 1] - 1; ++idx) {
-      solution[r] -= values_[idx] * solution[cols_[idx]];
-    }
-    solution[r] /= values_[rows_[r + 1] - 1];
-  }
-}
-
-void CompressedRowSparseMatrix::SolveLowerTriangularTransposeInPlace(
-    double* solution) const {
-  for (int r = num_rows_ - 1; r >= 0; --r) {
-    solution[r] /= values_[rows_[r + 1] - 1];
-    for (int idx = rows_[r + 1] - 2; idx >= rows_[r]; --idx) {
-      solution[cols_[idx]] -= values_[idx] * solution[r];
-    }
-  }
-}
-
 CompressedRowSparseMatrix* CompressedRowSparseMatrix::CreateBlockDiagonalMatrix(
     const double* diagonal, const vector<int>& blocks) {
   int num_rows = 0;
diff --git a/internal/ceres/compressed_row_sparse_matrix.h b/internal/ceres/compressed_row_sparse_matrix.h
index 9759d13..6c069ab 100644
--- a/internal/ceres/compressed_row_sparse_matrix.h
+++ b/internal/ceres/compressed_row_sparse_matrix.h
@@ -109,9 +109,6 @@
 
   void ToCRSMatrix(CRSMatrix* matrix) const;
 
-  void SolveLowerTriangularInPlace(double* solution) const;
-  void SolveLowerTriangularTransposeInPlace(double* solution) const;
-
   CompressedRowSparseMatrix* Transpose() const;
 
   // Destructive array resizing method.
diff --git a/internal/ceres/compressed_row_sparse_matrix_test.cc b/internal/ceres/compressed_row_sparse_matrix_test.cc
index cc5ed08..ddaa8cc 100644
--- a/internal/ceres/compressed_row_sparse_matrix_test.cc
+++ b/internal/ceres/compressed_row_sparse_matrix_test.cc
@@ -308,61 +308,6 @@
   EXPECT_EQ((dense.diagonal() - diagonal).norm(), 0.0);
 }
 
-class SolveLowerTriangularTest : public ::testing::Test {
- protected:
-  void SetUp() {
-    matrix_.reset(new CompressedRowSparseMatrix(4, 4, 7));
-    int* rows = matrix_->mutable_rows();
-    int* cols = matrix_->mutable_cols();
-    double* values = matrix_->mutable_values();
-
-    rows[0] = 0;
-    cols[0] = 0;
-    values[0] = 0.50754;
-
-    rows[1] = 1;
-    cols[1] = 1;
-    values[1] = 0.80483;
-
-    rows[2] = 2;
-    cols[2] = 1;
-    values[2] = 0.14120;
-    cols[3] = 2;
-    values[3] = 0.3;
-
-    rows[3] = 4;
-    cols[4] = 0;
-    values[4] = 0.77696;
-    cols[5] = 1;
-    values[5] = 0.41860;
-    cols[6] = 3;
-    values[6] = 0.88979;
-
-    rows[4] = 7;
-  }
-
-  scoped_ptr<CompressedRowSparseMatrix> matrix_;
-};
-
-TEST_F(SolveLowerTriangularTest, SolveInPlace) {
-  double rhs_and_solution[] = {1.0, 1.0, 2.0, 2.0};
-  double expected[] = {1.970288,  1.242498,  6.081864, -0.057255};
-  matrix_->SolveLowerTriangularInPlace(rhs_and_solution);
-  for (int i = 0; i < 4; ++i) {
-    EXPECT_NEAR(rhs_and_solution[i], expected[i], 1e-4) << i;
-  }
-}
-
-TEST_F(SolveLowerTriangularTest, TransposeSolveInPlace) {
-  double rhs_and_solution[] = {1.0, 1.0, 2.0, 2.0};
-  const double expected[] = { -1.4706, -1.0962, 6.6667, 2.2477};
-
-  matrix_->SolveLowerTriangularTransposeInPlace(rhs_and_solution);
-  for (int i = 0; i < 4; ++i) {
-    EXPECT_NEAR(rhs_and_solution[i], expected[i], 1e-4) << i;
-  }
-}
-
 TEST(CompressedRowSparseMatrix, Transpose) {
   //  0  1  0  2  3  0
   //  4  6  7  0  0  8
diff --git a/internal/ceres/dynamic_sparse_normal_cholesky_solver.cc b/internal/ceres/dynamic_sparse_normal_cholesky_solver.cc
index 2c893b4..89904e0 100644
--- a/internal/ceres/dynamic_sparse_normal_cholesky_solver.cc
+++ b/internal/ceres/dynamic_sparse_normal_cholesky_solver.cc
@@ -255,7 +255,7 @@
 
   SuiteSparse ss;
   const int num_cols = A->num_cols();
-  cholmod_sparse lhs = ss.CreateSparseMatrixTransposeView(A, 0);
+  cholmod_sparse lhs = ss.CreateSparseMatrixTransposeView(A);
   event_logger.AddEvent("Setup");
   cholmod_factor* factor = ss.AnalyzeCholesky(&lhs, &summary.message);
   event_logger.AddEvent("Analysis");
