diff --git a/system/core/netsvc/tftp.c b/system/core/netsvc/tftp.c
index 4147ba4d62c9db014e4d1f2c721f3b315b03156b..a5a438e51c84dfa3754ac6c7cfad737914a50020 100644
--- a/system/core/netsvc/tftp.c
+++ b/system/core/netsvc/tftp.c
@@ -230,6 +230,12 @@ static tftp_status paver_open_write(const char* filename, size_t size, file_info
     } else if (!strcmp(filename + NB_IMAGE_PREFIX_LEN, NB_ZIRCONR_HOST_FILENAME)) {
         printf("netsvc: Running ZIRCON-R Paver\n");
         argv[1] = "install-zirconr";
+    } else if (!strcmp(filename + NB_IMAGE_PREFIX_LEN, NB_VBMETAA_HOST_FILENAME)) {
+        printf("netsvc: Running VBMETA-A Paver\n");
+        argv[1] = "install-vbmetaa";
+    } else if (!strcmp(filename + NB_IMAGE_PREFIX_LEN, NB_VBMETAB_HOST_FILENAME)) {
+        printf("netsvc: Running VBMETA-B Paver\n");
+        argv[1] = "install-vbmetab";
     } else if (!strcmp(filename + NB_IMAGE_PREFIX_LEN, NB_SSHAUTH_HOST_FILENAME)) {
         printf("netsvc: Installing SSH authorized_keys\n");
         argv[1] = "install-data-file";
diff --git a/system/host/bootserver/bootserver.c b/system/host/bootserver/bootserver.c
index 663185b46b3efe867e9843be7223b6907036b5cb..da2f52db15e6e59240363889fd873d9fc416faae 100644
--- a/system/host/bootserver/bootserver.c
+++ b/system/host/bootserver/bootserver.c
@@ -202,6 +202,8 @@ void usage(void) {
             "  --zircona <file>         use the supplied file as a ZIRCON-A ZBI\n"
             "  --zirconb <file>         use the supplied file as a ZIRCON-B ZBI\n"
             "  --zirconr <file>         use the supplied file as a ZIRCON-R ZBI\n"
+            "  --vbmetaa <file>         use the supplied file as a AVB vbmeta_a image\n"
+            "  --vbmetab <file>         use the supplied file as a AVB vbmeta_b image\n"
             "  --authorized-keys <file> use the supplied file as an authorized_keys file\n"
             "  --netboot    use the netboot protocol\n"
             "  --tftp       use the tftp protocol (default)\n"
@@ -294,6 +296,8 @@ int main(int argc, char** argv) {
     const char* zircona_image = NULL;
     const char* zirconb_image = NULL;
     const char* zirconr_image = NULL;
+    const char* vbmetaa_image = NULL;
+    const char* vbmetab_image = NULL;
     const char* authorized_keys = NULL;
     const char* fvm_images[MAX_FVM_IMAGES] = {NULL, NULL, NULL, NULL};
     const char* kernel_fn = NULL;
@@ -378,6 +382,22 @@ int main(int argc, char** argv) {
                 return -1;
             }
             zirconr_image = argv[1];
+        } else if (!strcmp(argv[1], "--vbmetaa")) {
+            argc--;
+            argv++;
+            if (argc <= 1) {
+                fprintf(stderr, "'--vbmetaa' option requires an argument (vbmeta_a image)\n");
+                return -1;
+            }
+            vbmetaa_image = argv[1];
+        } else if (!strcmp(argv[1], "--vbmetab")) {
+            argc--;
+            argv++;
+            if (argc <= 1) {
+                fprintf(stderr, "'--vbmetab' option requires an argument (vbmeta_a image)\n");
+                return -1;
+            }
+            vbmetab_image = argv[1];
         } else if (!strcmp(argv[1], "--authorized-keys")) {
             argc--;
             argv++;
@@ -481,7 +501,7 @@ int main(int argc, char** argv) {
         argv++;
     }
     if (!kernel_fn && !bootloader_image && !efi_image && !kernc_image && !zircona_image &&
-        !zirconb_image && !zirconr_image && !fvm_images[0]) {
+        !zirconb_image && !zirconr_image && !vbmetaa_image && !vbmetab_image && !fvm_images[0]) {
         usage();
     }
     if (!nodename) {
@@ -619,6 +639,12 @@ int main(int argc, char** argv) {
         if (status == 0 && zirconr_image) {
             status = xfer(&ra, zirconr_image, NB_ZIRCONR_FILENAME);
         }
+        if (status == 0 && vbmetaa_image) {
+            status = xfer(&ra, vbmetaa_image, NB_VBMETAA_FILENAME);
+        }
+        if (status == 0 && vbmetab_image) {
+            status = xfer(&ra, vbmetab_image, NB_VBMETAB_FILENAME);
+        }
         if (status == 0 && authorized_keys) {
             status = xfer(&ra, authorized_keys, NB_SSHAUTH_FILENAME);
         }
diff --git a/system/public/zircon/boot/netboot.h b/system/public/zircon/boot/netboot.h
index d1f06bf82aab40670b701dabecf0b5cd12741c24..5cdf785101e31a66245f78ffee2042d8e3c08d2f 100644
--- a/system/public/zircon/boot/netboot.h
+++ b/system/public/zircon/boot/netboot.h
@@ -72,6 +72,10 @@
 #define NB_ZIRCONB_FILENAME NB_IMAGE_PREFIX NB_ZIRCONB_HOST_FILENAME
 #define NB_ZIRCONR_HOST_FILENAME "zirconr.img"
 #define NB_ZIRCONR_FILENAME NB_IMAGE_PREFIX NB_ZIRCONR_HOST_FILENAME
+#define NB_VBMETAA_HOST_FILENAME "vbmetaa.img"
+#define NB_VBMETAA_FILENAME NB_IMAGE_PREFIX NB_VBMETAA_HOST_FILENAME
+#define NB_VBMETAB_HOST_FILENAME "vbmetab.img"
+#define NB_VBMETAB_FILENAME NB_IMAGE_PREFIX NB_VBMETAB_HOST_FILENAME
 #define NB_SSHAUTH_HOST_FILENAME "authorized_keys"
 #define NB_SSHAUTH_FILENAME NB_IMAGE_PREFIX NB_SSHAUTH_HOST_FILENAME