I9000 Phones must follow these instructions to unlock the phone:

Step 1: Install a stock JM1 ROM via ODIN. One can be found HERE.
Use the password "samsung-firmwares.com" to unzip the file.
Use the PIT512 file.

Step 2: Select repartition in ODIN

Step 3: Reboot, then root your phone and make sure your BusyBox is functional (download Titanium Backup and click the "Problems?" button to download a working version if you are unsure.

Step 4: Get your current nv_data.bin file from the /efs directory on your phone. This can be done with ADB or any other method you choose. If you do not wish to enter these commands manually, you can download two DOS batch files that accomplish the same thing, though sometimes they encounter problems they can't handle. Most often, the nv_data.bin file is not readable and you will get a permission denied with these batch files. This means something is wrong with your su -c command. You'll need to enter the commands manually, as the batch files won't be able to perform the proper commands.

Download unlock1.bat and unlock2.bat . Run unlock1.bat first, then unlock2.bat after you have your new nv_data.bin file.

To do this with ADB, from the DOS command prompt you can type::

adb pull /efs/nv_data.bin

If you receive a permission denied error, you can fix it by typing the following commands from an ADB shell (type "adb shell" at the DOS command prompt) or from within a terminal on the phone:

su
chmod 777 /efs/nv_data.bin
exit
exit

Then from the DOS command prompt:

adb pull /efs/nv_data.bin

Step 5: Select the file on the main Samsung Galaxy S Unlocker & Repair page

Step 6: Enter your desired Unlock and Unfreeze Codes and click the SUBMIT button

Step 7: Download the new file that is generated for you

Step 8: From ADB shell (Type "adb shell" at the DOS command prompt) or a terminal on your phone, enter the following commands to backup your current EFS related files, in case something goes wrong.

su
mkdir /sdcard/efs_backup
cp -d -r /efs /sdcard/efs_backup
rm /efs/nv*
rm /efs/.nv*

Step 9: Put the new nv_data.bin file you downloaded in the /efs directory, this can be done from a DOS command prompt with ADB with the command:

adb push nv_data.bin /efs

Step 10: Almost done - now we will fix the permissions. From an ADB shell (type "adb shell" at the DOS command prompt) or from within a terminal on the phone:

su
chmod 755 /efs/nv_data.bin
chown radio.radio /efs/nv_data.bin
reboot

If you receive an error after typing chown, use instead:

chown 1001.1001 /efs/nv_data.bin

Step 11: After the phone has rebooted, return to ADB shell ("adb shell" at the DOS command prompt) or a terminal on your phone and type:

su
ls -l -a /efs

If there is an nv_data.bin.md5 file in the directory, all is well. You should continue with these commands:

cp /efs/nv_data.bin /efs/.nv_data.bak
cp /efs/nv_data.bin.md5 /efs/.nv_data.bak.md5

chown radio.radio /efs/.nv_data*

If you receive an error with the chown command, use instead:

chown 1001.1001 /efs/.nv_data*

If there was no nv_data.bin.md5 file, then something went wrong and you'll need to reflash again with a known working ROM that generates a new MD5 file when it's missing. The one you are using does not.

Step 11: Last step! Create a directory on your /sdcard called "efs_good" and copy the /efs files into it. This can be done via ADB shell ("adb shell" at the DOS command prompt) or in a terminal with:

su
mkdir /sdcard/efs_good
cp -d -r /efs /sdcard/efs_good
reboot recovery

You are finished. Your phone should be rebooting into recovery. Once the recovery menu comes up, select the Wipe Cache option and reboot. You should NOT be asked for an unlock code anymore. If you are, something went wrong.