diff --git a/gstlal-ugly/python/metric.py b/gstlal-ugly/python/metric.py
index 101fd8b235467f30c6b2bd542b38cb7a100dd2e6..eb8937e86f509de4f0f8072d8ab3c4957d37d9ad 100644
--- a/gstlal-ugly/python/metric.py
+++ b/gstlal-ugly/python/metric.py
@@ -140,8 +140,8 @@ class Metric(object):
 			mc = (m1*m2)**.6 / (m1+m2)**.2 * 5e-6
 			return  1./numpy.pi / mc * (5./256. * mc / 1.)**(3./8.)
 
-		#flow = self.flow
-		flow = max(min(fmin(p[0], p[1]), self.flow), 10)
+		flow = self.flow
+		#flow = max(min(fmin(p[0], p[1]), self.flow), 10)
 
 		try:
 			parameters = {}
@@ -211,27 +211,19 @@ class Metric(object):
 		# get the positive side of the central difference
 		plus_match = self.match(w1, self.waveform(center+x))
 		if plus_match is None:
-			print "\nhere plus\n"
-			center += 31.159*x
-			plus_match = self.match(w1, self.waveform(center))
-			#return self.__set_diagonal_metric_tensor_component(i, center, deltas * 2, g, w1)
-		factor = 4 * numpy.finfo(numpy.float32).eps / (1. - plus_match)
-		x *= factor**.5
-		plus_match = self.match(w1, self.waveform(center+x))
+			# random new nearby point
+			return self.__set_diagonal_metric_tensor_component(i, center + numpy.abs(numpy.random.randn()) * x, deltas, g, w1)
 
 		# get the negative side of the central difference
 		minus_match = self.match(w1, self.waveform(center-x))
 		if minus_match is None:
-			print "\nhere negative\n"
-			minus_match = self.match(w1, self.waveform(center-31.159*x))
-			#return self.__set_diagonal_metric_tensor_component(i, center, deltas * 2, g, w1)
+			# random new nearby point
+			return self.__set_diagonal_metric_tensor_component(i, center + numpy.abs(numpy.random.randn()) * x, deltas, g, w1)
 
-		# second order
-		d2mbydx2 = (plus_match + minus_match - 2.0) / x[i]**2
 		# fourth order
-		#minus_match2 = self.match(w1, self.waveform(center-2*x))
-		#plus_match2 = self.match(w1, self.waveform(center+2*x))
-		#d2mbydx2 = (4./3. * (plus_match + minus_match) - 1./12. * (plus_match2 + minus_match2) - 5./2.) / x[i]**2
+		minus_match2 = self.match(w1, self.waveform(center-2*x))
+		plus_match2 = self.match(w1, self.waveform(center+2*x))
+		d2mbydx2 = (4./3. * (plus_match + minus_match) - 1./12. * (plus_match2 + minus_match2) - 5./2.) / x[i]**2
 
 		# - 1/2 the second partial derivative
 		g[i,i] = -0.5 * d2mbydx2
@@ -248,37 +240,24 @@ class Metric(object):
 		# evaluate symmetrically
 		if j <= i:
 			return None
-		# NOTE: SECOND ORDER, BUT NEEDED IF USING FOURTH ORDER FOR DIAG
-		# xmm = numpy.zeros(len(deltas))
-		# xmp = numpy.zeros(len(deltas))
-		# xpm = numpy.zeros(len(deltas))
-		# xpp = numpy.zeros(len(deltas))
-
-		# xmm[i] = -deltas[i]
-		# xmm[j] = -deltas[j]
-		# xmp[i] = -deltas[i]
-		# xmp[j] = +deltas[j]
-		# xpm[i] = +deltas[i]
-		# xpm[j] = -deltas[j]
-		# xpp[i] = +deltas[i]
-		# xpp[j] = +deltas[j]
-
-		# d2mbydxdy = (self.match(w1, self.waveform(center+xmm)) + self.match(w1, self.waveform(center+xpp)) - self.match(w1, self.waveform(center+xmp)) - self.match(w1, self.waveform(center+xpm))) / 4. / xpp[i] / xpp[j]
-
-		# g[i,j] = g[j,i] = -0.5 * d2mbydxdy
-		# return None
-
-		# NOTE: SECOND ORDER, ASSUMES SECOND ORDER FOR DIAG
-		x = numpy.zeros(len(deltas))
-		x[i] = deltas[i]
-		x[j] = deltas[j]
-		fii = -2 * g[i,i] * deltas[i]**2 + 2.0
-		fjj = -2 * g[j,j] * deltas[j]**2 + 2.0
-
 		# Second order
-		plus_match = self.match(w1, self.waveform(center+x))
-		minus_match = self.match(w1, self.waveform(center-x))
-		g[i,j] = g[j,i] = -0.5 * (plus_match + minus_match - fii - fjj + 2.0) / 2 / deltas[i] / deltas[j]
+		xmm = numpy.zeros(len(deltas))
+		xmp = numpy.zeros(len(deltas))
+		xpm = numpy.zeros(len(deltas))
+		xpp = numpy.zeros(len(deltas))
+
+		xmm[i] = -deltas[i]
+		xmm[j] = -deltas[j]
+		xmp[i] = -deltas[i]
+		xmp[j] = +deltas[j]
+		xpm[i] = +deltas[i]
+		xpm[j] = -deltas[j]
+		xpp[i] = +deltas[i]
+		xpp[j] = +deltas[j]
+
+		d2mbydxdy = (self.match(w1, self.waveform(center+xmm)) + self.match(w1, self.waveform(center+xpp)) - self.match(w1, self.waveform(center+xmp)) - self.match(w1, self.waveform(center+xpm))) / 4. / xpp[i] / xpp[j]
+
+		g[i,j] = g[j,i] = -0.5 * d2mbydxdy
 		return None
 
 	def __set_offdiagonal_time_metric_tensor_component(self, j, center, deltas, g, g_tt, delta_t, w1):
@@ -295,33 +274,30 @@ class Metric(object):
 		minus_match = self.match(w1, self.waveform(center-x), dt="neg")
 		return -0.5 * (plus_match + minus_match - ftt - fjj + 2.0) / 2 / delta_t / deltas[j]
 
-		#d2 = 1 - self.match(w1, self.waveform(center+x), dt = "pos")
-		#return  (d2 - g_tt * delta_t**2 - g[j,j] * deltas[j]**2) / 2 / delta_t / deltas[j]
-
-	#def __call__(self, center, deltas = None, thresh = 1. * numpy.finfo(numpy.float32).eps):
 	def __call__(self, center, deltas = None, thresh = 1. * numpy.finfo(numpy.float32).eps):
 
 		g = numpy.zeros((len(center), len(center)), dtype=numpy.double)
 		w1 = self.waveform(center)
 		g_tt, delta_t = self.__set_tt_metric_tensor_component(center, w1)
+
 		# First get the diagonal components
 		deltas = numpy.array([self.__set_diagonal_metric_tensor_component(i, center, deltas, g, w1) for i in range(len(center))])
+
 		# Then the rest
 		[self.__set_offdiagonal_metric_tensor_component(ij, center, deltas, g, w1) for ij in itertools.product(range(len(center)), repeat = 2)]
 		g_tj = [self.__set_offdiagonal_time_metric_tensor_component(j, center, deltas, g, g_tt, delta_t, w1) for j in range(len(deltas))]
+
 		# project out the time component Owen 2.28
 		for i, j in itertools.product(range(len(deltas)), range(len(deltas))):
 			g[i,j] = g[i,j] -  g_tj[i] * g_tj[j] / g_tt
+
+		# find effective dimension
 		U, S, V = numpy.linalg.svd(g)
 		condition = S < max(S) * thresh
-		#condition = numpy.logical_or((S < 1), (S < max(S) * thresh))
-		#w, v = numpy.linalg.eigh(g)
-		#mxw = numpy.max(w)
-		#condition = w < mxw * thresh
 		eff_dimension = len(S) - len(S[condition])
 		S[condition] = 0.0
-		#print "singular values", S, numpy.product(S[S>0])
 		g = numpy.dot(U, numpy.dot(numpy.diag(S), V))
+
 		return g, eff_dimension, numpy.product(S[S>0])