diff --git a/src/algorithm/CNDFS.cpp b/src/algorithm/CNDFS.cpp
index e0cc32b599ddde6a3b9b041bb688f0301add255e..81a6101191ef5568e031487c27e8a77d851876b9 100644
--- a/src/algorithm/CNDFS.cpp
+++ b/src/algorithm/CNDFS.cpp
@@ -10,7 +10,6 @@
 #include <vector>
 #include <utility>
 #include <spot/twa/twa.hh>
-#include <bddx.h>
 #include <deque>
 #include <atomic>
 #include <condition_variable>
@@ -36,6 +35,7 @@ CNDFS::~CNDFS() {
         mlThread[i]->join();
         delete mlThread[i];
     }
+    cout << "terminate " << endl;
     // Liberate dynamic allocated memory for synchropnized product
     for (const auto & elt : mlBuiltStates)
         delete elt;
@@ -99,15 +99,16 @@ std::ostream &operator<<(std::ostream &Str, myState_t *state) {
 }
 
 void CNDFS::dfsRed(myState_t *state, vector<myState_t *> &Rp, uint8_t idThread) {
-//    cout << "dfsRed" << endl;
+//    if(finish) return;
     Rp.push_back(state);
-//    computeSuccessors(state);
     std::mt19937 g(rd());
     std::shuffle(state->new_successors.begin(), state->new_successors.end(), g);
     for (const auto &succ: state->new_successors) {
 //        cout << "dfs red 1 "  << succ.first->cyan[idThread]<< endl;
         if (succ.first->cyan[idThread]) {
             cout << "cycle detected with the thread " << unsigned(idThread) << endl;
+//            finish = true;
+//            return;
             exit(0);
         }
         // unvisited and not red state
@@ -196,6 +197,8 @@ void CNDFS::computeSuccessors(myState_t *state, vector<spot::formula> ap_sog) {
 
 //Perform the dfsBlue
 void CNDFS::dfsBlue(myState_t *state, vector<myState_t *> &Rp, uint8_t idThread, vector<spot::formula> ap_sog) {
+//    if(finish) std::terminate();  stop current thread
+//    if(finish) return;
     state->cyan[idThread] = true;
     computeSuccessors(state, ap_sog);
     std::mt19937 g(rd());
diff --git a/src/algorithm/CNDFS.h b/src/algorithm/CNDFS.h
index 67e31600abe891610e00f6679551abc4df1bd009..1c51773592794f193ef48a0ef832f8356d534d8c 100644
--- a/src/algorithm/CNDFS.h
+++ b/src/algorithm/CNDFS.h
@@ -50,6 +50,7 @@ private:
     spot::language_containment_checker c;
     std::random_device rd;
     spot::bdd_dict_ptr dict_ba;
+    atomic<bool> finish = false;
 
     void getInitialState();