Index: kernel/generic/include/interrupt.h
===================================================================
--- kernel/generic/include/interrupt.h	(revision c11ebb6a026c1d82c4c0991dcc4901f177ad7f1d)
+++ kernel/generic/include/interrupt.h	(revision 63594c0852ded96012d0d14536f64726a4ca9b40)
@@ -60,4 +60,5 @@
 extern void fault_if_from_uspace(istate_t *, const char *, ...)
     PRINTF_ATTRIBUTE(2, 3);
+extern istate_t *istate_get(thread_t *);
 extern iroutine_t exc_register(unsigned int, const char *, bool, iroutine_t);
 extern void exc_dispatch(unsigned int, istate_t *);
Index: kernel/generic/src/interrupt/interrupt.c
===================================================================
--- kernel/generic/src/interrupt/interrupt.c	(revision c11ebb6a026c1d82c4c0991dcc4901f177ad7f1d)
+++ kernel/generic/src/interrupt/interrupt.c	(revision 63594c0852ded96012d0d14536f64726a4ca9b40)
@@ -209,4 +209,10 @@
 }
 
+istate_t *istate_get(thread_t *thread)
+{
+	return (istate_t *) ((uint8_t *) thread->kstack + THREAD_STACK_SIZE -
+	    sizeof(istate_t));
+}
+
 #ifdef CONFIG_KCONSOLE
 
Index: kernel/generic/src/syscall/syscall.c
===================================================================
--- kernel/generic/src/syscall/syscall.c	(revision c11ebb6a026c1d82c4c0991dcc4901f177ad7f1d)
+++ kernel/generic/src/syscall/syscall.c	(revision 63594c0852ded96012d0d14536f64726a4ca9b40)
@@ -45,4 +45,5 @@
 #include <debug.h>
 #include <ddi/device.h>
+#include <interrupt.h>
 #include <ipc/sysipc.h>
 #include <synch/futex.h>
@@ -66,7 +67,13 @@
 #ifdef CONFIG_UDEBUG
 	/*
+	 * An istate_t-compatible record was created on the stack by the
+	 * low-level syscall handler. This is the userspace space state
+	 * structure.
+	 */
+	THREAD->udebug.uspace_state = istate_get(THREAD);
+
+	/*
 	 * Early check for undebugged tasks. We do not lock anything as this
 	 * test need not be precise in either direction.
-	 *
 	 */
 	if (THREAD->udebug.active)
@@ -98,4 +105,7 @@
 		udebug_stoppable_end();
 	}
+
+	/* Clear userspace state pointer */
+	THREAD->udebug.uspace_state = NULL;
 #endif
 	
Index: uspace/app/taskdump/taskdump.c
===================================================================
--- uspace/app/taskdump/taskdump.c	(revision c11ebb6a026c1d82c4c0991dcc4901f177ad7f1d)
+++ uspace/app/taskdump/taskdump.c	(revision 63594c0852ded96012d0d14536f64726a4ca9b40)
@@ -326,5 +326,5 @@
 
 	sym_pc = fmt_sym_address(pc);
-	printf("Thread %p crashed at %s. FP = %p\n", (void *) thash,
+	printf("Thread %p: PC = %s. FP = %p\n", (void *) thash,
 	    sym_pc, (void *) fp);
 	free(sym_pc);
