diff --git a/boot_control_android.cc b/boot_control_android.cc
index 1d13139..f1d7b9c 100644
--- a/boot_control_android.cc
+++ b/boot_control_android.cc
@@ -188,7 +188,7 @@
   base::FilePath device_dir(device_dir_str);
 
   string super_device =
-      device_dir.Append(fs_mgr_get_super_partition_name()).value();
+      device_dir.Append(fs_mgr_get_super_partition_name(slot)).value();
   switch (GetDynamicPartitionDevice(dynamic_control_.get(),
                                     super_device,
                                     partition_name_suffix,
@@ -280,13 +280,14 @@
 
 bool InitPartitionMetadataInternal(
     DynamicPartitionControlInterface* dynamic_control,
-    const string& super_device,
+    const string& source_device,
+    const string& target_device,
     Slot source_slot,
     Slot target_slot,
     const string& target_suffix,
     const PartitionMetadata& partition_metadata) {
   auto builder = dynamic_control->LoadMetadataBuilder(
-      super_device, source_slot, target_slot);
+      source_device, source_slot, target_slot);
   if (builder == nullptr) {
     // TODO(elsk): allow reconstructing metadata from partition_metadata
     // in recovery sideload.
@@ -348,12 +349,12 @@
   }
 
   return dynamic_control->StoreMetadata(
-      super_device, builder.get(), target_slot);
+      target_device, builder.get(), target_slot);
 }
 
 // Unmap all partitions, and remap partitions as writable.
 bool Remap(DynamicPartitionControlInterface* dynamic_control,
-           const string& super_device,
+           const string& target_device,
            Slot target_slot,
            const string& target_suffix,
            const PartitionMetadata& partition_metadata) {
@@ -368,7 +369,7 @@
       }
       string map_path;
       if (!dynamic_control->MapPartitionOnDeviceMapper(
-              super_device,
+              target_device,
               partition.name + target_suffix,
               target_slot,
               true /* force writable */,
@@ -393,14 +394,16 @@
     return false;
   }
   base::FilePath device_dir(device_dir_str);
-  string super_device =
-      device_dir.Append(fs_mgr_get_super_partition_name()).value();
+  string target_device =
+      device_dir.Append(fs_mgr_get_super_partition_name(target_slot)).value();
 
   Slot current_slot = GetCurrentSlot();
   if (target_slot == current_slot) {
     LOG(ERROR) << "Cannot call InitPartitionMetadata on current slot.";
     return false;
   }
+  string source_device =
+      device_dir.Append(fs_mgr_get_super_partition_name(current_slot)).value();
 
   string target_suffix;
   if (!GetSuffix(target_slot, &target_suffix)) {
@@ -408,7 +411,8 @@
   }
 
   if (!InitPartitionMetadataInternal(dynamic_control_.get(),
-                                     super_device,
+                                     source_device,
+                                     target_device,
                                      current_slot,
                                      target_slot,
                                      target_suffix,
@@ -417,7 +421,7 @@
   }
 
   if (!Remap(dynamic_control_.get(),
-             super_device,
+             target_device,
              target_slot,
              target_suffix,
              partition_metadata)) {
