diff --git a/src/bias/MetaD.cpp b/src/bias/MetaD.cpp
index 972f62b143fc8ad6b631fffe8faf82b2b1cc26c8..be299a63e08aec040d344baa26f680f261b1827e 100644
--- a/src/bias/MetaD.cpp
+++ b/src/bias/MetaD.cpp
@@ -1351,7 +1351,14 @@ void MetaD::update(){
     if(storeOldGrids_) gridfile_.clearFields();
     // in case only latest grid is stored, file should be rewound
     // this will overwrite previously written grids
-    else gridfile_.rewind();
+    else {
+      int r = 0;
+      if(walkers_mpi) {
+        if(comm.Get_rank()==0) r=multi_sim_comm.Get_rank();
+        comm.Bcast(r,0);
+      } 
+      if(r==0) gridfile_.rewind();
+    }
     BiasGrid_->writeToFile(gridfile_); 
     // if a single grid is stored, it is necessary to flush it, otherwise
     // the file might stay empty forever (when a single grid is not large enough to
diff --git a/src/bias/PBMetaD.cpp b/src/bias/PBMetaD.cpp
index 508dbedd3a1c68862d76d4409c67d3abe3ce8ddb..31e2dd768dd054bf38bd87097ff95af69ef934db 100644
--- a/src/bias/PBMetaD.cpp
+++ b/src/bias/PBMetaD.cpp
@@ -843,10 +843,17 @@ void PBMetaD::update()
 
    // write grid files
    if(wgridstride_>0 && getStep()%wgridstride_==0) {
-     for(unsigned i=0; i<gridfiles_.size(); ++i) {
-       gridfiles_[i]->rewind();
-       BiasGrids_[i]->writeToFile(*gridfiles_[i]);
-       gridfiles_[i]->flush();
+     int r = 0;
+     if(multiple_w) {
+       if(comm.Get_rank()==0) r=multi_sim_comm.Get_rank();
+       comm.Bcast(r,0);
+     } 
+     if(r==0) {
+       for(unsigned i=0; i<gridfiles_.size(); ++i) {
+         gridfiles_[i]->rewind();
+         BiasGrids_[i]->writeToFile(*gridfiles_[i]);
+         gridfiles_[i]->flush();
+       }
      }
    }