diff --git a/gstlal/bin/gstlal_plot_psd_horizon b/gstlal/bin/gstlal_plot_psd_horizon
index d38802d3c11ffc9302e32944e656f9fed8b29499..72db22cb07629a3bf61a2eb15759eefbc16105ba 100755
--- a/gstlal/bin/gstlal_plot_psd_horizon
+++ b/gstlal/bin/gstlal_plot_psd_horizon
@@ -22,13 +22,8 @@
 
 
 from optparse import OptionParser
-import matplotlib
-matplotlib.use('Agg')
-from matplotlib import pyplot
-import numpy
 
-from gstlal.plots import util as plotutil
-from gstlal.psd import read_psd, HorizonDistance
+from gstlal.plots import horizon
 
 
 def parse_command_line():
@@ -44,35 +39,5 @@ def parse_command_line():
 
 options, filenames = parse_command_line()
 
-
-horizons = {}
-times = {}
-for f in filenames:
-	psds = read_psd(f, verbose=True)
-	for ifo, psd in psds.items():
-		if psd is not None:
-			times.setdefault(ifo, []).append(int(psd.epoch))
-			horizons.setdefault(ifo, []).append(HorizonDistance(10., 2048., psd.deltaF, 1.4, 1.4)(psd, 8.)[0])
-
-pyplot.figure(figsize=(12,4))
-pyplot.subplot(121)
-minh, maxh = (float("inf"), 0)
-mint = min([min(t) for t in times.values() if t])
-for ifo in horizons:
-	if len(horizons[ifo]) > 0:
-		pyplot.semilogy((numpy.array(times[ifo]) - mint) / 1000., horizons[ifo], 'x', color = plotutil.colour_from_instruments([ifo]), label = ifo)
-		maxh = max(maxh, max(horizons[ifo]))
-		minh = min(minh, min(horizons[ifo]))
-#pyplot.legend()
-pyplot.xlabel('Time (ks) from GPS %d' % mint)
-pyplot.ylabel('Mpc')
-pyplot.grid()
-pyplot.subplot(122)
-binvec = numpy.linspace(minh, maxh, 25)
-for ifo in horizons:
-	if len(horizons[ifo]) > 0:
-		pyplot.hist(horizons[ifo], binvec, color = plotutil.colour_from_instruments([ifo]), alpha = 0.5, label = ifo)
-pyplot.legend()
-pyplot.xlabel("Mpc")
-pyplot.ylabel("Count")
-pyplot.savefig(options.output)
+horizon_distance = horizon.HorizonDistance.from_psds(filenames)
+horizon_distance.savefig(options.output)