diff --git a/geomagio/Controller.py b/geomagio/Controller.py
index d05f49857cd4f3c7466081fd6f9ed9f5371006b2..d5f2124a5df51b7d4b8bd75a72048d668cfcd6a4 100644
--- a/geomagio/Controller.py
+++ b/geomagio/Controller.py
@@ -92,21 +92,23 @@ class Controller(object):
                 endtime=options.endtime,
                 channels=output_channels)
         # find gaps in output, so they can be updated
-        output_gaps = TimeseriesUtility.get_stream_gaps(output_timeseries)
-        for gap in output_gaps:
-            start, end = algorithm.get_input_interval(
-                    start=gap[0],
-                    end=gap[1])
+        output_gaps = TimeseriesUtility.get_merged_gaps(
+                TimeseriesUtility.get_stream_gaps(output_timeseries))
+        for output_gap in output_gaps:
+            input_start, input_end = algorithm.get_input_interval(
+                    start=output_gap[0],
+                    end=output_gap[1])
             input_timeseries = self._inputFactory.get_timeseries(
-                    starttime=start,
-                    endtime=end,
+                    starttime=input_start,
+                    endtime=input_end,
                     channels=input_channels)
-            input_gaps = TimeseriesUtility.get_stream_gaps(input_timeseries)
+            input_gaps = TimeseriesUtility.get_merged_gaps(
+                    TimeseriesUtility.get_stream_gaps(input_timeseries))
             if len(input_gaps) > 0:
                 # TODO: are certain gaps acceptable?
                 continue
             # check for fillable gap at start
-            if gap[0] == options.starttime:
+            if output_gap[0] == options.starttime:
                 # found fillable gap at start, recurse to previous interval
                 interval = options.endtime - options.starttime
                 self.run_as_update({
@@ -117,8 +119,8 @@ class Controller(object):
             # fill gap
             self.run({
                 'outchannels': options.outchannels,
-                'starttime': gap[0],
-                'endtime': gap[1]
+                'starttime': output_gap[0],
+                'endtime': output_gap[1]
             })
 
     def _get_output_channels(self, algorithm_channels, commandline_channels):