diff --git a/src/calng/base_correction.py b/src/calng/base_correction.py
index a631076b3f680cfd0d60782ba31e188ab4004a3f..1bfa18953f6e4987247d749635d09ff74aee3a48 100644
--- a/src/calng/base_correction.py
+++ b/src/calng/base_correction.py
@@ -1,5 +1,6 @@
 import collections
 import enum
+import gc
 import pathlib
 import threading
 from timeit import default_timer
@@ -880,6 +881,12 @@ class BaseCorrection(PythonDevice):
         else:
             self._shmem_buffer.change_shape(self.output_data_shape)
 
+        # give CuPy a chance to at least start memory cleanup before this
+        if self.kernel_runner is not None:
+            del self.kernel_runner
+            self.kernel_runner = None
+            gc.collect()
+
         self.kernel_runner = self._kernel_runner_class(
             self.get("dataFormat.pixelsX"),
             self.get("dataFormat.pixelsY"),