diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index a25ff7b81ff13a3dcf7d0da2d69b4dfdbc23a5a1..4db3fe1b5cd8c0b2b1d03b4589b0d55822c16107 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.306 2004-05-25 04:10:03 geuzaine Exp $
+// $Id: GUI.cpp,v 1.307 2004-05-27 06:23:48 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -3059,11 +3059,11 @@ void GUI::create_geometry_context_window(int num)
     {
       g[2] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Translation");
       context_geometry_input[6] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X component");
-      context_geometry_input[6]->value("1.0");
+      context_geometry_input[6]->value("0.0");
       context_geometry_input[7] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y component");
       context_geometry_input[7]->value("0.0");
       context_geometry_input[8] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z component");
-      context_geometry_input[8]->value("0.0");
+      context_geometry_input[8]->value("1.0");
       for(i = 6; i < 9; i++) {
         context_geometry_input[i]->align(FL_ALIGN_RIGHT);
       }
diff --git a/Graphics/Mesh.cpp b/Graphics/Mesh.cpp
index 1b41fee5460ba4a65a94276e0637ad143cc96119..0c91c78655331cba6760cd454287323edfbe4f43 100644
--- a/Graphics/Mesh.cpp
+++ b/Graphics/Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Mesh.cpp,v 1.85 2004-05-26 23:53:37 geuzaine Exp $
+// $Id: Mesh.cpp,v 1.86 2004-05-27 06:23:48 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -1010,35 +1010,23 @@ void Draw_Mesh_Hexahedron(void *a, void *b)
     gl2psEnable(GL2PS_LINE_STIPPLE);
     glBegin(GL_LINES);
     glVertex3d(Xc, Yc, Zc);
-    glVertex3d
-      ((h->V[0]->Pos.X + h->V[1]->Pos.X + h->V[5]->Pos.X + h->V[4]->Pos.X) / 4.,
-       (h->V[0]->Pos.Y + h->V[1]->Pos.Y + h->V[5]->Pos.Y + h->V[4]->Pos.Y) / 4.,
-       (h->V[0]->Pos.Z + h->V[1]->Pos.Z + h->V[5]->Pos.Z + h->V[4]->Pos.Z) / 4.);
+    glVertex3d((X[0] + X[1] + X[5] + X[4]) / 4., (Y[0] + Y[1] + Y[5] + Y[4]) / 4.,
+	       (Z[0] + Z[1] + Z[5] + Z[4]) / 4.);
     glVertex3d(Xc, Yc, Zc);
-    glVertex3d
-      ((h->V[0]->Pos.X + h->V[3]->Pos.X + h->V[2]->Pos.X + h->V[1]->Pos.X) / 4.,
-       (h->V[0]->Pos.Y + h->V[3]->Pos.Y + h->V[2]->Pos.Y + h->V[1]->Pos.Y) / 4.,
-       (h->V[0]->Pos.Z + h->V[3]->Pos.Z + h->V[2]->Pos.Z + h->V[1]->Pos.Z) / 4.);
+    glVertex3d((X[0] + X[3] + X[2] + X[1]) / 4., (Y[0] + Y[3] + Y[2] + Y[1]) / 4.,
+	       (Z[0] + Z[3] + Z[2] + Z[1]) / 4.);
     glVertex3d(Xc, Yc, Zc);
-    glVertex3d
-      ((h->V[0]->Pos.X + h->V[4]->Pos.X + h->V[7]->Pos.X + h->V[3]->Pos.X) / 4.,
-       (h->V[0]->Pos.Y + h->V[4]->Pos.Y + h->V[7]->Pos.Y + h->V[3]->Pos.Y) / 4.,
-       (h->V[0]->Pos.Z + h->V[4]->Pos.Z + h->V[7]->Pos.Z + h->V[3]->Pos.Z) / 4.);
+    glVertex3d((X[0] + X[4] + X[7] + X[3]) / 4., (Y[0] + Y[4] + Y[7] + Y[3]) / 4.,
+	       (Z[0] + Z[4] + Z[7] + Z[3]) / 4.);
     glVertex3d(Xc, Yc, Zc);
-    glVertex3d
-      ((h->V[1]->Pos.X + h->V[2]->Pos.X + h->V[6]->Pos.X + h->V[5]->Pos.X) / 4.,
-       (h->V[1]->Pos.Y + h->V[2]->Pos.Y + h->V[6]->Pos.Y + h->V[5]->Pos.Y) / 4.,
-       (h->V[1]->Pos.Z + h->V[2]->Pos.Z + h->V[6]->Pos.Z + h->V[5]->Pos.Z) / 4.);
+    glVertex3d((X[1] + X[2] + X[6] + X[5]) / 4., (Y[1] + Y[2] + Y[6] + Y[5]) / 4.,
+	       (Z[1] + Z[2] + Z[6] + Z[5]) / 4.);
     glVertex3d(Xc, Yc, Zc);
-    glVertex3d
-      ((h->V[2]->Pos.X + h->V[3]->Pos.X + h->V[7]->Pos.X + h->V[6]->Pos.X) / 4.,
-       (h->V[2]->Pos.Y + h->V[3]->Pos.Y + h->V[7]->Pos.Y + h->V[6]->Pos.Y) / 4.,
-       (h->V[2]->Pos.Z + h->V[3]->Pos.Z + h->V[7]->Pos.Z + h->V[6]->Pos.Z) / 4.);
+    glVertex3d((X[2] + X[3] + X[7] + X[6]) / 4., (Y[2] + Y[3] + Y[7] + Y[6]) / 4.,
+	       (Z[2] + Z[3] + Z[7] + Z[6]) / 4.);
     glVertex3d(Xc, Yc, Zc);
-    glVertex3d
-      ((h->V[4]->Pos.X + h->V[5]->Pos.X + h->V[6]->Pos.X + h->V[7]->Pos.X) / 4.,
-       (h->V[4]->Pos.Y + h->V[5]->Pos.Y + h->V[6]->Pos.Y + h->V[7]->Pos.Y) / 4.,
-       (h->V[4]->Pos.Z + h->V[5]->Pos.Z + h->V[6]->Pos.Z + h->V[7]->Pos.Z) / 4.);
+    glVertex3d((X[4] + X[5] + X[6] + X[7]) / 4., (Y[4] + Y[5] + Y[6] + Y[7]) / 4.,
+	       (Z[4] + Z[5] + Z[6] + Z[7]) / 4.);
     glEnd();
     glDisable(GL_LINE_STIPPLE);
     gl2psDisable(GL2PS_LINE_STIPPLE);
@@ -1182,30 +1170,20 @@ void Draw_Mesh_Prism(void *a, void *b)
     gl2psEnable(GL2PS_LINE_STIPPLE);
     glBegin(GL_LINES);
     glVertex3d(Xc, Yc, Zc);
-    glVertex3d
-      ((p->V[0]->Pos.X + p->V[2]->Pos.X + p->V[1]->Pos.X) / 3.,
-       (p->V[0]->Pos.Y + p->V[2]->Pos.Y + p->V[1]->Pos.Y) / 3.,
-       (p->V[0]->Pos.Z + p->V[2]->Pos.Z + p->V[1]->Pos.Z) / 3.);
+    glVertex3d((X[0] + X[2] + X[1]) / 3., (Y[0] + Y[2] + Y[1]) / 3.,
+	       (Z[0] + Z[2] + Z[1]) / 3.);
     glVertex3d(Xc, Yc, Zc);
-    glVertex3d
-      ((p->V[3]->Pos.X + p->V[4]->Pos.X + p->V[5]->Pos.X) / 3.,
-       (p->V[3]->Pos.Y + p->V[4]->Pos.Y + p->V[5]->Pos.Y) / 3.,
-       (p->V[3]->Pos.Z + p->V[4]->Pos.Z + p->V[5]->Pos.Z) / 3.);
+    glVertex3d((X[3] + X[4] + X[5]) / 3., (Y[3] + Y[4] + Y[5]) / 3.,
+	       (Z[3] + Z[4] + Z[5]) / 3.);
     glVertex3d(Xc, Yc, Zc);
-    glVertex3d
-      ((p->V[0]->Pos.X + p->V[1]->Pos.X + p->V[4]->Pos.X + p->V[3]->Pos.X) / 4.,
-       (p->V[0]->Pos.Y + p->V[1]->Pos.Y + p->V[4]->Pos.Y + p->V[3]->Pos.Y) / 4.,
-       (p->V[0]->Pos.Z + p->V[1]->Pos.Z + p->V[4]->Pos.Z + p->V[3]->Pos.Z) / 4.);
+    glVertex3d((X[0] + X[1] + X[4] + X[3]) / 4., (Y[0] + Y[1] + Y[4] + Y[3]) / 4.,
+	       (Z[0] + Z[1] + Z[4] + Z[3]) / 4.);
     glVertex3d(Xc, Yc, Zc);
-    glVertex3d
-      ((p->V[0]->Pos.X + p->V[3]->Pos.X + p->V[5]->Pos.X + p->V[2]->Pos.X) / 4.,
-       (p->V[0]->Pos.Y + p->V[3]->Pos.Y + p->V[5]->Pos.Y + p->V[2]->Pos.Y) / 4.,
-       (p->V[0]->Pos.Z + p->V[3]->Pos.Z + p->V[5]->Pos.Z + p->V[2]->Pos.Z) / 4.);
+    glVertex3d((X[0] + X[3] + X[5] + X[2]) / 4., (Y[0] + Y[3] + Y[5] + Y[2]) / 4.,
+	       (Z[0] + Z[3] + Z[5] + Z[2]) / 4.);
     glVertex3d(Xc, Yc, Zc);
-    glVertex3d
-      ((p->V[1]->Pos.X + p->V[2]->Pos.X + p->V[5]->Pos.X + p->V[4]->Pos.X) / 4.,
-       (p->V[1]->Pos.Y + p->V[2]->Pos.Y + p->V[5]->Pos.Y + p->V[4]->Pos.Y) / 4.,
-       (p->V[1]->Pos.Z + p->V[2]->Pos.Z + p->V[5]->Pos.Z + p->V[4]->Pos.Z) / 4.);
+    glVertex3d((X[1] + X[2] + X[5] + X[4]) / 4., (Y[1] + Y[2] + Y[5] + Y[4]) / 4.,
+	       (Z[1] + Z[2] + Z[5] + Z[4]) / 4.);
     glEnd();
     glDisable(GL_LINE_STIPPLE);
     gl2psDisable(GL2PS_LINE_STIPPLE);
diff --git a/Mesh/Print_Mesh.cpp b/Mesh/Print_Mesh.cpp
index 31fd109a647883541539f64890bb682b6323c45e..b4ce1aec569ccd4536107667aa225e29f1f27d0f 100644
--- a/Mesh/Print_Mesh.cpp
+++ b/Mesh/Print_Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Print_Mesh.cpp,v 1.52 2004-05-25 23:16:26 geuzaine Exp $
+// $Id: Print_Mesh.cpp,v 1.53 2004-05-27 06:23:48 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -253,7 +253,7 @@ static void _msh_print_hexahedron(void *a, void *b)
   nbn = 8;
   if(h->VSUP) {
     type = HEXAHEDRON_2;
-    nbs = 12 + 6;
+    nbs = 12 + 6 + 1;
   }
   else
     type = HEXAHEDRON;
@@ -811,7 +811,7 @@ static void _unv_process_3D_elements(Mesh *m)
     for(int j = 0; j < List_Nbr(Elements); j++) {
       List_Read(Elements, j, &hx);
       if(hx->VSUP)
-	_unv_print_record(ELEMENT_ID++, BRICK, v->Num, 8, 12+6, &hx->V[0], hx->VSUP);
+	_unv_print_record(ELEMENT_ID++, BRICK, v->Num, 8, 12+6+1, &hx->V[0], hx->VSUP);
       else
 	_unv_print_record(ELEMENT_ID++, BRICK, v->Num, 8, 0, &hx->V[0], NULL);
     }
diff --git a/Mesh/Read_Mesh.cpp b/Mesh/Read_Mesh.cpp
index 74cba8faf2f710fc4d39b8fb99c4eaa9d944aed4..c75ce750e59f483c845322e16fa2561b49a71cf9 100644
--- a/Mesh/Read_Mesh.cpp
+++ b/Mesh/Read_Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Read_Mesh.cpp,v 1.74 2004-05-26 23:53:37 geuzaine Exp $
+// $Id: Read_Mesh.cpp,v 1.75 2004-05-27 06:23:48 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -246,7 +246,7 @@ void Read_Mesh_MSH(Mesh * M, FILE * fp)
 	  case TET1: Nbr_Nodes = 4; break;
 	  case TET2: Nbr_Nodes = 4 + 6; break;
 	  case HEX1: Nbr_Nodes = 8; break;
-	  case HEX2: Nbr_Nodes = 8 + 12 + 6; break;
+	  case HEX2: Nbr_Nodes = 8 + 12 + 6 + 1; break;
 	  case PRI1: Nbr_Nodes = 6; break;
 	  case PRI2: Nbr_Nodes = 6 + 9 + 3; break;
 	  case PYR1: Nbr_Nodes = 5; break;
@@ -371,8 +371,8 @@ void Read_Mesh_MSH(Mesh * M, FILE * fp)
           hex->iEnt = Elementary;
           hex->iPart = Add_MeshPartition(Partition, M);
 	  if(Type == HEX2){
-	    hex->VSUP = (Vertex **) Malloc((12 + 6) * sizeof(Vertex *));
-	    for(i = 0; i < 12 + 6; i++){
+	    hex->VSUP = (Vertex **) Malloc((12 + 6 + 1) * sizeof(Vertex *));
+	    for(i = 0; i < 12 + 6 + 1; i++){
 	      hex->VSUP[i] = vertsp[i+8];
 	      hex->VSUP[i]->Degree = 2;
 	    }
diff --git a/Mesh/SecondOrder.cpp b/Mesh/SecondOrder.cpp
index bf5cc43ebf30242e5d3c31b1f5b8f7eacad90cd0..1c88b4238fc166e821c1f542d4e3fbde06713cb8 100644
--- a/Mesh/SecondOrder.cpp
+++ b/Mesh/SecondOrder.cpp
@@ -1,4 +1,4 @@
-// $Id: SecondOrder.cpp,v 1.25 2004-05-26 00:33:37 geuzaine Exp $
+// $Id: SecondOrder.cpp,v 1.26 2004-05-27 06:23:48 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -43,6 +43,12 @@ static EdgesContainer *edges = NULL;
 static QuadFacesContainer *faces = NULL;
 static List_T *VerticesToDelete = NULL;
 
+// using the following onCurve and onSurface functions instead of
+// adding the second order nodes directly in the mesh algorithms is
+// far less efficient... But it's much more general, as we want to be
+// able to couple many algorithms, some of which we don't want
+// to/cannot modify.
+
 Vertex *onCurve(Vertex * v1, Vertex * v2)
 {
   Vertex v, *pv;
@@ -197,7 +203,7 @@ void putMiddleEdgePoint(void *a, void *b)
     Quadrangle *q;
     List_Read(ed->Quadrangles, i, &q);
     if(!q->VSUP)
-      q->VSUP = (Vertex **) Malloc(5 * sizeof(Vertex *));
+      q->VSUP = (Vertex **) Malloc((4 + 1) * sizeof(Vertex *));
     for(int j = 0; j < 4; j++) {
       if((!compareVertex(&q->V[edges_quad[j][0]], &ed->V[0]) &&
           !compareVertex(&q->V[edges_quad[j][1]], &ed->V[1])) ||
@@ -212,7 +218,7 @@ void putMiddleEdgePoint(void *a, void *b)
     Hexahedron *h;
     List_Read(ed->Hexahedra, i, &h);
     if(!h->VSUP)
-      h->VSUP = (Vertex **) Malloc(18 * sizeof(Vertex *));
+      h->VSUP = (Vertex **) Malloc((12 + 6 + 1) * sizeof(Vertex *));
     for(int j = 0; j < 12; j++) {
       if((!compareVertex(&h->V[edges_hexa[j][0]], &ed->V[0]) &&
           !compareVertex(&h->V[edges_hexa[j][1]], &ed->V[1])) ||
@@ -227,7 +233,7 @@ void putMiddleEdgePoint(void *a, void *b)
     Prism *p;
     List_Read(ed->Prisms, i, &p);
     if(!p->VSUP)
-      p->VSUP = (Vertex **) Malloc(12 * sizeof(Vertex *));
+      p->VSUP = (Vertex **) Malloc((9 + 3) * sizeof(Vertex *));
     for(int j = 0; j < 9; j++) {
       if((!compareVertex(&p->V[edges_prism[j][0]], &ed->V[0]) &&
           !compareVertex(&p->V[edges_prism[j][1]], &ed->V[1])) ||
@@ -242,7 +248,7 @@ void putMiddleEdgePoint(void *a, void *b)
     Pyramid *p;
     List_Read(ed->Pyramids, i, &p);
     if(!p->VSUP)
-      p->VSUP = (Vertex **) Malloc(9 * sizeof(Vertex *));
+      p->VSUP = (Vertex **) Malloc((8 + 1) * sizeof(Vertex *));
     for(int j = 0; j < 8; j++) {
       if((!compareVertex(&p->V[edges_pyramid[j][0]], &ed->V[0]) &&
           !compareVertex(&p->V[edges_pyramid[j][1]], &ed->V[1])) ||
@@ -298,7 +304,7 @@ void putMiddleFacePoint(void *a, void *b)
 	F.V[3] = fac->hexa[i]->V[quadfaces_hexa[j][3]];
 	qsort(F.V, 4, sizeof(Vertex *), compareVertex);
 	if(!compareQuadFace(fac, &F))
-	  fac->hexa[i]->VSUP[12+j] = v;
+	  fac->hexa[i]->VSUP[12 + j] = v;
       }
     }
   }
@@ -312,7 +318,7 @@ void putMiddleFacePoint(void *a, void *b)
 	F.V[3] = fac->prism[i]->V[quadfaces_prism[j][3]];
 	qsort(F.V, 4, sizeof(Vertex *), compareVertex);
 	if(!compareQuadFace(fac, &F))
-	  fac->prism[i]->VSUP[9+j] = v;
+	  fac->prism[i]->VSUP[9 + j] = v;
       }
     }
   }
@@ -330,6 +336,35 @@ void putMiddleFacePoint(void *a, void *b)
   }
 }
 
+void putMiddleVolumePoint(void *a, void *b)
+{
+  Hexahedron *h = *(Hexahedron**)a;
+  double x = 0., y = 0., z = 0., lc = 0., u = 0.;
+  for(int i = 0; i < 8; i++){
+    x += h->V[i]->Pos.X;
+    y += h->V[i]->Pos.Y;
+    z += h->V[i]->Pos.Z;
+    lc += h->V[i]->lc;
+    u += h->V[i]->u;
+  }
+  for(int i = 0; i < 18; i++){
+    x += h->VSUP[i]->Pos.X;
+    y += h->VSUP[i]->Pos.Y;
+    z += h->VSUP[i]->Pos.Z;
+    lc += h->VSUP[i]->lc;
+    u += h->VSUP[i]->u;
+  }
+  x /= 26.;
+  y /= 26.;
+  z /= 26.;
+  lc /= 26.;
+  u /= 26.;
+  Vertex *v = Create_Vertex(++THEM->MaxPointNum, x, y, z, lc, u);
+  v->Degree = 2;
+  Tree_Insert(THEM->Vertices, &v);
+  h->VSUP[18] = v;
+}
+
 void ResetDegre2_Vertex(void *a, void *b)
 {
   Vertex *v = *(Vertex**)a;
@@ -474,6 +509,8 @@ void Degre2_Volume(void *a, void *b)
   faces->AddPrismTree(v->Prisms);
   faces->AddPyramidTree(v->Pyramids);
   Tree_Action(faces->AllFaces, putMiddleFacePoint);
+
+  Tree_Action(v->Hexahedra, putMiddleVolumePoint);
 }
 
 void Degre2(int dim)
diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi
index 4d5c28372e50f2897b7f135b3d25a3ec52c02ec2..90378c2d4736e0bfe1a9507058d1e7981e425f41 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.113 2004-05-26 23:53:37 geuzaine Exp $
+@c $Id: gmsh.texi,v 1.114 2004-05-27 06:23:48 geuzaine Exp $
 @c
 @c Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 @c
@@ -2713,23 +2713,26 @@ Prism (6 nodes).
 @item 7
 Pyramid (5 nodes).
 @item 8
-Second order line (3 nodes: associated with 2 vertices and 1 edge).
+Second order line (3 nodes: 2 associated with the vertices and 1 with the
+edge).
 @item 9
-Second order triangle (6 nodes: associated with 3 vertices and 3 edges).
+Second order triangle (6 nodes: 3 associated with the vertices and 3 with
+the edges).
 @item 10
-Second order quadrangle (9 nodes: associated with 4 vertices, 4 edges and 1
-quadrangular face).
+Second order quadrangle (9 nodes: 4 associated with the vertices, 4 with the
+edges and 1 with the face).
 @item 11
-Second order tetrahedron (10 nodes: associated with 4 vertices and 6 edges).
+Second order tetrahedron (10 nodes: 4 associated with the vertices and 6
+with the edges).
 @item 12
-Second order hexahedron (26 nodes: associated with 8 vertices, 12 edges and
-6 quadrangular faces).
+Second order hexahedron (27 nodes: 8 associated with the vertices, 12 with
+the edges, 6 with the faces and 1 with the volume).
 @item 13
-Second order prism (18 nodes: associated with 6 vertices, 9 edges and 3
-quadrangular faces).
+Second order prism (18 nodes: 6 associated with the vertices, 9 with the
+edges and 3 with the quadrangular faces).
 @item 14
-Second order pyramid (14 nodes: associated with 5 vertices, 8 edges and 1
-quadrangular face).
+Second order pyramid (14 nodes: 5 associated with the vertices, 8 with the
+edges and 1 with the quadrangular face).
 @item 15
 Point (1 node).
 @end table
@@ -2750,9 +2753,9 @@ is the list of the @var{number-of-nodes} node numbers of the @var{n}-th
 element. The ordering of the nodes is given in @ref{Gmsh node ordering}; for
 second order elements, the first order nodes are given first, followed by
 the nodes associated with the edges, followed by the nodes associated with
-the quadrangular faces (if any). The ordering of these additional nodes
-follows the ordering of the edges and faces given in @ref{Gmsh node
-ordering}.
+the quadrangular faces (if any), followed by the nodes associated with the
+volume (if any). The ordering of these additional nodes follows the ordering
+of the edges and faces given in @ref{Gmsh node ordering}.
 @end table
 
 @c .........................................................................
@@ -2836,23 +2839,26 @@ Prism (6 nodes).
 @item 7
 Pyramid (5 nodes).
 @item 8
-Second order line (3 nodes: associated with 2 vertices and 1 edge).
+Second order line (3 nodes: 2 associated with the vertices and 1 with the
+edge).
 @item 9
-Second order triangle (6 nodes: associated with 3 vertices and 3 edges).
+Second order triangle (6 nodes: 3 associated with the vertices and 3 with
+the edges).
 @item 10
-Second order quadrangle (9 nodes: associated with 4 vertices, 4 edges and 1
-quadrangular face).
+Second order quadrangle (9 nodes: 4 associated with the vertices, 4 with the
+edges and 1 with the face).
 @item 11
-Second order tetrahedron (10 nodes: associated with 4 vertices and 6 edges).
+Second order tetrahedron (10 nodes: 4 associated with the vertices and 6
+with the edges).
 @item 12
-Second order hexahedron (26 nodes: associated with 8 vertices, 12 edges and
-6 quadrangular faces).
+Second order hexahedron (27 nodes: 8 associated with the vertices, 12 with
+the edges, 6 with the faces and 1 with the volume).
 @item 13
-Second order prism (18 nodes: associated with 6 vertices, 9 edges and 3
-quadrangular faces).
+Second order prism (18 nodes: 6 associated with the vertices, 9 with the
+edges and 3 with the quadrangular faces).
 @item 14
-Second order pyramid (14 nodes: associated with 5 vertices, 8 edges and 1
-quadrangular face).
+Second order pyramid (14 nodes: 5 associated with the vertices, 8 with the
+edges and 1 with the quadrangular face).
 @item 15
 Point (1 node).
 @end table
@@ -2875,8 +2881,9 @@ is the list of the node numbers of the @var{n}-th element. The ordering of
 the nodes is given in @ref{Gmsh node ordering}; for second order elements,
 the first order nodes are given first, followed by the nodes associated with
 the edges, followed by the nodes associated with the quadrangular faces (if
-any). The ordering of these additional nodes follows the ordering of the
-edges and faces given in @ref{Gmsh node ordering}.
+any), followed by the nodes associated with the volume (if any). The
+ordering of these additional nodes follows the ordering of the edges and
+faces given in @ref{Gmsh node ordering}.
 @end table
 
 @c -------------------------------------------------------------------------