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() );
 }
 
diff --git a/library/GTPv2_Templates.ttcn b/library/GTPv2_Templates.ttcn
index afe0138..9f242ee 100644
--- a/library/GTPv2_Templates.ttcn
+++ b/library/GTPv2_Templates.ttcn
@@ -671,6 +671,13 @@
 	pTI_Value := pti,
 	additionalOctets := omit
 }
+private function f_ts_GTP2C_ProcTransId_omit(template (omit) integer pti)
+return template (omit) ProcedureTransactionID {
+	if (istemplatekind(pti, "omit")) {
+		return omit;
+	}
+	return ts_GTP2C_ProcTransId(pti);
+}
 template (present) ProcedureTransactionID
 tr_GTP2C_ProcTransId(template (present) integer pti) := {
 	elementIdentifier := '64'O,
@@ -725,7 +732,35 @@
 	additionalOctets := *
 }
 
-
+/* 8.62 Fully qualified PDN Connection Set Identifier (FQ-CSID) */
+template (value) NodeID ts_GTP2C_FQCSID_NodeID_IPv4(template (value) OCT4 addr) := {
+	globalUnicastIPv4 := addr
+}
+template (value) FullyQualifiedPDN_ConnectionSetID
+ts_GTP2C_FQCSID(template (value) integer nRofCSIDs,
+		template (value) integer nodeIDType,
+		template (value) NodeID nodeID,
+		template (value) PDN_CSID_List pDN_CSID_List,
+		template (value) uint4_t instance := 0) := {
+	elementIdentifier := '84'O,
+	lengthIndicator := 0, /* overwritten */
+	instance := int2bit(valueof(instance), 4),
+	spare := '0000'B,
+	nRofCSIDs := nRofCSIDs,
+	nodeIDType := nodeIDType,
+	nodeID := nodeID,
+	pDN_CSID_List := pDN_CSID_List,
+	additionalOctets := omit
+}
+template (value) FullyQualifiedPDN_ConnectionSetID
+ts_GTP2C_FQCSID_IPv4(template (value) OCT4 addr,
+		     template (value) OCT2 csid,
+		     template (value) uint4_t instance := 0) :=
+ts_GTP2C_FQCSID(nRofCSIDs := 1,
+		nodeIDType := 0,
+		nodeID := ts_GTP2C_FQCSID_NodeID_IPv4(addr),
+		pDN_CSID_List := {csid},
+		instance := instance);
 
 
 template (value) PDU_GTPCv2 ts_PDU_GTP2C(template (omit) OCT4 teid, template (value) OCT3 seq,
@@ -1068,33 +1103,19 @@
 
 template (value) PDU_GTPCv2
 ts_GTP2C_CreateBearerReq(template (value) OCT4 d_teid,
-			 template (value) integer proc_trans_id,
+			 template (omit) integer proc_trans_id,
 			 template (value) uint4_t linked_id,
 			 template (value) uint4_t bearer_id,
-			 template (omit) FullyQualifiedTEID_List teid_list,
+			 template (value) BearerContextGrouped_List bearer_ctx_list,
+			 template (omit) FullyQualifiedPDN_ConnectionSetID_List csid := omit,
 			 template (value) Bearer_QoS qos := ts_GTP2C_BearerQos('09'O, 0,0,0,0)) :=
 ts_PDU_GTP2C(d_teid, '000000'O, '5F'O, {
 	createBearerRequest := {
-		procedureTransactionID := ts_GTP2C_ProcTransId(proc_trans_id),
+		procedureTransactionID := f_ts_GTP2C_ProcTransId_omit(proc_trans_id),
 		linkedEPS_BearerID := ts_GTP2C_EpsBearerId(linked_id),
 		protocolConfigOptions := omit,
-		bearerContextGrouped := {
-			ts_GTP2C_BcGrouped({
-				ePS_Bearer_ID := ts_GTP2C_EpsBearerId(bearer_id),
-				cause := omit,
-				ePS_Bearer_TFT := omit,
-				fullyQualifiedTEID := teid_list,
-				bearerLevel_QoS := qos,
-				chargingID := omit,
-				bearerFlags := omit,
-				transactionIdentifier := omit,
-				protocolConfigOptions := omit,
-				rAN_NASCause := omit,
-				additionalProtocolConfigOptions := omit,
-				extendedProtocolConfigOptions := omit
-				})
-		},
-		csid := omit,
+		bearerContextGrouped := bearer_ctx_list,
+		csid := csid,
 		changeReportingAction := omit,
 		cSG_InformationReportingAction := omit,
 		heNBInformationReporting := omit,
@@ -1105,6 +1126,30 @@
 		nBIFOMContainer := omit,
 		privateExtension := omit
 	}});
+template (present) PDU_GTPCv2
+tr_GTP2C_CreateBearerResp(template (present) OCT4 d_teid,
+			   template (present) OCT3 seq := ?,
+			   template (present) GTP2C_Cause cause := ?
+			) :=
+tr_PDU_GTP2C(d_teid, seq, {
+	createBearerResponse := {
+		cause := tr_GTP2C_Cause(cause),
+		bearerContextGrouped := *,
+		recovery := *,
+		csid := *,
+		protocolConfigOptions := *,
+		uE_TimeZone := *,
+		uLI := *,
+		trustedWLANAccessNetworkIdentifier := *,
+		overloadControlInformationGrouped := *,
+		presenceReportingAreaInformation := *,
+		iP_Addr := *,
+		wLANLocationTimestamp := *,
+		portNumber := *,
+		nBIFOMContainer := *,
+		extendedProtocolConfigOptions := *,
+		privateExtension:= *
+	}});
 
 template (present) PDU_GTPCv2
 tr_GTP2C_ModifyBearerReq(template (present) OCT4 d_teid := ?,
