diff --git a/Mesh/simple3D.cpp b/Mesh/simple3D.cpp
index e729a105101d391bbb018ce213b65689118769d4..97dde8d8745983026b6aeb1d183cd2b74c7c8b29 100644
--- a/Mesh/simple3D.cpp
+++ b/Mesh/simple3D.cpp
@@ -17,6 +17,8 @@
 #include <algorithm>
 #include "directions3D.h"
 #include "Context.h"
+#include <iostream>
+#include <string>
 
 #if defined(HAVE_RTREE)
 #include "rtree.h"
@@ -353,6 +355,7 @@ void Filler::treat_region(GRegion* gr){
   int j;
   int count;
   bool ok2;
+  bool val;
   double x,y,z;
   SPoint3 point;
   Node *node,*individual,*parent;
@@ -361,13 +364,14 @@ void Filler::treat_region(GRegion* gr){
   MElementOctree* octree;
   deMeshGRegion deleter;
   Wrapper wrapper;
-  //GFace* gf;
+  GFace* gf;
   std::queue<Node*> fifo;
   std::vector<Node*> spawns;
   std::vector<Node*> garbage;
   std::vector<MVertex*> boundary_vertices;
   std::set<MVertex*> temp;
   std::list<GFace*> faces;
+  std::set<MVertex*> retired;
   std::set<MVertex*>::iterator it;
   std::list<GFace*>::iterator it2;
   RTree<Node*,double,3,double> rtree;
@@ -381,18 +385,23 @@ void Filler::treat_region(GRegion* gr){
   temp.clear();
   new_vertices.clear();
   faces.clear();
+  retired.clear();
 
-  /*faces = gr->faces();	
+  faces = gr->faces();	
   for(it2=faces.begin();it2!=faces.end();it2++){
     gf = *it2;
+	val = code(gf->tag());
 	for(i=0;i<gf->getNumMeshElements();i++){
 	  element = gf->getMeshElement(i);
       for(j=0;j<element->getNumVertices();j++){
 	    vertex = element->getVertex(j);
-		temp.insert(vertex);
+		if(val){
+		  retired.insert(vertex);
+		}
+		//temp.insert(vertex);
 	  }
 	}
-  }*/
+  }
 		
   for(i=0;i<gr->getNumMeshElements();i++){
     element = gr->getMeshElement(i);
@@ -419,7 +428,9 @@ void Filler::treat_region(GRegion* gr){
     compute_parameters(node,gr);
 	node->set_layer(0);
     rtree.Insert(node->min,node->max,node);
-    fifo.push(node);
+	if(retired.find(boundary_vertices[i])==retired.end()){
+      fifo.push(node);
+	}
     //print_node(node,file);
   }
   
@@ -716,6 +727,24 @@ double Filler::improvement(GEntity* ge,MElementOctree* octree,SPoint3 point,doub
   return average;
 }
 
+bool Filler::code(int x){
+  bool val;
+  std::string s;
+  std::stringstream s2;
+  
+  val = 0;
+  s2 << x;
+  s = s2.str();
+	
+  if(s.length()>=5){
+    if(s.at(0)=='1' && s.at(1)=='2' && s.at(2)=='3' && s.at(3)=='4' && s.at(4)=='5'){
+	  val = 1;
+	}
+  }
+  
+  return val;
+}
+
 int Filler::get_nbr_new_vertices(){
   return new_vertices.size();
 }
diff --git a/Mesh/simple3D.h b/Mesh/simple3D.h
index 6fd3f060105caadd728d9cbabd609b47d25f1be5..0e75010f9653958664464a2273e06319d9d24ea2 100644
--- a/Mesh/simple3D.h
+++ b/Mesh/simple3D.h
@@ -26,6 +26,7 @@ class Filler{
   void compute_parameters(Node*,GEntity*);
   void create_spawns(GEntity*,MElementOctree*,Node*,std::vector<Node*>&);
   double improvement(GEntity*,MElementOctree*,SPoint3,double,SVector3);
+  bool code(int);
   void print_segment(SPoint3,SPoint3,std::ofstream&);
   void print_node(Node*,std::ofstream&);
  public: