diff --git a/matlab/display_problematic_vars_Jacobian.m b/matlab/display_problematic_vars_Jacobian.m
index 07fe5ecf13d2bdb0e316b670a540ca6e1ce256bd..f204b421a877e4525e4305869b9fa3c0d425018e 100644
--- a/matlab/display_problematic_vars_Jacobian.m
+++ b/matlab/display_problematic_vars_Jacobian.m
@@ -16,7 +16,7 @@ function []=display_problematic_vars_Jacobian(problemrow,problemcol,M_,x,type,ca
 %   none.
 %
 
-% Copyright © 2014-2021 Dynare Team
+% Copyright © 2014-2023 Dynare Team
 %
 % This file is part of Dynare.
 %
@@ -37,7 +37,7 @@ skipline();
 if nargin<6
     caller_string='';
 end
-initial_aux_eq_nbr=M_.ramsey_eq_nbr;
+initial_aux_eq_nbr=M_.ramsey_orig_endo_nbr;
 if strcmp(type,'dynamic')
     for ii=1:length(problemrow)
         if problemcol(ii)>max(M_.lead_lag_incidence)
diff --git a/matlab/dyn_ramsey_static.m b/matlab/dyn_ramsey_static.m
index f23db49d8234174b9647c0c8d0cb5d4702b83259..c9bb88479622eef383ccdc7546c7177f3d9dc8b4 100644
--- a/matlab/dyn_ramsey_static.m
+++ b/matlab/dyn_ramsey_static.m
@@ -100,10 +100,9 @@ params = M.params;
 endo_nbr = M.endo_nbr;
 endo_names = M.endo_names;
 orig_endo_nbr = M.orig_endo_nbr;
-aux_vars_type = [M.aux_vars.type];
-orig_endo_aux_nbr = orig_endo_nbr + min(find(aux_vars_type == 6)) - 1;
-orig_eq_nbr = M.orig_eq_nbr;
-inst_nbr = orig_endo_aux_nbr - orig_eq_nbr;
+ramsey_orig_endo_nbr = M.ramsey_orig_endo_nbr;
+ramsey_orig_eq_nbr = M.ramsey_orig_eq_nbr;
+inst_nbr = ramsey_orig_endo_nbr - ramsey_orig_eq_nbr;
 % indices of Lagrange multipliers
 fname = M.fname;
 
@@ -161,7 +160,7 @@ end
 % the auxiliary variables before the Lagrange multipliers are treated
 % as ordinary endogenous variables
 A = feval([fname '.ramsey_multipliers_static_g1'], xx, exo_ss, params, M.ramsey_multipliers_static_g1_sparse_rowval, M.ramsey_multipliers_static_g1_sparse_colval, M.ramsey_multipliers_static_g1_sparse_colptr);
-y = res(1:orig_endo_aux_nbr);
+y = res(1:ramsey_orig_endo_nbr);
 mult = -A\y;
 
 resids1 = y+A*mult;
@@ -175,13 +174,13 @@ end
 if options_.steadystate_flag
     resids = r1;
 else
-    resids = [res(orig_endo_aux_nbr+(1:orig_endo_nbr-inst_nbr)); r1];
+    resids = [res(ramsey_orig_endo_nbr+(1:orig_endo_nbr-inst_nbr)); r1];
 end
 rJ = [];
 if needs_set_auxiliary_variables
-    steady_state = s_a_v_func([xx(1:orig_endo_aux_nbr); mult]);
+    steady_state = s_a_v_func([xx(1:ramsey_orig_endo_nbr); mult]);
 else
-    steady_state = [xx(1:orig_endo_aux_nbr); mult];
+    steady_state = [xx(1:ramsey_orig_endo_nbr); mult];
 end
 
 function result = check_static_model(ys,M,options_,oo)
diff --git a/matlab/evaluate_steady_state.m b/matlab/evaluate_steady_state.m
index b2be3d0545f1dbf427a3a4d29c85bcf3d9e6fbf0..3ac5164e8334694e294e6fab6598a1c3be63c436 100644
--- a/matlab/evaluate_steady_state.m
+++ b/matlab/evaluate_steady_state.m
@@ -82,8 +82,7 @@ if options.ramsey_policy
         else
             [resids, ~ , jacob]= evaluate_static_model(ys,exo_ss,params,M,options);
         end
-        n_ramsey_equations=M.ramsey_eq_nbr;
-        nan_indices=find(isnan(resids(n_ramsey_equations+1:n_ramsey_equations+M.orig_eq_nbr))); % 
+        nan_indices=find(isnan(resids(M.ramsey_orig_endo_nbr+(1:M.ramsey_orig_eq_nbr))));
 
         if ~isempty(nan_indices)
             if options.debug
@@ -106,7 +105,7 @@ if options.ramsey_policy
             return
         end
 
-        if any(imag(ys(n_ramsey_equations+1:n_ramsey_equations+M.orig_eq_nbr)))
+        if any(imag(ys(M.ramsey_orig_endo_nbr+(1:M.ramsey_orig_eq_nbr))))
             if options.debug
                 fprintf('\nevaluate_steady_state: The steady state file computation for the Ramsey problem resulted in complex numbers.\n')
                 fprintf('evaluate_steady_state: The steady state was computed conditional on the following initial instrument values: \n')
@@ -121,7 +120,7 @@ if options.ramsey_policy
             return
         end
 
-        if max(abs(resids(n_ramsey_equations+1:n_ramsey_equations+M.orig_eq_nbr))) > options.solve_tolf %does it solve for all variables except for the Lagrange multipliers
+        if max(abs(resids(M.ramsey_orig_endo_nbr+(1:M.ramsey_orig_eq_nbr)))) > options.solve_tolf %does it solve for all variables except for the Lagrange multipliers
             if options.debug
                 fprintf('\nevaluate_steady_state: The steady state file does not solve the steady state for the Ramsey problem.\n')
                 fprintf('evaluate_steady_state: Conditional on the following instrument values: \n')
@@ -129,9 +128,9 @@ if options.ramsey_policy
                     fprintf('\t %s \t %f \n',options.instruments{ii},ys_init(strmatch(options.instruments{ii},M.endo_names,'exact')))
                 end
                 fprintf('evaluate_steady_state: the following equations have non-zero residuals: \n')
-                for ii=n_ramsey_equations+1:M.endo_nbr
+                for ii=M.ramsey_orig_endo_nbr+1:M.endo_nbr
                     if abs(resids(ii)) > options.solve_tolf
-                        fprintf('\t Equation number %d: %f\n',ii-n_ramsey_equations, resids(ii))
+                        fprintf('\t Equation number %d: %f\n',ii-M.ramsey_orig_endo_nbr, resids(ii))
                     end
                 end
                 skipline(2)
@@ -165,7 +164,7 @@ if options.ramsey_policy
             end
         end
         if steadystate_flag
-            nan_indices_mult=find(isnan(resids(1:n_ramsey_equations)));
+            nan_indices_mult=find(isnan(resids(1:M.ramsey_orig_endo_nbr)));
             if any(nan_indices_mult)
                 fprintf('evaluate_steady_state: The steady state results NaN for auxiliary equation %u.\n',nan_indices_mult);
                 fprintf('evaluate_steady_state: This is often a sign of problems.\n');
@@ -200,9 +199,8 @@ if options.ramsey_policy
     %check whether steady state really solves the model
     resids = evaluate_static_model(ys,exo_ss,params,M,options);
 
-    n_ramsey_equations=M.ramsey_eq_nbr;
-    nan_indices_multiplier=find(isnan(resids(1:n_ramsey_equations)));
-    nan_indices=find(isnan(resids(n_ramsey_equations+1:end)));
+    nan_indices_multiplier=find(isnan(resids(1:M.ramsey_orig_endo_nbr)));
+    nan_indices=find(isnan(resids(M.ramsey_orig_endo_nbr+1:end)));
 
     if ~isempty(nan_indices)
         if options.debug
@@ -248,14 +246,14 @@ if options.ramsey_policy
                 fprintf('\t %s \t %f \n',options.instruments{i},ys(strmatch(options.instruments{i},M.endo_names,'exact')))
             end
             fprintf('evaluate_steady_state: The following equations have non-zero residuals: \n')
-            for ii=1:n_ramsey_equations
+            for ii=1:M.ramsey_orig_endo_nbr
                 if abs(resids(ii)) > options.solve_tolf/100
                     fprintf('\t Auxiliary Ramsey equation number %d: %f\n',ii, resids(ii))
                 end
             end
-            for ii=n_ramsey_equations+1:M.endo_nbr
+            for ii=M.ramsey_orig_endo_nbr+1:M.endo_nbr
                 if abs(resids(ii)) > options.solve_tolf/100
-                    fprintf('\t Equation number %d: %f\n',ii-n_ramsey_equations, resids(ii))
+                    fprintf('\t Equation number %d: %f\n',ii-M.ramsey_orig_endo_nbr, resids(ii))
                 end
             end
             skipline(2)
diff --git a/matlab/model_diagnostics.m b/matlab/model_diagnostics.m
index 752d1416a8281100cc580512a68934ac0e4cc082..845bc85860e2733a621fde9c1c80f0151b06ce42 100644
--- a/matlab/model_diagnostics.m
+++ b/matlab/model_diagnostics.m
@@ -41,8 +41,7 @@ if options.ramsey_policy
     %test whether specification matches
     inst_nbr = size(options.instruments,1);
     if inst_nbr~=0
-        orig_endo_aux_nbr = M.orig_endo_nbr + min(find([M.aux_vars.type] == 6)) - 1;
-        implied_inst_nbr = orig_endo_aux_nbr - M.orig_eq_nbr;
+        implied_inst_nbr = M.ramsey_orig_endo_nbr - M.ramsey_orig_eq_nbr;
         if inst_nbr>implied_inst_nbr
             warning('You have specified more steady state instruments than there are omitted equations. While there are use cases for this setup, it is rather unusual. Check whether this is desired.')
         elseif inst_nbr<implied_inst_nbr
diff --git a/matlab/resid.m b/matlab/resid.m
index b7586ccea1490c72468cc91716cdd9e1edbef726..620ace44886124287047d5f9d3a65317b0e26a8b 100644
--- a/matlab/resid.m
+++ b/matlab/resid.m
@@ -12,7 +12,7 @@ function z = resid(options_resid_)
 % SPECIAL REQUIREMENTS
 %    none
 
-% Copyright © 2001-2022 Dynare Team
+% Copyright © 2001-2023 Dynare Team
 %
 % This file is part of Dynare.
 %
@@ -93,15 +93,25 @@ if nargout == 0
     fprintf('Residuals of the static equations%s:',disp_string)
     skipline()
     any_non_zero_residual = false;
-    for i=1:M_.orig_eq_nbr
-        if abs(z(i+M_.ramsey_eq_nbr)) < options_.solve_tolf/100
+    if options_.ramsey_policy
+        first_eq = M_.ramsey_orig_endo_nbr+1;
+        last_eq = M_.ramsey_orig_endo_nbr+M_.ramsey_orig_eq_nbr;
+    elseif options_.discretionary_policy
+        first_eq = 1;
+        last_eq = M_.discretionary_orig_eq_nbr;
+    else
+        first_eq = 1;
+        last_eq = M_.orig_endo_nbr;
+    end
+    for i=first_eq:last_eq
+        if abs(z(i)) < options_.solve_tolf/100
             tmp = 0;
         else
-            tmp = z(i+M_.ramsey_eq_nbr);
+            tmp = z(i);
             any_non_zero_residual = true;
         end
         if istag
-            tg = tags(cell2mat(tags(:,1)) == i+M_.ramsey_eq_nbr,2:3); % all tags for equation i
+            tg = tags(cell2mat(tags(:,1)) == i,2:3); % all tags for equation i
             ind = strmatch('name', cellstr( tg(:,1) ) );
         end
         if ~(non_zero && tmp == 0)
diff --git a/preprocessor b/preprocessor
index 70192aec718e5f1e13f1513a7a23e48c31f30714..4282c98527817ed587d6df58b96a5d4432aa0072 160000
--- a/preprocessor
+++ b/preprocessor
@@ -1 +1 @@
-Subproject commit 70192aec718e5f1e13f1513a7a23e48c31f30714
+Subproject commit 4282c98527817ed587d6df58b96a5d4432aa0072