diff --git a/DynareBison.yy b/DynareBison.yy
index f14e3c6a06c37abd287659ed81e10d9e3fd9ea1a..ca14f4408804417ccd953e85681c68a13ee9aa5a 100644
--- a/DynareBison.yy
+++ b/DynareBison.yy
@@ -92,7 +92,7 @@ class ParsingDriver;
 %token FORECAST
 %token GAMMA_PDF GAUSSIAN_ELIMINATION GCC_COMPILER GMRES GRAPH
 %token HISTVAL HP_FILTER HP_NGRID
-%token INITVAL
+%token INITVAL INITVAL_FILE
 %token <string_val> INT_NUMBER
 %token INV_GAMMA_PDF IRF
 %token KALMAN_ALGO KALMAN_TOL
@@ -152,6 +152,7 @@ statement : declaration
           | markowitz
           | model
           | initval
+          | initval_file
           | endval
           | histval
           | init_param
@@ -363,11 +364,10 @@ comma_expression : expression
 
 initval : INITVAL ';' initval_list END
           { driver.end_initval(); }
-        | INITVAL '(' initval_option ')' ';' initval_list END
-          { driver.end_initval(); }
-        ;
 
-initval_option : FILENAME EQUAL NAME { driver.init_val_filename($3); };
+initval_file : INITVAL_FILE '(' FILENAME EQUAL NAME ')' ';'
+               { driver.initval_file($5); }
+             ;
 
 endval : ENDVAL ';' initval_list END { driver.end_endval(); };
 
diff --git a/DynareFlex.ll b/DynareFlex.ll
index 51ca086c3657c0f4ce306864b37b91bbb5559cc8..40cbef003ede5321531139ebaa33b8ef6149fcbd 100644
--- a/DynareFlex.ll
+++ b/DynareFlex.ll
@@ -129,6 +129,7 @@ int sigma_e = 0;
 <INITIAL>bvar_density {BEGIN DYNARE_STATEMENT; return token::BVAR_DENSITY; }
 <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;}
  /* End of a Dynare statement */
 
 <DYNARE_STATEMENT>; {
@@ -207,6 +208,7 @@ int sigma_e = 0;
 <DYNARE_STATEMENT>constant	{return token::CONSTANT;}
 <DYNARE_STATEMENT>noconstant	{return token::NOCONSTANT;}
 <DYNARE_STATEMENT>covar {return token::COVAR;}
+<DYNARE_STATEMENT>filename {return token::FILENAME;}
 
 <DYNARE_STATEMENT>bvar_prior_tau { return token::BVAR_PRIOR_TAU; }
 <DYNARE_STATEMENT>bvar_prior_decay { return token::BVAR_PRIOR_DECAY; }
@@ -234,7 +236,6 @@ int sigma_e = 0;
 <DYNARE_BLOCK>periods {return token::PERIODS;}
 <DYNARE_BLOCK>cutoff {return token::CUTOFF;}
 <DYNARE_BLOCK>markowitz {return token::MARKOWITZ;}
-<DYNARE_BLOCK>filename {return token::FILENAME;}
 <DYNARE_BLOCK>gamma_pdf {return token::GAMMA_PDF;}
 <DYNARE_BLOCK>beta_pdf {return token::BETA_PDF;}
 <DYNARE_BLOCK>normal_pdf {return token::NORMAL_PDF;}
diff --git a/NumericalInitialization.cc b/NumericalInitialization.cc
index a38f4fdaffb56064b4e2a7ed3ddf20e7bd04d7d9..8b0a447b473cf24d5a44f76eb76434a3fd742918 100644
--- a/NumericalInitialization.cc
+++ b/NumericalInitialization.cc
@@ -153,6 +153,21 @@ HistValStatement::writeOutput(ostream &output, const string &basename) const
     }
 }
 
+InitvalFileStatement::InitvalFileStatement(const string* const filename_arg):
+  filename(*filename_arg)
+{
+}
+
+void InitvalFileStatement::writeOutput(ostream &output, const string &basename) const
+{
+  output << interfaces::comment() << endl
+         << interfaces::comment() << "INITVAL_FILE statement" << endl
+         << interfaces::comment() << endl
+         << "options_.intival_file = 1;" << endl;
+
+  output << "initvalf('" << filename << "');" << endl;
+}
+
 HomotopyStatement::HomotopyStatement(const homotopy_values_type &homotopy_values_arg,
                                      const SymbolTable &symbol_table_arg) :
   homotopy_values(homotopy_values_arg),
diff --git a/ParsingDriver.cc b/ParsingDriver.cc
index 9cb73ecf0418bafa10cddc9020508610dccd722d..0766301edc0a3564af37a703a8e9c4d1ac586896 100644
--- a/ParsingDriver.cc
+++ b/ParsingDriver.cc
@@ -305,10 +305,9 @@ ParsingDriver::init_val(string *name, NodeID rhs)
 }
 
 void
-ParsingDriver::init_val_filename(string *filename)
+ParsingDriver::initval_file(string *filename)
 {
-  options_list.num_options["initval_file"] = "1";
-  options_list.string_options["initval_filename"] = *filename;
+  mod_file->addStatement(new InitvalFileStatement(filename));
   delete filename;
 }
 
diff --git a/include/NumericalInitialization.hh b/include/NumericalInitialization.hh
index 41459423a8d399e880cb9b4029d57b0e82283231..2dad9a9be924ef263b60733fa6254c16c85c4549 100644
--- a/include/NumericalInitialization.hh
+++ b/include/NumericalInitialization.hh
@@ -92,6 +92,15 @@ public:
   virtual void writeOutput(ostream &output, const string &basename) const;
 };
 
+class InitvalFileStatement : public Statement
+{
+private:
+  string filename;
+public:
+  InitvalFileStatement(const string* const  filename);
+  virtual void writeOutput(ostream &output, const string &basename) const;
+};
+
 class HomotopyStatement : public Statement
 {
 public:
diff --git a/include/ParsingDriver.hh b/include/ParsingDriver.hh
index cdafc1d4fc1c054d2bd14eafaa547cf331393b62..1462d1ad648e8aa7047f912e67890e00d0a3ec77 100644
--- a/include/ParsingDriver.hh
+++ b/include/ParsingDriver.hh
@@ -174,7 +174,7 @@ public:
   //! Sets the compiler type used in conjunction with SPARCE_DLL
   void init_compiler(int compiler_type);
   //! Sets the FILENAME for the initial value in initval
-  void init_val_filename(string *filename);
+  void initval_file(string *filename);
   //! Declares an endogenous variable
   void declare_endogenous(string *name, string *tex_name = new string);
   //! Declares an exogenous variable