diff --git a/matlab/evaluate_planner_objective.m b/matlab/evaluate_planner_objective.m
index c37764ab6c8033c0e4a25297f62893204125840f..65c1059b1c5296d91b2b62365a17b12526537847 100644
--- a/matlab/evaluate_planner_objective.m
+++ b/matlab/evaluate_planner_objective.m
@@ -198,7 +198,7 @@ if options_.ramsey_policy
             Wbar = U/(1-beta);
             Wy = Uy*gy/(eye(nspred)-beta*Gy);
             Wu = Uy*gu + beta*Wy*Gu;
-            
+
             if isempty(options_.qz_criterium)
                 options_.qz_criterium = 1+1e-6;
             end
@@ -225,16 +225,43 @@ if options_.ramsey_policy
             planner_objective_value.conditional.steady_initial_multiplier = W_L_SS;
             planner_objective_value.conditional.zero_initial_multiplier = W_L_0;
         else
-            %Order k code will go here!
-            if ~isempty(M_.endo_histval)
-               fprintf('\nevaluate_planner_objective: order>2 conditional and unconditional welfare calculations not yet supported when an histval block is provided\n')
-            else
-               fprintf('\nevaluate_planner_objective: order>2 conditional welfare with initial Lagrange multipliers set to zero and unconditional welfare calculations not yet supported\n')
-               planner_objective_value.conditional.steady_initial_multiplier = k_order_welfare(dr, M_, options_);
-               planner_objective_value.conditional.zero_initial_multiplier = NaN;
-               planner_objective_value.unconditional = NaN;
+            % Computes the welfare decision rule
+            [W] = k_order_welfare(dr,M_,options_);
+            % Appends the welfare decision rule to the endogenous variables decision
+            % rule
+            g = dr;
+            for i=0:options_.order
+               eval("g.g_"+num2str(i)+" = [dr.g_"+num2str(i)+"; W.W_"+num2str(i)+"];");
             end
-            return
+            % Amends the steady-state vector accordingly
+            [U] = feval([M_.fname '.objective.static'],ys,zeros(1,exo_nbr), M_.params);
+            ysteady = [ys(oo_.dr.order_var); U/(1-beta)];
+
+            % Generates the sequence of shocks to compute unconditional welfare
+            nper = 10000;
+            nburn = 1000;
+            chol_S = chol(M_.Sigma_e);
+            exo_simul = chol_S*randn(nper,M_.exo_nbr)';
+            yhat_start = zeros(M_.endo_nbr+1,1);
+            [moment] = k_order_mean(options_.order, M_.nstatic, M_.npred, M_.nboth, M_.nfwrd+1, M_.exo_nbr, 1, nburn, yhat_start, exo_simul, ysteady, g);
+
+            % Stores the result for unconditional welfare
+            planner_objective_value.unconditional = moment(end);
+
+            % Conditional welfare
+            % Gets initial values
+            [yhat_L_SS,yhat_L_0, u] = get_initial_state(ys,M_,dr,oo_);
+
+            % Conditional welfare (i) with Lagrange multipliers set to their
+            % steady-state values
+            yhat_start(M_.nstatic+1:M_.nstatic+M_.npred+M_.nboth) = yhat_L_SS;
+            [moment,sim] = k_order_mean(options_.order, M_.nstatic, M_.npred, M_.nboth, M_.nfwrd+1, M_.exo_nbr, 1, 0, yhat_start, u, ysteady, g);
+            planner_objective_value.conditional.steady_initial_multiplier = sim(end,1);
+
+            % Conditional welfare (ii) with Lagrange multipliers set to 0
+            yhat_start(M_.nstatic+1:M_.nstatic+M_.npred+M_.nboth) = yhat_L_0;
+            [moment,sim] = k_order_mean(options_.order, M_.nstatic, M_.npred, M_.nboth, M_.nfwrd+1, M_.exo_nbr, 1, nburn, yhat_start, u, ysteady, g);
+            planner_objective_value.conditional.zero_initial_multiplier = sim(end,1);
         end
     end
 elseif options_.discretionary_policy
diff --git a/tests/optimal_policy/neo_growth_ramsey_k_order.mod b/tests/optimal_policy/neo_growth_ramsey_k_order.mod
index 3b994a8fd97accf3b1b35c376a8e468f511b6717..e11ff0f519361f200592095a1fca3f5e4eb6abc8 100644
--- a/tests/optimal_policy/neo_growth_ramsey_k_order.mod
+++ b/tests/optimal_policy/neo_growth_ramsey_k_order.mod
@@ -31,13 +31,10 @@ end;
 
 stoch_simul(order=6, irf=0);
 
-%evaluate_planner_objective;
+evaluate_planner_objective;
 
 [W_dynpp] = k_order_welfare(oo_.dr, M_, options_);
 
-%if condWelfare~=oo_.planner_objective_value.conditional.steady_initial_multiplier
-%   error('Inaccurate conditional welfare with Lagrange multiplier set to its steady-state value');
-%end
 if ~exist(['neo_growth_k_order' filesep 'Output' filesep 'neo_growth_k_order_results.mat'],'file');
    error('neo_growth_k_order must be run first');
 end;