diff --git a/ComputingTasks.cc b/ComputingTasks.cc
index cfc3b59b5f1f45538c9b5153b3f8e2c94b6f03d0..81ce4cf9df28eecb4aded78a963cc7867d1a9536 100644
--- a/ComputingTasks.cc
+++ b/ComputingTasks.cc
@@ -171,6 +171,50 @@ PriorPosteriorFunctionStatement::writeOutput(ostream &output, const string &base
          << "'" << type << "');" << endl;
 }
 
+VARStatement::VARStatement(const SymbolList &symbol_list_arg,
+                           const OptionsList &options_list_arg,
+                           const SymbolTable &symbol_table_arg) :
+  symbol_list(symbol_list_arg),
+  options_list(options_list_arg),
+  symbol_table(symbol_table_arg)
+{
+}
+
+void
+VARStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings)
+{
+  mod_file_struct.var_model_present = true;
+  vector<string> symbols = symbol_list.get_symbols();
+  for (vector<string>::const_iterator it = symbols.begin(); it != symbols.end(); it++)
+    if (symbol_table.getType(*it) != eEndogenous)
+      {
+        cerr << "ERROR: You can only run VARs on endogenous variables." << endl;
+        exit(EXIT_FAILURE);
+      }
+
+  OptionsList::num_options_t::const_iterator it = options_list.num_options.find("var(varidx).order");
+  if (it == options_list.num_options.end())
+    {
+      cerr << "ERROR: You must provide the order option to the var command." << endl;
+      exit(EXIT_FAILURE);
+    }
+
+  OptionsList::string_options_t::const_iterator it1 = options_list.string_options.find("var(varidx).name");
+  if (it1 == options_list.string_options.end())
+    {
+      cerr << "ERROR: You must provide the model_name option to the var command." << endl;
+      exit(EXIT_FAILURE);
+    }
+}
+
+void
+VARStatement::writeOutput(ostream &output, const string &basename, bool minimal_workspace) const
+{
+  options_list.writeOutput(output);
+  symbol_list.writeOutput("options_.var(varidx).var_list_", output);
+  output << "varidx = varidx + 1;" << endl;
+}
+
 StochSimulStatement::StochSimulStatement(const SymbolList &symbol_list_arg,
                                          const OptionsList &options_list_arg) :
   symbol_list(symbol_list_arg),
diff --git a/ComputingTasks.hh b/ComputingTasks.hh
index e74211f783623f6d93016eca755e5dba423be48a..d9a0c536dce5a54f9147644f613ed53798182dec 100644
--- a/ComputingTasks.hh
+++ b/ComputingTasks.hh
@@ -110,6 +110,20 @@ public:
   virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
 };
 
+class VARStatement : public Statement
+{
+private:
+  const SymbolList symbol_list;
+  const OptionsList options_list;
+    const SymbolTable &symbol_table;
+public:
+  VARStatement(const SymbolList &symbol_list_arg,
+               const OptionsList &options_list_arg,
+               const SymbolTable &symbol_table_arg);
+  virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
+  virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
+};
+
 class ForecastStatement : public Statement
 {
 private:
diff --git a/DynareBison.yy b/DynareBison.yy
index ebe98d1432de98605688796567aec386affd9664..3e23212b6180432e403c89a79a6b45362279610d 100644
--- a/DynareBison.yy
+++ b/DynareBison.yy
@@ -115,7 +115,7 @@ class ParsingDriver;
 %token <string_val> NAME
 %token USE_PENALIZED_OBJECTIVE_FOR_HESSIAN INIT_STATE
 %token NAN_CONSTANT NO_STATIC NOBS NOCONSTANT NODISPLAY NOCORR NODIAGNOSTIC NOFUNCTIONS NO_HOMOTOPY
-%token NOGRAPH POSTERIOR_NOGRAPH POSTERIOR_GRAPH NOMOMENTS NOPRINT NORMAL_PDF SAVE_DRAWS
+%token NOGRAPH POSTERIOR_NOGRAPH POSTERIOR_GRAPH NOMOMENTS NOPRINT NORMAL_PDF SAVE_DRAWS MODEL_NAME
 %token OBSERVATION_TRENDS OPTIM OPTIM_WEIGHTS ORDER OSR OSR_PARAMS MAX_DIM_COVA_GROUP ADVANCED OUTFILE OUTVARS OVERWRITE
 %token PARALLEL_LOCAL_FILES PARAMETERS PARAMETER_SET PARTIAL_INFORMATION PERIODS PERIOD PLANNER_OBJECTIVE PLOT_CONDITIONAL_FORECAST PLOT_PRIORS PREFILTER PRESAMPLE
 %token PERFECT_FORESIGHT_SETUP PERFECT_FORESIGHT_SOLVER NO_POSTERIOR_KERNEL_DENSITY FUNCTION
@@ -131,7 +131,7 @@ class ParsingDriver;
 %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 VAROBS VAREXOBS PREDETERMINED_VARIABLES
 %token WRITE_LATEX_DYNAMIC_MODEL WRITE_LATEX_STATIC_MODEL WRITE_LATEX_ORIGINAL_MODEL
-%token XLS_SHEET XLS_RANGE LMMCP OCCBIN BANDPASS_FILTER COLORMAP
+%token XLS_SHEET XLS_RANGE LMMCP OCCBIN BANDPASS_FILTER COLORMAP VAR_MODEL
 %left COMMA
 %left EQUAL_EQUAL EXCLAMATION_EQUAL
 %left LESS GREATER LESS_EQUAL GREATER_EQUAL
@@ -224,6 +224,7 @@ statement : parameters
           | estimated_params_init
           | set_time
           | data
+          | var_model
           | prior
           | prior_eq
           | subsamples
@@ -346,6 +347,16 @@ var : VAR var_list ';'
       { driver.end_nonstationary_var(true, $6); }
     ;
 
+var_model : VAR '(' var_model_options_list ')' symbol_list ';' { driver.var_model(); } ;
+
+var_model_options_list : var_model_options_list COMMA var_model_options
+                         | var_model_options
+                         ;
+
+var_model_options : o_var_name
+                  | o_var_order
+                  ;
+
 nonstationary_var_list : nonstationary_var_list symbol
                          { driver.declare_nonstationary_var($2); }
                        | nonstationary_var_list COMMA symbol
@@ -2816,6 +2827,8 @@ o_simul_seed : SIMUL_SEED EQUAL INT_NUMBER { driver.error("'simul_seed' option i
 o_qz_criterium : QZ_CRITERIUM EQUAL non_negative_number { driver.option_num("qz_criterium", $3); };
 o_qz_zero_threshold : QZ_ZERO_THRESHOLD EQUAL non_negative_number { driver.option_num("qz_zero_threshold", $3); };
 o_file : FILE EQUAL filename { driver.option_str("file", $3); };
+o_var_name : MODEL_NAME EQUAL symbol { driver.option_str("var(varidx).name", $3); };
+o_var_order : ORDER EQUAL INT_NUMBER { driver.option_num("var(varidx).order", $3); };
 o_series : SERIES EQUAL symbol { driver.option_str("series", $3); };
 o_datafile : DATAFILE EQUAL filename { driver.option_str("datafile", $3); };
 o_dirname : DIRNAME EQUAL filename { driver.option_str("dirname", $3); };
diff --git a/DynareFlex.ll b/DynareFlex.ll
index 38055136c0035eeb4ba91d99736ab2e888aadf32..f8a4629246725f9416cdf9e78bfe4d84a148655e 100644
--- a/DynareFlex.ll
+++ b/DynareFlex.ll
@@ -136,6 +136,7 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2
 <INITIAL>check {BEGIN DYNARE_STATEMENT; return token::CHECK;}
 <INITIAL>simul {BEGIN DYNARE_STATEMENT; return token::SIMUL;}
 <INITIAL>stoch_simul {BEGIN DYNARE_STATEMENT; return token::STOCH_SIMUL;}
+<INITIAL>var_model {BEGIN DYNARE_STATEMENT; return token::VAR_MODEL;}
 <INITIAL>dsample {BEGIN DYNARE_STATEMENT; return token::DSAMPLE;}
 <INITIAL>Sigma_e {BEGIN DYNARE_STATEMENT; sigma_e = 1; return token::SIGMA_E;}
 <INITIAL>planner_objective {BEGIN DYNARE_STATEMENT; return token::PLANNER_OBJECTIVE;}
@@ -331,6 +332,7 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2
 <DYNARE_STATEMENT>nocorr	{return token::NOCORR;}
 <DYNARE_STATEMENT>optim		{return token::OPTIM;}
 <DYNARE_STATEMENT>periods	{return token::PERIODS;}
+<DYNARE_STATEMENT>model_name	{return token::MODEL_NAME;}
 <DYNARE_STATEMENT>endogenous_terminal_period 	{return token::ENDOGENOUS_TERMINAL_PERIOD;}
 <DYNARE_STATEMENT>sub_draws	{return token::SUB_DRAWS;}
 <DYNARE_STATEMENT>minimal_solving_periods {return token::MINIMAL_SOLVING_PERIODS;}
diff --git a/ModFile.cc b/ModFile.cc
index 5719d0197fe9d8d27a65846b3a285f354c2be378..1b114d1e07a4dfb34d8ed0f2f0b2afbc70cf4723 100644
--- a/ModFile.cc
+++ b/ModFile.cc
@@ -808,6 +808,9 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all, bool clear_glo
         static_model.writeOutput(mOutputFile, block);
     }
 
+  if (mod_file_struct.var_model_present)
+    mOutputFile << "varidx = 1;" << endl;
+
   // Print statements
   for (vector<Statement *>::const_iterator it = statements.begin();
        it != statements.end(); it++)
diff --git a/ParsingDriver.cc b/ParsingDriver.cc
index 7d7c99b48ac47b946cc70d8061154df27f2faf50..4fdf1396a8a139bc41829ec93d1caa25542e3369 100644
--- a/ParsingDriver.cc
+++ b/ParsingDriver.cc
@@ -1279,6 +1279,14 @@ ParsingDriver::stoch_simul()
   options_list.clear();
 }
 
+void
+ParsingDriver::var_model()
+{
+  mod_file->addStatement(new VARStatement(symbol_list, options_list, mod_file->symbol_table));
+  symbol_list.clear();
+  options_list.clear();
+}
+
 void
 ParsingDriver::simul()
 {
diff --git a/ParsingDriver.hh b/ParsingDriver.hh
index a9f731c3ffaf72396cc4fe90278399553fd3618e..04d7291aff68a3c7fdc404267af2bbc75d30f03e 100644
--- a/ParsingDriver.hh
+++ b/ParsingDriver.hh
@@ -418,6 +418,8 @@ public:
   void rplot();
   //! Writes a stock_simul command
   void stoch_simul();
+  //! Writes a var (vector autoregression) command
+  void var_model();
   //! Writes a simul command
   void simul();
   //! Writes check command
diff --git a/Statement.hh b/Statement.hh
index 311260b0e074e09578c4378a92d9f9a0b4d5f4b5..1676ff313804c417ab7b66c4586743027af39c23 100644
--- a/Statement.hh
+++ b/Statement.hh
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2015 Dynare Team
+ * Copyright (C) 2006-2016 Dynare Team
  *
  * This file is part of Dynare.
  *
@@ -122,7 +122,8 @@ public:
   int orig_eq_nbr;
    //! Stores the number of equations added to the Ramsey model
   int ramsey_eq_nbr;
-
+  //! Whether a VAR statement is present
+  bool var_model_present;
 };
 
 class Statement