diff --git a/gstlal-ugly/gst/lal/gstlal_interpolator.c b/gstlal-ugly/gst/lal/gstlal_interpolator.c
index 0fe97d21007ce1d37fec0cf749a59888f7356792..acb68b477c526a08063919afb7fef0fa1ffea37e 100644
--- a/gstlal-ugly/gst/lal/gstlal_interpolator.c
+++ b/gstlal-ugly/gst/lal/gstlal_interpolator.c
@@ -334,8 +334,6 @@ static gboolean set_caps (GstBaseTransform * base, GstCaps * incaps, GstCaps * o
 	g_return_val_if_fail(gst_structure_get_int (outstruct, "rate", &outrate), FALSE);
 
 	g_return_val_if_fail(inchannels == outchannels, FALSE);
-	// enable downsampling too
-	//g_return_val_if_fail(outrate >= inrate, FALSE);
 	g_return_val_if_fail(outrate % inrate == 0, FALSE);
 
 	element->inrate = inrate;
@@ -353,7 +351,8 @@ static gboolean set_caps (GstBaseTransform * base, GstCaps * incaps, GstCaps * o
 	element->need_pretend = TRUE;
 
 	if (element->upkernel)
-		free(element->upkernel);
+		for (guint i = 0; i < element->outrate / element->inrate; i++)
+			gsl_vector_float_free(element->upkernel[i]);
 	element->upkernel = upkernel(element->half_length, element->outrate / element->inrate);
 
 	/*