*** a/doc/src/sgml/ref/pg_resetxlog.sgml
--- b/doc/src/sgml/ref/pg_resetxlog.sgml
***************
*** 180,185 **** PostgreSQL documentation
--- 180,188 ----
     <filename>pg_control</> and then exit without modifying anything.
     This is mainly a debugging tool, but can be useful as a sanity check
     before allowing <command>pg_resetxlog</command> to proceed for real.
+    It will print values in two sections. In first section it will print
+    all original/guessed values and in second section all values to be
+    used after reset.
    </para>
  
    <para>
*** a/src/bin/pg_resetxlog/pg_resetxlog.c
--- b/src/bin/pg_resetxlog/pg_resetxlog.c
***************
*** 65,73 **** static XLogSegNo newXlogSegNo;	/* new XLOG segment # */
--- 65,82 ----
  static bool guessed = false;	/* T if we had to guess at any values */
  static const char *progname;
  
+ static uint32 set_xid_epoch = (uint32) -1;
+ static TransactionId set_xid = 0;
+ static Oid	set_oid = 0;
+ static MultiXactId set_mxid = 0;
+ static MultiXactOffset set_mxoff = (MultiXactOffset) -1;
+ static uint32 minXlogTli = 0;
+ static XLogSegNo minXlogSegNo = 0;
+ 
  static bool ReadControlFile(void);
  static void GuessControlValues(void);
  static void PrintControlValues(bool guessed);
+ static void PrintNewControlValues(void);
  static void RewriteControlFile(void);
  static void FindEndOfXLOG(void);
  static void KillExistingXLOG(void);
***************
*** 82,95 **** main(int argc, char *argv[])
  	int			c;
  	bool		force = false;
  	bool		noupdate = false;
- 	uint32		set_xid_epoch = (uint32) -1;
- 	TransactionId set_xid = 0;
- 	Oid			set_oid = 0;
- 	MultiXactId set_mxid = 0;
  	MultiXactId set_oldestmxid = 0;
- 	MultiXactOffset set_mxoff = (MultiXactOffset) -1;
- 	uint32		minXlogTli = 0;
- 	XLogSegNo	minXlogSegNo = 0;
  	char	   *endptr;
  	char	   *endptr2;
  	char	   *DataDir;
--- 91,97 ----
***************
*** 302,307 **** main(int argc, char *argv[])
--- 304,316 ----
  	FindEndOfXLOG();
  
  	/*
+ 	 * Print current control file parameters, if had to guess anything and -f
+ 	 * was not given or -n is given.
+ 	 */
+ 	if ((guessed && !force) || noupdate)
+ 		PrintControlValues(guessed);
+ 
+ 	/*
  	 * Adjust fields if required by switches.  (Do this now so that printout,
  	 * if any, includes these values.)
  	 */
***************
*** 352,362 **** main(int argc, char *argv[])
  
  	/*
  	 * If we had to guess anything, and -f was not given, just print the
! 	 * guessed values and exit.  Also print if -n is given.
  	 */
  	if ((guessed && !force) || noupdate)
  	{
! 		PrintControlValues(guessed);
  		if (!noupdate)
  		{
  			printf(_("\nIf these values seem acceptable, use -f to force reset.\n"));
--- 361,372 ----
  
  	/*
  	 * If we had to guess anything, and -f was not given, just print the
! 	 * values to be reset and exit.  Also print value to be reset if -n is
! 	 * given.
  	 */
  	if ((guessed && !force) || noupdate)
  	{
! 		PrintNewControlValues();
  		if (!noupdate)
  		{
  			printf(_("\nIf these values seem acceptable, use -f to force reset.\n"));
***************
*** 556,567 **** static void
  PrintControlValues(bool guessed)
  {
  	char		sysident_str[32];
- 	char		fname[MAXFNAMELEN];
  
  	if (guessed)
  		printf(_("Guessed pg_control values:\n\n"));
  	else
! 		printf(_("pg_control values:\n\n"));
  
  	/*
  	 * Format system_identifier separately to keep platform-dependent format
--- 566,576 ----
  PrintControlValues(bool guessed)
  {
  	char		sysident_str[32];
  
  	if (guessed)
  		printf(_("Guessed pg_control values:\n\n"));
  	else
! 		printf(_("Current pg_control values:\n\n"));
  
  	/*
  	 * Format system_identifier separately to keep platform-dependent format
***************
*** 570,579 **** PrintControlValues(bool guessed)
  	snprintf(sysident_str, sizeof(sysident_str), UINT64_FORMAT,
  			 ControlFile.system_identifier);
  
- 	XLogFileName(fname, ControlFile.checkPointCopy.ThisTimeLineID, newXlogSegNo);
- 
- 	printf(_("First log segment after reset:        %s\n"),
- 		   fname);
  	printf(_("pg_control version number:            %u\n"),
  		   ControlFile.pg_control_version);
  	printf(_("Catalog version number:               %u\n"),
--- 579,584 ----
***************
*** 632,637 **** PrintControlValues(bool guessed)
--- 637,699 ----
  
  
  /*
+  * Print the values to be changed after pg_resetxlog.
+  *
+  * NB: this display should be just for those fields that are
+  * going to change after reset.
+  */
+ static void
+ PrintNewControlValues()
+ {
+ 	char		fname[MAXFNAMELEN];
+ 
+ 	/* This will be always printed in order to keep format same. */
+ 	printf(_("\n\nValues to be used after reset:\n\n"));
+ 
+ 	XLogFileName(fname, ControlFile.checkPointCopy.ThisTimeLineID, newXlogSegNo);
+ 	printf(_("First log segment after reset:        %s\n"), fname);
+ 
+ 	if (set_mxid != 0)
+ 	{
+ 		printf(_("NextMultiXactId:                      %u\n"),
+ 			   ControlFile.checkPointCopy.nextMulti);
+ 		printf(_("OldestMultiXid:                       %u\n"),
+ 			   ControlFile.checkPointCopy.oldestMulti);
+ 		printf(_("OldestMulti's DB:                     %u\n"),
+ 			   ControlFile.checkPointCopy.oldestMultiDB);
+ 	}
+ 
+ 	if (set_mxoff != -1)
+ 	{
+ 		printf(_("NextMultiOffset:                      %u\n"),
+ 			   ControlFile.checkPointCopy.nextMultiOffset);
+ 	}
+ 
+ 	if (set_oid != 0)
+ 	{
+ 		printf(_("NextOID:                              %u\n"),
+ 			   ControlFile.checkPointCopy.nextOid);
+ 	}
+ 
+ 	if (set_xid != 0)
+ 	{
+ 		printf(_("NextXID:                              %u\n"),
+ 			   ControlFile.checkPointCopy.nextXid);
+ 		printf(_("OldestXID:                            %u\n"),
+ 			   ControlFile.checkPointCopy.oldestXid);
+ 		printf(_("OldestXID's DB:                       %u\n"),
+ 			   ControlFile.checkPointCopy.oldestXidDB);
+ 	}
+ 
+ 	if (set_xid_epoch != -1)
+ 	{
+ 		printf(_("NextXID Epoch:                        %u\n"),
+ 			   ControlFile.checkPointCopy.nextXidEpoch);
+ 	}
+ }
+ 
+ 
+ /*
   * Write out the new pg_control file.
   */
  static void
***************
*** 1039,1045 **** usage(void)
  	printf(_("  -f               force update to be done\n"));
  	printf(_("  -l XLOGFILE      force minimum WAL starting location for new transaction log\n"));
  	printf(_("  -m MXID,MXID     set next and oldest multitransaction ID\n"));
! 	printf(_("  -n               no update, just show extracted control values (for testing)\n"));
  	printf(_("  -o OID           set next OID\n"));
  	printf(_("  -O OFFSET        set next multitransaction offset\n"));
  	printf(_("  -V, --version    output version information, then exit\n"));
--- 1101,1107 ----
  	printf(_("  -f               force update to be done\n"));
  	printf(_("  -l XLOGFILE      force minimum WAL starting location for new transaction log\n"));
  	printf(_("  -m MXID,MXID     set next and oldest multitransaction ID\n"));
! 	printf(_("  -n               no update, just show extracted and to be reset control values.\n"));
  	printf(_("  -o OID           set next OID\n"));
  	printf(_("  -O OFFSET        set next multitransaction offset\n"));
  	printf(_("  -V, --version    output version information, then exit\n"));
