diff --git a/Mesh/meshGFaceExtruded.cpp b/Mesh/meshGFaceExtruded.cpp
index 27e5f3bfabef238ce16b2629765c5e63c8547a2f..a71d099025e6654b07c691aa489ead212024fb05 100644
--- a/Mesh/meshGFaceExtruded.cpp
+++ b/Mesh/meshGFaceExtruded.cpp
@@ -1,4 +1,4 @@
-// $Id: meshGFaceExtruded.cpp,v 1.7 2006-11-27 03:06:46 geuzaine Exp $
+// $Id: meshGFaceExtruded.cpp,v 1.8 2006-11-27 05:16:30 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -152,7 +152,7 @@ int MeshExtrudedSurface(GFace *gf)
 
   // build a set with all the vertices on the boundary of gf
   double old_tol = MVertexLessThanLexicographic::tolerance; 
-  MVertexLessThanLexicographic::tolerance = 1.e-6 * CTX.lc;
+  MVertexLessThanLexicographic::tolerance = 1.e-8 * CTX.lc;
   std::set<MVertex*, MVertexLessThanLexicographic> pos;
   std::list<GEdge*> edges = gf->edges();
   std::list<GEdge*>::iterator it = edges.begin();
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 499001697b45687fe2bbd8f2be29609f1dddf237..6fbc68b129e1886e616cb386bc189e029cca5ea7 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,5 +1,5 @@
 %{
-// $Id: Gmsh.y,v 1.240 2006-11-25 20:08:40 geuzaine Exp $
+// $Id: Gmsh.y,v 1.241 2006-11-27 05:16:31 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -2335,6 +2335,7 @@ ExtrudeParameters :
 ExtrudeParameter :
     tLayers '{' ListOfDouble ',' ListOfDouble ',' ListOfDouble '}' tEND
     {
+      yymsg(WARNING, "Explicit region numbers in layers are deprecated");
       double d;
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr($3);
diff --git a/doc/TODO b/doc/TODO
index a9611b42b5811ce32d54853446ad32f661e5efb0..bce6a61eca8498e8cda6be4715697de21d3abbc3 100644
--- a/doc/TODO
+++ b/doc/TODO
@@ -1,4 +1,4 @@
-$Id: TODO,v 1.25 2006-11-22 03:01:48 geuzaine Exp $
+$Id: TODO,v 1.26 2006-11-27 05:16:31 geuzaine Exp $
 
 ********************************************************************
 
@@ -185,13 +185,7 @@ The "Symmetry" operation should be renamed "Reflection" (?)
 
 ********************************************************************
 
-Attractors in the 2D aniso algo are extremely buggy
-
-********************************************************************
-
-Memory leaks, memory leaks
-
-- in the old 2D code: mesh_domain()...
+Memory leaks:
 
 - check all calls to Tree_Replace: we shouldn't use it with trees of
   pointers, since we loose the original pointer when we actually do a
diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi
index 9196ab5d06d7dde5df8dc5f11db8cb71c989c28c..f2fc70c6e5a77a759b071e476113a3723a7857fe 100644
--- a/doc/texinfo/gmsh.texi
+++ b/doc/texinfo/gmsh.texi
@@ -1,5 +1,5 @@
 \input texinfo.tex @c -*-texinfo-*-
-@c $Id: gmsh.texi,v 1.217 2006-11-27 03:22:25 geuzaine Exp $
+@c $Id: gmsh.texi,v 1.218 2006-11-27 05:16:31 geuzaine Exp $
 @c
 @c Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 @c
@@ -2023,23 +2023,16 @@ extruded and has the following syntax:
 @example
 @var{layers}:
 @group
-  Layers @{ @{ @var{expression-list} @}, < @{ @var{expression-list} @}, >
-           @{ @var{expression-list} @} @} | Recombine; @dots{}
+  Layers @{ @{ @var{expression-list} @}, @{ @var{expression-list} @} @} | 
+  Recombine; @dots{}
 @end group
 @end example
 
-The first @var{expression-list} defines how many elements should be created
-in each extruded layer. The (optional) second @var{expression-list} assigns
-a region number to each layer, which, if non-zero, overrides the elementary
-entity number of the extruded entity.  This is useful when there is more
-than one layer, as the elements in each layer can then be identified in a
-unique way.  If the region number is set to zero, or if the
-@var{expression-list} is omitted, the elements are associated with the
-automatically created elementary geometrical entity (line, surface or
-volume) created during the extrusion. The last @var{expression-list} gives
-the normalized height of each layer (the list should contain a sequence of
-@var{n} numbers 0 < @var{h1} < @var{h2} < @dots{} < @var{hn} <= 1). See
-@ref{t3.geo}, for an example.
+The first @var{expression-list} defines how many elements should be
+created in each extruded layer. The second @var{expression-list} gives
+the normalized height of each layer (the list should contain a sequence
+of @var{n} numbers 0 < @var{h1} < @var{h2} < @dots{} < @var{hn} <=
+1). See @ref{t3.geo}, for an example.
 
 For line extrusions, the @code{Recombine} option will recombine triangles
 into quadrangles when possible.  For surface extrusions, the
diff --git a/tutorial/t1.geo b/tutorial/t1.geo
index 8761b856825e7606bb483187dc189ba625483127..11a1cf01afbe79f369c59efcc1dcebfcc0bfeeda 100644
--- a/tutorial/t1.geo
+++ b/tutorial/t1.geo
@@ -3,7 +3,7 @@
  *  Gmsh tutorial 1
  * 
  *  Variables, elementary entities (points, lines, surfaces), physical
- *  entities (points, lines, surfaces), background mesh
+ *  entities (points, lines, surfaces)
  *
  *********************************************************************/
 
@@ -22,9 +22,8 @@ Point(1) = {0, 0, 0, 9.e-1 * lc};
 
 // The actual distribution of the mesh element sizes is then obtained
 // by interpolation of these characteristic lengths throughout the
-// geometry. There are also other possibilities to specify
-// characteristic lengths: attractors (see `t7.geo') and background
-// meshes (see `bgmesh.pos').
+// geometry. Another method to specify characteristic lengths is to use
+// a background mesh (see `t7.geo' and `bgmesh.pos').
 
 // As can be seen in the previous definition, more complex expressions
 // can be constructed from variables and floating point
diff --git a/tutorial/t7.geo b/tutorial/t7.geo
index 495f994ecbcef088f3bf6cb5f1c10288141fb663..a04f981bf2e55c0a2244249c1f695d784a26ddfd 100644
--- a/tutorial/t7.geo
+++ b/tutorial/t7.geo
@@ -2,49 +2,19 @@
  *
  *  Gmsh tutorial 7
  * 
- *  Anisotropic meshes, attractors
+ *  Background mesh
  *
  *********************************************************************/
 
-// The anisotropic 2D mesh generator can be selected with:
+// Characteristic lengths can be specified very accuractely by
+// providing a background mesh, i.e., a post-processing view that
+// contains the target mesh sizes.
 
-Mesh.Algorithm = 2 ;
+// Merge the first tutorial
+Merge "t1.geo";
 
-// One can force a 4 step Laplacian smoothing of the mesh with:
-
-Mesh.Smoothing = 4 ;
-
-lc = .1;
-
-Point(1) = {0.0,0.0,0,lc};
-Point(2) = {1.2,-0.2,0,lc};
-Point(3) = {1,1,0,lc};
-Point(4) = {0,1,0,lc};
-
-Line(1) = {3,2};
-Line(2) = {2,1};
-Line(3) = {1,4};
-Line(4) = {4,3};
-
-Line Loop(5) = {1,2,3,4};
-Plane Surface(6) = {5};
-
-Point(5) = {0.1,0.2,0,lc};
-Point(11) = {0.4,0.7,-1,lc};
-Point(12) = {0.5,0.5,0,lc};
-Point(22) = {0.9,0.9,1,lc};
-
-Line(5) = {11,22};
-
-Spline(7) = {4,5,12,2};
-
-// Isotropic and anisotropic attractors can be defined on points and
-// lines (this is still experimental and known to be unstable: use at
-// your own risk!):
-
-Attractor Point{1} = {0.01, 0.01, 2};
-
-Attractor Line{5} = {0.3, 0.01, 2};
-
-Attractor Line{7} = {0.1, 0.02, 8};
+// Merge a post-processing view containing the target mesh sizes
+Merge "bgmesh.pos";
 
+// Apply the view as the current background mesh
+Background Mesh View[0];