diff --git a/preprocessor/ModFile.cc b/preprocessor/ModFile.cc
index 1a62e8004811663313adce46603d94cc29e71beb..0d2089eabc409aa1688b35bbe18501d0ad63ae43 100644
--- a/preprocessor/ModFile.cc
+++ b/preprocessor/ModFile.cc
@@ -490,10 +490,11 @@ ModFile::computingPass(bool no_tmp_terms, FileOutputType output, bool compute_xr
 	  const bool static_hessian = mod_file_struct.identification_present
 	    || mod_file_struct.estimation_analytic_derivation;
           FileOutputType paramsDerivatives = none;
-          if (mod_file_struct.estimation_analytic_derivation)
-            paramsDerivatives = third;
-          if (mod_file_struct.identification_present || !sec_order_param_deriv)
-            paramsDerivatives = first;
+          if (mod_file_struct.identification_present || mod_file_struct.estimation_analytic_derivation)
+            if (!sec_order_param_deriv)
+              paramsDerivatives = first;
+            else
+              paramsDerivatives = second;
 	  static_model.computingPass(global_eval_context, no_tmp_terms, static_hessian,
 				     false, paramsDerivatives, block, byte_code);
 	}
@@ -527,10 +528,11 @@ ModFile::computingPass(bool no_tmp_terms, FileOutputType output, bool compute_xr
 		    || mod_file_struct.estimation_analytic_derivation
 		    || output == third;
                   FileOutputType paramsDerivatives = none;
-                  if (mod_file_struct.estimation_analytic_derivation)
-                    paramsDerivatives = third;
-                  if (mod_file_struct.identification_present || !sec_order_param_deriv)
-                    paramsDerivatives = first;
+                  if (mod_file_struct.identification_present || mod_file_struct.estimation_analytic_derivation)
+                    if (!sec_order_param_deriv)
+                      paramsDerivatives = first;
+                    else
+                      paramsDerivatives = second;
 		  dynamic_model.computingPass(true, hessian, thirdDerivatives, paramsDerivatives, global_eval_context, no_tmp_terms, block, use_dll, byte_code, compute_xrefs);
 		}
 	    }
diff --git a/preprocessor/ModelTree.cc b/preprocessor/ModelTree.cc
index 518bd3fde01bfdcbf83fb4acaf6214ed3faa527e..f2aa51f8d2a18e83931f381293f9aeb8dd8df0df 100644
--- a/preprocessor/ModelTree.cc
+++ b/preprocessor/ModelTree.cc
@@ -1659,7 +1659,7 @@ ModelTree::sparseHelper(int order, ostream &output, int row_nb, int col_nb, Expr
 void
 ModelTree::computeParamsDerivatives(FileOutputType paramsDerivatives)
 {
-  if (!(paramsDerivatives == first || paramsDerivatives == second || paramsDerivatives == third))
+  if (!(paramsDerivatives == first || paramsDerivatives == second))
     return;
   set<int> deriv_id_set;
   addAllParamDerivId(deriv_id_set);
@@ -1677,7 +1677,7 @@ ModelTree::computeParamsDerivatives(FileOutputType paramsDerivatives)
           residuals_params_derivatives[make_pair(eq, param)] = d1;
         }
 
-      if (paramsDerivatives == second || paramsDerivatives == third)
+      if (paramsDerivatives == second)
         for (first_derivatives_t::const_iterator it2 = residuals_params_derivatives.begin();
              it2 != residuals_params_derivatives.end(); it2++)
           {
@@ -1704,35 +1704,36 @@ ModelTree::computeParamsDerivatives(FileOutputType paramsDerivatives)
           jacobian_params_derivatives[make_pair(eq, make_pair(var, param))] = d2;
         }
 
-      if (paramsDerivatives == second || paramsDerivatives == third)
-        for (second_derivatives_t::const_iterator it2 = jacobian_params_derivatives.begin();
-             it2 != jacobian_params_derivatives.end(); it2++)
-          {
-            int eq = it2->first.first;
-            int var = it2->first.second.first;
-            int param1 = it2->first.second.second;
-            expr_t d1 = it2->second;
-
-            expr_t d2 = d1->getDerivative(param);
-            if (d2 == Zero)
-              continue;
-            jacobian_params_second_derivatives[make_pair(eq, make_pair(var, make_pair(param1, param)))] = d2;
-          }
-
-      if (paramsDerivatives == third)
-        for (second_derivatives_t::const_iterator it2 = second_derivatives.begin();
-             it2 != second_derivatives.end(); it2++)
-          {
-            int eq = it2->first.first;
-            int var1 = it2->first.second.first;
-            int var2 = it2->first.second.second;
-            expr_t d1 = it2->second;
+      if (paramsDerivatives == second)
+        {
+          for (second_derivatives_t::const_iterator it2 = jacobian_params_derivatives.begin();
+               it2 != jacobian_params_derivatives.end(); it2++)
+            {
+              int eq = it2->first.first;
+              int var = it2->first.second.first;
+              int param1 = it2->first.second.second;
+              expr_t d1 = it2->second;
+
+              expr_t d2 = d1->getDerivative(param);
+              if (d2 == Zero)
+                continue;
+              jacobian_params_second_derivatives[make_pair(eq, make_pair(var, make_pair(param1, param)))] = d2;
+            }
 
-            expr_t d2 = d1->getDerivative(param);
-            if (d2 == Zero)
-              continue;
-            hessian_params_derivatives[make_pair(eq, make_pair(var1, make_pair(var2, param)))] = d2;
-          }
+          for (second_derivatives_t::const_iterator it2 = second_derivatives.begin();
+               it2 != second_derivatives.end(); it2++)
+            {
+              int eq = it2->first.first;
+              int var1 = it2->first.second.first;
+              int var2 = it2->first.second.second;
+              expr_t d1 = it2->second;
+
+              expr_t d2 = d1->getDerivative(param);
+              if (d2 == Zero)
+                continue;
+              hessian_params_derivatives[make_pair(eq, make_pair(var1, make_pair(var2, param)))] = d2;
+            }
+        }
     }
 }