diff --git a/matlab/dynare_estimation_1.m b/matlab/dynare_estimation_1.m
index 1a674c32bfb3392e77c2a745b37126b9b03324a8..f4f6a9b9fe311776854322f2ef59aa1120e2ac5a 100644
--- a/matlab/dynare_estimation_1.m
+++ b/matlab/dynare_estimation_1.m
@@ -235,7 +235,7 @@ if ~isequal(options_.mode_compute,0) && ~options_.mh_posterior_mode_estimation
                 [junk1, junk2,junk3, junk4, hh] = feval(objective_function,xparam1, ...
                                                         dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,bounds,oo_);
                 options_.analytic_derivation = ana_deriv_old;
-            elseif ~isnumeric(options_.mode_compute) || ~(isequal(options_.mode_compute,5) && newratflag~=1)
+            elseif ~isnumeric(options_.mode_compute) || ~(isequal(options_.mode_compute,5) && newratflag~=1 && strcmp(func2str(objective_function),'dsge_likelihood')) 
                 % with flag==0, we force to use the hessian from outer product gradient of optimizer 5
                 if options_.hessian.use_penalized_objective
                     penalized_objective_function = str2func('penalty_objective_function');
diff --git a/matlab/optimization/newrat.m b/matlab/optimization/newrat.m
index c554a22dc14a5111342e9c9281f7749d6eca3a9d..ef6d19d019823a2982a5575d1e4b5e56ffd30892 100644
--- a/matlab/optimization/newrat.m
+++ b/matlab/optimization/newrat.m
@@ -154,7 +154,7 @@ while norm(gg)>gtol && check==0 && jit<nit
     if length(find(ig))<nx
         ggx=ggx*0;
         ggx(find(ig))=gg(find(ig));
-        if analytic_derivation
+        if analytic_derivation || ~outer_product_gradient,
             hhx=hh;
         else
             hhx = reshape(dum,nx,nx);