diff --git a/src/error.c b/src/error.c
index c99d9a92438b5f2dd98ab461cd9383521b112a06..cb0f2594f0821b0c137637887f6768385f5152ca 100644
--- a/src/error.c
+++ b/src/error.c
@@ -19,8 +19,8 @@ ONERROR *onerror_stack=0;
 my_jmp_buf *init_recovery(JMP_BUF *r)
 {
   r->fp=fp;
-  r->sp=sp;
-  r->mark_sp=mark_sp;
+  r->sp=sp-evaluator_stack;
+  r->mark_sp=mark_sp - mark_stack;
   r->previous=recoveries;
   r->onerror=onerror_stack;
   recoveries=r;
@@ -33,7 +33,7 @@ void throw()
     fatal("No error recovery context.\n");
 
 #ifdef DEBUG
-  if(sp < recoveries->sp)
+  if(sp - evaluator_stack < recoveries->sp)
     fatal("Error in error.\n");
 #endif
 
@@ -49,8 +49,8 @@ void throw()
     fp = fp->parent_frame;
   }
 
-  pop_n_elems(sp - recoveries->sp);
-  mark_sp = recoveries->mark_sp;
+  pop_n_elems(sp - evaluator_stack - recoveries->sp);
+  mark_sp = mark_stack + recoveries->mark_sp;
 
   while(recoveries->onerror != onerror_stack)
   {
diff --git a/src/error.h b/src/error.h
index 9dce4c7787bf91d8e8d04f0986d6b4aaeea7888f..6934591dc88980e22740a574f7e212a00ae0de2f 100644
--- a/src/error.h
+++ b/src/error.h
@@ -30,8 +30,8 @@ typedef struct JMP_BUF
   struct JMP_BUF *previous;
   my_jmp_buf recovery;
   struct frame *fp;
-  struct svalue *sp;
-  struct svalue **mark_sp;
+  INT32 sp;
+  INT32 mark_sp;
   ONERROR *onerror;
 } JMP_BUF;