diff --git a/metropolis/node/abloader/BUILD.bazel b/metropolis/node/abloader/BUILD.bazel
index 20f26db..e8bd06e 100644
--- a/metropolis/node/abloader/BUILD.bazel
+++ b/metropolis/node/abloader/BUILD.bazel
@@ -21,7 +21,6 @@
         "//metropolis/node/abloader/spec:abloader_proto_rs",
         "@crate_index_efi//:prost",
         "@crate_index_efi//:uefi",
-        "@crate_index_efi//:uefi-services",
     ],
 )
 
diff --git a/metropolis/node/abloader/main.rs b/metropolis/node/abloader/main.rs
index f0f61ee..4389c14 100644
--- a/metropolis/node/abloader/main.rs
+++ b/metropolis/node/abloader/main.rs
@@ -9,16 +9,17 @@
 extern crate alloc;
 
 use alloc::vec::Vec;
-use core::result::Result;
 use core::fmt;
+use core::result::Result;
 use prost::Message;
+use uefi::boot::{self, ScopedProtocol};
 use uefi::fs::FileSystem;
 use uefi::proto::device_path::build::media::FilePath;
 use uefi::proto::device_path::build::DevicePathBuilder;
 use uefi::proto::device_path::{DeviceSubType, DeviceType, LoadedImageDevicePath};
-use uefi::table::boot;
+use uefi::proto::media::fs::SimpleFileSystem;
 use uefi::{prelude::*, CStr16};
-use uefi_services::println;
+use uefi::println;
 
 use abloader_proto::metropolis::node::abloader::spec::*;
 
@@ -57,8 +58,8 @@
 impl fmt::Display for ReadLoaderStateError {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         match self {
-           ReadLoaderStateError::FSReadError(e) => write!(f, "while reading state file: {}", e),
-           ReadLoaderStateError::DecodeError(e) => write!(f, "while decoding state file contents: {}", e),
+            ReadLoaderStateError::FSReadError(e) => write!(f, "while reading state file: {}", e),
+            ReadLoaderStateError::DecodeError(e) => write!(f, "while decoding state file contents: {}", e),
         }
     }
 }
@@ -68,15 +69,15 @@
     AbLoaderData::decode(state_raw.as_slice()).map_err(|e| ReadLoaderStateError::DecodeError(e))
 }
 
-fn load_slot_image(slot: &ValidSlot, boot_services: &BootServices) -> uefi::Result<Handle> {
+fn load_slot_image(slot: &ValidSlot) -> uefi::Result<Handle> {
     let mut storage = Vec::new();
 
     // Build the path to the slot payload. This takes the path to the loader
     // itself, strips off the file path and following element(s) and appends
     // the path to the correct slot payload.
     let new_image_path = {
-        let loaded_image_device_path = boot_services
-            .open_protocol_exclusive::<LoadedImageDevicePath>(boot_services.image_handle())?;
+        let loaded_image_device_path =
+            boot::open_protocol_exclusive::<LoadedImageDevicePath>(boot::image_handle())?;
 
         let mut builder = DevicePathBuilder::with_vec(&mut storage);
 
@@ -97,26 +98,22 @@
         builder.finalize().unwrap()
     };
 
-    boot_services
-        .load_image(
-            boot_services.image_handle(),
-            boot::LoadImageSource::FromDevicePath {
-                device_path: new_image_path,
-                from_boot_manager: false,
-            },
-        )
+    boot::load_image(
+        boot::image_handle(),
+        boot::LoadImageSource::FromDevicePath {
+            device_path: new_image_path,
+            boot_policy: uefi::proto::BootPolicy::ExactMatch,
+        },
+    )
 }
 
 #[entry]
-fn main(_handle: Handle, mut system_table: SystemTable<Boot>) -> Status {
-    uefi_services::init(&mut system_table).unwrap();
-
-    let boot_services = system_table.boot_services();
-
+fn main() -> Status {
     let boot_slot_raw = {
-        let mut esp_fs = boot_services
-            .get_image_file_system(boot_services.image_handle())
-            .expect("image filesystem not available");
+        let esp_fs: ScopedProtocol<SimpleFileSystem> =
+            boot::get_image_file_system(boot::image_handle())
+                .expect("image filesystem not available");
+        let mut esp_fs = FileSystem::new(esp_fs);
 
         let mut loader_data = match read_loader_state(&mut esp_fs) {
             Ok(d) => d,
@@ -154,11 +151,11 @@
         }
     };
 
-    let payload_image = match load_slot_image(&boot_slot, boot_services) {
+    let payload_image = match load_slot_image(&boot_slot) {
         Ok(img) => img,
         Err(e) => {
             println!("Error loading intended slot, falling back to other slot: {}", e);
-            match load_slot_image(&boot_slot.other(), boot_services) {
+            match load_slot_image(&boot_slot.other()) {
                 Ok(img) => img,
                 Err(e) => {
                     panic!("Loading from both slots failed, second slot error: {}", e);
@@ -168,8 +165,6 @@
     };
 
     // Boot the payload.
-    boot_services
-        .start_image(payload_image)
-        .expect("failed to start payload");
+    boot::start_image(payload_image).expect("failed to start payload");
     Status::SUCCESS
 }
