Index: libipc/generic/ipc.c
===================================================================
--- libipc/generic/ipc.c	(revision 5140e3ebfd38d983217aba6195de510ad65d0799)
+++ libipc/generic/ipc.c	(revision 6180b57897b56ad3e6e248dedce1e06a9bc8fc0f)
@@ -262,2 +262,12 @@
 	return __SYSCALL1(SYS_IPC_HANGUP, phoneid);
 }
+
+int ipc_register_irq(int irq)
+{
+	return __SYSCALL1(SYS_IPC_REGISTER_IRQ, irq);
+}
+
+int ipc_unregister_irq(int irq)
+{
+	return __SYSCALL1(SYS_IPC_UNREGISTER_IRQ, irq);
+}
Index: libipc/include/ipc.h
===================================================================
--- libipc/include/ipc.h	(revision 5140e3ebfd38d983217aba6195de510ad65d0799)
+++ libipc/include/ipc.h	(revision 6180b57897b56ad3e6e248dedce1e06a9bc8fc0f)
@@ -64,4 +64,6 @@
 int ipc_connect_me_to(int phoneid, int arg1, int arg2);
 int ipc_hangup(int phoneid);
+int ipc_register_irq(int irq);
+int ipc_unregister_irq(int irq);
 
 #endif
Index: ns/ns.c
===================================================================
--- ns/ns.c	(revision 5140e3ebfd38d983217aba6195de510ad65d0799)
+++ ns/ns.c	(revision 6180b57897b56ad3e6e248dedce1e06a9bc8fc0f)
@@ -16,8 +16,12 @@
 
 	printf("NS:Name service started.\n");
+//	ipc_register_irq(1);
 	while (1) {
 		callid = ipc_wait_for_call(&call, 0);
 		printf("NS:Call phone=%lX..", call.phoneid);
 		switch (IPC_GET_METHOD(call)) {
+		case IPC_M_INTERRUPT:
+			printf("GOT INTERRUPT\n");
+			break;
 		case IPC_M_PHONE_HUNGUP:
 			printf("Phone hung up.\n");
@@ -55,5 +59,6 @@
 			break;
 		}
-		ipc_answer(callid, retval, arg1, arg2);
+		if (! (callid & IPC_CALLID_NOTIFICATION))
+			ipc_answer(callid, retval, arg1, arg2);
 	}
 }
