diff --git a/src/gc.c b/src/gc.c
index 94192a53dde2236d9b803a42d9af8faaebfbc7bf..de2700abc25124c26c77865c510db2cd0e4c0079 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -30,7 +30,7 @@ struct callback *gc_evaluator_callback=0;
 
 #include "block_alloc.h"
 
-RCSID("$Id: gc.c,v 1.129 2000/09/03 23:11:29 mast Exp $");
+RCSID("$Id: gc.c,v 1.130 2000/09/03 23:56:17 mast Exp $");
 
 /* Run garbage collect approximately every time
  * 20 percent of all arrays, objects and programs is
@@ -2096,14 +2096,14 @@ int do_gc(void)
      * doesn't occur very often; only when something have both
      * external weak refs and nonweak cyclic refs from internal
      * things. */
-    gc_zap_ext_weak_refs_in_arrays();
-    /* Multisets handled as arrays. */
+    gc_zap_ext_weak_refs_in_mappings();
     if (gc_ext_weak_refs) {
-      gc_zap_ext_weak_refs_in_mappings();
+      gc_zap_ext_weak_refs_in_arrays();
+      /* Multisets handled as arrays. */
       if (gc_ext_weak_refs) {
-	gc_zap_ext_weak_refs_in_programs();
+	gc_zap_ext_weak_refs_in_objects();
 	if (gc_ext_weak_refs)
-	  gc_zap_ext_weak_refs_in_objects();
+	  gc_zap_ext_weak_refs_in_programs();
       }
     }
     GC_VERBOSE_DO(