Ok so I go to jump from bionic OTA 5.9.905 to OTA 6.7.246 ICS but get: assert failed: apply...patch...check("system/bin/mount_ext3.sh" But no worries right I have the "forever root" chmod lines in my mount_ext3.sh so this is why the OTA will not apply. Option #1: Remove the added chmod lines from the file so the checksums match again and the OTA will install. Option #2: Edit the checksum values in the OTA update.zip file : Blur_Version.5.9.905.XT875.Verizon.en.US.zip so they match your modified mount_ext3.sh file. Here's the catch... I don't know what was used to calculate the first checksum values. ( I know that sha1sum was used for the second values.) You can unzip the Blur_Version.5.9.905.XT875.Verizon.en.US.zip and navigate to the script file where the checksums for mount_ext3.sh are listed: Blur_Version.5.9.905.XT875.Verizon.en.US\META-INF\com\google\android\updater-script Find lines containing mount_ext3.sh: assert(apply_patch_check("/system/bin/mount_ext3.sh", "1810bb2cd607e2f6cfbeafa158bb3a89629d60b7", "3a8382950bd4a6226349607d099afcbd93653d48")); set_progress(0.411935); assert(apply_patch("/system/bin/mount_ext3.sh", "-", 1810bb2cd607e2f6cfbeafa158bb3a89629d60b7, 1543, 3a8382950bd4a6226349607d099afcbd93653d48, package_extract_file("patch/system/bin/mount_ext3.sh.p"))); Okay so assuming you know what to use to calculate the values, you go and replace these with the values from your modified mount_ext3.sh file... Now you re-zip the file and next you recalculate the CRC value of the Blur_Version.5.9.905.XT875.Verizon.en.US.zip file and replace the value in the Blur_Version.5.9.905.XT875.Verizon.en.US.crc file. Copy these two files back down to /cache/ folder and run the update. If this modification works then there is potentially other applications for this also. Like the removal of all the BloatWare programs by stripping the lines that check for them. Anyone tried this before? What is used besides sha1sum to calculate these values?