diff --git a/library/Osmocom_CTRL_Adapter.ttcn b/library/Osmocom_CTRL_Adapter.ttcn
new file mode 100644
index 0000000..4cfe739
--- /dev/null
+++ b/library/Osmocom_CTRL_Adapter.ttcn
@@ -0,0 +1,68 @@
+module Osmocom_CTRL_Adapter {
+
+/* Module that test suites can 'inherit' in order to have a CTRL connection to the IUT which they're testing */
+
+import from IPL4asp_Types all;
+
+import from IPA_Emulation all;
+import from IPA_Types all;
+
+import from Osmocom_CTRL_Functions all;
+import from Osmocom_CTRL_Types all;
+
+
+type component CTRL_Adapter_CT {
+	var IPA_Emulation_CT vc_CTRL_IPA;
+	/* test port for the CTRL interface of the BSC */
+	port IPA_CTRL_PT IPA_CTRL;
+}
+
+
+/*! Start the CTRL connection to the specified BSC IP+Port */
+function f_ipa_ctrl_start(charstring bsc_host, PortNumber bsc_port)
+runs on CTRL_Adapter_CT {
+	var charstring id := "IPA-CTRL"
+	timer T := 10.0;
+
+	vc_CTRL_IPA := IPA_Emulation_CT.create(id & "-IPA");
+
+	map(vc_CTRL_IPA:IPA_PORT, system:IPA_CODEC_PT);
+	connect(vc_CTRL_IPA:IPA_CTRL_PORT, self:IPA_CTRL);
+
+	vc_CTRL_IPA.start(IPA_Emulation.main_client(bsc_host, bsc_port, "", -1));
+
+	/* wait for IPA CTRL link to connect and send UP */
+	T.start;
+	alt {
+	[] IPA_CTRL.receive(ASP_IPA_Event:{up_down := ASP_IPA_EVENT_UP}) { }
+	[] T.timeout {
+		setverdict(fail, "Timeout CTRL waiting for ASP_IPA_EVENT_UP");
+		self.stop;
+		}
+	}
+}
+
+
+
+
+/* BSC specific CTRL helper functions */
+function f_ctrl_get_bts(IPA_CTRL_PT pt, integer bts_nr, charstring suffix) return CtrlValue {
+	return f_ctrl_get(pt, "bts." & int2str(bts_nr) & "." & suffix);
+}
+
+template charstring ts_bts(integer bts_nr) := "bts." & int2str(bts_nr) & ".";
+template charstring ts_bts_trx(integer bts_nr, integer trx_nr ) :=
+	valueof(ts_bts(bts_nr)) & "trx." & int2str(trx_nr) & ".";
+
+function f_ctrl_get_exp_bts(IPA_CTRL_PT pt, integer bts_nr, CtrlVariable suffix, template CtrlValue exp) {
+	f_ctrl_get_exp(pt, valueof(ts_bts(bts_nr)) & suffix, exp);
+}
+
+function f_ctrl_get_exp_trx(IPA_CTRL_PT pt, integer bts_nr, integer trx_nr, CtrlVariable suffix,
+			    template CtrlValue exp)
+{
+	f_ctrl_get_exp(pt, valueof(ts_bts_trx(bts_nr, trx_nr)) & suffix, exp);
+}
+
+
+}
