diff --git a/gnu/system/examples/asus-c201.tmpl b/gnu/system/examples/asus-c201.tmpl
index 019111c167..eec185eebf 100644
--- a/gnu/system/examples/asus-c201.tmpl
+++ b/gnu/system/examples/asus-c201.tmpl
@@ -14,8 +14,10 @@
   ;; Assuming /dev/mmcblk0p1 is the kernel partition, and
   ;; "my-root" is the label of the target root file system.
   (bootloader (bootloader-configuration
-                (bootloader depthcharge-bootloader)
-                (targets '("/dev/mmcblk0p1"))))
+                (bootloader depthcharge-veyron-speedy-bootloader)
+                (targets (list (bootloader-target
+                                 (type 'part)
+                                 (device "/dev/mmcblk0p1"))))))
 
   ;; The ASUS C201PA requires a very particular kernel to boot,
   ;; as well as the following arguments.
diff --git a/gnu/system/examples/bare-bones.tmpl b/gnu/system/examples/bare-bones.tmpl
index 7b6a4b09b0..9eed05f2e0 100644
--- a/gnu/system/examples/bare-bones.tmpl
+++ b/gnu/system/examples/bare-bones.tmpl
@@ -13,10 +13,13 @@
 
   ;; Boot in "legacy" BIOS mode, assuming /dev/sdX is the
   ;; target hard disk, and "my-root" is the label of the target
-  ;; root file system.
+  ;; root file system.  If you're just building an image, the
+  ;; 'targets' field may be omitted.
   (bootloader (bootloader-configuration
                 (bootloader grub-bootloader)
-                (targets '("/dev/sdX"))))
+                (targets (list (bootloader-target
+                                 (type 'disk)
+                                 (device "/dev/sdX"))))))
   ;; It's fitting to support the equally bare bones ‘-nographic’
   ;; QEMU option, which also nicely sidesteps forcing QWERTY.
   (kernel-arguments (list "console=ttyS0,115200"))
diff --git a/gnu/system/examples/bare-hurd.tmpl b/gnu/system/examples/bare-hurd.tmpl
index 463c7ee798..8dd700cd9d 100644
--- a/gnu/system/examples/bare-hurd.tmpl
+++ b/gnu/system/examples/bare-hurd.tmpl
@@ -32,7 +32,9 @@
     (inherit %hurd-default-operating-system)
     (bootloader (bootloader-configuration
                  (bootloader grub-minimal-bootloader)
-                 (targets '("/dev/sdX"))))
+                 (targets (list (bootloader-target
+                                  (type 'disk)
+                                  (device "/dev/sdX"))))))
     (file-systems (cons (file-system
                           (device (file-system-label "my-root"))
                           (mount-point "/")
diff --git a/gnu/system/examples/beaglebone-black.tmpl b/gnu/system/examples/beaglebone-black.tmpl
index 18bbb2723c..99963ef2fe 100644
--- a/gnu/system/examples/beaglebone-black.tmpl
+++ b/gnu/system/examples/beaglebone-black.tmpl
@@ -11,11 +11,13 @@
   (timezone "Europe/Berlin")
   (locale "en_US.utf8")
 
-  ;; Assuming /dev/mmcblk1 is the eMMC, and "my-root" is
+  ;; Assuming /dev/mmcblk1 is the eMMC. and "my-root" is
   ;; the label of the target root file system.
   (bootloader (bootloader-configuration
                (bootloader u-boot-beaglebone-black-bootloader)
-               (targets '("/dev/mmcblk1"))))
+               (targets (list (bootloader-target
+                                (type 'disk)
+                                (device "/dev/mmcblk1"))))))
 
   ;; This module is required to mount the SD card.
   (initrd-modules (cons "omap_hsmmc" %base-initrd-modules))
diff --git a/gnu/system/examples/desktop.tmpl b/gnu/system/examples/desktop.tmpl
index 2d65f22294..30dbdeea31 100644
--- a/gnu/system/examples/desktop.tmpl
+++ b/gnu/system/examples/desktop.tmpl
@@ -20,7 +20,9 @@
   ;; Partition mounted on /boot/efi.
   (bootloader (bootloader-configuration
                 (bootloader grub-efi-bootloader)
-                (targets '("/boot/efi"))
+                (targets (list (bootloader-target
+                                 (type 'esp)
+                                 (path "/boot/efi"))))
                 (keyboard-layout keyboard-layout)))
 
   ;; Specify a mapped device for the encrypted root partition.
diff --git a/gnu/system/examples/docker-image.tmpl b/gnu/system/examples/docker-image.tmpl
index 7123917af4..6d3114a0bc 100644
--- a/gnu/system/examples/docker-image.tmpl
+++ b/gnu/system/examples/docker-image.tmpl
@@ -9,6 +9,8 @@
   (timezone "Europe/Berlin")
   (locale "en_US.utf8")
 
+  ;; Bootloader can be left blank!
+
   ;; This is where user accounts are specified.  The "root" account is
   ;; implicit, and is initially created with the empty password.
   (users (cons (user-account
@@ -34,10 +36,6 @@
   ;; similar services for us.
 
   ;; This will be ignored.
-  (bootloader (bootloader-configuration
-               (bootloader grub-bootloader)
-               (targets '("does-not-matter"))))
-  ;; This will be ignored, too.
   (file-systems (list (file-system
                         (device "does-not-matter")
                         (mount-point "/")
diff --git a/gnu/system/examples/lightweight-desktop.tmpl b/gnu/system/examples/lightweight-desktop.tmpl
index c061284ba8..0964238cb0 100644
--- a/gnu/system/examples/lightweight-desktop.tmpl
+++ b/gnu/system/examples/lightweight-desktop.tmpl
@@ -17,7 +17,9 @@
   ;; Partition mounted on /boot/efi.
   (bootloader (bootloader-configuration
                 (bootloader grub-efi-bootloader)
-                (targets '("/boot/efi"))))
+                (targets (list (bootloader-target
+                                 (type 'esp)
+                                 (path "/boot/efi"))))))
 
   ;; Assume the target root file system is labelled "my-root",
   ;; and the EFI System Partition has UUID 1234-ABCD.
diff --git a/gnu/system/examples/plasma.tmpl b/gnu/system/examples/plasma.tmpl
index c3850ffe37..a81916ffe9 100644
--- a/gnu/system/examples/plasma.tmpl
+++ b/gnu/system/examples/plasma.tmpl
@@ -15,7 +15,9 @@
   ;; is the label of the target root file system.
   (bootloader (bootloader-configuration
                (bootloader grub-bootloader)
-               (targets (list "/dev/sdX"))))
+               (targets (list (bootloader-target
+                                (type 'disk)
+                                (device "/dev/sdX"))))))
 
   (file-systems (cons (file-system
                         (device "my-root")
diff --git a/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl
index 1baca02491..85476854f3 100644
--- a/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl
+++ b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl
@@ -25,14 +25,21 @@
   (operating-system
     (host-name "raspberrypi-guix")
     (timezone "Europe/Berlin")
-    (bootloader (bootloader-configuration
-                 (bootloader grub-efi-bootloader-chain-raspi-64)
-                 (targets (list "/boot/efi"))
-                 (theme (grub-theme
-                         (resolution '(1920 . 1080))
-                         (image (file-append
-                                 %artwork-repository
-                                 "/grub/GuixSD-fully-black-16-9.svg"))))))
+    (bootloader (list (bootloader-configuration
+                        (bootloader u-boot-rpi-bootloader)
+                        (targets (list (bootloader-target
+                                         (type 'install)
+                                         (path "/boot/efi")))))
+                      (bootloader-configuration
+                        (bootloader grub-efi-bootloader)
+                        (targets (list (bootloader-target
+                                         (type 'esp)
+                                         (path "/boot/efi"))))
+                        (theme
+                          (grub-theme
+                            (resolution '(1920 . 1080))
+                            (image (file-append %artwork-repository
+                                     "/grub/GuixSD-fully-black-16-9.svg")))))))
     (kernel-arguments '("ip=dhcp"))
     (kernel (customize-linux #:linux linux-libre-arm64-generic
                              #:extra-version "arm64-generic-netboot"
diff --git a/gnu/system/examples/raspberry-pi-64.tmpl b/gnu/system/examples/raspberry-pi-64.tmpl
index 414d8ac7a5..d5b90b9705 100644
--- a/gnu/system/examples/raspberry-pi-64.tmpl
+++ b/gnu/system/examples/raspberry-pi-64.tmpl
@@ -24,14 +24,16 @@
   (operating-system
     (host-name "raspberrypi-guix")
     (timezone "Europe/Berlin")
-    (bootloader (bootloader-configuration
-                 (bootloader grub-efi-bootloader-chain-raspi-64)
-                 (targets (list "/boot/efi"))
-                 (theme (grub-theme
-                         (resolution '(1920 . 1080))
-                         (image (file-append
-                                 %artwork-repository
-                                 "/grub/GuixSD-fully-black-16-9.svg"))))))
+    (bootloader (list (bootloader-configuration
+                        (bootloader u-boot-rpi-bootloader)
+                        (targets (list (bootloader-target
+                                         (type 'install)
+                                         (path "/boot/efi"))))
+                        (theme
+                          (grub-theme
+                            (resolution '(1920 . 1080))
+                            (image (file-append %artwork-repository
+                                     "/grub/GuixSD-fully-black-16-9.svg")))))))
     (kernel (customize-linux #:linux linux-libre-arm64-generic
                              ;; It is possible to use a specific defconfig
                              ;; file, for example the "bcmrpi3_defconfig" with
diff --git a/gnu/system/examples/vm-image.tmpl b/gnu/system/examples/vm-image.tmpl
index 589de493b1..050c0bb971 100644
--- a/gnu/system/examples/vm-image.tmpl
+++ b/gnu/system/examples/vm-image.tmpl
@@ -38,11 +38,10 @@ accounts.\x1b[0m
 
   (firmware '())
 
-  ;; Below we assume /dev/vda is the VM's hard disk.
-  ;; Adjust as needed.
+  ;; Images automatically get the 'root, 'esp, and 'disk targets configured as
+  ;; needed.
   (bootloader (bootloader-configuration
                (bootloader grub-bootloader)
-               (targets '("/dev/vda"))
                (terminal-outputs '(console))))
   (file-systems (cons (file-system
                         (mount-point "/")
