diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 0d4ed602d7..3ec85b56cd 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -8001,16 +8001,10 @@ heap_xlog_delete(XLogReaderState *record)
 	XLogRecPtr	lsn = record->EndRecPtr;
 	xl_heap_delete *xlrec = (xl_heap_delete *) XLogRecGetData(record);
 	Buffer		buffer;
-	Page		page;
-	ItemId		lp = NULL;
-	HeapTupleHeader htup;
 	BlockNumber blkno;
 	RelFileNode target_node;
-	ItemPointerData target_tid;
 
 	XLogRecGetBlockTag(record, 0, &target_node, NULL, &blkno);
-	ItemPointerSetBlockNumber(&target_tid, blkno);
-	ItemPointerSetOffsetNumber(&target_tid, xlrec->offnum);
 
 	/*
 	 * The visibility map may need to be fixed even if the heap page is
@@ -8029,10 +8023,16 @@ heap_xlog_delete(XLogReaderState *record)
 
 	if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO)
 	{
+	    Page		    page;
+	    HeapTupleHeader htup;
+	    ItemId		    lp;
+
 		page = BufferGetPage(buffer);
 
 		if (PageGetMaxOffsetNumber(page) >= xlrec->offnum)
 			lp = PageGetItemId(page, xlrec->offnum);
+		else
+			lp = NULL;
 
 		if (PageGetMaxOffsetNumber(page) < xlrec->offnum || !ItemIdIsNormal(lp))
 			elog(PANIC, "invalid lp");
@@ -8060,7 +8060,7 @@ heap_xlog_delete(XLogReaderState *record)
 		if (xlrec->flags & XLH_DELETE_IS_PARTITION_MOVE)
 			HeapTupleHeaderSetMovedPartitions(htup);
 		else
-			htup->t_ctid = target_tid;
+			ItemPointerSet(&htup->t_ctid, blkno, xlrec->offnum);
 		PageSetLSN(page, lsn);
 		MarkBufferDirty(buffer);
 	}
@@ -8075,23 +8075,12 @@ heap_xlog_insert(XLogReaderState *record)
 	xl_heap_insert *xlrec = (xl_heap_insert *) XLogRecGetData(record);
 	Buffer		buffer;
 	Page		page;
-	union
-	{
-		HeapTupleHeaderData hdr;
-		char		data[MaxHeapTupleSize];
-	}			tbuf;
-	HeapTupleHeader htup;
-	xl_heap_header xlhdr;
-	uint32		newlen;
 	Size		freespace = 0;
 	RelFileNode target_node;
 	BlockNumber blkno;
-	ItemPointerData target_tid;
 	XLogRedoAction action;
 
 	XLogRecGetBlockTag(record, 0, &target_node, NULL, &blkno);
-	ItemPointerSetBlockNumber(&target_tid, blkno);
-	ItemPointerSetOffsetNumber(&target_tid, xlrec->offnum);
 
 	/*
 	 * The visibility map may need to be fixed even if the heap page is
@@ -8123,8 +8112,16 @@ heap_xlog_insert(XLogReaderState *record)
 		action = XLogReadBufferForRedo(record, 0, &buffer);
 	if (action == BLK_NEEDS_REDO)
 	{
-		Size		datalen;
-		char	   *data;
+	    union
+	    {
+		    HeapTupleHeaderData hdr;
+		    char		data[MaxHeapTupleSize];
+	    } tbuf;
+	    xl_heap_header xlhdr;		
+	    HeapTupleHeader htup;
+		Size		    datalen;
+	    uint32		    newlen;
+		char	       *data;
 
 		page = BufferGetPage(buffer);
 
@@ -8150,7 +8147,7 @@ heap_xlog_insert(XLogReaderState *record)
 		htup->t_hoff = xlhdr.t_hoff;
 		HeapTupleHeaderSetXmin(htup, XLogRecGetXid(record));
 		HeapTupleHeaderSetCmin(htup, FirstCommandId);
-		htup->t_ctid = target_tid;
+		ItemPointerSet(&htup->t_ctid, blkno, xlrec->offnum);
 
 		if (PageAddItem(page, (Item) htup, newlen, xlrec->offnum,
 						true, true) == InvalidOffsetNumber)
@@ -8285,8 +8282,7 @@ heap_xlog_multi_insert(XLogReaderState *record)
 			htup->t_hoff = xlhdr->t_hoff;
 			HeapTupleHeaderSetXmin(htup, XLogRecGetXid(record));
 			HeapTupleHeaderSetCmin(htup, FirstCommandId);
-			ItemPointerSetBlockNumber(&htup->t_ctid, blkno);
-			ItemPointerSetOffsetNumber(&htup->t_ctid, offnum);
+		    ItemPointerSet(&htup->t_ctid, blkno, offnum);
 
 			offnum = PageAddItem(page, (Item) htup, newlen, offnum, true, true);
 			if (offnum == InvalidOffsetNumber)
@@ -8331,11 +8327,11 @@ heap_xlog_update(XLogReaderState *record, bool hot_update)
 	RelFileNode rnode;
 	BlockNumber oldblk;
 	BlockNumber newblk;
-	ItemPointerData newtid;
 	Buffer		obuffer,
 				nbuffer;
 	Page		page;
 	OffsetNumber offnum;
+	OffsetNumber new_offnum;
 	ItemId		lp = NULL;
 	HeapTupleData oldtup;
 	HeapTupleHeader htup;
@@ -8366,7 +8362,7 @@ heap_xlog_update(XLogReaderState *record, bool hot_update)
 	else
 		oldblk = newblk;
 
-	ItemPointerSet(&newtid, newblk, xlrec->new_offnum);
+	new_offnum = xlrec->new_offnum;
 
 	/*
 	 * The visibility map may need to be fixed even if the heap page is
@@ -8421,8 +8417,9 @@ heap_xlog_update(XLogReaderState *record, bool hot_update)
 								   &htup->t_infomask2);
 		HeapTupleHeaderSetXmax(htup, xlrec->old_xmax);
 		HeapTupleHeaderSetCmax(htup, FirstCommandId, false);
+
 		/* Set forward chain link in t_ctid */
-		htup->t_ctid = newtid;
+		ItemPointerSet(&htup->t_ctid, newblk, new_offnum);
 
 		/* Mark the page as a candidate for pruning */
 		PageSetPrunable(page, XLogRecGetXid(record));
@@ -8555,8 +8552,9 @@ heap_xlog_update(XLogReaderState *record, bool hot_update)
 		HeapTupleHeaderSetXmin(htup, XLogRecGetXid(record));
 		HeapTupleHeaderSetCmin(htup, FirstCommandId);
 		HeapTupleHeaderSetXmax(htup, xlrec->new_xmax);
+
 		/* Make sure there is no forward chain link in t_ctid */
-		htup->t_ctid = newtid;
+		ItemPointerSet(&htup->t_ctid, newblk, new_offnum);
 
 		offnum = PageAddItem(page, (Item) htup, newlen, offnum, true, true);
 		if (offnum == InvalidOffsetNumber)