diff --git a/cgpt/cgpt_common.c b/cgpt/cgpt_common.c
index bfc1386..44652a3 100644
--- a/cgpt/cgpt_common.c
+++ b/cgpt/cgpt_common.c
@@ -318,14 +318,15 @@
                       drive->gpt.sector_bytes, GPT_HEADER_SECTOR)) {
     return -1;
   }
+  GptHeader* primary_header = (GptHeader*)drive->gpt.primary_header;
   if (CGPT_OK != Load(drive, &drive->gpt.primary_entries,
-                      GPT_PMBR_SECTOR + GPT_HEADER_SECTOR,
+                      primary_header->entries_lba,
                       drive->gpt.sector_bytes, GPT_ENTRIES_SECTORS)) {
     return -1;
   }
+  GptHeader* secondary_header = (GptHeader*)drive->gpt.secondary_header;
   if (CGPT_OK != Load(drive, &drive->gpt.secondary_entries,
-                      drive->gpt.drive_sectors - GPT_HEADER_SECTOR
-                      - GPT_ENTRIES_SECTORS,
+                      secondary_header->entries_lba,
                       drive->gpt.sector_bytes, GPT_ENTRIES_SECTORS)) {
     return -1;
   }
@@ -351,18 +352,19 @@
       Error("Cannot write secondary header: %s\n", strerror(errno));
     }
   }
+  GptHeader* primary_header = (GptHeader*)drive->gpt.primary_header;
   if (drive->gpt.modified & GPT_MODIFIED_ENTRIES1) {
     if (CGPT_OK != Save(drive, drive->gpt.primary_entries,
-                        GPT_PMBR_SECTOR + GPT_HEADER_SECTOR,
+                        primary_header->entries_lba,
                         drive->gpt.sector_bytes, GPT_ENTRIES_SECTORS)) {
       errors++;
       Error("Cannot write primary entries: %s\n", strerror(errno));
     }
   }
+  GptHeader* secondary_header = (GptHeader*)drive->gpt.secondary_header;
   if (drive->gpt.modified & GPT_MODIFIED_ENTRIES2) {
     if (CGPT_OK != Save(drive, drive->gpt.secondary_entries,
-                        drive->gpt.drive_sectors - GPT_HEADER_SECTOR
-                        - GPT_ENTRIES_SECTORS,
+                        secondary_header->entries_lba,
                         drive->gpt.sector_bytes, GPT_ENTRIES_SECTORS)) {
       errors++;
       Error("Cannot write secondary entries: %s\n", strerror(errno));
@@ -1155,6 +1157,7 @@
     memcpy(primary_header, secondary_header, sizeof(GptHeader));
     primary_header->my_lba = GPT_PMBR_SECTOR;  /* the second sector on drive */
     primary_header->alternate_lba = secondary_header->my_lba;
+    /* TODO (namnguyen): Preserve (header, entries) padding space. */
     primary_header->entries_lba = primary_header->my_lba + GPT_HEADER_SECTOR;
     return GPT_MODIFIED_HEADER1;
   }
diff --git a/cgpt/cgpt_create.c b/cgpt/cgpt_create.c
index 9f60b3a..c9134da 100644
--- a/cgpt/cgpt_create.c
+++ b/cgpt/cgpt_create.c
@@ -29,15 +29,16 @@
     memcpy(h->signature, GPT_HEADER_SIGNATURE, GPT_HEADER_SIGNATURE_SIZE);
     h->revision = GPT_HEADER_REVISION;
     h->size = sizeof(GptHeader);
-    h->my_lba = 1;
-    h->alternate_lba = drive->gpt.drive_sectors - 1;
-    h->first_usable_lba = 1 + 1 + GPT_ENTRIES_SECTORS;
-    h->last_usable_lba = drive->gpt.drive_sectors - 1 - GPT_ENTRIES_SECTORS - 1;
+    h->my_lba = GPT_PMBR_SECTOR;  /* The second sector on drive. */
+    h->alternate_lba = drive->gpt.drive_sectors - GPT_HEADER_SECTOR;
+    h->entries_lba = h->my_lba + GPT_HEADER_SECTOR + params->padding;
+    h->first_usable_lba = h->entries_lba + GPT_ENTRIES_SECTORS;
+    h->last_usable_lba = (drive->gpt.drive_sectors - GPT_HEADER_SECTOR -
+                          GPT_ENTRIES_SECTORS - 1);
     if (CGPT_OK != GenerateGuid(&h->disk_uuid)) {
       Error("Unable to generate new GUID.\n");
       return -1;
     }
-    h->entries_lba = 2;
     h->number_of_entries = 128;
     h->size_of_entry = sizeof(GptEntry);
 
diff --git a/cgpt/cgpt_show.c b/cgpt/cgpt_show.c
index f5d6001..3603770 100644
--- a/cgpt/cgpt_show.c
+++ b/cgpt/cgpt_show.c
@@ -415,7 +415,8 @@
       HeaderDetails(header, entries, indent, params->numeric);
     }
 
-    printf(GPT_FMT, (int)(GPT_PMBR_SECTOR + GPT_HEADER_SECTOR),
+    GptHeader* primary_header = (GptHeader*)drive->gpt.primary_header;
+    printf(GPT_FMT, (int)primary_header->entries_lba,
            (int)GPT_ENTRIES_SECTORS,
            drive->gpt.valid_entries & MASK_PRIMARY ? "" : "INVALID",
            "Pri GPT table");
@@ -425,8 +426,8 @@
       EntriesDetails(drive, PRIMARY, params->numeric);
 
     /****************************** Secondary *************************/
-    printf(GPT_FMT, (int)(drive->gpt.drive_sectors - GPT_HEADER_SECTOR -
-                          GPT_ENTRIES_SECTORS),
+    GptHeader* secondary_header = (GptHeader*)drive->gpt.secondary_header;
+    printf(GPT_FMT, (int)secondary_header->entries_lba,
            (int)GPT_ENTRIES_SECTORS,
            drive->gpt.valid_entries & MASK_SECONDARY ? "" : "INVALID",
            "Sec GPT table");
diff --git a/cgpt/cmd_create.c b/cgpt/cmd_create.c
index c751b24..ca1b815 100644
--- a/cgpt/cmd_create.c
+++ b/cgpt/cmd_create.c
@@ -17,6 +17,8 @@
          "Options:\n"
          "  -z           Zero the sectors of the GPT table and entries\n"
          "  -s           Size (in byes) of the disk (MTD only)\n"
+         "  -p           Size (in blocks) of the disk to pad between the\n"
+         "               primary GPT header and its entries, default 0\n"
          "\n", progname);
 }
 
@@ -29,7 +31,7 @@
   char *e = 0;
 
   opterr = 0;                     // quiet, you
-  while ((c=getopt(argc, argv, ":hzs:")) != -1)
+  while ((c=getopt(argc, argv, ":hzsp:")) != -1)
   {
     switch (c)
     {
@@ -39,6 +41,9 @@
     case 's':
       params.size = strtoull(optarg, &e, 0);
       break;
+    case 'p':
+      params.padding = strtoull(optarg, &e, 0);
+      break;
 
     case 'h':
       Usage();
