diff --git a/dlls/krnl386.exe16/kernel16_private.h b/dlls/krnl386.exe16/kernel16_private.h
index a70dfeeec9f..cd08c40128f 100644
--- a/dlls/krnl386.exe16/kernel16_private.h
+++ b/dlls/krnl386.exe16/kernel16_private.h
@@ -335,17 +335,15 @@ static inline DWORD stack32_pop( CONTEXT *context )
                         __ASM_CFI(".cfi_rel_offset %ebp,0\n\t")         \
                         "movl %esp,%ebp\n\t"                            \
                         __ASM_CFI(".cfi_def_cfa_register %ebp\n\t")     \
-                        "leal -(0x2cc+4)(%esp),%esp\n\t"  /* sizeof(CONTEXT) + space for %eax */ \
-                        "movl %eax,-4(%ebp)\n\t"                        \
+                        "leal -0x2cc(%esp),%esp\n\t" /* sizeof(CONTEXT) */ \
                         "pushl %esp\n\t"             /* context */      \
                         "call " __ASM_STDCALL("RtlCaptureContext",4) "\n\t" \
-                        "movl -4(%ebp),%eax\n\t"                        \
-                        "movl %eax,0xb0(%esp)\n\t"   /* context->Eax */ \
+                        "movl %esp,%esi\n\t"                            \
                         "pushl %esp\n\t"             /* context */      \
                         "call " __ASM_STDCALL("__regs_" #name,4) "\n\t" \
-                        "pushl %esp\n\t"             /* context */      \
-                        "pushl $-2\n\t"   /* GetCurrentThread() */      \
-                        "call " __ASM_STDCALL("NtSetContextThread",8) "\n\t" \
+                        "pushl $0\n\t"               /* alertable */    \
+                        "pushl %esi\n\t"             /* context */      \
+                        "call " __ASM_STDCALL("NtContinue",8) "\n\t"    \
                         "ret" ) /* fake ret to make copy protections happy */
 
 #endif  /* __WINE_KERNEL16_PRIVATE_H */