diff --git a/src/.MCHybridSOG.h.kate-swp b/src/.MCHybridSOG.h.kate-swp
new file mode 100644
index 0000000000000000000000000000000000000000..a65057426854c2e2438dac15c8c74a0492744abb
Binary files /dev/null and b/src/.MCHybridSOG.h.kate-swp differ
diff --git a/src/CommonSOG.h b/src/CommonSOG.h
index 44e11d3f90148033e7795f482ec323b37c4ed5ee..0de9bedf203c138c245038a9f5dd59193e86a5bf 100644
--- a/src/CommonSOG.h
+++ b/src/CommonSOG.h
@@ -1,54 +1,54 @@
-#ifndef COMMONSOG_H
-#define COMMONSOG_H
-#include "LDDState.h"
-#include "LDDGraph.h"
-
-#include "TransSylvan.h"
-#include "NewNet.h"
-#include <stack>
-class LDDState;
-typedef pair<LDDState *, MDD> couple;
-typedef pair<couple, Set> Pair;
-typedef stack<Pair> pile;
-
-class LDDGraph;
-
-class CommonSOG
-{
-    public:
-        CommonSOG();
-        virtual ~CommonSOG();
-        LDDGraph *getGraph() const;
-        static void printhandler(ostream &o, int var);
-        vector<TransSylvan>* getTBRelation();
-        Set * getNonObservable();
-        unsigned int getPlacesCount();
-        Set & getPlaceProposition() {return m_place_proposition;}
-        string getTransition(int pos);
-        string getPlace(int pos);
-    protected:
-        NewNet m_net;
-        int m_nbPlaces = 0;
-        LDDGraph *m_graph;
-        vector<TransSylvan> m_tb_relation;
-        MDD m_initialMarking;
-        map<string, int> m_transitionName;
-        map<int,string> m_placeName;
+#ifndef COMMONSOG_H
+#define COMMONSOG_H
+#include "LDDState.h"
+#include "LDDGraph.h"
+
+#include "TransSylvan.h"
+#include "NewNet.h"
+#include <stack>
+class LDDState;
+typedef pair<LDDState *, MDD> couple;
+typedef pair<couple, Set> Pair;
+typedef stack<Pair> pile;
+
+class LDDGraph;
+
+class CommonSOG
+{
+    public:
+        CommonSOG();
+        virtual ~CommonSOG();
+        LDDGraph *getGraph() const;
+        static void printhandler(ostream &o, int var);
+        vector<TransSylvan>* getTBRelation();
+        Set * getNonObservable();
+        unsigned int getPlacesCount();
+        set<uint16_t> & getPlaceProposition() {return m_place_proposition;}
+        string getTransition(int pos);
+        string getPlace(int pos);
+    protected:
+        NewNet m_net;
+        int m_nbPlaces = 0;
+        LDDGraph *m_graph;
+        vector<TransSylvan> m_tb_relation;
+        MDD m_initialMarking;
+        map<string, uint16_t> m_transitionName;
+        map<uint16_t,string> m_placeName;
         Set m_observable;
-        Set m_nonObservable;
-        Set InterfaceTrans;
-        Set m_place_proposition;
-
-        vector<class Transition> transitions;
-
-        MDD Accessible_epsilon(MDD From);
-        Set firable_obs(MDD State);
-        MDD get_successor(MDD From, int t);
-        MDD ImageForward(MDD From);
-        MDD Canonize(MDD s, unsigned int level);
-        bool Set_Div(MDD &M) const;
-        bool Set_Bloc(MDD &M) const;
-    private:
-};
-
-#endif // COMMONSOG_H
+        Set m_nonObservable;
+        Set InterfaceTrans;
+        set<uint16_t> m_place_proposition;
+
+        vector<class Transition> transitions;
+
+        MDD Accessible_epsilon(MDD From);
+        Set firable_obs(MDD State);
+        MDD get_successor(MDD From, int t);
+        MDD ImageForward(MDD From);
+        MDD Canonize(MDD s, unsigned int level);
+        bool Set_Div(MDD &M) const;
+        bool Set_Bloc(MDD &M) const;
+    private:
+};
+
+#endif // COMMONSOG_H
diff --git a/src/HybridKripke.cpp b/src/HybridKripke.cpp
index ee4946682b092bac07f00e920d42b994dccfa087..d9e4bc98bcd5aad23afbcbb3272525e45186d07a 100644
--- a/src/HybridKripke.cpp
+++ b/src/HybridKripke.cpp
@@ -16,7 +16,7 @@ using namespace spot;
 
 HybridKripke::HybridKripke(const bdd_dict_ptr &dict_ptr): spot::kripke(dict_ptr)
 {
-    cout<<__func__<<endl;
+    //cout<<__func__<<endl;
     HybridKripkeIterator::m_dict_ptr=&dict_ptr;
     /*HybridKripkeIterator::m_deadlock.setLDDValue(1);
     HybridKripkeIterator::m_deadlock.setVisited();
@@ -62,57 +62,49 @@ state* HybridKripke::get_init_state() const {
 // Allows to print state label representing its id
 std::string HybridKripke::format_state(const spot::state* s) const
   {
-    cout<<__func__<<endl;
+    //cout<<__func__<<endl;
     auto ss = static_cast<const HybridKripkeState*>(s);
     std::ostringstream out;
-    out << "( " << ss->hash() <<  ")";
- 
+    out << "( " << ss->hash() <<  ")"; 
     return out.str();
   }
 
 HybridKripkeIterator* HybridKripke::succ_iter(const spot::state* s) const {
-   cout<<__func__<<endl;
+    //cout<<__func__<<endl;
     auto ss = static_cast<const HybridKripkeState*>(s);
-    HybridKripkeState *aggregate=ss;
+    char id[16];
+    memcpy(id,ss->getId(),16);
     bdd cond = state_condition(ss);
-    if (iter_cache_)
+    uint16_t pcontainer=ss->getContainerProcess();
+   /* if (iter_cache_)
     {
       auto it = static_cast<HybridKripkeIterator*>(iter_cache_);
       iter_cache_ = nullptr;    // empty the cache
-      it->recycle(ss, cond);
+      it->recycle(id,pcontainer,cond);
       return it;
-    }
-  return new HybridKripkeIterator(*aggregate,cond);
-
-    
-    
-    
-/*    auto ss = static_cast<const SogKripkeStateTh*>(s);
-   //////////////////////////////////////////////
+    }*/
+   
+  return new HybridKripkeIterator(id,pcontainer,cond);
 
-    return new SogKripkeIteratorTh(ss->getLDDState(),state_condition(ss));//,b);//s state_condition(ss));*/
 }
 
 bdd HybridKripke::state_condition(const spot::state* s) const
   {
    
     auto ss = static_cast<const HybridKripkeState*>(s);
-    set<uint16_t> marked_place=ss->getMarkedPlaces();
-
-
-    bdd result=bddtrue;
-     
-    for (auto it=marked_place.begin();it!=marked_place.end();it++) {
+    set<uint16_t>* marked_place=ss->getMarkedPlaces();
+    bdd result=bddtrue;     
+    for (auto it=marked_place->begin();it!=marked_place->end();it++) {
         string name=m_net->getPlaceName(*it);
         spot::formula f=spot::formula::ap(name);
         result&=bdd_ithvar((dict_->var_map.find(f))->second);
     }
-    set<uint16_t> unmarked_place=ss->getUnmarkedPlaces();
-    //for (auto it=unmarked_place.begin();it!=unmarked_place.end();it++) {
-    /*string name=m_builder->getPlace(*it);
-    spot::formula f=spot::formula::ap(name);
-    result&=!bdd_ithvar((dict_->var_map.find(f))->second);*/
-    //}
+    set<uint16_t>* unmarked_place=ss->getUnmarkedPlaces();
+    for (auto it=unmarked_place->begin();it!=unmarked_place->end();it++) {
+        string name=m_net->getPlaceName(*it);
+        spot::formula f=spot::formula::ap(name);
+        result&=!bdd_ithvar((dict_->var_map.find(f))->second);
+    }
 
   return result;
   }
diff --git a/src/HybridKripkeIterator.cpp b/src/HybridKripkeIterator.cpp
index 0c7f4bf226a7e33b9c5e22dc1b579565c695348d..93424f9fdaa0d1096af5f77ca72b04f05bd5cf37 100644
--- a/src/HybridKripkeIterator.cpp
+++ b/src/HybridKripkeIterator.cpp
@@ -6,50 +6,43 @@
 #define TAG_ACK_SUCC 11
 #define TAG_NOTCOMPLETED 20
 
-HybridKripkeIterator::HybridKripkeIterator(HybridKripkeState &kstate, bdd cnd):m_current_state(&kstate), kripke_succ_iterator(cnd)
+HybridKripkeIterator::HybridKripkeIterator(char *id,uint16_t pcontainer, bdd cnd): m_pcontainer(pcontainer),kripke_succ_iterator(cnd)
 {
-    cout<<__func__<<endl;
+   
+    memcpy(m_id,id,16);
     // Ask list of successors 
-     MPI_Send(m_current_state->getId(),16,MPI_BYTE,m_current_state->getContainerProcess(), TAG_ASK_SUCC, MPI_COMM_WORLD);
-     cout<<"Container process to ask :"<<m_current_state->getContainerProcess()<<endl;
-     // Receive list of successors
-     
+     MPI_Send(m_id,16,MPI_BYTE,m_pcontainer, TAG_ASK_SUCC, MPI_COMM_WORLD);
+   
+     // Receive list of successors     
      MPI_Status status;
      MPI_Probe(MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
      uint32_t nbytes;
     MPI_Get_count(&status, MPI_BYTE, &nbytes);
     char inmsg[nbytes+1];
-    cout<<"Received bytes : "<<nbytes<<endl;
+    //cout<<"Received bytes : "<<nbytes<<endl;
     MPI_Recv(inmsg, nbytes, MPI_BYTE,status.MPI_SOURCE,TAG_ACK_SUCC,MPI_COMM_WORLD, &status);
     uint32_t nb_succ;
     memcpy(&nb_succ,inmsg,4);
-    cout<<"Number of successors : "<<nb_succ<<endl;
+    //cout<<"Number of successors "<<nb_succ<<endl;
     uint32_t indice=4;
+    succ_t *succ_elt;
+    //printf("List of successors of %.16s\n",m_id);
     for (uint32_t i=0;i<nb_succ;i++) {
-        succ_t succ_elt;
-        
-        memcpy(succ_elt.id,inmsg+indice,16);
+        succ_elt=new succ_t;        
+        memcpy(succ_elt->id,inmsg+indice,16);
         indice+=16;
         
-        memcpy(&(succ_elt.pcontainer),inmsg+indice,2);
-        indice+=2;
-        memcpy(&(succ_elt.transition),inmsg+indice,2);
+        memcpy(&(succ_elt->pcontainer),inmsg+indice,2);
         indice+=2;
-        
-        m_succ.push_back(succ_elt);      
-    }
-    
-   /*if (lddstate->isDeadLock()) {
-     m_lsucc.push_back(pair<LDDState*,int>(&m_deadlock,-1));
-    }
-    if (lddstate->isDiv()) {
-        m_lsucc.push_back(pair<LDDState*,int>(&m_div,-1));
-    }*/
-
+        memcpy(&(succ_elt->transition),inmsg+indice,2);
+        indice+=2;        
+        m_succ.push_back(*succ_elt);   
+        delete succ_elt;
+    }  
 }
 bool HybridKripkeIterator::first() {
 
-    cout<<"entering "<<__func__<<endl;
+    //cout<<"entering "<<__func__<<endl;
     m_current_edge=0;
     
     return m_succ.size()!=0;
@@ -64,19 +57,20 @@ bool HybridKripkeIterator::next() {
 }
 
 bool HybridKripkeIterator::done() const {
-    cout<<"entring /excit"<<__func__<<endl;
+    //cout<<"entring /excit"<<__func__<<endl;
     return m_current_edge==m_succ.size();
 }
 
 HybridKripkeState* HybridKripkeIterator::dst() const
   {
-     succ_t succ_elt= m_succ.at(m_current_edge);
+     
+    succ_t succ_elt= m_succ.at(m_current_edge);
    return new HybridKripkeState(succ_elt.id,succ_elt.pcontainer);
   
   }
 
 bdd HybridKripkeIterator::cond()  const {
-    cout<<"entering "<<__func__<<endl;
+    //cout<<"entering "<<__func__<<endl;
     succ_t succ_elt=m_succ.at(m_current_edge);
     
     if (succ_elt.transition==-1) return bddtrue;
@@ -99,10 +93,12 @@ HybridKripkeIterator::~HybridKripkeIterator()
     
 }
 
-void HybridKripkeIterator::recycle(HybridKripkeState* aggregate, bdd cond)
+void HybridKripkeIterator::recycle(char *id,uint16_t pcontainer, bdd cond)
 {
-        cout<<__func__<<endl;
-        m_current_state=aggregate;
+        //cout<<__func__<<endl;
+        memcpy(m_id,id,16);
+        m_pcontainer=pcontainer;
+        
         spot::kripke_succ_iterator::recycle(cond);
 }
 
diff --git a/src/HybridKripkeIterator.h b/src/HybridKripkeIterator.h
index 720b4ea122f43b27d5c60ca7797c24a6d7eafd9e..a62012e2572ba6767ea6aed646e3b18770dfebdf 100644
--- a/src/HybridKripkeIterator.h
+++ b/src/HybridKripkeIterator.h
@@ -16,8 +16,9 @@ public:
     static LDDState m_div;
     static NewNet * m_net;
     static spot::bdd_dict_ptr* m_dict_ptr;
-  //  sog_succ_iterator(const RdPBDD& pn, const SogKripkeState& s, const bdd& c);
-    HybridKripkeIterator(HybridKripkeState &kstate, bdd cnd);
+    
+  
+    HybridKripkeIterator(char *id,uint16_t pcontainer, bdd cnd);
     virtual ~HybridKripkeIterator();
     bool first() override;
     bool next() override;
@@ -27,16 +28,14 @@ public:
 
    // HybridKripkeState* current_state() const;
 
-    void recycle(HybridKripkeState *aggregate, bdd cond);
-
-   
+    void recycle(char *id,uint16_t pcontainer, bdd cond);   
     std::string format_transition() const;
     
 
 private:
-    HybridKripkeState *m_current_state;
-    
     
+    char m_id[16];
+    uint16_t m_pcontainer;    
     unsigned int m_current_edge=0;
     vector<succ_t> m_succ;
 };
diff --git a/src/HybridKripkeState.cpp b/src/HybridKripkeState.cpp
index 9c2e02ffd800cb2dd52e1b4b5e5be30d20e97393..80744b5d4574debd040f2ace427435e1ed0acaef 100644
--- a/src/HybridKripkeState.cpp
+++ b/src/HybridKripkeState.cpp
@@ -6,7 +6,7 @@
 HybridKripkeState::~HybridKripkeState()
 {
     //dtor
-    cout<<__func__<<endl;
+    //cout<<__func__<<endl;
 }
 
 //static ModelCheckBaseMT * HybridKripkeState::m_builder;
diff --git a/src/HybridKripkeState.h b/src/HybridKripkeState.h
index 0ed7af28cfcb9f65aa7d5cddd9b66e0bb4bb6a48..902d5dd9dd3c1b6b349f98f33d3ad0e025f4483c 100644
--- a/src/HybridKripkeState.h
+++ b/src/HybridKripkeState.h
@@ -10,46 +10,69 @@ class HybridKripkeState : public spot::state
 {
 public:
     //static ModelCheckBaseMT * m_builder;
-    HybridKripkeState(unsigned char * id,uint16_t pcontainer):m_container(pcontainer) {
-        cout<<__func__<<"pcontainer :"<<pcontainer<<endl;
-        memcpy(m_id,id,16);
+    HybridKripkeState(unsigned char * id,uint16_t pcontainer):m_container(pcontainer) {        
+        memcpy(m_id,id,16);        
+        MPI_Send(m_id,16,MPI_BYTE,pcontainer, TAG_ASK_STATE, MPI_COMM_WORLD);       
         
-        MPI_Send(m_id,16,MPI_BYTE,pcontainer, TAG_ASK_STATE, MPI_COMM_WORLD);
-        
-        
-        char message[9];
         MPI_Status status; //int nbytes;
         MPI_Probe(MPI_ANY_SOURCE, TAG_ACK_STATE, MPI_COMM_WORLD, &status);
-        cout<<"ACK state received..."<<endl;
-        MPI_Recv(message, 8, MPI_BYTE,MPI_ANY_SOURCE,TAG_ACK_STATE,MPI_COMM_WORLD, &status);
-        memcpy(&m_hashid,message,8);        
+        uint32_t nbytes;
+        MPI_Get_count(&status, MPI_BYTE, &nbytes);
+        // cout<<"ACK state received..."<<nbytes<<endl;
+        char message[nbytes];
+        MPI_Recv(message, nbytes, MPI_BYTE,MPI_ANY_SOURCE,TAG_ACK_STATE,MPI_COMM_WORLD, &status);
+        memcpy(&m_hashid,message,8);     
+        //cout<<"Pos :"<<m_hashid<<endl;
+        //cout<<"Process :"<<m_container<<endl;
         m_hashid=m_hashid | (size_t(m_container)<<56);
         
+        // Determine Place propositions
+        uint16_t n_mp;
+        memcpy(&n_mp,message+8,2);
+        
+        //cout<<" Marked places :"<<n_mp<<endl;
+        uint16_t indice=10;
+        for(int i=0;i<n_mp;i++) {
+            uint16_t val;
+            memcpy(&val,message+indice,2);
+            m_marked_places.insert(val);
+            indice+=2;            
+        }
+        uint16_t n_up;
+        memcpy(&n_up,message+indice,2);
+        //cout<<" Unmarked places :"<<n_mp<<endl;
+        indice+=2;
+        for(int i=0;i<n_up;i++) {
+            uint16_t val;
+            memcpy(&val,message+indice,2);
+            m_unmarked_places.insert(val);
+            indice+=2;
+        }    
+        
         
     }
     // Constructor for cloning
     HybridKripkeState(unsigned char *id,uint16_t pcontainer,size_t hsh,bool ddiv, bool deadlock):m_container(pcontainer),m_div(ddiv),m_deadlock(deadlock),m_hashid(hsh) {
         memcpy(m_id,id,16); 
     
-        cout<<__func__<<endl;
+      //  cout<<__func__<<endl;
         
     }
     virtual ~HybridKripkeState();
 
     HybridKripkeState* clone() const override
     {
-        cout<<__func__<<endl;
+        //cout<<__func__<<endl;
         return new HybridKripkeState(m_id,m_container,m_hashid,m_div,m_deadlock);
     }
     size_t hash() const override
-    {
-        cout<<__func__<<m_hashid<<endl;        
+    {                
         return m_hashid;
     }
 
     int compare(const spot::state* other) const override
     {
-        cout<<__func__<<endl;
+        
         auto o = static_cast<const HybridKripkeState*>(other);
         size_t oh = o->hash();
         size_t h = hash();
@@ -60,15 +83,14 @@ public:
             return h > oh;
     }
     unsigned char * getId() {
-        cout<<__func__<<endl;
+       // cout<<__func__<<endl;
         return m_id;
     }
-    uint16_t getContainerProcess() {
-        cout<<__func__<<endl;
+    uint16_t getContainerProcess() {        
         return m_container;
     }
-    set<uint16_t> & getMarkedPlaces() { return m_marked_places;}
-    set<uint16_t> & getUnmarkedPlaces() { return m_unmarked_places;}
+    set<uint16_t> * getMarkedPlaces() { return &m_marked_places;}
+    set<uint16_t> * getUnmarkedPlaces() { return &m_unmarked_places;}
 protected:
 
 private:
diff --git a/src/LDDGraph.cpp b/src/LDDGraph.cpp
index cf0829b14303e1e64cb49b48d07770c59a2bccac..b8e89d2bae4a0594f5f90743344ab3011a2b328f 100644
--- a/src/LDDGraph.cpp
+++ b/src/LDDGraph.cpp
@@ -197,9 +197,9 @@ LDDState *LDDGraph::getLDDStateById(unsigned int id) {
     return m_GONodes.at(id);
 }
 
-string LDDGraph::getTransition(int pos) {
+string LDDGraph::getTransition(uint16_t pos) {
 
-    map<string,int>::iterator it=m_transition->begin();
+    map<string,uint16_t>::iterator it=m_transition->begin();
     while(it != m_transition->end())
     {
         if(it->second == pos)
@@ -209,14 +209,14 @@ string LDDGraph::getTransition(int pos) {
     return it->first;
 }
 
-string LDDGraph::getPlace(int pos) {
+string LDDGraph::getPlace(uint16_t pos) {
     return m_places->find(pos)->second;
 }
 
-void LDDGraph::setTransition(map<string,int>& list_transitions) {
+void LDDGraph::setTransition(map<string,uint16_t>& list_transitions) {
     m_transition=&list_transitions;
 }
-void LDDGraph::setPlace(map<int,string>& list_places) {
+void LDDGraph::setPlace(map<uint16_t,string>& list_places) {
     m_places=&list_places;
 }
 
diff --git a/src/LDDGraph.h b/src/LDDGraph.h
index 891eaf6fc23d4f67efe4928a93610167f1c73083..d29547f9265fc5b6233df4521bf2e8516e58e661 100755
--- a/src/LDDGraph.h
+++ b/src/LDDGraph.h
@@ -14,16 +14,16 @@ class CommonSOG;
 class LDDGraph
 {
     private:
-        map<string,int>* m_transition;
-        map<int,string>* m_places;
+        map<string,uint16_t>* m_transition;
+        map<uint16_t,string>* m_places;
 		void printGraph(LDDState *, size_t &);
         CommonSOG *m_constructor;
 	public:
         CommonSOG* getConstructor() {return m_constructor;}
-        string getTransition(int pos);
-        string getPlace(int pos);
-        void setPlace(map<int,string>& list_places);
-        void setTransition(map<string,int>& list_transitions);
+        string getTransition(uint16_t pos);
+        string getPlace(uint16_t pos);
+        void setPlace(map<uint16_t,string>& list_places);
+        void setTransition(map<string,uint16_t>& list_transitions);
         MetaLDDNodes m_GONodes;
         LDDState *getLDDStateById(unsigned int id);
 		void Reset();
diff --git a/src/LDDState.cpp b/src/LDDState.cpp
index 04cc36e0a53c73d2a28b1384bea6a9efc1703613..d1b03429cf9737c15590a12e3568492681fea80b 100644
--- a/src/LDDState.cpp
+++ b/src/LDDState.cpp
@@ -33,10 +33,10 @@ vector<pair<LDDState*, int>>* LDDState::getSuccessors() {
     return &Successors;
 }
 
-vector<int> LDDState::getMarkedPlaces(set<int>& lplacesAP) {
-    vector<int> result;
+vector<uint16_t> LDDState::getMarkedPlaces(set<uint16_t>& lplacesAP) {
+    vector<uint16_t> result;
     MDD mdd=m_lddstate;
-    int depth=0;
+    uint16_t depth=0;
     while (mdd>lddmc_true)
     {
         //printf("mddd : %d \n",mdd);
@@ -54,11 +54,11 @@ vector<int> LDDState::getMarkedPlaces(set<int>& lplacesAP) {
     return result;
 }
 
-vector<int> LDDState::getUnmarkedPlaces(set<int>& lplacesAP) {
-    vector<int> result;
+vector<uint16_t> LDDState::getUnmarkedPlaces(set<uint16_t>& lplacesAP) {
+    vector<uint16_t> result;
     MDD mdd=m_lddstate;
 
-    int depth=0;
+    uint16_t depth=0;
     while (mdd>lddmc_true)
     {
         //printf("mddd : %d \n",mdd);
diff --git a/src/LDDState.h b/src/LDDState.h
index e59e7195b46c5ffd15e3ca407376e4ef1d3276fc..7864d207562dc245a5b91002a885a7c26e734ece 100755
--- a/src/LDDState.h
+++ b/src/LDDState.h
@@ -13,7 +13,7 @@ class LDDState {
  public:
 
   LDDState() {
-    m_boucle = m_blocage = m_visited = false;
+    m_boucle = m_blocage = m_visited = false;m_completed=false;
     m_virtual = false;
   }
   virtual ~LDDState();
@@ -41,8 +41,8 @@ class LDDState {
   bool isVisited() {return m_visited;}
   void setCompletedSucc() {m_completed=true;}
   bool isCompletedSucc() {return m_completed;}
-  vector<int> getMarkedPlaces(set<int>& lplacesAP);
-  vector<int> getUnmarkedPlaces(set<int>& lplacesAP);
+  vector<uint16_t> getMarkedPlaces(set<uint16_t>& lplacesAP);
+  vector<uint16_t> getUnmarkedPlaces(set<uint16_t>& lplacesAP);
   void setProcess(uint16_t v) {m_process=v;}
   uint16_t getProcess() {return m_process;}
  protected:
diff --git a/src/MCHybridSOG.cpp b/src/MCHybridSOG.cpp
index 9ca13560fece90bb9653c9338b5c9f81f7366774..7f9b91f512542aae8d53e06bc623192ebe28c848 100644
--- a/src/MCHybridSOG.cpp
+++ b/src/MCHybridSOG.cpp
@@ -149,7 +149,7 @@ void *MCHybridSOG::doCompute()
         convert_wholemdd_stringcpp(Complete_meta_state,*chaine);
         get_md5(*chaine,Identif);
         //lddmc_getsha(Complete_meta_state, Identif);
-        int destination=(int)(Identif[0]%n_tasks);
+        uint16_t destination=(uint16_t)(Identif[0]%n_tasks);
         c->setProcess(destination);
         if(destination==0)
         {
@@ -167,7 +167,7 @@ void *MCHybridSOG::doCompute()
             MDD initialstate=Complete_meta_state;
             //cout<<"Initial marking is sent"<<endl;
             m_graph->insertSHA(c);
-            strcpySHA(c->m_SHA2,Identif);
+            memcpy(c->m_SHA2,Identif,16);
            // MDD initialstate=Complete_meta_state;
 
             //pthread_spin_lock(&m_spin_md5);
@@ -176,9 +176,9 @@ void *MCHybridSOG::doCompute()
             //pthread_spin_unlock(&m_spin_md5);
             //#ifndef
 //            if (strcmp(red,'C')==0)
-            {
+            
             initialstate=Canonize(Complete_meta_state,0);
-            }
+            
             //#endif // REDUCE
             convert_wholemdd_stringcpp(initialstate,*chaine);
 
@@ -210,28 +210,25 @@ void *MCHybridSOG::doCompute()
                                 m_waitingBuild=false;
                                 m_aggWaiting=m_graph->getLDDStateById(pos);
                                 m_waitingSucc=true;
-                                cout<<"Get build..."<<endl;
+                               // cout<<"Get build..."<<endl;
                             }
                             
                         }
                         if (m_waitingSucc) {
                             
                             if (m_aggWaiting->isCompletedSucc()) {
-                                cout<<"Get succ..."<<endl;
+                                //cout<<"Get succ..."<<endl;
                                 m_waitingSucc=false;
                                 sendSuccToMC();
                             }
                         }
                         if (m_waitingAgregate) {
-                            bool res;
+                            bool res=false;
                             size_t pos=m_graph->findSHAPos(m_id_md5,res);
                             //cout<<"Not found..."<<endl;
                             if (res) {
                                 m_waitingAgregate=false;
-                                char mess[9];
-                                memcpy(mess,&pos,8);
-                                MPI_Send(mess,8,MPI_BYTE,n_tasks, TAG_ACK_STATE, MPI_COMM_WORLD);  
-                                
+                                sendPropToMC(pos);                                
                             }
                         }
             }
@@ -335,7 +332,7 @@ void *MCHybridSOG::doCompute()
                                 if(!pos)
                                 {
                                     m_graph->insert(reached_class);
-                                    
+                                    memcpy(reached_class->m_SHA2,Identif,16);
                                     pthread_mutex_unlock(&m_graph_mutex);
                                     m_graph->addArc();
 
@@ -385,7 +382,7 @@ void *MCHybridSOG::doCompute()
                                     //MDD Reduced=ldd_reachedclass;
                                  string* message_to_send2=new string();
                                  convert_wholemdd_stringcpp(reached,*message_to_send2);
-                                 get_md5(*message_to_send2,Identif);
+                                // get_md5(*message_to_send2,Identif);
 
 
 
@@ -507,45 +504,41 @@ void MCHybridSOG::read_message()
     {
        //cout<<"message tag :"<<m_status.MPI_TAG<<" by task "<<task_id<<endl;
       if (m_status.MPI_TAG==TAG_ASK_STATE) {          
-            cout<<"TAG ASKSTATE received by task "<<task_id<<" from "<<m_status.MPI_SOURCE<<endl;
+            //cout<<"TAG ASKSTATE received by task "<<task_id<<" from "<<m_status.MPI_SOURCE<<endl;
             char mess[17];
             MPI_Recv(mess,16,MPI_BYTE,m_status.MPI_SOURCE,m_status.MPI_TAG,MPI_COMM_WORLD,&m_status);
             bool res;m_waitingAgregate=false;
             size_t pos=m_graph->findSHAPos(mess,res);
             if (!res) {
-                cout<<"Not found"<<endl;
+                //cout<<"Not found"<<endl;
                 m_waitingAgregate=true;
                 memcpy(m_id_md5,mess,16);
             }
-            else {
-                cout<<"pos found :"<<pos<<endl;
-                memcpy(mess,&pos,8);
-                MPI_Send(mess,8,MPI_BYTE,m_status.MPI_SOURCE, TAG_ACK_STATE, MPI_COMM_WORLD);                
-            }
+            else sendPropToMC(pos);
+               
             
       }
-      else if (m_status.MPI_TAG==TAG_ASK_SUCC) {          
+      else if (m_status.MPI_TAG==TAG_ASK_SUCC) {         
         
-            char mess[17];
-            
+            char mess[17];            
             MPI_Recv(mess,16,MPI_BYTE,m_status.MPI_SOURCE,m_status.MPI_TAG,MPI_COMM_WORLD,&m_status);
             m_waitingBuild=false;m_waitingSucc=false;
             bool res;
-            cout<<"Before "<<res<<endl;
+            //cout<<"Before "<<res<<endl;
             size_t pos=m_graph->findSHAPos(mess,res);
-            cout<<"After "<<res<<endl;
+            //cout<<"After "<<res<<endl;
             if (res) {
                 LDDState *aggregate=m_graph->getLDDStateById(pos);
                 m_aggWaiting=aggregate;
                 if (aggregate->isCompletedSucc()) sendSuccToMC();
                 else {
                     m_waitingSucc=true;                    
-                    cout<<"Waiting for succ..."<<endl;
+                    //cout<<"Waiting for succ..."<<endl;
                 }
             }
             else {
                 m_waitingBuild=true;
-                cout<<"Waiting for build..."<<endl;
+                //cout<<"Waiting for build..."<<endl;
                 memcpy(m_id_md5,mess,16);
             }
             
@@ -554,29 +547,22 @@ void MCHybridSOG::read_message()
         switch (m_status.MPI_TAG)
         {
         case TAG_STATE:
-            cout<<"=============================TAG STATE received by task "<<task_id<<endl;
+            //cout<<"=============================TAG STATE received by task "<<task_id<<endl;
             read_state_message();
             break;
         case TAG_FINISH: 
-            cout<<"TAG FINISH received by task "<<task_id<<endl;
-            
+            cout<<"TAG FINISH received by task "<<task_id<<endl;            
              MPI_Recv(&v, 1, MPI_INT, m_status.MPI_SOURCE, m_status.MPI_TAG, MPI_COMM_WORLD, &m_status);
             m_Terminated=true;
             break;
         case TAG_INITIAL: 
-            cout<<"TAG INITIAL received by task "<<task_id<<endl;
-             
+             // cout<<"TAG INITIAL received by task "<<task_id<<endl;             
              MPI_Recv(&v, 1, MPI_INT, m_status.MPI_SOURCE, m_status.MPI_TAG, MPI_COMM_WORLD, &m_status);
-             LDDState *i_agregate=m_graph->getInitialState();
-             
-           
-             char message[23];
+             LDDState *i_agregate=m_graph->getInitialState();           
+             char message[22];
              memcpy(message,i_agregate->getSHAValue(),16);
-             uint16_t id_p=i_agregate->getProcess();
-             uint32_t jouk=65535;
-             memcpy(message+16,&id_p,2);
-             memcpy(message+18,&jouk,4);           
-            
+             uint16_t id_p=i_agregate->getProcess();             
+             memcpy(message+16,&id_p,2);            
              MPI_Send(message,22,MPI_BYTE,m_status.MPI_SOURCE, TAG_ACK_INITIAL, MPI_COMM_WORLD);
              break;
        
@@ -584,11 +570,7 @@ void MCHybridSOG::read_message()
         
         default:  cout<<"unknown received "<<m_status.MPI_TAG<<" by task "<<task_id<<endl;
             //AbortTerm();
-            break;
-            /* int v;
-             MPI_Recv(&v, 1, MPI_INT, status.MPI_SOURCE, status.MPI_TAG, MPI_COMM_WORLD, &status);
-             if (task_id!=0)
-                 MPI_Send( &v, 1, MPI_INT, 0, TAG_ABORT, MPI_COMM_WORLD);*/
+            break;           
         }
         
         MPI_Iprobe(MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&flag,&m_status);
@@ -615,9 +597,6 @@ void MCHybridSOG::read_state_message()
     pthread_mutex_unlock(&m_spin_msg[min_charge]);
 }
 
-
-
-
 void MCHybridSOG::send_state_message()
 {
     while (!m_msg[0].empty())
@@ -694,8 +673,6 @@ void MCHybridSOG::computeDSOG(LDDGraph &g)
 
     doCompute();
 
-
-
     for (int i = 0; i < m_nb_thread-1; i++)
     {
         pthread_join(m_list_thread[i], NULL);
@@ -713,16 +690,8 @@ void MCHybridSOG::computeDSOG(LDDGraph &g)
     MPI_Reduce(&nbarcs, &sum_nbArcs, 1, MPI_INT, MPI_SUM, 0, m_comm_world);
     MPI_Reduce(&m_size_mess, &total_size_mess, 1, MPI_INT, MPI_SUM, 0, m_comm_world);
 
-
-
-
     if(task_id==0)
     {
-        //
-
-        // cout<<"Nb Iteration internes : "<<m_itint<<endl;*/
-        //auto t2 = std::chrono::high_resolution_clock::now();
-        //tps=(double)clock() / (double)CLOCKS_PER_SEC-t1;
         clock_gettime(CLOCK_REALTIME, &finish);
 
         tps = (finish.tv_sec - start.tv_sec);
@@ -757,15 +726,6 @@ int MCHybridSOG::minCharge()
 }
 
 
-void MCHybridSOG::strcpySHA(unsigned char *dest,const unsigned char *source)
-{
-    for (int i=0; i<LENGTH_ID; i++)
-    {
-        dest[i]=source[i];
-        //if (source[i]=='\0') exit(0);
-    }
-    dest[LENGTH_ID]='\0';
-}
 
 
 
@@ -774,10 +734,6 @@ MCHybridSOG::~MCHybridSOG()
     //dtor
 }
 
-
-
-
-
 /******************************************convert char ---> MDD ********************************************/
 
 MDD MCHybridSOG::decodage_message(const char *chaine)
@@ -801,27 +757,6 @@ MDD MCHybridSOG::decodage_message(const char *chaine)
     return M;
 }
 
-
-/*void HybridSOG::DisplayMessage(const char *chaine)
-{
-    unsigned int longueur=((unsigned char)chaine[1]-1);
-    longueur=(longueur<<7) | ((unsigned char)chaine[0]>>1);
-    int index=2;
-    printf("Chaine longueur %d pour %d places",longueur,m_nbPlaces);
-    for (int nb=0; nb<longueur; nb++)
-    {
-        for (int i=0; i<m_nbPlaces; i++)
-        {
-
-            printf("%d",((unsigned char)chaine[index]-1));
-            index++;
-        }
-        printf(" ");
-    }
-
-} */
-
-
 void * MCHybridSOG::threadHandler(void *context)
 {
 
@@ -877,7 +812,7 @@ void  MCHybridSOG::get_md5(const string& chaine,unsigned char *md_chaine)
     pthread_spin_lock(&m_spin_md5);
     MD5(chaine.c_str(), chaine.size(),md_chaine);
     pthread_spin_unlock(&m_spin_md5);
-    md_chaine[16]='\0';
+    //md_chaine[16]='\0';
 }
 
 void MCHybridSOG::sendSuccToMC() {
@@ -887,7 +822,7 @@ void MCHybridSOG::sendSuccToMC() {
     char mess_tosend[message_size];
     memcpy(mess_tosend,&nb_succ,4);            
     uint32_t i_message=4;
-    
+    //cout<<"***************************Number of succesors to send :"<<nb_succ<<endl;
     for (uint32_t i=0;i<nb_succ;i++) {  
                
                 pair<LDDState*,int> elt;
@@ -895,7 +830,7 @@ void MCHybridSOG::sendSuccToMC() {
                 memcpy(mess_tosend+i_message,elt.first->getSHAValue(),16);
                 i_message+=16;
                 uint16_t pcontainer=elt.first->getProcess();
-                cout<<" pcontainer "<<pcontainer<<endl;
+                //cout<<" pcontainer "<<pcontainer<<endl;
                 memcpy(mess_tosend+i_message,&pcontainer,2);                
                 i_message+=2;  
                 memcpy(mess_tosend+i_message,&(elt.second),2);
@@ -905,3 +840,71 @@ void MCHybridSOG::sendSuccToMC() {
            MPI_Send(mess_tosend,message_size,MPI_BYTE,n_tasks, TAG_ACK_SUCC,MPI_COMM_WORLD);
           
 }
+
+set<uint16_t> MCHybridSOG::getMarkedPlaces(LDDState *agg) {
+    set<uint16_t> result;
+    MDD mdd=agg->getLDDValue();
+    uint16_t depth=0;
+    while (mdd>lddmc_true)
+    {
+        //printf("mddd : %d \n",mdd);
+        mddnode_t node=GETNODE(mdd);
+        if (m_place_proposition.find(depth)!=m_place_proposition.end())
+        if (mddnode_getvalue(node)==1) {
+            result.insert(depth);
+        }
+
+        mdd=mddnode_getdown(node);
+        depth++;
+
+    }
+    return result;
+}
+
+set<uint16_t> MCHybridSOG::getUnmarkedPlaces(LDDState *agg) {
+    set<uint16_t> result;
+    MDD mdd=agg->getLDDValue();
+
+    uint16_t depth=0;
+    while (mdd>lddmc_true)
+    {
+        //printf("mddd : %d \n",mdd);
+        mddnode_t node=GETNODE(mdd);
+        if (m_place_proposition.find(depth)!=m_place_proposition.end())
+        if (mddnode_getvalue(node)==0) {
+            result.insert(depth);
+
+        }
+
+        mdd=mddnode_getdown(node);
+        depth++;
+
+    }
+    return result;
+}
+// Send propositions to Model checker
+void MCHybridSOG::sendPropToMC(size_t pos) {
+     LDDState *agg=m_graph->getLDDStateById(pos);
+     set<uint16_t> marked_places=getMarkedPlaces(agg);
+     set<uint16_t> unmarked_places=getUnmarkedPlaces(agg);
+     uint16_t s_mp=marked_places.size();
+     uint16_t s_up=unmarked_places.size();
+     char mess_to_send[8+s_mp*2+s_up*2+4];
+     memcpy(mess_to_send,&pos,8);
+     //cout<<"************* Pos to send :"<<pos<<endl;
+     size_t indice=8;
+     memcpy(mess_to_send+indice,&s_mp,2);
+     indice+=2;
+     for (auto it=marked_places.begin();it!=marked_places.end();it++) {
+                    
+        memcpy(mess_to_send+indice,&(*it),2);
+        indice+=2;
+    }
+    memcpy(mess_to_send+indice,&s_up,2);
+    indice+=2;
+    for (auto it=unmarked_places.begin();it!=unmarked_places.end();it++) {
+        memcpy(mess_to_send+indice,&(*it),2);
+        indice+=2;
+    }
+    MPI_Send(mess_to_send,indice,MPI_BYTE,n_tasks, TAG_ACK_STATE, MPI_COMM_WORLD);                
+}
diff --git a/src/MCHybridSOG.h b/src/MCHybridSOG.h
index 9c250deae146d7543a4fc2fd5b2d95c916695ee8..ae70af3e2739e1c8cc3eab2162447802c1a0fb10 100644
--- a/src/MCHybridSOG.h
+++ b/src/MCHybridSOG.h
@@ -30,6 +30,7 @@
 #include <time.h>
 #include <chrono>
 #include "CommonSOG.h"
+#include <atomic>
 // namespace mpi = boost::mpi;
 
 //#define MASTER 0
@@ -59,11 +60,13 @@ protected:
 private:
     MPI_Comm m_comm_world;
     void sendSuccToMC();
-    bool m_waitingAgregate=false;
-    bool m_waitingBuild=false;
+    void sendPropToMC(size_t pos);
+    atomic_bool m_waitingAgregate;// (false);
+    atomic_bool m_waitingBuild;
+    atomic_bool m_waitingSucc;
     char m_id_md5[16];
     LDDState * m_aggWaiting=nullptr;
-    bool m_waitingSucc=false;
+    
     
     /// \ hash function
     void get_md5(const string &chaine, unsigned char *md_chaine);
@@ -72,7 +75,7 @@ private:
     inline int minCharge();
     
     /// Copie string of caracter
-    void strcpySHA(unsigned char *dest, const unsigned char *source);
+    
 
     MDD M0;
 
@@ -133,7 +136,8 @@ private:
     int m_total_nb_send = 0, m_total_nb_recv = 0;
 
     MPI_Status m_status;
-    
+    set<uint16_t> getUnmarkedPlaces(LDDState *agg);
+    set<uint16_t> getMarkedPlaces(LDDState *agg);
 
 };
 
diff --git a/src/NewNet.cpp b/src/NewNet.cpp
index 66bf51c694fe6485d2400d022cc95af717bd4290..5b2e4b6c51ff7f3cbc3244ffcffdd2f063edf6c3 100644
--- a/src/NewNet.cpp
+++ b/src/NewNet.cpp
@@ -183,7 +183,7 @@ void NewNet::setListObservable(const set<string> & list_t)
         {
             cout<<"Error: "<<*i<<" is not a transition!"<<endl;
             // Check if the proposition corresponds to a place
-            map<string, int>::iterator pi = placeName.find(*i);
+            map<string, uint16_t>::iterator pi = placeName.find(*i);
             if (pi!=placeName.end())
                 cout<<"Place was found!"<<endl;
             m_formula_place.insert(pi->second);
@@ -207,7 +207,7 @@ void NewNet::setListObservable(const set<string> & list_t)
         else
         {
             Formula_Trans.insert(pos);
-            map<string,int>::iterator ti=transitionName.find(*i);
+            map<string,uint16_t>::iterator ti=transitionName.find(*i);
             Observable.insert(pos);
         }
     }
@@ -365,7 +365,7 @@ ostream &operator<<(ostream &os, const Set &s)
 /*----------------------------------------------------------------------*/
 bool NewNet::addPlace(const string &place, int marking, int capacity)
 {
-    map<string, int>::const_iterator pi = placeName.find(place);
+    map<string, uint16_t>::const_iterator pi = placeName.find(place);
     if (pi == placeName.end())
     {
         placeName[place] = places.size();
@@ -379,7 +379,7 @@ bool NewNet::addPlace(const string &place, int marking, int capacity)
 
 bool NewNet::addQueue(const string &place, int capacity)
 {
-    map<string, int>::const_iterator pi = placeName.find(place);
+    map<string, uint16_t>::const_iterator pi = placeName.find(place);
     if (pi == placeName.end())
     {
         placeName[place] = places.size();
@@ -393,7 +393,7 @@ bool NewNet::addQueue(const string &place, int capacity)
 
 bool NewNet::addLossQueue(const string &place, int capacity)
 {
-    map<string, int>::const_iterator pi = placeName.find(place);
+    map<string, uint16_t>::const_iterator pi = placeName.find(place);
     if (pi == placeName.end())
     {
         placeName[place] = places.size();
@@ -407,7 +407,7 @@ bool NewNet::addLossQueue(const string &place, int capacity)
 
 bool NewNet::addTrans(const string &trans)
 {
-    map<string, int>::const_iterator ti = transitionName.find(trans);
+    map<string,uint16_t>::const_iterator ti = transitionName.find(trans);
     if (ti == transitionName.end())
     {
         transitionName[trans] = transitions.size();
@@ -422,12 +422,12 @@ bool NewNet::addTrans(const string &trans)
 bool NewNet::addPre(const string &place, const string &trans, int valuation)
 {
     int p, t;
-    map<string, int>::const_iterator pi = placeName.find(place);
+    map<string, uint16_t>::const_iterator pi = placeName.find(place);
     if (pi == placeName.end() || places[pi->second].isQueue())
         return false;
     else
         p = pi->second;
-    map<string, int>::const_iterator ti = transitionName.find(trans);
+    map<string, uint16_t>::const_iterator ti = transitionName.find(trans);
     if (ti == transitionName.end())
         return false;
     else
@@ -440,12 +440,12 @@ bool NewNet::addPre(const string &place, const string &trans, int valuation)
 bool NewNet::addPost(const string &place, const string &trans, int valuation)
 {
     int p, t;
-    map<string, int>::const_iterator pi = placeName.find(place);
+    map<string, uint16_t>::const_iterator pi = placeName.find(place);
     if (pi == placeName.end() || places[pi->second].isQueue())
         return false;
     else
         p = pi->second;
-    map<string, int>::const_iterator ti = transitionName.find(trans);
+    map<string, uint16_t>::const_iterator ti = transitionName.find(trans);
     if (ti == transitionName.end())
         return false;
     else
@@ -458,12 +458,12 @@ bool NewNet::addPost(const string &place, const string &trans, int valuation)
 bool NewNet::addPreQueue(const string &place, const string &trans, int valuation)
 {
     int p, t;
-    map<string, int>::const_iterator pi = placeName.find(place);
+    map<string, uint16_t>::const_iterator pi = placeName.find(place);
     if (pi == placeName.end() || !places[pi->second].isQueue())
         return false;
     else
         p = pi->second;
-    map<string, int>::const_iterator ti = transitionName.find(trans);
+    map<string, uint16_t>::const_iterator ti = transitionName.find(trans);
     if (ti == transitionName.end())
         return false;
     else
@@ -477,12 +477,12 @@ bool NewNet::addPostQueue(const string &place, const string &trans,
                           int valuation)
 {
     int p, t;
-    map<string, int>::const_iterator pi = placeName.find(place);
+    map<string, uint16_t>::const_iterator pi = placeName.find(place);
     if (pi == placeName.end() || !places[pi->second].isQueue())
         return false;
     else
         p = pi->second;
-    map<string, int>::const_iterator ti = transitionName.find(trans);
+    map<string, uint16_t>::const_iterator ti = transitionName.find(trans);
     if (ti == transitionName.end())
         return false;
     else
@@ -496,12 +496,12 @@ bool NewNet::addInhibitor(const string &place, const string &trans,
                           int valuation)
 {
     int p, t;
-    map<string, int>::const_iterator pi = placeName.find(place);
+    map<string, uint16_t>::const_iterator pi = placeName.find(place);
     if (pi == placeName.end())
         return false;
     else
         p = pi->second;
-    map<string, int>::const_iterator ti = transitionName.find(trans);
+    map<string, uint16_t>::const_iterator ti = transitionName.find(trans);
     if (ti == transitionName.end())
         return false;
     else
@@ -515,17 +515,17 @@ bool NewNet::addPreAuto(const string &place, const string &trans,
                         const string &valuation)
 {
     int p, t, v;
-    map<string, int>::const_iterator pi = placeName.find(place);
+    map<string, uint16_t>::const_iterator pi = placeName.find(place);
     if (pi == placeName.end() || places[pi->second].isQueue())
         return false;
     else
         p = pi->second;
-    map<string, int>::const_iterator ti = transitionName.find(trans);
+    map<string, uint16_t>::const_iterator ti = transitionName.find(trans);
     if (ti == transitionName.end())
         return false;
     else
         t = ti->second;
-    map<string, int>::const_iterator pv = placeName.find(valuation);
+    map<string, uint16_t>::const_iterator pv = placeName.find(valuation);
     if (pv == placeName.end() || places[pv->second].isQueue())
         return false;
     else
@@ -539,17 +539,17 @@ bool NewNet::addPostAuto(const string &place, const string &trans,
                          const string &valuation)
 {
     int p, t, v;
-    map<string, int>::const_iterator pi = placeName.find(place);
+    map<string, uint16_t>::const_iterator pi = placeName.find(place);
     if (pi == placeName.end() || places[pi->second].isQueue())
         return false;
     else
         p = pi->second;
-    map<string, int>::const_iterator ti = transitionName.find(trans);
+    map<string, uint16_t>::const_iterator ti = transitionName.find(trans);
     if (ti == transitionName.end())
         return false;
     else
         t = ti->second;
-    map<string, int>::const_iterator pv = placeName.find(valuation);
+    map<string, uint16_t>::const_iterator pv = placeName.find(valuation);
     if (pv == placeName.end() || places[pi->second].isQueue())
         return false;
     else
@@ -562,12 +562,12 @@ bool NewNet::addPostAuto(const string &place, const string &trans,
 bool NewNet::addReset(const string &place, const string &trans)
 {
     int p, t;
-    map<string, int>::const_iterator pi = placeName.find(place);
+    auto pi = placeName.find(place);
     if (pi == placeName.end())
         return false;
     else
         p = pi->second;
-    map<string, int>::const_iterator ti = transitionName.find(trans);
+    auto ti = transitionName.find(trans);
     if (ti == transitionName.end())
         return false;
     else
diff --git a/src/NewNet.h b/src/NewNet.h
index 9709a016016507dec081c17a3d9ee6ac867e63fc..8341cf38abf3fbd2be968cfc56401652bcb2b265 100644
--- a/src/NewNet.h
+++ b/src/NewNet.h
@@ -69,13 +69,13 @@ class NewNet : public RdPMonteur {
   /* Attributs */
   vector<class Place> places;
   vector<class Transition> transitions;
-  map<string, int> placeName;
-  map<string, int> transitionName;
+  map<string, uint16_t> placeName;
+  map<string, uint16_t> transitionName;
   Set Observable;
   Set NonObservable;
   Set InterfaceTrans;
   Set Formula_Trans;
-  Set m_formula_place;
+  set<uint16_t> m_formula_place;
 
   /* Constructors */
   NewNet(){};
@@ -108,10 +108,10 @@ class NewNet : public RdPMonteur {
   set<string>& getListPlaceAP() {return m_lplaceAP;}
   string& getPlaceName(size_t pos) { return m_placePosName.find(pos)->second;}
   string& getTransitionName(size_t pos) { return m_transitionPosName.find(pos)->second;}
-  map<int,string> m_placePosName;
+  map<uint16_t,string> m_placePosName;
   private:
   
-  map<int,string> m_transitionPosName;
+  map<uint16_t,string> m_transitionPosName;
 
 
   set<string> m_ltransitionAP;
diff --git a/src/SogKripke.cpp b/src/SogKripke.cpp
index d2dffaa205d2f30cef05ca44a214f5a847a44e01..d8229149513944a4e85c1a209d11fc3778be760c 100644
--- a/src/SogKripke.cpp
+++ b/src/SogKripke.cpp
@@ -52,7 +52,7 @@ bdd SogKripke::state_condition(const spot::state* s) const
   {
 
     auto ss = static_cast<const SogKripkeState*>(s);
-    vector<int> marked_place=ss->getLDDState()->getMarkedPlaces(m_sog->getConstructor()->getPlaceProposition());
+    vector<uint16_t> marked_place=ss->getLDDState()->getMarkedPlaces(m_sog->getConstructor()->getPlaceProposition());
 
 
     bdd result=bddtrue;
@@ -62,7 +62,7 @@ bdd SogKripke::state_condition(const spot::state* s) const
     spot::formula f=spot::formula::ap(name);
     result&=bdd_ithvar((dict_->var_map.find(f))->second);
     }
-    vector<int> unmarked_place=ss->getLDDState()->getUnmarkedPlaces(m_sog->getConstructor()->getPlaceProposition());
+    vector<uint16_t> unmarked_place=ss->getLDDState()->getUnmarkedPlaces(m_sog->getConstructor()->getPlaceProposition());
     for (auto it=unmarked_place.begin();it!=unmarked_place.end();it++) {
     string name=m_sog->getPlace(*it);
     spot::formula f=spot::formula::ap(name);
diff --git a/src/SogKripkeTh.cpp b/src/SogKripkeTh.cpp
index d2884fa39a07bac631c69d972b3f35f5c523d1a7..b11c54288f3ac4e6cf7e9cfc4384431ed79ef1fa 100644
--- a/src/SogKripkeTh.cpp
+++ b/src/SogKripkeTh.cpp
@@ -78,7 +78,7 @@ bdd SogKripkeTh::state_condition(const spot::state* s) const
   {
 
     auto ss = static_cast<const SogKripkeStateTh*>(s);
-    vector<int> marked_place=ss->getLDDState()->getMarkedPlaces(m_builder->getPlaceProposition());
+    vector<uint16_t> marked_place=ss->getLDDState()->getMarkedPlaces(m_builder->getPlaceProposition());
 
 
     bdd result=bddtrue;
@@ -88,7 +88,7 @@ bdd SogKripkeTh::state_condition(const spot::state* s) const
     spot::formula f=spot::formula::ap(name);
     result&=bdd_ithvar((dict_->var_map.find(f))->second);
     }
-    vector<int> unmarked_place=ss->getLDDState()->getUnmarkedPlaces(m_builder->getPlaceProposition());
+    vector<uint16_t> unmarked_place=ss->getLDDState()->getUnmarkedPlaces(m_builder->getPlaceProposition());
     for (auto it=unmarked_place.begin();it!=unmarked_place.end();it++) {
     string name=m_builder->getPlace(*it);
     spot::formula f=spot::formula::ap(name);
diff --git a/src/main.cpp b/src/main.cpp
index d358602a16673541c7422350e903f85377b52b99..5477c36adbba09f59a7b275fb926a460f253be45 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -4,8 +4,6 @@
 #include <iostream>
 #include <string>
 #include <fstream>
-//#include "bdd.h"
-//#include "fdd.h"
 #include <mpi.h>
 
 #include "DistributedSOG.h"
@@ -121,7 +119,7 @@ int main(int argc, char** argv)
     cout<<"Fetching formula..."<<endl;
     set<string> list_propositions=buildPropositions(formula);
 
-    NewNet R(argv[3],list_propositions);
+    NewNet Rnewnet(argv[3],list_propositions);
 
     MPI_Init (&argc, &argv );
     MPI_Comm_size(MPI_COMM_WORLD,&n_tasks);
@@ -152,13 +150,13 @@ int main(int argc, char** argv)
         }
         cout<<"Loading net information..."<<endl;
         ModelCheckBaseMT* mcl;
-        if (!strcmp(argv[1],"otfL")) mcl=new ModelCheckLace(R,bound,nb_th);
+        if (!strcmp(argv[1],"otfL")) mcl=new ModelCheckLace(Rnewnet,bound,nb_th);
         else 
-            mcl=new ModelCheckerTh(R,bound,nb_th);
+            mcl=new ModelCheckerTh(Rnewnet,bound,nb_th);
         mcl->loadNet();   
         
         auto k =
-            std::make_shared<SogKripkeTh>(d,mcl,R.getListTransitionAP(),R.getListPlaceAP());
+            std::make_shared<SogKripkeTh>(d,mcl,Rnewnet.getListTransitionAP(),Rnewnet.getListPlaceAP());
    /*     spot::twa_graph_ptr k =
     spot::make_twa_graph(std::make_shared<SogKripkeTh>(d,mcl,R.getListTransitionAP(),R.getListPlaceAP()),
                          spot::twa::prop_set::all(), true);*/
@@ -199,7 +197,7 @@ int main(int argc, char** argv)
     {
         cout<<"number of task = 1 \n " <<endl;
         bool uselace=(!strcmp(argv[1],"lc")) || (!strcmp(argv[1],"l"));
-        threadSOG DR(R, bound,nb_th,uselace);
+        threadSOG DR(Rnewnet, bound,nb_th,uselace);
         LDDGraph g(&DR);
 
         if (nb_th==1)
@@ -264,7 +262,7 @@ int main(int argc, char** argv)
                 //auto k = std::make_shared<SogKripke>(d,DR.getGraph(),R.getListTransitionAP(),R.getListPlaceAP());
 
                 spot::twa_graph_ptr k =
-                    spot::make_twa_graph(std::make_shared<SogKripke>(d,DR.getGraph(),R.getListTransitionAP(),R.getListPlaceAP()),spot::twa::prop_set::all(), true);
+                    spot::make_twa_graph(std::make_shared<SogKripke>(d,DR.getGraph(),Rnewnet.getListTransitionAP(),Rnewnet.getListPlaceAP()),spot::twa::prop_set::all(), true);
 
                 cout<<"SOG translated to SPOT succeeded.."<<endl;
                 cout<<"Want to save the graph in a dot file ?";
@@ -303,7 +301,7 @@ int main(int argc, char** argv)
         {
             if (task_id==0) cout<<"**************Hybrid version**************** \n" <<endl;
             if (strcmp(argv[1],"otf")) {
-                HybridSOG DR(R, bound);
+                HybridSOG DR(Rnewnet, bound);
                 LDDGraph g(&DR);
                 if (task_id==0) cout<<"Building the Distributed SOG by "<<n_tasks<<" processes..."<<endl;
                 DR.computeDSOG(g);
@@ -320,7 +318,7 @@ int main(int argc, char** argv)
                 cout<<" Task id "<<task_id<<"/"<<n_tasks<<endl;
                     if (task_id!=n_tasks)  {
                         cout<<"N task :"<<n_tasks<<endl;
-                        MCHybridSOG DR(R,gprocess, bound,false);
+                        MCHybridSOG DR(Rnewnet,gprocess, bound,false);
                         LDDGraph g(&DR);
                         DR.computeDSOG(g);                        
                     }
@@ -328,7 +326,7 @@ int main(int argc, char** argv)
                         cout<<"On the fly Model checker by process "<<task_id<<endl;
                        auto d = spot::make_bdd_dict();
                        spot::twa_graph_ptr af = spot::translator(d).run(not_f);
-                        spot::twa_graph_ptr k =spot::make_twa_graph(std::make_shared<HybridKripke>(d,R.getListTransitionAP(),R.getListPlaceAP(),R),spot::twa::prop_set::all(), true);
+                        spot::twa_graph_ptr k =spot::make_twa_graph(std::make_shared<HybridKripke>(d,Rnewnet.getListTransitionAP(),Rnewnet.getListPlaceAP(),Rnewnet),spot::twa::prop_set::all(), true);
                         cout<<"finished...."<<endl;
                         //while(1);
                      /*   auto k =
@@ -350,7 +348,7 @@ int main(int argc, char** argv)
             //cout<<" sequential version using Sylvan : 1 with BuDDy : 2 \n" <<endl;
             cout<<"*************Distibuted version******************* \n" <<endl;
             {
-                DistributedSOG DR(R, bound);
+                DistributedSOG DR(Rnewnet, bound);
                 LDDGraph g(nullptr);
                 DR.computeDSOG(g);
             }
diff --git a/src/threadSOG.cpp b/src/threadSOG.cpp
index 328b88f14b5136ae45f7391ade3eb892edc2cdf7..231b1b0fe1aa987f94c168a1a1d97137d2a2ef8b 100644
--- a/src/threadSOG.cpp
+++ b/src/threadSOG.cpp
@@ -66,7 +66,7 @@ threadSOG::threadSOG(const NewNet &R, int BOUND, int nbThread,bool uselace,bool
     m_placeName=R.m_placePosName;
 
     cout<<"Toutes les Transitions:"<<endl;
-    map<string,int>::iterator it2=m_transitionName.begin();
+    map<string,uint16_t>::iterator it2=m_transitionName.begin();
     for (;it2!=m_transitionName.end();it2++) {
         cout<<(*it2).first<<" : "<<(*it2).second<<endl;}