diff --git a/debian/patches/sd-boot-fix-menu-ordering-with-boot-counting.patch b/debian/patches/sd-boot-fix-menu-ordering-with-boot-counting.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d9cf2d9c9531219a3d366c6bb2ae8679f1cf3ef8
--- /dev/null
+++ b/debian/patches/sd-boot-fix-menu-ordering-with-boot-counting.patch
@@ -0,0 +1,86 @@
+From e6190e2882e1d6772a9e586fcc65c91d406e52fb Mon Sep 17 00:00:00 2001
+From: Daniel Fullmer <danielrf12@gmail.com>
+Date: Thu, 23 Apr 2020 14:47:56 -0400
+Subject: sd-boot: fix menu ordering with boot counting
+
+systemd-boot selects the last valid entry by default, not the first.
+
+Fixes: #15256
+
+diff --git a/docs/AUTOMATIC_BOOT_ASSESSMENT.md b/docs/AUTOMATIC_BOOT_ASSESSMENT.md
+index aff203b590..83ddf28fdd 100644
+--- a/docs/AUTOMATIC_BOOT_ASSESSMENT.md
++++ b/docs/AUTOMATIC_BOOT_ASSESSMENT.md
+@@ -99,9 +99,9 @@ Here's an example walkthrough of how this all fits together.
+
+ 6. If this boot also fails, on the next boot the boot loader will see the the
+    tag `+0-3`, i.e. the counter reached zero. At this point the entry will be
+-   considered "bad", and ordered to the end of the list of entries. The next
+-   newest boot entry is now tried, i.e. the system automatically reverted back
+-   to an earlier version.
++   considered "bad", and ordered to the beginning of the list of entries. The
++   next newest boot entry is now tried, i.e. the system automatically reverted
++   back to an earlier version.
+
+ The above describes the walkthrough when the selected boot entry continuously
+ fails. Let's have a look at an alternative ending to this walkthrough. In this
+diff --git a/man/systemd-boot.xml b/man/systemd-boot.xml
+index dacd49cd7b..b666ae1e53 100644
+--- a/man/systemd-boot.xml
++++ b/man/systemd-boot.xml
+@@ -391,10 +391,10 @@
+     considered 'good' from then on.</para>
+
+     <para>The boot menu takes the 'tries left' counter into account when sorting the menu entries: entries in 'bad'
+-    state are ordered at the end of the list, and entries in 'good' or 'indeterminate' at the beginning. The user can
++    state are ordered at the beginning of the list, and entries in 'good' or 'indeterminate' at the end. The user can
+     freely choose to boot any entry of the menu, including those already marked 'bad'. If the menu entry to boot is
+-    automatically determined, this means that 'good' or 'indeterminate' entries are generally preferred (as the top item of
+-    the menu is the one booted by default), and 'bad' entries will only be considered if there are no 'good' or
++    automatically determined, this means that 'good' or 'indeterminate' entries are generally preferred (as the bottom
++    item of the menu is the one booted by default), and 'bad' entries will only be considered if there are no 'good' or
+     'indeterminate' entries left.</para>
+
+     <para>The <citerefentry><refentrytitle>kernel-install</refentrytitle><manvolnum>8</manvolnum></citerefentry> kernel
+diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c
+index 380b530fd2..1fe2a2bdc3 100644
+--- a/src/boot/efi/boot.c
++++ b/src/boot/efi/boot.c
+@@ -1479,11 +1479,11 @@ static VOID config_load_entries(
+ static INTN config_entry_compare(ConfigEntry *a, ConfigEntry *b) {
+         INTN r;
+
+-        /* Order entries that have no tries left to the end of the list */
++        /* Order entries that have no tries left to the beginning of the list */
+         if (a->tries_left != 0 && b->tries_left == 0)
+-                return -1;
+-        if (a->tries_left == 0 && b->tries_left != 0)
+                 return 1;
++        if (a->tries_left == 0 && b->tries_left != 0)
++                return -1;
+
+         r = str_verscmp(a->id, b->id);
+         if (r != 0)
+@@ -1493,17 +1493,17 @@ static INTN config_entry_compare(ConfigEntry *a, ConfigEntry *b) {
+             b->tries_left == (UINTN) -1)
+                 return 0;
+
+-        /* If both items have boot counting, and otherwise are identical, put the entry with more tries left first */
++        /* If both items have boot counting, and otherwise are identical, put the entry with more tries left last */
+         if (a->tries_left > b->tries_left)
+-                return -1;
+-        if (a->tries_left < b->tries_left)
+                 return 1;
++        if (a->tries_left < b->tries_left)
++                return -1;
+
+         /* If they have the same number of tries left, then let the one win which was tried fewer times so far */
+         if (a->tries_done < b->tries_done)
+-                return -1;
+-        if (a->tries_done > b->tries_done)
+                 return 1;
++        if (a->tries_done > b->tries_done)
++                return -1;
+
+         return 0;
+ }
diff --git a/debian/patches/series b/debian/patches/series
index 77b26816e56ed704075cc435f3cd070d30bf03e1..cc677bc417c49a2bef9ce96c6059294876e40e18 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -80,3 +80,4 @@ apertis/journalctl-port-flush-sync-rotate-to-use-varlink-method-c.patch
 apertis/journald-add-API-to-move-logging-from-var-to-run-again.patch
 apertis/journalctl-add-new-relinquish-and-smart-relinquish-option.patch
 apertis/units-automatically-revert-to-run-logging-on-shutdown-if-.patch
+sd-boot-fix-menu-ordering-with-boot-counting.patch