diff --git a/src/ComputingTasks.cc b/src/ComputingTasks.cc
index 099a8500cd6019ca1a5fc5e499683f75627c027f..ede7a71e3da443a33b997720b92e574846e432e9 100644
--- a/src/ComputingTasks.cc
+++ b/src/ComputingTasks.cc
@@ -1320,8 +1320,10 @@ AbstractEstimatedParamsStatement::commonCheckPass() const
 }
 
 EstimatedParamsStatement::EstimatedParamsStatement(vector<EstimationParams> estim_params_list_arg,
-                                                   const SymbolTable &symbol_table_arg) :
-  AbstractEstimatedParamsStatement(move(estim_params_list_arg), symbol_table_arg)
+                                                   const SymbolTable &symbol_table_arg,
+                                                   bool overwrite_arg) :
+  AbstractEstimatedParamsStatement(move(estim_params_list_arg), symbol_table_arg),
+  overwrite{overwrite_arg}
 {
 }
 
@@ -1361,15 +1363,19 @@ EstimatedParamsStatement::checkPass(ModFileStructure &mod_file_struct, WarningCo
 void
 EstimatedParamsStatement::writeOutput(ostream &output, const string &basename, bool minimal_workspace) const
 {
-  /* Multiple estimated_params statements are allowed, so make sure we don’t
-     overwrite previous ones. */
-  output << "if isempty(estim_params_)" << endl
-         << "    estim_params_.var_exo = zeros(0, 10);" << endl
-         << "    estim_params_.var_endo = zeros(0, 10);" << endl
-         << "    estim_params_.corrx = zeros(0, 11);" << endl
-         << "    estim_params_.corrn = zeros(0, 11);" << endl
-         << "    estim_params_.param_vals = zeros(0, 10);" << endl
-         << "end" << endl;
+  string indent;
+  if (!overwrite)
+    {
+      output << "if isempty(estim_params_)" << endl;
+      indent = "    ";
+    }
+  output << indent << "estim_params_.var_exo = zeros(0, 10);" << endl
+         << indent << "estim_params_.var_endo = zeros(0, 10);" << endl
+         << indent << "estim_params_.corrx = zeros(0, 11);" << endl
+         << indent << "estim_params_.corrn = zeros(0, 11);" << endl
+         << indent << "estim_params_.param_vals = zeros(0, 10);" << endl;
+  if (!overwrite)
+    output << "end" << endl;
 
   for (const auto &it : estim_params_list)
     {
diff --git a/src/ComputingTasks.hh b/src/ComputingTasks.hh
index c3008925852195a7b9a082697ffee37ee4248cb1..facaab90ab8c5357506ab5985c0530317c93c5e3 100644
--- a/src/ComputingTasks.hh
+++ b/src/ComputingTasks.hh
@@ -504,9 +504,12 @@ protected:
 
 class EstimatedParamsStatement : public AbstractEstimatedParamsStatement
 {
+private:
+  const bool overwrite;
 public:
   EstimatedParamsStatement(vector<EstimationParams> estim_params_list_arg,
-                           const SymbolTable &symbol_table_arg);
+                           const SymbolTable &symbol_table_arg,
+                           bool overwrite_arg);
   string blockName() const override { return "estimated_params"; };
   void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
   void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
diff --git a/src/DynareBison.yy b/src/DynareBison.yy
index 847ce76f20d0679120845e579a5f3f3d465cb077..1d2dde48801292428cfcc53848fd0ed6e0a90cc9 100644
--- a/src/DynareBison.yy
+++ b/src/DynareBison.yy
@@ -1738,7 +1738,11 @@ boolean : TRUE
         | FALSE
         ;
 
-estimated_params : ESTIMATED_PARAMS ';' estimated_list END ';' { driver.estimated_params(); };
+estimated_params : ESTIMATED_PARAMS ';' estimated_list END ';'
+                   { driver.estimated_params(false); }
+                 | ESTIMATED_PARAMS '(' OVERWRITE ')' ';' estimated_list END ';'
+                   { driver.estimated_params(true); }
+                 ;
 
 estimated_list : estimated_list estimated_elem
                  { driver.add_estimated_params_element(); }
diff --git a/src/ParsingDriver.cc b/src/ParsingDriver.cc
index 9f89cbf4b1c66e0b7008e2e4ad58681fc12cd5ab..3094863436761eaa8f8a6ab84792947d7de96114 100644
--- a/src/ParsingDriver.cc
+++ b/src/ParsingDriver.cc
@@ -1469,9 +1469,9 @@ ParsingDriver::add_estimated_params_element()
 }
 
 void
-ParsingDriver::estimated_params()
+ParsingDriver::estimated_params(bool overwrite)
 {
-  mod_file->addStatement(make_unique<EstimatedParamsStatement>(estim_params_list, mod_file->symbol_table));
+  mod_file->addStatement(make_unique<EstimatedParamsStatement>(estim_params_list, mod_file->symbol_table, overwrite));
   estim_params_list.clear();
 }
 
diff --git a/src/ParsingDriver.hh b/src/ParsingDriver.hh
index ce07bd0a38fafda45de4fc2a400664e3cadf739b..b6cd328e9ae5379fce6e40805212f56617db3286 100644
--- a/src/ParsingDriver.hh
+++ b/src/ParsingDriver.hh
@@ -507,7 +507,7 @@ public:
   //! Writes model_info command
   void model_info();
   //! Writes estimated params command
-  void estimated_params();
+  void estimated_params(bool overwrite);
   //! Writes estimated params init command
   void estimated_params_init(bool use_calibration = false);
   //! Writes estimated params bound command