diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 7fa1af6..46c9647 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -66,6 +66,7 @@
 friend module BTS_Tests_SMSCB;
 friend module BTS_Tests_virtphy;
 friend module BTS_Tests_LAPDm;
+friend module BTS_Tests_perf;
 
 /* The tests assume a BTS with the following timeslot configuration:
  * TS0 : Combined CCCH + SDCCH/4
diff --git a/bts/BTS_Tests_perf.ttcn b/bts/BTS_Tests_perf.ttcn
new file mode 100644
index 0000000..1e70bc8
--- /dev/null
+++ b/bts/BTS_Tests_perf.ttcn
@@ -0,0 +1,102 @@
+module BTS_Tests_perf {
+
+/* Performance Tests for OsmoBTS
+ * (C) 2020 by sysmocom s.f.m.c. GmbH <info@sysmocom.de>
+ * All rights reserved.
+ *
+ * Released under the terms of GNU General Public License, Version 2 or
+ * (at your option) any later version.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * This test suite tests performance of OsmoBTS under different heavy load scenarios.
+ */
+
+import from Misc_Helpers all;
+import from General_Types all;
+import from Osmocom_Types all;
+import from GSM_Types all;
+import from L1CTL_PortType all;
+import from L1CTL_Types all;
+import from LAPDm_Types all;
+import from IPA_Emulation all;
+import from GSM_RR_Types all;
+
+import from RSL_Types all;
+import from RSL_Emulation all;
+
+import from PCUIF_Types all;
+import from PCUIF_CodecPort all;
+
+import from Osmocom_VTY_Functions all;
+
+import from BTS_Tests all;
+
+/***********************************************************************
+ * Performance tests. Expect osmo-bts to be configured with all TRX as TCH/H.
+ ***********************************************************************/
+
+modulepar {
+	float mp_wait_time := 10.0;
+}
+
+
+/* This test requires BTS with 1 TRX to be configured with following timeslots: TS[0]=CCCH+SDCCH4, TS[1..7]: TCH/H
+ * One can simply take the osmo-bsc.cfg in the same dir and change TS1..7, that's all needed.
+ * It will activate TS1..7 TCH/Hchannels (2 TCH/H per TS, that's 14 channels)
+ * and wait for requested time. This test is useful to bring the BTS (+BTS-TRX)
+ * into a high channel load state to check that the system it runs on can keep
+ * on with full load.
+ */
+function f_TC_highchanload_tchh(charstring id) runs on ConnHdlr {
+	var ChannelNrs chan_nr := { /* TS 1..7: TCH/H */
+		valueof(ts_RslChanNr_Lm(1,0)), valueof(ts_RslChanNr_Lm(1,1)),
+		valueof(ts_RslChanNr_Lm(2,0)), valueof(ts_RslChanNr_Lm(2,1)),
+		valueof(ts_RslChanNr_Lm(3,0)), valueof(ts_RslChanNr_Lm(3,1)),
+		valueof(ts_RslChanNr_Lm(4,0)), valueof(ts_RslChanNr_Lm(4,1)),
+		valueof(ts_RslChanNr_Lm(5,0)), valueof(ts_RslChanNr_Lm(5,1)),
+		valueof(ts_RslChanNr_Lm(6,0)), valueof(ts_RslChanNr_Lm(6,1)),
+		valueof(ts_RslChanNr_Lm(7,0)), valueof(ts_RslChanNr_Lm(7,1))
+		};
+
+	log("Started");
+	for (var integer i := 0; i < sizeof(chan_nr); i := i+1) {
+		log("Registering ", chan_nr[i]);
+		f_rslem_register(0, chan_nr[i]);
+	}
+	log("Registered");
+	for (var integer i := 0; i < sizeof(chan_nr); i := i+1) {
+		f_rsl_transceive(ts_RSL_CHAN_ACT(chan_nr[i],
+				 ts_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM3 /* AMR*/)),
+				 tr_RSL_CHAN_ACT_ACK(chan_nr[i]),
+				 log2str("RSL CHAN ACT [", i, "]"));
+	}
+	log("Activated, now waiting ", mp_wait_time, " seconds");
+
+	f_sleep(mp_wait_time);
+	log("sleep done, deactivating");
+
+	for (var integer i := 0; i < sizeof(chan_nr); i := i+1) {
+		f_rsl_transceive(ts_RSL_RF_CHAN_REL(chan_nr[i]),
+				 tr_RSL_RF_CHAN_REL_ACK(chan_nr[i]),
+				 log2str("RF CHAN REL [", i, "]"),
+				 true);
+	}
+	setverdict(pass);
+}
+testcase TC_highchanload_tchh() runs on test_CT {
+	var ConnHdlr vc_conn; /* 1..7 * 2 */
+	var ConnHdlrPars pars := valueof(t_Pars(t_RslChanNr_Bm(1), ts_RSL_ChanMode_SIGN, 60.0 + mp_wait_time));
+
+	f_init();
+
+	vc_conn := f_start_handler(refers(f_TC_highchanload_tchh), pars);
+	vc_conn.done;
+}
+
+control {
+	execute( TC_highchanload_tchh() );
+}
+
+
+}
