diff --git a/src/bin/pg_resetxlog/pg_resetxlog.c b/src/bin/pg_resetxlog/pg_resetxlog.c
index 80e8268..149639b 100644
--- a/src/bin/pg_resetxlog/pg_resetxlog.c
+++ b/src/bin/pg_resetxlog/pg_resetxlog.c
@@ -82,6 +82,7 @@ main(int argc, char *argv[])
 	int			c;
 	bool		force = false;
 	bool		noupdate = false;
+	bool		resetbackuppos = false;
 	uint32		set_xid_epoch = (uint32) -1;
 	TransactionId set_xid = 0;
 	Oid			set_oid = 0;
@@ -115,7 +116,7 @@ main(int argc, char *argv[])
 	}
 
 
-	while ((c = getopt(argc, argv, "fl:m:no:O:x:e:")) != -1)
+	while ((c = getopt(argc, argv, "fl:m:no:O:x:e:b")) != -1)
 	{
 		switch (c)
 		{
@@ -127,6 +128,10 @@ main(int argc, char *argv[])
 				noupdate = true;
 				break;
 
+			case 'b':
+				resetbackuppos = true;
+				break;
+
 			case 'e':
 				set_xid_epoch = strtoul(optarg, &endptr, 0);
 				if (endptr == optarg || *endptr != '\0')
@@ -333,6 +338,15 @@ main(int argc, char *argv[])
 	if (minXlogTli > ControlFile.checkPointCopy.ThisTimeLineID)
 		ControlFile.checkPointCopy.ThisTimeLineID = minXlogTli;
 
+	if (resetbackuppos)
+	{
+		ControlFile.backupStartPoint.xlogid = 0;
+		ControlFile.backupStartPoint.xrecoff = 0;
+		ControlFile.backupEndPoint.xlogid = 0;
+		ControlFile.backupEndPoint.xrecoff = 0;
+		ControlFile.backupEndRequired = false;
+	}
+
 	if (minXlogId > newXlogId ||
 		(minXlogId == newXlogId &&
 		 minXlogSeg > newXlogSeg))
@@ -1035,6 +1049,7 @@ usage(void)
 	printf(_("  -O OFFSET        set next multitransaction offset\n"));
 	printf(_("  -V, --version    output version information, then exit\n"));
 	printf(_("  -x XID           set next transaction ID\n"));
+	printf(_("  -b               reset backup start position\n"));
 	printf(_("  -?, --help       show this help, then exit\n"));
 	printf(_("\nReport bugs to <pgsql-bugs@postgresql.org>.\n"));
 }
