diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c
index 5176e8d6ace37133972094c9ab417dcb484ff88d..a2a94f1e826f00d788e7f493d38ed978f6790f89 100644
--- a/src/backend/commands/cluster.c
+++ b/src/backend/commands/cluster.c
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.167 2008/01/02 23:34:42 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.168 2008/01/15 21:20:28 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -751,6 +751,13 @@ copy_heap_data(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex)
 	vacuum_set_xid_limits(-1, OldHeap->rd_rel->relisshared,
 						  &OldestXmin, &FreezeXid);
 
+	/*
+	 * FreezeXid will become the table's new relfrozenxid, and that mustn't
+	 * go backwards, so take the max.
+	 */
+	if (TransactionIdPrecedes(FreezeXid, OldHeap->rd_rel->relfrozenxid))
+		FreezeXid = OldHeap->rd_rel->relfrozenxid;
+
 	/* Initialize the rewrite operation */
 	rwstate = begin_heap_rewrite(NewHeap, OldestXmin, FreezeXid, use_wal);