diff --git a/Geo/Makefile b/Geo/Makefile
index 6493635d17cb65aeacd2195ae81f2327c007aef1..a931e979f4506d98e6d7a725e0c03d7ee4a973c3 100644
--- a/Geo/Makefile
+++ b/Geo/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.51 2004-05-29 10:11:12 geuzaine Exp $
+# $Id: Makefile,v 1.52 2004-06-30 21:15:58 geuzaine Exp $
 #
 # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 #
@@ -87,7 +87,8 @@ GeoUtils.o: GeoUtils.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/avl.h ../DataStr/Tools.h Geo.h CAD.h ../Mesh/Mesh.h \
   ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \
   ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \
-  ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h
+  ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \
+  ../Numeric/Numeric.h
 StepGeomDatabase.o: StepGeomDatabase.cpp ../Common/Gmsh.h \
   ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \
   ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
@@ -101,7 +102,8 @@ ExtractContour.o: ExtractContour.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/avl.h ../DataStr/Tools.h Geo.h GeoUtils.h ../Mesh/Mesh.h \
   ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \
   ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \
-  ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h CAD.h
+  ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h CAD.h \
+  ../Numeric/Numeric.h
 Print_Geo.o: Print_Geo.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h Geo.h ../Mesh/Mesh.h \
diff --git a/Mesh/Makefile b/Mesh/Makefile
index adae4675c74febbb651a4e68dca8a3e2f907052c..c4699846570ac5933c32061284cf614584ec6850 100644
--- a/Mesh/Makefile
+++ b/Mesh/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.68 2004-06-28 19:00:22 geuzaine Exp $
+# $Id: Makefile,v 1.69 2004-06-30 21:15:58 geuzaine Exp $
 #
 # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 #
@@ -247,7 +247,7 @@ depend:
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h Mesh.h Vertex.h Element.h Simplex.h \
   Face.h Edge.h ../Geo/ExtrudeParams.h STL.h ../Common/VertexArray.h \
-  Metric.h Matrix.h ../Numeric/Numeric.h ../Common/Context.h
+  Metric.h Matrix.h Create.h ../Numeric/Numeric.h ../Common/Context.h
 MeshQuality.o: MeshQuality.cpp ../Common/Gmsh.h ../Common/Message.h \
   ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \
diff --git a/Netgen/Makefile b/Netgen/Makefile
index 6865e6275beee4321983d765185a1a28c7d60c31..fdc9b914952428ff86d298185974afdfcc0fb259 100644
--- a/Netgen/Makefile
+++ b/Netgen/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.3 2004-06-30 16:38:58 geuzaine Exp $
+# $Id: Makefile,v 1.4 2004-06-30 21:15:58 geuzaine Exp $
 #
 # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 #
@@ -2958,4 +2958,4 @@ nglib_addon.o: nglib_addon.cpp libsrc/include/meshing.hpp \
   libsrc/meshing/bisect.hpp libsrc/meshing/clusters.hpp \
   libsrc/meshing/meshfunc.hpp libsrc/meshing/hprefinement.hpp \
   libsrc/meshing/boundarylayer.hpp libsrc/meshing/specials.hpp \
-  libsrc/interface/nglib.h
+  libsrc/interface/nglib.h ../Common/Message.h
diff --git a/doc/FAQ b/doc/FAQ
index 1ccba56da014a1767527a82b50fb8291632a7723..c508676498a74a7a0d2ee68fe2b546780bc6f63e 100644
--- a/doc/FAQ
+++ b/doc/FAQ
@@ -1,4 +1,4 @@
-$Id: FAQ,v 1.37 2004-05-29 10:11:12 geuzaine Exp $
+$Id: FAQ,v 1.38 2004-06-30 21:15:58 geuzaine Exp $
 
 This is the Gmsh FAQ
 
@@ -148,10 +148,12 @@ The 3D algorithm is still very experimental. Try to change some
 characteristic lengths in your input file to generate meshes that
 better suit the geometrical details of your structure.
 
-* 5.4 I changed the characteristic lengths, but the 3D algorithm still does
-not work. What should I do?
+* 5.4 I changed the characteristic lengths, but the 3D algorithm still
+does not work. What should I do?
 
-Buy a professional mesh generator ;-)
+Buy a professional mesh generator ;-) You can also try to use Netgen
+instead of the default algorithm for the 3D mesh. Note that all
+surface meshes have to be oriented with exterior normals in this case.
 
 * 5.5 The 3D algorithm is reaaaaally slow. Can you improve it?
 
@@ -159,12 +161,14 @@ We are working on it. But since we have a (very) limited amount of
 time to spend on the development of Gmsh, this may take a while. For
 very big meshes, see the answer to the previous question...
 
-* 5.6 The quality of the elements generated by the 3D algorithm is very bad.
+* 5.6 The quality of the elements generated by the 3D algorithm is
+very bad.
 
-Yes, this is normal(!). At the time of this writing (March 2003), we
-do not post-process the 3D Delaunay mesh, so that some (typically 0.1
-to 0.5%) badly shaped tetrahedra will likely subsist in any
-unstructured 3D mesh. This will be fixed in the future.
+Upgrade to Gmsh >= 1.54 and use "Optimize quality". If badly shaped
+elements still exist due to the surface recovery step, you can try to
+use Netgen instead of the default algorithm for the 3D mesh. Note that
+all surface meshes have to be oriented with exterior normals in this
+case.
 
 * 5.7 Non-recombined 3D extruded meshes sometimes fail.
 
@@ -174,10 +178,12 @@ hexahedra.
 
 * 5.8 Tools->Visibility does not seem to work with extruded meshes.
 
-This a known problem (due to the fact that numbers are explicitly
-assigned to mesh entities in the extrude commands, which destroys
-the geometry/mesh relationship). The only solution at the moment is
-to save the mesh, and to read it again. 
+This is partially fixed in Gmsh >= 1.54. Since numbers are explicitly
+assigned to mesh entities in the extrude commands (which partially
+destroys the geometry/mesh relationship), the Visibility tool will
+only work as expected when displaying Elementary entities. To
+visualize extruded Physical entities, the only solution is to save the
+mesh, and to read it again.
 
 ********************************************************************
 
diff --git a/doc/gmsh.html b/doc/gmsh.html
index 8a1b87f8b38e94bc996f7f92ce6575880e3460d7..b013cb5ab21657bdc20460b728e0e9f307a9341f 100644
--- a/doc/gmsh.html
+++ b/doc/gmsh.html
@@ -255,16 +255,13 @@ The mesh database that will be used by Gmsh in the future has its
 own webpage: take a look at <a href="http://www.scorec.rpi.edu/AOMD/">AOMD,
 the Algorithm Oriented Mesh Database</a>.
 
-<p>
-Gmsh integrates Joachim Sch&ouml;berl's
-<a href="http://www.hpfem.jku.at/netgen">Netgen</a> as an alternative
-3D mesh generator and 3D mesh optimizer.
-
 <p>
 Gmsh can use Jonathan Shewchuk's <a
-href="http://www-2.cs.cmu.edu/~quake/triangle.html">Triangle</a> as an
-alternative isotropic 2D mesh generator. You can download Triangle <a
-href="http://www.cs.berkeley.edu/~jrs/triangle.shar.gz">here</a>.
+href="http://www-2.cs.cmu.edu/~quake/triangle.html">Triangle</a> (<a
+href="http://www.cs.berkeley.edu/~jrs/triangle.shar.gz">download</a>)
+as an alternative 2D mesh generator and Joachim Sch&ouml;berl's
+<a href="http://www.hpfem.jku.at/netgen">Netgen</a> as an alternative
+3D mesh generator/optimizer.
 
 <p>
 Gmsh's high quality vector PostScript and PDF output is produced by <a
diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi
index 2bf52ca8306c54e97243faeeb5a4ba38dd76ce2d..818b7159c89879b845d0210cbb78395bad202608 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.121 2004-06-28 00:56:07 geuzaine Exp $
+@c $Id: gmsh.texi,v 1.122 2004-06-30 21:15:58 geuzaine Exp $
 @c
 @c Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 @c
@@ -37,8 +37,8 @@
 @c =========================================================================
 @c %**start of header
 @setfilename        gmsh.info
-@set EDITION        1.22
-@set GMSH-VERSION   1.53
+@set EDITION        1.23
+@set GMSH-VERSION   1.54
 @set GMSH-WEB       @uref{http://www.geuz.org/gmsh/}
 @set COPYRIGHT      @copyright{} 1997-2004 Christophe Geuzaine, Jean-Fran@,{c}ois Remacle
 @c
@@ -510,9 +510,6 @@ transfinite or extruded meshes;
 Gmsh is not a multi-bloc generator: all meshes produced by Gmsh are
 conforming in the sense of finite element meshes;
 @item
-the user has no control over the quality of the mesh elements generated by
-the 3D unstructured algorithm;
-@item
 the 2D anisotropic and the 3D unstructured algorithms are still experimental
 and not very robust.  If these algorithms fail, try to change some
 characteristic lengths to generate meshes that better suit the geometrical