diff --git a/grudge/geometry/metrics.py b/grudge/geometry/metrics.py
index 46dd62c097d9e0a836a7bd5b66734f8ddfc78c3c..401aa1cc1aa11e2c39dbd522abcaf35fe585765c 100644
--- a/grudge/geometry/metrics.py
+++ b/grudge/geometry/metrics.py
@@ -31,6 +31,7 @@ from grudge.dof_desc import (
 from meshmode.dof_array import thaw
 from pymbolic.geometric_algebra import MultiVector
 from pytools.obj_array import make_obj_array
+from pytools import memoize_on_first_arg
 
 
 def forward_metric_nth_derivative(actx, dcoll, xyz_axis, ref_axes, dd=None):
@@ -195,6 +196,7 @@ def inverse_metric_derivative(actx, dcoll, rst_axis, xyz_axis, dd):
     return result
 
 
+@memoize_on_first_arg
 def inverse_surface_metric_derivative(actx, dcoll, rst_axis, xyz_axis, dd=None):
 
     dim = dcoll.dim
@@ -263,6 +265,7 @@ def pseudoscalar(actx, dcoll, dim=None, dd=None):
     ).project_max_grade()
 
 
+@memoize_on_first_arg
 def area_element(actx, dcoll, dim=None, dd=None):
 
     return actx.np.sqrt(