diff --git a/include/ceres/tiny_solver.h b/include/ceres/tiny_solver.h
index efe12d5..4d40ee8 100644
--- a/include/ceres/tiny_solver.h
+++ b/include/ceres/tiny_solver.h
@@ -69,15 +69,15 @@
 //   struct TinySolverCostFunctionTraits {
 //     typedef double Scalar;
 //     enum {
-//       NUM_PARAMETERS = <int> OR Eigen::Dynamic,
 //       NUM_RESIDUALS = <int> OR Eigen::Dynamic,
+//       NUM_PARAMETERS = <int> OR Eigen::Dynamic,
 //     };
 //     bool operator()(const double* parameters,
 //                     double* residuals,
 //                     double* jacobian) const;
 //
-//     int NumParameters(); -- Needed if NUM_PARAMETERS == Eigen::Dynamic.
 //     int NumResiduals();  -- Needed if NUM_RESIDUALS == Eigen::Dynamic.
+//     int NumParameters(); -- Needed if NUM_PARAMETERS == Eigen::Dynamic.
 //   }
 //
 // For operator(), the size of the objects is:
@@ -92,8 +92,8 @@
 //   struct MyCostFunctionExample {
 //     typedef double Scalar;
 //     enum {
-//       NUM_PARAMETERS = 3,
 //       NUM_RESIDUALS = 2,
+//       NUM_PARAMETERS = 3,
 //     };
 //     bool operator()(const double* parameters,
 //                     double* residuals,
@@ -110,20 +110,21 @@
 //         jacobian[2 * 2 + 0] = 4;   // Third column (z).
 //         jacobian[2 * 2 + 1] = y;
 //       }
-//       return EvaluateResidualsAndJacobians(parameters, residuals, jacobian);
+//       return true;
 //     }
 //   };
 //
 // The solver supports either statically or dynamically sized cost
-// functions. If the number of parameters is dynamic then the Function
+// functions. If the number of residuals is dynamic then the Function
 // must define:
 //
-//   int NumParameters() const;
-//
-// If the number of residuals is dynamic then the Function must define:
-//
 //   int NumResiduals() const;
 //
+// If the number of parameters is dynamic then the Function must
+// define:
+//
+//   int NumParameters() const;
+//
 template<typename Function,
          typename LinearSolver = Eigen::PartialPivLU<
            Eigen::Matrix<typename Function::Scalar,
@@ -192,8 +193,8 @@
     return RUNNING;
   }
 
-  Results solve(const Function& function, Parameters* x_and_min) {
-    Initialize<NUM_PARAMETERS, NUM_RESIDUALS>(function);
+  Results Solve(const Function& function, Parameters* x_and_min) {
+    Initialize<NUM_RESIDUALS, NUM_PARAMETERS>(function);
 
     assert(x_and_min);
     Parameters& x = *x_and_min;
@@ -270,34 +271,34 @@
   };
 
   // The number of parameters and residuals are dynamically sized.
-  template <int N, int M>
-  typename enable_if<(N == Eigen::Dynamic && M == Eigen::Dynamic), void>::type
+  template <int R, int P>
+  typename enable_if<(R == Eigen::Dynamic && P == Eigen::Dynamic), void>::type
   Initialize(const Function& function) {
-    Initialize(function.NumParameters(), function.NumResiduals());
+    Initialize(function.NumResiduals(), function.NumParameters());
   }
 
   // The number of parameters is dynamically sized and the number of
   // residuals is statically sized.
-  template <int N, int M>
-  typename enable_if<(N == Eigen::Dynamic && M != Eigen::Dynamic), void>::type
+  template <int R, int P>
+  typename enable_if<(R == Eigen::Dynamic && P != Eigen::Dynamic), void>::type
   Initialize(const Function& function) {
-    Initialize(function.NumParameters(), M);
+    Initialize(function.NumResiduals(), P);
   }
 
   // The number of parameters is statically sized and the number of
   // residuals is dynamically sized.
-  template <int N, int M>
-  typename enable_if<(N != Eigen::Dynamic && M == Eigen::Dynamic), void>::type
+  template <int R, int P>
+  typename enable_if<(R != Eigen::Dynamic && P == Eigen::Dynamic), void>::type
   Initialize(const Function& function) {
-    Initialize(N, function.NumResiduals());
+    Initialize(R, function.NumParameters());
   }
 
   // The number of parameters and residuals are statically sized.
-  template <int N, int M>
-  typename enable_if<(N != Eigen::Dynamic && M != Eigen::Dynamic), void>::type
+  template <int R, int P>
+  typename enable_if<(R != Eigen::Dynamic && P != Eigen::Dynamic), void>::type
   Initialize(const Function& /* function */) { }
 
-  void Initialize(int num_parameters, int num_residuals) {
+  void Initialize(int num_residuals, int num_parameters) {
     error_.resize(num_residuals);
     f_x_new_.resize(num_residuals);
     jacobian_.resize(num_residuals, num_parameters);
@@ -308,4 +309,4 @@
 
 }  // namespace ceres
 
-#endif  // CERES_PUBLIC_TINY_SOLVER_H_
\ No newline at end of file
+#endif  // CERES_PUBLIC_TINY_SOLVER_H_
diff --git a/internal/ceres/tiny_solver_test.cc b/internal/ceres/tiny_solver_test.cc
index 86827d5..747e20d 100644
--- a/internal/ceres/tiny_solver_test.cc
+++ b/internal/ceres/tiny_solver_test.cc
@@ -70,8 +70,8 @@
   typedef double Scalar;
   enum {
     // Can also be Eigen::Dynamic.
-    NUM_PARAMETERS = 3,
     NUM_RESIDUALS = 2,
+    NUM_PARAMETERS = 3,
   };
   bool operator()(const double* parameters,
                   double* residuals,
@@ -84,8 +84,8 @@
  public:
   typedef double Scalar;
   enum {
-    NUM_PARAMETERS = Eigen::Dynamic,
     NUM_RESIDUALS = 2,
+    NUM_PARAMETERS = Eigen::Dynamic,
   };
 
   int NumParameters() const {
@@ -103,8 +103,8 @@
  public:
   typedef double Scalar;
   enum {
-    NUM_PARAMETERS = 3,
     NUM_RESIDUALS = Eigen::Dynamic,
+    NUM_PARAMETERS = 3,
   };
 
   int NumResiduals() const {
@@ -122,18 +122,18 @@
  public:
   typedef double Scalar;
   enum {
-    NUM_PARAMETERS = Eigen::Dynamic,
     NUM_RESIDUALS = Eigen::Dynamic,
+    NUM_PARAMETERS = Eigen::Dynamic,
   };
 
-  int NumParameters() const {
-    return 3;
-  }
-
   int NumResiduals() const {
     return 2;
   }
 
+  int NumParameters() const {
+    return 3;
+  }
+
   bool operator()(const double* parameters,
                   double* residuals,
                   double* jacobian) const {
@@ -149,7 +149,7 @@
   EXPECT_GT(residuals.norm(), 1e-10);
 
   TinySolver<Function> solver;
-  solver.solve(f, &x);
+  solver.Solve(f, &x);
 
   f(x.data(), residuals.data(), NULL);
   EXPECT_NEAR(0.0, residuals.norm(), 1e-10);
