diff --git a/gstlal-ugly/bin/gstlal_etg_pipe b/gstlal-ugly/bin/gstlal_etg_pipe
index 616a2a70c32f75f8554a840610ca83dc6bb9f2e1..9450335b2b7f06a746b5c3ec76785c1d90b4c29b 100755
--- a/gstlal-ugly/bin/gstlal_etg_pipe
+++ b/gstlal-ugly/bin/gstlal_etg_pipe
@@ -46,6 +46,7 @@ from gstlal import inspiral, inspiral_pipe
 from gstlal import dagparts as gstlaldagparts
 from gstlal import datasource
 from gstlal import multichannel_datasource
+from gstlal import idq_multirate_datasource
 
 class LIGOLWContentHandler(ligolw.LIGOLWContentHandler):
 	pass
@@ -56,10 +57,10 @@ lsctables.use_in(LIGOLWContentHandler)
 # get a dictionary of all the segments
 #
 
-def analysis_segments(ifo, allsegs, boundary_seg, max_template_length = 100):  # FIXME Set proper 
+def analysis_segments(ifo, allsegs, boundary_seg, max_template_length = 30):
 	segsdict = segments.segmentlistdict()
-	# 512 seconds for the whitener to settle + the maximum template_length FIXME don't hard code
-	start_pad = 512 + max_template_length # FIXME set start_pad to be imported value
+	# 512 seconds for the whitener to settle + the maximum template_length
+	start_pad = idq_multirate_datasource.PSD_DROP_TIME + max_template_length
 	# Chosen so that the overlap is only a ~5% hit in run time for long segments...
 	segment_length = int(10 * start_pad)
 
@@ -71,31 +72,18 @@ def analysis_segments(ifo, allsegs, boundary_seg, max_template_length = 100):  #
 
 	return segsdict
 
-def trigger_segments(ifo, allsegs, boundary_seg, max_template_length = 100):  # FIXME Set proper 
-	trigsegsdict = segments.segmentlistdict()
-	# 512 seconds for the whitener to settle + the maximum template_length FIXME don't hard code
-	start_pad = 512 + max_template_length # FIXME set start_pad to be imported value
-	# Chosen so that the overlap is only a ~5% hit in run time for long segments...
-	segment_length = int(10 * start_pad)
-
-	trigsegsdict[ifo] = segments.segmentlist([boundary_seg])
-	trigsegsdict[ifo] = gstlaldagparts.breakupsegs(trigsegsdict[ifo], segment_length, start_pad)
-	if not trigsegsdict[ifo]:
-		del trigsegsdict[ifo]
-
-	return trigsegsdict
-
 #
 # get a dictionary of all the channels per gstlal_etg job
 #
 
-def etg_node_gen(gstlalETGJob, dag, parent_nodes, segsdict, trigsegsdict, ifo, options, channels, data_source_info):
+def etg_node_gen(gstlalETGJob, dag, parent_nodes, segsdict, ifo, options, channels, data_source_info):
 	etg_nodes = {}
 	cumsum_rates = 0
 	total_rates = 0
 	outstr = ""
 	n_channels = 0
 	n_cpu = 0
+	trig_start = options.gps_start_time
 
 	# Loop over all channels to determine number of streams and minimum number of processes needed
 	for ii, channel in enumerate(channels,1):
@@ -115,7 +103,7 @@ def etg_node_gen(gstlalETGJob, dag, parent_nodes, segsdict, trigsegsdict, ifo, o
 		print "Total jobs needed =", n_cpu
 		print "Evenly distributed streams per job =", int(n_streams)
 
-	for seg, trigseg in zip(segsdict[ifo], trigsegsdict[ifo]):
+	for seg in segsdict[ifo]:
 
 		cumsum_rates = 0
 		out_index = 0
@@ -136,13 +124,13 @@ def etg_node_gen(gstlalETGJob, dag, parent_nodes, segsdict, trigsegsdict, ifo, o
 			# Finalise each process once number of streams passes threshold
 			if cumsum_rates >= n_streams or ii == len(data_source_info.channel_dict.keys()):
 				out_index += 1
-				outpath = options.out_path + "/gstlal_etg/gstlal_etg_%04d" % out_index
+				outpath = options.out_path + "/gstlal_etg/gstlal_etg_%04d/%i-%i" %(out_index, int(trig_start), int(seg[1])-int(trig_start))
 				etg_nodes[channel] = \
 					inspiral_pipe.generic_node(gstlalETGJob, dag, parent_nodes = parent_nodes,
 						opts = {"gps-start-time":int(seg[0]),
 							"gps-end-time":int(seg[1]),
-							"trigger-start-time":int(trigseg[0]),
-							"trigger-end-time":int(trigseg[1]),
+							"trigger-start-time":int(trig_start),
+							"trigger-end-time":int(seg[1]),
 							"data-source":"frames",
 							"channel-name":outstr,
 							"mismatch":options.mismatch,
@@ -160,6 +148,8 @@ def etg_node_gen(gstlalETGJob, dag, parent_nodes, segsdict, trigsegsdict, ifo, o
 				outstr = ""
 				n_channels = 0
 
+		trig_start = int(seg[1])
+
 	return etg_nodes
 
 #
@@ -176,7 +166,7 @@ def parse_command_line():
 	# trigger generation options
 	parser.add_option("-v", "--verbose", action = "store_true", help = "Be verbose.")
 	parser.add_option("--triggers-from-dataframe", action = "store_true", default = False,
-						help = "If set, will output iDQ-compatible triggers to disk straight from dataframe once every cadence")
+				help = "If set, will output iDQ-compatible triggers to disk straight from dataframe once every cadence")
 	parser.add_option("--disable-web-service", action = "store_true", help = "If set, disables web service that allows monitoring of PSDS of aux channels.")
 	parser.add_option("--description", metavar = "string", default = "GSTLAL_IDQ_TRIGGERS", help = "Set the filename description in which to save the output.")
 	parser.add_option("--cadence", type = "int", default = 32, help = "Rate at which to write trigger files to disk. Default = 32 seconds.")
@@ -214,7 +204,8 @@ ifo = data_source_info.instrument
 channels = data_source_info.channel_dict.keys()
 boundary_seg = data_source_info.seg
 
-max_template_length = 100
+# FIXME Work out better way to determine max template length
+max_template_length = 30
 
 #
 # Setup the dag
@@ -233,13 +224,12 @@ dag = inspiral_pipe.DAG("etg_trigger_pipe")
 gstlalETGJob = inspiral_pipe.generic_job("gstlal_etg", condor_commands = inspiral_pipe.condor_command_dict_from_opts(options.condor_command, {"request_memory":options.request_memory, "request_cpus":options.request_cpu, "want_graceful_removal":"True", "kill_sig":"15"}))
 
 segsdict = analysis_segments(ifo, data_source_info.frame_segments, boundary_seg, max_template_length)
-trigsegsdict = trigger_segments(ifo, data_source_info.frame_segments, boundary_seg, max_template_length)
 
 #
 # ETG jobs
 #
 
-etg_nodes = etg_node_gen(gstlalETGJob, dag, [], segsdict, trigsegsdict, ifo, options, channels, data_source_info)
+etg_nodes = etg_node_gen(gstlalETGJob, dag, [], segsdict, ifo, options, channels, data_source_info)
 
 #
 # all done