diff --git a/gstlal-inspiral/python/stats/inspiral_lr.py b/gstlal-inspiral/python/stats/inspiral_lr.py
index d7d478d130c97ef0c56dbc3f4bea118d1b879ac2..d04fc0b7519a68fba1fd1ef377f40f0c6189d4d5 100644
--- a/gstlal-inspiral/python/stats/inspiral_lr.py
+++ b/gstlal-inspiral/python/stats/inspiral_lr.py
@@ -248,11 +248,6 @@ class LnLRDensity(snglcoinc.LnLRDensity):
 
 
 class LnSignalDensity(LnLRDensity):
-	# load/initialize an SNRPDF instance for use by all instances of
-	# this class
-	SNRPDF = inspiral_extrinsics.SNRPDF.load()
-	assert SNRPDF.snr_cutoff == LnLRDensity.snr_min
-
 	def __init__(self, *args, **kwargs):
 		super(LnSignalDensity, self).__init__(*args, **kwargs)
 
@@ -264,10 +259,9 @@ class LnSignalDensity(LnLRDensity):
 		# record of horizon distances for all instruments in the
 		# network
 		self.horizon_history = horizonhistory.HorizonHistories((instrument, horizonhistory.NearestLeafTree()) for instrument in self.instruments)
-
-	def __call__(self, segments, snrs, phase, dt, template_id, **kwargs):
 		self.InspiralExtrinsics = inspiral_extrinsics.InspiralExtrinsics(self.min_instruments)
 
+	def __call__(self, segments, snrs, phase, dt, template_id, **kwargs):
 		assert frozenset(segments) == self.instruments
 		if len(snrs) < self.min_instruments:
 			return float("-inf")
@@ -499,6 +493,7 @@ class DatalessLnSignalDensity(LnSignalDensity):
 	"""
 	def __init__(self, *args, **kwargs):
 		super(DatalessLnSignalDensity, self).__init__(*args, **kwargs)
+		self.InspiralExtrinsics = inspiral_extrinsics.InspiralExtrinsics(self.min_instruments)
 		# so we're ready to go!
 		self.add_signal_model()
 
@@ -506,10 +501,23 @@ class DatalessLnSignalDensity(LnSignalDensity):
 		# evaluate P(t) \propto number of templates
 		lnP = math.log(len(self.template_ids))
 
-		# evaluate SNR PDF.  assume all instruments have 100 Mpc
+		# Add P(instruments | horizon distances)
+		# Assume all instruments have 100 Mpc
 		# horizon distance
 		horizons = dict.fromkeys(segments, 100.)
-		lnP += self.SNRPDF.lnP_instruments(snrs.keys(), horizons, self.min_instruments) + self.SNRPDF.lnP_snrs(snrs, horizons, self.min_instruments)
+
+		try:
+			lnP += math.log(self.InspiralExtrinsics.p_of_instruments_given_horizons(snrs.keys(), horizons))
+		except ValueError:
+			# The code raises a value error when a needed horizon distance is zero
+			return float("-inf")
+
+		# Evaluate dt, dphi, snr probability
+		try:
+			lnP += math.log(self.InspiralExtrinsics.time_phase_snr(dt, phase, snrs, horizons))
+		# FIXME need to make sure this is really a math domain error
+		except ValueError:
+			return float("-inf")
 
 		# evalute the (snr, \chi^2 | snr) PDFs (same for all
 		# instruments)