diff --git a/Mesh/simple3D.cpp b/Mesh/simple3D.cpp
index 838ba5fe278393b0e2a5ff0195b0c1c7b91bdb38..2e227f8ef05f3debd18b1f96f1f18a062f68bc76 100644
--- a/Mesh/simple3D.cpp
+++ b/Mesh/simple3D.cpp
@@ -56,6 +56,7 @@ class Metric{
 
 class Node{
  private:
+  int layer;
   double h;
   Metric m;
   SPoint3 point;
@@ -65,9 +66,11 @@ class Node{
   Node();
   Node(SPoint3);
   ~Node();
+  void set_layer(int);
   void set_size(double);
   void set_metric(Metric);
   void set_point(SPoint3);
+  int get_layer();
   double get_size();
   Metric get_metric();
   SPoint3 get_point();
@@ -242,6 +245,10 @@ Node::Node(SPoint3 new_point){
 
 Node::~Node(){}
 
+void Node::set_layer(int new_layer){
+  layer = new_layer;
+}
+
 void Node::set_size(double new_h){
   h = new_h;
 }
@@ -254,6 +261,10 @@ void Node::set_point(SPoint3 new_point){
   point = new_point;
 }
 
+int Node::get_layer(){
+  return layer;
+}
+
 double Node::get_size(){
   return h;
 }
@@ -350,12 +361,15 @@ void Filler::treat_region(GRegion* gr){
   MElementOctree* octree;
   deMeshGRegion deleter;
   Wrapper wrapper;
+  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*>::iterator it;
+  std::list<GFace*>::iterator it2;
   RTree<Node*,double,3,double> rtree;
   
   Frame_field::init_region(gr);
@@ -366,7 +380,20 @@ void Filler::treat_region(GRegion* gr){
   boundary_vertices.clear();
   temp.clear();
   new_vertices.clear();
-
+  faces.clear();
+
+  /*faces = gr->faces();	
+  for(it2=faces.begin();it2!=faces.end();it2++){
+    gf = *it2;
+	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);
+	  }
+	}
+  }*/
+		
   for(i=0;i<gr->getNumMeshElements();i++){
     element = gr->getMeshElement(i);
     for(j=0;j<element->getNumVertices();j++){
@@ -390,6 +417,7 @@ void Filler::treat_region(GRegion* gr){
     
     node = new Node(SPoint3(x,y,z));
     compute_parameters(node,gr);
+	node->set_layer(0);
     rtree.Insert(node->min,node->max,node);
     fifo.push(node);
     //print_node(node,file);
@@ -420,6 +448,7 @@ void Filler::treat_region(GRegion* gr){
 	  
 	  if(inside_domain(octree,x,y,z)){
 		compute_parameters(individual,gr);
+		individual->set_layer(parent->get_layer()+1);
 		if(far_from_boundary(octree,individual)){
 		  wrapper.set_ok(1);
 		  wrapper.set_individual(individual);
@@ -462,6 +491,7 @@ void Filler::treat_region(GRegion* gr){
   for(i=0;i<new_vertices.size();i++) delete new_vertices[i];
   new_vertices.clear();
   delete octree;
+  rtree.RemoveAll();
   Size_field::clear();
   Frame_field::clear();
 #endif