diff --git a/arch/i386/paging.cc b/arch/i386/paging.cc
index 64c09562ccbf4ca64e1c0e008b7a3fa3d76b71dc..2c09b83907a006cec125dfc0d18e97db5d41b261 100644
--- a/arch/i386/paging.cc
+++ b/arch/i386/paging.cc
@@ -5,6 +5,7 @@
  */
 
 #include "paging.h"
+#include "hooks.h"
 
 namespace arch {
 
@@ -22,7 +23,7 @@ void MMU::init() {
 }
 
 // Pagefault interrupt handler printing details for debugging
-#if DEBUG
+#ifdef CONFIG_ARCH_MPU
 #include "idt.h"
 #include "output.h"
 #include "os/util/inline.h"
@@ -38,6 +39,8 @@ ISR(14) {
 	asm("mov %%cr2, %0" : "=r"(fault_addr));
 	asm("mov %%cr3, %0" : "=r"(cr3));
 
+	CALL_HOOK(FaultDetectedHook, MPUdetected, fault_addr, cr3);
+
 	debug << "PAGE FAULT for 0x" << hex << fault_addr;
 	debug << ", IP @ 0x" << cpu->eip;
 	debug << ", PD @ 0x" << cr3;
@@ -47,4 +50,4 @@ ISR(14) {
 }
 
 }
-#endif // DEBUG
+#endif // CONFIG_ARCH_CPU
diff --git a/os/hooks.h b/os/hooks.h
index 76c3e613462f5e1132fa7cb3d6a04542810f47c9..09b5c4b6671ad990509c503b9075029b02860d15 100644
--- a/os/hooks.h
+++ b/os/hooks.h
@@ -76,6 +76,7 @@ typedef enum DetectedFault_t {
 	STATE_ASSERTdetected = 9,
 	RETRY_ERRORdetected = 10,
 	TMRdetected = 11,
+	MPUdetected = 12,
 } DetectedFault_t;