diff --git a/gstlal-inspiral/gst/lal/gstlal_itacac.c b/gstlal-inspiral/gst/lal/gstlal_itacac.c
index 5f8442d54d51f4f8d92a1497d5902a934beabbea..760819849981b2371160b96c4dc195dc8e6b87a1 100644
--- a/gstlal-inspiral/gst/lal/gstlal_itacac.c
+++ b/gstlal-inspiral/gst/lal/gstlal_itacac.c
@@ -1195,63 +1195,38 @@ static GstFlowReturn aggregate(GstAggregator *aggregator, gboolean timeout)
 
 	}
 
-	if(itacac->waiting) {
-		// Check if timestamps of all sinkpads are the same, if not,
-		// take the earliest timestamp as the next output timestamp and
-		// start processing samples from sinkpads that have that
-		// timestamp
+	// Find earliest timestamp between all of the pads if we don't have the
+	// first output timestamp, which means itacac hasn't pushed any buffers yet
+	if(itacac->next_output_timestamp == GST_CLOCK_TIME_NONE) {
 		for(padlist = GST_ELEMENT(aggregator)->sinkpads; padlist != NULL; padlist = padlist->next) {
 			GSTLALItacacPad *itacacpad = GSTLAL_ITACAC_PAD(padlist->data);
 			if(gst_audioadapter_available_samples(itacacpad->adapter) == 0)
 				continue;
-
-			if(padlist == GST_ELEMENT(aggregator)->sinkpads)
-				itacac->next_output_timestamp = itacacpad->initial_timestamp;
-			else
-				itacac->next_output_timestamp = itacac->next_output_timestamp <= itacacpad->initial_timestamp ? itacac->next_output_timestamp : itacacpad->initial_timestamp;
-		}
-
-		if(itacac->next_output_timestamp != GST_CLOCK_TIME_NONE) {
-			for(padlist = GST_ELEMENT(aggregator)->sinkpads; padlist != NULL; padlist = padlist->next) {
-				GSTLALItacacPad *itacacpad = GSTLAL_ITACAC_PAD(padlist->data);
-				if(itacacpad->initial_timestamp == itacac->next_output_timestamp && gst_audioadapter_available_samples(itacacpad->adapter) > 0) {
-					itacacpad->waiting = FALSE;
-					if(itacac->waiting)
-						itacac->waiting = FALSE;
-				}
-			}
-			if(!itacac->waiting)
-				result = process(itacac);
+			itacac->next_output_timestamp = itacac->next_output_timestamp == GST_CLOCK_TIME_NONE ? itacacpad->initial_timestamp : itacac->next_output_timestamp <= itacacpad->initial_timestamp ? itacac->next_output_timestamp : itacacpad->initial_timestamp;
 		}
+	}
 
-	} else {
-		if(itacac->next_output_timestamp == GST_CLOCK_TIME_NONE) {
-			for(padlist = GST_ELEMENT(aggregator)->sinkpads; padlist != NULL; padlist = padlist->next) {
-				GSTLALItacacPad *itacacpad = GSTLAL_ITACAC_PAD(padlist->data);
-				if(padlist == GST_ELEMENT(aggregator)->sinkpads)
-					itacac->next_output_timestamp = itacacpad->initial_timestamp;
-				else
-					itacac->next_output_timestamp = itacac->next_output_timestamp <= itacacpad->initial_timestamp ? itacac->next_output_timestamp : itacacpad->initial_timestamp;
-			}
-		}
-		// Figure out if we can start taking data from each pad that is still waiting
-		for(padlist = GST_ELEMENT(aggregator)->sinkpads; padlist != NULL; padlist = padlist->next) {
-			GSTLALItacacPad *itacacpad = GSTLAL_ITACAC_PAD(padlist->data);
-			if(!itacacpad->waiting || itacacpad->initial_timestamp > itacac->next_output_timestamp)
-				continue;
+	// Determine if we can start taking data from each pad that is still waiting (if any)
+	for(padlist = GST_ELEMENT(aggregator)->sinkpads; padlist != NULL; padlist = padlist->next) {
+		if(itacac->next_output_timestamp == GST_CLOCK_TIME_NONE)
+			// We're at the beginning and don't have any data yet (for reaons I don't understand, itacac receives empty buffers at start up)
+			return result;
 
-			// FIXME Assumes n is the same for all detectors
-			guint num_samples_behind = (guint) ((itacac->next_output_timestamp - itacacpad->initial_timestamp) / (1000000000 / itacac->rate));
-			if(num_samples_behind > itacacpad->maxdata->pad)
-				gst_audioadapter_flush_samples(itacacpad->adapter, MIN(num_samples_behind - itacacpad->maxdata->pad, gst_audioadapter_available_samples(itacacpad->adapter)));
-			itacacpad->samples_available_for_padding = num_samples_behind > itacacpad->maxdata->pad ? itacacpad->maxdata->pad : num_samples_behind;
+		GSTLALItacacPad *itacacpad = GSTLAL_ITACAC_PAD(padlist->data);
+		if(!itacacpad->waiting || itacacpad->initial_timestamp > itacac->next_output_timestamp)
+			continue;
 
-			itacacpad->waiting = FALSE;
-		}
+		// FIXME Assumes n is the same for all detectors
+		guint num_samples_behind = (guint) ((itacac->next_output_timestamp - itacacpad->initial_timestamp) / (1000000000 / itacac->rate));
+		if(num_samples_behind > itacacpad->maxdata->pad)
+			gst_audioadapter_flush_samples(itacacpad->adapter, MIN(num_samples_behind - itacacpad->maxdata->pad, gst_audioadapter_available_samples(itacacpad->adapter)));
+		itacacpad->samples_available_for_padding = num_samples_behind > itacacpad->maxdata->pad ? itacacpad->maxdata->pad : num_samples_behind;
 
-		result = process(itacac);
+		itacacpad->waiting = FALSE;
 	}
 
+	result = process(itacac);
+
 	return result;
 }
 
@@ -1545,7 +1520,6 @@ static void gstlal_itacac_init(GSTLALItacac *itacac)
 	reset_time_and_offset(itacac);
 
 	itacac->EOS = FALSE;
-	itacac->waiting = TRUE;
 	itacac->H1_itacacpad = NULL;
 	itacac->K1_itacacpad = NULL;
 	itacac->L1_itacacpad = NULL;
diff --git a/gstlal-inspiral/gst/lal/gstlal_itacac.h b/gstlal-inspiral/gst/lal/gstlal_itacac.h
index 1411bd316ae7b1fb7bb66cd6d54cb100ed867895..2b5fe66d946c3d23c7853c3ff2e41519d7f96063 100644
--- a/gstlal-inspiral/gst/lal/gstlal_itacac.h
+++ b/gstlal-inspiral/gst/lal/gstlal_itacac.h
@@ -128,7 +128,6 @@ typedef struct {
 	GstClockTime next_output_timestamp;
 	GstClockTimeDiff difftime;
 	gboolean EOS;
-	gboolean waiting;
 	GSTLALItacacPad *H1_itacacpad, *K1_itacacpad, *L1_itacacpad, *V1_itacacpad;
 	GMutex caps_lock;