diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 190d86b..92599bc 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -4222,10 +4222,13 @@ retry:
 		if (!RecordIsValid(record, *RecPtr, emode))
 			goto next_record_is_invalid;
 		pageHeaderSize = XLogPageHeaderSize((XLogPageHeader) readBuf);
-		EndRecPtr.xlogid = readId;
-		EndRecPtr.xrecoff = readSeg * XLogSegSize + readOff +
+		if (!fetching_ckpt)
+		{
+			EndRecPtr.xlogid = readId;
+			EndRecPtr.xrecoff = readSeg * XLogSegSize + readOff +
 			pageHeaderSize +
 			MAXALIGN(SizeOfXLogContRecord + contrecord->xl_rem_len);
+		}
 
 		ReadRecPtr = *RecPtr;
 		/* needn't worry about XLOG SWITCH, it can't cross page boundaries */
@@ -4235,8 +4238,11 @@ retry:
 	/* Record does not cross a page boundary */
 	if (!RecordIsValid(record, *RecPtr, emode))
 		goto next_record_is_invalid;
-	EndRecPtr.xlogid = RecPtr->xlogid;
-	EndRecPtr.xrecoff = RecPtr->xrecoff + MAXALIGN(total_len);
+	if (!fetching_ckpt)
+	{
+		EndRecPtr.xlogid = RecPtr->xlogid;
+		EndRecPtr.xrecoff = RecPtr->xrecoff + MAXALIGN(total_len);
+	}
 
 	ReadRecPtr = *RecPtr;
 	memcpy(buffer, record, total_len);
@@ -4247,8 +4253,11 @@ retry:
 	if (record->xl_rmid == RM_XLOG_ID && record->xl_info == XLOG_SWITCH)
 	{
 		/* Pretend it extends to end of segment */
-		EndRecPtr.xrecoff += XLogSegSize - 1;
-		EndRecPtr.xrecoff -= EndRecPtr.xrecoff % XLogSegSize;
+		if (!fetching_ckpt)
+		{
+			EndRecPtr.xrecoff += XLogSegSize - 1;
+			EndRecPtr.xrecoff -= EndRecPtr.xrecoff % XLogSegSize;
+		}
 
 		/*
 		 * Pretend that readBuf contains the last page of the segment. This is
