diff --git a/hnbgw/HNBGW_Tests.ttcn b/hnbgw/HNBGW_Tests.ttcn
index 959fe87..314b0df 100644
--- a/hnbgw/HNBGW_Tests.ttcn
+++ b/hnbgw/HNBGW_Tests.ttcn
@@ -758,11 +758,15 @@
 	return mgcp_resp;
 }
 
-friend function f_create_rab(MgcpParameters pars) runs on ConnHdlr {
+friend function f_create_rab(inout MgcpParameters pars) runs on ConnHdlr {
+	f_rab_ass_req(pars);
+	f_rab_ass_resp(pars);
+}
+
+friend function f_rab_ass_req(inout MgcpParameters pars) runs on ConnHdlr {
 	var MgcpCommand mgcp_cmd;
 	var RANAP_PDU tx;
 	var template RAB_SetupOrModifyList rab_sml;
-	var template RAB_SetupOrModifiedList rab_smdl;
 	timer T := 5.0;
 
 	/* Send RAB Assignment Request */
@@ -795,6 +799,13 @@
 		setverdict(fail, "Timeout waiting for Iuh ", tx);
 		}
 	}
+}
+
+friend function f_rab_ass_resp(inout MgcpParameters pars) runs on ConnHdlr {
+	var MgcpCommand mgcp_cmd;
+	var RANAP_PDU tx;
+	var template RAB_SetupOrModifiedList rab_smdl;
+	timer T := 5.0;
 
 	/* Send back RAB Assignment Response via Iuh */
 	rab_smdl := ts_RAB_SMdL(t_RAB_id(23), f_ts_RAB_TLA(pars.hnb_rtp_ip), t_RAB_binding_port(pars.hnb_rtp_port));
@@ -842,7 +853,7 @@
 		log("DLCX", mgcp_cmd);
 		MGCP.send(ts_DLCX_ACK2(mgcp_cmd.line.trans_id));
 		pars.mgcp_pars.got_dlcx_count := pars.mgcp_pars.got_dlcx_count + 1;
-		if (pars.mgcp_pars.got_dlcx_count == 1) {
+		if (pars.mgcp_pars.got_dlcx_count != pars.mgcp_pars.got_crcx_count) {
 			repeat;
 		}
 		setverdict(pass);
@@ -887,6 +898,41 @@
 	vc_conn.done;
 }
 
+friend function f_tc_rab_assign_fail(charstring id, TestHdlrParams pars) runs on ConnHdlr {
+	var MgcpCommand mgcp_cmd;
+	var RANAP_PDU tx;
+	timer T := 5.0;
+
+	f_init_handler(pars);
+	f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit});
+
+	tx := f_build_initial_ue(g_pars);
+	f_iuh2iu_connect(tx);
+
+	f_rab_ass_req(pars.mgcp_pars);
+
+	/* Send RAB failed list in response */
+	tx := valueof(ts_RANAP_RabAssResp(rab_fl := ts_RAB_FL(t_RAB_id(23), ts_RanapCause_om_intervention)));
+	f_iuh2iu(tx);
+
+	T.start;
+	alt {
+	[] as_mgcp_dlcx(pars) {}
+	[] T.timeout {
+		setverdict(fail, "Timeout waiting for DLCX");
+	}
+	}
+}
+
+testcase TC_rab_assign_fail() runs on test_CT {
+	var ConnHdlr vc_conn;
+	f_init();
+	f_start_hnbs();
+
+	vc_conn := f_start_handler_with_pars(refers(f_tc_rab_assign_fail), t_pars(4));
+	vc_conn.done;
+}
+
 friend function f_tc_rab_release(charstring id, TestHdlrParams pars) runs on ConnHdlr {
 	var MgcpCommand mgcp_cmd;
 	var RANAP_PDU tx;
@@ -1012,6 +1058,7 @@
 	execute(TC_ranap_ps_bidir());
 	execute(TC_rab_assignment());
 	execute(TC_rab_release());
+	execute(TC_rab_assign_fail());
 	execute(TC_ranap_cs_mo_disconnect());
 	execute(TC_ranap_ps_mo_disconnect());
 }
