diff --git a/benchmarks/extrude/m91acou4a.geo b/benchmarks/extrude/m91acou4a.geo
new file mode 100644
index 0000000000000000000000000000000000000000..2a8ef33ada3c2eaab08700a09500db1080a56d28
--- /dev/null
+++ b/benchmarks/extrude/m91acou4a.geo
@@ -0,0 +1,244 @@
+// Gmsh project created on Tue Aug  5 18:29:53 2008
+r1 = 0.025;     // device radius
+
+h  = 0.01;       // duct height
+dh1 = 3*h/10;    // Describe how the duct is split.
+dh2 = 2*h/10;
+dh3 = 2*h/10;
+dh4 = 3*h/10;
+mh1 = 3; ph1 = 1; // top quarter duct, vertical mesh count and progression
+mh2 = 2; ph2 = 1; //  2nd quarter duct vertical mesh count and progression
+mh3 = 2; ph3 = 1; // 3rd quarter duct vertical mesh count and progression
+mh4 = 3; ph4 = 1; // 4th / bottom quarter duct vertical mesh count and progression
+
+mr = 8; // mesh density used throughout most of the mesh.
+// 'notlinked' sets the mesh starting from upper surface, moving around the outer
+// perimeter.  The mesh count is one less than, 'notlinked'.
+notlinked = 4;
+
+f  = 40000;      // interest freq
+c  = 344;        // celerity
+lc = (1/4)*c/f;  //characteristic length for all nodes as function of freq.  Mesh density
+s  = 1;          // characteristic length scalar for internal regions.
+
+// Middle surface; extrude from here, up and down.=========================NODES
+Point (1) =    {       0     , 0       ,       0 ,  lc/s};    // centre
+
+// Perimeter.
+For i In {0:7:1}
+   Point(i + 11) = {r1*Cos(2 * Pi * i / 8), 0, r1*Sin(2 * Pi * i / 8), lc/s};
+EndFor
+
+// Corners for inner square
+t = 0.9;  // bodge to scale inner square to improve element quality.
+Point(21) = {t*r1/2,  0,  t*0, lc/s};
+Point(22) = {t*r1/2,  0,  t*r1/2, lc/s};
+Point(23) = {t*0,     0,  t*r1/2, lc/s};
+Point(24) = {-t*r1/2, 0,  t*r1/2, lc/s};
+Point(25) = {-t*r1/2, 0,  t*0, lc/s};
+Point(26) = {-t*r1/2, 0, -t*r1/2, lc/s};
+Point(27) = {t*0,     0, -t*r1/2, lc/s};
+Point(28) = {t*r1/2,  0, -t*r1/2, lc/s};
+
+// Interface region. ======================================================NODES
+// Centre
+// Point(1001) = {r1,  0, 0, lc/s};
+
+// Outer perimeter 
+// Perimeter nodes.  From top, up.
+For i In {0:4:1}
+   Point(1011 + i) = {r1 + h/2*Cos(-Pi/2 + 2 * Pi * i / 8),
+      h/2 * Sin(-Pi/2 + 2 * Pi * i / 8), 0, lc/s};
+EndFor
+
+// Inner square parts.  Link to extrusions above.
+t = 0.9;  // bodge to scale inner square to improve element quality.
+Point(1021) = {r1 + 0,       -h/2 + dh4, 0, lc/s};
+Point(1022) = {r1 + t * h/4, -h/2 + dh4, 0, lc/s};
+Point(1023) = {r1 + t * h/4,    0, 0, lc/s};
+Point(1024) = {r1 + t * h/4,  h/2 - dh1, 0, lc/s};
+Point(1025) = {r1 + 0,        h/2 - dh1, 0, lc/s};
+
+// Circle creation. =====================================================Circles
+l = 1;      // line numbers start from.....
+For i In {0:6:1}
+   Circle(l)      = { 11 + i , 1, 11 + i + 1};    l = l +1;
+EndFor
+// close the loop, from node 18 to 11, centre node 1.
+Circle(l) = {18, 1, 11};  l = l + 1;
+
+// Interface
+l = 11;      // line numbers start from.
+For i In {0:3:1}
+   Circle(l)      = { 1011 + i , 11, 1011 + i + 1};    l = l +1;
+EndFor
+
+// Square creation.  Duct. ==============================================Squares
+l = 21;
+For i In {0:6:1}
+   Line(l)   = {21 + i, 22 + i}; l = l + 1;
+EndFor
+Line(l)   = {28, 21}; l = l + 1;
+
+// Interface
+l = 41;
+For i In {0:3:1}
+   Line(l)   = {1021 + i, 1022 + i}; l = l + 1;
+EndFor
+
+// Lines radiating from square to perimeter. Duct==========================Lines
+l=51;
+For i In {0:7:1}
+   Line(l)   = {21 + i, 11 + i}; l = l + 1;
+EndFor
+
+// Lines radiating out from centre point.
+Line(61) = {1, 21};
+Line(63) = {1, 23};
+Line(65) = {1, 25};
+Line(67) = {1, 27};
+
+// Interface
+
+l=71;
+For i In {0:4:1}
+   Line(l)   = {1021 + i, 1011 + i}; l = l + 1;
+EndFor
+
+// Lines radiating out from centre point.
+Line(81) = {11, 1021};
+Line(83) = {11, 1023};
+Line(85) = {11, 1025};
+
+// Define closed loops and planes for the shapes just created.  These were
+// selected in GMSH, rather than in the script as the negative values control
+// the direction of the path. ============================================Planes
+// Duct.
+Line Loop(86) = {28,-61,67,27};
+Plane Surface(87) = {86};
+Line Loop(88) = {67,-26,-25,-65};
+Plane Surface(89) = {88};
+Line Loop(90) = {63,23,24,-65};
+Plane Surface(91) = {90};
+Line Loop(92) = {21,22,-63,61};
+Plane Surface(93) = {92};
+Line Loop(94) = {51,-8,-58,28};
+Plane Surface(95) = {94};
+Line Loop(96) = {58,-7,-57,27};
+Plane Surface(97) = {96};
+Line Loop(98) = {57,-6,-56,26};
+Plane Surface(99) = {98};
+Line Loop(100) = {56,-5,-55,25};
+Plane Surface(101) = {100};
+Line Loop(102) = {55,-4,-54,24};
+Plane Surface(103) = {102};
+Line Loop(104) = {54,-3,-53,23};
+Plane Surface(105) = {104};
+Line Loop(106) = {53,-2,-52,22};
+Plane Surface(107) = {106};
+Line Loop(108) = {52,-1,-51,21};
+Plane Surface(109) = {108};
+// Interface
+Line Loop(110) = {71,11,-72,-41};
+Plane Surface(111) = {110};
+Line Loop(112) = {12,-73,-42,72};
+Plane Surface(113) = {112};
+Line Loop(114) = {73,13,-74,-43};
+Plane Surface(115) = {114};
+Line Loop(116) = {74,14,-75,-44};
+Plane Surface(117) = {116};
+Line Loop(118) = {81,41,42,-83};
+Plane Surface(119) = {118};
+Line Loop(120) = {85,-44,-43,-83};
+Plane Surface(121) = {120};
+//
+// The following code is required to make the mesh ordered =====================
+//
+// Set the lines above, as 'transfinite'.  Duct (setting most of the mesh):
+Transfinite Line{1,2,3,4,5,6,7,8} = mr + 1 Using Progression 1.0;  // duct perim
+Transfinite Line{21,22,23,24,25,26,27,28} = mr + 1 Using Progression 1.0; // square
+Transfinite Line{51,52,53,54,55,56,57,58} = mr + 1 Using Progression 1.0; // radiate
+Transfinite Line{61,63,65,67} = mr + 1 Using Progression 1.0; // radiate
+
+// Interface.  Different pattern from duct.
+// Moving down, from upper edge next to upper boundary layer in duct.  unlinked.
+
+Transfinite Line{14,44,83,41, 11} = notlinked Using Progression 1.0; 
+// moving around curve.
+Transfinite Line{71, 72, 73, 74, 75} = mh1+1 Using Progression 1.0;
+// moving out, from upper central duct.
+Transfinite Line{85, 43, 13} = mh2+1 Using Progression 1.0;
+// moving out from lower central duct.
+Transfinite Line{81, 42, 12} = mh3+1 Using Progression 1.0;
+
+// Create new, 'transfinite' surfaces.  Matching surface numbers above and
+// referencing same node numbers.  Had to inspect
+// these from gmsh.  Note, curly brackets, not parentheses.
+//            {surface} = {nodes}
+Transfinite Surface{87:121:2};
+
+// Without the following recombine, the elements are tri primative.
+// Duct.
+Recombine Surface{87:121:2};
+
+// End of extra code to get ordered mesh ***************************************
+//
+// Extrusion.  To this point, the mesh is a 2D disc in the duct plane (to be
+// extruded vertically to form the duct thickness), with a
+// perpendicular disc at it's edge, to be extruded around to form the interface
+// region.
+
+// Extrude {vector} { Surface{n}; Layers{mz} ; Recombine; }
+// with surface number(s) n extruded, mesh density mz1.
+// Assign result to var[], to allow further work with the new surface, in var[0]
+// Entries 0 to 5 are returned for these extruded faces, so steps of 6 to 
+// get the faces for different volumes appended to the list.
+//
+// Extrude to form duct thickness: -------------------------
+// upper middle.
+num[] = Extrude { 0, dh2, 0} {
+           Surface {
+              87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109
+              };
+           Layers{mh2}; Recombine; 
+           };
+// top (boundary layer region)
+num[] = Extrude { 0, dh1, 0} { 
+           Surface{num[0], num[6*1], num[6*2], num[6*3], num[6*4], num[6*5], 
+              num[6*6], num[6*7], num[6*8], num[6*9], num[6*10], num[6*11]}; 
+           Layers{mh1}; 
+           Recombine; 
+           };
+//lower middle
+num[] = Extrude { 0, -dh3, 0} {
+           Surface {
+              87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109
+              };
+           Layers{mh3}; Recombine; 
+           };
+// bottom boundary layer.
+num[] = Extrude {0, -dh4,0} { 
+           Surface{
+              num[0], num[6*1], num[6*2], num[6*3], num[6*4], num[6*5], 
+              num[6*6], num[6*7], num[6*8], num[6*9], num[6*10], num[6*11] 
+              };
+           Layers{mh4}; Recombine; 
+           };
+// The duct is now thick.  ---------------------------------
+
+// Interface.  First extrusion segment.
+num[] = Extrude {{ 0, 1, 0}, {0, 0, 0}, Pi/4} {
+          Surface {
+             111, 113, 115, 117, 119, 121
+             };
+          Layers{mr}; Recombine; 
+          };
+
+// Repeat, around the rest of the interface.
+For i In {0:6:1}
+   num[] = Extrude {{ 0, 1, 0}, {0, 0, 0}, Pi/4} {
+         Surface{num[0], num[6*1], num[6*2], num[6*3], num[6*4], num[6*5]}; 
+         Layers{mr}; 
+         Recombine; 
+         };
+EndFor
diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi
index a89e32a44728707470b8db5e916de3e93da56c65..d5d7e3df47e1352b479ae395ba33ba6024220159 100644
--- a/doc/texinfo/gmsh.texi
+++ b/doc/texinfo/gmsh.texi
@@ -2967,7 +2967,7 @@ $Elements
 $EndElements
 $PhysicalNames
 @var{number-of-names}
-@var{phyical-number} "@var{physical-name}"
+@var{physical-number} "@var{physical-name}"
 @dots{}
 $EndPhysicalNames
 $NodeData
diff --git a/doc/texinfo/opt_plugin.texi b/doc/texinfo/opt_plugin.texi
index 4a38dc15ba049fe0d89647bdf54d26188aacf146..13b7db5f67ecb2a25b543997c6a139b406731b4e 100644
--- a/doc/texinfo/opt_plugin.texi
+++ b/doc/texinfo/opt_plugin.texi
@@ -427,17 +427,29 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(GSHHS)
-Plugin(GSHHS) read differenct kind of contour lines data and write a .geo file.
-Valid values for "Format" are :
+Plugin(GSHHS) read different kind of contour lines data and write a .geo file on the surface of a sphere (the Earth).
+The principal application is to load GSHHS data
+ (see http://www.soest.hawaii.edu/wessel/gshhs/gshhs.html).
+Valid values for "Format" are ):
  -"gshhs" : open GSHHS file
  -"loops2" : import 2D contour lines in simple text format :
-   NB_POINTS_IN_FIRST_LOOP
+   NB_POINTS_IN_FIRST_LOOP FIRST_LOOP_IS_CLOSED
    COORD1 COORD2
    COORD1 COORD2
    ...    ...
-   NB_POINTS_IN_SECOND_LOOP
+   NB_POINTS_IN_SECOND_LOOP SECOND_LOOP_IS_CLOSED
    ...
-
+   (LOOP_IS_CLOSED specify if this coast line describe a closed curve (0=no, 1=yes).
+In the case of "loops2" format, you can specify the the coordinate system used in the input file with the"Coordinate" option, valid values are
+ -"lonlat" for longitude-latidute radian,
+ -"lonlat_degrees" for longitude-latitude degrees,
+ -"UTM" for universal transverse mercartor ("UTMZone" option should be specified)
+ -"cartesian" for full 3D coordinates
+"radius" specify the earth radius.
+If the "iField" option is set, consecutive points closer than the value of the field iField (in meters) will not be added.
+If "MinStraitsFactor" >0 and if a field iField is provided, coastlines closer than MinStraitsFactor*field(IField) are merged and inner corners which form an angle < pi/3 are removed.
+The output is always in stereographic coordinates, if the "WritePolarSphere" option is not 0, a sphere is added to the geo file.
+WARNING : this plugin is still experimental and need polishing and error-handling. In particular, it will probably crash if an inexistant field id is given or if the input/output cannot be open.
 String options:
 @table @code
 @item InFileName
@@ -459,14 +471,12 @@ Default value: @code{0}
 Default value: @code{6.37814e+06}
 @item UTMPolarRadius
 Default value: @code{6.35675e+06}
-@item UTMScale
-Default value: @code{1}
-@item UTMShiftX
-Default value: @code{0}
-@item UTMShiftY
-Default value: @code{0}
+@item radius
+Default value: @code{6.37101e+06}
 @item WritePolarSphere
 Default value: @code{1}
+@item MinStraitsFactor
+Default value: @code{1}
 @end table
 
 @item Plugin(Gradient)