diff --git a/src/ModelCheckLace.cpp b/src/ModelCheckLace.cpp
index 7ef1b3afb9d964e0598c1b7056771272bfc10cf9..d1b984c8f81d2ddadda64ed75b568b58ffd54f48 100644
--- a/src/ModelCheckLace.cpp
+++ b/src/ModelCheckLace.cpp
@@ -18,7 +18,7 @@ print_h(double size)
     printf("%.*f %s", i, size, units[i]);
 }
 size_t
-getMaxMemory()
+getMaxMemoryTh()
 {
     long pages = sysconf(_SC_PHYS_PAGES);
     long page_size = sysconf(_SC_PAGE_SIZE);
@@ -28,7 +28,7 @@ void ModelCheckLace::preConfigure() {
     lace_init(m_nb_thread, 10000000);
     lace_startup(0, NULL, NULL);
     size_t max = 16LL<<30;
-    if (max > getMaxMemory()) max = getMaxMemory()/10*9;
+    if (max > getMaxMemoryTh()) max = getMaxMemoryTh()/10*9;
     printf("Memory : ");
     print_h(max);
     printf(" max.\n");
diff --git a/src/ModelCheckerTh.cpp b/src/ModelCheckerTh.cpp
index 05efa1e88039a21216664cbff255664ce44d234b..d6dac10c374128f59899b65b025a9da1f0dda64d 100644
--- a/src/ModelCheckerTh.cpp
+++ b/src/ModelCheckerTh.cpp
@@ -10,16 +10,25 @@ using namespace sylvan;
 ModelCheckerTh::ModelCheckerTh(const NewNet &R, int nbThread) :
 		ModelCheckBaseMT(R, nbThread) {
 }
+size_t
+getMaxMemory()
+{
+    long pages = sysconf(_SC_PHYS_PAGES);
+    long page_size = sysconf(_SC_PAGE_SIZE);
+    return pages * page_size;
+}
 void ModelCheckerTh::preConfigure() {
 
 	lace_init(1, 0);
 	lace_startup(0, NULL, NULL);
+	size_t max = 16LL<<30;
+	if (max > getMaxMemory()) max = getMaxMemory()/10*9;
+	sylvan_set_limits(max, 8, 0);
 
-	sylvan_set_limits(2LL << 30, 16, 3);
 	sylvan_init_package();
 	sylvan_init_ldd();
+	displayMDDTableInfo();
 
-	int i;
 	vector<Place>::const_iterator it_places;
 
 	init_gc_seq();
@@ -39,6 +48,7 @@ void ModelCheckerTh::preConfigure() {
 	cout << "Derniere place : " << m_net->places[m_nbPlaces - 1].name << endl;
 
 	uint32_t *liste_marques = new uint32_t[m_net->places.size()];
+	uint32_t i;
 	for (i = 0, it_places = m_net->places.begin(); it_places != m_net->places.end(); i++, it_places++) {
 		liste_marques[i] = it_places->marking;
 	}
@@ -114,17 +124,15 @@ void* ModelCheckerTh::Compute_successors() {
 
 	if (id_thread == 0) {
 		LDDState *c = new LDDState;
-
 		MDD Complete_meta_state(Accessible_epsilon(m_initialMarking));
 		ldd_refs_push(Complete_meta_state);
 		MDD canonised_initial = Complete_meta_state;            //Canonize(Complete_meta_state,0);
 		/*ldd_refs_push(canonised_initial);*/
 		fire = firable_obs(Complete_meta_state);
 		c->m_lddstate = canonised_initial;
-		c->setDeadLock(false);//Set_Bloc(Complete_meta_state));
-		c->setDiv(false);//Set_Div(Complete_meta_state));
+		c->setDeadLock(Set_Bloc(Complete_meta_state));
+		c->setDiv(Set_Div(Complete_meta_state));
 		m_st[0].push(Pair(couple(c, Complete_meta_state), fire));
-
 		m_graph->setInitialState(c);
 		m_graph->insert(c);
 		m_charge[0] = 1;
@@ -188,8 +196,8 @@ void* ModelCheckerTh::Compute_successors() {
 
 					m_graph->addArc();
 					m_graph->insert(reached_class);
-					reached_class->setDiv(false);//Set_Div(Complete_meta_state));
-					reached_class->setDeadLock(false);//Set_Bloc(Complete_meta_state));
+					reached_class->setDiv(Set_Div(Complete_meta_state));
+					reached_class->setDeadLock(Set_Bloc(Complete_meta_state));
 					pthread_mutex_unlock(&m_graph_mutex);
 
 					e.first.first->Successors.insert(e.first.first->Successors.begin(), LDDEdge(reached_class, t));
@@ -210,7 +218,6 @@ void* ModelCheckerTh::Compute_successors() {
 					e.first.first->Successors.insert(e.first.first->Successors.begin(), LDDEdge(pos, t));
 					pos->Predecessors.insert(pos->Predecessors.begin(), LDDEdge(e.first.first, t));
 					delete reached_class;
-
 				}
 				if (id_thread) {
 					pthread_mutex_lock(&m_supervise_gc_mutex);