OK. I've been fighting with this for 3 days now and I've finally gotten my 3GS on 4.0 and jailbroken. I did this on my Mac, but I don't see why it won't work on a PC. I will be using this procedure on my wife's 3GS later, so I will test it on a PC then. PREREQUISITES: 1) You have to have a 3GS with the old bootrom. If you don't have the old BootRom, just stop here. 2) You have to have iOS 3.1.2 or older SHSHs backed up with Cydia 3) You need the firmware file for whatever version of 3.1 you're going to use to revert, and you will need the firmare file for 4.0, as well. 4) Download Blackra1n. 5) Download pwnagetool 3.1.5 Steps: 1) BACK UP YOUR iPhone 2) Configure your /etc/hosts file to point to Saurik's server (there are other posts on how to do this) 3) Put your phone in DFU mode and then load iTunes. Do a Option Restore and select the old firmware (3.1.2 or older). NOTE! You will likely get a 1015 error when the restore is complete. Don't worry -- this is expected. 4) use Blackra1n to jailbreak 3.1.2 5) UNDO the changes to /etc/hosts to let gs.apple.com resolve to the correct address 6) Use pwnagetool to create a custom ipsw of 4.0 for use in restore. 7) verify that the phone is jailbroken on 3.1.2 by looking for Cydia on Springboard 8) Put the phone into DFU mode 9) do an Option Restore and point at the custom ipsw you made with pwnagetool 10) restore backup 11) Sync.