diff --git a/Mesh/meshGFaceRecombine.cpp b/Mesh/meshGFaceRecombine.cpp
index 35e706ae9582df3718b491eb42c724cae6b1e9b2..955ab5ed2dd275805d88ff0ea32ad5ebdb41f013 100644
--- a/Mesh/meshGFaceRecombine.cpp
+++ b/Mesh/meshGFaceRecombine.cpp
@@ -95,7 +95,7 @@ Recombine2D::Recombine2D(GFace *gf) : _gf(gf)
       }
       for (int j = 0; j < 3; ++j) {
         Rec2DEdge *re;
-        if ( (re = Rec2DVertex::getCommonEdge(rv[j], rv[(j+1)%3])) == NULL)
+        if ( !(re = Rec2DVertex::getCommonEdge(rv[j], rv[(j+1)%3])) )
           re = new Rec2DEdge(rv[j], rv[(j+1)%3]);
         rel->add(re); //up data
       }
@@ -124,7 +124,7 @@ Recombine2D::Recombine2D(GFace *gf) : _gf(gf)
       }
       for (int j = 0; j < 4; ++j) {
         Rec2DEdge *re;
-        if ( (re = Rec2DVertex::getCommonEdge(rv[i], rv[(i+1)%3])) == NULL) {
+        if ( !(re = Rec2DVertex::getCommonEdge(rv[i], rv[(i+1)%3])) ) {
           re = new Rec2DEdge(rv[i], rv[(i+1)%3]);
           rv[i]->add(re);
           rv[(i+1)%3]->add(re);
@@ -209,6 +209,8 @@ bool Recombine2D::recombine()
     if (!_remainAllQuad(nextAction)) {
       nextAction->color(190, 0, 0);
       delete nextAction;
+      while (Cpu()-time < REC2D_WAIT_TIME)
+        FlGui::instance()->check();
       continue;
     }
     ++_numChange;
@@ -335,7 +337,7 @@ bool Recombine2D::_remainAllQuad(Rec2DAction *action)
   int p[4];
   action->getAssumedParities(p);
   
-  if (p[0] && !p[1] && !p[2] && !p[3]) {
+  if (!p[0] && !p[1] && !p[2] && !p[3]) {
     static int a = -1;
     if (++a < 1) Msg::Warning("FIXME isoleted should be check ? Think not");
     return true;
@@ -853,9 +855,7 @@ void Rec2DData::drawEndNode(int num)
     Rec2DNode *currentNode = _current->_endNodes[i];
     Msg::Info("%d -> %g", i+1, currentNode->getGlobVal());
     while (currentNode && currentNode->getAction()) {
-      /*Msg::Info("%d",currentNode);
-      Msg::Info("%d",currentNode->getAction());
-      Msg::Info(" ",currentNode);*/
+      Msg::Info("%g", currentNode->getGlobVal());
       data[currentNode->getNum()].push_back(currentNode->getGlobVal());
       currentNode = currentNode->getFather();
     }
@@ -877,6 +877,11 @@ bool lessRec2DAction::operator()(Rec2DAction *ra1, Rec2DAction *ra2) const
   return *ra1 < *ra2;
 }
 
+Rec2DAction::Rec2DAction()
+: _lastUpdate(Recombine2D::getNumChange()-1), _globValIfExecuted(.0)
+{
+}
+
 bool Rec2DAction::operator<(Rec2DAction &other)
 {
   return getReward() < other.getReward(); 
@@ -1271,6 +1276,8 @@ Rec2DVertex::Rec2DVertex(MVertex *v, bool toSave)
     Rec2DData::add(this);
     Rec2DData::addVert(1, getQual());
   }
+  if (_v)
+    _v->setIndex(_parity);
 }
 
 Rec2DVertex::Rec2DVertex(Rec2DVertex *rv, double ang)
@@ -1286,6 +1293,8 @@ Rec2DVertex::Rec2DVertex(Rec2DVertex *rv, double ang)
   Rec2DData::add(this);
   Rec2DData::addVert(1, getQual());
   delete rv;
+  if (_v)
+    _v->setIndex(_parity);
 }
 
 Rec2DVertex::~Rec2DVertex()
@@ -1333,7 +1342,7 @@ Rec2DEdge* Rec2DVertex::getCommonEdge(Rec2DVertex *rv0, Rec2DVertex *rv1)
     if (rv1->has(rv0->_edges[i]))
       return rv0->_edges[i];
   }
-  Msg::Warning("[Rec2DVertex] didn't find edge, returning NULL");
+  //Msg::Warning("[Rec2DVertex] didn't find edge, returning NULL");
   return NULL;
 }
 
@@ -1420,6 +1429,8 @@ void Rec2DVertex::setParity(int p, bool tree)
     _assumedParity = 0;
   }
   Rec2DData::addParity(this, _parity);
+  if (_v)
+    _v->setIndex(_parity);
 }
 
 void Rec2DVertex::setParityWD(int pOld, int pNew)
@@ -1434,6 +1445,8 @@ void Rec2DVertex::setParityWD(int pOld, int pNew)
     Rec2DData::removeAssumedParity(this, _assumedParity);
     _assumedParity = 0;
   }
+  if (_v)
+    _v->setIndex(_parity);
 }
 
 int Rec2DVertex::getAssumedParity() const
@@ -1460,6 +1473,8 @@ bool Rec2DVertex::setAssumedParity(int p)
   }
   _assumedParity = p;
   Rec2DData::addAssumedParity(this, _assumedParity);
+  if (_v)
+    _v->setIndex(_assumedParity);
   return true;
 }
 
diff --git a/Mesh/meshGFaceRecombine.h b/Mesh/meshGFaceRecombine.h
index 66cf4fcc9a32409741a8487c6ddc57bc710c7345..4c3736d0d11da2f92b9fdab2545e3aadf97a7147 100644
--- a/Mesh/meshGFaceRecombine.h
+++ b/Mesh/meshGFaceRecombine.h
@@ -184,6 +184,7 @@ class Rec2DAction {
     int _lastUpdate;
     
   public :
+    Rec2DAction();
     virtual inline ~Rec2DAction() {Rec2DData::remove(this);}
     
     bool operator<(Rec2DAction&);
@@ -197,7 +198,7 @@ class Rec2DAction {
     virtual Rec2DVertex* getVertex(int) = 0;
     virtual void choose(Rec2DElement*&) = 0;
     virtual void unChoose(Rec2DElement*) = 0;
-    virtual inline int getNumElement() = 0;
+    virtual int getNumElement() = 0;
     virtual void getElements(std::vector<Rec2DElement*>&) = 0;
     virtual int getNum() = 0;