diff --git a/geomagio/Controller.py b/geomagio/Controller.py
index 9d50ceb2a18a17f0c0fad8957d53d13348c6fc78..d9feb299ee03dad412fa23ce82960ec90f18dd95 100644
--- a/geomagio/Controller.py
+++ b/geomagio/Controller.py
@@ -285,8 +285,12 @@ class Controller(object):
             channels=input_channels,
             interval=input_interval,
         )
-        if timeseries.count() == 0:
-            # no data to process
+        if not algorithm.can_produce_data(
+            starttime=timeseries[0].stats.starttime,
+            endtime=timeseries[0].stats.endtime,
+            stream=timeseries,
+        ):
+            # don't process if nothing will be produced
             return
         # pre-process
         if next_starttime and realtime:
@@ -416,18 +420,6 @@ class Controller(object):
                 ]
             ]
         for output_gap in output_gaps:
-            input_timeseries = self._get_input_timeseries(
-                algorithm=algorithm,
-                observatory=observatory,
-                starttime=output_gap[0],
-                endtime=output_gap[1],
-                channels=input_channels,
-                interval=input_interval,
-            )
-            if not algorithm.can_produce_data(
-                starttime=output_gap[0], endtime=output_gap[1], stream=input_timeseries
-            ):
-                continue
             # check for fillable gap at start
             if output_gap[0] == starttime:
                 # found fillable gap at start, recurse to previous interval
@@ -469,7 +461,6 @@ class Controller(object):
                 starttime=gap_starttime,
                 endtime=gap_endtime,
                 input_channels=input_channels,
-                input_timeseries=input_timeseries,
                 output_channels=output_channels,
                 input_interval=input_interval,
                 output_interval=output_interval,