diff --git a/library/IPA_Emulation.ttcn b/library/IPA_Emulation.ttcn
index b3e28e9..53a86ec 100644
--- a/library/IPA_Emulation.ttcn
+++ b/library/IPA_Emulation.ttcn
@@ -23,6 +23,7 @@
 import from MTP3asp_Types all;
 import from MTP3asp_PortType all;
 import from RSL_Types all;
+import from Socket_API_Definitions all;
 
 import from MGCP_Types all;
 import from GSUP_Types all;
@@ -132,7 +133,7 @@
 	port IPA_SP_PT IPA_SP_PORT;
 
 	var boolean g_initialized := false;
-	var ConnectionId g_ipa_conn_id := -1;
+	var IPL4asp_Types.ConnectionId g_ipa_conn_id := -1;
 	/* Are we a BSC/MGW (truel) or MSC (false) */
 	var boolean g_is_bsc_mgw;
 
@@ -167,10 +168,10 @@
 };
 
 /* Function to use to connect as client to a remote IPA Server */
-function f_connect(charstring remote_host, PortNumber remote_port,
-		   charstring local_host, PortNumber local_port,
+function f_connect(charstring remote_host, IPL4asp_Types.PortNumber remote_port,
+		   charstring local_host, IPL4asp_Types.PortNumber local_port,
 		   IPA_CCM_Parameters ccm_pars := c_IPA_default_ccm_pars) runs on IPA_Emulation_CT {
-	var Result res;
+	var IPL4asp_Types.Result res;
 	res := IPA_CodecPort_CtrlFunct.f_IPL4_connect(IPA_PORT, remote_host, remote_port,
 						local_host, local_port, 0, { tcp:={} });
 	g_ipa_conn_id := res.connId;
@@ -179,9 +180,9 @@
 }
 
 /* Function to use to bind to a local port as IPA server, accepting remote clients */
-function f_bind(charstring local_host, PortNumber local_port,
+function f_bind(charstring local_host, IPL4asp_Types.PortNumber local_port,
 		IPA_CCM_Parameters ccm_pars := c_IPA_default_ccm_pars) runs on IPA_Emulation_CT {
-	var Result res;
+	var IPL4asp_Types.Result res;
 	res := IPA_CodecPort_CtrlFunct.f_IPL4_listen(IPA_PORT, 
 						local_host, local_port, { tcp:={} });
 	g_ipa_conn_id := res.connId;
@@ -324,21 +325,21 @@
 	return ret;
 }
 
-private function f_from_asp(ConnectionId connId, ASP_IPA_Unitdata ipa_tx) return IPA_Send {
+private function f_from_asp(IPL4asp_Types.ConnectionId connId, ASP_IPA_Unitdata ipa_tx) return IPA_Send {
 	var IPA_Send ret := valueof(t_IPA_Send(connId, ipa_tx.streamId, ipa_tx.payload,
 						ipa_tx.streamIdExt));
 	return ret;
 }
 
-private function f_from_rsl(ConnectionId connId, ASP_RSL_Unitdata rsl_tx) return IPA_Send {
+private function f_from_rsl(IPL4asp_Types.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;
 }
 
 /* main function to use for a client-side IPA implementation */
-function main_client(charstring remote_host, PortNumber remote_port,
-		     charstring local_host, PortNumber local_port,
+function main_client(charstring remote_host, IPL4asp_Types.PortNumber remote_port,
+		     charstring local_host, IPL4asp_Types.PortNumber local_port,
 		     IPA_CCM_Parameters ccm_pars := c_IPA_default_ccm_pars) runs on IPA_Emulation_CT {
 	g_mode := IPA_MODE_CLIENT;
 	f_connect(remote_host, remote_port, local_host, local_port, ccm_pars);
@@ -347,7 +348,7 @@
 }
 
 /* main function to use for a server-side IPA implementation */
-function main_server(charstring local_host, PortNumber local_port) runs on IPA_Emulation_CT {
+function main_server(charstring local_host, IPL4asp_Types.PortNumber local_port) runs on IPA_Emulation_CT {
 	g_mode := IPA_MODE_SERVER;
 	f_bind(local_host, local_port);
 	ScanEvents();
@@ -389,6 +390,7 @@
 	var ASP_IPA_Unitdata ipa_ud;
 	var ASP_MTP3_TRANSFERreq mtp_req;
 	var ASP_Event asp_evt;
+	var Socket_API_Definitions.PortEvent port_evt;
 	var MgcpCommand mgcp_cmd;
 	var MgcpResponse mgcp_rsp;
 	var CtrlMessage ctrl_msg;
@@ -456,6 +458,13 @@
 			self.stop;
 		}
 
+		[] IPA_PORT.receive(Socket_API_Definitions.PortEvent:{result:={errorCode:=ERROR_SOCKET, connId:=?, os_error_code:=?, os_error_text:=?}}) -> value port_evt {
+			log("PortEvent: ERROR_SOCKET: ", port_evt);
+			g_ipa_conn_id := -1;
+			f_send_IPA_EVT(t_ASP_IPA_EVT_UD(ASP_IPA_EVENT_DOWN));
+			self.stop;
+		}
+
 		/* Received SCCP -> down into IPA */
 		[] MTP3_SP_PORT.receive(ASP_MTP3_TRANSFERreq: ?) -> value mtp_req {
 			var IPA_Send ipa_tx := valueof(t_IPA_Send(g_ipa_conn_id, IPAC_PROTO_SCCP,
