diff --git a/bts/BTS_Tests_LAPDm.ttcn b/bts/BTS_Tests_LAPDm.ttcn
index a5bcc56..0792863 100644
--- a/bts/BTS_Tests_LAPDm.ttcn
+++ b/bts/BTS_Tests_LAPDm.ttcn
@@ -1,259 +1,261 @@
 module BTS_Tests_LAPDm {
-	import from GSM_Types all;
-	import from Osmocom_Types all;
-	import from LAPDm_RAW_PT all;
-	import from LAPDm_Types all;
-	import from BTS_Tests all;
 
-	/* test that use exclusively only LAPDm over L1CTL */
-	type component lapdm_test_CT {
-		port LAPDm_PT LAPDM;
-		var lapdm_CT lapdm_component;
-	};
+import from GSM_Types all;
+import from Osmocom_Types all;
+import from LAPDm_RAW_PT all;
+import from LAPDm_Types all;
+import from BTS_Tests all;
 
-	/* contrary to BTS_Tests.ttcn, we use LAPDm_PT here, a convenience wrapper
-	 * around L1CTL to perform encode/decode of abstract LAPDm frames */
-	type component lapdm_bts_CT extends lapdm_test_CT, test_CT {
+/* test that use exclusively only LAPDm over L1CTL */
+type component lapdm_test_CT {
+	port LAPDm_PT LAPDM;
+	var lapdm_CT lapdm_component;
+};
+
+/* contrary to BTS_Tests.ttcn, we use LAPDm_PT here, a convenience wrapper
+ * around L1CTL to perform encode/decode of abstract LAPDm frames */
+type component lapdm_bts_CT extends lapdm_test_CT, test_CT {
+}
+
+function f_init() runs on lapdm_test_CT {
+	/* create the LAPDm component */
+	lapdm_component := lapdm_CT.create;
+	/* connect our own LAPDM port to the LAPDM Service Provider of the LAPDm component */
+	connect(self:LAPDM, lapdm_component:LAPDM_SP);
+	/* connect the LAPDm compoent's lower-side port to the system L1CTL port (which is internally
+	 * connected to the Unix Domain Socket test port */
+	map(lapdm_component:L1CTL, system:L1CTL);
+
+	/* start the LAPDm parallel component calling it's local function LAPDmStart */
+	lapdm_component.start(LAPDmStart());
+}
+
+/* master function establishing a dedicated radio channel (takes care of RACH/IMM.ASS handling) */
+function f_establish_dcch() runs on lapdm_test_CT {
+	var BCCH_tune_req tune_req := { arfcn := { false, 871 }, combined_ccch := true };
+	var DCCH_establish_req est_req := { ra := 23 };
+
+	LAPDM.send(tune_req);
+	LAPDM.send(est_req);
+	LAPDM.receive(DCCH_establish_res:?);
+}
+
+/* helper function releasing dedicated radio channel physically (no Um signaling!) */
+function f_release_dcch() runs on lapdm_test_CT {
+	var DCCH_release_req rel_req := {};
+	LAPDM.send(rel_req);
+}
+
+template LAPDm_ph_data t_PH_DATA(template GsmSapi sapi, template boolean sacch, template LapdmFrame frame) := {
+	sacch := sacch,
+	sapi := sapi,
+	lapdm := frame
+}
+/* template for a valid SABM frame */
+template LapdmFrame LAPDm_B_SABM(template GsmSapi sapi, octetstring payload)  := {
+	ab := {
+		addr := tr_LapdmAddr(sapi, false),
+		ctrl := tr_LapdmCtrlSABM(true),
+		len := lengthof(payload),
+		m := false,
+		el := 1,
+		payload := payload
 	}
+}
 
-	function f_init() runs on lapdm_test_CT {
-		/* create the LAPDm component */
-		lapdm_component := lapdm_CT.create;
-		/* connect our own LAPDM port to the LAPDM Service Provider of the LAPDm component */
-		connect(self:LAPDM, lapdm_component:LAPDM_SP);
-		/* connect the LAPDm compoent's lower-side port to the system L1CTL port (which is internally
-		 * connected to the Unix Domain Socket test port */
-		map(lapdm_component:L1CTL, system:L1CTL);
-
-		/* start the LAPDm parallel component calling it's local function LAPDmStart */
-		lapdm_component.start(LAPDmStart());
+/* template for a valid UA frame */
+template LapdmFrame tr_LAPDm_B_UA(template GsmSapi sapi, template octetstring payload)  := {
+	ab := {
+		addr := tr_LapdmAddr(sapi, false),
+		ctrl := tr_LapdmCtrlUA(true),
+		len := ?,
+		m := false,
+		el := 1,
+		payload := payload
 	}
+}
 
-	/* master function establishing a dedicated radio channel (takes care of RACH/IMM.ASS handling) */
-	function f_establish_dcch() runs on lapdm_test_CT {
-		var BCCH_tune_req tune_req := { arfcn := { false, 871 }, combined_ccch := true };
-		var DCCH_establish_req est_req := { ra := 23 };
-
-		LAPDM.send(tune_req);
-		LAPDM.send(est_req);
-		LAPDM.receive(DCCH_establish_res:?);
+/* template for a valid UA frame */
+template LapdmFrame LAPDm_B_UA(template GsmSapi sapi, octetstring payload)  := {
+	ab := {
+		addr := tr_LapdmAddr(sapi, false),
+		ctrl := tr_LapdmCtrlUA(true),
+		len := lengthof(payload),
+		m := false,
+		el := 1,
+		payload := payload
 	}
+}
 
-	/* helper function releasing dedicated radio channel physically (no Um signaling!) */
-	function f_release_dcch() runs on lapdm_test_CT {
-		var DCCH_release_req rel_req := {};
-		LAPDM.send(rel_req);
+/* template for a valid UI frame */
+template LapdmFrame LAPDm_B_UI(template GsmSapi sapi, octetstring payload)  := {
+	ab := {
+		addr := tr_LapdmAddr(sapi, true),
+		ctrl := tr_LapdmCtrlUI(false),
+		len := lengthof(payload),
+		m := false,
+		el := 1,
+		payload := payload
 	}
+}
 
-	template LAPDm_ph_data t_PH_DATA(template GsmSapi sapi, template boolean sacch, template LapdmFrame frame) := {
-		sacch := sacch,
-		sapi := sapi,
-		lapdm := frame
+template LapdmFrame t_nopayload(template GsmSapi sapi) := {
+	ab := {
+		addr := tr_LapdmAddr(sapi, true),
+		ctrl := ?,
+		len := 0,
+		m := false,
+		el := 1,
+		payload := ''O
 	}
-	/* template for a valid SABM frame */
-	template LapdmFrame LAPDm_B_SABM(template GsmSapi sapi, octetstring payload)  := {
-		ab := {
-			addr := tr_LapdmAddr(sapi, false),
-			ctrl := tr_LapdmCtrlSABM(true),
-			len := lengthof(payload),
-			m := false,
-			el := 1,
-			payload := payload
+}
+
+template LapdmFrame LAPDm_B_DISC(template GsmSapi sapi) modifies t_nopayload := {
+	ab := {
+		ctrl := tr_LapdmCtrlDISC(true)
+	}
+}
+
+template LapdmFrame LAPDm_B_RR(template GsmSapi sapi, template uint3_t nr) modifies t_nopayload := {
+	ab := {
+		ctrl := tr_LapdmCtrlRR(nr, false)
+	}
+}
+
+
+function f_test_sabm_results_in_ua(uint8_t sapi, boolean use_sacch, octetstring payload) runs on lapdm_test_CT return boolean {
+	var LAPDm_ph_data phd;
+	var boolean result := false;
+	timer T := 5.0;
+
+	f_establish_dcch();
+	LAPDM.send(t_PH_DATA(sapi, use_sacch, LAPDm_B_SABM(sapi, payload)));
+	log("====> expecting ", t_PH_DATA(sapi, use_sacch, LAPDm_B_UA(sapi, payload)));
+	T.start
+	alt {
+		[] LAPDM.receive(t_PH_DATA(?, use_sacch, LAPDm_B_UA(sapi, payload))) { result := true; }
+		[] LAPDM.receive(t_PH_DATA(?, use_sacch, ?)) -> value phd { log("Other msg on DCH: ", phd); repeat; }
+		[] LAPDM.receive(t_PH_DATA(?, ?, ?)) -> value phd { log("Other PH-DATA: ", phd); repeat; }
+		[] T.timeout { }
+	}
+	LAPDM.send(t_PH_DATA(sapi, use_sacch, LAPDm_B_RR(sapi, 0)));
+	f_release_dcch();
+	return result;
+}
+
+testcase TC_sabm_ua_dcch_sapi0() runs on lapdm_test_CT {
+	f_init();
+	if (not f_test_sabm_results_in_ua(0, false, 'FEFE'O)) {
+		setverdict(fail);
+	}
+	setverdict(pass);
+}
+
+testcase TC_sabm_ua_dcch_sapi0_nopayload() runs on lapdm_test_CT {
+	f_init();
+	if (f_test_sabm_results_in_ua(0, false, ''O)) {
+		setverdict(fail, "Initial SABM/UA must contain L3 payload but BTS accepts without");
+	}
+	setverdict(pass);
+}
+
+testcase TC_sabm_ua_dcch_sapi3() runs on lapdm_test_CT {
+	f_init();
+	if (f_test_sabm_results_in_ua(3, false, 'FEFE'O)) {
+		setverdict(fail, "Initial SABM/UA must be on SAPI0, but BTS accepts SAPI=3");
+	}
+	setverdict(pass);
+}
+
+testcase TC_sabm_ua_dcch_sapi4() runs on lapdm_test_CT {
+	f_init();
+	if (f_test_sabm_results_in_ua(4, false, 'FEFE'O)) {
+		setverdict(fail, "Initial SABM/UA must be on SAPI0, but BTS accepts SAPI=4");
+	}
+	setverdict(pass);
+}
+
+testcase TC_sabm_contention() runs on lapdm_test_CT {
+	var LAPDm_ph_data phd;
+	const octetstring payload := '0102030405'O;
+	const GsmSapi sapi := 0;
+	const boolean use_sacch := false;
+	timer T := 5.0;
+
+	f_init();
+
+	f_establish_dcch();
+	/* first frame is our real SABM */
+	LAPDM.send(t_PH_DATA(sapi, use_sacch, LAPDm_B_SABM(sapi, payload)));
+	/* second frame is a SABM with different payload, which BTS has to ignore according to 8.4.1.4 */
+	LAPDM.send(t_PH_DATA(sapi, use_sacch, LAPDm_B_SABM(sapi, 'ABCDEF'O)));
+	log("====> expecting ", t_PH_DATA(sapi, use_sacch, LAPDm_B_UA(sapi, payload)));
+	T.start
+	alt {
+		[] LAPDM.receive(t_PH_DATA(?, use_sacch, LAPDm_B_UA(sapi, payload))) { setverdict(pass); repeat; }
+		[] LAPDM.receive(t_PH_DATA(?, use_sacch, tr_LAPDm_B_UA(sapi, ?))) {
+			setverdict(fail, "Second SABM was responded to during contention resolution");
 		}
+		[] LAPDM.receive { repeat };
+		[] T.timeout { }
 	}
+	f_release_dcch();
+}
 
-	/* template for a valid UA frame */
-	template LapdmFrame tr_LAPDm_B_UA(template GsmSapi sapi, template octetstring payload)  := {
-		ab := {
-			addr := tr_LapdmAddr(sapi, false),
-			ctrl := tr_LapdmCtrlUA(true),
-			len := ?,
-			m := false,
-			el := 1,
-			payload := payload
-		}
+/* we test that a re-transmitted SABM with identical payload will result in the retransmission of a
+  * UA. This is required during the contention resolution procedure as specified in 8.4.1.4 */
+testcase TC_sabm_retransmit() runs on lapdm_test_CT {
+	const octetstring payload := '00FEFEDEADBEEF'O;
+	f_init();
+	if (not f_test_sabm_results_in_ua(0, false, payload)) {
+		setverdict(fail, "UA not received for first SABM");
 	}
-
-	/* template for a valid UA frame */
-	template LapdmFrame LAPDm_B_UA(template GsmSapi sapi, octetstring payload)  := {
-		ab := {
-			addr := tr_LapdmAddr(sapi, false),
-			ctrl := tr_LapdmCtrlUA(true),
-			len := lengthof(payload),
-			m := false,
-			el := 1,
-			payload := payload
-		}
+	if (not f_test_sabm_results_in_ua(0, false, payload)) {
+		setverdict(fail, "UA not received for second SABM");
 	}
+	setverdict(pass);
+}
 
-	/* template for a valid UI frame */
-	template LapdmFrame LAPDm_B_UI(template GsmSapi sapi, octetstring payload)  := {
-		ab := {
-			addr := tr_LapdmAddr(sapi, true),
-			ctrl := tr_LapdmCtrlUI(false),
-			len := lengthof(payload),
-			m := false,
-			el := 1,
-			payload := payload
-		}
-	}
-
-	template LapdmFrame t_nopayload(template GsmSapi sapi) := {
-		ab := {
-			addr := tr_LapdmAddr(sapi, true),
-			ctrl := ?,
-			len := 0,
-			m := false,
-			el := 1,
-			payload := ''O
-		}
-	}
-
-	template LapdmFrame LAPDm_B_DISC(template GsmSapi sapi) modifies t_nopayload := {
-		ab := {
-			ctrl := tr_LapdmCtrlDISC(true)
-		}
-	}
-
-	template LapdmFrame LAPDm_B_RR(template GsmSapi sapi, template uint3_t nr) modifies t_nopayload := {
-		ab := {
-			ctrl := tr_LapdmCtrlRR(nr, false)
-		}
-	}
-
-
-	function f_test_sabm_results_in_ua(uint8_t sapi, boolean use_sacch, octetstring payload) runs on lapdm_test_CT return boolean {
-		var LAPDm_ph_data phd;
-		var boolean result := false;
-		timer T := 5.0;
-
-		f_establish_dcch();
-		LAPDM.send(t_PH_DATA(sapi, use_sacch, LAPDm_B_SABM(sapi, payload)));
-		log("====> expecting ", t_PH_DATA(sapi, use_sacch, LAPDm_B_UA(sapi, payload)));
-		T.start
-		alt {
-			[] LAPDM.receive(t_PH_DATA(?, use_sacch, LAPDm_B_UA(sapi, payload))) { result := true; }
-			[] LAPDM.receive(t_PH_DATA(?, use_sacch, ?)) -> value phd { log("Other msg on DCH: ", phd); repeat; }
-			[] LAPDM.receive(t_PH_DATA(?, ?, ?)) -> value phd { log("Other PH-DATA: ", phd); repeat; }
-			[] T.timeout { }
-		}
-		LAPDM.send(t_PH_DATA(sapi, use_sacch, LAPDm_B_RR(sapi, 0)));
-		f_release_dcch();
-		return result;
-	}
-
-	testcase TC_sabm_ua_dcch_sapi0() runs on lapdm_test_CT {
-		f_init();
-		if (not f_test_sabm_results_in_ua(0, false, 'FEFE'O)) {
-			setverdict(fail);
-		}
-		setverdict(pass);
-	}
-
-	testcase TC_sabm_ua_dcch_sapi0_nopayload() runs on lapdm_test_CT {
-		f_init();
-		if (f_test_sabm_results_in_ua(0, false, ''O)) {
-			setverdict(fail, "Initial SABM/UA must contain L3 payload but BTS accepts without");
-		}
-		setverdict(pass);
-	}
-
-	testcase TC_sabm_ua_dcch_sapi3() runs on lapdm_test_CT {
-		f_init();
-		if (f_test_sabm_results_in_ua(3, false, 'FEFE'O)) {
-			setverdict(fail, "Initial SABM/UA must be on SAPI0, but BTS accepts SAPI=3");
-		}
-		setverdict(pass);
-	}
-
-	testcase TC_sabm_ua_dcch_sapi4() runs on lapdm_test_CT {
-		f_init();
-		if (f_test_sabm_results_in_ua(4, false, 'FEFE'O)) {
-			setverdict(fail, "Initial SABM/UA must be on SAPI0, but BTS accepts SAPI=4");
-		}
-		setverdict(pass);
-	}
-
-	testcase TC_sabm_contention() runs on lapdm_test_CT {
-		var LAPDm_ph_data phd;
-		const octetstring payload := '0102030405'O;
-		const GsmSapi sapi := 0;
-		const boolean use_sacch := false;
-		timer T := 5.0;
-
-		f_init();
-
-		f_establish_dcch();
-		/* first frame is our real SABM */
-		LAPDM.send(t_PH_DATA(sapi, use_sacch, LAPDm_B_SABM(sapi, payload)));
-		/* second frame is a SABM with different payload, which BTS has to ignore according to 8.4.1.4 */
-		LAPDM.send(t_PH_DATA(sapi, use_sacch, LAPDm_B_SABM(sapi, 'ABCDEF'O)));
-		log("====> expecting ", t_PH_DATA(sapi, use_sacch, LAPDm_B_UA(sapi, payload)));
-		T.start
-		alt {
-			[] LAPDM.receive(t_PH_DATA(?, use_sacch, LAPDm_B_UA(sapi, payload))) { setverdict(pass); repeat; }
-			[] LAPDM.receive(t_PH_DATA(?, use_sacch, tr_LAPDm_B_UA(sapi, ?))) {
-				setverdict(fail, "Second SABM was responded to during contention resolution");
-			}
-			[] LAPDM.receive { repeat };
-			[] T.timeout { }
-		}
-		f_release_dcch();
-	}
-
-	/* we test that a re-transmitted SABM with identical payload will result in the retransmission of a
-	  * UA. This is required during the contention resolution procedure as specified in 8.4.1.4 */
-	testcase TC_sabm_retransmit() runs on lapdm_test_CT {
-		const octetstring payload := '00FEFEDEADBEEF'O;
-		f_init();
-		if (not f_test_sabm_results_in_ua(0, false, payload)) {
-			setverdict(fail, "UA not received for first SABM");
-		}
-		if (not f_test_sabm_results_in_ua(0, false, payload)) {
-			setverdict(fail, "UA not received for second SABM");
-		}
-		setverdict(pass);
-	}
-
-	testcase TC_foo() runs on lapdm_test_CT {
-		var LapdmFrame lf;
+testcase TC_foo() runs on lapdm_test_CT {
+	var LapdmFrame lf;
 /*
-		var LapdmFrame lf := valueof(LAPDm_B_UA(0, ''O));
-		log("ENC UA: ", enc_LapdmFrame(lf));
-		lf := valueof(LAPDm_B_UI(0, ''O));
-		log("ENC UI B: ", enc_LapdmFrame(lf));
-		log("ENC UI B: ", enc_LapdmFrameB(lf.b));
+	var LapdmFrame lf := valueof(LAPDm_B_UA(0, ''O));
+	log("ENC UA: ", enc_LapdmFrame(lf));
+	lf := valueof(LAPDm_B_UI(0, ''O));
+	log("ENC UI B: ", enc_LapdmFrame(lf));
+	log("ENC UI B: ", enc_LapdmFrameB(lf.b));
 
-		log("DEC UI AF: ", dec_LapdmAddressField('03'O));
+	log("DEC UI AF: ", dec_LapdmAddressField('03'O));
 */
 
-		lf := valueof(LAPDm_B_RR(0, 0));
-		log("ENC RR: ", enc_LapdmFrame(lf));
+	lf := valueof(LAPDm_B_RR(0, 0));
+	log("ENC RR: ", enc_LapdmFrame(lf));
 
-		lf := valueof(LAPDm_B_UA(0, ''O));
-		log("ENC UA: ", enc_LapdmFrame(lf));
+	lf := valueof(LAPDm_B_UA(0, ''O));
+	log("ENC UA: ", enc_LapdmFrame(lf));
 
-		lf := valueof(LAPDm_B_UI(0, ''O));
-		log("ENC UI: ", enc_LapdmFrame(lf));
+	lf := valueof(LAPDm_B_UI(0, ''O));
+	log("ENC UI: ", enc_LapdmFrame(lf));
 
-		log("DEC UI CU: ", dec_LapdmCtrlU('03'O));
-		log("DEC UI CT: ", dec_LapdmCtrl('03'O));
+	log("DEC UI CU: ", dec_LapdmCtrlU('03'O));
+	log("DEC UI CT: ", dec_LapdmCtrl('03'O));
 
-		log("DEC UA: ", dec_LapdmFrameAB('017301'O));
-		log("DEC UI: ", dec_LapdmFrameAB('030301'O));
-		log("DEC I: ", dec_LapdmFrameAB('030001'O));
-		log("DEC S: ", dec_LapdmFrameAB('030101'O));
-		log("DEC: ", dec_LapdmFrameAB('030301'O));
-		log("DEC: ", dec_LapdmFrameAB('0303012B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B'O));
-	}
+	log("DEC UA: ", dec_LapdmFrameAB('017301'O));
+	log("DEC UI: ", dec_LapdmFrameAB('030301'O));
+	log("DEC I: ", dec_LapdmFrameAB('030001'O));
+	log("DEC S: ", dec_LapdmFrameAB('030101'O));
+	log("DEC: ", dec_LapdmFrameAB('030301'O));
+	log("DEC: ", dec_LapdmFrameAB('0303012B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B'O));
+}
 
-	control {
-		execute(TC_foo());
-		execute(TC_sabm_ua_dcch_sapi0());
-		execute(TC_sabm_ua_dcch_sapi0_nopayload());
-		execute(TC_sabm_ua_dcch_sapi3());
-		execute(TC_sabm_ua_dcch_sapi4());
-		execute(TC_sabm_contention());
-		execute(TC_sabm_retransmit());
-	}
+control {
+	execute(TC_foo());
+	execute(TC_sabm_ua_dcch_sapi0());
+	execute(TC_sabm_ua_dcch_sapi0_nopayload());
+	execute(TC_sabm_ua_dcch_sapi3());
+	execute(TC_sabm_ua_dcch_sapi4());
+	execute(TC_sabm_contention());
+	execute(TC_sabm_retransmit());
+}
+
 }
