diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 880b693..6b5ce24 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -34,6 +34,7 @@
 
 import from Osmocom_CTRL_Functions all;
 import from Osmocom_CTRL_Types all;
+import from Osmocom_CTRL_Adapter all;
 
 import from MobileL3_CommonIE_Types all;
 import from L3_Templates all;
@@ -46,43 +47,18 @@
 const integer NUM_TCHF_PER_BTS := 5;
 
 
-/* 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);
-}
-
-
 /* per-BTS state which we keep */
 type record BTS_State {
 	/* component reference to the IPA_Client component used for RSL */
 	IPA_Client rsl
 }
 
-type component test_CT extends BSSAP_Adapter_CT {
+type component test_CT extends BSSAP_Adapter_CT, CTRL_Adapter_CT {
 	/* Array of per-BTS state */
 	var BTS_State bts[NUM_BTS];
 	/* array of per-BTS RSL test ports */
 	port IPA_RSL_PT IPA_RSL[NUM_BTS];
 
-	/* component reference to the IPA_Client component used for CTRL to BSC */
-	var IPA_Client ctrl;
-	/* test port for the CTRL interface of the BSC */
-	port IPA_CTRL_PT IPA_CTRL;
-
 	/* are we initialized yet */
 	var boolean g_initialized := false;
 
@@ -160,30 +136,6 @@
 	}
 }
 
-/*! Start the CTRL connection to the specified BSC IP+Port */
-function f_ipa_ctrl_start(inout IPA_Client clnt, charstring bsc_host, PortNumber bsc_port, integer i)
-runs on test_CT {
-	timer T := 10.0;
-
-	clnt.id := "IPA" & int2str(i) & "-CTRL";
-	clnt.vc_IPA := IPA_Emulation_CT.create(clnt.id & "-IPA");
-
-	map(clnt.vc_IPA:IPA_PORT, system:IPA_CODEC_PT);
-	connect(clnt.vc_IPA:IPA_CTRL_PORT, self:IPA_CTRL);
-
-	clnt.vc_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;
-		}
-	}
-}
-
 /* Wait for the OML connection to be brought up by the external osmo-bts-omldummy */
 function f_wait_oml(integer bts_nr, charstring status, float secs_max) runs on test_CT {
 	timer T := secs_max;
@@ -242,7 +194,7 @@
 	} else {
 		f_bssap_init("VirtMSC", omit);
 	}
-	f_ipa_ctrl_start(ctrl, mp_bsc_ip, mp_bsc_ctrl_port, 0);
+	f_ipa_ctrl_start(mp_bsc_ip, mp_bsc_ctrl_port);
 
 	for (i := 0; i < nr_bts; i := i+1) {
 		/* wait until osmo-bts-omldummy has respawned */
diff --git a/bsc/gen_links.sh b/bsc/gen_links.sh
index 14771a7..94bea21 100755
--- a/bsc/gen_links.sh
+++ b/bsc/gen_links.sh
@@ -76,5 +76,5 @@
 gen_links $DIR $FILES
 
 DIR=../library
-FILES="General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcn L3_Templates.ttcn BSSMAP_Templates.ttcn BSSMAP_Emulation.ttcn RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn RSL_Emulation.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc BSSAP_CodecPort.ttcn Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn RTP_CodecPort.ttcn RTP_CodecPort_CtrlFunct.ttcn RTP_CodecPort_CtrlFunctDef.cc RTP_Emulation.ttcn IuUP_Types.ttcn IuUP_EncDec.cc IuUP_Emulation.ttcn GSUP_Types.ttcn"
+FILES="General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcn L3_Templates.ttcn BSSMAP_Templates.ttcn BSSMAP_Emulation.ttcn RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn RSL_Emulation.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc BSSAP_CodecPort.ttcn Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn RTP_CodecPort.ttcn RTP_CodecPort_CtrlFunct.ttcn RTP_CodecPort_CtrlFunctDef.cc RTP_Emulation.ttcn IuUP_Types.ttcn IuUP_EncDec.cc IuUP_Emulation.ttcn GSUP_Types.ttcn"
 gen_links $DIR $FILES
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);
+}
+
+
+}
