diff --git a/doc/dynare.texi b/doc/dynare.texi
index 99d82b50308a52d9892669798957522fad67e578..4f2d3f4ee67a4b571f672dc086361b9fb2a4f574 100644
--- a/doc/dynare.texi
+++ b/doc/dynare.texi
@@ -5280,6 +5280,10 @@ Available options are:
 
 @table @code
 
+@item 'CMAESResume'
+Resume previous run. Requires the @code{variablescmaes.mat} from the last run. 
+Set to 1 to enable. Default: @code{0}
+
 @item 'MaxIter'
 Maximum number of iterations.
 
diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m
index 271bef7775254809986466fd2c276707898fe472..3f65232c9aeb633d6bc570dacf65c792ad24a0c2 100644
--- a/matlab/global_initialization.m
+++ b/matlab/global_initialization.m
@@ -540,7 +540,7 @@ simplex.delta_factor=0.05;
 options_.simplex = simplex;
 
 % CMAES optimization routine.
-cmaes.SaveVariables='off';
+cmaes.SaveVariables='on';
 cmaes.DispFinal='on';
 cmaes.WarnOnEqualFunctionValues='no';
 cmaes.DispModulo='10';
@@ -548,6 +548,7 @@ cmaes.LogModulo='0';
 cmaes.LogTime='0';
 cmaes.TolFun = 1e-7;
 cmaes.TolX = 1e-7;
+cmaes.Resume = 0;
 options_.cmaes = cmaes;
 
 % simpsa optimization routine.
diff --git a/matlab/optimization/cmaes.m b/matlab/optimization/cmaes.m
index 2fc15726f819e968b71fb3a9b5c6eb514d64dc02..833dbe9b2f9ce82dbf8a4cfdcb7650e7e25db3a9 100644
--- a/matlab/optimization/cmaes.m
+++ b/matlab/optimization/cmaes.m
@@ -191,10 +191,10 @@ defopts.MaxFunEvals  = 'Inf  % maximal number of fevals';
 defopts.MaxIter      = '1e3*(N+5)^2/sqrt(popsize) % maximal number of iterations';
 defopts.StopFunEvals = 'Inf  % stop after resp. evaluation, possibly resume later';
 defopts.StopIter     = 'Inf  % stop after resp. iteration, possibly resume later';
-defopts.TolX         = '1e-11*max(insigma) % stop if x-change smaller TolX';
+defopts.TolX         = '1e-9*max(insigma) % stop if x-change smaller TolX';
 defopts.TolUpX       = '1e3*max(insigma) % stop if x-changes larger TolUpX';
-defopts.TolFun       = '1e-12 % stop if fun-changes smaller TolFun';
-defopts.TolHistFun   = '1e-13 % stop if back fun-changes smaller TolHistFun';
+defopts.TolFun       = '1e-10 % stop if fun-changes smaller TolFun';
+defopts.TolHistFun   = '1e-11 % stop if back fun-changes smaller TolHistFun';
 defopts.StopOnStagnation = 'on  % stop when fitness stagnates for a long time';
 defopts.StopOnWarnings = 'yes  % ''no''==''off''==0, ''on''==''yes''==1 ';
 defopts.StopOnEqualFunctionValues = '2 + N/3  % number of iterations';  
diff --git a/matlab/optimization/dynare_minimize_objective.m b/matlab/optimization/dynare_minimize_objective.m
index f570a1a3e4bca03865c1edc1b66eb2dd12a54f81..a4aff3bfaa94bddebd1707767e109051940a1fd8 100644
--- a/matlab/optimization/dynare_minimize_objective.m
+++ b/matlab/optimization/dynare_minimize_objective.m
@@ -302,8 +302,11 @@ switch minimizer_algorithm
     [opt_par_values,fval,exitflag] = simplex_optimization_routine(objective_function,start_par_value,simplexOptions,parameter_names,varargin{:});
   case 9
     % Set defaults
-    H0 = 1e-4*ones(n_params,1);
+    H0 = (bounds(:,2)-bounds(:,1))*0.2;
+    H0(~isfinite(H0)) = 0.01;
     cmaesOptions = options_.cmaes;
+    cmaesOptions.LBounds = bounds(:,1);
+    cmaesOptions.UBounds = bounds(:,2);
     % Modify defaults
     if ~isempty(options_.optim_opt)
         options_list = read_key_value_string(options_.optim_opt);
@@ -328,6 +331,10 @@ switch minimizer_algorithm
                   cmaesOptions.LogModulo = '0';    % [0:Inf] if >1 record data less frequently after gen=100';
                   cmaesOptions.LogTime   = '0';    % [0:100] max. percentage of time for recording data';
                 end
+              case 'CMAESResume'
+                  if options_list{i,2}==1
+                    cmaesOptions.Resume = 'yes';
+                  end
               otherwise
                 warning(['cmaes: Unknown option (' options_list{i,1}  ')!'])
             end