diff --git a/src/ComputingTasks.cc b/src/ComputingTasks.cc
index c67084a4eac3843a6077bd2f3a0a7bab342e85e9..e73f289299318d2eb87d220e01e5b98745f6d06f 100644
--- a/src/ComputingTasks.cc
+++ b/src/ComputingTasks.cc
@@ -1008,6 +1008,22 @@ RamseyPolicyStatement::writeJsonOutput(ostream &output) const
          << "}";
 }
 
+EvaluatePlannerObjective::EvaluatePlannerObjective()
+{
+}
+
+void
+EvaluatePlannerObjective::writeOutput(ostream &output, const string &basename, bool minimal_workspace) const
+{
+  output << "oo_.planner_objective_value = evaluate_planner_objective(M_, options_, oo_);" << endl;
+}
+
+void
+EvaluatePlannerObjective::writeJsonOutput(ostream &output) const
+{
+  output << R"({"statementName": "evaluate_planner_objective"})";
+}
+
 DiscretionaryPolicyStatement::DiscretionaryPolicyStatement(SymbolList symbol_list_arg,
                                                            OptionsList options_list_arg) :
   symbol_list{move(symbol_list_arg)},
diff --git a/src/ComputingTasks.hh b/src/ComputingTasks.hh
index abfb95ed71dd75021afc56dae4301d53a13acf58..31558a37421817514e61b945472eeca1362de6ef 100644
--- a/src/ComputingTasks.hh
+++ b/src/ComputingTasks.hh
@@ -254,6 +254,14 @@ public:
   void writeJsonOutput(ostream &output) const override;
 };
 
+class EvaluatePlannerObjective : public Statement
+{
+public:
+  EvaluatePlannerObjective();
+  void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
+  void writeJsonOutput(ostream &output) const override;
+};
+
 class DiscretionaryPolicyStatement : public Statement
 {
 private:
diff --git a/src/DynareBison.yy b/src/DynareBison.yy
index 44490b0a32151606a52dd93866152c8ef5be5783..d1d1be31a5aa6049d7b31378747b99ed63c4aae1 100644
--- a/src/DynareBison.yy
+++ b/src/DynareBison.yy
@@ -114,7 +114,7 @@ class ParsingDriver;
 %token SHOCKS SHOCK_DECOMPOSITION SHOCK_GROUPS USE_SHOCK_GROUPS SIGMA_E SIMUL SIMUL_ALGO SIMUL_SEED ENDOGENOUS_TERMINAL_PERIOD
 %token SMOOTHER SMOOTHER2HISTVAL SQUARE_ROOT_SOLVER STACK_SOLVE_ALGO STEADY_STATE_MODEL SOLVE_ALGO SOLVER_PERIODS ROBUST_LIN_SOLVE
 %token STDERR STEADY STOCH_SIMUL SYLVESTER SYLVESTER_FIXED_POINT_TOL REGIMES REGIME REALTIME_SHOCK_DECOMPOSITION CONDITIONAL UNCONDITIONAL
-%token TEX RAMSEY_MODEL RAMSEY_POLICY RAMSEY_CONSTRAINTS PLANNER_DISCOUNT DISCRETIONARY_POLICY DISCRETIONARY_TOL
+%token TEX RAMSEY_MODEL RAMSEY_POLICY RAMSEY_CONSTRAINTS PLANNER_DISCOUNT DISCRETIONARY_POLICY DISCRETIONARY_TOL EVALUATE_PLANNER_OBJECTIVE
 %token <string> TEX_NAME
 %token UNIFORM_PDF UNIT_ROOT_VARS USE_DLL USEAUTOCORR GSA_SAMPLE_FILE USE_UNIVARIATE_FILTERS_IF_SINGULARITY_IS_DETECTED
 %token VALUES VAR VAREXO VAREXO_DET VARIABLE VAROBS VAREXOBS PREDETERMINED_VARIABLES VAR_EXPECTATION VAR_EXPECTATION_MODEL PLOT_SHOCK_DECOMPOSITION MODEL_LOCAL_VARIABLE
@@ -254,6 +254,7 @@ statement : parameters
           | ramsey_model
           | ramsey_policy
 	  | ramsey_constraints
+          | evaluate_planner_objective
 	  | discretionary_policy
           | bvar_density
           | bvar_forecast
@@ -2349,6 +2350,10 @@ ramsey_constraint : NAME  LESS expression ';'
                     { driver.ramsey_constraint_add_greater_equal($1,$3); }
 		  ;
 
+evaluate_planner_objective : EVALUATE_PLANNER_OBJECTIVE ';'
+                             { driver.evaluate_planner_objective(); }
+                           ;
+
 discretionary_policy : DISCRETIONARY_POLICY ';'
                        { driver.discretionary_policy(); }
                      | DISCRETIONARY_POLICY '(' discretionary_policy_options_list ')' ';'
diff --git a/src/DynareFlex.ll b/src/DynareFlex.ll
index 989bc71b8e065cf4ea06c43146d6a15898f9991d..f1c1d074ff0808cadb4b36c51d7473fb6c2fa680 100644
--- a/src/DynareFlex.ll
+++ b/src/DynareFlex.ll
@@ -148,6 +148,7 @@ DATE -?[0-9]+([ya]|m([1-9]|1[0-2])|q[1-4]|w([1-9]{1}|[1-4][0-9]|5[0-2]))
 <INITIAL>planner_objective {BEGIN DYNARE_STATEMENT; return token::PLANNER_OBJECTIVE;}
 <INITIAL>ramsey_model {BEGIN DYNARE_STATEMENT; return token::RAMSEY_MODEL;}
 <INITIAL>ramsey_policy {BEGIN DYNARE_STATEMENT; return token::RAMSEY_POLICY;}
+<INITIAL>evaluate_planner_objective {BEGIN DYNARE_STATEMENT; return token::EVALUATE_PLANNER_OBJECTIVE;}
 <INITIAL>discretionary_policy {BEGIN DYNARE_STATEMENT; return token::DISCRETIONARY_POLICY;}
 <INITIAL>identification {BEGIN DYNARE_STATEMENT; return token::IDENTIFICATION;}
 
diff --git a/src/ParsingDriver.cc b/src/ParsingDriver.cc
index 0f72b0c50cbc8f0640ac3de21b218d88b1abc576..be326eb295eb1d9222ea7ba85f2930dab44a2489 100644
--- a/src/ParsingDriver.cc
+++ b/src/ParsingDriver.cc
@@ -2201,6 +2201,12 @@ ParsingDriver::add_to_ramsey_policy_list(string name)
   ramsey_policy_list.push_back(move(name));
 }
 
+void
+ParsingDriver::evaluate_planner_objective()
+{
+  mod_file->addStatement(make_unique<EvaluatePlannerObjective>());
+}
+
 void
 ParsingDriver::discretionary_policy()
 {
diff --git a/src/ParsingDriver.hh b/src/ParsingDriver.hh
index 81a88a5cb8122ed3835727eda6bf826ac32fbc2a..8600f63e3d606d00b7778988d756a40aafaa85b2 100644
--- a/src/ParsingDriver.hh
+++ b/src/ParsingDriver.hh
@@ -658,6 +658,8 @@ public:
   void add_ramsey_constraint(const string &name, BinaryOpcode op_code, const expr_t rhs);
   //! Ramsey policy statement
   void ramsey_policy();
+  //! Evaluate Planner Objective
+  void evaluate_planner_objective();
   //! Discretionary policy statement
   void discretionary_policy();
   //! Adds a write_latex_dynamic_model statement