diff --git a/arch/sparc/kernel/irq.c b/arch/sparc/kernel/irq.c
index c8633ae9c38aa893f0214ad1f93f76855ad36826..bcd678d8fc0d131cbdb9d5cbcd600dc3f5b3aea5 100644
--- a/arch/sparc/kernel/irq.c
+++ b/arch/sparc/kernel/irq.c
@@ -60,6 +60,7 @@ struct irl_vector_elem {
 	irq_handler_t handler;
 	enum isr_exec_priority priority;
 	void *data;
+	unsigned int irq;
 	struct list_head handler_node;
 };
 
@@ -400,6 +401,7 @@ static int leon_irq_queue(struct irl_vector_elem *p_elem)
 	uint32_t psr_flags;
 	struct irl_vector_elem *p_queue;
 
+
 	if (unlikely(list_empty(&irq_queue_pool_head)))
 		return -EBUSY;
 
@@ -412,6 +414,7 @@ static int leon_irq_queue(struct irl_vector_elem *p_elem)
 	p_queue->handler  = p_elem->handler;
 	p_queue->priority = p_elem->priority;
 	p_queue->data     = p_elem->data;
+	p_queue->irq      = p_elem->irq;
 
 	list_move_tail(&p_queue->handler_node, &irl_queue_head);
 
@@ -422,12 +425,7 @@ static int leon_irq_queue(struct irl_vector_elem *p_elem)
 
 
 /**
- *
  * @brief execute deferred (low-priority) handlers
- *
- * @note see todo
- * @todo TODO we do not track deferred handler IRQ numbers, so we'll just
- *	 pass -1 for now and hope the user knows what he's doing -.-
  */
 
 void leon_irq_queue_execute(void)
@@ -446,7 +444,7 @@ void leon_irq_queue_execute(void)
 
 		if (likely(p_elem->handler)) {
 
-			if (p_elem->handler(-1, p_elem->data))
+			if (p_elem->handler(p_elem->irq, p_elem->data))
 				leon_irq_queue(p_elem);
 			else
 				list_add_tail(&p_elem->handler_node,
@@ -610,9 +608,10 @@ int irl_register_handler(unsigned int irq,
 	p_elem = list_entry((&irl_pool_head)->next, struct irl_vector_elem,
 			    handler_node);
 
-	p_elem->handler = handler;
+	p_elem->handler  = handler;
 	p_elem->priority = priority;
-	p_elem->data = data;
+	p_elem->data     = data;
+	p_elem->irq      = irq;
 
 	list_move_tail(&p_elem->handler_node, &irl_vector[irq]);
 
@@ -672,9 +671,10 @@ static int eirl_register_handler(unsigned int irq,
 	p_elem = list_entry((&irl_pool_head)->next, struct irl_vector_elem,
 		    handler_node);
 
-	p_elem->handler = handler;
+	p_elem->handler  = handler;
 	p_elem->priority = priority;
-	p_elem->data = data;
+	p_elem->data     = data;
+	p_elem->irq      = LEON_REAL_EIRQ(irq);
 
 	list_move_tail(&p_elem->handler_node,
 		       &eirl_vector[LEON_REAL_EIRQ(irq)]);