diff --git a/ghc/rts/GC.c b/ghc/rts/GC.c
index 6a54291a3fa91cb89f0f8466b452893b9dd08372..37a5cb177eafe4332c9400e122f154927d6000f2 100644
--- a/ghc/rts/GC.c
+++ b/ghc/rts/GC.c
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: GC.c,v 1.48 1999/03/09 14:24:43 sewardj Exp $
+ * $Id: GC.c,v 1.49 1999/03/09 15:33:16 sewardj Exp $
  *
  * (c) The GHC Team 1998-1999
  *
@@ -2036,6 +2036,18 @@ scavenge_mut_once_list(generation *gen)
       }
       continue;
 
+    case CAF_UNENTERED:
+      { 
+	StgCAF *caf = (StgCAF *)p;
+	caf->body  = evacuate(caf->body);
+	if (failed_to_evac) {
+	  failed_to_evac = rtsFalse;
+	  p->mut_link = new_list;
+	  new_list = p;
+	}
+      }
+      continue;
+
     default:
       /* shouldn't have anything else on the mutables list */
       barf("scavenge_mut_once_list: strange object?");
@@ -2569,6 +2581,7 @@ void RevertCAFs(void)
     caf->value = stgCast(StgClosure*,0xdeadbeef);
     caf->link  = stgCast(StgCAF*,0xdeadbeef);
   }
+  enteredCAFs = END_CAF_LIST;
 }
 
 void revert_dead_CAFs(void)
@@ -2576,8 +2589,9 @@ void revert_dead_CAFs(void)
     StgCAF* caf = enteredCAFs;
     enteredCAFs = END_CAF_LIST;
     while (caf != END_CAF_LIST) {
-        StgCAF* next = caf->link;
-        StgCAF* new = (StgCAF*)isAlive((StgClosure*)caf);
+        StgCAF *next, *new;
+        next = caf->link;
+        new = (StgCAF*)isAlive((StgClosure*)caf);
         if (new) {
            new->link = enteredCAFs;
            enteredCAFs = new;