diff --git a/include/ceres/crs_matrix.h b/include/ceres/crs_matrix.h
new file mode 100644
index 0000000..c9fe8f7
--- /dev/null
+++ b/include/ceres/crs_matrix.h
@@ -0,0 +1,65 @@
+// Ceres Solver - A fast non-linear least squares minimizer
+// Copyright 2012 Google Inc. All rights reserved.
+// http://code.google.com/p/ceres-solver/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// * Redistributions of source code must retain the above copyright notice,
+//   this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above copyright notice,
+//   this list of conditions and the following disclaimer in the documentation
+//   and/or other materials provided with the distribution.
+// * Neither the name of Google Inc. nor the names of its contributors may be
+//   used to endorse or promote products derived from this software without
+//   specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: sameeragarwal@google.com (Sameer Agarwal)
+
+#ifndef CERES_PUBLIC_CRS_MATRIX_H_
+#define CERES_PUBLIC_CRS_MATRIX_H_
+
+#include <vector>
+#include "ceres/internal/port.h"
+
+namespace ceres {
+
+// A compressed row sparse matrix used primarily for communicating the
+// Jacobian matrix to the user.
+struct CRSMatrix {
+  CRSMatrix() : num_rows(0), num_cols(0) {}
+
+  int num_rows;
+  int num_cols;
+
+  // A compressed row matrix stores its contents in three arrays.
+  // The non-zero pattern of the i^th row is given by
+  //
+  //   rows[cols[i] ... cols[i + 1]]
+  //
+  // and the corresponding values by
+  //
+  //   values[cols[i] ... cols[i + 1]]
+  //
+  // Thus, cols is a vector of size num_cols + 1, and rows and values
+  // have as many entries as number of non-zeros in the matrix.
+  vector<int> cols;
+  vector<int> rows;
+  vector<double> values;
+};
+
+}  // namespace ceres
+
+#endif  // CERES_PUBLIC_CRS_MATRIX_H_
diff --git a/include/ceres/solver.h b/include/ceres/solver.h
index 1084884..4d59bde 100644
--- a/include/ceres/solver.h
+++ b/include/ceres/solver.h
@@ -34,10 +34,10 @@
 #include <cmath>
 #include <string>
 #include <vector>
-
-#include "ceres/iteration_callback.h"
+#include "ceres/crs_matrix.h"
 #include "ceres/internal/macros.h"
 #include "ceres/internal/port.h"
+#include "ceres/iteration_callback.h"
 #include "ceres/types.h"
 
 namespace ceres {
@@ -102,7 +102,11 @@
       logging_type = PER_MINIMIZER_ITERATION;
       minimizer_progress_to_stdout = false;
       return_initial_residuals = false;
+      return_initial_gradient = false;
+      return_initial_jacobian = false;
       return_final_residuals = false;
+      return_final_gradient = false;
+      return_final_jacobian = false;
       lsqp_dump_directory = "/tmp";
       lsqp_dump_format_type = TEXTFILE;
       check_gradients = false;
@@ -264,7 +268,12 @@
     bool minimizer_progress_to_stdout;
 
     bool return_initial_residuals;
+    bool return_initial_gradient;
+    bool return_initial_jacobian;
+
     bool return_final_residuals;
+    bool return_final_gradient;
+    bool return_final_jacobian;
 
     // List of iterations at which the optimizer should dump the
     // linear least squares problem to disk. Useful for testing and
@@ -367,13 +376,54 @@
     // blocks that they depend on were fixed.
     double fixed_cost;
 
-    // Residuals before and after the optimization. Each vector
-    // contains problem.NumResiduals() elements. Residuals are in the
-    // same order in which they were added to the problem object when
-    // constructing this problem.
+    // Vectors of residuals before and after the optimization. The
+    // entries of these vectors are in the order in which
+    // ResidualBlocks were added to the Problem object.
+    //
+    // Whether the residual vectors are populated with values is
+    // controlled by Solver::Options::return_initial_residuals and
+    // Solver::Options::return_final_residuals respectively.
     vector<double> initial_residuals;
     vector<double> final_residuals;
 
+    // Gradient vectors, before and after the optimization.  The rows
+    // are in the same order in which the ParameterBlocks were added
+    // to the Problem object.
+    //
+    // NOTE: Since AddResidualBlock adds ParameterBlocks to the
+    // Problem automatically if they do not already exist, if you wish
+    // to have explicit control over the ordering of the vectors, then
+    // use Problem::AddParameterBlock to explicitly add the
+    // ParameterBlocks in the order desired.
+    //
+    // Whether the vectors are populated with values is controlled by
+    // Solver::Options::return_initial_gradient and
+    // Solver::Options::return_final_gradient respectively.
+    vector<double> initial_gradient;
+    vector<double> final_gradient;
+
+    // Jacobian matrices before and after the optimization. The rows
+    // of these matrices are in the same order in which the
+    // ResidualBlocks were added to the Problem object. The columns
+    // are in the same order in which the ParameterBlocks were added
+    // to the Problem object.
+    //
+    // NOTE: Since AddResidualBlock adds ParameterBlocks to the
+    // Problem automatically if they do not already exist, if you wish
+    // to have explicit control over the column ordering of the
+    // matrix, then use Problem::AddParameterBlock to explicitly add
+    // the ParameterBlocks in the order desired.
+    //
+    // The Jacobian matrices are stored as compressed row sparse
+    // matrices. Please see ceres/crs_matrix.h for more details of the
+    // format.
+    //
+    // Whether the Jacboan matrices are populated with values is
+    // controlled by Solver::Options::return_initial_jacobian and
+    // Solver::Options::return_final_jacobian respectively.
+    CRSMatrix initial_jacobian;
+    CRSMatrix final_jacobian;
+
     vector<IterationSummary> iterations;
 
     int num_successful_steps;
