diff -ruN klic-3.003-2002-02-17/compiler/write.kl1 klic-3.003-2002-02-17a/compiler/write.kl1
--- klic-3.003-2002-02-17/compiler/write.kl1	Wed Jan 23 16:42:17 2002
+++ klic-3.003-2002-02-17a/compiler/write.kl1	Sun Feb 17 13:55:20 2002
@@ -362,7 +362,9 @@
 write_interrupt_call( N, _ )-Out :- N=<0 |
   klic_comp_obj:klicformat(
     " interrupt_0:\n"
-    "  allocp = interrupt_goal( allocp, toppred, reasonp );\n" )-Out.
+    "  set_heapp(allocp);\n"
+    "  interrupt_goal0(toppred, reasonp);\n"
+    "  allocp = heapp();\n" )-Out.
 write_interrupt_call( N, Max )-Out :- N>0 |
   N1 := N-1,
   Off := N1+2,
diff -ruN klic-3.003-2002-02-17/include/klic/control.h klic-3.003-2002-02-17a/include/klic/control.h
--- klic-3.003-2002-02-17/include/klic/control.h	Sun Feb 17 13:13:02 2002
+++ klic-3.003-2002-02-17a/include/klic/control.h	Sun Feb 17 13:56:30 2002
@@ -12,6 +12,7 @@
 
 /* runtime/faisus.c */
 extern q* interrupt_goal(q* allocp, const struct predicate* pred, q* reasonp);
+extern void interrupt_goal0(const struct predicate* pred, q* reasonp);
 extern int check_stack_for_alternatively(q* allocp, q* reasonp);
 
 
diff -ruN klic-3.003-2002-02-17/runtime/faisus.c klic-3.003-2002-02-17a/runtime/faisus.c
--- klic-3.003-2002-02-17/runtime/faisus.c	Sat Feb 16 11:53:49 2002
+++ klic-3.003-2002-02-17a/runtime/faisus.c	Sun Feb 17 13:59:04 2002
@@ -172,7 +172,18 @@
   const struct predicate* pred;
   q* reasonp;
 {
+  set_heapp(allocp);
+  interrupt_goal0(pred, reasonp);
+  return heapp();
+}
+
+extern void
+interrupt_goal0(pred, reasonp)
+  const struct predicate* pred;
+  q* reasonp;
+{
   declare_globals;
+  q* allocp = heapp();
   struct goalrec* goal = (struct goalrec*) allocp;
   allocp += pred->arity + 2;
   goal->pred = pred;
@@ -190,7 +201,8 @@
       rsmg->next = goal;
     }
     resumed_goals = goal;
-    return allocp;
+    set_heapp(allocp);
+    return;
   } else if (reasonp == reasons) {
     do_fail(goal, reasons[0]);
   } else {
@@ -205,7 +217,8 @@
 	if (!isref(tmp)) {
 	  derefone(iv) = tmp;
 	  resume_same_prio(goal);
-	  return allocp;
+	  set_heapp(allocp);
+	  return;
 	}
 	ov = v;
 	v = tmp;
@@ -217,7 +230,8 @@
     if (reasonp > reasons) {
       if (stepping_flag) {
 	allocp = step_susp(allocp, goal, reasonp, 0);
-	return allocp;
+	set_heapp(allocp);
+	return;
       } else if (trace_flag) {
 	goal = trace_susp(goal, reasonp, 0);
       }
@@ -235,7 +249,8 @@
 	  tmp1 = derefone(tmp);
 	  if ( !isref(tmp1) ) {
 	    resume_same_prio(goal);
-	    return allocp;
+	    set_heapp(allocp);
+	    return;
 	  }
 	  if (derefone(tmp1) == tmp) break;
 	}
@@ -290,7 +305,8 @@
 	suspensions++;
       }
     }
-    return allocp;
+    set_heapp(allocp);
+    return;
   }
 }
 
