Index: kernel/generic/include/ipc/event.h
===================================================================
--- kernel/generic/include/ipc/event.h	(revision 593e0237afd3144ed94431340aab1dd29fc7f612)
+++ kernel/generic/include/ipc/event.h	(revision da79df4290209db0fdf4a05ba3f9b9f2b5b5166d)
@@ -100,6 +100,7 @@
     sysarg_t, sysarg_t, sysarg_t);
 
-extern sysarg_t sys_event_subscribe(sysarg_t, sysarg_t);
-extern sysarg_t sys_event_unmask(sysarg_t);
+extern sysarg_t sys_ipc_event_subscribe(sysarg_t, sysarg_t);
+extern sysarg_t sys_ipc_event_unsubscribe(sysarg_t);
+extern sysarg_t sys_ipc_event_unmask(sysarg_t);
 
 #endif
Index: kernel/generic/include/ipc/irq.h
===================================================================
--- kernel/generic/include/ipc/irq.h	(revision 593e0237afd3144ed94431340aab1dd29fc7f612)
+++ kernel/generic/include/ipc/irq.h	(revision da79df4290209db0fdf4a05ba3f9b9f2b5b5166d)
@@ -47,5 +47,5 @@
 #include <adt/list.h>
 
-extern int ipc_irq_register(answerbox_t *, inr_t, devno_t, sysarg_t,
+extern int ipc_irq_subscribe(answerbox_t *, inr_t, devno_t, sysarg_t,
     irq_code_t *);
 
@@ -53,5 +53,5 @@
 extern void ipc_irq_top_half_handler(irq_t *);
 
-extern int ipc_irq_unregister(answerbox_t *, inr_t, devno_t);
+extern int ipc_irq_unsubscribe(answerbox_t *, inr_t, devno_t);
 extern void ipc_irq_cleanup(answerbox_t *);
 
Index: kernel/generic/include/ipc/sysipc.h
===================================================================
--- kernel/generic/include/ipc/sysipc.h	(revision 593e0237afd3144ed94431340aab1dd29fc7f612)
+++ kernel/generic/include/ipc/sysipc.h	(revision da79df4290209db0fdf4a05ba3f9b9f2b5b5166d)
@@ -53,6 +53,7 @@
     unsigned int);
 extern sysarg_t sys_ipc_hangup(sysarg_t);
-extern sysarg_t sys_irq_register(inr_t, devno_t, sysarg_t, irq_code_t *);
-extern sysarg_t sys_irq_unregister(inr_t, devno_t);
+
+extern sysarg_t sys_ipc_irq_subscribe(inr_t, devno_t, sysarg_t, irq_code_t *);
+extern sysarg_t sys_ipc_irq_unsubscribe(inr_t, devno_t);
 
 #ifdef __32_BITS__
Index: kernel/generic/src/ipc/event.c
===================================================================
--- kernel/generic/src/ipc/event.c	(revision 593e0237afd3144ed94431340aab1dd29fc7f612)
+++ kernel/generic/src/ipc/event.c	(revision da79df4290209db0fdf4a05ba3f9b9f2b5b5166d)
@@ -58,15 +58,15 @@
 }
 
-static event_t *evno2event(int evno, task_t *t)
+static event_t *evno2event(int evno, task_t *task)
 {
 	ASSERT(evno < EVENT_TASK_END);
-
+	
 	event_t *event;
-
+	
 	if (evno < EVENT_END)
 		event = &events[(event_type_t) evno];
 	else
-		event = &t->events[(event_task_type_t) evno - EVENT_END];
-
+		event = &task->events[(event_task_type_t) evno - EVENT_END];
+	
 	return event;
 }
@@ -86,5 +86,4 @@
 		event_initialize(evno2event(i, task));
 }
-
 
 /** Unsubscribe kernel events associated with an answerbox
@@ -260,5 +259,5 @@
 {
 	int res;
-
+	
 	spinlock_lock(&event->lock);
 	
@@ -277,4 +276,34 @@
 }
 
+/** Unsubscribe event notifications
+ *
+ * @param evno      Event type.
+ * @param answerbox Answerbox used to send the notifications to.
+ *
+ * @return EOK if the subscription was successful.
+ * @return EEXISTS if the notifications of the given type are
+ *         already subscribed.
+ *
+ */
+static int event_unsubscribe(event_t *event, answerbox_t *answerbox)
+{
+	int res;
+	
+	spinlock_lock(&event->lock);
+	
+	if (event->answerbox == answerbox) {
+		event->answerbox = NULL;
+		event->counter = 0;
+		event->imethod = 0;
+		event->masked = false;
+		res = EOK;
+	} else
+		res = ENOENT;
+	
+	spinlock_unlock(&event->lock);
+	
+	return res;
+}
+
 /** Unmask event notifications
  *
@@ -297,5 +326,5 @@
 }
 
-/** Event notification syscall wrapper
+/** Event notification subscription syscall wrapper
  *
  * @param evno    Event type to subscribe.
@@ -309,5 +338,5 @@
  *
  */
-sysarg_t sys_event_subscribe(sysarg_t evno, sysarg_t imethod)
+sysarg_t sys_ipc_event_subscribe(sysarg_t evno, sysarg_t imethod)
 {
 	if (evno >= EVENT_TASK_END)
@@ -316,4 +345,23 @@
 	return (sysarg_t) event_subscribe(evno2event(evno, TASK),
 	    (sysarg_t) imethod, &TASK->answerbox);
+}
+
+/** Event notification unsubscription syscall wrapper
+ *
+ * @param evno    Event type to unsubscribe.
+ *
+ * @return EOK on success.
+ * @return ELIMIT on unknown event type.
+ * @return ENOENT if the notification of the given type is not
+           subscribed.
+ *
+ */
+sysarg_t sys_ipc_event_unsubscribe(sysarg_t evno)
+{
+	if (evno >= EVENT_TASK_END)
+		return ELIMIT;
+	
+	return (sysarg_t) event_unsubscribe(evno2event(evno, TASK),
+	    &TASK->answerbox);
 }
 
@@ -331,5 +379,5 @@
  *
  */
-sysarg_t sys_event_unmask(sysarg_t evno)
+sysarg_t sys_ipc_event_unmask(sysarg_t evno)
 {
 	if (evno >= EVENT_TASK_END)
Index: kernel/generic/src/ipc/irq.c
===================================================================
--- kernel/generic/src/ipc/irq.c	(revision 593e0237afd3144ed94431340aab1dd29fc7f612)
+++ kernel/generic/src/ipc/irq.c	(revision da79df4290209db0fdf4a05ba3f9b9f2b5b5166d)
@@ -36,5 +36,5 @@
  * @brief IRQ notification framework.
  *
- * This framework allows applications to register to receive a notification
+ * This framework allows applications to subscribe to receive a notification
  * when interrupt is detected. The application may provide a simple 'top-half'
  * handler as part of its registration, which can perform simple operations
@@ -42,6 +42,5 @@
  *
  * The structure of a notification message is as follows:
- * - IMETHOD: interface and method as registered by
- *            the SYS_IRQ_REGISTER syscall
+ * - IMETHOD: interface and method as set by the SYS_IPC_IRQ_SUBSCRIBE syscall
  * - ARG1: payload modified by a 'top-half' handler (scratch[1])
  * - ARG2: payload modified by a 'top-half' handler (scratch[2])
@@ -52,5 +51,5 @@
  *                  in multithreaded drivers)
  *
- * Note on synchronization for ipc_irq_register(), ipc_irq_unregister(),
+ * Note on synchronization for ipc_irq_subscribe(), ipc_irq_unsubscribe(),
  * ipc_irq_cleanup() and IRQ handlers:
  *
@@ -289,5 +288,5 @@
 }
 
-/** Register an answerbox as a receiving end for IRQ notifications.
+/** Subscribe an answerbox as a receiving end for IRQ notifications.
  *
  * @param box     Receiving answerbox.
@@ -301,5 +300,5 @@
  *
  */
-int ipc_irq_register(answerbox_t *box, inr_t inr, devno_t devno,
+int ipc_irq_subscribe(answerbox_t *box, inr_t inr, devno_t devno,
     sysarg_t imethod, irq_code_t *ucode)
 {
@@ -369,5 +368,5 @@
 }
 
-/** Unregister task from IRQ notification.
+/** Unsubscribe task from IRQ notification.
  *
  * @param box   Answerbox associated with the notification.
@@ -378,5 +377,5 @@
  *
  */
-int ipc_irq_unregister(answerbox_t *box, inr_t inr, devno_t devno)
+int ipc_irq_unsubscribe(answerbox_t *box, inr_t inr, devno_t devno)
 {
 	sysarg_t key[] = {
@@ -432,5 +431,5 @@
  *
  * This function is effective because the answerbox contains
- * list of all irq_t structures that are registered to
+ * list of all irq_t structures that are subscribed to
  * send notifications to it.
  *
Index: kernel/generic/src/ipc/sysipc.c
===================================================================
--- kernel/generic/src/ipc/sysipc.c	(revision 593e0237afd3144ed94431340aab1dd29fc7f612)
+++ kernel/generic/src/ipc/sysipc.c	(revision da79df4290209db0fdf4a05ba3f9b9f2b5b5166d)
@@ -736,8 +736,8 @@
  * @param ucode   Uspace pointer to the top-half pseudocode.
  *
- * @return EPERM or a return code returned by ipc_irq_register().
- *
- */
-sysarg_t sys_irq_register(inr_t inr, devno_t devno, sysarg_t imethod,
+ * @return EPERM or a return code returned by ipc_irq_subscribe().
+ *
+ */
+sysarg_t sys_ipc_irq_subscribe(inr_t inr, devno_t devno, sysarg_t imethod,
     irq_code_t *ucode)
 {
@@ -745,5 +745,5 @@
 		return EPERM;
 	
-	return ipc_irq_register(&TASK->answerbox, inr, devno, imethod, ucode);
+	return ipc_irq_subscribe(&TASK->answerbox, inr, devno, imethod, ucode);
 }
 
@@ -756,10 +756,10 @@
  *
  */
-sysarg_t sys_irq_unregister(inr_t inr, devno_t devno)
+sysarg_t sys_ipc_irq_unsubscribe(inr_t inr, devno_t devno)
 {
 	if (!(cap_get(TASK) & CAP_IRQ_REG))
 		return EPERM;
 	
-	ipc_irq_unregister(&TASK->answerbox, inr, devno);
+	ipc_irq_unsubscribe(&TASK->answerbox, inr, devno);
 	
 	return 0;
Index: kernel/generic/src/syscall/syscall.c
===================================================================
--- kernel/generic/src/syscall/syscall.c	(revision 593e0237afd3144ed94431340aab1dd29fc7f612)
+++ kernel/generic/src/syscall/syscall.c	(revision da79df4290209db0fdf4a05ba3f9b9f2b5b5166d)
@@ -165,6 +165,7 @@
 	
 	/* Event notification syscalls. */
-	(syshandler_t) sys_event_subscribe,
-	(syshandler_t) sys_event_unmask,
+	(syshandler_t) sys_ipc_event_subscribe,
+	(syshandler_t) sys_ipc_event_unsubscribe,
+	(syshandler_t) sys_ipc_event_unmask,
 	
 	/* Capabilities related syscalls. */
@@ -180,6 +181,7 @@
 	(syshandler_t) sys_iospace_enable,
 	(syshandler_t) sys_iospace_disable,
-	(syshandler_t) sys_irq_register,
-	(syshandler_t) sys_irq_unregister,
+	
+	(syshandler_t) sys_ipc_irq_subscribe,
+	(syshandler_t) sys_ipc_irq_unsubscribe,
 	
 	/* Sysinfo syscalls. */
