Index: kernel/arch/ia64/include/arch/istate.h
===================================================================
--- kernel/arch/ia64/include/arch/istate.h	(revision c48de9159898ec9161fffbe96e51b3e048feeda2)
+++ kernel/arch/ia64/include/arch/istate.h	(revision 2e311daf8cae0e3b930fd0f490e13611dd9eaa77)
@@ -71,5 +71,5 @@
 _NO_TRACE static inline int istate_from_uspace(istate_t *istate)
 {
-	return (istate->cr_iip) < 0xe000000000000000ULL;
+	return istate->cr_ipsr.cpl == PSR_CPL_USER;
 }
 
Index: kernel/arch/ia64/include/arch/mm/page.h
===================================================================
--- kernel/arch/ia64/include/arch/mm/page.h	(revision c48de9159898ec9161fffbe96e51b3e048feeda2)
+++ kernel/arch/ia64/include/arch/mm/page.h	(revision 2e311daf8cae0e3b930fd0f490e13611dd9eaa77)
@@ -38,4 +38,5 @@
 
 #include <arch/mm/frame.h>
+#include <arch/register.h>
 
 #ifndef __ASSEMBLER__
@@ -76,6 +77,6 @@
 
 /** Privilege Levels. Only the most and the least privileged ones are ever used. */
-#define PL_KERNEL  0x00
-#define PL_USER    0x03
+#define PL_KERNEL  PSR_CPL_KERNEL
+#define PL_USER    PSR_CPL_USER
 
 /* Access Rigths. Only certain combinations are used by the kernel. */
Index: kernel/arch/ia64/include/arch/register.h
===================================================================
--- kernel/arch/ia64/include/arch/register.h	(revision c48de9159898ec9161fffbe96e51b3e048feeda2)
+++ kernel/arch/ia64/include/arch/register.h	(revision 2e311daf8cae0e3b930fd0f490e13611dd9eaa77)
@@ -57,4 +57,7 @@
 #define PSR_RT_MASK   (1 << 27)
 #define PSR_IT_MASK   (1 << 36)
+
+#define PSR_CPL_USER   3
+#define PSR_CPL_KERNEL 0
 
 #define PSR_CPL_SHIFT         32
