diff --git a/ComputingTasks.cc b/ComputingTasks.cc
index 18d8c3d1f6d7fa5b07d5e2319b2cb63098c0c3c6..a12118cf6134d187ad98f6e5d0e3bd0928dcfd04 100644
--- a/ComputingTasks.cc
+++ b/ComputingTasks.cc
@@ -164,6 +164,32 @@ StochSimulStatement::writeOutput(ostream &output, const string &basename) const
   output << "info = stoch_simul(var_list_);\n";
 }
 
+ForecastStatement::ForecastStatement(const SymbolList &symbol_list_arg,
+                                         const OptionsList &options_list_arg) :
+  symbol_list(symbol_list_arg),
+  options_list(options_list_arg)
+{
+}
+
+void
+ForecastStatement::checkPass(ModFileStructure &mod_file_struct)
+{
+  mod_file_struct.stoch_simul_or_similar_present = true;
+
+  // Fill in option_order of mod_file_struct
+  OptionsList::num_options_type::const_iterator it = options_list.num_options.find("order");
+  if (it != options_list.num_options.end())
+    mod_file_struct.order_option = max(mod_file_struct.order_option,atoi(it->second.c_str()));
+}
+
+void
+ForecastStatement::writeOutput(ostream &output, const string &basename) const
+{
+  options_list.writeOutput(output);
+  symbol_list.writeOutput("var_list_", output);
+  output << "info = forecast(var_list_,'simul');\n";
+}
+
 RamseyPolicyStatement::RamseyPolicyStatement(const SymbolList &symbol_list_arg,
                                              const OptionsList &options_list_arg) :
   symbol_list(symbol_list_arg),
diff --git a/DynareBison.yy b/DynareBison.yy
index 63c630f9644524f9f7970be734936ec4108faa46..4763a9142f4a7c0ed7a97f86f52a1e79a4b91642 100644
--- a/DynareBison.yy
+++ b/DynareBison.yy
@@ -189,6 +189,7 @@ statement : declaration
           | bvar_forecast
           | dynare_sensitivity
           | homotopy_setup
+          | forecast
           ;
 
 declaration : parameters
@@ -1276,6 +1277,20 @@ homotopy_item : NAME COMMA expression COMMA expression ';'
                 { driver.homotopy_val($1, NULL, $3);}
               ;
 
+forecast: FORECAST ';' {driver.forecast();}
+          | FORECAST '(' forecast_options ')' ';' {driver.forecast();}
+          | FORECAST symbol_list ';' {driver.forecast();}
+          | FORECAST '(' forecast_options ')' symbol_list ';' {driver.forecast();}
+          ;
+
+forecast_options: forecast_option
+          | forecast_options COMMA forecast_option
+          ;
+
+forecast_option: o_periods
+          | o_conf_sig
+          ;
+
 number : INT_NUMBER
        | FLOAT_NUMBER
        ;
diff --git a/DynareFlex.ll b/DynareFlex.ll
index 7777be24df1197c15ee419c9e3aaf4b1fee6886a..6508b3e93747c76ae976b4557b7e3ad02d48ebc5 100644
--- a/DynareFlex.ll
+++ b/DynareFlex.ll
@@ -130,6 +130,7 @@ int sigma_e = 0;
 <INITIAL>bvar_forecast {BEGIN DYNARE_STATEMENT; return token::BVAR_FORECAST; }
 <INITIAL>dynare_sensitivity {BEGIN DYNARE_STATEMENT; return token::DYNARE_SENSITIVITY;}
 <INITIAL>initval_file {BEGIN DYNARE_STATEMENT; return token::INITVAL_FILE;}
+<INITIAL>forecast {BEGIN DYNARE_STATEMENT; return token::FORECAST;}
  /* End of a Dynare statement */
 
 <DYNARE_STATEMENT>; {
diff --git a/ParsingDriver.cc b/ParsingDriver.cc
index b6378479b251cbbbfdd1573fdf79eba00f3e4c51..1fdafef90d4464cf775675e44e41ed684e490acf 100644
--- a/ParsingDriver.cc
+++ b/ParsingDriver.cc
@@ -350,6 +350,14 @@ ParsingDriver::homotopy_val(string *name, NodeID val1, NodeID val2)
   delete name;
 }
 
+void
+ParsingDriver::forecast()
+{
+  mod_file->addStatement(new ForecastStatement(symbol_list, options_list));
+  symbol_list.clear();
+  options_list.clear();
+}
+
 void
 ParsingDriver::use_dll()
 {
diff --git a/include/ComputingTasks.hh b/include/ComputingTasks.hh
index 55b0c3b623ee2fd930b1ad9bfb7028e724cd39ce..aae31cf6d73bd870db6d76ec130f99830bc5ffa3 100644
--- a/include/ComputingTasks.hh
+++ b/include/ComputingTasks.hh
@@ -88,6 +88,18 @@ public:
   virtual void writeOutput(ostream &output, const string &basename) const;
 };
 
+class ForecastStatement : public Statement
+{
+private:
+  const SymbolList symbol_list;
+  const OptionsList options_list;
+public:
+  ForecastStatement(const SymbolList &symbol_list_arg,
+                      const OptionsList &options_list_arg);
+  virtual void checkPass(ModFileStructure &mod_file_struct);
+  virtual void writeOutput(ostream &output, const string &basename) const;
+};
+
 class RamseyPolicyStatement : public Statement
 {
 private:
diff --git a/include/ParsingDriver.hh b/include/ParsingDriver.hh
index 1462d1ad648e8aa7047f912e67890e00d0a3ec77..d13dd5046d1399595a1d32937d3fe85a7290e478 100644
--- a/include/ParsingDriver.hh
+++ b/include/ParsingDriver.hh
@@ -304,6 +304,8 @@ public:
   void optim_options_num(string *name, string *value);
   //! Prints varops instructions
   void set_varobs();
+  //! Forecast Statement
+  void forecast();
   void set_trends();
   void set_trend_element(string *arg1, NodeID arg2);
   void set_unit_root_vars();