diff --git a/ghc/includes/StgProf.h b/ghc/includes/StgProf.h
index b221ba76aedfccd3fbaeb69116652931be7986a4..76fcdc3e169394eb9b91471164e2ff3a28880e52 100644
--- a/ghc/includes/StgProf.h
+++ b/ghc/includes/StgProf.h
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: StgProf.h,v 1.4 1999/03/25 13:14:04 simonm Exp $
+ * $Id: StgProf.h,v 1.5 1999/04/08 15:43:44 simonm Exp $
  *
  * (c) The GHC Team, 1998
  *
@@ -270,7 +270,8 @@ extern CostCentreStack *CCS_LIST;         /* registered CCS list */
  
 /* These ENTER_CC_PAP things are only used in the RTS */
  
-#define ENTER_CCS_PAP(stack)					\
+#define ENTER_CCS_PAP(stack) /* nothing */
+#if 0 /* old version */
         do {							\
         CostCentreStack *ccs = (CostCentreStack *) (stack);	\
         if ( ! IS_CAF_OR_SUB_CCS(ccs) ) {			\
@@ -282,6 +283,7 @@ extern CostCentreStack *CCS_LIST;         /* registered CCS list */
         }							\
         CCCS_DETAIL_COUNT(CCCS->pap_count);			\
         } while(0)                      
+#endif
 
 #define ENTER_CCS_PAP_CL(closure)  \
         ENTER_CCS_PAP((closure)->header.prof.ccs)
diff --git a/ghc/rts/Profiling.c b/ghc/rts/Profiling.c
index eec5a71ae37624155f259e9a448ec15d2d6c2c7f..69b08811576e65a9dda5f108c6a87ee27cfa6319 100644
--- a/ghc/rts/Profiling.c
+++ b/ghc/rts/Profiling.c
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: Profiling.c,v 1.4 1999/03/25 13:14:06 simonm Exp $
+ * $Id: Profiling.c,v 1.5 1999/04/08 15:43:45 simonm Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -291,11 +291,12 @@ AppendCCS ( CostCentreStack *ccs1, CostCentreStack *ccs2 )
 {
   CostCentreStack *ccs;
   IF_DEBUG(prof, 
-	   fprintf(stderr,"Appending ");
-	   printCCS(ccs1);
-	   fprintf(stderr," to ");
-	   printCCS(ccs2);
-	   fprintf(stderr,"\n"));
+	   if (ccs1 != ccs2) {
+	     fprintf(stderr,"Appending ");
+	     printCCS(ccs1);
+	     fprintf(stderr," to ");
+	     printCCS(ccs2);
+	     fprintf(stderr,"\n");});
   return AppendCCS(ccs1,ccs2);
 }
 #endif
diff --git a/ghc/rts/Updates.hc b/ghc/rts/Updates.hc
index f5f692811f7160052170b759f13c0e2f388eceed..adc9a6ca8cf09240a42fc220192f49dd3130e3c3 100644
--- a/ghc/rts/Updates.hc
+++ b/ghc/rts/Updates.hc
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: Updates.hc,v 1.13 1999/03/26 10:29:06 simonm Exp $
+ * $Id: Updates.hc,v 1.14 1999/04/08 15:43:46 simonm Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -200,7 +200,7 @@ EXTFUN(stg_update_PAP)
 {
   nat Words, PapSize;
 #ifdef PROFILING
-  CostCentreStack *CCS_pap;
+  CostCentreStack *CCS_pap, *CCS_blame;
 #endif
   StgPAP* PapClosure;
   StgClosure *Fun, *Updatee;
@@ -228,6 +228,10 @@ EXTFUN(stg_update_PAP)
 #if defined(PROFILING)
     /* set "CC_pap" to go in the updatee (see Sansom thesis, p 183) */
     CCS_pap = Fun->header.prof.ccs;
+    CCS_blame = Fun->header.prof.ccs;
+    if (IS_CAF_OR_SUB_CCS(CCS_pap)) {
+      CCS_blame = CCCS;
+    }
 #endif
 
     if (Words == 0) { 
@@ -264,7 +268,7 @@ EXTFUN(stg_update_PAP)
 
 	TICK_ALLOC_UPD_PAP(1/*fun*/ + Words, 0);
 #ifdef PROFILING
-	CCS_ALLOC(CCS_pap, PapSize);
+	CCS_ALLOC(CCS_blame, PapSize);
 #endif
 
 	PapClosure = (StgPAP *)(Hp + 1 - PapSize); /* The new PapClosure */