diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 074fa60..d15b2ec 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -5226,11 +5226,15 @@
 }
 
 private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr {
-	var template PDU_ML3_NW_MS exp_rr_rel_tmpl := tr_RRM_RR_RELEASE;
+	var template PDU_ML3_NW_MS exp_rr_rel_tmpl;
 	var template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := omit;
 	if (not istemplatekind(g_pars.last_used_eutran_plmn, "omit")) {
 		oldToNewBSSIEs := f_ts_BSSMAP_oldToNewBSSIEs(ts_BSSMAP_LastUsedEUTRANPLMNId(g_pars.last_used_eutran_plmn));
+	}
+	if (g_pars.exp_fast_return) {
 		exp_rr_rel_tmpl := tr_RRM_RR_RELEASE_CellSelectInd;
+	} else {
+		exp_rr_rel_tmpl := tr_RRM_RR_RELEASE;
 	}
 	f_ho_into_this_bsc(id, oldToNewBSSIEs);
 	f_perform_clear(RSL, exp_rr_rel_tmpl);
@@ -5278,10 +5282,26 @@
 testcase TC_srvcc_eutran_to_geran() runs on test_CT {
 	var TestHdlrParams pars := f_gen_test_hdlr_pars();
 	pars.last_used_eutran_plmn := '323454'O;
+	pars.exp_fast_return := true;
 	f_tc_ho_into_this_bsc_main(pars);
 	f_shutdown_helper();
 }
 
+/* Same as TC_srvcc_eutran_to_geran, but test explicitly forbiding fast return
+   on the BTS. As a result, RR Release shouldn't contain the EUTRAN neighbor
+   list when the channel is released. */
+testcase TC_srvcc_eutran_to_geran_forbid_fast_return() runs on test_CT {
+	f_init_vty();
+	f_vty_allow_srvcc_fast_return(true, 0)
+
+	var TestHdlrParams pars := f_gen_test_hdlr_pars();
+	pars.last_used_eutran_plmn := '323454'O;
+	pars.exp_fast_return := false;
+	f_tc_ho_into_this_bsc_main(pars);
+	f_vty_allow_srvcc_fast_return(false, 0);
+	f_shutdown_helper();
+}
+
 private function f_tc_srvcc_eutran_to_geran_ho_out(charstring id) runs on MSC_ConnHdlr {
 	var template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs;
 	oldToNewBSSIEs := f_ts_BSSMAP_oldToNewBSSIEs(ts_BSSMAP_LastUsedEUTRANPLMNId(g_pars.last_used_eutran_plmn));
@@ -5289,15 +5309,16 @@
 	f_ho_out_of_this_bsc(oldToNewBSSIEs);
 	setverdict(pass);
 }
-/* First, HO into BSC from EUTRAN (SRVCC): HO Request contains "Old BSS to New
-   BSS Information" IE with "Last Used E-UTRAN PLMN Id".
-   Second, HO to another BSC: HO Required contains "Old BSS to New BSS Information"
-   IE with "Last Used E-UTRAN PLMN Id" from first step. */
-testcase TC_srvcc_eutran_to_geran_ho_out() runs on test_CT {
+
+private function f_tc_srvcc_eutran_to_geran_ho_out_main(boolean disable_fast_return)
+	runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
 	var TestHdlrParams pars := f_gen_test_hdlr_pars();
 
 	f_init(1, true);
+	if (disable_fast_return) {
+		f_vty_allow_srvcc_fast_return(true, 0);
+	}
 	f_sleep(1.0);
 
 	f_ctrs_bsc_and_bts_init();
@@ -5316,9 +5337,26 @@
 	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted", 1);
 	f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:completed", 1);
 	f_ctrs_bsc_and_bts_verify();
+
+	if (disable_fast_return) {
+		f_vty_allow_srvcc_fast_return(false, 0);
+	}
 	f_shutdown_helper();
 }
 
+/* First, HO into BSC from EUTRAN (SRVCC): HO Request contains "Old BSS to New
+   BSS Information" IE with "Last Used E-UTRAN PLMN Id".
+   Second, HO to another BSC: HO Required contains "Old BSS to New BSS Information"
+   IE with "Last Used E-UTRAN PLMN Id" from first step. */
+testcase TC_srvcc_eutran_to_geran_ho_out() runs on test_CT {
+	f_tc_srvcc_eutran_to_geran_ho_out_main(false);
+}
+/* Validate subsequent intra-GSM-HO works the same (with OldBSSToNewBSSInfo IE)
+ * independently of fast-reture allowed/forbidden in local BTS */
+testcase TC_srvcc_eutran_to_geran_ho_out_forbid_fast_return() runs on test_CT {
+	f_tc_srvcc_eutran_to_geran_ho_out_main(true);
+}
+
 private function f_tc_ho_in_fail_msc_clears(charstring id) runs on MSC_ConnHdlr {
 	var RslChannelNr new_chan_nr := valueof(t_RslChanNr0(1, RSL_CHAN_NR_Bm_ACCH));
 	f_rslem_register(0, new_chan_nr);
@@ -7306,6 +7344,19 @@
 	f_vty_transceive(BSCVTY, "exit");
 }
 
+/* Allow/Forbid Fast Return after SRVCC on a given BTS via VTY */
+private function f_vty_allow_srvcc_fast_return(boolean allow, integer bts_nr) runs on test_CT {
+	f_vty_enter_cfg_bts(BSCVTY, bts_nr);
+	if (allow) {
+		f_vty_transceive(BSCVTY, "srvcc fast-return allow");
+	} else {
+		f_vty_transceive(BSCVTY, "srvcc fast-return forbid");
+	}
+	f_vty_transceive(BSCVTY, "exit");
+	f_vty_transceive(BSCVTY, "exit");
+	f_vty_transceive(BSCVTY, "exit");
+}
+
 /* Begin assignmet procedure and send an EMERGENCY SETUP (RR) */
 private function f_assignment_emerg_setup() runs on MSC_ConnHdlr {
 	var PDU_ML3_MS_NW emerg_setup;
@@ -8950,6 +9001,8 @@
 	}
 	execute( TC_srvcc_eutran_to_geran() );
 	execute( TC_srvcc_eutran_to_geran_ho_out() );
+	execute( TC_srvcc_eutran_to_geran_forbid_fast_return() );
+	execute( TC_srvcc_eutran_to_geran_ho_out_forbid_fast_return() );
 	execute( TC_ho_in_fail_msc_clears() );
 	execute( TC_ho_in_fail_msc_clears_after_ho_detect() );
 	execute( TC_ho_in_fail_no_detect() );
