diff --git a/library/IPA_Emulation.ttcn b/library/IPA_Emulation.ttcn
index 696019e..c8111e2 100644
--- a/library/IPA_Emulation.ttcn
+++ b/library/IPA_Emulation.ttcn
@@ -7,6 +7,7 @@
 import from IPL4asp_PortType all;
 import from MTP3asp_Types all;
 import from MTP3asp_PortType all;
+import from RSL_Types all;
 
 import from MGCP_Types all;
 
@@ -26,6 +27,20 @@
 	octetstring	payload
 }
 
+type enumerated ASP_IPA_EventUpDown {
+	ASP_IPA_EVENT_DOWN,
+	ASP_IPA_EVENT_UP,
+	ASP_IPA_EVENT_ID_ACK
+}
+
+type union ASP_IPA_Event {
+	ASP_IPA_EventUpDown	up_down
+}
+
+template ASP_IPA_Event t_ASP_IPA_EVT_UD(ASP_IPA_EventUpDown ud) := {
+	up_down := ud
+}
+
 template ASP_IPA_Unitdata t_ASP_IPA_UD(IpaStreamId sid, octetstring pl,
 					template IpaExtStreamId esid := omit) := {
 	streamId := sid,
@@ -33,14 +48,31 @@
 	payload := pl
 }
 
+type record ASP_RSL_Unitdata {
+	IpaStreamId	streamId,
+	RSL_Message	rsl
+};
+
+template ASP_RSL_Unitdata t_ASP_RSL_UD(IpaStreamId sid, template RSL_Message rsl) := {
+	streamId := sid,
+	rsl := valueof(rsl)
+}
+
+template IpaStreamId t_IpaSidRSL := ( IPAC_PROTO_RSL_TRX0, IPAC_PROTO_RSL_TRX1,
+				      IPAC_PROTO_RSL_TRX2, IPAC_PROTO_RSL_TRX3 );
+
 type port IPA_SP_PT message {
-	inout ASP_IPA_Unitdata;
+	inout ASP_IPA_Unitdata, ASP_IPA_Event;
 } with { extension "internal" }
 
 type port IPA_MGCP_PT message {
 	inout MgcpCommand, MgcpResponse;
 } with { extension "internal" }
 
+type port IPA_RSL_PT message {
+	inout ASP_RSL_Unitdata, ASP_IPA_Event;
+} with { extension "internal" }
+
 type component IPA_Emulation_CT {
 	/* down-facing port to IPA codec port */
 	port IPA_CODEC_PT IPA_PORT;
@@ -48,6 +80,8 @@
 	port MTP3asp_SP_PT MTP3_SP_PORT;
 	/* up-facing port for MGCP */
 	port IPA_MGCP_PT IPA_MGCP_PORT;
+	/* up-facing port for RSL */
+	port IPA_RSL_PT IPA_RSL_PORT;
 	/* up-facing port for other streams */
 	port IPA_SP_PT IPA_SP_PORT;
 
@@ -126,6 +160,11 @@
 	data := payload
 }
 
+private function f_send_IPA_EVT(template ASP_IPA_Event evt) runs on IPA_Emulation_CT {
+	IPA_RSL_PORT.send(evt);
+	/* FIXME: to other ports */
+}
+
 /* build IPA CCM ID RESP response from IPA CCM GET */
 private function f_ccm_make_id_resp(PDU_IPA_CCM get) runs on IPA_Emulation_CT return PDU_IPA_CCM {
 	var integer i;
@@ -239,6 +278,12 @@
 	return ret;
 }
 
+private function f_from_rsl(ConnectionId connId, ASP_RSL_Unitdata rsl_tx) return IPA_Send {
+	var octetstring payload := enc_RSL_Message(rsl_tx.rsl);
+	var IPA_Send ret := valueof(t_IPA_Send(connId, rsl_tx.streamId, payload));
+	return ret;
+}
+
 function main_client(charstring remote_host, PortNumber remote_port,
 		     charstring local_host, PortNumber local_port,
 		     IPA_CCM_Parameters ccm_pars := c_IPA_default_ccm_pars) runs on IPA_Emulation_CT {
@@ -280,6 +325,7 @@
 	var MgcpCommand mgcp_cmd;
 	var MgcpResponse mgcp_rsp;
 	var octetstring payload;
+	var ASP_RSL_Unitdata rsl;
 
 	while (true) {
 		alt {
@@ -296,6 +342,12 @@
 				MTP3_SP_PORT.send(mtp);
 			} case (IPAC_PROTO_MGCP_OLD) {
 				f_mgcp_to_user(ipa_rx.msg);
+			} case (t_IpaSidRSL) {
+				rsl := {
+					streamId := ipa_rx.streamId,
+					rsl := dec_RSL_Message(ipa_rx.msg)
+				};
+				IPA_RSL_PORT.send(rsl);
 			} case (IPAC_PROTO_OSMO) {
 				select (ipa_rx.streamIdExt) {
 					case (IPAC_PROTO_EXT_MGCP) {
@@ -314,6 +366,7 @@
 		[] IPA_PORT.receive(ASP_Event:{connOpened:=?}) -> value asp_evt {
 			log("IPA: Connected");
 			g_ipa_conn_id := asp_evt.connOpened.connId;
+			f_send_IPA_EVT(t_ASP_IPA_EVT_UD(ASP_IPA_EVENT_UP));
 			if (g_mode == IPA_MODE_SERVER) {
 				f_ccm_tx(valueof(ts_IPA_ID_GET));
 			}
@@ -322,6 +375,7 @@
 		[] IPA_PORT.receive(ASP_Event:{connClosed:=?}) -> value asp_evt {
 			log("IPA: Closed");
 			g_ipa_conn_id := -1;
+			f_send_IPA_EVT(t_ASP_IPA_EVT_UD(ASP_IPA_EVENT_DOWN));
 			self.stop;
 		}
 
@@ -344,8 +398,13 @@
 			IPA_PORT.send(f_from_asp(g_ipa_conn_id, ipa_ud));
 		}
 
+		/* Received RSL -> down into IPA */
+		[] IPA_RSL_PORT.receive(ASP_RSL_Unitdata:?) -> value rsl {
+			IPA_PORT.send(f_from_rsl(g_ipa_conn_id, rsl));
+		}
 
-		/* Received MISC (RSL/OML/CTRL) -> down into IPA */
+
+		/* Received MISC (OML/CTRL) -> down into IPA */
 		[] IPA_SP_PORT.receive(ASP_IPA_Unitdata: ?) -> value ipa_ud {
 			IPA_PORT.send(f_from_asp(g_ipa_conn_id, ipa_ud));
 		}
