diff --git a/third_party/efistub/patches/ab-slot-handling.patch b/third_party/efistub/patches/ab-slot-handling.patch
new file mode 100644
index 0000000..0e5f369
--- /dev/null
+++ b/third_party/efistub/patches/ab-slot-handling.patch
@@ -0,0 +1,103 @@
+From a8004bca64e697bf8f39af63c4325fbc9b507e48 Mon Sep 17 00:00:00 2001
+From: Lorenz Brun <lorenz@monogon.tech>
+Date: Thu, 29 Jun 2023 03:54:01 +0200
+Subject: [PATCH] Implement filename-based A/B slot handling
+
+---
+ src/boot/efi/stub.c | 66 +++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 66 insertions(+)
+
+diff --git a/src/boot/efi/stub.c b/src/boot/efi/stub.c
+index dad0f61335..88eda7e0e7 100644
+--- a/src/boot/efi/stub.c
++++ b/src/boot/efi/stub.c
+@@ -5,6 +5,8 @@
+ 
+ #include "cpio.h"
+ #include "disk.h"
++#include "efibind.h"
++#include "efidevp.h"
+ #include "graphics.h"
+ #include "linux.h"
+ #include "measure.h"
+@@ -13,6 +15,31 @@
+ #include "splash.h"
+ #include "util.h"
+ 
++// From picolibc under BSD-3-Clause (c) 2018 Arm Ltd.
++/* Small and efficient strstr implementation.  */
++char * strstr (const char *hs, const char *ne)
++{
++  UINTN i;
++  int c = ne[0];
++
++  if (c == 0)
++    return (char*)hs;
++
++  for ( ; hs[0] != '\0'; hs++)
++    {
++      if (hs[0] != c)
++	continue;
++      for (i = 1; ne[i] != 0; i++)
++	if (hs[i] != ne[i])
++	  break;
++      if (ne[i] == '\0')
++	return (char*)hs;
++    }
++
++  return NULL;
++}
++
++
+ /* magic string to find in the binary image */
+ static const char __attribute__((used)) magic[] = "#### LoaderInfo: systemd-stub " GIT_VERSION " ####";
+ 
+@@ -180,6 +207,45 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
+                 cmdline_len = szs[SECTION_CMDLINE];
+         }
+ 
++        /* Extract last FILEPATH element from image path to check file name */
++        CHAR16 *last_file_path = NULL;
++        EFI_DEVICE_PATH *current_path_elem = loaded_image->FilePath;
++        while (current_path_elem != NULL && !IsDevicePathEnd(current_path_elem)) {
++                if (DevicePathType(current_path_elem) == MEDIA_DEVICE_PATH &&
++                    current_path_elem->SubType == MEDIA_FILEPATH_DP) {
++                        last_file_path = ((FILEPATH_DEVICE_PATH*)current_path_elem)->PathName;
++                }
++                current_path_elem = NextDevicePathNode(current_path_elem);
++        }
++        /* Check slot based on suffix of the last FILE_PATH value */
++        CHAR8 slot = 'A';
++        const CHAR16 suffix_a[] = L"boot-a.efi";
++        const CHAR16 suffix_b[] = L"boot-b.efi";
++        const UINTN suffix_len = (sizeof(suffix_a)/sizeof(CHAR16))-1;
++        if (last_file_path != NULL) {
++                UINTN plen = StrLen(last_file_path);
++                if (suffix_len > plen) {
++                        // TODO: Log
++                } else if (StriCmp(suffix_a, last_file_path + (plen-suffix_len)) == 0) {
++                        slot = 'A';
++                } else if (StriCmp(suffix_b, last_file_path + (plen-suffix_len)) == 0) {
++                        slot = 'B';
++                } else {
++                        // TODO: Log
++                }
++        }
++        Print(L"Booting into Slot %c\n", slot);
++        /* Replace METROPOLIS-SYSTEM-X with the correct slot */
++        const char slot_identifier[] = "METROPOLIS-SYSTEM-X";
++        const UINTN slot_id_len = (sizeof(slot_identifier)/sizeof(char))-1;
++        if (cmdline != NULL) {
++                CHAR8 *rest_ptr = cmdline;
++                while((rest_ptr = strstr(rest_ptr, slot_identifier))) {
++                        rest_ptr[slot_id_len-1] = slot;
++                        rest_ptr += slot_id_len;
++                }
++        }
++
+         /* if we are not in secure boot mode, or none was provided, accept a custom command line and replace the built-in one */
+         if ((!secure_boot_enabled() || cmdline_len == 0) && loaded_image->LoadOptionsSize > 0 &&
+             *(CHAR16 *) loaded_image->LoadOptions > 0x1F) {
+-- 
+2.40.1
+
