diff --git a/gstlal/bin/gstlal_fake_frames b/gstlal/bin/gstlal_fake_frames
index ca611a57450bf9a9b73fa28261ebeeb09e683aa1..efe10220d6f6a6e94cde1b6237768ff039618f42 100644
--- a/gstlal/bin/gstlal_fake_frames
+++ b/gstlal/bin/gstlal_fake_frames
@@ -69,6 +69,7 @@ import numpy
 #	"whitened_multirate_src()" [label="whitened_multirate_src()", URL="\ref multirate_datasource.mkwhitened_multirate_src()", style=filled, color=lightgrey];
 #	capsfilter [style=filled, color=lightgrey, URL="\ref pipeparts.mkcapsfilter()"];
 #	resample [style=filled, color=lightgrey, URL="\ref pipeparts.mkresample()"];
+#	audioamplify [style=filled, color=lightgrey, URL="\ref pipeparts.mkaudioamplify()", label="audioamplify \n if --data-source=white \n in order to have unit variance \n after resampling"];
 #	lal_shift[style=filled, color=lightgrey, URL="\ref pipeparts.mkshift()", label="lal_shift \n [iff --shift provided]"];
 #	progressreport1 [URL="\ref pipeparts.mkprogressreport()", label="progressreport \n [iff --verbose provided]"];
 #	progressreport2 [style=filled, color=lightgrey, URL="\ref pipeparts.mkprogressreport()", label="progressreport \n [iff --verbose provided]"];
@@ -80,11 +81,13 @@ import numpy
 #
 #	// connect it up
 #
-#	"mkbasicsrc()" -> progressreport1-> lal_shift  -> progressreport2; 
+#	"mkbasicsrc()" -> progressreport1-> lal_shift  -> progressreport2;
 #	progressreport2 -> "whitened_multirate_src()" [label="if --whiten given"];
 #	"whitened_multirate_src()" -> lal_firbank;
 #	progressreport2 -> capsfilter [label="if --whiten not given"];
-#	capsfilter -> resample -> lal_firbank;
+#	capsfilter -> resample;
+#	resample -> audioamplify
+#	audioamplify -> lal_firbank;
 #	lal_firbank -> taginject -> lal_simulation -> framecppchannelmux -> framecppfilesink;
 # }
 # @enddot
@@ -115,7 +118,7 @@ import numpy
 # See datasource.append_options() for common command line options shared among different programs
 #
 #	+ `--shift` [int] (ns): Number of nanoseconds, \f$\tau\f$ to delay (negative) or advance (positive) the input time series \f$x\f$ relative to the output time series \f$y\f$. \f$ y(t) = x(t+\tau)\f$
-#	+ `--sample-rate` [int] (Hz): Sample rate at which to generate the data, should be less than or equal to the sample rate of the measured psds provided.  Default = 16384 Hz.
+#	+ `--sample-rate` [int] (Hz): Sample rate at which to generate the data, should be less than or equal to the sample rate of the measured psds provided.  Default = 16384 Hz, max 16384 Hz.
 # 	+ `--whiten-reference-psd` [file name]: Set the name of psd xml file to whiten the data with.
 #	+ `--whiten-track-psd` []: Calculate PSD from input data and track with time.
 #	+ `--color-psd` [file name]: Set the name of psd xml file to color the data with
@@ -152,7 +155,7 @@ def parse_command_line():
 	#
 
 	parser.add_option("--shift", metavar = "ns", help = "Number of nanoseconds to delay (negative) or advance (positive) the time stream", type = "int")
-	parser.add_option("--sample-rate", metavar = "Hz", default = 16384, type = "int", help = "Sample rate at which to generate the data, should be less than or equal to the sample rate of the measured psds provided, default = 16384 Hz")
+	parser.add_option("--sample-rate", metavar = "Hz", default = 16384, type = "int", help = "Sample rate at which to generate the data, should be less than or equal to the sample rate of the measured psds provided, default = 16384 Hz, max 16384 Hz")
 	parser.add_option("--whiten-reference-psd", metavar = "name", help = "Set the name of psd xml file to whiten the data with")
 	parser.add_option("--whiten-track-psd", action = "store_true", help = "Calculate PSD from input data and track with time.")
 	parser.add_option("--color-psd", metavar = "name", help = "Set the name of psd xml file to color the data with")
@@ -167,6 +170,9 @@ def parse_command_line():
 	# Parse options
 	#
 
+	if options.sample_rate > 16384:
+		raise ValueError("--sample-rate must be <= 16384")
+
 	options, filenames = parser.parse_args()
 	return options, filenames
 
@@ -228,10 +234,15 @@ else:
 
 if options.whiten_reference_psd or options.whiten_track_psd:
 	## 5) Set the pipeline head to a whitened data stream if requested using a multirate_datasource.mkwhitened_multirate_src()
-	head = multirate_datasource.mkwhitened_multirate_src(pipeline, head, [options.sample_rate], instrument, psd = wpsd, seekevent = gw_data_source.seekevent, track_psd = options.whiten_track_psd, unit_normalize = False)[options.sample_rate]
+	head = multirate_datasource.mkwhitened_multirate_src(pipeline, head, [options.sample_rate], instrument, psd = wpsd, seekevent = gw_data_source.seekevent, track_psd = options.whiten_track_psd)[options.sample_rate]
 else:
-	## 6) Otherwise simply add a pipeparts.mkcapsfilter()
+	## 6) Otherwise simply add a pipeparts.mkcapsfilter() and pipeparts.mkresample()
 	head = pipeparts.mkcapsfilter(pipeline, pipeparts.mkresample(pipeline, head, quality = 9), "audio/x-raw-float, rate=%d" % options.sample_rate)
+	# FIXME this is a bit hacky, should datasource.mkbasicsrc be patched to change the sample rate?
+	# FIXME don't hardcode sample rate (though this is what datasource generates for all fake data, period 
+	# Renormalize if datasource is "white"
+	if options.data_source == "white":
+		head = pipeparts.mkaudioamplify(pipeline, head, 1/math.sqrt(pipeparts.audioresample_variance_gain(9, 16384, options.sample_rate)))
 
 # Apply a coloring filter
 if options.color_psd:
@@ -243,8 +254,6 @@ if options.color_psd:
 	max_sample = int(round(1.0 / rpsd.deltaF * options.sample_rate / 2.0)) + 1
 
 	# Truncate to requested output sample rate, if it is higher than the psd provides an assert will fail later
-	# Renormalize psd to account for filter length change
-	rpsd.data = rpsd.data / (float(max_sample) / len(rpsd.data))
 	rpsd.data = rpsd.data[:max_sample]
 	
 	# create the coloring FIR kernel from reference_psd.psd_to_fir_kernel()