diff --git a/CHANGES/v2.0.txt b/CHANGES/v2.0.txt
index 0e6ab0cf3e2ad9b02d0a51a0faa6de2e491d062b..54ba4606daecd834585eedd6b96a0fd7e7ea33e2 100644
--- a/CHANGES/v2.0.txt
+++ b/CHANGES/v2.0.txt
@@ -27,5 +27,6 @@ For users:
 For developers:
 - Several small fixes in documentation
 - Added possibility to setup replica exchange from MD codes in fortran (commands "GREX setMPIFIntercomm" and "GREX setMPIFIntracomm")
+- cmd("setStopFlag") should now be called after PLUMED initialization.
 
 */
diff --git a/src/cltools/Driver.cpp b/src/cltools/Driver.cpp
index e237129193f254c125b02acd536f500b5253337e..966f8da6543887c93aefb64e8ea9ca66a28e8d12 100644
--- a/src/cltools/Driver.cpp
+++ b/src/cltools/Driver.cpp
@@ -256,8 +256,6 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc){
   int rr=sizeof(real);
   p.cmd("setRealPrecision",&rr);
   int checknatoms=-1;
-  int plumedStopCondition=0;
-  p.cmd("setStopFlag",&plumedStopCondition);
   int step=0;
   if(Communicator::initialized()){
     if(multi){
@@ -327,7 +325,7 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc){
   while(true){
     if(!noatoms){
        if(!Tools::getline(fp,line)) break;
-    } else if ( plumedStopCondition ) break;
+    }
 
     int natoms;
     bool first_step=false;
@@ -421,7 +419,9 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc){
       }
     }
 
+    int plumedStopCondition=0;
     p.cmd("setStep",&step);
+    p.cmd("setStopFlag",&plumedStopCondition);
     if(!noatoms){
        if(trajectory_fmt=="xyz"){
          if(!Tools::getline(fp,line)) error("premature end of trajectory file");
@@ -559,6 +559,8 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc){
        fprintf(fp_forces,fmt.c_str(),forces[3*i],forces[3*i+1],forces[3*i+2]);
    }
 
+    if(noatoms && plumedStopCondition) break;
+
     step+=stride;
   }
   p.cmd("runFinalJobs");
diff --git a/src/core/PlumedMain.cpp b/src/core/PlumedMain.cpp
index 6e1e0f10e07ccf5ce54a19db96346c26e1332ca5..24e36d17bb13bd779dcae2860b14923de7ae345b 100644
--- a/src/core/PlumedMain.cpp
+++ b/src/core/PlumedMain.cpp
@@ -289,11 +289,11 @@ void PlumedMain::cmd(const std::string & word,void*val){
        CHECK_NOTINIT(initialized,word);
        CHECK_NULL(val,word);
        log.open(static_cast<char*>(val),"w");
+// other commands that should be used after initialization:
   } else if(word=="setStopFlag"){
-       CHECK_NOTINIT(initialized,word);
+       CHECK_INIT(initialized,word);
        CHECK_NULL(val,word);
        stopFlag=static_cast<int*>(val);
-// other commands that should be used after initialization:
   } else if(word=="getExchangesFlag"){
        CHECK_INIT(initialized,word);
        CHECK_NULL(val,word);