diff --git a/asterisk/Asterisk_Tests.ttcn b/asterisk/Asterisk_Tests.ttcn
index 75c51e1..bb1ed90 100644
--- a/asterisk/Asterisk_Tests.ttcn
+++ b/asterisk/Asterisk_Tests.ttcn
@@ -364,7 +364,7 @@
 	setverdict(pass);
 }
 
-private function f_AMI_IMS_register(IMS_ConnHdlrPars pars) runs on test_CT
+private function f_AMI_IMS_start_register(IMS_ConnHdlrPars pars) runs on test_CT
 {
 	/* Give some time for IMS_ConnHdlr to register SIP expect. This could be done through IMS_COORD. */
 	f_sleep(1.0);
@@ -378,22 +378,38 @@
 
 	/* Trigger registration: */
 	f_ami_action_PJSIPRegister(AMI_CLIENT, mp_volte_ims_outbound_registration);
+}
 
+private altstep as_AMI_IMS_register_Auth(IMS_ConnHdlrPars pars, boolean resync := false) runs on test_CT
+{
 	var charstring rand_str := oct2str(pars.subscr.auth.rand);
 	var charstring autn_str := oct2str(pars.subscr.auth.autn);
-	AMI_CLIENT.receive(tr_AMI_Event_AuthRequest(mp_volte_ims_outbound_registration,
+	[not resync] AMI_CLIENT.receive(tr_AMI_Event_AuthRequest(mp_volte_ims_outbound_registration,
 						    rand := pattern @nocase rand_str,
-						    autn := pattern @nocase autn_str));
+						    autn := pattern @nocase autn_str)) {
+		f_ami_action_AuthResponse_RES(AMI_CLIENT,
+					mp_volte_ims_outbound_registration,
+					f_str_tolower(oct2str(pars.subscr.auth.res)),
+					f_str_tolower(oct2str(pars.subscr.auth.ck)),
+					f_str_tolower(oct2str(pars.subscr.auth.ik)));
 
-	f_ami_action_AuthResponse_RES(AMI_CLIENT,
-				      mp_volte_ims_outbound_registration,
-				      f_str_tolower(oct2str(pars.subscr.auth.res)),
-				      f_str_tolower(oct2str(pars.subscr.auth.ck)),
-				      f_str_tolower(oct2str(pars.subscr.auth.ik)));
+		AMI_CLIENT.receive(tr_AMI_Event_Registry(f_sip_SipAddr_to_str(pars.subscr.local_sip_record),
+							"sip:" & mp_ims_domain,
+							"Registered"));
+	}
+	[resync] AMI_CLIENT.receive(tr_AMI_Event_AuthRequest(mp_volte_ims_outbound_registration,
+						    rand := pattern @nocase rand_str,
+						    autn := pattern @nocase autn_str)) {
+		f_ami_action_AuthResponse_AUTS(AMI_CLIENT,
+				mp_volte_ims_outbound_registration,
+				f_str_tolower(oct2str(pars.subscr.auth.auts)));
+	}
+}
 
-	AMI_CLIENT.receive(tr_AMI_Event_Registry(f_sip_SipAddr_to_str(pars.subscr.local_sip_record),
-						 "sip:" & mp_ims_domain,
-						 "Registered"));
+private function f_AMI_IMS_register(IMS_ConnHdlrPars pars, boolean resync := false) runs on test_CT
+{
+	f_AMI_IMS_start_register(pars);
+	as_AMI_IMS_register_Auth(pars, resync := resync);
 }
 
 private function f_AMI_IMS_unregister(IMS_ConnHdlrPars pars) runs on test_CT
@@ -404,7 +420,7 @@
 						"Unregistered"));
 }
 
-/* Test SIP registration of local clients */
+/* Test IMS registration of VoLTE UE */
 private function f_TC_ims_registration(charstring id) runs on IMS_ConnHdlr {
 	f_create_sip_expect(valueof(ts_SipUrl_from_Addr_Union(g_pars.subscr.registrar_sip_record.addr)));
 	as_IMS_register();
@@ -430,6 +446,34 @@
 	f_shutdown();
 }
 
+/* Test IMS registration of VoLTE UE. ISIM Resync case. */
+private function f_TC_ims_registration_resync(charstring id) runs on IMS_ConnHdlr {
+	f_create_sip_expect(valueof(ts_SipUrl_from_Addr_Union(g_pars.subscr.registrar_sip_record.addr)));
+	as_IMS_register(exp_auth_resync := true);
+	as_IMS_unregister();
+	setverdict(pass);
+}
+testcase TC_ims_registration_resync() runs on test_CT {
+	var IMS_ConnHdlrPars pars;
+	var IMS_ConnHdlr vc_conn;
+	f_init();
+	pars := f_init_IMS_ConnHdlrPars();
+	vc_conn := f_start_handler_IMS(refers(f_TC_ims_registration_resync), pars);
+
+	/* Emulate first Auth sync failure: */
+	f_AMI_IMS_register(pars, resync := true);
+	/* Second auth goes well: */
+	as_AMI_IMS_register_Auth(pars, resync := false);
+	/* Stay registered for one second */
+	f_sleep(1.0);
+
+	/* Trigger unregistration: */
+	f_AMI_IMS_unregister(pars);
+
+	vc_conn.done;
+	f_shutdown();
+}
+
 /* Test SIP registration of local clients */
 private function f_TC_ims_call_mo(charstring id) runs on IMS_ConnHdlr {
 	f_create_sip_expect(valueof(ts_SipUrl_from_Addr_Union(g_pars.subscr.registrar_sip_record.addr)));
@@ -568,6 +612,7 @@
 	execute( TC_internal_call_all_3registered() );
 	execute( TC_internal_call_all_4registered() );
 	execute( TC_ims_registration() );
+	execute( TC_ims_registration_resync() );
 	execute( TC_ims_call_mo() );
 	execute( TC_ims_call_mt() );
 }
diff --git a/asterisk/IMS_ConnectionHandler.ttcn b/asterisk/IMS_ConnectionHandler.ttcn
index 9f7d0f1..7b26980 100644
--- a/asterisk/IMS_ConnectionHandler.ttcn
+++ b/asterisk/IMS_ConnectionHandler.ttcn
@@ -65,7 +65,8 @@
 	OCT16 autn,
 	OCT8 res,
 	OCT16 ck,
-	OCT16 ik
+	OCT16 ik,
+	OCT14 auts
 }
 
 type record IMS_ConnHdlrSubscrPars {
@@ -104,6 +105,7 @@
 	uint16_t local_sip_port,
 	SipUrl registrar_sip_req_uri,
 	Via local_via,
+	Server server_name,
 	IMS_ConnHdlrSubscrPars subscr optional
 }
 type record of IMS_ConnHdlrPars IMS_ConnHdlrParsList;
@@ -175,7 +177,10 @@
 		autn := 'd42e61db5f15800067393a5b7691a227'O,
 		res := '6f2556bbe4366ab1'O,
 		ck := '0b389d08c833991734936bec55cac800'O,
-		ik := '17141862125bd30c81c4224391a0909a'O
+		ik := '17141862125bd30c81c4224391a0909a'O,
+		/* NOTE: AUTS value randomly crafted. It's fine since it's just forwarded
+		 *       AMI -> asterisk -> IMS and we blindly match and accept it. */
+		auts := 'd42e61db5f15800067393a5b7691'O
 	},
 	ipsec_auth_key := "0x17141862125bd30c81c4224391a0909a00000000",
 	ipsec_local_spi_c := 4142,
@@ -209,6 +214,7 @@
 	local_sip_port := local_sip_port,
 	registrar_sip_req_uri := valueof(ts_SipUrlHost(domain)),
 	local_via := ts_Via_from(ts_HostPort(local_sip_host, local_sip_port)),
+	server_name := valueof(ts_Server({c_sip_server_name})),
 	subscr := t_IMS_SubscrPars(local_sip_host, local_sip_port, domain := domain, imsi := imsi, cp := cp)
 }
 
@@ -393,6 +399,18 @@
 	    "local_spi_c=", g_pars.subscr.ipsec_local_spi_c, " local_spi_s=", g_pars.subscr.ipsec_local_spi_s);
 }
 
+private function f_ims_parse_register_contact(Contact contact) runs on IMS_ConnHdlr
+{
+	var HostPort hp := valueof(contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec.hostPort);
+
+	g_pars.subscr.remote_sip_host := hp.host;
+	if (ispresent(hp.portField)) {
+		g_pars.subscr.remote_sip_port := hp.portField;
+	} else {
+		g_pars.subscr.remote_sip_port := 5060;
+	}
+}
+
 private function f_IMS_exec_sync(charstring cmdline, template (present) integer rc := 0)
 		runs on IMS_ConnHdlr return ASP_PResult {
 	var ASP_PResult res;
@@ -480,8 +498,44 @@
 	return sdp;
 }
 
+private function f_gen_Security_server() runs on IMS_ConnHdlr return Security_server {
+		var template (value) Security_server security_server;
+		/* Security-Server: ipsec-3gpp;q=0.1;prot=esp;mod=trans;spi-c=4096;spi-s=4097;port-c=5104;port-s=6104;alg=hmac-sha-1-96;ealg=null */
+		var template (value) SemicolonParam_List sec_params := {
+			ts_Param("q", "0.1"),
+			ts_Param("prot", "esp"),
+			ts_Param("mod", "trans"),
+			ts_Param("spi-c", int2str(g_pars.subscr.ipsec_local_spi_c)),
+			ts_Param("spi-s", int2str(g_pars.subscr.ipsec_local_spi_s)),
+			ts_Param("port-c", int2str(g_pars.local_sip_port)),
+			ts_Param("port-s", int2str(g_pars.local_sip_port)),
+			ts_Param("alg", "hmac-sha-1-96"),
+			ts_Param("ealg", "null")
+		};
+		security_server := ts_Security_server({
+			ts_Security_mechanism("ipsec-3gpp", sec_params)
+		});
+		return valueof(security_server);
+}
+
+private function f_gen_WwwAuthenticate() runs on IMS_ConnHdlr return WwwAuthenticate {
+	var template (value) WwwAuthenticate wwwAuthenticate;
+	var template (value) CommaParam_List digestCln;
+	digestCln := {
+		ts_Param("realm", f_sip_str_quote(g_pars.realm)),
+		ts_Param("qop", f_sip_str_quote("auth")),
+		ts_Param("algorithm", "AKAv1-MD5"),
+		ts_Param("nonce", f_sip_str_quote(f_nonce_from_rand_autn(g_pars.subscr.auth.rand,
+									 g_pars.subscr.auth.autn)))
+		/* "opaque not needed in IMS "*/
+	};
+	wwwAuthenticate := ts_WwwAuthenticate( { ts_Challenge_digestCln(digestCln) } );
+	return valueof(wwwAuthenticate);
+}
+
 /* Peer is issuing 1st register, accept it: */
-altstep as_IMS_register(boolean fail_others := true) runs on IMS_ConnHdlr
+altstep as_IMS_register(boolean exp_auth_resync := false,
+			boolean fail_others := true) runs on IMS_ConnHdlr
 {
 	var template (present) PDU_SIP_Request exp_req :=
 		tr_SIP_REGISTER(g_pars.registrar_sip_req_uri,
@@ -500,18 +554,13 @@
 		var template (value) PDU_SIP_Response tx_resp;
 		var Via via;
 		var CallidString sip_call_id;
-		var Contact contact;
 		var template (value) From from_addr;
 		var template (value) To to_addr;
-		var template (value) CommaParam_List digestCln ;
-		var template (value) WwwAuthenticate wwwAuthenticate;
-		var template (value) Security_server security_server;
-		var template (value) Server server_name := ts_Server({c_sip_server_name});
+		var WwwAuthenticate wwwAuthenticate;
+		var Security_server security_server;
 		var template (value) Require require := ts_Require({"sec-agree"});
 		var template (value) Supported supported := ts_Supported({"sec-agree"});
-		var template (present) Authorization authorization;
 		var integer sip_seq_nr;
-		var charstring tx_sdp;
 
 		sip_call_id := g_rx_sip_req.msgHeader.callId.callid;
 		via := g_rx_sip_req.msgHeader.via;
@@ -520,9 +569,17 @@
 		to_addr := g_rx_sip_req.msgHeader.toField;
 		sip_seq_nr := g_rx_sip_req.msgHeader.cSeq.seqNumber;
 
-		contact := g_rx_sip_req.msgHeader.contact;
-		f_ims_validate_register_contact(contact);
-		g_pars.subscr.registered_contact := contact;
+		/* Tx 100 Tyring */
+		tx_resp := ts_SIP_Response_Trying(sip_call_id,
+					from_addr,
+					to_addr,
+					via,
+					sip_seq_nr,
+					"REGISTER",
+					allow := omit,
+					server := g_pars.server_name,
+					userAgent := omit);
+		SIP.send(tx_resp);
 
 		/* Validate P-Access-Network-Info: rfc7315 6.4:
 		 * "3GPP will use the P-Access-Network-Info header field to
@@ -534,55 +591,19 @@
 		 */
 		f_ims_validate_register_P_Access_Network_info(g_rx_sip_req, exp_present := false);
 
-		/* Tx 100 Tyring */
-		tx_resp := ts_SIP_Response_Trying(sip_call_id,
-					from_addr,
-					to_addr,
-					via,
-					sip_seq_nr,
-					"REGISTER",
-					allow := omit,
-					server := server_name,
-					userAgent := omit);
-		SIP.send(tx_resp);
-
-		var HostPort hp := valueof(contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec.hostPort);
-		g_pars.subscr.remote_sip_host := hp.host;
-		if (ispresent(hp.portField)) {
-			g_pars.subscr.remote_sip_port := hp.portField;
-		} else {
-			g_pars.subscr.remote_sip_port := 5060;
-		}
+		f_ims_validate_register_contact(g_rx_sip_req.msgHeader.contact);
+		f_ims_parse_register_contact(g_rx_sip_req.msgHeader.contact);
 		f_ims_parse_security_client(g_rx_sip_req.msgHeader.security_client);
-		f_ims_setup_ipsec();
+
+		if (not exp_auth_resync) {
+			/* Delay ipsec setup in ip xfrm, since there will be another
+			* 1st REGISTER with potentially new ports coming in later. */
+			f_ims_setup_ipsec();
+		}
 
 		to_addr.toParams := f_sip_param_set(to_addr.toParams, "tag", f_sip_rand_tag());
-
-		digestCln := {
-			ts_Param("realm", f_sip_str_quote(g_pars.realm)),
-			ts_Param("qop", f_sip_str_quote("auth")),
-			ts_Param("algorithm", "AKAv1-MD5"),
-			ts_Param("nonce", f_sip_str_quote(f_nonce_from_rand_autn(g_pars.subscr.auth.rand,
-										 g_pars.subscr.auth.autn)))
-			/* "opaque not needed in IMS "*/
-		};
-		wwwAuthenticate := ts_WwwAuthenticate( { ts_Challenge_digestCln(digestCln) } )
-
-		/* Security-Server: ipsec-3gpp;q=0.1;prot=esp;mod=trans;spi-c=4096;spi-s=4097;port-c=5104;port-s=6104;alg=hmac-sha-1-96;ealg=null */
-		var template (value) SemicolonParam_List sec_params := {
-			ts_Param("q", "0.1"),
-			ts_Param("prot", "esp"),
-			ts_Param("mod", "trans"),
-			ts_Param("spi-c", int2str(g_pars.subscr.ipsec_local_spi_c)),
-			ts_Param("spi-s", int2str(g_pars.subscr.ipsec_local_spi_s)),
-			ts_Param("port-c", int2str(g_pars.local_sip_port)),
-			ts_Param("port-s", int2str(g_pars.local_sip_port)),
-			ts_Param("alg", "hmac-sha-1-96"),
-			ts_Param("ealg", "null")
-		};
-		security_server := ts_Security_server({
-			ts_Security_mechanism("ipsec-3gpp", sec_params)
-		});
+		wwwAuthenticate := f_gen_WwwAuthenticate();
+		security_server := f_gen_Security_server();
 
 		/* Tx 401 Unauthorized */
 		tx_resp := ts_SIP_Response_Unauthorized(sip_call_id,
@@ -594,23 +615,103 @@
 					"REGISTER",
 					p_associated_uri := g_pars.subscr.p_associated_uri,
 					security_server := security_server,
-					server := server_name,
+					server := g_pars.server_name,
 					supported := supported,
 					userAgent := omit);
 		SIP.send(tx_resp);
 
+		if (exp_auth_resync) {
+			/* Now we should receive a new non-protected REGISTER
+			 * with Authoritzation containing auts in base64: */
+			var template (present) Authorization authorization :=
+				f_tr_Authorization_AKAv1MD5(wwwAuthenticate,
+							    g_pars.subscr.imsi & "@" & g_pars.realm,
+							    f_sip_SipUrl_to_str(g_pars.registrar_sip_req_uri));
+			exp_req :=
+			tr_SIP_REGISTER(g_pars.registrar_sip_req_uri,
+					?,
+					tr_From(),
+					tr_To(),
+					tr_Via_from(f_tr_HostPort(via.viaBody[0].sentBy.host, via.viaBody[0].sentBy.portField)),
+					authorization := authorization);
+			SIP.receive(exp_req) -> value g_rx_sip_req;
+
+			via := g_rx_sip_req.msgHeader.via;
+			from_addr := g_rx_sip_req.msgHeader.fromField;
+			to_addr := g_rx_sip_req.msgHeader.toField;
+			sip_seq_nr := g_rx_sip_req.msgHeader.cSeq.seqNumber;
+
+			/* Tx 100 Tyring */
+			tx_resp := ts_SIP_Response_Trying(sip_call_id,
+						from_addr,
+						to_addr,
+						via,
+						sip_seq_nr,
+						"REGISTER",
+						allow := omit,
+						server := g_pars.server_name,
+						userAgent := omit);
+			SIP.send(tx_resp);
+
+			f_sip_param_match_value_or_fail(g_rx_sip_req.msgHeader.authorization.body.digestResponse,
+							"auts", f_sip_str_quote(enc_MIME_Base64(g_pars.subscr.auth.auts)));
+			f_ims_validate_register_P_Access_Network_info(g_rx_sip_req, exp_present := false);
+			f_ims_validate_register_contact(g_rx_sip_req.msgHeader.contact);
+			f_ims_parse_register_contact(g_rx_sip_req.msgHeader.contact);
+			f_ims_parse_security_client(g_rx_sip_req.msgHeader.security_client);
+			f_ims_setup_ipsec();
+
+			security_server := f_gen_Security_server();
+
+			/* Tx again 401 Unauthorized, this time our AMI interface will accept it: */
+			tx_resp := ts_SIP_Response_Unauthorized(sip_call_id,
+						from_addr,
+						to_addr,
+						via,
+						wwwAuthenticate,
+						sip_seq_nr,
+						"REGISTER",
+						p_associated_uri := g_pars.subscr.p_associated_uri,
+						security_server := security_server,
+						server := g_pars.server_name,
+						supported := supported,
+						userAgent := omit);
+			SIP.send(tx_resp);
+		}
+
 		/* Now we should receive a new REGISTER over ipsec: */
-		authorization := f_tr_Authorization_AKAv1MD5(valueof(wwwAuthenticate),
-							     g_pars.subscr.imsi & "@" & g_pars.realm,
-							     f_sip_SipUrl_to_str(g_pars.registrar_sip_req_uri));
-		exp_req :=
+		as_IMS_2nd_register(wwwAuthenticate);
+	}
+	[fail_others] as_SIP_fail_resp(sip_expect_str);
+	[fail_others] as_SIP_fail_req(sip_expect_str);
+
+}
+
+/* Peer is issuing 2nd register, accept it: */
+altstep as_IMS_2nd_register(WwwAuthenticate wwwAuthenticate, boolean fail_others := true) runs on IMS_ConnHdlr
+{
+	var template (present) Authorization authorization :=
+		f_tr_Authorization_AKAv1MD5(wwwAuthenticate,
+					    g_pars.subscr.imsi & "@" & g_pars.realm,
+					    f_sip_SipUrl_to_str(g_pars.registrar_sip_req_uri));
+	var template (present) PDU_SIP_Request exp_req :=
 		tr_SIP_REGISTER(g_pars.registrar_sip_req_uri,
 				?,
 				tr_From(),
 				tr_To(),
 				tr_Via_from(f_tr_HostPort(g_pars.subscr.remote_sip_host, g_pars.subscr.ipsec_remote_port_s)),
 				authorization := authorization);
-		SIP.receive(exp_req) -> value g_rx_sip_req;
+	var charstring sip_expect_str := log2str(exp_req);
+
+	[] SIP.receive(exp_req) -> value g_rx_sip_req {
+		var template (value) PDU_SIP_Response tx_resp;
+		var Via via;
+		var CallidString sip_call_id;
+		var template (value) From from_addr;
+		var template (value) To to_addr;
+		var template (value) Require require := ts_Require({"sec-agree"});
+		var template (value) Supported supported := ts_Supported({"sec-agree"});
+		var integer sip_seq_nr;
 
 		sip_call_id := g_rx_sip_req.msgHeader.callId.callid;
 		via := g_rx_sip_req.msgHeader.via;
@@ -626,7 +727,7 @@
 					sip_seq_nr,
 					"REGISTER",
 					allow := omit,
-					server := server_name,
+					server := g_pars.server_name,
 					userAgent := omit);
 		SIP.send(tx_resp);
 
@@ -645,6 +746,9 @@
 									  scheme := "tel"))),
 				ts_P_Assoc_uri_spec(g_rx_sip_req.msgHeader.toField.addressField.nameAddr)
 			}));
+		f_ims_validate_register_contact(g_rx_sip_req.msgHeader.contact);
+		f_ims_parse_register_contact(g_rx_sip_req.msgHeader.contact);
+		g_pars.subscr.registered_contact := g_rx_sip_req.msgHeader.contact;
 
 		/* Tx 200 OK */
 		to_addr.toParams := f_sip_param_set(to_addr.toParams, "tag", f_sip_rand_tag());
@@ -657,14 +761,13 @@
 			via,
 			p_associated_uri := g_pars.subscr.p_associated_uri,
 			require := require,
-			server := server_name,
+			server := g_pars.server_name,
 			supported := supported,
 			userAgent := omit);
 		SIP.send(tx_resp);
 	}
 	[fail_others] as_SIP_fail_resp(sip_expect_str);
 	[fail_others] as_SIP_fail_req(sip_expect_str);
-
 }
 
 /* Peer wants to unregister, accept it: */
@@ -693,12 +796,10 @@
 		var template (value) CommaParam_List digestCln ;
 		var template (value) WwwAuthenticate wwwAuthenticate;
 		var template (value) Security_server security_server;
-		var template (value) Server server_name := ts_Server({c_sip_server_name});
 		var template (value) Require require := ts_Require({"sec-agree"});
 		var template (value) Supported supported := ts_Supported({"sec-agree"});
 		var template (present) Authorization authorization;
 		var integer sip_seq_nr;
-		var charstring tx_sdp;
 
 		sip_call_id := g_rx_sip_req.msgHeader.callId.callid;
 		via := g_rx_sip_req.msgHeader.via;
@@ -727,7 +828,7 @@
 					sip_seq_nr,
 					"REGISTER",
 					allow := omit,
-					server := server_name,
+					server := g_pars.server_name,
 					userAgent := omit);
 		SIP.send(tx_resp);
 
@@ -748,7 +849,7 @@
 			contact := contact,
 			p_associated_uri := g_pars.subscr.p_associated_uri,
 			require := require,
-			server := server_name,
+			server := g_pars.server_name,
 			supported := supported,
 			userAgent := omit);
 		SIP.send(tx_resp);
diff --git a/asterisk/expected-results.xml b/asterisk/expected-results.xml
index 44d6c01..0c9cdd8 100644
--- a/asterisk/expected-results.xml
+++ b/asterisk/expected-results.xml
@@ -2,10 +2,11 @@
 <testsuite name='Titan' tests='9' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'>
   <testcase classname='Asterisk_Tests' name='TC_internal_registration' time='MASKED'/>
   <testcase classname='Asterisk_Tests' name='TC_internal_call_momt' time='MASKED'/>
-    <testcase classname='Asterisk_Tests' name='TC_internal_call_all_2registered' time='MASKED'/>
-    <testcase classname='Asterisk_Tests' name='TC_internal_call_all_3registered' time='MASKED'/>
-    <testcase classname='Asterisk_Tests' name='TC_internal_call_all_4registered' time='MASKED'/>
-    <testcase classname='Asterisk_Tests' name='TC_ims_registration' time='MASKED'/>
-    <testcase classname='Asterisk_Tests' name='TC_ims_call_mo' time='MASKED'/>
-    <testcase classname='Asterisk_Tests' name='TC_ims_call_mt' time='MASKED'/>
+  <testcase classname='Asterisk_Tests' name='TC_internal_call_all_2registered' time='MASKED'/>
+  <testcase classname='Asterisk_Tests' name='TC_internal_call_all_3registered' time='MASKED'/>
+  <testcase classname='Asterisk_Tests' name='TC_internal_call_all_4registered' time='MASKED'/>
+  <testcase classname='Asterisk_Tests' name='TC_ims_registration' time='MASKED'/>
+  <testcase classname='Asterisk_Tests' name='TC_ims_registration_resync' time='MASKED'/>
+  <testcase classname='Asterisk_Tests' name='TC_ims_call_mo' time='MASKED'/>
+  <testcase classname='Asterisk_Tests' name='TC_ims_call_mt' time='MASKED'/>
 </testsuite>
