diff --git a/src/core/mpi/MPIManager.cpp b/src/core/mpi/MPIManager.cpp
index 2a2ac24824c86659a405508cb098e6419f44b772..a334bc16c4878cea58a1452cd083fba31d9d3c7e 100644
--- a/src/core/mpi/MPIManager.cpp
+++ b/src/core/mpi/MPIManager.cpp
@@ -32,6 +32,9 @@
 #include <stdexcept>
 #include <string>
 #include <vector>
+#ifdef __APPLE__
+#include <thread>
+#endif
 
 namespace walberla
 {
@@ -94,6 +97,12 @@ void MPIManager::initializeMPI(int* argc, char*** argv, bool abortOnException)
       MPI_Initialized(&mpiAlreadyInitialized);
       if (!mpiAlreadyInitialized)
       {
+#ifdef __APPLE__
+         /* Work around a race condition on macOS.
+            If a process started by mpiexec finishes too quickly, it sometimes doesn't start all processes.
+          */
+         std::this_thread::sleep_for(std::chrono::milliseconds(1000));
+#endif
          MPI_Init(argc, argv);
          finalizeOnDestruction_ = true;
       }