Index: kernel/generic/src/ipc/irq.c
===================================================================
--- kernel/generic/src/ipc/irq.c	(revision 6deb2cdd4f9ffa23e068faa9b3d977ec3399c1ed)
+++ kernel/generic/src/ipc/irq.c	(revision 9233e9d118684a5593c031918cef402e75d25718)
@@ -308,10 +308,11 @@
  * @param ucode   Uspace pointer to top-half IRQ code.
  *
- * @return  IRQ capability handle.
- * @return  Negative error code.
+ * @param[out] uspace_handle  Uspace pointer to IRQ capability handle
+ *
+ * @return  Error code.
  *
  */
 int ipc_irq_subscribe(answerbox_t *box, inr_t inr, sysarg_t imethod,
-    irq_code_t *ucode)
+    irq_code_t *ucode, cap_handle_t *uspace_handle)
 {
 	if ((inr < 0) || (inr > last_inr))
@@ -333,4 +334,10 @@
 		return handle;
 	
+	int rc = copy_to_uspace(uspace_handle, &handle, sizeof(cap_handle_t));
+	if (rc != EOK) {
+		cap_free(TASK, handle);
+		return rc;
+	}
+
 	irq_t *irq = (irq_t *) slab_alloc(irq_cache, FRAME_ATOMIC);
 	if (!irq) {
@@ -371,5 +378,5 @@
 	cap_publish(TASK, handle, kobject);
 	
-	return handle;
+	return EOK;
 }
 
Index: kernel/generic/src/ipc/sysipc.c
===================================================================
--- kernel/generic/src/ipc/sysipc.c	(revision 6deb2cdd4f9ffa23e068faa9b3d977ec3399c1ed)
+++ kernel/generic/src/ipc/sysipc.c	(revision 9233e9d118684a5593c031918cef402e75d25718)
@@ -864,15 +864,17 @@
  * @param ucode   Uspace pointer to the top-half pseudocode.
  *
- * @return IRQ kernel object capability
+ * @param[out] uspace_handle  Uspace pointer to IRQ kernel object capability
+ *
  * @return EPERM
  * @return Error code returned by ipc_irq_subscribe().
  *
  */
-sysarg_t sys_ipc_irq_subscribe(inr_t inr, sysarg_t imethod, irq_code_t *ucode)
+sysarg_t sys_ipc_irq_subscribe(inr_t inr, sysarg_t imethod, irq_code_t *ucode,
+	cap_handle_t *uspace_handle)
 {
 	if (!(perm_get(TASK) & PERM_IRQ_REG))
 		return EPERM;
 	
-	return ipc_irq_subscribe(&TASK->answerbox, inr, imethod, ucode);
+	return ipc_irq_subscribe(&TASK->answerbox, inr, imethod, ucode, uspace_handle);
 }
 
