diff --git a/matlab/estimation/dynare_estimation_1.m b/matlab/estimation/dynare_estimation_1.m
index 9c9947a3c3d8ff3d7a14e5e27abc759715e47c6c..21ccfa542184e5a875280207ff8b43198b0634c9 100644
--- a/matlab/estimation/dynare_estimation_1.m
+++ b/matlab/estimation/dynare_estimation_1.m
@@ -234,7 +234,13 @@ if ~isequal(options_.mode_compute,0) && ~options_.mh_posterior_mode_estimation &
     optimizer_vec = [options_.mode_compute;num2cell(options_.additional_optimizer_steps)];
     for optim_iter = 1:length(optimizer_vec)
         current_optimizer = optimizer_vec{optim_iter};
-        if current_optimizer~=11  
+        if current_optimizer~=11
+          if current_optimizer==5
+              if options_.analytic_derivation
+                  old_analytic_derivation = options_.analytic_derivation;
+                  options_.analytic_derivation=-1; %force analytic outer product gradient hessian for each iteration
+              end
+          end
           [xparam1, fval, ~, hh, options_, Scale, new_rat_hess_info] = dynare_minimize_objective(objective_function,xparam1,current_optimizer,options_,[bounds.lb bounds.ub],bayestopt_.name,bayestopt_,hh,dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,bounds,oo_.dr, oo_.steady_state,oo_.exo_steady_state,oo_.exo_det_steady_state);
         else 
           [xparam1, fval, ~, hh, options_, Scale, new_rat_hess_info] = dynare_minimize_objective(objective_function,xparam1,current_optimizer,options_,[bounds.lb bounds.ub],bayestopt_.name,bayestopt_,hh,dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,bounds,oo_);
@@ -245,6 +251,9 @@ if ~isequal(options_.mode_compute,0) && ~options_.mh_posterior_mode_estimation &
             if current_optimizer==5
                 newratflag = new_rat_hess_info.newratflag;
                 new_rat_hess_info = new_rat_hess_info.new_rat_hess_info;
+                if options_.analytic_derivation
+                    options_.analytic_derivation = old_analytic_derivation;
+                end
             elseif current_optimizer==6 %save scaling factor
                 save([M_.dname filesep 'Output' filesep M_.fname '_optimal_mh_scale_parameter.mat'],'Scale');
                 options_.mh_jscale = Scale;
diff --git a/matlab/optimization/dynare_minimize_objective.m b/matlab/optimization/dynare_minimize_objective.m
index 990f9b146e08310cd2dc72077bb60a7800bcd32b..9fe8028c2761412f1d557352de131e222aa15990 100644
--- a/matlab/optimization/dynare_minimize_objective.m
+++ b/matlab/optimization/dynare_minimize_objective.m
@@ -277,8 +277,6 @@ switch minimizer_algorithm
         prior_information.p2=NaN(n_params,1);
     end
     if options_.analytic_derivation
-        old_analytic_derivation = options_.analytic_derivation;
-        options_.analytic_derivation=-1; %force analytic outer product gradient hessian for each iteration
         analytic_grad=1;
         crit = options_.newrat.tolerance.f_analytic;
         newratflag = 0; %analytical Hessian
@@ -340,9 +338,6 @@ switch minimizer_algorithm
     [opt_par_values,hessian_mat,~,fval,~,new_rat_hess_info] = newrat(objective_function,start_par_value,bounds,analytic_grad,crit,nit,0,Verbose,Save_files,hess_info,prior_information.p2,options_.gradient_epsilon,parameter_names,varargin{:});    %hessian_mat is the plain outer product gradient Hessian
     new_rat_hess_info.new_rat_hess_info = new_rat_hess_info;
     new_rat_hess_info.newratflag = newratflag;
-    if options_.analytic_derivation 
-        options_.analytic_derivation = old_analytic_derivation;
-    end
   case 6
     if isempty(prior_information) %Inf will be reset
         prior_information.p2=Inf(n_params,1);