diff --git a/src/calng/base_correction.py b/src/calng/base_correction.py
index 7ac07b0dac0df3b373e5d34fc6fd200167b7ddfd..b451c5ee982e0c06e6c9deca340353352041cc14 100644
--- a/src/calng/base_correction.py
+++ b/src/calng/base_correction.py
@@ -924,13 +924,19 @@ class BaseCorrection(PythonDevice):
 
             if source not in self.sources:
                 self.log_status_info(f"Ignoring hash with unknown source {source}")
-                return
+                continue
             elif not data_hash.has(self._image_data_path):
                 self.log_status_info("Ignoring hash without image node")
-                return
-            elif len(self.input_data_shape) != len(data_hash.get(f"{self._image_data_path}.shape")):
-                self.log_status_info("DAQ probably not sending data")
-                return
+                continue
+
+            try:
+                image_data = data_hash.get(self._image_data_path)
+                cell_table = data_hash.get(self._cell_table_path).ravel()
+            except RuntimeError as err:
+                self.log_status_info(
+                    f"Failed to load image data; probably empty hash from DAQ: {err}"
+                )
+                continue
 
             # no more common reasons to skip input, so go to processing
             if state is State.ON:
@@ -939,7 +945,6 @@ class BaseCorrection(PythonDevice):
 
             train_id = metadata.getAttribute("timestamp", "tid")
             self._train_ratio_tracker.update(train_id)
-            cell_table = data_hash.get(self._cell_table_path).ravel()
 
             if self.unsafe_get("constantParameters.memoryCells") <= cell_table.max():
                 self.log_status_warn("Input cell IDs out of range of constants")
@@ -951,7 +956,6 @@ class BaseCorrection(PythonDevice):
                 self.set("dataFormat.memoryCells", cell_table.size)
                 self._lock_and_update_in_background(self._update_frame_filter)
 
-            image_data = data_hash.get(self._image_data_path)
             # DataAggregator typically tells us the wrong axis order
             if self.unsafe_get("dataFormat.overrideInputAxisOrder"):
                 expected_shape = self.input_data_shape