diff --git a/gstlal-calibration/gst/lal/gstlal_transferfunction.c b/gstlal-calibration/gst/lal/gstlal_transferfunction.c
index e77fbc84f502dcc1035739f09af792556133dba6..3deae37174e74cc97f3dfcc36aae7340697f3b2c 100644
--- a/gstlal-calibration/gst/lal/gstlal_transferfunction.c
+++ b/gstlal-calibration/gst/lal/gstlal_transferfunction.c
@@ -278,7 +278,7 @@ static void write_fir_filters(double *filters, char *element_name, gint64 rows,
 static gboolean update_transfer_functions_ ## DTYPE(complex DTYPE *autocorrelation_matrix, int num_tfs, gint64 fd_fft_length, gint64 fd_tf_length, DTYPE *sinc_table, gint64 sinc_length, gint64 sinc_taps_per_df, gint64 num_avg, gsl_vector_complex *transfer_functions_at_f, gsl_vector_complex *transfer_functions_solved_at_f, gsl_matrix_complex *autocorrelation_matrix_at_f, gsl_permutation *permutation, complex double *transfer_functions) { \
  \
 	gboolean success = TRUE; \
-	gint64 i, first_index, sinc_taps_per_input, sinc_taps_per_output, k, k_stop, input0, sinc0; \
+	gint64 i, sinc_taps_per_input, sinc_taps_per_output, k, k_stop, input0, sinc0; \
 	int j, j_stop, elements_per_freq, signum; \
 	complex DTYPE z; \
 	gsl_complex gslz; \
@@ -292,7 +292,6 @@ static gboolean update_transfer_functions_ ## DTYPE(complex DTYPE *autocorrelati
 	elements_per_freq = num_tfs * (1 + num_tfs); \
 	for(i = 0; i < fd_tf_length; i++) { \
 		/* First, copy samples at a specific frequency from the big autocorrelation matrix to the gsl vector transfer_functions_at_f, applying any required resampling and smoothing */ \
-		first_index = i * num_tfs * (num_tfs + 1); \
 		for(j = 0; j < num_tfs; j++) { \
 			z = 0.0; \
 			/*
@@ -300,7 +299,7 @@ static gboolean update_transfer_functions_ ## DTYPE(complex DTYPE *autocorrelati
 			 * of the sinc table or the Nyquist frequency of the transfer function.
 			 */ \
 			sinc0 = (sinc_taps_per_input - i * sinc_taps_per_output % sinc_taps_per_input) % sinc_taps_per_input; \
-			input0 = j + elements_per_freq * (i * (fd_fft_length - 1) + fd_tf_length - 2) / (fd_tf_length - 1); \
+			input0 = j + (i * (fd_fft_length - 1) + fd_tf_length - 2) / (fd_tf_length - 1) * elements_per_freq; \
 			k_stop = minimum64((sinc_taps_per_input + sinc_length / 2 - sinc0) / sinc_taps_per_input, fd_fft_length - (i * (fd_fft_length - 1) + fd_tf_length - 2) / (fd_tf_length - 1)); \
 			for(k = 0; k < k_stop; k++) \
 				z += sinc_table[sinc0 + k * sinc_taps_per_input] * autocorrelation_matrix[input0 + k * elements_per_freq]; \
@@ -318,7 +317,7 @@ static gboolean update_transfer_functions_ ## DTYPE(complex DTYPE *autocorrelati
 			 * of the sinc table or the DC component of the transfer function.
 			 */ \
 			sinc0 = 1 + (sinc_taps_per_input + i * sinc_taps_per_output - 1) % sinc_taps_per_input; \
-			input0 = j + elements_per_freq * (i * (fd_fft_length - 1) - 1) / (fd_tf_length - 1); \
+			input0 = j + (i * (fd_fft_length - 1) - 1) / (fd_tf_length - 1) * elements_per_freq; \
 			k_stop = minimum64((sinc_taps_per_input + sinc_length / 2 - sinc0) / sinc_taps_per_input, (i * (fd_fft_length - 1) - 1) / (fd_tf_length - 1)); \
 			for(k = 0; k < k_stop; k++) \
 				z += sinc_table[sinc0 + k * sinc_taps_per_input] * autocorrelation_matrix[input0 - k * elements_per_freq]; \
@@ -338,7 +337,6 @@ static gboolean update_transfer_functions_ ## DTYPE(complex DTYPE *autocorrelati
  \
 		/* Next, copy samples at a specific frequency from the big autocorrelation matrix to the gsl matrix autocorrelation_matrix_at_f, applying any required resampling and smoothing */ \
 		j_stop = num_tfs * num_tfs; \
-		first_index += num_tfs; \
 		for(j = 0; j < j_stop; j++) { \
 			z = 0.0; \
 			/*
@@ -346,7 +344,7 @@ static gboolean update_transfer_functions_ ## DTYPE(complex DTYPE *autocorrelati
 			 * of the sinc table or the Nyquist frequency of the transfer function.
 			 */ \
 			sinc0 = (sinc_taps_per_input - i * sinc_taps_per_output % sinc_taps_per_input) % sinc_taps_per_input; \
-			input0 = j + num_tfs + elements_per_freq * (i * (fd_fft_length - 1) + fd_tf_length - 2) / (fd_tf_length - 1); \
+			input0 = j + num_tfs + (i * (fd_fft_length - 1) + fd_tf_length - 2) / (fd_tf_length - 1) * elements_per_freq; \
 			k_stop = minimum64((sinc_taps_per_input + sinc_length / 2 - sinc0) / sinc_taps_per_input, fd_fft_length - (i * (fd_fft_length - 1) + fd_tf_length - 2) / (fd_tf_length - 1)); \
 			for(k = 0; k < k_stop; k++) \
 				z += sinc_table[sinc0 + k * sinc_taps_per_input] * autocorrelation_matrix[input0 + k * elements_per_freq]; \
@@ -364,7 +362,7 @@ static gboolean update_transfer_functions_ ## DTYPE(complex DTYPE *autocorrelati
 			 * of the sinc table or the DC component of the transfer function.
 			 */ \
 			sinc0 = 1 + (sinc_taps_per_input + i * sinc_taps_per_output - 1) % sinc_taps_per_input; \
-			input0 = j + num_tfs + elements_per_freq * (i * (fd_fft_length - 1) - 1) / (fd_tf_length - 1); \
+			input0 = j + num_tfs + (i * (fd_fft_length - 1) - 1) / (fd_tf_length - 1) * elements_per_freq; \
 			k_stop = minimum64((sinc_taps_per_input + sinc_length / 2 - sinc0) / sinc_taps_per_input, (i * (fd_fft_length - 1) - 1) / (fd_tf_length - 1)); \
 			for(k = 0; k < k_stop; k++) \
 				z += sinc_table[sinc0 + k * sinc_taps_per_input] * autocorrelation_matrix[input0 - k * elements_per_freq]; \
@@ -894,10 +892,11 @@ static gboolean set_caps(GstBaseSink *sink, GstCaps *caps) {
 				element->workspace.wspf.sinc_length = 1;
 				element->workspace.wspf.sinc_table = g_malloc(sizeof(*element->workspace.wspf.sinc_table));
 				*element->workspace.wspf.sinc_table = 1.0;
+				element->workspace.wspf.sinc_taps_per_df = 1;
 			} else {
 				/* 
 				 * element->workspace.wspf.sinc_taps_per_df is the number of taps per frequency bin (at the finer
-				 * frequency resolution). If fir_length is an integer multiple of divisor of fft_length, taps_per_df is 1.
+				 * frequency resolution). If fir_length is an integer multiple or divisor of fft_length, taps_per_df is 1.
 				 */
 				gint64 common_denomimator, short_length, long_length;
 				short_length = minimum64(fd_fft_length - 1, fd_fir_length - 1);
@@ -1069,6 +1068,7 @@ static gboolean set_caps(GstBaseSink *sink, GstCaps *caps) {
 				element->workspace.wdpf.sinc_length = 1;
 				element->workspace.wdpf.sinc_table = g_malloc(sizeof(*element->workspace.wdpf.sinc_table));
 				*element->workspace.wdpf.sinc_table = 1.0;
+				element->workspace.wspf.sinc_taps_per_df = 1;
 			} else {
 				/* 
 				 * element->workspace.wspf.sinc_taps_per_df is the number of taps per frequency bin (at the finer