diff --git a/src/callback.c b/src/callback.c
index 8832009b0765007cf17c88d34f981a08ef9cb41f..e900dd45300c48ab545872f0736b1e872c3d849a 100644
--- a/src/callback.c
+++ b/src/callback.c
@@ -124,4 +124,5 @@ void cleanup_callbacks()
     callback_chunks=tmp->next;
     free((char *)tmp);
   }
+  free_callbacks=0;
 }
diff --git a/src/main.c b/src/main.c
index 257a869c21f1741d86506f21548a338f04750991..725f4b5c78223cb5e7154b419d86ffacaebb4090 100644
--- a/src/main.c
+++ b/src/main.c
@@ -4,7 +4,7 @@
 ||| See the files COPYING and DISCLAIMER for more information.
 \*/
 #include "global.h"
-RCSID("$Id: main.c,v 1.10 1996/11/14 01:24:12 hubbe Exp $");
+RCSID("$Id: main.c,v 1.11 1996/11/22 20:58:23 hubbe Exp $");
 #include "types.h"
 #include "backend.h"
 #include "module.h"
@@ -281,12 +281,12 @@ void exit_main()
   cleanup_added_efuns();
   cleanup_pike_types();
   cleanup_program();
-  cleanup_callbacks();
 
 #ifdef GC2
   do_gc();
 #endif
 
+  cleanup_callbacks();
   zap_all_arrays();
 
   cleanup_shared_string_table();