diff --git a/ghc/rts/GCCompact.c b/ghc/rts/GCCompact.c
index 7b2aca06aa6edca90c617ba05827237ecb81c40d..b3f4fb7d2110d3d568467e032f08604911448b65 100644
--- a/ghc/rts/GCCompact.c
+++ b/ghc/rts/GCCompact.c
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: GCCompact.c,v 1.3 2001/07/24 15:13:01 simonmar Exp $
+ * $Id: GCCompact.c,v 1.4 2001/07/25 11:55:57 simonmar Exp $
  *
  * (c) The GHC Team 2001
  *
@@ -148,18 +148,23 @@ thread_static( StgClosure* p )
       
     case IND_STATIC:
 	thread((StgPtr)&((StgInd *)p)->indirectee);
-	break;
+	p = IND_STATIC_LINK(p);
+	continue;
       
     case THUNK_STATIC:
+	p = THUNK_STATIC_LINK(p);
+	continue;
     case FUN_STATIC:
+	p = FUN_STATIC_LINK(p);
+	continue;
     case CONSTR_STATIC:
-	break;
+	p = STATIC_LINK(info,p);
+	continue;
       
     default:
 	barf("thread_static: strange closure %d", (int)(info->type));
     }
 
-    p = STATIC_LINK(info,p);
   }
 }