diff --git a/DynareBison.yy b/DynareBison.yy
index 569de6462a41ee1c0b9758232c2df431f31a4334..edbc812c8b2648e621128f4db5bd94ca6f2dd8bf 100644
--- a/DynareBison.yy
+++ b/DynareBison.yy
@@ -1223,16 +1223,16 @@ subsamples_name_list : subsamples_name_list COMMA o_subsample_name
                      | o_subsample_name
                      ;
 
-prior : symbol '.' PRIOR '(' prior_options_list ')' ';'
+prior : symbol '.' PRIOR { driver.set_prior_variance(); } '(' prior_options_list ')' ';'
         { driver.set_prior($1); }
-      | symbol '.' symbol '.' PRIOR '(' prior_options_list ')' ';'
+      | symbol '.' symbol '.' PRIOR { driver.set_prior_variance(); } '(' prior_options_list ')' ';'
         {
           driver.add_subsample_range(new string (*$1), $3);
           driver.set_prior($1);
         }
-      | STD '(' symbol ')' '.' PRIOR '(' prior_options_list ')' ';'
+      | STD '(' symbol ')' '.' PRIOR { driver.set_prior_variance(); } '(' prior_options_list ')' ';'
         { driver.set_std_prior($3); }
-      | CORR '(' symbol COMMA symbol')' '.' PRIOR '(' prior_options_list ')' ';'
+      | CORR '(' symbol COMMA symbol')' '.' PRIOR { driver.set_prior_variance(); } '(' prior_options_list ')' ';'
         { driver.set_corr_prior($3, $5); }
       ;
 
@@ -2000,7 +2000,7 @@ o_init : INIT EQUAL signed_number { driver.option_num("init", $3); };
 o_bounds : BOUNDS EQUAL vec_value_w_inf { driver.option_num("bounds", $3); };
 o_domain : DOMAINN EQUAL vec_value { driver.option_num("domain", $3); };
 o_interval : INTERVAL EQUAL vec_value { driver.option_num("interval", $3); };
-o_variance : VARIANCE EQUAL expression { driver.add_expression_to_prior_statement($3); }
+o_variance : VARIANCE EQUAL expression { driver.set_prior_variance($3); }
 o_new_estimation_data_nobs : NOBS EQUAL INT_NUMBER { driver.option_num("nobs", $3); };
 o_prefilter : PREFILTER EQUAL INT_NUMBER { driver.option_num("prefilter", $3); };
 o_presample : PRESAMPLE EQUAL INT_NUMBER { driver.option_num("presample", $3); };
diff --git a/ParsingDriver.cc b/ParsingDriver.cc
index 178caa5fd9e70584d644fe4cce369055ce5556c8..ad855720bf1391272003cbfab77c7ab0ed59b4ab 100644
--- a/ParsingDriver.cc
+++ b/ParsingDriver.cc
@@ -1305,12 +1305,12 @@ ParsingDriver::set_prior(string *name)
   check_symbol_is_parameter(name);
   mod_file->addStatement(new PriorStatement(*name, prior_variance, options_list));
   options_list.clear();
-  prior_variance = NULL;
+  set_prior_variance();
   delete name;
 }
 
 void
-ParsingDriver::add_expression_to_prior_statement(expr_t variance)
+ParsingDriver::set_prior_variance(expr_t variance)
 {
   prior_variance = variance;
 }
@@ -1346,7 +1346,7 @@ ParsingDriver::set_std_prior(string *name)
   check_symbol_is_endogenous_or_exogenous(name);
   mod_file->addStatement(new StdPriorStatement(*name, prior_variance, options_list, mod_file->symbol_table));
   options_list.clear();
-  prior_variance = NULL;
+  set_prior_variance();
   delete name;
 }
 
@@ -1366,7 +1366,7 @@ ParsingDriver::set_corr_prior(string *name1, string *name2)
   check_symbol_is_endogenous_or_exogenous(name2);
   mod_file->addStatement(new CorrPriorStatement(*name1, *name2, prior_variance, options_list, mod_file->symbol_table));
   options_list.clear();
-  prior_variance = NULL;
+  set_prior_variance();
   delete name1;
   delete name2;
 }
diff --git a/ParsingDriver.hh b/ParsingDriver.hh
index a19ad5ed2d8d1929a8df7ff48ffb32c3e7b76bb3..65b2a7340ecbf4117843ca8c3039f9da5dfdd032 100644
--- a/ParsingDriver.hh
+++ b/ParsingDriver.hh
@@ -389,7 +389,7 @@ public:
   //! Sets the prior for a parameter
   void set_prior(string *arg);
   //! Adds the variance option to its temporary holding place
-  void add_expression_to_prior_statement(expr_t variance);
+  void set_prior_variance(expr_t variance=NULL);
   //! Sets the options for a parameter
   void set_options(string *arg);
   //! Sets the prior for estimated std dev