Index: arch/ppc32/src/exception.S
===================================================================
--- arch/ppc32/src/exception.S	(revision 8333801cec5c86555a622bf903b31e2278b1c787)
+++ arch/ppc32/src/exception.S	(revision 3dcb108fa81dd39d274ae7339bba28b1d40d02e2)
@@ -152,10 +152,24 @@
 .global exc_system_reset
 exc_system_reset:
-	b exc_system_reset
+	CONTEXT_STORE
+	
+	lis r12, exc_dispatch@ha
+	addi r12, r12, exc_dispatch@l
+	mtsrr0 r12
+	
+	li r3, 0
+	b jump_to_kernel
 
 .org 0x200
 .global exc_machine_check
 exc_machine_check:
-	b exc_machine_check
+	CONTEXT_STORE
+	
+	lis r12, exc_dispatch@ha
+	addi r12, r12, exc_dispatch@l
+	mtsrr0 r12
+	
+	li r3, 1
+	b jump_to_kernel
 
 .org 0x300
@@ -164,9 +178,9 @@
 	CONTEXT_STORE
 	
-	lis r12, pht_refill@ha
-	addi r12, r12, pht_refill@l
-	mtsrr0 r12
-	
-	li r3, 1
+	lis r12, exc_dispatch@ha
+	addi r12, r12, exc_dispatch@l
+	mtsrr0 r12
+	
+	li r3, 2
 	b jump_to_kernel
 
@@ -176,9 +190,9 @@
 	CONTEXT_STORE
 	
-	lis r12, pht_refill@ha
-	addi r12, r12, pht_refill@l
-	mtsrr0 r12
-	
-	li r3, 0
+	lis r12, exc_dispatch@ha
+	addi r12, r12, exc_dispatch@l
+	mtsrr0 r12
+	
+	li r3, 3
 	b jump_to_kernel
 
@@ -187,10 +201,10 @@
 exc_external:
 	CONTEXT_STORE
-
-	lis r12, extint_handler@ha
-	addi r12, r12, extint_handler@l
-	mtsrr0 r12
-
-	li r3, 0
+	
+	lis r12, exc_dispatch@ha
+	addi r12, r12, exc_dispatch@l
+	mtsrr0 r12
+	
+	li r3, 4
 	b jump_to_kernel
 
@@ -198,15 +212,36 @@
 .global exc_alignment
 exc_alignment:
-	b exc_alignment
+	CONTEXT_STORE
+	
+	lis r12, exc_dispatch@ha
+	addi r12, r12, exc_dispatch@l
+	mtsrr0 r12
+	
+	li r3, 5
+	b jump_to_kernel
 
 .org 0x700
 .global exc_program
 exc_program:
-	b exc_program
+	CONTEXT_STORE
+	
+	lis r12, exc_dispatch@ha
+	addi r12, r12, exc_dispatch@l
+	mtsrr0 r12
+	
+	li r3, 6
+	b jump_to_kernel
 
 .org 0x800
 .global exc_fp_unavailable
 exc_fp_unavailable:
-	b exc_fp_unavailable
+	CONTEXT_STORE
+	
+	lis r12, exc_dispatch@ha
+	addi r12, r12, exc_dispatch@l
+	mtsrr0 r12
+	
+	li r3, 7
+	b jump_to_kernel
 
 .org 0x900
@@ -219,5 +254,5 @@
 	mtsrr0 r12
 	
-	li r3, 10
+	li r3, 8
 	b jump_to_kernel
 
@@ -225,10 +260,24 @@
 .global exc_reserved0
 exc_reserved0:
-	b exc_reserved0
+	CONTEXT_STORE
+	
+	lis r12, exc_dispatch@ha
+	addi r12, r12, exc_dispatch@l
+	mtsrr0 r12
+	
+	li r3, 9
+	b jump_to_kernel
 
 .org 0xb00
 .global exc_reserved1
 exc_reserved1:
-	b exc_reserved1
+	CONTEXT_STORE
+	
+	lis r12, exc_dispatch@ha
+	addi r12, r12, exc_dispatch@l
+	mtsrr0 r12
+	
+	li r3, 10
+	b jump_to_kernel
 
 .org 0xc00
@@ -242,3 +291,10 @@
 .global exc_trace
 exc_trace:
-	b exc_trace
+	CONTEXT_STORE
+	
+	lis r12, exc_dispatch@ha
+	addi r12, r12, exc_dispatch@l
+	mtsrr0 r12
+	
+	li r3, 12
+	b jump_to_kernel
Index: arch/ppc32/src/interrupt.c
===================================================================
--- arch/ppc32/src/interrupt.c	(revision 8333801cec5c86555a622bf903b31e2278b1c787)
+++ arch/ppc32/src/interrupt.c	(revision 3dcb108fa81dd39d274ae7339bba28b1d40d02e2)
@@ -46,4 +46,16 @@
 
 
+/** Handler of external interrupts */
+static void exception_external(int n, istate_t *istate)
+{
+	int inum;
+
+	while ((inum = pic_get_pending()) != -1) {
+		exc_dispatch(inum + INT_OFFSET, istate);
+		pic_ack_interrupt(inum);
+	}
+}
+
+
 static void exception_decrementer(int n, istate_t *istate)
 {
@@ -56,5 +68,14 @@
 void interrupt_init(void)
 {
+	exc_register(VECTOR_DATA_STORAGE, "data_storage", pht_refill);
+	exc_register(VECTOR_INSTRUCTION_STORAGE, "instruction_storage", pht_refill);
+	exc_register(VECTOR_EXTERNAL, "external", exception_external);
 	exc_register(VECTOR_DECREMENTER, "timer", exception_decrementer);
+}
+
+
+static void ipc_int(int n, istate_t *istate)
+{
+	ipc_irq_send_notif(n - INT_OFFSET);
 }
 
@@ -63,16 +84,4 @@
 void irq_ipc_bind_arch(__native irq)
 {
-	panic("not implemented\n");
-	/* TODO */
+	int_register(irq, "ipc_int", ipc_int);
 }
-
-/** Handler of externul interrupts */
-void extint_handler(int n, istate_t *istate)
-{
-	int inum;
-
-	while ((inum = pic_get_pending()) != -1) {
-		exc_dispatch(inum+INT_OFFSET, istate);
-		pic_ack_interrupt(inum);
-	}
-}
Index: arch/ppc32/src/mm/page.c
===================================================================
--- arch/ppc32/src/mm/page.c	(revision 8333801cec5c86555a622bf903b31e2278b1c787)
+++ arch/ppc32/src/mm/page.c	(revision 3dcb108fa81dd39d274ae7339bba28b1d40d02e2)
@@ -31,4 +31,5 @@
 #include <arch/mm/frame.h>
 #include <arch/asm.h>
+#include <arch/interrupt.h>
 #include <mm/frame.h>
 #include <mm/page.h>
@@ -188,5 +189,5 @@
  *
  */
-void pht_refill(bool data, istate_t *istate)
+void pht_refill(int n, istate_t *istate)
 {
 	__address badvaddr;
@@ -204,5 +205,5 @@
 	}
 	
-	if (data) {
+	if (n == VECTOR_DATA_STORAGE) {
 		asm volatile (
 			"mfdar %0\n"
