diff --git a/DynamicModel.cc b/DynamicModel.cc
index da88f079f2d03d59272665efe24cad40d91a2a65..7034ff63cda1b35ea303f91eb27a6688ad959687 100644
--- a/DynamicModel.cc
+++ b/DynamicModel.cc
@@ -1566,9 +1566,26 @@ DynamicModel::writeDynamicMFile(const string &dynamic_basename) const
 void
 DynamicModel::writeVarExpectationCalls(ostream &output) const
 {
-  map<string, int> alreadyWritten;
-  for (size_t i = 0; i < equations.size(); i++)
-    equations[i]->writeVarExpectationCalls(output, alreadyWritten);
+  map<string, set<int> > var_expectation_functions_to_write;
+  for (var_expectation_node_map_t::const_iterator it = var_expectation_node_map.begin();
+       it != var_expectation_node_map.end(); it++)
+    var_expectation_functions_to_write[it->first.first].insert(it->first.second.second);
+
+  for (map<string, set<int> >::const_iterator it = var_expectation_functions_to_write.begin();
+       it != var_expectation_functions_to_write.end(); it++)
+    {
+      int i = 0;
+      stringstream ss;
+      for (set<int>::const_iterator it1 = it->second.begin(); it1 != it->second.end(); it1++)
+        ss << *it1 << " ";
+
+      output << "dynamic_var_forecast_" << it->first << " = "
+             << "var_forecast_" << it->first << "(y, [" << ss.rdbuf() << "]);" << endl;
+
+      for (set<int>::const_iterator it1 = it->second.begin(); it1 != it->second.end(); it1++)
+        output << "dynamic_var_forecast_" << it->first << "_" << *it1 << " = "
+               << "dynamic_var_forecast_" << it->first << "(" << ++i << ", :);" << endl;
+    }
 }
 
 void
diff --git a/ExprNode.cc b/ExprNode.cc
index ef1df3e3f3a190c93b026088097dcf092ef66c62..c727124a09132a74463ac342c23b184f757ad555 100644
--- a/ExprNode.cc
+++ b/ExprNode.cc
@@ -513,11 +513,6 @@ NumConstNode::setVarExpectationIndex(map<string, SymbolList> var_model_info)
 {
 }
 
-void
-NumConstNode::writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const
-{
-}
-
 expr_t
 NumConstNode::substituteStaticAuxiliaryVariable() const
 {
@@ -1517,11 +1512,6 @@ VariableNode::setVarExpectationIndex(map<string, SymbolList> var_model_info)
 {
 }
 
-void
-VariableNode::writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const
-{
-}
-
 UnaryOpNode::UnaryOpNode(DataTree &datatree_arg, UnaryOpcode op_code_arg, const expr_t arg_arg, int expectation_information_set_arg, int param1_symb_id_arg, int param2_symb_id_arg) :
   ExprNode(datatree_arg),
   arg(arg_arg),
@@ -2600,12 +2590,6 @@ UnaryOpNode::setVarExpectationIndex(map<string, SymbolList> var_model_info)
   arg->setVarExpectationIndex(var_model_info);
 }
 
-void
-UnaryOpNode::writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const
-{
-  arg->writeVarExpectationCalls(output, alreadyWritten);
-}
-
 expr_t
 UnaryOpNode::substituteStaticAuxiliaryVariable() const
 {
@@ -3916,13 +3900,6 @@ BinaryOpNode::setVarExpectationIndex(map<string, SymbolList> var_model_info)
   arg2->setVarExpectationIndex(var_model_info);
 }
 
-void
-BinaryOpNode::writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const
-{
-  arg1->writeVarExpectationCalls(output, alreadyWritten);
-  arg2->writeVarExpectationCalls(output, alreadyWritten);
-}
-
 expr_t
 BinaryOpNode::substituteStaticAuxiliaryVariable() const
 {
@@ -4603,14 +4580,6 @@ TrinaryOpNode::setVarExpectationIndex(map<string, SymbolList> var_model_info)
   arg3->setVarExpectationIndex(var_model_info);
 }
 
-void
-TrinaryOpNode::writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const
-{
-  arg1->writeVarExpectationCalls(output, alreadyWritten);
-  arg2->writeVarExpectationCalls(output, alreadyWritten);
-  arg3->writeVarExpectationCalls(output, alreadyWritten);
-}
-
 expr_t
 TrinaryOpNode::substituteStaticAuxiliaryVariable() const
 {
@@ -4925,13 +4894,6 @@ AbstractExternalFunctionNode::setVarExpectationIndex(map<string, SymbolList> var
     (*it)->setVarExpectationIndex(var_model_info);
 }
 
-void
-AbstractExternalFunctionNode::writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const
-{
-  for (vector<expr_t>::const_iterator it = arguments.begin(); it != arguments.end(); it++)
-    (*it)->writeVarExpectationCalls(output, alreadyWritten);
-}
-
 pair<int, expr_t>
 AbstractExternalFunctionNode::normalizeEquation(int var_endo, vector<pair<int, pair<expr_t, expr_t> > >  &List_of_Op_RHS) const
 {
@@ -5928,18 +5890,6 @@ VarExpectationNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
   output << "dynamic_var_forecast_" << model_name << "_" << forecast_horizon << "(" << yidx + 1 << ")";
 }
 
-void
-VarExpectationNode::writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const
-{
-  map<string, int>::iterator it = alreadyWritten.find(model_name);
-  if (it != alreadyWritten.end() && alreadyWritten[model_name] == forecast_horizon)
-    return;
-
-  output << "dynamic_var_forecast_" << model_name << "_" << forecast_horizon << " = "
-         << "var_forecast_" << model_name << "(y, " << forecast_horizon << ");" << endl;
-  alreadyWritten[model_name] = forecast_horizon;
-}
-
 int
 VarExpectationNode::maxEndoLead() const
 {
@@ -6139,7 +6089,7 @@ void
 VarExpectationNode::setVarExpectationIndex(map<string, SymbolList> var_model_info)
 {
   vector<string> vs = var_model_info[model_name].get_symbols();;
-  yidx= find(vs.begin(), vs.end(), datatree.symbol_table.getName(symb_id)) - vs.begin();
+  yidx = find(vs.begin(), vs.end(), datatree.symbol_table.getName(symb_id)) - vs.begin();
 }
 
 expr_t
diff --git a/ExprNode.hh b/ExprNode.hh
index 7ba9031062ff18cc9a76d06c86e4512e38cd7b50..6e57a3c7e400366937164533f4dd220cd3523259 100644
--- a/ExprNode.hh
+++ b/ExprNode.hh
@@ -454,9 +454,6 @@ public:
 
   // Add index information for var_model variables
   virtual void setVarExpectationIndex(map<string, SymbolList> var_model_info) = 0;
-
-  // Write calls to var forecast and place in temporary variable
-  virtual void writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const = 0;
 };
 
 //! Object used to compare two nodes (using their indexes)
@@ -518,7 +515,6 @@ public:
   virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
   virtual bool isInStaticForm() const;
   virtual void setVarExpectationIndex(map<string, SymbolList> var_model_info);
-  virtual void writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const;
   virtual expr_t substituteStaticAuxiliaryVariable() const;
 };
 
@@ -586,7 +582,6 @@ public:
   virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
   virtual bool isInStaticForm() const;
   virtual void setVarExpectationIndex(map<string, SymbolList> var_model_info);
-  virtual void writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const;
   //! Substitute auxiliary variables by their expression in static model
   virtual expr_t substituteStaticAuxiliaryVariable() const;
 };
@@ -674,7 +669,6 @@ public:
   virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
   virtual bool isInStaticForm() const;
   virtual void setVarExpectationIndex(map<string, SymbolList> var_model_info);
-  virtual void writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const;
   //! Substitute auxiliary variables by their expression in static model
   virtual expr_t substituteStaticAuxiliaryVariable() const;
 };
@@ -781,7 +775,6 @@ public:
   expr_t getNonZeroPartofEquation() const;
   virtual bool isInStaticForm() const;
   virtual void setVarExpectationIndex(map<string, SymbolList> var_model_info);
-  virtual void writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const;
   //! Substitute auxiliary variables by their expression in static model
   virtual expr_t substituteStaticAuxiliaryVariable() const;
   //! Substitute auxiliary variables by their expression in static model auxiliary variable definition
@@ -858,7 +851,6 @@ public:
   virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
   virtual bool isInStaticForm() const;
   virtual void setVarExpectationIndex(map<string, SymbolList> var_model_info);
-  virtual void writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const;
   //! Substitute auxiliary variables by their expression in static model
   virtual expr_t substituteStaticAuxiliaryVariable() const;
 };
@@ -942,7 +934,6 @@ public:
   virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
   virtual bool isInStaticForm() const;
   virtual void setVarExpectationIndex(map<string, SymbolList> var_model_info);
-  virtual void writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const;
   //! Substitute auxiliary variables by their expression in static model
   virtual expr_t substituteStaticAuxiliaryVariable() const;
 };
@@ -1110,7 +1101,6 @@ public:
   virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
   virtual bool isInStaticForm() const;
   virtual void setVarExpectationIndex(map<string, SymbolList> var_model_info);
-  virtual void writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const;
   virtual expr_t substituteStaticAuxiliaryVariable() const;
 };