diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 5647542c4d9020691acab2521a0e0ea3770cbd32..3570ac3637b5702a70d2e46a9aa232d2c53cdf01 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,3 +1,5 @@
+4.10.1 (Work-in-progress): small bug fixes.
+
 4.10.0 (April 25, 2022): more flexible homology/cohomology workflow in the API;
 "Attractor" field is now just a synonym for the newer (and more efficient)
 "Distance" field; periodic bsplines now use the same default multiplicities in
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0cc3c7c669a2a166867bd04ea0af4991efcc275e..a4d32e7ddca94c64400b30ea050ecf736c5febc9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -108,7 +108,7 @@ opt(ZIPPER "Enable Zip file compression/decompression" OFF)
 
 set(GMSH_MAJOR_VERSION 4)
 set(GMSH_MINOR_VERSION 10)
-set(GMSH_PATCH_VERSION 0)
+set(GMSH_PATCH_VERSION 1)
 if(NOT GMSH_EXTRA_VERSION)
   set(GMSH_EXTRA_VERSION "")
 endif()
diff --git a/doc/texinfo/version.texi b/doc/texinfo/version.texi
index b30862eea925209bbaa3b9c8f9e4b1d345ff48be..27a785272077d43b400bb728ae9fc97d8d8d9a72 100644
--- a/doc/texinfo/version.texi
+++ b/doc/texinfo/version.texi
@@ -1,4 +1,4 @@
 @c This file was generated by cmake: do not edit manually!
 
-@set GMSH-VERSION 4.10.0 (development version)
+@set GMSH-VERSION 4.10.1 (development version)
 @set GITLAB-PREFIX https://gitlab.onelab.info/gmsh/gmsh/blob/master
diff --git a/src/common/Context.h b/src/common/Context.h
index 3a6cfa99465a456cdfa2042ddbfdd9476542e4d4..fde6d0b98e8a021f425bc2fdcdac6703af16ea9a 100644
--- a/src/common/Context.h
+++ b/src/common/Context.h
@@ -93,6 +93,7 @@ struct contextGeometryOptions {
   // geometry algorithms
   int oldCircle, oldNewreg, oldRuledSurface;
   int extrudeSplinePoints, extrudeReturnLateral;
+  std::string pipeDefaultTrihedron;
   int autoCoherence;
   int autoExtrude; // FIXME: temporary for auto-extrude testing
   double tolerance, toleranceBoolean, snap[3], transform[3][3], offset[3];
diff --git a/src/common/DefaultOptions.h b/src/common/DefaultOptions.h
index 7387edc9166b24bc869aa35b2c0c03d4b8eb6cb2..68b39ea39b4c43493cbc736d901629a05f9f7106 100644
--- a/src/common/DefaultOptions.h
+++ b/src/common/DefaultOptions.h
@@ -161,6 +161,9 @@ StringXString GeometryOptions_String[] = {
     "OpenCASCADE behavior); the option should be set before importing the STEP or "
     "IGES file"},
 
+  { F|O, "PipeDefaultTrihedron" , opt_geometry_pipe_default_trihedron,
+    "DiscreteTrihedron" , "Default trihedron type when creating pipes" },
+
   { 0, nullptr , nullptr , "" , nullptr }
 } ;
 
diff --git a/src/common/Options.cpp b/src/common/Options.cpp
index c2ab1061613871682b8dcc6adcf312808c355dd3..21578b6b7dcfb0740e62c208d1e9f559176a248b 100644
--- a/src/common/Options.cpp
+++ b/src/common/Options.cpp
@@ -1430,6 +1430,12 @@ std::string opt_geometry_occ_target_unit(OPT_ARGS_STR)
   return CTX::instance()->geom.occTargetUnit;
 }
 
+std::string opt_geometry_pipe_default_trihedron(OPT_ARGS_STR)
+{
+  if(action & GMSH_SET) CTX::instance()->geom.pipeDefaultTrihedron = val;
+  return CTX::instance()->geom.pipeDefaultTrihedron;
+}
+
 std::string opt_solver_socket_name(OPT_ARGS_STR)
 {
   if(action & GMSH_SET) CTX::instance()->solver.socketName = val;
diff --git a/src/common/Options.h b/src/common/Options.h
index c9b1c63183a417fa8c2a6003ec3c3c8057589d96..2c9b95f008b6facd0949984218eca1179f18144a 100644
--- a/src/common/Options.h
+++ b/src/common/Options.h
@@ -68,6 +68,7 @@ std::string opt_geometry_double_clicked_curve_command(OPT_ARGS_STR);
 std::string opt_geometry_double_clicked_surface_command(OPT_ARGS_STR);
 std::string opt_geometry_double_clicked_volume_command(OPT_ARGS_STR);
 std::string opt_geometry_occ_target_unit(OPT_ARGS_STR);
+std::string opt_geometry_pipe_default_trihedron(OPT_ARGS_STR);
 std::string opt_solver_socket_name(OPT_ARGS_STR);
 std::string opt_solver_name(OPT_ARGS_STR);
 std::string opt_solver_name0(OPT_ARGS_STR);
diff --git a/src/geo/GModelIO_OCC.cpp b/src/geo/GModelIO_OCC.cpp
index c471d335d853d5e5644666034e3c8a54911e98dc..a150bd63b588192e24c618d9b63264c9edca1d17 100644
--- a/src/geo/GModelIO_OCC.cpp
+++ b/src/geo/GModelIO_OCC.cpp
@@ -3190,7 +3190,7 @@ bool OCC_Internals::_extrudePerDim(
       // DiscreteTrihedron seems the most robust; CorrectedFrenet e.g. fails on
       // very simple cases with straight extrusions.
       GeomFill_Trihedron mode = GeomFill_IsDiscreteTrihedron;
-      if(trihedron == "" || trihedron == "DiscreteTrihedron")
+      if(trihedron == "DiscreteTrihedron")
         mode = GeomFill_IsDiscreteTrihedron;
       else if(trihedron == "CorrectedFrenet")
         mode = GeomFill_IsCorrectedFrenet;
@@ -3315,8 +3315,10 @@ bool OCC_Internals::addPipe(const std::vector<std::pair<int, int> > &inDimTags,
                             std::vector<std::pair<int, int> > &outDimTags,
                             const std::string &trihedron)
 {
+  std::string t = trihedron;
+  if(t.empty()) t = CTX::instance()->geom.pipeDefaultTrihedron;
   return _extrude(2, inDimTags, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., wireTag,
-                  outDimTags, nullptr, trihedron);
+                  outDimTags, nullptr, t);
 }
 
 bool OCC_Internals::_fillet(int mode, const std::vector<int> &volumeTags,