diff --git a/dune/common/parallel/mpihelper.hh b/dune/common/parallel/mpihelper.hh
index 228f02e8a4e581e831d5067f99481837e3f49a04..02830b697c881c8f4b1926f6b3a0e4db1665b048 100644
--- a/dune/common/parallel/mpihelper.hh
+++ b/dune/common/parallel/mpihelper.hh
@@ -233,10 +233,12 @@ namespace Dune
   private:
     int rank_;
     int size_;
+    bool initializedHere_;
     void prevent_warning(int){}
 
     //! \brief calls MPI_Init with argc and argv as parameters
     MPIHelper(int& argc, char**& argv)
+    : initializedHere_(false)
     {
       int wasInitialized = -1;
       MPI_Initialized( &wasInitialized );
@@ -246,6 +248,7 @@ namespace Dune
         size_ = -1;
         static int is_initialized = MPI_Init(&argc, &argv);
         prevent_warning(is_initialized);
+        initializedHere_ = true;
       }
 
       MPI_Comm_rank(MPI_COMM_WORLD,&rank_);
@@ -261,10 +264,11 @@ namespace Dune
     {
       int wasFinalized = -1;
       MPI_Finalized( &wasFinalized );
-      if(!wasFinalized) {
-      MPI_Finalize();
-      dverb << "Called MPI_Finalize on p=" << rank_ << "!" <<std::endl;
-    }
+      if(!wasFinalized && initializedHere_)
+      {
+        MPI_Finalize();
+        dverb << "Called MPI_Finalize on p=" << rank_ << "!" <<std::endl;
+      }
 
     }
     MPIHelper(const MPIHelper&);