diff --git a/epdg/EPDG_Tests.ttcn b/epdg/EPDG_Tests.ttcn
index e5cdafd..14bb060 100644
--- a/epdg/EPDG_Tests.ttcn
+++ b/epdg/EPDG_Tests.ttcn
@@ -488,6 +488,47 @@
 	}
 }
 
+/* Expect CreateBearerResponse */
+private altstep as_GTP2C_CreateBearer_success() runs on EPDG_ConnHdlr {
+	var PDU_GTPCv2 rx_msg;
+
+	[] GTP2.receive(tr_GTP2C_CreateBearerResp(g_pars.teic_local)) -> value rx_msg {
+		setverdict(pass);
+	}
+	[] GTP2.receive(PDU_GTPCv2:?) -> value rx_msg {
+		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Unexpected GTP2C msg rx: ", rx_msg));
+	}
+}
+private function f_GTP2C_CreateBearer_success(uint4_t dedicated_bearer_id := 6) runs on EPDG_ConnHdlr {
+
+	var template (value) FullyQualifiedTEID fteid_u_ie := ts_GTP2C_FTEID(FTEID_IF_S2bU_ePDG_GTPU, g_pars.bearer.teid_local, dedicated_bearer_id,
+							    f_inet_addr(mp_s2b_local_ip), omit);
+	var template (value) FullyQualifiedTEID_List teid_list := { fteid_u_ie };
+
+	var template (value) FullyQualifiedPDN_ConnectionSetID pgw_fq_csid := ts_GTP2C_FQCSID_IPv4(f_inet_addr(mp_s2b_local_ip), int2oct(dedicated_bearer_id, 2));
+	var template (value) FullyQualifiedPDN_ConnectionSetID_List csid_list := { pgw_fq_csid };
+
+	var template (value) BearerContextGrouped_List bcg_list := {
+			ts_GTP2C_BcGrouped({
+				ePS_Bearer_ID := ts_GTP2C_EpsBearerId(dedicated_bearer_id),
+				cause := omit,
+				ePS_Bearer_TFT := omit,
+				fullyQualifiedTEID := teid_list,
+				bearerLevel_QoS := ts_GTP2C_BearerQos('09'O, 0,0,0,0),
+				chargingID := ts_GTP2C_ChargingID(f_rnd_octstring(4)),
+				bearerFlags := omit,
+				transactionIdentifier := omit,
+				protocolConfigOptions := omit,
+				rAN_NASCause := omit,
+				additionalProtocolConfigOptions := omit,
+				extendedProtocolConfigOptions := omit
+				})
+	};
+	GTP2.send(ts_GTP2C_CreateBearerReq(g_pars.teic_remote, omit, g_pars.bearer.ebi,
+					   dedicated_bearer_id, bcg_list, csid_list));
+	as_GTP2C_CreateBearer_success();
+}
+
 /* Expect DeleteBearerResponse */
 private altstep as_GTP2C_DeleteBearer_success() runs on EPDG_ConnHdlr {
 	var PDU_GTPCv2 rx_msg;
@@ -618,6 +659,23 @@
 	setverdict(pass);
 }
 
+private function f_TC_ho_lte_to_wifi(charstring id) runs on EPDG_ConnHdlr {
+	f_initial_attach();
+	/* Whenever UE comes from 3GPP, PGW may activate a dedicated S2b bearer
+	 * and notify ePDG with a Create Bearer Request */
+	f_GTP2C_CreateBearer_success();
+	f_GSUP_PurgeMS_success();
+}
+
+testcase TC_ho_lte_to_wifi() runs on MTC_CT {
+	var EPDG_ConnHdlrPars pars := f_init_pars();
+	var EPDG_ConnHdlr vc_conn;
+	f_init();
+	vc_conn := f_start_handler(refers(f_TC_ho_lte_to_wifi), pars);
+	vc_conn.done;
+	setverdict(pass);
+}
+
 private function f_TC_ho_wifi_to_lte(charstring id) runs on EPDG_ConnHdlr {
 	f_initial_attach();
 	/* Whenever UE goes back to 3GPP, PGW will notify ePDG with a Delete Bearer Request
@@ -636,6 +694,7 @@
 
 control {
 	execute ( TC_authinfo_normal() );
+	execute ( TC_ho_lte_to_wifi() );
 	execute ( TC_ho_wifi_to_lte() );
 }
 
