diff --git a/src/DynareBison.yy b/src/DynareBison.yy
index 8b5f97b9a091d0261e823babb1be75aa90b3d96e..81829b9b0625b315e9b4b56fecac4ca27d714022 100644
--- a/src/DynareBison.yy
+++ b/src/DynareBison.yy
@@ -482,19 +482,19 @@ symbol_list_with_tex_and_partition : symbol_list_with_tex_and_partition symbol
 
 rplot : RPLOT symbol_list ';' { driver.rplot($2); };
 
-trend_var : TREND_VAR '(' GROWTH_FACTOR EQUAL { driver.begin_trend(); } hand_side ')' symbol_list_with_tex ';'
+trend_var : TREND_VAR '(' GROWTH_FACTOR EQUAL { driver.begin_model(); } hand_side ')' symbol_list_with_tex ';'
             { driver.end_trend_var(false, $6, $8); }
           ;
 
-log_trend_var : LOG_TREND_VAR '(' LOG_GROWTH_FACTOR EQUAL { driver.begin_trend(); } hand_side ')' symbol_list_with_tex ';'
+log_trend_var : LOG_TREND_VAR '(' LOG_GROWTH_FACTOR EQUAL { driver.begin_model(); } hand_side ')' symbol_list_with_tex ';'
                 { driver.end_trend_var(true, $6, $8); }
               ;
 
 var : VAR symbol_list_with_tex_and_partition ';'
       { driver.var($2); }
-    | VAR '(' DEFLATOR EQUAL { driver.begin_trend(); } hand_side ')' symbol_list_with_tex_and_partition ';'
+    | VAR '(' DEFLATOR EQUAL { driver.begin_model(); } hand_side ')' symbol_list_with_tex_and_partition ';'
       { driver.end_nonstationary_var(false, $6, $8); }
-    | VAR '(' LOG_DEFLATOR EQUAL { driver.begin_trend(); } hand_side ')' symbol_list_with_tex_and_partition ';'
+    | VAR '(' LOG_DEFLATOR EQUAL { driver.begin_model(); } hand_side ')' symbol_list_with_tex_and_partition ';'
       { driver.end_nonstationary_var(true, $6, $8); }
     ;
 
@@ -3458,7 +3458,7 @@ o_file : FILE EQUAL filename { driver.option_str("file", $3); };
 o_pac_name : MODEL_NAME EQUAL symbol { driver.option_str("pac.model_name", $3); };
 o_pac_aux_model_name : AUXILIARY_MODEL_NAME EQUAL symbol { driver.option_str("pac.aux_model_name", $3); };
 o_pac_discount : DISCOUNT EQUAL symbol { driver.option_str("pac.discount", $3); };
-o_pac_growth : GROWTH { driver.begin_pac_growth(); } EQUAL hand_side { driver.set_pac_growth($4); };
+o_pac_growth : GROWTH { driver.begin_model(); } EQUAL hand_side { driver.set_pac_growth($4); };
 o_pac_auxname : AUXNAME EQUAL symbol { driver.set_pac_auxname($3); };
 o_pac_kind : KIND EQUAL pac_target_kind { driver.set_pac_kind($3); };
 o_var_name : MODEL_NAME EQUAL symbol { driver.option_str("var.model_name", $3); };
diff --git a/src/ParsingDriver.cc b/src/ParsingDriver.cc
index 3d03c602198cc130522ac5a7331dddcba4dab1aa..ef4b6f664110e6e6af0afffd3712adebc6078388 100644
--- a/src/ParsingDriver.cc
+++ b/src/ParsingDriver.cc
@@ -265,12 +265,6 @@ ParsingDriver::set_planner_discount_latex_name(string tex_name)
   planner_discount_latex_name = move(tex_name);
 }
 
-void
-ParsingDriver::begin_trend()
-{
-  set_current_data_tree(&mod_file->dynamic_model);
-}
-
 void
 ParsingDriver::end_trend_var(bool log_trend, expr_t growth_factor, const vector<pair<string, string>> &symbol_list)
 {
@@ -2649,12 +2643,6 @@ ParsingDriver::add_pac_target_nonstationary(const string &model_name)
   return data_tree->AddPacTargetNonstationary(model_name);
 }
 
-void
-ParsingDriver::begin_pac_growth()
-{
-  set_current_data_tree(&mod_file->dynamic_model);
-}
-
 void
 ParsingDriver::begin_pac_model()
 {
diff --git a/src/ParsingDriver.hh b/src/ParsingDriver.hh
index 02bcb7d21f81f96aba7d1d7236f22f7917881733..2758dbcb0126c014cfd2f15a6c9b0c2f702ccaa6 100644
--- a/src/ParsingDriver.hh
+++ b/src/ParsingDriver.hh
@@ -435,7 +435,9 @@ public:
   void add_epilogue_variable(const string &varname);
   //! Add equation in epilogue block
   void add_epilogue_equal(const string &varname, expr_t expr);
-  //! Begin a model block
+  /* Begin a model or model_replace block, or an expression as an option value
+     of some statement.
+     Must be followed by a call to reset_data_tree(). */
   void begin_model();
   //! End a model or model_replace block, printing errors that were encountered in parsing
   void end_model();
@@ -747,7 +749,6 @@ public:
   //! Adds a pac_target_nonstationary(model_name, discount, growth) node to model tree
   expr_t add_pac_target_nonstationary(const string &model_name);
   //! Creates pac_model statement
-  void begin_pac_growth();
   void begin_pac_model();
   void pac_model();
   //! Adds growth for pac
@@ -841,8 +842,6 @@ public:
   void add_steady_state_model_equal(const string &varname, expr_t expr);
   //! Add a multiple assignment equation in steady_state_model block
   void add_steady_state_model_equal_multiple(const vector<string> &symbol_list, expr_t expr);
-  //! Switches datatree
-  void begin_trend();
   //! Ends declaration of trend variable
   void end_trend_var(bool log_trend, expr_t growth_factor, const vector<pair<string, string>> &symbol_list);
   //! Ends declaration of nonstationary variable