diff --git a/geomagio/Controller.py b/geomagio/Controller.py
index 346070be5cfc6a567f58a5df8923d9817700bfba..d6b0d79ad489494b08b5379e2b42face4c7c7025 100644
--- a/geomagio/Controller.py
+++ b/geomagio/Controller.py
@@ -245,7 +245,9 @@ class Controller(object):
             if not algorithm.can_produce_data(
                     starttime=output_gap[0],
                     endtime=output_gap[1],
-                    stream=input_timeseries):
+                    stream=input_timeseries,
+                    channels = algorithm.get_required_channels() or \
+                        input_channels):
                 continue
             # check for fillable gap at start
             if output_gap[0] == options.starttime:
diff --git a/geomagio/algorithm/Algorithm.py b/geomagio/algorithm/Algorithm.py
index a3f264cb5d4ac4bc653dfefc530d722009d9f8e0..a712b14a128852e2f9714da2087db5e9724f5e05 100644
--- a/geomagio/algorithm/Algorithm.py
+++ b/geomagio/algorithm/Algorithm.py
@@ -87,7 +87,7 @@ class Algorithm(object):
         """
         return (start, end)
 
-    def can_produce_data(self, starttime, endtime, stream):
+    def can_produce_data(self, starttime, endtime, stream, channels = None):
         """Can Product data
 
         Parameters
@@ -100,7 +100,7 @@ class Algorithm(object):
             The input stream we want to make certain has data for the algorithm
         """
         input_gaps = TimeseriesUtility.get_merged_gaps(
-                TimeseriesUtility.get_stream_gaps(stream))
+                TimeseriesUtility.get_stream_gaps(stream,channels))
         for input_gap in input_gaps:
             # Check for gaps that include the entire range
             if (starttime >= input_gap[0] and