diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 05c790f3c77926682215a228a619c6a3dbb38383..a771ccb772c5bbab66ec0c417f480a0de155e26f 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -5456,6 +5456,7 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask,
 	bool		has_lockers;
 	TransactionId update_xid;
 	bool		update_committed;
+	bool		allow_old;
 
 	*flags = 0;
 
@@ -5517,7 +5518,9 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask,
 	 * anything.
 	 */
 
-	nmembers = GetMultiXactIdMembers(multi, &members, false);
+	allow_old = !(t_infomask & HEAP_LOCK_MASK) &&
+		HEAP_XMAX_IS_LOCKED_ONLY(t_infomask);
+	nmembers = GetMultiXactIdMembers(multi, &members, allow_old);
 	if (nmembers <= 0)
 	{
 		/* Nothing worth keeping */
@@ -6219,10 +6222,13 @@ heap_tuple_needs_freeze(HeapTupleHeader tuple, TransactionId cutoff_xid,
 			MultiXactMember *members;
 			int			nmembers;
 			int			i;
+			bool		allow_old;
 
 			/* need to check whether any member of the mxact is too old */
 
-			nmembers = GetMultiXactIdMembers(multi, &members, false);
+			allow_old = !(tuple->t_infomask & HEAP_LOCK_MASK) &&
+				HEAP_XMAX_IS_LOCKED_ONLY(tuple->t_infomask);
+			nmembers = GetMultiXactIdMembers(multi, &members, allow_old);
 
 			for (i = 0; i < nmembers; i++)
 			{
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index e94de8b25f497b3334624bcff576f51a1e37b295..2cf4bc033c85a12f44abbc92b228e1faa415cfee 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -911,7 +911,7 @@ AddNewRelationTuple(Relation pg_class_desc,
 		 * commands/sequence.c.)
 		 */
 		new_rel_reltup->relfrozenxid = InvalidTransactionId;
-		new_rel_reltup->relfrozenxid = InvalidMultiXactId;
+		new_rel_reltup->relminmxid = InvalidMultiXactId;
 	}
 
 	new_rel_reltup->relowner = relowner;