Index: wp-includes/version.php
===================================================================
--- wp-includes/version.php	(revision 12198)
+++ wp-includes/version.php	(working copy)
@@ -15,7 +15,7 @@
  *
  * @global int $wp_db_version
  */
-$wp_db_version = 12136;
+$wp_db_version = 12204;
 
 /**
  * Holds the TinyMCE version
Index: wp-admin/includes/upgrade.php
===================================================================
--- wp-admin/includes/upgrade.php	(revision 12198)
+++ wp-admin/includes/upgrade.php	(working copy)
@@ -1685,25 +1685,33 @@
 function pre_schema_upgrade() {
 	global $wp_current_db_version, $wp_db_version, $wpdb;
 
-	// Only run if less than 2.9
-	if ( $wp_current_db_version >= 11557 )
+	// Upgrade 2.9 development versions
+	if ( ( $wp_current_db_version > 11557 ) && ( $wp_current_db_version < 12204 ) ) {
+		// Drop the option_id index. dbDelta() doesn't do the drop.
+		$wpdb->query("ALTER TABLE $wpdb->options DROP INDEX option_id");
+
+		// Drop the old primary key and add the new.
+		$wpdb->query("ALTER TABLE $wpdb->options DROP PRIMARY KEY, ADD PRIMARY KEY(option_id)");
+
 		return;
-
-	// Delete duplicate options.  Keep the option with the highest option_id.
-	$delete_options = $wpdb->get_col("SELECT o1.option_id FROM $wpdb->options AS o1 JOIN $wpdb->options AS o2 ON o2.option_name = o1.option_name AND o2.option_id > o1.option_id");
-	if ( !empty($delete_options) ) {
-		$delete_options = implode(',', $delete_options);
-		$wpdb->query("DELETE FROM $wpdb->options WHERE option_id IN ($delete_options)");
 	}
 
-	// Add an index on option_id to satisfy the auto_increment requirement
-	$wpdb->query("ALTER TABLE $wpdb->options ADD INDEX option_id (option_id)");
+	// Upgrade versions prior to 2.9
+	if ( $wp_current_db_version < 11557 ) {
+		// Delete duplicate options.  Keep the option with the highest option_id.
+		$delete_options = $wpdb->get_col("SELECT o1.option_id FROM $wpdb->options AS o1 JOIN $wpdb->options AS o2 ON o2.option_name = o1.option_name AND o2.option_id > o1.option_id");
+		if ( !empty($delete_options) ) {
+			$delete_options = implode(',', $delete_options);
+			$wpdb->query("DELETE FROM $wpdb->options WHERE option_id IN ($delete_options)");
+		}
 
-	// Drop the old primary key. The new primary will be created by dbDelta()
-	$wpdb->query("ALTER TABLE $wpdb->options DROP PRIMARY KEY");
+		// Drop the old primary key and add the new.
+		$wpdb->query("ALTER TABLE $wpdb->options DROP PRIMARY KEY, ADD PRIMARY KEY(option_id)");
 
-	// Drop the old option_name index. dbDelta() doesn't do the drop.
-	$wpdb->query("ALTER TABLE $wpdb->options DROP INDEX option_name");
+		// Drop the old option_name index. dbDelta() doesn't do the drop.
+		$wpdb->query("ALTER TABLE $wpdb->options DROP INDEX option_name");
+	}
+
 }
 
 ?>
Index: wp-admin/includes/schema.php
===================================================================
--- wp-admin/includes/schema.php	(revision 12198)
+++ wp-admin/includes/schema.php	(working copy)
@@ -108,8 +108,9 @@
   option_name varchar(64) NOT NULL default '',
   option_value longtext NOT NULL,
   autoload varchar(20) NOT NULL default 'yes',
-  PRIMARY KEY  (option_name),
-  KEY option_id (option_id)
+  PRIMARY KEY  (option_id),
+  UNIQUE option_name (option_name),
+  UNIQUE autoloaded_options (autoload, option_name)
 ) $charset_collate;
 CREATE TABLE $wpdb->postmeta (
   meta_id bigint(20) unsigned NOT NULL auto_increment,
