diff --git a/partition.cpp b/partition.cpp
index be01b15..64b461c 100755
--- a/partition.cpp
+++ b/partition.cpp
@@ -274,7 +274,7 @@
 	// Do nothing
 }
 
-bool TWPartition::Process_Fstab_Line(const char *fstab_line, bool Display_Error, std::map<string, Flags_Map> *twrp_flags, bool Sar_Detect) {
+bool TWPartition::Process_Fstab_Line(const char *fstab_line, bool Display_Error, std::map<string, Flags_Map> *twrp_flags) {
 	char full_line[MAX_FSTAB_LINE_LENGTH];
 	char twflags[MAX_FSTAB_LINE_LENGTH] = "";
 	char* ptr;
@@ -320,12 +320,11 @@
 			Mount_Point = ptr;
 			if (fstab_version == 2 && Is_Super == false) {
 				additional_entry = PartitionManager.Find_Partition_By_Path(Mount_Point);
-				if (!Sar_Detect && additional_entry) {
+				if (additional_entry) {
 					LOGINFO("Found an additional entry for '%s'\n", Mount_Point.c_str());
 				}
 			}
-			if(!Sar_Detect)
-				LOGINFO("Processing '%s'\n", Mount_Point.c_str());
+			LOGINFO("Processing '%s'\n", Mount_Point.c_str());
 			Backup_Path = Mount_Point;
 			Storage_Path = Mount_Point;
 			Display_Name = ptr + 1;
@@ -424,13 +423,11 @@
 	if (Primary_Block_Device.find("*") != string::npos)
 		Wildcard_Block_Device = true;
 
-	if (Sar_Detect) {
-		if(Is_File_System(Fstab_File_System) && (Mount_Point == "/" || Mount_Point == "/system" || Mount_Point == "/system_root"))
-			Find_Actual_Block_Device();
-		else
-			return true;
-	} else if (Mount_Point == "auto") {
-		Mount_Point = "/auto" + to_string(auto_index);
+	if (Mount_Point == "auto") {
+		Mount_Point = "/auto";
+		char autoi[5];
+		sprintf(autoi, "%i", auto_index);
+		Mount_Point += autoi;
 		Backup_Path = Mount_Point;
 		Storage_Path = Mount_Point;
 		Backup_Name = Mount_Point.substr(1);
@@ -455,13 +452,18 @@
 		Setup_File_System(Display_Error);
 		Backup_Name = Display_Name = Mount_Point.substr(1, Mount_Point.size() - 1);
 		if (Mount_Point == "/" || Mount_Point == "/system" || Mount_Point == "/system_root") {
+			Mount_Point = PartitionManager.Get_Android_Root_Path();
+			Backup_Path = Mount_Point;
+			Storage_Path = Mount_Point;
 			Display_Name = "System";
 			Backup_Name = "system";
 			Backup_Display_Name = Display_Name;
 			Storage_Name = Display_Name;
-			Wipe_Available_in_GUI = true;
-			Can_Be_Backed_Up = true;
+			Wipe_Available_in_GUI = false;
+			Can_Be_Backed_Up = false;
+			Can_Be_Wiped = false;
 			Mount_Read_Only = true;
+			Make_Dir(PartitionManager.Get_Android_Root_Path(), true);
 		} else if (Mount_Point == "/product") {
 			Display_Name = "Product";
 			Backup_Name = "Product";
@@ -629,24 +631,6 @@
 		}
 	}
 
-	if (Is_File_System(Fstab_File_System) && (Mount_Point == "/" || Mount_Point == "/system" || Mount_Point == "/system_root")) {
-		if (Sar_Detect) {
-			Mount_Point = "/s";
-			Mount_Read_Only = true;
-			Can_Be_Mounted = true;
-		} else {
-			Mount_Point = PartitionManager.Get_Android_Root_Path();
-			Backup_Path = Mount_Point;
-			Storage_Path = Mount_Point;
-			Make_Dir(Mount_Point, Display_Error);
-		}
-		if (Is_Super) {
-			Can_Be_Backed_Up = false;
-			Can_Be_Wiped = false;
-			Wipe_Available_in_GUI = false;
-		}
-	}
-
 	return true;
 }
 
@@ -1596,24 +1580,10 @@
 		string Command = "/system/bin/mount -o bind '" + Symlink_Path + "' '" + Symlink_Mount_Point + "'";
 		TWFunc::Exec_Cmd(Command);
 	}
-
- #ifndef TW_NO_BIND_SYSTEM
-	if (Mount_Point == "/system_root") {
-		unlink("/system");
-		mkdir("/system", 0755);
-		mount("/system_root/system", "/system", "auto", MS_BIND, NULL);
-	}
-#endif
 	return true;
 }
 
 bool TWPartition::UnMount(bool Display_Error) {
-	if (Mount_Point == "/system_root") {
-		if (umount("/system") == -1)
-			umount2("/system", MNT_DETACH);
-		rmdir("/system");
-		symlink("/system_root/system", "/system");
-	}
 	if (Is_Mounted()) {
 		int never_unmount_system;
 
@@ -2960,7 +2930,7 @@
 		TWPartition *part = new TWPartition;
 		char buffer[MAX_FSTAB_LINE_LENGTH];
 		sprintf(buffer, "%s %s-%i auto defaults defaults", item.c_str(), Mount_Point.c_str(), ++mount_point_index);
-		part->Process_Fstab_Line(buffer, false, NULL, false);
+		part->Process_Fstab_Line(buffer, false, NULL);
 		char display[MAX_FSTAB_LINE_LENGTH];
 		sprintf(display, "%s %i", Storage_Name.c_str(), mount_point_index);
 		part->Storage_Name = display;
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index b19742e..34fd39f 100755
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -134,7 +134,7 @@
 #endif
 }
 
-int TWPartitionManager::Process_Fstab(string Fstab_Filename, bool Display_Error, bool Sar_Detect) {
+int TWPartitionManager::Process_Fstab(string Fstab_Filename, bool Display_Error) {
 	FILE *fstabFile;
 	char fstab_line[MAX_FSTAB_LINE_LENGTH];
 	TWPartition* settings_partition = NULL;
@@ -223,7 +223,7 @@
 			fstab_line[line_size] = '\n';
 
 		TWPartition* partition = new TWPartition();
-		if (partition->Process_Fstab_Line(fstab_line, Display_Error, &twrp_flags, Sar_Detect))
+		if (partition->Process_Fstab_Line(fstab_line, Display_Error, &twrp_flags))
 			Partitions.push_back(partition);
 		else
 			delete partition;
@@ -238,7 +238,7 @@
 		for (std::map<string, Flags_Map>::iterator mapit=twrp_flags.begin(); mapit!=twrp_flags.end(); mapit++) {
 			if (Find_Partition_By_Path(mapit->first) == NULL) {
 				TWPartition* partition = new TWPartition();
-				if (partition->Process_Fstab_Line(mapit->second.fstab_line, Display_Error, NULL, Sar_Detect))
+				if (partition->Process_Fstab_Line(mapit->second.fstab_line, Display_Error, NULL))
 					Partitions.push_back(partition);
 				else
 					delete partition;
@@ -255,13 +255,6 @@
 
 	std::vector<TWPartition*>::iterator iter;
 	for (iter = Partitions.begin(); iter != Partitions.end(); iter++) {
-		if (Sar_Detect) {
-			if ((*iter)->Mount_Point == "/s")
-				return true;
-			else
-				continue;
-		}
-
 		(*iter)->Partition_Post_Processing(Display_Error);
 
 		if ((*iter)->Is_Storage) {
@@ -2934,9 +2927,7 @@
 }
 
 string TWPartitionManager::Get_Android_Root_Path() {
-	if (property_get_bool("ro.twrp.sar", false))
-		return "/system_root";
-	return "/system";
+	return "/system_root";
 }
 
 void TWPartitionManager::Remove_Uevent_Devices(const string& Mount_Point) {
diff --git a/partitions.hpp b/partitions.hpp
index be8dcd7..ba7eec3 100755
--- a/partitions.hpp
+++ b/partitions.hpp
@@ -175,7 +175,7 @@
 	void Set_Block_Device(std::string block_device);						  // Allow super partition setup to change block device
 
 private:
-	bool Process_Fstab_Line(const char *fstab_line, bool Display_Error, std::map<string, Flags_Map> *twrp_flags, bool Sar_Detect); // Processes a fstab line
+	bool Process_Fstab_Line(const char *fstab_line, bool Display_Error, std::map<string, Flags_Map> *twrp_flags); // Processes a fstab line
 	void Setup_Data_Partition(bool Display_Error);                            // Setup data partition after fstab processed
 	void Set_FBE_Status();													  // Set FBE status of partition
 	void Setup_Cache_Partition(bool Display_Error);                           // Setup cache partition after fstab processed
@@ -301,7 +301,7 @@
 	~TWPartitionManager() {}
 
 public:
-	int Process_Fstab(string Fstab_Filename, bool Display_Error, bool Sar_Detect);             // Parses the fstab and populates the partitions
+	int Process_Fstab(string Fstab_Filename, bool Display_Error);             // Parses the fstab and populates the partitions
 	int Write_Fstab();                                                        // Creates /etc/fstab file that's used by the command line for mount commands
 	void Decrypt_Data();													  // Decrypt Data if enabled
 	void Output_Partition_Logging();                                          // Outputs partition information to the log
diff --git a/twrp.cpp b/twrp.cpp
index dfdf93b..b767af6 100755
--- a/twrp.cpp
+++ b/twrp.cpp
@@ -149,51 +149,8 @@
 	if (!TWFunc::Path_Exists(fstab_filename)) {
 		fstab_filename = "/etc/recovery.fstab";
 	}
-
-	// Begin SAR detection
-	{
-		TWPartitionManager SarPartitionManager;
-		printf("=> Processing %s for SAR-detection\n", fstab_filename.c_str());
-		if (!SarPartitionManager.Process_Fstab(fstab_filename, 1, 1)) {
-			LOGERR("Failing out of recovery due to problem with fstab.\n");
-			return -1;
-		}
-
-		mkdir("/s", 0755);
-
-#if defined(AB_OTA_UPDATER) || defined(__ANDROID_API_Q__)
-		bool fallback_sar = true;
-#else
-		bool fallback_sar = property_get_bool("ro.build.system_root_image", false);
-#endif
-
-		if(SarPartitionManager.Mount_By_Path("/s", false)) {
-			if (TWFunc::Path_Exists("/s/build.prop")) {
-				LOGINFO("SAR-DETECT: Non-SAR System detected\n");
-				property_set("ro.twrp.sar", "0");
-				rmdir("/system_root");
-			} else if (TWFunc::Path_Exists("/s/system/build.prop")) {
-				LOGINFO("SAR-DETECT: SAR System detected\n");
-				property_set("ro.twrp.sar", "1");
-			} else {
-				LOGINFO("SAR-DETECT: No build.prop found, falling back to %s\n", fallback_sar ? "SAR" : "Non-SAR");
-				property_set("ro.twrp.sar", fallback_sar ? "1" : "0");
-			}
-
-			SarPartitionManager.UnMount_By_Path("/s", false);
-		} else {
-			LOGINFO("SAR-DETECT: Could not mount system partition, falling back to %s\n", fallback_sar ? "SAR":"Non-SAR");
-			property_set("ro.twrp.sar", fallback_sar ? "1" : "0");
-		}
-
-		rmdir("/s");
-
-		TWFunc::check_and_run_script("/system/bin/sarsetup.sh", "boot");
-	}
-	// End SAR detection
-
 	printf("=> Processing %s\n", fstab_filename.c_str());
-	if (!PartitionManager.Process_Fstab(fstab_filename, 1, 0)) {
+	if (!PartitionManager.Process_Fstab(fstab_filename, 1)) {
 		LOGERR("Failing out of recovery due to problem with fstab.\n");
 		return -1;
 	}
