diff --git a/grudge/reductions.py b/grudge/reductions.py
index 026f76d3afd384ea9c491fc5256fdc91eb69ae41..869cebd76751860223cf17ebf0f8ad479a9ecf11 100644
--- a/grudge/reductions.py
+++ b/grudge/reductions.py
@@ -143,8 +143,9 @@ def nodal_sum(dcoll: DiscretizationCollection, dd, vec) -> float:
 
     # NOTE: Don't move this
     from mpi4py import MPI
+    actx = vec.array_context
 
-    return comm.allreduce(nodal_sum_loc(dcoll, dd, vec), op=MPI.SUM)
+    return comm.allreduce(actx.to_numpy(nodal_sum_loc(dcoll, dd, vec)), op=MPI.SUM)
 
 
 def nodal_sum_loc(dcoll: DiscretizationCollection, dd, vec) -> float:
@@ -177,8 +178,9 @@ def nodal_min(dcoll: DiscretizationCollection, dd, vec) -> float:
 
     # NOTE: Don't move this
     from mpi4py import MPI
+    actx = vec.array_context
 
-    return comm.allreduce(nodal_min_loc(dcoll, dd, vec), op=MPI.MIN)
+    return comm.allreduce(actx.to_numpy(nodal_min_loc(dcoll, dd, vec)), op=MPI.MIN)
 
 
 def nodal_min_loc(dcoll: DiscretizationCollection, dd, vec) -> float:
@@ -213,8 +215,9 @@ def nodal_max(dcoll: DiscretizationCollection, dd, vec) -> float:
 
     # NOTE: Don't move this
     from mpi4py import MPI
+    actx = vec.array_context
 
-    return comm.allreduce(nodal_max_loc(dcoll, dd, vec), op=MPI.MAX)
+    return comm.allreduce(actx.to_numpy(nodal_max_loc(dcoll, dd, vec)), op=MPI.MAX)
 
 
 def nodal_max_loc(dcoll: DiscretizationCollection, dd, vec) -> float: