diff --git a/library/L1CTL_PortType.ttcn b/library/L1CTL_PortType.ttcn
index eadc74a..40a4c75 100644
--- a/library/L1CTL_PortType.ttcn
+++ b/library/L1CTL_PortType.ttcn
@@ -36,14 +36,18 @@
 	function f_L1CTL_FBSB(L1CTL_PT pt, Arfcn arfcn, L1ctlCcchMode ccch_mode := CCCH_MODE_COMBINED) {
 		timer T := 5.0;
 		for (var integer i := 0; i < 10; i := i+1) {
-			pt.send(t_L1CTL_FBSB_REQ(arfcn, t_L1CTL_FBSB_F_ALL, 0, ccch_mode, 63));
+			pt.send(ts_L1CTL_FBSB_REQ(arfcn, valueof(t_L1CTL_FBSB_F_ALL), 0, ccch_mode, 57));
 			T.start
 			alt {
-			[] pt.receive(t_L1CTL_FBSB_CONF(0)) { return; };
-			[] pt.receive(t_L1CTL_FBSB_CONF(?)) { }
-			[i == 9] pt.receive(t_L1CTL_FBSB_CONF(?)) {
+			[] pt.receive(tr_L1CTL_FBSB_CONF(0)) { return; };
+			[i >= 9] pt.receive(tr_L1CTL_FBSB_CONF(?)) {
 				setverdict(fail, "FBSB Failed with non-zero return code");
+				self.stop;
 				};
+			[] pt.receive(tr_L1CTL_FBSB_CONF(?)) {
+				pt.send(t_L1ctlResetReq(L1CTL_RES_T_FULL));
+				pt.receive;
+				}
 			[] pt.receive { repeat; };
 			[] T.timeout { setverdict(fail, "Timeout in FBSB") };
 			}
@@ -55,9 +59,9 @@
 		var GsmFrameNumber fn;
 		timer T := 2.0;
 		T.start
-		pt.send(t_L1CTL_RACH_REQ(ra, combined, offset))
+		pt.send(ts_L1CTL_RACH_REQ(ra, combined, offset))
 		alt {
-			[] pt.receive(t_L1CTL_RACH_CONF) -> value rc { fn := rc.dl_info.frame_nr };
+			[] pt.receive(tr_L1CTL_RACH_CONF) -> value rc { fn := rc.dl_info.frame_nr };
 			[] pt.receive { repeat; };
 			[] T.timeout { setverdict(fail, "Timeout in RACH") };
 		}
@@ -65,7 +69,7 @@
 	}
 
 	function f_L1CTL_PARAM(L1CTL_PT pt, uint8_t ta, uint8_t tx_power) {
-		pt.send(t_L1CTL_PAR_REQ(ta, tx_power));
+		pt.send(ts_L1CTL_PAR_REQ(ta, tx_power));
 	}
 
 	function f_L1CTL_WAIT_IMM_ASS(L1CTL_PT pt, uint8_t ra, GsmFrameNumber rach_fn) return ImmediateAssignment {
@@ -74,7 +78,7 @@
 		timer T := 10.0;
 		T.start;
 		alt {
-			[] pt.receive(t_L1CTL_DATA_IND(t_RslChanNr_PCH_AGCH(0))) -> value dl {
+			[] pt.receive(tr_L1CTL_DATA_IND(t_RslChanNr_PCH_AGCH(0))) -> value dl {
 				rr := dec_GsmRrMessage(dl.payload.data_ind.payload);
 				log("PCH/AGCN DL RR: ", rr);
 				if (match(rr, t_RR_IMM_ASS(ra, rach_fn))) {
@@ -96,7 +100,7 @@
 		timer T := 10.0;
 		T.start;
 		alt {
-			[] pt.receive(t_L1CTL_DATA_IND(t_RslChanNr_PCH_AGCH(0))) -> value dl {
+			[] pt.receive(tr_L1CTL_DATA_IND(t_RslChanNr_PCH_AGCH(0))) -> value dl {
 				rr := dec_GsmRrMessage(dl.payload.data_ind.payload);
 				log("PCH/AGCN DL RR: ", rr);
 				if (match(rr, t_RR_IMM_ASS_TBF_DL(tlli))) {
@@ -115,9 +119,9 @@
 	function f_L1CTL_TBF_CFG(L1CTL_PT pt, boolean is_uplink, TfiUsfArr tfi_usf) {
 		timer T := 2.0;
 		T.start;
-		pt.send(t_L1CTL_TBF_CFG_REQ(is_uplink, tfi_usf));
+		pt.send(ts_L1CTL_TBF_CFG_REQ(is_uplink, tfi_usf));
 		alt {
-			[] pt.receive(t_L1CTL_TBF_CFG_CONF(is_uplink)) {}
+			[] pt.receive(tr_L1CTL_TBF_CFG_CONF(is_uplink)) {}
 			[] pt.receive { repeat };
 			[] T.timeout { setverdict(fail, "Timeout waiting for TBF-CFG.conf") };
 		}
@@ -126,7 +130,7 @@
 
 	/* Send DM_EST_REQ from parameters derived from IMM ASS */
 	function f_L1CTL_DM_EST_REQ_IA(L1CTL_PT pt, ImmediateAssignment imm_ass) {
-		pt.send(t_L1CTL_DM_EST_REQ({ false, imm_ass.chan_desc.arfcn }, imm_ass.chan_desc.chan_nr, imm_ass.chan_desc.tsc));
+		pt.send(ts_L1CTL_DM_EST_REQ({ false, imm_ass.chan_desc.arfcn }, imm_ass.chan_desc.chan_nr, imm_ass.chan_desc.tsc));
 	}
 
 	function f_connect_reset(L1CTL_PT pt, charstring l1ctl_sock_path := m_l1ctl_sock_path) {
