diff --git a/src/CodeInterpreter.hh b/src/CodeInterpreter.hh
index c25a48992c4717b52296e250c2c68ffa1fcfe17f..832c6e855b53b95b1a3c01de2d1417348d166142 100644
--- a/src/CodeInterpreter.hh
+++ b/src/CodeInterpreter.hh
@@ -133,7 +133,9 @@ enum class SymbolType
    statementDeclaredVariable = 14, //!< Local variable assigned within a Statement (see subsample statement for example)
    logTrend = 15, //!< Log-trend variable
    unusedEndogenous = 16, //!< Type to mark unused endogenous variables when `nostrict` option is passed
-   endogenousVAR = 17, //!< Variables declared in a var_model statement
+
+   // Value 17 is unused for the time being (but could be reused)
+
    epilogue = 18, //!< Variables created in epilogue block
    excludedVariable = 19 //!< Type to use when an equation is excluded via include/exclude_eqs and the LHS variable is not used elsewhere in the model
   };
diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index effd4a81975fbfc1171019746d0ec74146665eb9..fa4cfb86dc3af2e01ba25bb7d84bd0a136aa2d2d 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -3716,59 +3716,6 @@ DynamicModel::fillTrendComponentModelTableAREC(const ExprNode::subst_table_t &di
   trend_component_model_table.setA0(A0r, A0starr);
 }
 
-void
-DynamicModel::addEquationsForVar()
-{
-  if (var_model_table.empty())
-    return;
-  auto var_symbol_list_and_order = var_model_table.getSymbolListAndOrder();
-
-  // List of endogenous variables and the minimum lag value that must exist in the model equations
-  map<string, int> var_endos_and_lags, model_endos_and_lags;
-  for (const auto &it : var_symbol_list_and_order)
-    for (auto &equation : equations)
-      if (equation->isVarModelReferenced(it.first))
-        {
-          vector<string> symbol_list = it.second.first.get_symbols();
-          int order = it.second.second;
-          for (auto &it1 : symbol_list)
-            if (order > 2)
-              if (var_endos_and_lags.find(it1) != var_endos_and_lags.end())
-                var_endos_and_lags[it1] = min(var_endos_and_lags[it1], -order);
-              else
-                var_endos_and_lags[it1] = -order;
-          break;
-        }
-
-  if (var_endos_and_lags.empty())
-    return;
-
-  // Ensure that the minimum lag value exists in the model equations.
-  // If not, add an equation for it
-  for (auto &equation : equations)
-    equation->getEndosAndMaxLags(model_endos_and_lags);
-
-  int count = 0;
-  for (auto &it : var_endos_and_lags)
-    if (auto it2 = model_endos_and_lags.find(it.first);
-        it2 == model_endos_and_lags.end())
-      cerr << "WARNING: Variable used in VAR that is not used in the model: " << it.first << endl;
-    else
-      if (it.second < it2->second)
-        {
-          int symb_id = symbol_table.getID(it.first);
-          expr_t newvar = AddVariable(symb_id, it.second);
-          expr_t auxvar = AddVariable(symbol_table.addVarModelEndoLagAuxiliaryVar(symb_id, it.second, newvar), 0);
-          addEquation(AddEqual(newvar, auxvar), -1);
-          addAuxEquation(AddEqual(newvar, auxvar));
-          count++;
-        }
-
-  if (count > 0)
-    cout << "Accounting for var_model lags not in model block: added "
-         << count << " auxiliary variables and equations." << endl;
-}
-
 vector<int>
 DynamicModel::getUndiffLHSForPac(const string &aux_model_name,
                                  const ExprNode::subst_table_t &diff_subst_table) const
diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh
index ffe5e1a2556c5778bf2d8b33de4a827932309c03..84fad95ed2819155ff5b5fd58a573c1a02550a9f 100644
--- a/src/DynamicModel.hh
+++ b/src/DynamicModel.hh
@@ -372,10 +372,6 @@ public:
   //! in the trend_component model
   void updateVarAndTrendModel() const;
 
-  //! Add aux equations (and aux variables) for variables declared in var_model
-  //! at max order if they don't already exist
-  void addEquationsForVar();
-
   //! Get Pac equation parameter info
   map<pair<string, string>, pair<string, int>> walkPacParameters(const string &name);
   //! Add var_model info to pac_expectation nodes
diff --git a/src/DynareBison.yy b/src/DynareBison.yy
index 78ba1a46602c24c0abfc5ccbac6ddb6a73d831a0..cdade2eb6d7798fd5afcd3c74816ce5b798059fd 100644
--- a/src/DynareBison.yy
+++ b/src/DynareBison.yy
@@ -378,23 +378,13 @@ var : VAR var_list ';'
     ;
 
 var_model : VAR_MODEL '(' var_model_options_list ')' ';' { driver.var_model(); }
-          | VAR_MODEL '(' var_model_options_list ')' var_symbol_list ';' { driver.var_model(); } ;
           ;
 
-var_symbol_list : var_symbol_list symbol
-                  { driver.declare_var_endogenous($2); }
-                | var_symbol_list COMMA symbol
-                  { driver.declare_var_endogenous($3); }
-                | symbol
-                  { driver.declare_var_endogenous($1); }
-                ;
-
 var_model_options_list : var_model_options_list COMMA var_model_options
                        | var_model_options
                        ;
 
 var_model_options : o_var_name
-                  | o_var_order
                   | o_var_eq_tags
                   ;
 
@@ -3236,7 +3226,6 @@ o_pac_steady_state_growth : STEADY_STATE_GROWTH EQUAL signed_number { driver.set
                           | STEADY_STATE_GROWTH EQUAL symbol { driver.set_pac_steady_state_growth($3); }
                           ;
 o_var_name : MODEL_NAME EQUAL symbol { driver.option_str("var.model_name", $3); };
-o_var_order : ORDER EQUAL INT_NUMBER { driver.option_num("var.order", $3); };
 o_series : SERIES EQUAL symbol { driver.option_str("series", $3); };
 o_datafile : DATAFILE EQUAL filename { driver.option_str("datafile", $3); };
 o_filename : FILENAME EQUAL filename { driver.option_str("filename", $3); };
diff --git a/src/ExprNode.cc b/src/ExprNode.cc
index e7acf59fd8737e141c4789f2603ec6370cbc8daf..9982fcddc606963dbbed0f218315aa794d3dba7d 100644
--- a/src/ExprNode.cc
+++ b/src/ExprNode.cc
@@ -286,11 +286,6 @@ ExprNode::isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_ar
   return false;
 }
 
-void
-ExprNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const
-{
-}
-
 void
 ExprNode::fillErrorCorrectionRow(int eqn,
                                  const vector<int> &nontarget_lhs,
@@ -674,11 +669,6 @@ NumConstNode::isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int la
   return false;
 }
 
-void
-NumConstNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const
-{
-}
-
 bool
 NumConstNode::containsPacExpectation(const string &pac_model_name) const
 {
@@ -715,12 +705,6 @@ NumConstNode::isParamTimesEndogExpr() const
   return false;
 }
 
-bool
-NumConstNode::isVarModelReferenced(const string &model_info_name) const
-{
-  return false;
-}
-
 expr_t
 NumConstNode::substituteStaticAuxiliaryVariable() const
 {
@@ -774,7 +758,6 @@ VariableNode::prepareForDerivation()
       // Such a variable is never derived
       break;
     case SymbolType::externalFunction:
-    case SymbolType::endogenousVAR:
     case SymbolType::epilogue:
       cerr << "VariableNode::prepareForDerivation: impossible case" << endl;
       exit(EXIT_FAILURE);
@@ -813,7 +796,6 @@ VariableNode::computeDerivative(int deriv_id)
       cerr << "unusedEndogenous is not derivable" << endl;
       exit(EXIT_FAILURE);
     case SymbolType::externalFunction:
-    case SymbolType::endogenousVAR:
     case SymbolType::epilogue:
     case SymbolType::excludedVariable:
       cerr << "VariableNode::computeDerivative: Impossible case!" << endl;
@@ -872,9 +854,6 @@ VariableNode::writeJsonAST(ostream &output) const
     case SymbolType::unusedEndogenous:
       output << "unusedEndogenous";
       break;
-    case SymbolType::endogenousVAR:
-      output << "endogenousVAR";
-      break;
     case SymbolType::epilogue:
       output << "epilogue";
       break;
@@ -1149,7 +1128,6 @@ VariableNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
     case SymbolType::trend:
     case SymbolType::logTrend:
     case SymbolType::statementDeclaredVariable:
-    case SymbolType::endogenousVAR:
     case SymbolType::excludedVariable:
       cerr << "VariableNode::writeOutput: Impossible case" << endl;
       exit(EXIT_FAILURE);
@@ -1332,7 +1310,6 @@ VariableNode::getChainRuleDerivative(int deriv_id, const map<int, BinaryOpNode *
       cerr << "unusedEndogenous is not derivable" << endl;
       exit(EXIT_FAILURE);
     case SymbolType::externalFunction:
-    case SymbolType::endogenousVAR:
     case SymbolType::epilogue:
     case SymbolType::excludedVariable:
       cerr << "VariableNode::getChainRuleDerivative: Impossible case" << endl;
@@ -1374,7 +1351,6 @@ VariableNode::computeXrefs(EquationInfo &ei) const
     case SymbolType::statementDeclaredVariable:
     case SymbolType::unusedEndogenous:
     case SymbolType::externalFunction:
-    case SymbolType::endogenousVAR:
     case SymbolType::epilogue:
     case SymbolType::excludedVariable:
       break;
@@ -1936,29 +1912,6 @@ VariableNode::isParamTimesEndogExpr() const
   return false;
 }
 
-bool
-VariableNode::isVarModelReferenced(const string &model_info_name) const
-{
-  if (get_type() == SymbolType::modelLocalVariable)
-    return datatree.getLocalVariable(symb_id)->isVarModelReferenced(model_info_name);
-
-  return false;
-}
-
-void
-VariableNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const
-{
-  if (get_type() == SymbolType::modelLocalVariable)
-    return datatree.getLocalVariable(symb_id)->getEndosAndMaxLags(model_endos_and_lags);
-
-  if (get_type() == SymbolType::endogenous)
-    if (string varname = datatree.symbol_table.getName(symb_id);
-        model_endos_and_lags.find(varname) == model_endos_and_lags.end())
-      model_endos_and_lags[varname] = min(model_endos_and_lags[varname], lag);
-    else
-      model_endos_and_lags[varname] = lag;
-}
-
 expr_t
 VariableNode::replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const
 {
@@ -3703,18 +3656,6 @@ UnaryOpNode::isParamTimesEndogExpr() const
   return arg->isParamTimesEndogExpr();
 }
 
-bool
-UnaryOpNode::isVarModelReferenced(const string &model_info_name) const
-{
-  return arg->isVarModelReferenced(model_info_name);
-}
-
-void
-UnaryOpNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const
-{
-  arg->getEndosAndMaxLags(model_endos_and_lags);
-}
-
 expr_t
 UnaryOpNode::substituteStaticAuxiliaryVariable() const
 {
@@ -5524,20 +5465,6 @@ BinaryOpNode::replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table)
   return buildSimilarBinaryOpNode(arg1subst, arg2subst, datatree);
 }
 
-bool
-BinaryOpNode::isVarModelReferenced(const string &model_info_name) const
-{
-  return arg1->isVarModelReferenced(model_info_name)
-    || arg2->isVarModelReferenced(model_info_name);
-}
-
-void
-BinaryOpNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const
-{
-  arg1->getEndosAndMaxLags(model_endos_and_lags);
-  arg2->getEndosAndMaxLags(model_endos_and_lags);
-}
-
 expr_t
 BinaryOpNode::substituteStaticAuxiliaryVariable() const
 {
@@ -6400,22 +6327,6 @@ TrinaryOpNode::isParamTimesEndogExpr() const
     || arg3->isParamTimesEndogExpr();
 }
 
-bool
-TrinaryOpNode::isVarModelReferenced(const string &model_info_name) const
-{
-  return arg1->isVarModelReferenced(model_info_name)
-    || arg2->isVarModelReferenced(model_info_name)
-    || arg3->isVarModelReferenced(model_info_name);
-}
-
-void
-TrinaryOpNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const
-{
-  arg1->getEndosAndMaxLags(model_endos_and_lags);
-  arg2->getEndosAndMaxLags(model_endos_and_lags);
-  arg3->getEndosAndMaxLags(model_endos_and_lags);
-}
-
 expr_t
 TrinaryOpNode::substituteStaticAuxiliaryVariable() const
 {
@@ -6884,23 +6795,6 @@ AbstractExternalFunctionNode::isParamTimesEndogExpr() const
   return false;
 }
 
-bool
-AbstractExternalFunctionNode::isVarModelReferenced(const string &model_info_name) const
-{
-  for (auto argument : arguments)
-    if (!argument->isVarModelReferenced(model_info_name))
-      return true;
-  return false;
-}
-
-void
-AbstractExternalFunctionNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const
-{
-  for (auto argument : arguments)
-    argument->getEndosAndMaxLags(model_endos_and_lags);
-}
-
-
 void
 AbstractExternalFunctionNode::computeSubExprContainingVariable(int symb_id, int lag, set<expr_t> &contain_var) const
 {
@@ -8345,19 +8239,6 @@ VarExpectationNode::isInStaticForm() const
   exit(EXIT_FAILURE);
 }
 
-bool
-VarExpectationNode::isVarModelReferenced(const string &model_info_name) const
-{
-  /* TODO: should check here whether the var_expectation_model is equal to the
-     argument; we probably need a VarModelTable class to do that elegantly */
-  return false;
-}
-
-void
-VarExpectationNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const
-{
-}
-
 bool
 VarExpectationNode::isParamTimesEndogExpr() const
 {
@@ -8716,17 +8597,6 @@ PacExpectationNode::isInStaticForm() const
   return false;
 }
 
-bool
-PacExpectationNode::isVarModelReferenced(const string &model_info_name) const
-{
-  return model_name == model_info_name;
-}
-
-void
-PacExpectationNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const
-{
-}
-
 expr_t
 PacExpectationNode::substituteStaticAuxiliaryVariable() const
 {
diff --git a/src/ExprNode.hh b/src/ExprNode.hh
index dfa9755c397b120c49270deefdc1dabea963e30d..53446c2f9f9f139b6c4d5654e6c59d66831563aa 100644
--- a/src/ExprNode.hh
+++ b/src/ExprNode.hh
@@ -624,9 +624,6 @@ public:
   //! Substitute auxiliary variables by their expression in static model
   virtual expr_t substituteStaticAuxiliaryVariable() const = 0;
 
-  //! Returns true if model_info_name is referenced by a VarExpectationNode
-  virtual bool isVarModelReferenced(const string &model_info_name) const = 0;
-
   //! Matches a linear combination of variables, where scalars can be constant*parameter
   /*! Returns a list of (variable_id, lag, param_id, constant)
     corresponding to the terms in the expression. When there is no
@@ -662,9 +659,6 @@ public:
   //! Returns true if PacExpectationNode encountered
   virtual bool containsPacExpectation(const string &pac_model_name = "") const = 0;
 
-  //! Fills map
-  virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const = 0;
-
   //! Decompose an expression into its additive terms
   /*! Returns a list of terms, with their sign (either 1 or -1, depending
     on whether the terms appears with a plus or a minus).
@@ -788,8 +782,6 @@ public:
   expr_t replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const override;
   bool containsPacExpectation(const string &pac_model_name = "") const override;
   bool isParamTimesEndogExpr() const override;
-  bool isVarModelReferenced(const string &model_info_name) const override;
-  void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
   expr_t substituteStaticAuxiliaryVariable() const override;
 };
 
@@ -860,8 +852,6 @@ public:
   expr_t replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const override;
   bool containsPacExpectation(const string &pac_model_name = "") const override;
   bool isParamTimesEndogExpr() const override;
-  bool isVarModelReferenced(const string &model_info_name) const override;
-  void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
   //! Substitute auxiliary variables by their expression in static model
   expr_t substituteStaticAuxiliaryVariable() const override;
   void matchMatchedMoment(vector<int> &symb_ids, vector<int> &lags, vector<int> &powers) const override;
@@ -963,8 +953,6 @@ public:
   expr_t replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const override;
   bool containsPacExpectation(const string &pac_model_name = "") const override;
   bool isParamTimesEndogExpr() const override;
-  bool isVarModelReferenced(const string &model_info_name) const override;
-  void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
   //! Substitute auxiliary variables by their expression in static model
   expr_t substituteStaticAuxiliaryVariable() const override;
   void decomposeAdditiveTerms(vector<pair<expr_t, int>> &terms, int current_sign) const override;
@@ -1102,8 +1090,6 @@ public:
   pair<int, expr_t> getPacOptimizingShareAndExprNodesHelper(int lhs_symb_id, int lhs_orig_symb_id) const;
   expr_t getPacNonOptimizingPart(int optim_share_symb_id) const;
   bool isParamTimesEndogExpr() const override;
-  bool isVarModelReferenced(const string &model_info_name) const override;
-  void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
   //! Substitute auxiliary variables by their expression in static model
   expr_t substituteStaticAuxiliaryVariable() const override;
   //! Substitute auxiliary variables by their expression in static model auxiliary variable definition
@@ -1203,8 +1189,6 @@ public:
   expr_t replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const override;
   bool containsPacExpectation(const string &pac_model_name = "") const override;
   bool isParamTimesEndogExpr() const override;
-  bool isVarModelReferenced(const string &model_info_name) const override;
-  void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
   //! Substitute auxiliary variables by their expression in static model
   expr_t substituteStaticAuxiliaryVariable() const override;
 };
@@ -1314,8 +1298,6 @@ public:
   expr_t replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const override;
   bool containsPacExpectation(const string &pac_model_name = "") const override;
   bool isParamTimesEndogExpr() const override;
-  bool isVarModelReferenced(const string &model_info_name) const override;
-  void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
   //! Substitute auxiliary variables by their expression in static model
   expr_t substituteStaticAuxiliaryVariable() const override;
 };
@@ -1495,8 +1477,6 @@ public:
   expr_t replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const override;
   bool containsPacExpectation(const string &pac_model_name = "") const override;
   bool isParamTimesEndogExpr() const override;
-  bool isVarModelReferenced(const string &model_info_name) const override;
-  void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
   expr_t substituteStaticAuxiliaryVariable() const override;
   void writeJsonAST(ostream &output) const override;
   void writeJsonOutput(ostream &output, const temporary_terms_t &temporary_terms, const deriv_node_temp_terms_t &tef_terms, bool isdynamic) const override;
@@ -1567,8 +1547,6 @@ public:
   expr_t replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const override;
   bool containsPacExpectation(const string &pac_model_name = "") const override;
   bool isParamTimesEndogExpr() const override;
-  bool isVarModelReferenced(const string &model_info_name) const override;
-  void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
   expr_t substituteStaticAuxiliaryVariable() const override;
   void writeJsonAST(ostream &output) const override;
   void writeJsonOutput(ostream &output, const temporary_terms_t &temporary_terms, const deriv_node_temp_terms_t &tef_terms, bool isdynamic) const override;
diff --git a/src/ModFile.cc b/src/ModFile.cc
index 530bc38c204641d613c0907e6ad8c41a401bf4ff..bad563f31935522dcc08677bcea9fe8c84c69785 100644
--- a/src/ModFile.cc
+++ b/src/ModFile.cc
@@ -495,8 +495,6 @@ ModFile::transformPass(bool nostrict, bool stochastic, bool compute_xrefs, bool
       }
   dynamic_model.checkNoRemainingPacExpectation();
 
-  dynamic_model.addEquationsForVar();
-
   // Create auxiliary vars for Expectation operator
   dynamic_model.substituteExpectation(mod_file_struct.partial_information);
 
diff --git a/src/ParsingDriver.cc b/src/ParsingDriver.cc
index 63612168f7449077e84442d06a54285f4cb7504d..9577a785486f9dbd3b590593ad86a457834c1752 100644
--- a/src/ParsingDriver.cc
+++ b/src/ParsingDriver.cc
@@ -201,23 +201,6 @@ ParsingDriver::declare_endogenous(const string &name, const string &tex_name, co
   declare_symbol(name, SymbolType::endogenous, tex_name, partition_value);
 }
 
-void
-ParsingDriver::declare_var_endogenous(const string &name)
-{
-  if (mod_file->symbol_table.exists(name))
-    {
-      SymbolType type = mod_file->symbol_table.getType(name);
-      if (type != SymbolType::endogenous && type != SymbolType::exogenous && type != SymbolType::exogenousDet)
-        error("Symbol " + name + " used in a VAR must be either endogenous or "
-              +"exogenous if it is also used elsewhere in the .mod file");
-      add_in_symbol_list(name);
-      return;
-    }
-
-  declare_symbol(name, SymbolType::endogenousVAR, "", {});
-  add_in_symbol_list(name);
-}
-
 void
 ParsingDriver::declare_exogenous(const string &name, const string &tex_name, const vector<pair<string, string>> &partition_value)
 {
@@ -1403,27 +1386,12 @@ ParsingDriver::var_model()
     error("You must pass the model_name option to the var_model statement.");
   auto name = its->second;
 
-  int order = 0;
-  auto itn = options_list.num_options.find("var.order");
-  if (itn != options_list.num_options.end())
-    order = stoi(itn->second);
-  else
-    if (!symbol_list.empty())
-      error("You must pass the order option when passing a symbol list to the var_model statement");
-
   vector<string> eqtags;
   auto itvs = options_list.vector_str_options.find("var.eqtags");
   if (itvs != options_list.vector_str_options.end())
-    {
-      eqtags = itvs->second;
-      if (!symbol_list.empty())
-        error("You cannot pass a symbol list when passing equation tags to the var_model statement");
-      else if (itn != options_list.num_options.end())
-        error("You cannot pass the order option when passing equation tags to the var_model statement");
-    }
+    eqtags = itvs->second;
 
-  mod_file->var_model_table.addVarModel(name, eqtags, {symbol_list, order});
-  symbol_list.clear();
+  mod_file->var_model_table.addVarModel(name, eqtags);
   options_list.clear();
 }
 
diff --git a/src/ParsingDriver.hh b/src/ParsingDriver.hh
index e10be031a6514f258cb6a04c5ac654a54a8dcdb0..74b66f09b7cdb1b5751cd4419fbd0e615c2fa0b7 100644
--- a/src/ParsingDriver.hh
+++ b/src/ParsingDriver.hh
@@ -359,8 +359,6 @@ public:
   void declare_exogenous_det(const string &name, const string &tex_name = "", const vector<pair<string, string>> &partition_value = {});
   //! Declares a parameter
   void declare_parameter(const string &name, const string &tex_name = "", const vector<pair<string, string>> &partition_value = {});
-  //! Declares a VAR variable and adds to symbol_list
-  void declare_var_endogenous(const string &name);
   //! Declares a model local variable
   void declare_model_local_variable(const string &name, const string &tex_name = "");
   //! Declares a statement local variable
diff --git a/src/SubModel.cc b/src/SubModel.cc
index a41810a5351dab4df5968416ebbe31ab06aac805..c18bc17e3e7f74effa6ed9c05239ad3a960435d4 100644
--- a/src/SubModel.cc
+++ b/src/SubModel.cc
@@ -428,8 +428,7 @@ VarModelTable::VarModelTable(SymbolTable &symbol_table_arg) :
 }
 
 void
-VarModelTable::addVarModel(string name_arg, vector<string> eqtags_arg,
-                           pair<SymbolList, int> symbol_list_and_order_arg)
+VarModelTable::addVarModel(string name_arg, vector<string> eqtags_arg)
 {
   if (isExistingVarModelName(name_arg))
     {
@@ -438,16 +437,9 @@ VarModelTable::addVarModel(string name_arg, vector<string> eqtags_arg,
     }
 
   eqtags[name_arg] = move(eqtags_arg);
-  symbol_list_and_order[name_arg] = move(symbol_list_and_order_arg);
   names.insert(move(name_arg));
 }
 
-const map<string, pair<SymbolList, int>> &
-VarModelTable::getSymbolListAndOrder() const
-{
-  return symbol_list_and_order;
-}
-
 void
 VarModelTable::writeOutput(const string &basename, ostream &output) const
 {
@@ -469,12 +461,6 @@ VarModelTable::writeOutput(const string &basename, ostream &output) const
   for (const auto &name : names)
     {
       output << "M_.var." << name << ".model_name = '" << name << "';" << endl;
-      if (auto &[symbol_list, order] = symbol_list_and_order.at(name);
-          !symbol_list.empty())
-        {
-          symbol_list.writeOutput("M_.var." + name + ".var_list_", output);
-          output << "M_.var." << name << ".order = " << order << ";" << endl;
-        }
       output << "M_.var." << name << ".eqtags = {";
       for (const auto &it : eqtags.at(name))
         output << "'" << it << "'; ";
@@ -542,21 +528,15 @@ VarModelTable::writeJsonOutput(ostream &output) const
       if (name != *names.begin())
         output << ", ";
       output << R"({"statementName": "var_model",)"
-             << R"("model_name": ")" << name << R"(",)";
-      if (symbol_list_and_order.empty())
+             << R"("model_name": ")" << name << R"(",)"
+             << R"("eqtags": [)";
+      for (const auto &it : eqtags.at(name))
         {
-          output << R"("eqtags": [)";
-          for (const auto &it : eqtags.at(name))
-            {
-              output << R"(")" << it << R"(")";
-              if (&it != &eqtags.at(name).back())
-                output << ", ";
-            }
-          output << "]";
+          output << R"(")" << it << R"(")";
+          if (&it != &eqtags.at(name).back())
+            output << ", ";
         }
-      else
-        output << R"("order": ")" << symbol_list_and_order.at(name).second << R"(")";
-      output << "}";
+      output << "]}";
     }
 }
 
diff --git a/src/SubModel.hh b/src/SubModel.hh
index b30a0c2a00aa66f7d4af038d939ba00831e50b83..627dbec6b829efe475c5893a1ab9f21b996c5995 100644
--- a/src/SubModel.hh
+++ b/src/SubModel.hh
@@ -116,7 +116,6 @@ class VarModelTable
 private:
   SymbolTable &symbol_table;
   set<string> names;
-  map<string, pair<SymbolList, int>> symbol_list_and_order;
   map<string, vector<string>> eqtags;
   map<string, vector<int>> eqnums, max_lags, lhs, lhs_orig_symb_ids, orig_diff_var;
   map<string, vector<set<pair<int, int>>>> rhs; // name -> for each equation: set of pairs (var, lag)
@@ -127,8 +126,7 @@ public:
   explicit VarModelTable(SymbolTable &symbol_table_arg);
 
   //! Add a VAR model
-  void addVarModel(string name, vector<string> eqtags,
-                   pair<SymbolList, int> symbol_list_and_order_arg);
+  void addVarModel(string name, vector<string> eqtags);
 
   inline bool isExistingVarModelName(const string &name_arg) const;
   inline bool empty() const;
@@ -142,7 +140,6 @@ public:
   int getMaxLag(const string &name_arg) const;
   const vector<int> &getLhs(const string &name_arg) const;
   const vector<int> &getLhsOrigIds(const string &name_arg) const;
-  const map<string, pair<SymbolList, int>> &getSymbolListAndOrder() const;
   const vector<set<pair<int, int>>> &getRhs(const string &name_arg) const;
   const vector<expr_t> &getLhsExprT(const string &name_arg) const;
 
diff --git a/src/SymbolList.cc b/src/SymbolList.cc
index 2ba1e6efa322a23e808b507cab67797ba1b1cad5..794095ff04c013c062e84caec81f3bec2a74a0dc 100644
--- a/src/SymbolList.cc
+++ b/src/SymbolList.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2003-2020 Dynare Team
+ * Copyright © 2003-2021 Dynare Team
  *
  * This file is part of Dynare.
  *
@@ -113,9 +113,6 @@ SymbolList::checkPass(WarningConsolidation &warnings,
               case SymbolType::unusedEndogenous:
                 valid_types += "unusedEndogenous, ";
                 break;
-              case SymbolType::endogenousVAR:
-                valid_types += "endogenousVAR, ";
-                break;
               case SymbolType::excludedVariable:
                 valid_types += "excludedVariable, ";
               }
diff --git a/src/SymbolTable.cc b/src/SymbolTable.cc
index 75b870a74ac93adbbf548ccc6da8c29be50945e2..a6979d6fe7330e667fca07ce024eab027c578b02 100644
--- a/src/SymbolTable.cc
+++ b/src/SymbolTable.cc
@@ -360,7 +360,6 @@ SymbolTable::writeOutput(ostream &output) const noexcept(false)
             break;
           case AuxVarType::endoLag:
           case AuxVarType::exoLag:
-          case AuxVarType::varModel:
             output << "M_.aux_vars(" << i+1 << ").orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id())+1 << ";" << endl
                    << "M_.aux_vars(" << i+1 << ").orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
             break;
@@ -627,28 +626,6 @@ SymbolTable::addUnaryOpAuxiliaryVar(int index, expr_t expr_arg, string unary_op,
   return symb_id;
 }
 
-int
-SymbolTable::addVarModelEndoLagAuxiliaryVar(int orig_symb_id, int orig_lead_lag, expr_t expr_arg) noexcept(false)
-{
-  int symb_id;
-  ostringstream varname;
-  varname << "AUX_VARMODEL_" << orig_symb_id << "_" << -orig_lead_lag;
-
-  try
-    {
-      symb_id = addSymbol(varname.str(), SymbolType::endogenous);
-    }
-  catch (AlreadyDeclaredException &e)
-    {
-      cerr << "ERROR: you should rename your variable called " << varname.str() << ", this name is internally used by Dynare" << endl;
-      exit(EXIT_FAILURE);
-    }
-
-  aux_vars.emplace_back(symb_id, AuxVarType::varModel, orig_symb_id, orig_lead_lag, 0, 0, expr_arg, "");
-
-  return symb_id;
-}
-
 int
 SymbolTable::addMultiplierAuxiliaryVar(int index) noexcept(false)
 {
diff --git a/src/SymbolTable.hh b/src/SymbolTable.hh
index 105c4ca90bd3153e3c2c13461ee09969fe1511a0..c63719eed0c9710fd7e158a788d80383c02718a9 100644
--- a/src/SymbolTable.hh
+++ b/src/SymbolTable.hh
@@ -46,7 +46,9 @@ enum class AuxVarType
                        for the differentiate_forward_vars option.
                        N.B.: nothing to do with the diff() operator! */
    multiplier = 6, //!< Multipliers for FOC of Ramsey Problem
-   varModel = 7, //!< Variable for var_model with order > abs(min_lag()) present in model
+
+   // Value 7 is unused for the time being (but could be reused)
+
    diff = 8, //!< Variable for Diff operator
    diffLag = 9, //!< Variable for timing between Diff operators (lag)
    unaryOp = 10, //!< Variable for allowing the undiff operator to work when diff was taken of unary op, eg diff(log(x))
@@ -323,9 +325,6 @@ public:
   int getOrigLeadLagForDiffAuxVar(int diff_aux_var_symb_id) const noexcept(false);
   //! Searches for diff aux var and finds the symb id associated with this variable
   int getOrigSymbIdForDiffAuxVar(int diff_aux_var_symb_id) const noexcept(false);
-  //! Adds an auxiliary variable when var_model is used with an order that is greater in absolute value
-  //! than the largest lag present in the model.
-  int addVarModelEndoLagAuxiliaryVar(int orig_symb_id, int orig_lead_lag, expr_t expr_arg) noexcept(false);
   //! Adds an auxiliary variable when the diff operator is encountered
   int addDiffAuxiliaryVar(int index, expr_t expr_arg) noexcept(false);
   int addDiffAuxiliaryVar(int index, expr_t expr_arg, int orig_symb_id, int orig_lag) noexcept(false);