diff --git a/contrib/pg_upgrade/pg_upgrade.c b/contrib/pg_upgrade/pg_upgrade.c
index 64fb8f8398362dd83c8865852a262ef958d7a2b8..820445ce557059f9c6f315b57af704419961e882 100644
--- a/contrib/pg_upgrade/pg_upgrade.c
+++ b/contrib/pg_upgrade/pg_upgrade.c
@@ -7,6 +7,28 @@
  *	contrib/pg_upgrade/pg_upgrade.c
  */
 
+/*
+ *	To simplify the upgrade process, we force certain system items to be
+ *	consistent between old and new clusters:
+ *
+ *	We control all assignments of pg_class.relfilenode so we can keep the
+ *	same relfilenodes for old and new files.  The only exception is
+ *	pg_largeobject, pg_largeobject_metadata, and its indexes, which can
+ *	change due to a cluster, reindex, or vacuum full.  (We don't create
+ *	those so have no control over their oid/relfilenode values.)
+ *
+ *	While pg_class.oid and pg_class.relfilenode are intially the same, they
+ *	can diverge due to cluster, reindex, or vacuum full.  The new cluster
+ *	will again have matching pg_class.relfilenode and pg_class.oid values,
+ *	but based on the new relfilenode value, so the old/new oids might
+ *	differ.
+ *
+ *	We control all assignments of pg_type.oid because these are stored
+ *	in composite types.
+ */
+
+
+ 
 #include "pg_upgrade.h"
 
 #ifdef HAVE_LANGINFO_H
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 4c55db7e3ccfe283342998e676d4c6542665de67..b36efcdba3cbab9608f1739002b4c03ae15227e2 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -73,7 +73,7 @@
 #include "utils/tqual.h"
 
 
-/* Kluge for upgrade-in-place support */
+/* Potentially set by contrib/pg_upgrade_support functions */
 Oid			binary_upgrade_next_heap_relfilenode = InvalidOid;
 Oid			binary_upgrade_next_toast_relfilenode = InvalidOid;
 
@@ -986,7 +986,10 @@ heap_create_with_catalog(const char *relname,
 	 */
 	if (!OidIsValid(relid))
 	{
-		/* Use binary-upgrade overrides if applicable */
+		/*
+		 *	Use binary-upgrade override for pg_class.relfilenode/oid,
+		 *	if supplied.
+		 */
 		if (OidIsValid(binary_upgrade_next_heap_relfilenode) &&
 			(relkind == RELKIND_RELATION || relkind == RELKIND_SEQUENCE ||
 			 relkind == RELKIND_VIEW || relkind == RELKIND_COMPOSITE_TYPE ||
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 4dd89e18aac7bdf42782062625fe49145ca77291..b45db4c9ec36874d4d251289551af8778622545a 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -68,7 +68,7 @@
 #include "utils/tqual.h"
 
 
-/* Kluge for upgrade-in-place support */
+/* Potentially set by contrib/pg_upgrade_support functions */
 Oid			binary_upgrade_next_index_relfilenode = InvalidOid;
 
 /* state info for validate_index bulkdelete callback */
@@ -640,7 +640,10 @@ index_create(Oid heapRelationId,
 	 */
 	if (!OidIsValid(indexRelationId))
 	{
-		/* Use binary-upgrade override if applicable */
+		/*
+		 *	Use binary-upgrade override for pg_class.relfilenode/oid,
+		 *	if supplied.
+		 */
 		if (OidIsValid(binary_upgrade_next_index_relfilenode))
 		{
 			indexRelationId = binary_upgrade_next_index_relfilenode;
diff --git a/src/backend/catalog/pg_enum.c b/src/backend/catalog/pg_enum.c
index 0cc0a0c1b386c72116ac593e7c778994c5f7f583..e87a9311bdd2dec32bac08239e5da9dd502ccf35 100644
--- a/src/backend/catalog/pg_enum.c
+++ b/src/backend/catalog/pg_enum.c
@@ -28,6 +28,7 @@
 #include "utils/tqual.h"
 
 
+/* Potentially set by contrib/pg_upgrade_support functions */
 Oid      binary_upgrade_next_pg_enum_oid = InvalidOid;
 
 static void RenumberEnumType(Relation pg_enum, HeapTuple *existing, int nelems);
@@ -313,9 +314,9 @@ restart:
 	if (OidIsValid(binary_upgrade_next_pg_enum_oid))
 	{
 		/*
-		 * In binary upgrades, just add the new label with the predetermined
-		 * Oid.  It's pg_upgrade's responsibility that the Oid meets
-		 * requirements.
+		 *	Use binary-upgrade override for pg_enum.oid, if supplied.
+		 *	During binary upgrade, all pg_enum.oid's are set this way
+		 *	so they are guaranteed to be consistent.
 		 */
 		if (neighbor != NULL)
 			ereport(ERROR,
diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c
index 69ff191ca8ed9e2200947bd3ed206ff31123dcf5..9c249a7ff754e507a147ab9e2128da8a67dd95b6 100644
--- a/src/backend/catalog/pg_type.c
+++ b/src/backend/catalog/pg_type.c
@@ -33,6 +33,7 @@
 #include "utils/rel.h"
 #include "utils/syscache.h"
 
+/* Potentially set by contrib/pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_type_oid = InvalidOid;
 
 /* ----------------------------------------------------------------
@@ -121,6 +122,7 @@ TypeShellMake(const char *typeName, Oid typeNamespace, Oid ownerId)
 	 */
 	tup = heap_form_tuple(tupDesc, values, nulls);
 
+	/* Use binary-upgrade override for pg_type.oid, if supplied. */
 	if (OidIsValid(binary_upgrade_next_pg_type_oid))
 	{
 		HeapTupleSetOid(tup, binary_upgrade_next_pg_type_oid);
@@ -422,6 +424,7 @@ TypeCreate(Oid newTypeOid,
 		/* Force the OID if requested by caller */
 		if (OidIsValid(newTypeOid))
 			HeapTupleSetOid(tup, newTypeOid);
+		/* Use binary-upgrade override for pg_type.oid, if supplied. */
 		else if (OidIsValid(binary_upgrade_next_pg_type_oid))
 		{
 			HeapTupleSetOid(tup, binary_upgrade_next_pg_type_oid);
diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c
index 59838e305f6dbb85e2643debf1ade284bcfd6e40..e4951226818f40b1ed12c19e78ed73df01980191 100644
--- a/src/backend/catalog/toasting.c
+++ b/src/backend/catalog/toasting.c
@@ -31,7 +31,7 @@
 #include "utils/builtins.h"
 #include "utils/syscache.h"
 
-/* Kluges for upgrade-in-place support */
+/* Potentially set by contrib/pg_upgrade_support functions */
 extern Oid	binary_upgrade_next_toast_relfilenode;
 
 Oid			binary_upgrade_next_pg_type_toast_oid = InvalidOid;
@@ -200,6 +200,7 @@ create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid, Datum reloptio
 	else
 		namespaceid = PG_TOAST_NAMESPACE;
 
+	/* Use binary-upgrade override for pg_type.oid, if supplied. */
 	if (OidIsValid(binary_upgrade_next_pg_type_toast_oid))
 	{
 		toast_typid = binary_upgrade_next_pg_type_toast_oid;
diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c
index 113bede89fab1da1369ce33f70d0c18021144a90..bc66c3e6400425270d493e119d1a9c28a21b9b9e 100644
--- a/src/backend/commands/typecmds.c
+++ b/src/backend/commands/typecmds.c
@@ -74,6 +74,7 @@ typedef struct
 	/* atts[] is of allocated length RelationGetNumberOfAttributes(rel) */
 } RelToCheck;
 
+/* Potentially set by contrib/pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_type_array_oid = InvalidOid;
 
 static Oid	findTypeInputFunction(List *procname, Oid typeOid);
@@ -1517,7 +1518,7 @@ AssignTypeArrayOid(void)
 {
 	Oid			type_array_oid;
 
-	/* Pre-assign the type's array OID for use in pg_type.typarray */
+	/* Use binary-upgrade override for pg_type.typarray, if supplied. */
 	if (OidIsValid(binary_upgrade_next_pg_type_array_oid))
 	{
 		type_array_oid = binary_upgrade_next_pg_type_array_oid;