diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index b87446b..e3d9a54 100755
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -1854,30 +1854,23 @@
 			user.userId = to_string(userId);
 
 			// Attempt to get name of user. Fallback to user ID if this fails.
-			std::string path = "/data/system/users/" + to_string(userId) + ".xml";
-			if ((atoi(TWFunc::System_Property_Get("ro.build.version.sdk").c_str()) > 30) && TWFunc::Path_Exists(path)) {
-				if(!TWFunc::Check_Xml_Format(path))
-					user.userName = to_string(userId);
+			char* userFile = PageManager::LoadFileToBuffer("/data/system/users/" + to_string(userId) + ".xml", NULL);
+			if (userFile == NULL) {
+				user.userName = to_string(userId);
 			}
 			else {
-				char* userFile = PageManager::LoadFileToBuffer(path, NULL);
-				if (userFile == NULL) {
+				xml_document<> *userXml = new xml_document<>();
+				userXml->parse<0>(userFile);
+				xml_node<>* userNode = userXml->first_node("user");
+				if (userNode == nullptr) {
 					user.userName = to_string(userId);
-				}
-				else {
-					xml_document<> *userXml = new xml_document<>();
-					userXml->parse<0>(userFile);
-					xml_node<>* userNode = userXml->first_node("user");
-					if (userNode == nullptr) {
+				} else {
+					xml_node<>* nameNode = userNode->first_node("name");
+					if (nameNode == nullptr)
 						user.userName = to_string(userId);
-					} else {
-						xml_node<>* nameNode = userNode->first_node("name");
-						if (nameNode == nullptr)
-							user.userName = to_string(userId);
-						else {
-							string userName = nameNode->value();
-							user.userName = userName + " (" + to_string(userId) + ")";
-						}
+					else {
+						string userName = nameNode->value();
+						user.userName = userName + " (" + to_string(userId) + ")";
 					}
 				}
 			}
@@ -3013,16 +3006,6 @@
 		LOGERR("Cannot decrypt adopted storage because /data will not mount\n");
 		return false;
 	}
-
-	// In Android 12 xml format changed. Previously it was human-readable format with xml tags
-	// now it's ABX (Android Binary Xml). Sadly, rapidxml can't parse it, so check xml format firstly
-	std::string path = "/data/system/storage.xml";
-	if ((atoi(TWFunc::System_Property_Get("ro.build.version.sdk").c_str()) > 30) && TWFunc::Path_Exists(path))
-		if(!TWFunc::Check_Xml_Format(path)) {
-			LOGINFO("Android 12+: storage.xml is in ABX format. Skipping adopted storage decryption\n");
-			return false;
-		}
-
 	LOGINFO("Decrypt adopted storage starting\n");
 	char* xmlFile = PageManager::LoadFileToBuffer("/data/system/storage.xml", NULL);
 	xml_document<> *doc = NULL;
@@ -3630,4 +3613,4 @@
 		return false;
 	}
 	return true;
-}
+}
\ No newline at end of file
diff --git a/twrp-functions.cpp b/twrp-functions.cpp
index f427195..b557684 100755
--- a/twrp-functions.cpp
+++ b/twrp-functions.cpp
@@ -1539,20 +1539,4 @@
 exit:
 	return TW_DEFAULT_RECOVERY_FOLDER;
 }
-
-bool TWFunc::Check_Xml_Format(const std::string filename) {
-	std::string buffer(' ', 4);
-	std::string abx_hdr("ABX\x00", 4);
-	std::ifstream File;
-	File.open(filename);
-	if (File.is_open()) {
-		File.get(&buffer[0], buffer.size());
-		File.close();
-		// Android Binary Xml start from these bytes
-		if(!buffer.compare(0, abx_hdr.size(), abx_hdr))
-			return false; // ABX format - requires conversion
-	}
-	return true; // good format, possible to parse
-}
-
 #endif // ndef BUILD_TWRPTAR_MAIN
diff --git a/twrp-functions.hpp b/twrp-functions.hpp
index 4c25cf4..e5656f5 100755
--- a/twrp-functions.hpp
+++ b/twrp-functions.hpp
@@ -131,7 +131,6 @@
 	static void List_Mounts(); // List current mounts by the kernel
 	static void Clear_Bootloader_Message(); // Removes the bootloader message from misc for next boot
 	static string Check_For_TwrpFolder(); // Gets user defined path on storage where backups should be stored
-	static bool Check_Xml_Format(const std::string filename); // Return whether a xml is in plain xml or ABX format
 
 private:
 	static void Copy_Log(string Source, string Destination);
