diff --git a/gstlal-burst/gst/lal/gstlal_string_triggergen.c b/gstlal-burst/gst/lal/gstlal_string_triggergen.c
index 226949518b3443e55aa1abd2dddf6f1a4134834a..f232dac49dc4ffc82e2e89a791b37ce9277075a3 100644
--- a/gstlal-burst/gst/lal/gstlal_string_triggergen.c
+++ b/gstlal-burst/gst/lal/gstlal_string_triggergen.c
@@ -239,7 +239,16 @@ static GstFlowReturn trigger_generator(GSTLALStringTriggergen *element, GstBuffe
 		for(channel = 0; channel < element->num_templates; channel++, snrsample++) {
 			float snr = fabsf(*snrsample);
 			if(snr >= element->threshold) {
+				/*
+				 * If this is the first sample above threshold (i.e. snr of trigger is (re)set to 0), record the start time.
+				 */
+				if(element->bank[channel].snr < element->threshold)
+					element->bank[channel].start_time = t;
+				/*
+				 * Keep track of last time above threshold and the duration.
+				 */
 				element->last_time[channel] = t;
+				element->bank[channel].duration = XLALGPSDiff(&element->last_time[channel], &element->bank[channel].start_time);
 				if(snr > element->bank[channel].snr) {
 					/*
 					 * Higher SNR than the "current winner". Update.
@@ -406,6 +415,8 @@ static gboolean start(GstBaseTransform *trans)
 			 */
 
 			XLALINT8NSToGPS(&element->bank[i].peak_time, 0);
+			XLALINT8NSToGPS(&element->bank[i].start_time, 0);
+			element->bank[i].duration = 0;
 			element->bank[i].snr = 0;
 
 			/*