diff --git a/bsc-nat/MSC_ConnectionHandler.ttcn b/bsc-nat/MSC_ConnectionHandler.ttcn
index 27fbba7..383b67b 100644
--- a/bsc-nat/MSC_ConnectionHandler.ttcn
+++ b/bsc-nat/MSC_ConnectionHandler.ttcn
@@ -5,7 +5,7 @@
 import from SCCPasp_Types all;
 import from BSSAP_Types all;
 import from BSSAP_CodecPort all;
-import from BSSMAP_Emulation all;
+import from RAN_Emulation all;
 import from BSSMAP_Templates all;
 
 import from MGCP_Types all;
@@ -13,9 +13,9 @@
 import from SDP_Types all;
 
 /* this component represents a single subscriber connection at the MSC.
- * There is a 1:1 mapping between SCCP connections and BSSAP_ConnHdlr components.
- * We inherit all component variables, ports, functions, ... from BSSAP_ConnHdlr */
-type component MSC_ConnHdlr extends BSSAP_ConnHdlr {
+ * There is a 1:1 mapping between SCCP connections and RAN_ConnHdlr components.
+ * We inherit all component variables, ports, functions, ... from RAN_ConnHdlr */
+type component MSC_ConnHdlr extends RAN_ConnHdlr {
 	/* SCCP Connecction Identifier for the underlying SCCP connection */
 	var integer g_sccp_conn_id;
 
@@ -28,10 +28,10 @@
 /* Callback function from general BSSMAP_Emulation whenever a new incoming
  * SCCP connection arrivces. Must create + start a new component */
 private function CreateCallback(BSSAP_N_CONNECT_ind conn_ind, charstring id)
-runs on BSSMAP_Emulation_CT return BSSAP_ConnHdlr {
+runs on RAN_Emulation_CT return RAN_ConnHdlr {
 	var MSC_ConnHdlr vc_conn;
-	/* Create a new BSSAP_ConnHdlr component */
-	vc_conn := MSC_ConnHdlr.create(g_bssmap_id & "-Conn-" & int2str(conn_ind.connectionId));
+	/* Create a new RAN_ConnHdlr component */
+	vc_conn := MSC_ConnHdlr.create(g_ran_id & "-Conn-" & int2str(conn_ind.connectionId));
 	/* connect it to the port */
 	connect(vc_conn:BSSAP, self:CLIENT);
 	/* start it */
@@ -44,7 +44,7 @@
 /* Callback function from general BSSMAP_Emulation whenever a connectionless
  * BSSMAP message arrives.  Can retunr a PDU_BSSAP that should be sent in return */
 private function UnitdataCallback(PDU_BSSAP bssap)
-runs on BSSMAP_Emulation_CT return template PDU_BSSAP {
+runs on RAN_Emulation_CT return template PDU_BSSAP {
 	var template PDU_BSSAP resp := omit;
 
 	if (match(bssap, tr_BSSMAP_Reset)) {
@@ -54,7 +54,7 @@
 	return resp;
 }
 
-const BssmapOps MSC_BssmapOps := {
+const RanOps MSC_RanOps := {
 	create_cb := refers(CreateCallback),
 	unitdata_cb := refers(UnitdataCallback),
 	decode_dtap := false,
@@ -129,14 +129,14 @@
 			}
 
 		[g_state == MSC_STATE_WAIT_DLCX_ACK] BSSAP.receive(tr_DLCX_ACK) {
-			BSSAP.send(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_REQ);
+			BSSAP.send(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_REQ);
 			setverdict(pass);
 			self.stop;
 			}
 
 		/* TODO: CLEAR REQUEST from BSS */
 
-		[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
+		[] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
 			setverdict(fail);
 			self.stop;
 			}
@@ -147,7 +147,7 @@
 
 		/* Guard timer has expired, close connection */
 		[] T.timeout {
-			BSSAP.send(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_REQ);
+			BSSAP.send(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_REQ);
 			setverdict(fail, "Timeout of guard timer");
 			self.stop;
 			}
