diff --git a/meshmode/mesh/io.py b/meshmode/mesh/io.py
index 515a43172b77b067a8c46c9432185fd3b8c40d62..d67cfa39ff24b3372ed78c8dd16ea40056d5b2cb 100644
--- a/meshmode/mesh/io.py
+++ b/meshmode/mesh/io.py
@@ -291,7 +291,7 @@ def read_gmsh(filename, force_ambient_dim=None, mesh_construction_kwargs=None):
 
 def generate_gmsh(source, dimensions=None, order=None, other_options=[],
         extension="geo", gmsh_executable="gmsh", force_ambient_dim=None,
-        output_file_name="output.msh", keep_tmp_dir=False,
+        output_file_name="output.msh", keep_tmp_dir=False, overwrite_tmp_files=True,
         mesh_construction_kwargs=None):
     """Run :command:`gmsh` on the input given by *source*, and return a
     :class:`meshmode.mesh.Mesh` based on the result.
@@ -307,13 +307,17 @@ def generate_gmsh(source, dimensions=None, order=None, other_options=[],
     """
     recv = GmshMeshReceiver(mesh_construction_kwargs=mesh_construction_kwargs)
 
+    if keep_tmp_dir:
+        tmp_files_dir = "./gmsh_tmp"
+
     from gmsh_interop.runner import GmshRunner
     from gmsh_interop.reader import parse_gmsh
     with GmshRunner(source, dimensions, order=order,
             other_options=other_options, extension=extension,
             gmsh_executable=gmsh_executable,
             output_file_name=output_file_name,
-            keep_tmp_dir=keep_tmp_dir) as runner:
+            save_tmp_files_in=tmp_files_dir,
+            overwrite_tmp_files=overwrite_tmp_files) as runner:
         parse_gmsh(recv, runner.output_file,
                 force_dimension=force_ambient_dim)