diff --git a/cbc/CBC_Tests.ttcn b/cbc/CBC_Tests.ttcn
index 76fc3be..8e7e1c5 100644
--- a/cbc/CBC_Tests.ttcn
+++ b/cbc/CBC_Tests.ttcn
@@ -115,7 +115,9 @@
 		cbc_host := cbc_host,
 		cbc_sbcap_port := cbc_sbcap_port,
 		start_fn := refers(f_MME_ConnHdlr_start_fn_void),
-		exp_cbs_msg := omit
+		exp_cbs_msg := omit,
+		write_replace_warning_ind_cause := omit,
+		bcast_cell_id_list := omit
 	};
 	return pars;
 }
@@ -298,6 +300,12 @@
 
 private function f_mme_create_and_delete() runs on MME_ConnHdlr {
 	f_sbcap_handle_write_replace_warn_req(g_pars.exp_cbs_msg, 0);
+	if (ispresent(g_pars.write_replace_warning_ind_cause) and
+	    ispresent(g_pars.bcast_cell_id_list)) {
+		f_sbcap_tx_write_replace_warn_ind(0, g_pars.exp_cbs_msg,
+						  g_pars.write_replace_warning_ind_cause,
+						  g_pars.bcast_cell_id_list)
+	}
 	f_sbcap_handle_stop_warn_req(0, g_pars.exp_cbs_msg);
 }
 
@@ -411,10 +419,33 @@
 	f_shutdown_helper();
 }
 
+/* Create and delete message with MME available. MME reports
+ * Write-Replace-Warning-Indication and Stop-Warning-Indication to CBC
+ */
+testcase TC_ecbe_create_delete_mme_indication() runs on test_CT {
+	var template (value) CellId_Broadcast_List bcast_cell_id_li;
+	var template (value) CBS_Message msg := t_CBSmsg(48, 16752);
+
+	f_init(num_bsc := 0, num_mme := 1);
+
+	bcast_cell_id_li := {
+		ts_SBCAP_CellId_Broadcast_List_Item(ts_SBCAP_ECGI(f_enc_mcc_mnc('901'H, '70'H), 1234)),
+		ts_SBCAP_CellId_Broadcast_List_Item(ts_SBCAP_ECGI(f_enc_mcc_mnc('901'H, '70'H), 5678))
+	};
+	g_pars_MME[0].start_fn := refers(f_mme_create_and_delete);
+	g_pars_MME[0].exp_cbs_msg := valueof(msg);
+	g_pars_MME[0].write_replace_warning_ind_cause := SBC_AP_Cause_message_accepted;
+	g_pars_MME[0].bcast_cell_id_list := valueof(bcast_cell_id_li);
+	f_start();
+	f_create_and_delete(valueof(msg));
+	f_shutdown_helper();
+}
+
 /* Create and delete message with both BSC and MME available */
 testcase TC_ecbe_create_delete_bsc_and_mme() runs on test_CT {
 	f_init(num_bsc := 1, num_mme := 1);
 	var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success;
+	var template (value) CellId_Broadcast_List bcast_cell_id_li;
 	var template (value) CBS_Message msg := t_CBSmsg(43, 16752);
 
 	cell_list_success := ts_BSSMAP_CIL_CGI({
@@ -425,8 +456,14 @@
 	g_pars_BSC[0].start_fn := refers(f_bsc_create_and_delete);
 	g_pars_BSC[0].exp_cbs_msg := valueof(msg);
 	g_pars_BSC[0].cell_list_success := valueof(cell_list_success);
+
+	bcast_cell_id_li := {
+		ts_SBCAP_CellId_Broadcast_List_Item(ts_SBCAP_ECGI(f_enc_mcc_mnc('901'H, '70'H), 1234))
+	};
 	g_pars_MME[0].start_fn := refers(f_mme_create_and_delete);
 	g_pars_MME[0].exp_cbs_msg := valueof(msg);
+	g_pars_MME[0].write_replace_warning_ind_cause := SBC_AP_Cause_message_accepted;
+	g_pars_MME[0].bcast_cell_id_list := valueof(bcast_cell_id_li);
 	f_start();
 	f_create_and_delete(valueof(msg));
 	f_shutdown_helper();
@@ -440,6 +477,7 @@
 	execute( TC_ecbe_create_delete_lac() );
 	execute( TC_ecbe_create_delete_ci() );
 	execute( TC_ecbe_create_delete_lai() );
+	execute( TC_ecbe_create_delete_mme_indication() );
 	execute( TC_ecbe_create_delete_bsc_and_mme() );
 }
 
diff --git a/cbc/MME_ConnectionHandler.ttcn b/cbc/MME_ConnectionHandler.ttcn
index 055aaa3..fec358c 100644
--- a/cbc/MME_ConnectionHandler.ttcn
+++ b/cbc/MME_ConnectionHandler.ttcn
@@ -35,7 +35,9 @@
 	charstring cbc_host,
 	integer cbc_sbcap_port,
 	void_fn start_fn,
-	CBS_Message exp_cbs_msg optional
+	CBS_Message exp_cbs_msg optional,
+	SBC_AP_Cause write_replace_warning_ind_cause optional,
+	CellId_Broadcast_List bcast_cell_id_list optional
 };
 
 function f_MME_ConnHdlr_main(charstring id, MME_ConnHdlrPars pars) runs on MME_ConnHdlr {
@@ -53,6 +55,17 @@
 	f_SBC_AP_send(tx, idx);
 }
 
+function f_sbcap_tx_write_replace_warn_ind(integer idx := 0, CBS_Message msg,
+					   SBC_AP_Cause cause,
+					   template (value) CellId_Broadcast_List bcast_cell_id_li)
+runs on MME_ConnHdlr {
+	var template (value) SBC_AP_PDU tx;
+	tx := ts_SBCAP_WRITE_WARNING_IND(int2bit(msg.msg_id, 16),
+					 int2bit(msg.ser_nr, 16),
+					 cause, bcast_cell_id_li);
+	f_SBC_AP_send(tx, idx);
+}
+
 function f_sbcap_tx_stop_warn_resp(integer idx := 0, CBS_Message msg)
 runs on MME_ConnHdlr {
 	var template (value) SBC_AP_PDU tx;
diff --git a/library/sbcap/SBC_AP_Templates.ttcn b/library/sbcap/SBC_AP_Templates.ttcn
index d5f2471..0a9519e 100644
--- a/library/sbcap/SBC_AP_Templates.ttcn
+++ b/library/sbcap/SBC_AP_Templates.ttcn
@@ -11,6 +11,28 @@
 
 import from SBC_AP_Types all;
 
+/* 3GPP TS 36.413 9.2.1.38 */
+template (value) EUTRAN_CGI ts_SBCAP_ECGI(PLMNidentity plmn_id := '09F107'O, integer cell_id := 1) := {
+	pLMNidentity := plmn_id,
+	cell_ID := int2bit(cell_id, 28),
+	iE_Extensions := omit
+}
+
+/* 3GPP TS 36.413 9.2.1.54 */
+template (value) CellId_Broadcast_List_Item ts_SBCAP_CellId_Broadcast_List_Item(
+	template (value) EUTRAN_CGI ecgi := ts_SBCAP_ECGI()) := {
+	eCGI := ecgi,
+	iE_Extensions := omit
+}
+template (value) Broadcast_Scheduled_Area_List ts_SBCAP_Broadcast_Scheduled_Area_List(
+		template (value) CellId_Broadcast_List cell_id_li := {ts_SBCAP_CellId_Broadcast_List_Item()})
+:= {
+	cellId_Broadcast_List := cell_id_li,
+	tAI_Broadcast_List := omit,
+	emergencyAreaID_Broadcast_List := omit,
+	iE_Extensions := omit
+}
+
 template (value) SBC_AP_PDU
 ts_SBCAP_PWS_RESTART(
 			template (value) Restarted_Cell_List restart_cl,
@@ -190,6 +212,37 @@
 	}
 }
 
+/* 4.3.4.2.5 WRITE REPLACE WARNING INDICATION */
+template (value) SBC_AP_PDU
+ts_SBCAP_WRITE_WARNING_IND(template (value) BIT16 p_msg_id, template (value) BIT16 p_ser_nr,
+		       template (value) SBC_AP_Cause cause := SBC_AP_Cause_message_accepted,
+		       template (value) CellId_Broadcast_List bcast_cell_id_li := {ts_SBCAP_CellId_Broadcast_List_Item()}) := {
+	initiatingMessage := {
+		procedureCode := id_Write_Replace_Warning_Indication,
+		criticality := ignore,
+		value_ := {
+			write_Replace_Warning_Indication := {
+				protocolIEs := {
+					{
+						id := SBC_AP_Constants.id_Message_Identifier,
+						criticality := reject,
+						value_ := { Message_Identifier := p_msg_id }
+					}, {
+						id := SBC_AP_Constants.id_Serial_Number,
+						criticality := reject,
+						value_ := { Serial_Number := p_ser_nr }
+					}, {
+						id := SBC_AP_Constants.id_Broadcast_Scheduled_Area_List,
+						criticality := reject,
+						value_ := { broadcast_Scheduled_Area_List := ts_SBCAP_Broadcast_Scheduled_Area_List(bcast_cell_id_li) }
+					}
+				},
+				protocolExtensions := omit
+			}
+		}
+	}
+}
+
 /* 4.3.4.2.3 STOP WARNING REQUEST */
 template (value) SBC_AP_PDU
 ts_SBCAP_WRITE_WARNING_RESP(template (value) BIT16 p_msg_id, template (value) BIT16 p_ser_nr,
