diff --git a/src/core/mpi/MPIManager.cpp b/src/core/mpi/MPIManager.cpp
index 72861cbd109a91321099f9e95771c88376a8a28c..fe89748d401a00488e7081043643dbac16986709 100644
--- a/src/core/mpi/MPIManager.cpp
+++ b/src/core/mpi/MPIManager.cpp
@@ -103,6 +103,7 @@ void MPIManager::initializeMPI( int* argc, char*** argv, bool abortOnException )
       MPI_Initialized( &mpiAlreadyInitialized );
       if ( ! mpiAlreadyInitialized ) {
          MPI_Init( argc, argv );
+         finalizeOnDestruction_ = true;
       }
 
       isMPIInitialized_ = true;
@@ -122,7 +123,10 @@ void MPIManager::finalizeMPI()
       if( isMPIInitialized_ && !currentlyAborting_ )
       {
          isMPIInitialized_ = false;
-         MPI_Finalize();
+         if (finalizeOnDestruction_)
+         {
+            MPI_Finalize();
+         }
       }
    }
 }
diff --git a/src/core/mpi/MPIManager.h b/src/core/mpi/MPIManager.h
index fdbc3e06eab704fa63f10156119a4a5e5eeeeafe..620d69a70898520db946a8f3110e67c5b541a76a 100644
--- a/src/core/mpi/MPIManager.h
+++ b/src/core/mpi/MPIManager.h
@@ -156,9 +156,12 @@ private:
 
    bool currentlyAborting_;
 
+   bool finalizeOnDestruction_;
+
    // Singleton
    MPIManager() : worldRank_(0), rank_(-1), numProcesses_(1), comm_(MPI_COMM_NULL),
-                  isMPIInitialized_(false), cartesianSetup_(false), currentlyAborting_(false)
+                  isMPIInitialized_(false), cartesianSetup_(false), currentlyAborting_(false),
+                  finalizeOnDestruction_(false)
    { WALBERLA_NON_MPI_SECTION() { rank_ = 0; } }
 
 }; // class MPIManager