diff --git a/install/include/install/wipe_data.h b/install/include/install/wipe_data.h
index 91c264c..75b8d36 100644
--- a/install/include/install/wipe_data.h
+++ b/install/include/install/wipe_data.h
@@ -30,7 +30,4 @@
 bool WipeData(Device* device, bool keep_memtag_mode = false);
 
 // Returns true on success.
-bool WipeData(Device* device, std::string fs, bool keep_memtag_mode = false);
-
-// Returns true on success.
 bool WipeSystem(RecoveryUI* ui, const std::function<bool()>& confirm);
diff --git a/install/wipe_data.cpp b/install/wipe_data.cpp
index 56d3674..b10b0b8 100644
--- a/install/wipe_data.cpp
+++ b/install/wipe_data.cpp
@@ -21,7 +21,6 @@
 #include <linux/fs.h>
 #include <stdio.h>
 #include <string.h>
-#include <sys/stat.h>
 #include <sys/ioctl.h>
 #include <sys/stat.h>
 
@@ -45,9 +44,8 @@
 constexpr const char* DATA_ROOT = "/data";
 constexpr const char* METADATA_ROOT = "/metadata";
 
-static bool EraseVolume(const char* volume, RecoveryUI* ui, std::string fs) {
+static bool EraseVolume(const char* volume, RecoveryUI* ui) {
   bool is_cache = (strcmp(volume, CACHE_ROOT) == 0);
-  bool is_data = (strcmp(volume, DATA_ROOT) == 0);
 
   std::vector<saved_log_file> log_files;
   if (is_cache) {
@@ -56,7 +54,7 @@
     log_files = ReadLogFilesToMemory();
   }
 
-  ui->Print("Formatting %s to %s...\n", volume, fs.c_str());
+  ui->Print("Formatting %s...\n", volume);
 
   Volume* vol = volume_for_mount_point(volume);
   if (vol->fs_mgr_flags.logical) {
@@ -105,12 +103,7 @@
     return false;
   }
 
-  int result;
-  if (is_data) {
-    result = format_volume(volume, "", fs);
-  } else {
-    result = format_volume(volume);
-  }
+  int result = format_volume(volume);
 
   if (is_cache) {
     RestoreLogFilesAfterFormat(log_files);
@@ -119,10 +112,6 @@
   return (result == 0);
 }
 
-static bool EraseVolume(const char* volume, RecoveryUI* ui) {
-  return EraseVolume(volume, ui, volume_for_mount_point(volume)->fs_type);
-}
-
 bool WipeCache(RecoveryUI* ui, const std::function<bool()>& confirm_func) {
   bool has_cache = volume_for_mount_point("/cache") != nullptr;
   if (!has_cache) {
@@ -143,7 +132,7 @@
   return success;
 }
 
-bool WipeData(Device* device, std::string fs, bool keep_memtag_mode) {
+bool WipeData(Device* device, bool keep_memtag_mode) {
   RecoveryUI* ui = device->GetUI();
   ui->Print("\n-- Wiping data...\n");
   ui->SetBackground(RecoveryUI::ERASING);
@@ -156,7 +145,7 @@
 
   bool success = device->PreWipeData();
   if (success) {
-    success &= EraseVolume(DATA_ROOT, ui, fs);
+    success &= EraseVolume(DATA_ROOT, ui);
     bool has_cache = volume_for_mount_point("/cache") != nullptr;
     if (has_cache) {
       success &= EraseVolume(CACHE_ROOT, ui);
@@ -182,10 +171,6 @@
   return success;
 }
 
-bool WipeData(Device* device, bool keep_memtag_mode) {
-  return WipeData(device, volume_for_mount_point("/data")->fs_type, keep_memtag_mode);
-}
-
 bool WipeSystem(RecoveryUI* ui, const std::function<bool()>& confirm_func) {
   if (confirm_func && !confirm_func()) {
     return false;
diff --git a/recovery.cpp b/recovery.cpp
index 4477f4b..129af41 100644
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -69,8 +69,6 @@
 using android::volmgr::VolumeManager;
 using android::volmgr::VolumeInfo;
 
-using android::fs_mgr::Fstab;
-
 static constexpr const char* COMMAND_FILE = "/cache/recovery/command";
 static constexpr const char* LAST_KMSG_FILE = "/cache/recovery/last_kmsg";
 static constexpr const char* LAST_LOG_FILE = "/cache/recovery/last_log";
@@ -197,28 +195,6 @@
   }
 }
 
-std::string get_preferred_fs(Device* device) {
-  Fstab fstab;
-  auto read_fstab = ReadFstabFromFile("/etc/fstab", &fstab);
-  std::vector<std::string> headers{ "Choose what filesystem you want to use on /data", "Entries here are supported by your device." };
-  std::string fs = volume_for_mount_point("/data")->fs_type;
-  if (read_fstab) {
-      std::string current_filesystem = android::fs_mgr::GetEntryForPath(&fstab, "/data")->fs_type;
-      headers.emplace_back("Current filesystem: " + current_filesystem);
-  }
-  std::vector<std::string> items = get_data_fs_items();
-
-  if (items.size() > 1) {
-      size_t chosen_item = device->GetUI()->ShowMenu(
-          headers, items, 0, true,
-          std::bind(&Device::HandleMenuKey, device, std::placeholders::_1, std::placeholders::_2));
-      if (chosen_item == Device::kGoBack)
-        return "";
-      fs = items[chosen_item];
-  }
-  return fs;
-}
-
 static bool ask_to_wipe_data(Device* device) {
   std::vector<std::string> headers{ "Format user data?", "This includes internal storage.", "THIS CANNOT BE UNDONE!" };
   std::vector<std::string> items{ " Cancel", " Format data" };
@@ -545,11 +521,8 @@
       case Device::WIPE_DATA:
         save_current_log = true;
         if (ui->IsTextVisible()) {
-          auto fs = get_preferred_fs(device);
-          if (fs == "")
-            break;
           if (ask_to_wipe_data(device)) {
-            WipeData(device, fs);
+            WipeData(device);
           }
         } else {
           WipeData(device);
diff --git a/recovery_utils/include/recovery_utils/roots.h b/recovery_utils/include/recovery_utils/roots.h
index 180e739..cbc8b07 100644
--- a/recovery_utils/include/recovery_utils/roots.h
+++ b/recovery_utils/include/recovery_utils/roots.h
@@ -54,13 +54,6 @@
 // Copies 'directory' to root of the newly formatted volume
 int format_volume(const std::string& volume, const std::string& directory);
 
-// Reformat the given volume (must be the mount point only, eg
-// "/cache"), no paths permitted.  Attempts to unmount the volume if
-// it is mounted.
-// Copies 'directory' to root of the newly formatted volume
-// Formats volume to fs
-int format_volume(const std::string& volume, const std::string& directory, const std::string fs);
-
 // Ensure that all and only the volumes that packages expect to find
 // mounted (/tmp and /cache) are mounted.  Returns 0 on success.
 int setup_install_mounts();
@@ -71,5 +64,3 @@
 void map_logical_partitions();
 
 bool logical_partitions_mapped();
-
-std::vector<std::string> get_data_fs_items();
diff --git a/recovery_utils/roots.cpp b/recovery_utils/roots.cpp
index 14fb98e..010b98c 100644
--- a/recovery_utils/roots.cpp
+++ b/recovery_utils/roots.cpp
@@ -114,16 +114,6 @@
   return 0;
 }
 
-std::vector<std::string> get_data_fs_items() {
-  std::vector<std::string> ret;
-  for (auto& entry : fstab) {
-    if (entry.mount_point == "/data") {
-      ret.emplace_back(entry.fs_type);
-    }
-  }
-  return ret;
-}
-
 static int exec_cmd(const std::vector<std::string>& args) {
   CHECK(!args.empty());
   auto argv = StringVectorToNullTerminatedArray(args);
@@ -165,7 +155,7 @@
   return computed_size;
 }
 
-int format_volume(const std::string& volume, const std::string& directory, const std::string fs) {
+int format_volume(const std::string& volume, const std::string& directory) {
   const FstabEntry* v = android::fs_mgr::GetEntryForPath(&fstab, volume);
   if (v == nullptr) {
     LOG(ERROR) << "unknown volume \"" << volume << "\"";
@@ -183,8 +173,8 @@
     LOG(ERROR) << "format_volume: Failed to unmount \"" << v->mount_point << "\"";
     return -1;
   }
-  if (fs != "ext4" && fs != "f2fs") {
-    LOG(ERROR) << "format_volume: fs_type \"" << fs << "\" unsupported";
+  if (v->fs_type != "ext4" && v->fs_type != "f2fs") {
+    LOG(ERROR) << "format_volume: fs_type \"" << v->fs_type << "\" unsupported";
     return -1;
   }
 
@@ -229,7 +219,7 @@
     }
   }
 
-  if (fs == "ext4") {
+  if (v->fs_type == "ext4") {
     static constexpr int kBlockSize = 4096;
     std::vector<std::string> mke2fs_args = {
       "/system/bin/mke2fs", "-F", "-t", "ext4", "-b", std::to_string(kBlockSize),
@@ -325,13 +315,7 @@
 }
 
 int format_volume(const std::string& volume) {
-  const FstabEntry* v = android::fs_mgr::GetEntryForPath(&fstab, volume);
-  return format_volume(volume, "", v->fs_type);
-}
-
-int format_volume(const std::string& volume, const std::string& directory) {
-  const FstabEntry* v = android::fs_mgr::GetEntryForPath(&fstab, volume);
-  return format_volume(volume, directory, v->fs_type);
+  return format_volume(volume, "");
 }
 
 int setup_install_mounts() {
