diff --git a/Mesh/meshRecombine2D.h b/Mesh/meshRecombine2D.h
index 4199a5eea182676f3e454a573f7e77aeacedd405..5c624db8e584fd81aa8e4f3c8c1fd470b2bab031 100644
--- a/Mesh/meshRecombine2D.h
+++ b/Mesh/meshRecombine2D.h
@@ -180,9 +180,17 @@ class TrianglesUnion {
       _NumVert -= _numEmbVert;
       for (int i = 0; i < _numBoundVert; i++) {
         _ValVert += _vertices[i]->getReward(-1);
+        _vertices[i]->changeNumEl(-1);
       }
       _RECOMPUTE++;
     }
     MQuadrangle *createQuad() const;
+    void print() {
+      Msg::Info("Printing TU (%d,%d,%d,%d)", _numEmbVert, _numBoundVert, _numEmbEdge, _numTri);
+      for (int i = 0; i < _numTri; i++)
+        Msg::Info("Triangle %d", _triangles[i]->getNum());
+    }
+    static inline void addRec() {_RECOMPUTE++;}
+    inline double getReturn() {return _globValIfExecuted;}
 };
 #endif
diff --git a/Mesh/meshRecombine2D_2.cpp b/Mesh/meshRecombine2D_2.cpp
index 270fd8af9f18c61c31db515e0cd5ebee519f176f..1543764f200ee781e8a56af7255e7ec5ff81d01c 100644
--- a/Mesh/meshRecombine2D_2.cpp
+++ b/Mesh/meshRecombine2D_2.cpp
@@ -148,6 +148,7 @@ Recombine2D::Recombine2D(GFace *gf)
     else
       ;//Msg::Info("[bord] %d", (*itedge).second.size());
   }
+  TrianglesUnion::addRec();
   _setQuads.sort(lessTriUnion());
   
   _recombine(true);
@@ -156,11 +157,25 @@ Recombine2D::Recombine2D(GFace *gf)
 
 
 void Recombine2D::_recombine(bool a)
-{ 
+{
+  SetBoundingBox();
+  
   int i = 0;
-  while (!_setQuads.empty()) {
+  while (!_setQuads.empty() && i < 1000) {
     std::list<TrianglesUnion*>::iterator it = _setQuads.begin();
-    
+        Msg::Info("------------------ %d", _setQuads.size());
+    {
+      Msg::Info("Expected return %lf", (*it)->getReturn());
+      _applied = false;
+      apply();
+      _applied = false;
+      CTX::instance()->mesh.changed = (ENT_ALL);
+      //drawContext::global()->draw();
+      //FlGui::instance()->check();
+      drawContext::global()->draw();
+      //if (!Msg::GetAnswer("Continue ?", 1, "no", "yes"))
+      //  Msg::Info("I continue anyway :p");
+    }   
     (*it)->select();
     
     _quads.push_back((*it)->createQuad());
@@ -239,10 +254,14 @@ int Recombine2D::apply(bool a)
   
   std::vector<MTriangle*> triangles2;
   for (int i = 0; i < _gf->triangles.size(); i++) {
-    delete _gf->triangles[i];
+    if (_isolated.find(_gf->triangles[i]) != _isolated.end())
+      delete _gf->triangles[i];
+    else
+      triangles2.push_back(_gf->triangles[i]);
   }
   _gf->triangles = triangles2;
   _gf->quadrangles = _quads;
+  _isolated.clear();
   
   _applied = true;
   return 1;
@@ -262,8 +281,12 @@ void Recombine2D::_removeImpossible(std::list<TrianglesUnion*>::iterator it)
       if (touched.find((*it)->getTriangle(i)) != touched.end())
         b = true;
     }
-    if (b)
+    if (b) {
+      for (int i = 0; i < (*it)->getNumTriangles(); i++) {
+        _isolated.insert((*it)->getTriangle(i));
+      }
       _setQuads.erase(it++);
+    }
     else
       it++;
   }
@@ -455,8 +478,7 @@ TrianglesUnion::TrianglesUnion(GFace *gf,
   for (_numEmbVert = 0; itv != v.end(); itv++, _numEmbVert++)
     _embVertValue += (*itv)->getReward();
   
-  _computation = _RECOMPUTE - 1;
-  _update();
+  _computation = _RECOMPUTE;
 }
 
 
@@ -514,6 +536,7 @@ void TrianglesUnion::_update()
 {
   if (_computation >= _RECOMPUTE)
     return;
+  double r = _globValIfExecuted;
   double alpha = _ValVert - _embVertValue;
   for (int i = 0; i < _numBoundVert; i++) {
     alpha += _vertices[i]->getReward(-1);