diff --git a/boot_control_android.cc b/boot_control_android.cc
index 44fc0fa..ce86666 100644
--- a/boot_control_android.cc
+++ b/boot_control_android.cc
@@ -24,8 +24,8 @@
 #include <base/logging.h>
 #include <bootloader_message/bootloader_message.h>
 #include <brillo/message_loops/message_loop.h>
-#include <fs_mgr.h>
 #include <fs_mgr_overlayfs.h>
+#include <libdm/dm.h>
 
 #include "update_engine/common/utils.h"
 #include "update_engine/dynamic_partition_control_android.h"
@@ -109,7 +109,7 @@
     Slot slot,
     const string& partition_name_suffix) const {
   string source_device =
-      device_dir.Append(fs_mgr_get_super_partition_name(slot)).value();
+      device_dir.Append(dynamic_control_->GetSuperPartitionName(slot)).value();
   auto source_metadata =
       dynamic_control_->LoadMetadataBuilder(source_device, slot);
   return source_metadata->HasBlockDevice(partition_name_suffix);
@@ -122,7 +122,7 @@
     Slot slot,
     string* device) const {
   string super_device =
-      device_dir.Append(fs_mgr_get_super_partition_name(slot)).value();
+      device_dir.Append(dynamic_control_->GetSuperPartitionName(slot)).value();
 
   auto builder = dynamic_control_->LoadMetadataBuilder(super_device, slot);
 
@@ -140,8 +140,8 @@
     if (IsSuperBlockDevice(device_dir, current_slot, partition_name_suffix)) {
       LOG(ERROR) << "The static partition " << partition_name_suffix
                  << " is a block device for current metadata ("
-                 << fs_mgr_get_super_partition_name(current_slot) << ", slot "
-                 << BootControlInterface::SlotName(current_slot)
+                 << dynamic_control_->GetSuperPartitionName(current_slot)
+                 << ", slot " << BootControlInterface::SlotName(current_slot)
                  << "). It cannot be used as a logical partition.";
       return DynamicPartitionDeviceStatus::ERROR;
     }
diff --git a/boot_control_android_unittest.cc b/boot_control_android_unittest.cc
index 1a87547..6f02a07 100644
--- a/boot_control_android_unittest.cc
+++ b/boot_control_android_unittest.cc
@@ -73,6 +73,13 @@
           *device = GetDmDevice(partition_name_suffix);
           return true;
         }));
+
+    ON_CALL(dynamicControl(), GetSuperPartitionName(_))
+        .WillByDefault(Return(kFakeSuper));
+  }
+
+  std::string GetSuperDevice(uint32_t slot) {
+    return GetDevice(dynamicControl().GetSuperPartitionName(slot));
   }
 
   // Return the mocked HAL module.
diff --git a/dynamic_partition_control_android.cc b/dynamic_partition_control_android.cc
index 329ddd3..1a1e021 100644
--- a/dynamic_partition_control_android.cc
+++ b/dynamic_partition_control_android.cc
@@ -309,7 +309,7 @@
   }
   base::FilePath device_dir(device_dir_str);
   auto source_device =
-      device_dir.Append(fs_mgr_get_super_partition_name(source_slot)).value();
+      device_dir.Append(GetSuperPartitionName(source_slot)).value();
 
   auto builder = LoadMetadataBuilder(source_device, source_slot, target_slot);
   if (builder == nullptr) {
@@ -324,10 +324,15 @@
   }
 
   auto target_device =
-      device_dir.Append(fs_mgr_get_super_partition_name(target_slot)).value();
+      device_dir.Append(GetSuperPartitionName(target_slot)).value();
   return StoreMetadata(target_device, builder.get(), target_slot);
 }
 
+std::string DynamicPartitionControlAndroid::GetSuperPartitionName(
+    uint32_t slot) {
+  return fs_mgr_get_super_partition_name(slot);
+}
+
 bool DynamicPartitionControlAndroid::UpdatePartitionMetadata(
     MetadataBuilder* builder,
     uint32_t target_slot,
diff --git a/dynamic_partition_control_android.h b/dynamic_partition_control_android.h
index dc152cc..062a2d1 100644
--- a/dynamic_partition_control_android.h
+++ b/dynamic_partition_control_android.h
@@ -48,6 +48,7 @@
                                   const BootControlInterface::PartitionMetadata&
                                       partition_metadata) override;
   bool GetDeviceDir(std::string* path) override;
+  std::string GetSuperPartitionName(uint32_t slot) override;
 
  protected:
   // These functions are exposed for testing.
diff --git a/dynamic_partition_control_android_unittest.cc b/dynamic_partition_control_android_unittest.cc
index 2fa0f16..5b3dfe3 100644
--- a/dynamic_partition_control_android_unittest.cc
+++ b/dynamic_partition_control_android_unittest.cc
@@ -50,6 +50,9 @@
           *path = kFakeDevicePath;
           return true;
         }));
+
+    ON_CALL(dynamicControl(), GetSuperPartitionName(_))
+        .WillByDefault(Return(kFakeSuper));
   }
 
   // Return the mocked DynamicPartitionControlInterface.
@@ -57,6 +60,10 @@
     return static_cast<NiceMock<MockDynamicPartitionControlAndroid>&>(*module_);
   }
 
+  std::string GetSuperDevice(uint32_t slot) {
+    return GetDevice(dynamicControl().GetSuperPartitionName(slot));
+  }
+
   uint32_t source() { return slots_.source; }
   uint32_t target() { return slots_.target; }
 
diff --git a/dynamic_partition_control_interface.h b/dynamic_partition_control_interface.h
index 32fbbe4..b3ce4ea 100644
--- a/dynamic_partition_control_interface.h
+++ b/dynamic_partition_control_interface.h
@@ -95,6 +95,10 @@
 
   // Return a possible location for devices listed by name.
   virtual bool GetDeviceDir(std::string* path) = 0;
+
+  // Return the name of the super partition (which stores super partition
+  // metadata) for a given slot.
+  virtual std::string GetSuperPartitionName(uint32_t slot) = 0;
 };
 
 }  // namespace chromeos_update_engine
diff --git a/dynamic_partition_test_utils.h b/dynamic_partition_test_utils.h
index 2cfdff5..574d30e 100644
--- a/dynamic_partition_test_utils.h
+++ b/dynamic_partition_test_utils.h
@@ -48,6 +48,7 @@
 constexpr const char* kFakeDmDevicePath = "/fake/dm/dev/path/";
 constexpr const uint32_t kFakeMetadataSize = 65536;
 constexpr const char* kDefaultGroup = "foo";
+constexpr const char* kFakeSuper = "fake_super";
 
 // A map describing the size of each partition.
 // "{name, size}"
@@ -121,11 +122,6 @@
   return kFakeDmDevicePath + name;
 }
 
-// TODO(elsk): fs_mgr_get_super_partition_name should be mocked.
-inline std::string GetSuperDevice(uint32_t slot) {
-  return GetDevice(fs_mgr_get_super_partition_name(slot));
-}
-
 // To support legacy tests, auto-convert {name_a: size} map to
 // PartitionMetadata.
 inline PartitionMetadata PartitionSuffixSizesToMetadata(
diff --git a/mock_dynamic_partition_control.h b/mock_dynamic_partition_control.h
index 72eb030..26fc246 100644
--- a/mock_dynamic_partition_control.h
+++ b/mock_dynamic_partition_control.h
@@ -74,6 +74,7 @@
                     uint32_t));
   MOCK_METHOD1(GetDeviceDir, bool(std::string*));
   MOCK_METHOD0(GetDynamicPartitionsFeatureFlag, FeatureFlag());
+  MOCK_METHOD1(GetSuperPartitionName, std::string(uint32_t));
 };
 
 }  // namespace chromeos_update_engine
