diff --git a/src/backend/storage/page/bufpage.c b/src/backend/storage/page/bufpage.c
index 41642eb..e485398 100644
*** a/src/backend/storage/page/bufpage.c
--- b/src/backend/storage/page/bufpage.c
*************** static void
*** 441,446 ****
--- 441,450 ----
  compactify_tuples(itemIdSort itemidbase, int nitems, Page page)
  {
  	PageHeader	phdr = (PageHeader) page;
+ 	union {
+ 		char page[BLCKSZ];
+ 		double align;
+ 	} pagecopy;
  	Offset		upper;
  	int			i;
  
*************** compactify_tuples(itemIdSort itemidbase,
*** 448,464 ****
  	qsort((char *) itemidbase, nitems, sizeof(itemIdSortData),
  		  itemoffcompare);
  
  	upper = phdr->pd_special;
  	for (i = 0; i < nitems; i++)
  	{
  		itemIdSort	itemidptr = &itemidbase[i];
  		ItemId		lp;
  
- 		lp = PageGetItemId(page, itemidptr->offsetindex + 1);
  		upper -= itemidptr->alignedlen;
! 		memmove((char *) page + upper,
! 				(char *) page + itemidptr->itemoff,
! 				itemidptr->alignedlen);
  		lp->lp_off = upper;
  	}
  
--- 452,470 ----
  	qsort((char *) itemidbase, nitems, sizeof(itemIdSortData),
  		  itemoffcompare);
  
+ 	memcpy(pagecopy.page, page, BLCKSZ);
+ 
  	upper = phdr->pd_special;
  	for (i = 0; i < nitems; i++)
  	{
  		itemIdSort	itemidptr = &itemidbase[i];
  		ItemId		lp;
  
  		upper -= itemidptr->alignedlen;
! 		memcpy((char *) page + upper,
! 			   pagecopy.page + itemidptr->itemoff,
! 			   itemidptr->alignedlen);
! 		lp = PageGetItemId(page, itemidptr->offsetindex + 1);
  		lp->lp_off = upper;
  	}
  
