diff --git a/Geo/MElementCut.cpp b/Geo/MElementCut.cpp
index dcb86464efbcaa94fc06f8c25bcca61586ff13fe..39f17442e718423d53815ec2f5f81ac5e017f2d5 100644
--- a/Geo/MElementCut.cpp
+++ b/Geo/MElementCut.cpp
@@ -1197,11 +1197,13 @@ GModel *buildCutMesh(GModel *gm, gLevelset *ls,
   std::vector<DI_Hexa *> hexas;
   std::vector<const gLevelset *> RPN;
   ls->getRPN(RPN);
+  std::vector<int> lsLineRegs;
   for(unsigned int i = 0; i < gmEntities.size(); i++) {
     std::vector<int> oldLineRegs;
     for (std::map<int, std::vector<MElement*> >::iterator it = elements[1].begin();
          it != elements[1].end(); it++)
       oldLineRegs.push_back(it->first);
+    int nbBorders = borders[0].size();
     for(unsigned int j = 0; j < gmEntities[i]->getNumMeshElements(); j++) {
       MElement *e = gmEntities[i]->getMeshElement(j);
       e->setVolumePositive();
@@ -1212,18 +1214,17 @@ GModel *buildCutMesh(GModel *gm, gLevelset *ls,
     }
 
     // Create elementary and physical for non connected border lines
-    if(triangles.size() && lines.size()){
-      std::vector<int> newLineRegs;
+    if(borders[0].size() > nbBorders && gmEntities[i]->dim() == 2){
       int k = 0;
       for (std::map<int, std::vector<MElement*> >::iterator it = elements[1].begin();
            it != elements[1].end(); it++){
         if(oldLineRegs.size() && it->first == oldLineRegs[k])
           k++;
         else
-          newLineRegs.push_back(it->first);
+          lsLineRegs.push_back(it->first);
       }
-      for(unsigned int j = 0; j < newLineRegs.size(); j++){
-        int nLR = newLineRegs[j];
+      for(unsigned int j = 0; j < lsLineRegs.size(); j++){
+        int nLR = lsLineRegs[j];
         while(1){
           std::vector<MElement*> conLines; 
           conLines.push_back(elements[1][nLR][0]);