diff --git a/ComputingTasks.cc b/ComputingTasks.cc
index 40e7a86fa5cc62bfe69aa4f692258e568e69c744..f60fd7c8dd451899e049d823e74200df545c3083 100644
--- a/ComputingTasks.cc
+++ b/ComputingTasks.cc
@@ -236,15 +236,27 @@ VarModelStatement::createVarModelMFunction(ostream &output, const map<string, se
   output << ");" << endl;
 }
 
-VarEstimationStatement::VarEstimationStatement(const string &var_model_name_arg) :
-  var_model_name(var_model_name_arg)
+VarEstimationStatement::VarEstimationStatement(const OptionsList &options_list_arg) :
+  options_list(options_list_arg)
 {
 }
 
+void
+VarEstimationStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings)
+{
+  OptionsList::string_options_t::const_iterator it = options_list.string_options.find("var_estimation.model_name");
+  if (it == options_list.string_options.end())
+    {
+      cerr << "ERROR: You must provide the model name to the var_estimation statement." << endl;
+      exit(EXIT_FAILURE);
+    }
+}
+
 void
 VarEstimationStatement::writeOutput(ostream &output, const string &basename, bool minimal_workspace) const
 {
-  output << "oo_ = var_estimation('" << var_model_name << "', M_, options_, oo_);" << endl;
+  options_list.writeOutput(output);
+  output << "oo_ = var_estimation(M_, options_, oo_);" << endl;
 }
 
 VarRestrictionsStatement::VarRestrictionsStatement(const string &var_model_name_arg,
diff --git a/ComputingTasks.hh b/ComputingTasks.hh
index ea4228b73d8d7f313d605080e1a9eb3efdda7752..e4a219c66368eaf17e9ce293e7d1c0e377e33bcf 100644
--- a/ComputingTasks.hh
+++ b/ComputingTasks.hh
@@ -151,9 +151,10 @@ public:
 class VarEstimationStatement : public Statement
 {
 private:
-  const string &var_model_name;
+  const OptionsList options_list;
 public:
-  VarEstimationStatement(const string &var_model_name_arg);
+  VarEstimationStatement(const OptionsList &options_list_arg);
+  virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
   virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
 };
 
diff --git a/DynareBison.yy b/DynareBison.yy
index 298764f9caf5dc7cbe6d8dec43b573939a665255..b9757d96b79a077b6e56558f7ca344140c6e2c6d 100644
--- a/DynareBison.yy
+++ b/DynareBison.yy
@@ -452,10 +452,17 @@ restriction_exclusion_equation : EQUATION '(' symbol ')' symbol_list ';'
                                  { driver.add_VAR_restriction_exclusion_equation($3); }
                                ;
 
-var_estimation : VAR_ESTIMATION '(' symbol ')' ';'
-                 { driver.run_var_estimation($3); }
+var_estimation : VAR_ESTIMATION '(' var_estimation_options_list ')' ';'
+                 { driver.run_var_estimation(); }
                ;
 
+var_estimation_options_list : var_estimation_options_list COMMA var_estimation_options
+                            | var_estimation_options
+                            ;
+
+var_estimation_options : o_var_datafile
+                       | o_var_model_name
+                       ;
 
 nonstationary_var_list : nonstationary_var_list symbol
                          { driver.declare_nonstationary_var($2); }
@@ -2995,6 +3002,8 @@ o_var_nobs : NOBS EQUAL INT_NUMBER { driver.option_num("var.nobs", $3); };
 o_var_method : METHOD EQUAL symbol { driver.option_num("var.method", $3); };
 o_series : SERIES EQUAL symbol { driver.option_str("series", $3); };
 o_datafile : DATAFILE EQUAL filename { driver.option_str("datafile", $3); };
+o_var_datafile : DATAFILE EQUAL filename { driver.option_str("var_estimation.datafile", $3); };
+o_var_model_name : symbol { driver.option_str("var_estimation.model_name", $1); };
 o_dirname : DIRNAME EQUAL filename { driver.option_str("dirname", $3); };
 o_huge_number : HUGE_NUMBER EQUAL non_negative_number { driver.option_num("huge_number", $3); };
 o_nobs : NOBS EQUAL vec_int
diff --git a/ParsingDriver.cc b/ParsingDriver.cc
index 49a6bd3984bee92d1ff6bf4696b3f751aac03995..d718732b7db3e921db161eac9379a6d80874c7b9 100644
--- a/ParsingDriver.cc
+++ b/ParsingDriver.cc
@@ -625,9 +625,9 @@ ParsingDriver::add_VAR_covariance_pair_restriction(string *name11, string *name1
 }
 
 void
-ParsingDriver::run_var_estimation(string *model_name)
+ParsingDriver::run_var_estimation()
 {
-  mod_file->addStatement(new VarEstimationStatement(*model_name));
+  mod_file->addStatement(new VarEstimationStatement(options_list));
 }
 
 void
diff --git a/ParsingDriver.hh b/ParsingDriver.hh
index 16193c743330b91b58a9239c69ba9948e80f9283..c6ff4cfddd0847ca5f843cc4e177cdfb546c59d8 100644
--- a/ParsingDriver.hh
+++ b/ParsingDriver.hh
@@ -793,7 +793,7 @@ public:
   void add_VAR_covariance_number_restriction(string *name1, string *name2, string *valuestr);
   void add_VAR_covariance_pair_restriction(string *name11, string *name12, string *name21, string *name22);
   //! Runs VAR estimation process
-  void run_var_estimation(string *model_name);
+  void run_var_estimation();
 };
 
 #endif // ! PARSING_DRIVER_HH