diff --git a/src/constants.c b/src/constants.c
index 090cb93f2234abaa810ae2a8b809860550a893af..818180f2e9b46ebbfe704388ef2745529d8c23ed 100644
--- a/src/constants.c
+++ b/src/constants.c
@@ -15,7 +15,7 @@
 #include "error.h"
 #include "block_alloc.h"
 
-RCSID("$Id: constants.c,v 1.15 1999/03/02 03:13:13 hubbe Exp $");
+RCSID("$Id: constants.c,v 1.16 1999/04/08 23:54:26 hubbe Exp $");
 
 static INT32 num_callable=0;
 static struct mapping *builtin_constants = 0;
@@ -153,12 +153,13 @@ void quick_add_efun(char *name, int name_length,
 
 void cleanup_added_efuns(void)
 {
+#ifdef DO_PIKE_CLEANUP
   if(builtin_constants)
   {
     free_mapping(builtin_constants);
     builtin_constants=0;
   }
-  free_all_callable_blocks();
+#endif
 }
 void count_memory_in_callables(INT32 *num_, INT32 *size_)
 {
diff --git a/src/interpret.c b/src/interpret.c
index 78f982624e6a91e802996d7b61d34add2a44587f..99f785f6404524ad80d4ee49aa745b70e7f4f3f4 100644
--- a/src/interpret.c
+++ b/src/interpret.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: interpret.c,v 1.118 1999/03/19 11:43:14 hubbe Exp $");
+RCSID("$Id: interpret.c,v 1.119 1999/04/08 23:54:28 hubbe Exp $");
 #include "interpret.h"
 #include "object.h"
 #include "program.h"
@@ -1351,5 +1351,7 @@ void cleanup_interpret(void)
 
 void really_clean_up_interpret(void)
 {
+#ifdef DO_PIKE_CLEANUP
   free_all_pike_frame_blocks();
+#endif
 }
diff --git a/src/main.c b/src/main.c
index dd7257fbc7d024265c72b8a1be98970cf662a8fc..e671588249014661ee94bfb4f06629c4aec912dc 100644
--- a/src/main.c
+++ b/src/main.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: main.c,v 1.68 1999/04/08 22:27:07 hubbe Exp $");
+RCSID("$Id: main.c,v 1.69 1999/04/08 23:54:29 hubbe Exp $");
 #include "fdlib.h"
 #include "backend.h"
 #include "module.h"
@@ -540,7 +540,6 @@ void low_exit_main(void)
   free_svalue(& throw_value);
   throw_value.type=T_INT;
 
-  exit_destroy_called_mark_hash();
 #if defined(PIKE_DEBUG) && defined(DEBUG_MALLOC)
   if(verbose_debug_exit)
   {
@@ -610,7 +609,12 @@ void low_exit_main(void)
 
   cleanup_shared_string_table();
 #endif
-  cleanup_callbacks();
+
   really_clean_up_interpret();
+#ifdef DO_PIKE_CLEANUP
+  cleanup_callbacks();
+  free_all_callable_blocks();
+  exit_destroy_called_mark_hash();
+#endif
 }