0.5.1-pre1, with new code to enable moving the backup GPT data
structures, for the benefit of those who add disks to a RAID array.
diff --git a/CHANGELOG b/CHANGELOG
index f8accb7..984f90e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,14 @@
+0.5.1:
+------
+
+- Made some minor edits to the man page.
+
+- Incorporated RPM .spec file changes contributed by Scott Collier
+  (boodle11@gmail.com).
+
+- Added 'e' option (relocate backup GPT data structures) to the experts'
+  menu.
+
 0.5.0:
 ------
 
diff --git a/gdisk.8 b/gdisk.8
index d370249..6c87d0f 100644
--- a/gdisk.8
+++ b/gdisk.8
@@ -2,7 +2,7 @@
 .\" May be distributed under the GNU General Public License
 .TH "GDISK" "8" "0.5.0" "Roderick W. Smith" "GPT fdisk Manual"
 .SH "NAME"
-gdisk \- GPT partition table manipulator for Linux and Unix
+gdisk \- GUID partition table (GPT) manipulator for Linux and Unix
 .SH "SYNOPSIS"
 .BI "gdisk "
 [ \-l ]
@@ -14,7 +14,7 @@
 creation and manipulation of partition tables. It will automatically
 convert an old\-style Master Boot Record (MBR) partition table or BSD
 disklabel stored without an MBR carrier partition to the newer Globally
-Unique Identifier (GUID) Partition Table (GPT) format, or will load a GPT
+Unique Identifier (GUID) Partition Table (GPT) format, or will load a GUID
 partition table. When used with the \fI\-l\fR command\-line option, the
 program displays the current partition table and then exits.
 
@@ -31,13 +31,12 @@
 \fIhttp://www.rodsbooks.com/gdisk/\fR or consult Wikipedia.
 
 The \fBgdisk\fR program employs a user interface similar to that of Linux's
-\fBfdisk\fR, but \fBgdisk\fR
-modifies GPT partitions. It also has the capability of transforming MBR
-partitions or BSD disklabels into GPT partitions. Like the original
-\fBfdisk\fR program, \fBgdisk\fR
-does not modify disk structures until you explicitly write them to disk, so
-if you make a mistake, you can exit from the program with the 'q' option to
-save your partitions.
+\fBfdisk\fR, but \fBgdisk\fR modifies GPT partitions. It also has the
+capability of transforming MBR partitions or BSD disklabels into GPT
+partitions. Like the original \fBfdisk\fR program, \fBgdisk\fR does not
+modify disk structures until you explicitly write them to disk, so if you
+make a mistake, you can exit from the program with the 'q' option to save
+your partitions.
 
 Ordinarily, \fBgdisk\fR operates on disk device files, such as
 \fI/dev/sda\fR or \fI/dev/hda\fR under Linux, \fI/dev/disk0\fR under
@@ -61,21 +60,21 @@
 partitions with the Mac OS X Disk Utility program and Linux partitions
 with the Linux \fBgdisk\fR or GNU Parted program.
 
-Upon start, \fBgdisk\fR attempts to identify the partition type in use
-on the disk. If it finds valid GPT data, \fBgdisk\fR
-will use it. If \fBgdisk\fR
-finds a valid MBR or BSD disklabel but no GPT data, it will attempt to
-convert the MBR or disklabel into GPT form. (BSD disklabels are likely to
-have unusable first and/or final partitions because they overlap with the
-GPT data structures, though.) GPT fdisk can identify, but not use data in,
-Apple Partition Map (APM) disks, which are used on 680x0\- and PowerPC\-based
-Macintoshes. Upon exiting with the 'w' option, \fBgdisk\fR replaces
-the MBR or disklabel with a GPT. \fIThis action is potentially dangerous!\fR
-Your system may become unbootable, and partition type codes may become
-corrupted if the disk uses unrecognized type codes. Boot problems are
-particularly likely if you're multi\-booting with any GPT\-unaware OS. If you
-mistakenly launch \fBgdisk\fR on an MBR disk, you can safely exit
-the program without making any changes by using the 'q' option.
+Upon start, \fBgdisk\fR attempts to identify the partition type in use on
+the disk. If it finds valid GPT data, \fBgdisk\fR will use it. If
+\fBgdisk\fR finds a valid MBR or BSD disklabel but no GPT data, it will
+attempt to convert the MBR or disklabel into GPT form. (BSD disklabels are
+likely to have unusable first and/or final partitions because they overlap
+with the GPT data structures, though.) GPT fdisk can identify, but not use
+data in, Apple Partition Map (APM) disks, which are used on 680x0\- and
+PowerPC\-based Macintoshes. Upon exiting with the 'w' option, \fBgdisk\fR
+replaces the MBR or disklabel with a GPT. \fIThis action is potentially
+dangerous!\fR Your system may become unbootable, and partition type codes
+may become corrupted if the disk uses unrecognized type codes. Boot
+problems are particularly likely if you're multi\-booting with any
+GPT\-unaware OS. If you mistakenly launch \fBgdisk\fR on an MBR disk, you
+can safely exit the program without making any changes by using the 'q'
+option.
 
 The MBR\-to\-GPT conversion will leave at least one gap in the partition
 numbering if the original MBR used logical partitions. These gaps are
@@ -95,18 +94,17 @@
 .B *
 Boot disks for EFI\-based systems require an \fIEFI System
 Partition\fR (\fBgdisk\fR internal code 0xEF00) formatted as FAT\-32.
-The recommended size of this partition between 100 and 200 MiB.
+The recommended size of this partition is between 100 and 200 MiB.
 Boot\-related files are stored here. (Note that GNU Parted identifies
 such partitions as having the "boot flag" set.)
 
 .TP 
 .B *
 Some boot loaders for BIOS\-based systems make use of a \fIBIOS Boot
-Partition\fR (\fBgdisk\fR
-internal code 0xEF02), in which the secondary boot loader is stored,
-possibly without the benefit of a filesystem. This partition can
-typically be quite small (a few tens of kilobytes), but you should
-consult your boot loader documentation for details.
+Partition\fR (\fBgdisk\fR internal code 0xEF02), in which the secondary
+boot loader is stored, possibly without the benefit of a filesystem. This
+partition can typically be quite small (roughly 32 to 200 KiB), but you
+should consult your boot loader documentation for details.
 
 .TP 
 .B *
@@ -140,12 +138,15 @@
 
 .TP 
 .B b
-Save partition data to a backup file. You can back up your partition table
-to a disk file using this option. The resulting file is a binary file
-consisting of the protective MBR, the main GPT header, the backup GPT
-header, and one copy of the partition table, in that order. Note that the
-restore option is on the recovery & transformation menu; the backup
-option is on the main menu to encourage its use.
+Save partition data to a backup file. You can back up your current
+in-memory partition table to a disk file using this option. The resulting
+file is a binary file consisting of the protective MBR, the main GPT
+header, the backup GPT header, and one copy of the partition table, in that
+order. Note that the backup is of the current in-memory data structures, so
+if you launch the program, make changes, and then use this option, the
+backup will reflect your changes. Note also that the restore option is on
+the recovery & transformation menu; the backup option is on the main menu
+to encourage its use.
 
 
 .TP 
@@ -193,17 +194,16 @@
 Create a new partition. This command is modelled after the equivalent
 \fBfdisk\fR option, although some differences exist. You enter a partition
 number, starting sector, and an ending sector. Both start and end sectors
-can be specified in absolute terms as sector numbers or as positions measured
-in kilobytes (K), megabytes (M), gigabytes (G), or terabytes (T); for
-instance, \fI\fB40M\fR\fR
-specifies a position 40MiB from the start of the disk. You can specify
-locations relative to the start or end of the specified range by preceding
-the number by a '+' or '\-' symbol, as in \fI\fB+2G\fR\fR
-to specify a point 2GiB after the first available sector, or \fI\fB\-200M\fR\fR
-to specify a point 200MiB before the last available sector. Pressing the
-Enter key with no input specifies the default value, which is the start of
-the largest available block for the start sector and the last available
-block for the end sector.
+can be specified in absolute terms as sector numbers or as positions
+measured in kilobytes (K), megabytes (M), gigabytes (G), or terabytes (T);
+for instance, \fI\fB40M\fR\fR specifies a position 40MiB from the start of
+the disk. You can specify locations relative to the start or end of the
+specified range by preceding the number by a '+' or '\-' symbol, as in
+\fI\fB+2G\fR\fR to specify a point 2GiB after the first available sector,
+or \fI\fB\-200M\fR\fR to specify a point 200MiB before the last available
+sector. Pressing the Enter key with no input specifies the default value,
+which is the start of the largest available block for the start sector and
+the last available block for the end sector.
 
 .TP 
 .B o
@@ -234,10 +234,9 @@
 .B s
 Sort partition entries. GPT partition numbers need not match the order of
 partitions on the disk. If you want them to match, you can use this option.
-Note that some partitioning utilities sort
-partitions whenever they make changes. Such changes will be reflected in
-your device filenames, so you may need to edit
-\fI/etc/fstab\fR if you use this option.
+Note that some partitioning utilities sort partitions whenever they make
+changes. Such changes will be reflected in your device filenames, so you
+may need to edit \fI/etc/fstab\fR if you use this option.
 
 .TP 
 .B t
@@ -417,6 +416,13 @@
 same GUID on two partitions because of buggy GUID assignments (hopefully
 not in \fBgdisk\fR) or sheer incredible coincidence.
 
+.TP
+.B e
+Relocate backup GPT data structures. Use this command if you've added
+disks to a RAID array, thus creating a virtual disk with space that follows
+the backup GPT data structures. This command moves the backup GPT data
+structures to the end of the disk, where they belong.
+
 .TP 
 .B g
 Change disk GUID. Each disk has a unique GUID code, which \fBgdisk\fR
@@ -534,9 +540,9 @@
 124 logical partitions) when converting from MBR format. This limit can
 be raised by changing the \fI#define MAX_MBR_PARTS\fR line in the
 \fImbr.h\fR source code file and recompiling; however, such a change
-will require using a larger\-than\-normal GPT partition table. (The limit
+will require using a larger\-than\-normal partition table. (The limit
 of 128 partitions was chosen because that number equals the 128 partitions
-supported by the most common GPT partition table size.)
+supported by the most common partition table size.)
 
 .TP 
 .B *
diff --git a/gdisk.cc b/gdisk.cc
index a69d3b4..d86a9a4 100644
--- a/gdisk.cc
+++ b/gdisk.cc
@@ -29,7 +29,7 @@
    int doMore = 1;
    char* device = NULL;
 
-   printf("GPT fdisk (gdisk) version 0.5.0\n\n");
+   printf("GPT fdisk (gdisk) version 0.5.1-pre1\n\n");
 
     if (argc == 2) { // basic usage
       if (SizesOK()) {
@@ -309,6 +309,10 @@
                theGPT->SetPartitionGUID(pn, GetGUID());
             } else printf("No partitions\n");
             break;
+         case 'e': case 'E':
+            printf("Relocating backup data structures to the end of the disk\n");
+            theGPT->FixSecondHeaderLocation();
+            break;
          case 'g': case 'G':
             printf("Enter the disk's unique GUID:\n");
             theGPT->SetDiskGUID(GetGUID());
@@ -362,6 +366,7 @@
 void ShowExpertCommands(void) {
    printf("a\tset attributes\n");
    printf("c\tchange partition GUID\n");
+   printf("e\trelocate backup data structures\n");
    printf("g\tchange disk GUID\n");
    printf("i\tshow detailed information on a partition\n");
    printf("m\treturn to main menu\n");
diff --git a/gpt.cc b/gpt.cc
index 5885486..3a98037 100644
--- a/gpt.cc
+++ b/gpt.cc
@@ -900,7 +900,7 @@
          printf("The operation has completed successfully.\n");
       } else {
          printf("Warning! An error was reported when writing the backup file.\n");
-         printf("It may not be useable!\n");
+         printf("It may not be usable!\n");
       } // if/else
       close(fd);
 
@@ -1817,6 +1817,14 @@
    return (goOn);
 } // GPTData::ClearGPTData()
 
+// Set the location of the second GPT header data to the correct location.
+// Intended to help users of RAID arrays that have been resized.
+void GPTData::FixSecondHeaderLocation() {
+   mainHeader.backupLBA = secondHeader.currentLBA = diskSize - UINT64_C(1);
+   mainHeader.lastUsableLBA = secondHeader.lastUsableLBA = diskSize - mainHeader.firstUsableLBA;
+   secondHeader.partitionEntriesLBA = secondHeader.lastUsableLBA + UINT64_C(1);
+} // GPTData::FixSecondHeaderLocation()
+
 void GPTData::SetName(uint32_t partNum, char* theName) {
    if ((partNum >= 0) && (partNum < mainHeader.numParts))
       if (partitions[partNum].GetFirstLBA() > 0)
diff --git a/gpt.h b/gpt.h
index ea17e3d..c265169 100644
--- a/gpt.h
+++ b/gpt.h
@@ -127,6 +127,7 @@
    void BlankPartitions(void);
    void SortGPT(void);
    int ClearGPTData(void);
+   void FixSecondHeaderLocation();
    void SetName(uint32_t partNum, char* theName = NULL);
    void SetDiskGUID(GUIDData newGUID);
    int SetPartitionGUID(uint32_t pn, GUIDData theGUID);