[AT&T, Rogers, Bell, Telus Samsung Galaxy S III] drothenberger:
I've put together a zip file with the I747UCLH9 AT&T OTA update that can be flashed using CWM/TWRP. This file

preserves root

does not include the Google search update (so you can keep universal search if you want it)

does not wipe /data

does require removing all themes and modifications

Standard disclaimer: I am not responsible if this bricks your phone,

destroys your IMEI

or kills your kids.

Prerequisites: You have to be on stock I747UCALG1 for this to work. It may be rooted, but all the standard AT&T and Samsung bloatware must be there with no modifications. It's okay if some of the apps are frozen with Titanium Backup. You must not have any other mods or themes applied. The updater will check this stuff and abort if anything is wrong. I personally restored a nandroid backup I made right after rooting. If you didn't make one, you can use Odin and the instructions here to go back to stock.

To apply it:

Boot into recovery and make a nandroid backup.

Go back to AT&T UCALG1 rooted stock if necessary (see above). If you're already on stock UCALG1 but have framework-res.apk modications applied, you can flash this zip to restore framework-res.apk to UCALG1 stock.

Make sure CWM recovery from clockworkmod.com or TWRP is installed. The recovery from Team Epic will not work.

Put one of the zip files from below on your internal or external SD card.

Boot into recovery

Flash the attached zip

Wipe cache and dalvik cache (optional?)

(Optional) Go to Backup and Restore, Advanced Restore and restore the /data from the nandroid backup you made in step 1. If you used a nadroid backup in step 2, this should restore your data and apps. If you used Odin to flash the rooted UCALG1 image, this step isn't necessary.

Reboot

Open Settings / Application Manager. Choose All tab. Click on AT&T Software update. Clear "Clear data". If you were getting OTA notifications before, this will prevent them from recurring. After doing this, your phone will know it's up-to-date.

This worked for me. I checked that my flash counter is still at 0 and Google search is still finding local stuff like apps. I still have root.

Here's an alternative way to apply the OTA that doesn't require having stock UCALG1 installed first:

Download all the files in the PIECES section below.

Go into recovery and flash them all before rebooting. Make sure you flash the kernel file after the ROM file.

DOWNLOADS:

I747UCALH9_OTA.zip: This is the full OTA, with kernel and bootloader. You must be using the stock UCALG1 kernel for this to work. MD5: dabaddcfadd250e8389fe387cd3a9ba2

I747UCALH9_OTA_no_kernel.zip: This is the OTA without the kernel. You can use this if you're already running a non-stock kernel. MD5: 7e304f087f7d3e2096c7e30f745df38c

I747UGLH9_OTA_no_kernel_bootloader_modem.zip: This is the OTA without the kernel, bootloader, or modem. It's just the ROM updates. MD5: 6602fd89a3b49db1ab9128c9d9725812

MODS:

This process requires the stock framework-res.apk, so at this point you'll need to reapply any mods you already applied. Here are some mods that I've rebuilt against LH9. All are zip files you can apply through recovery.

Tether and Cell Standby Fix: This includes the mod to enable native Bluetooth and WiFi tethering from here and the fix for the incorrect reporting of Cell Standby time from here.

No Increasing Ring: This removes the increasing ringtone volume. The mod is from here.

No Increasing Ring + Call Recording: This is the same mod as above but with call recording enabled, as described here.

Remove Wifi Notification: This removes the Wifi notification when connected to Wifi. The mod is from here.

15 Toggles in ICS blue: Customizes the toggles in the notification bar. The mod is from here. You can replace the system/framework/lidroid-res.apk file in this zip with any one of the various themed versions on XDA if you want a different look.

15 Toggles in ICS blue - no brightness bar: The same mod as the one above, but also removes the brightness bar from the notifications drop down.

Extended Power Menu: Adds three choices to the Reboot option in the Power menu: Reboot, Recovery, and Download. The mod is from here.

PIECES:

Bootloader: This zip installs just the LH9 bootloader. MD5: 750ce5b2d0fd4476998a8b9e8194c26a

Modem: The modem can be found in this thread.

ROM: This zip installs a complete rooted copy of the LH9 ROM. Unlike the OTA zip above, it does not require that an unmodified LG1 ROM is already installed, but it is much larger (700 MB). You can flash this and all the other pieces in this section to flash an entire LH9 installation. MD5: 1df5aa24f2fe8fd65299a86f050da947

Kernel: This zip will install just the LH9 kernel and associated kernel modules. MD5: 62475e6701aac016732fb0d7d4b781db

TROUBLESHOOTING:

If the zip file aborts with an error, it's most likely because one of the files it wants to patch has been modified from stock LG1. The OTA is not a complete ROM but is a set of binary patches to the LG1 files, so the files it wants to patch must be unchanged from LG1.

The zip file checks that the files are unmodified before proceeding and prints out the first modified file it finds if something is wrong. If something does wrong, read the error message because it will tell you want the problem is. If you want to post to this thread, include the full error message in your post. This normally includes the string "assert".

CREDITS:

Tether mod: electron73

Cell Standby fix: bala_gamer and Anderilux

No Increasing Ring mod: yoelsd and criskelo

Enable Call Recording mod: wanam

Remove Wifi Notification mod: vlara

15 Toggles mod: wanam, Celmerine for the flashlight fix, and electron73 for the ICS themed lidroid-res.apk file.

Extended Power Menu mod: magn2o and sphinx02