diff --git a/grudge/eager.py b/grudge/eager.py
index 92378f993df51d0fca3fc8170308595e15cd3d18..affefcbdb24db25cb31785a83365b6a420ebff51 100644
--- a/grudge/eager.py
+++ b/grudge/eager.py
@@ -58,6 +58,7 @@ class EagerDGDiscretization(DGDiscretizationWithBoundaries):
     .. automethod:: weak_div
 
     .. automethod:: normal
+    .. automethod:: mass
     .. automethod:: inverse_mass
     .. automethod:: face_mass
 
@@ -265,6 +266,26 @@ class EagerDGDiscretization(DGDiscretizationWithBoundaries):
                     local_only=True)
                 (array_context=actx))
 
+    @memoize_method
+    def _bound_mass(self, dd):
+        return bind(self, sym.MassOperator(dd_in=dd)(sym.Variable("u", dd)),
+                local_only=True)
+
+    def mass(self, *args):
+        if len(args) == 1:
+            vec, = args
+            dd = sym.DOFDesc("vol", sym.QTAG_NONE)
+        elif len(args) == 2:
+            dd, vec = args
+        else:
+            raise TypeError("invalid number of arguments")
+
+        if isinstance(vec, np.ndarray):
+            return obj_array_vectorize(
+                    lambda el: self.mass(dd, el), vec)
+
+        return self._bound_mass(dd)(u=vec)
+
     @memoize_method
     def _bound_inverse_mass(self):
         return bind(self, sym.InverseMassOperator()(sym.Variable("u")),