diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 8895c6b..68503dd 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -469,25 +469,14 @@
 }
 
 /* global init function */
-friend function f_init() runs on test_CT {
+friend function f_init(uint8_t trx_nr := 0)
+runs on test_CT
+{
+	var TrxParsItem trx_pars := mp_trx_pars[trx_nr];
 	var charstring id := testcasename();
-	g_AllChannels := {
-		/* TS 1..4: TCH/F */
-		valueof(ts_RslChanNr_Bm(1)), valueof(ts_RslChanNr_Bm(2)),
-		valueof(ts_RslChanNr_Bm(3)), valueof(ts_RslChanNr_Bm(4)),
-		/* TS 5: TCH/H */
-		valueof(ts_RslChanNr_Lm(5,0)), valueof(ts_RslChanNr_Lm(5,1)),
-		/* TS 0: SDCCH/4 */
-		valueof(ts_RslChanNr_SDCCH4(0,0)), valueof(ts_RslChanNr_SDCCH4(0,1)),
-		valueof(ts_RslChanNr_SDCCH4(0,2)), valueof(ts_RslChanNr_SDCCH4(0,3)),
-		/* TS 6: SDCCH/8 */
-		valueof(ts_RslChanNr_SDCCH8(6,0)), valueof(ts_RslChanNr_SDCCH8(6,1)),
-		valueof(ts_RslChanNr_SDCCH8(6,2)), valueof(ts_RslChanNr_SDCCH8(6,3)),
-		valueof(ts_RslChanNr_SDCCH8(6,4)), valueof(ts_RslChanNr_SDCCH8(6,5)),
-		valueof(ts_RslChanNr_SDCCH8(6,6)), valueof(ts_RslChanNr_SDCCH8(6,7))
-	};
 
-	/* FIXME: FACCH/H is unreliable with calypso firmware, see OS#3653 */
+	/* FIXME: FACCH/H is unreliable with calypso firmware, see OS#3653.
+	 * TODO: also generate this list dynamically from module parameters. */
 	if (mp_bts_trxc_port != -1) {
 		g_AllChanTypes := {
 			/* TS 1..4: TCH/F */
@@ -509,6 +498,48 @@
 			valueof(ts_RslChanNr_SDCCH8(6,4))
 		};
 	}
+
+	g_AllChannels := { };
+
+	/* Generate list of all logical channels from module parameters */
+	for (var integer tn := 0; tn < lengthof(trx_pars.ts); tn := tn + 1) {
+		select (trx_pars.ts[tn].config) {
+		case (GSM_PCHAN_CCCH_SDCCH4) {
+			g_AllChannels := g_AllChannels &
+				{ valueof(ts_RslChanNr_SDCCH4(tn, 0)),
+				  valueof(ts_RslChanNr_SDCCH4(tn, 1)),
+				  valueof(ts_RslChanNr_SDCCH4(tn, 2)),
+				  valueof(ts_RslChanNr_SDCCH4(tn, 3)) };
+			}
+		case (GSM_PCHAN_SDCCH8) {
+			g_AllChannels := g_AllChannels &
+				{ valueof(ts_RslChanNr_SDCCH8(tn, 0)),
+				  valueof(ts_RslChanNr_SDCCH8(tn, 1)),
+				  valueof(ts_RslChanNr_SDCCH8(tn, 2)),
+				  valueof(ts_RslChanNr_SDCCH8(tn, 3)),
+				  valueof(ts_RslChanNr_SDCCH8(tn, 4)),
+				  valueof(ts_RslChanNr_SDCCH8(tn, 5)),
+				  valueof(ts_RslChanNr_SDCCH8(tn, 6)),
+				  valueof(ts_RslChanNr_SDCCH8(tn, 7)) };
+			}
+		case (GSM_PCHAN_TCHH_TCHF_PDCH) {
+			g_AllChannels := g_AllChannels &
+				{ valueof(ts_RslChanNr_Lm(tn, 0)),
+				  valueof(ts_RslChanNr_Lm(tn, 1)),
+				  valueof(ts_RslChanNr_Bm(tn)) };
+			}
+		case (GSM_PCHAN_TCHH) {
+			g_AllChannels := g_AllChannels &
+				{ valueof(ts_RslChanNr_Lm(tn, 0)),
+				  valueof(ts_RslChanNr_Lm(tn, 1)) };
+			}
+		case (GSM_PCHAN_TCHF, GSM_PCHAN_TCHF_PDCH) {
+			g_AllChannels := g_AllChannels &
+				{ valueof(ts_RslChanNr_Bm(tn)) };
+			}
+		}
+	}
+
 	f_init_rsl(id);
 	f_sleep(0.5);	/* workaround for OS#3000 */
 	f_init_vty(id);
