diff --git a/asterisk/AMI_Functions.ttcn b/asterisk/AMI_Functions.ttcn
index 16cf71f..d31d316 100644
--- a/asterisk/AMI_Functions.ttcn
+++ b/asterisk/AMI_Functions.ttcn
@@ -27,7 +27,9 @@
 
 const charstring AMI_FIELD_ACTION := "Action";
 const charstring AMI_FIELD_ACTION_ID := "ActionID";
+const charstring AMI_FIELD_CHANNEL := "Channel";
 const charstring AMI_FIELD_CHAN_TYPE := "ChannelType";
+const charstring AMI_FIELD_CONTEXT := "Context";
 const charstring AMI_FIELD_DOMAIN := "Domain";
 const charstring AMI_FIELD_EVENT := "Event";
 const charstring AMI_FIELD_INFO := "Info";
@@ -88,8 +90,12 @@
 template (value) AMI_Field
 ts_AMI_Field_ActionId(template (value) charstring val) := ts_AMI_Field(AMI_FIELD_ACTION_ID, val);
 template (value) AMI_Field
+ts_AMI_Field_Channel(template (value) charstring val) := ts_AMI_Field(AMI_FIELD_CHANNEL, val);
+template (value) AMI_Field
 ts_AMI_Field_ChannelType(template (value) charstring val) := ts_AMI_Field(AMI_FIELD_CHAN_TYPE, val);
 template (value) AMI_Field
+ts_AMI_Field_Context(template (value) charstring val) := ts_AMI_Field(AMI_FIELD_CONTEXT, val);
+template (value) AMI_Field
 ts_AMI_Field_Domain(template (value) charstring val) := ts_AMI_Field(AMI_FIELD_DOMAIN, val);
 template (value) AMI_Field
 ts_AMI_Field_Event(template (value) charstring val) := ts_AMI_Field(AMI_FIELD_EVENT, val);
@@ -124,8 +130,12 @@
 template (present) AMI_Field
 tr_AMI_Field_ActionId(template (present) charstring val := ?) := tr_AMI_Field(pattern @nocase AMI_FIELD_ACTION_ID, val);
 template (present) AMI_Field
+tr_AMI_Field_Channel(template (present) charstring val := ?) := tr_AMI_Field(pattern @nocase AMI_FIELD_CHANNEL, val);
+template (present) AMI_Field
 tr_AMI_Field_ChannelType(template (present) charstring val := ?) := tr_AMI_Field(pattern @nocase AMI_FIELD_CHAN_TYPE, val);
 template (present) AMI_Field
+tr_AMI_Field_Context(template (present) charstring val := ?) := tr_AMI_Field(pattern @nocase AMI_FIELD_CONTEXT, val);
+template (present) AMI_Field
 tr_AMI_Field_Domain(template (present) charstring val := ?) := tr_AMI_Field(pattern @nocase AMI_FIELD_DOMAIN, val);
 template (present) AMI_Field
 tr_AMI_Field_Event(template (present) charstring val := ?) := tr_AMI_Field(pattern @nocase AMI_FIELD_EVENT, val);
@@ -203,6 +213,21 @@
 	ts_AMI_Field_IK(ik)
 };
 
+/* Action: DedicatedBearerStatus
+ * ActionID: <value>
+ * Channel: <value>
+ * Status: <value>
+ */
+template (value) AMI_Msg
+ts_AMI_Action_DedicatedBearerStatus(template (value) charstring channel,
+				    template (value) charstring status,
+				    template (value) charstring action_id := "0001") := {
+	ts_AMI_Field_Action("DedicatedBearerStatus"),
+	ts_AMI_Field_ActionId(action_id),
+	ts_AMI_Field_Channel(channel),
+	ts_AMI_Field_Status(status)
+};
+
 /* Action: Login
  * Username: <value>
  * Secret: <value>
@@ -357,6 +382,44 @@
 	tr_AMI_Field_Status(status)
 );
 
+/* Event: Newchannel
+ * Privilege: call,all
+ * Channel: PJSIP/volte_ims-00000001
+ * ChannelState: 0
+ * ChannelStateDesc: Down
+ * CallerIDNum: <unknown>
+ * CallerIDName: <unknown>
+ * ConnectedLineNum: <unknown>
+ * ConnectedLineName: <unknown>
+ * Language: en
+ * AccountCode:
+ * Context: volte_ims
+ * Exten: s
+ * Priority: 1
+ * Uniqueid: 1718732522.1
+ * LinkEvent: Newstate
+ * Privilege: call,all
+ * Channel: PJSIP/volte_ims-00000001
+ * ChannelState: 5
+ * ChannelStateDesc: Ringing
+ * CallerIDNum: 90829
+ * CallerIDName: <unknown>
+ * ConnectedLineNum: 0501
+ * ConnectedLineName: <unknown>
+ * Language: en
+ * AccountCode:
+ * Context: volte_ims
+ * Exten: 90829
+ * Priority: 1
+ * Uniqueid: 1718732522.1
+ * Linkedid: 1718732522.0
+ */
+template (present) AMI_Msg
+tr_AMI_Event_Newchannel(template (present) charstring context := ?) := superset(
+	tr_AMI_Field_Event("Newchannel"),
+	tr_AMI_Field_Context(context)
+);
+
 /***********************
  * Adapter:
  ***********************/
@@ -625,34 +688,39 @@
 	[fail_others] as_ami_rx_fail(pt, msg_expect);
 }
 
+function f_ami_wait_rx_msg(AMI_Msg_PT pt,
+			   template (present) AMI_Msg msg_expect := ?,
+			   boolean fail_others := true,
+			   float rx_timeout := 10.0) return AMI_Msg {
+	var AMI_Msg ami_msg;
+	timer tAMI;
+
+	tAMI.start(rx_timeout);
+	alt {
+	[] pt.receive(msg_expect) -> value ami_msg;
+	[not fail_others] as_ami_rx_ignore(pt);
+	[fail_others] as_ami_rx_fail(pt, msg_expect);
+	[] tAMI.timeout {
+		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
+					log2str("AMI msg timeout: ", msg_expect));
+		}
+	}
+	tAMI.stop;
+	return ami_msg;
+}
+
 function f_ami_transceive_match(AMI_Msg_PT pt,
 				template (value) AMI_Msg tx_msg,
 				template (present) AMI_Msg exp_ret := ?,
 				boolean fail_others := true,
 				float rx_timeout := 10.0) return AMI_Msg {
-	var AMI_Msg rx_msg;
-	timer T;
-
-	T.start(rx_timeout);
 	pt.send(tx_msg);
-	alt {
-	[] pt.receive(exp_ret) -> value rx_msg;
-	[not fail_others] pt.receive(AMI_Msg:?) -> value rx_msg {
-		log("AMI: Ignoring Rx msg ", rx_msg);
-		repeat;
-	}
-	[fail_others] as_ami_rx_fail(pt, exp_ret);
-	[] T.timeout {
-		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
-					log2str("AMI Response timeout: ", tx_msg));
-		}
-	}
-	T.stop;
-	return rx_msg;
+	return f_ami_wait_rx_msg(pt, exp_ret, fail_others, rx_timeout);
 }
 
 function f_ami_transceive_match_response_success(AMI_Msg_PT pt,
-						 template (value) AMI_Msg tx_msg) {
+						 template (value) AMI_Msg tx_msg,
+						 boolean fail_others := true) {
 	var template (present) AMI_Msg exp_resp;
 	var template (omit) charstring action_id := f_ami_msg_get_value(valueof(tx_msg), AMI_FIELD_ACTION_ID);
 	if (isvalue(action_id)) {
@@ -660,7 +728,7 @@
 	} else {
 		exp_resp := tr_AMI_Response_Success;
 	}
-	f_ami_transceive_match(pt, tx_msg, exp_resp);
+	f_ami_transceive_match(pt, tx_msg, exp_resp, fail_others := fail_others);
 }
 
 function f_ami_action_login(AMI_Msg_PT pt, charstring username, charstring secret) {
@@ -675,6 +743,15 @@
 	f_ami_transceive_match_response_success(pt, ts_AMI_Action_PJSIPAccessNetworkInfo(registration, info, reg_action_id));
 }
 
+function f_ami_action_DedicatedBearerStatus(AMI_Msg_PT pt,
+					    template (value) charstring channel,
+					    template (value) charstring status,
+					    boolean fail_others := true) {
+	var charstring reg_action_id := f_gen_action_id();
+	f_ami_transceive_match_response_success(pt, ts_AMI_Action_DedicatedBearerStatus(channel, status, reg_action_id),
+						fail_others := fail_others);
+}
+
 function f_ami_action_PJSIPRegister(AMI_Msg_PT pt, charstring register) {
 	var charstring reg_action_id := f_gen_action_id();
 	f_ami_transceive_match_response_success(pt, ts_AMI_Action_PJSIPRegister(register, reg_action_id));
diff --git a/asterisk/Asterisk_Tests.ttcn b/asterisk/Asterisk_Tests.ttcn
index 596848b..cee7adc 100644
--- a/asterisk/Asterisk_Tests.ttcn
+++ b/asterisk/Asterisk_Tests.ttcn
@@ -581,6 +581,7 @@
 	var IMS_ConnHdlrPars ims_pars;
 	var SIPConnHdlr vc_conn_sip;
 	var IMS_ConnHdlr vc_conn_ims;
+	var AMI_Msg ami_msg;
 	const charstring c_ext_msisdn := "90829";
 
 	f_init();
@@ -597,6 +598,7 @@
 							ts_UserInfo(c_ext_msisdn)));
 	ims_pars.subscr.cp.support_precondition_ext := use_precondition_ext;
 	ims_pars.subscr.cp.require_precondition_ext := use_precondition_ext;
+	ims_pars.subscr.cp.mo.tx_coord_cmd_invite_trying := true;
 
 	vc_conn_ims := f_start_handler_IMS(refers(f_TC_ims_call_mo_IMS_ConnHdlr), ims_pars);
 	vc_conn_sip := f_start_handler(refers(f_TC_internal_call_mo), sip_pars);
@@ -606,11 +608,18 @@
 	f_AMI_IMS_register(ims_pars);
 
 	COORD.send(COORD_CMD_START) to vc_conn_sip;
+
+	IMS_COORD.receive(IMS_COORD_CMD_CALL_TRYING) from vc_conn_ims;
+	ami_msg := f_ami_wait_rx_msg(AMI_CLIENT,
+				     tr_AMI_Event_Newchannel(mp_volte_ims_outbound_registration),
+				     fail_others := false);
+	f_ami_action_DedicatedBearerStatus(AMI_CLIENT,
+					   f_ami_msg_get_value(ami_msg, AMI_FIELD_CHANNEL),
+					   "Up", fail_others := false);
+
 	COORD.receive(COORD_CMD_CALL_ESTABLISHED) from vc_conn_sip;
 	IMS_COORD.receive(COORD_CMD_CALL_ESTABLISHED) from vc_conn_ims;
 
-	/* TODO: "Action: DedicatedBearerStatus" */
-
 	/* Call on-going */
 	f_sleep(1.0);
 
@@ -655,6 +664,7 @@
 	var IMS_ConnHdlrPars ims_pars;
 	var SIPConnHdlr vc_conn_sip;
 	var IMS_ConnHdlr vc_conn_ims;
+	var AMI_Msg ami_msg;
 	const charstring c_ext_msisdn := "90829";
 
 	f_init();
@@ -672,6 +682,7 @@
 							 ts_UserInfo(ims_pars.subscr.msisdn)));
 	ims_pars.subscr.cp.support_precondition_ext := use_precondition_ext;
 	ims_pars.subscr.cp.require_precondition_ext := use_precondition_ext;
+	ims_pars.subscr.cp.mt.tx_coord_cmd_session_progress := use_precondition_ext;
 
 	vc_conn_ims := f_start_handler_IMS(refers(f_TC_ims_call_mt_IMS_ConnHdlr), ims_pars);
 	vc_conn_sip := f_start_handler(refers(f_TC_internal_call_mt), sip_pars);
@@ -682,11 +693,20 @@
 	IMS_COORD.receive(IMS_COORD_CMD_REGISTERED) from vc_conn_ims;
 
 	IMS_COORD.send(IMS_COORD_CMD_START) to vc_conn_ims;
+
+	ami_msg := f_ami_wait_rx_msg(AMI_CLIENT,
+				     tr_AMI_Event_Newchannel(mp_volte_ims_outbound_registration),
+				     fail_others := false);
+	if (ims_pars.subscr.cp.mt.tx_coord_cmd_session_progress) {
+		IMS_COORD.receive(IMS_COORD_CMD_CALL_SESSION_PROGRESS) from vc_conn_ims;
+	}
+	f_ami_action_DedicatedBearerStatus(AMI_CLIENT,
+					   f_ami_msg_get_value(ami_msg, AMI_FIELD_CHANNEL),
+					   "Up", fail_others := false);
+
 	IMS_COORD.receive(IMS_COORD_CMD_CALL_ESTABLISHED) from vc_conn_ims;
 	COORD.receive(COORD_CMD_CALL_ESTABLISHED) from vc_conn_sip;
 
-	/* TODO: "Action: DedicatedBearerStatus" */
-
 	/* Call on-going */
 	f_sleep(1.0);
 
diff --git a/asterisk/IMS_ConnectionHandler.ttcn b/asterisk/IMS_ConnectionHandler.ttcn
index dd3223c..7a9f11f 100644
--- a/asterisk/IMS_ConnectionHandler.ttcn
+++ b/asterisk/IMS_ConnectionHandler.ttcn
@@ -47,6 +47,8 @@
 const charstring IMS_COORD_CMD_START := "IMS_COORD_CMD_START";
 const charstring IMS_COORD_CMD_CALL_ESTABLISHED := "IMS_COORD_CMD_CALL_ESTABLISHED";
 const charstring IMS_COORD_CMD_HANGUP := "IMS_COORD_CMD_HANGUP";
+const charstring IMS_COORD_CMD_CALL_TRYING := "IMS_COORD_CMD_CALL_TRYING";
+const charstring IMS_COORD_CMD_CALL_SESSION_PROGRESS := "IMS_COORD_CMD_CALL_SESSION_PROGRESS";
 
 type component IMS_ConnHdlr extends SIP_ConnHdlr {
 	var charstring g_name;
@@ -113,15 +115,20 @@
 }
 type record of IMS_ConnHdlrPars IMS_ConnHdlrParsList;
 
+type record IMS_CallParsMO {
+	/* Whether to COORD.send(IMS_COORD_CMD_CALL_TRYING) when receiving an INVITE from UE. */
+	boolean tx_coord_cmd_invite_trying
+}
+template (value) IMS_CallParsMO t_IMS_CallParsMO := {
+	tx_coord_cmd_invite_trying := false
+}
+
 type record IMS_CallParsMT {
-	/* Whether to wait for COORD.receive(COORD_CMD_PICKUP) before accepting the call. */
-	boolean wait_coord_cmd_pickup,
-	/* Whether to expect CANCEL instead of ACK as answer to our OK */
-	boolean exp_cancel
+	/* Whether to COORD.send(IMS_COORD_CMD_CALL_SESSION_PROGRESS) when receiving an 183 Session Progress from UE. */
+	boolean tx_coord_cmd_session_progress
 }
 template (value) IMS_CallParsMT t_IMS_CallParsMT := {
-	wait_coord_cmd_pickup := false,
-	exp_cancel := false
+	tx_coord_cmd_session_progress := false
 }
 
 type record IMS_CallPars {
@@ -141,6 +148,7 @@
 	boolean support_precondition_ext,
 	boolean require_precondition_ext,
 	SDP_Message peer_sdp optional,
+	IMS_CallParsMO mo,
 	IMS_CallParsMT mt
 }
 
@@ -160,6 +168,7 @@
 	support_precondition_ext := true,
 	require_precondition_ext := false,
 	peer_sdp := omit,
+	mo := t_IMS_CallParsMO,
 	mt := t_IMS_CallParsMT
 }
 
@@ -1043,6 +1052,11 @@
 				    body := omit);
 		SIP.send(req);
 
+		if (g_pars.subscr.cp.mt.tx_coord_cmd_session_progress) {
+			/* Signal used to inform that Dedicated bearer can be established: */
+			COORD.send(IMS_COORD_CMD_CALL_SESSION_PROGRESS);
+		}
+
 		/* Rx 200 OK (PRACK) */
 		exp := tr_SIP_Response(g_pars.subscr.cp.sip_call_id,
 				       from_addr_exp,
@@ -1213,6 +1227,11 @@
 						   userAgent := omit);
 		SIP.send(tx_resp);
 
+		if (g_pars.subscr.cp.mo.tx_coord_cmd_invite_trying) {
+			/* Signal used to inform that Dedicated bearer can be established: */
+			COORD.send(IMS_COORD_CMD_CALL_TRYING);
+		}
+
 		tx_sdp := f_gen_sdp();
 
 		/* Use precondition ? */
