diff --git a/src/ModelTree.hh b/src/ModelTree.hh
index e7e44bf6e20bc85abedae6c2d9564b329d8bcb4e..aced1279eb1f2314b990272bf367761ade292d5f 100644
--- a/src/ModelTree.hh
+++ b/src/ModelTree.hh
@@ -2646,16 +2646,21 @@ ModelTree::writeSparseModelCFiles(const string &basename, const string &mexext,
       }
   };
 
-  open_file(model_src_dir / "power_deriv.h");
+  /* Write source files for the derivative of the power function.
+     NB: The prefix (static/dynamic) is added to the filename (even though it’s
+     the same source between static and dynamic) to avoid a race condition when
+     static and dynamic are compiled in parallel. */
+  open_file(model_src_dir / (prefix + "power_deriv.h"));
   writePowerDerivHeader(output);
   output.close();
 
-  filesystem::path power_deriv_src {model_src_dir / "power_deriv.c"};
+  filesystem::path power_deriv_src {model_src_dir / (prefix + "power_deriv.c")};
   open_file(power_deriv_src);
   output << "#include <math.h>" << endl << endl;
   writePowerDeriv(output);
   output.close();
-  auto power_deriv_object {compileMEX(model_src_dir, "power_deriv", mexext, { power_deriv_src },
+  auto power_deriv_object {compileMEX(model_src_dir, (prefix + "power_deriv"),
+                                      mexext, { power_deriv_src },
                                       matlabroot, dynareroot, false)};
 
   size_t ttlen {0};
@@ -2724,7 +2729,7 @@ ModelTree::writeSparseModelCFiles(const string &basename, const string &mexext,
       open_file(source_tt);
       output << "#include <math.h>" << endl
              << R"(#include "mex.h")" << endl // Needed for calls to external functions
-             << R"(#include "power_deriv.h")" << endl
+             << R"(#include ")" << prefix << R"(power_deriv.h")" << endl
              << endl
              << prototype_tt << endl
              << "{" << endl
@@ -2866,7 +2871,7 @@ ModelTree::writeSparseModelCFiles(const string &basename, const string &mexext,
           open_file(source_mex);
           output << "#include <math.h>" << endl
                  << R"(#include "mex.h")" << endl
-                 << R"(#include "../power_deriv.h")" << endl
+                 << R"(#include "../)" << prefix << R"(power_deriv.h")" << endl
                  << endl
                  << "void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])" << endl
                  << "{" << endl