Index: wp-includes/functions.php
===================================================================
--- wp-includes/functions.php	(revision 18465)
+++ wp-includes/functions.php	(working copy)
@@ -507,11 +507,21 @@
  *
  * @param string $option Option name. Expected to not be SQL-escaped.
  * @param mixed $newvalue Option value. Expected to not be SQL-escaped.
+ * @param bool $autoload Optional. Default is enabled, but will not overwrite previous value unless forced. Whether to load the option when WordPress starts up.
  * @return bool False if value was not updated and true if value was updated.
  */
-function update_option( $option, $newvalue ) {
+function update_option( $option, $newvalue, $autoload = 'default' ) {
 	global $wpdb;
 
+	// If autoload is not set explicitly, do not overwrite previous value
+	if( $autoload == 'default' ) {
+		$replace_autoload = false;
+		$autoload = 'yes';
+	} else {
+		$replace_autoload = true;
+	}
+	$autoload = ( 'no' === $autoload ) ? 'no' : 'yes';
+
 	$option = trim($option);
 	if ( empty($option) )
 		return false;
@@ -530,7 +540,7 @@
 		return false;
 
 	if ( false === $oldvalue )
-		return add_option( $option, $newvalue );
+		return add_option( $option, $newvalue, '', $autoload );
 
 	$notoptions = wp_cache_get( 'notoptions', 'options' );
 	if ( is_array( $notoptions ) && isset( $notoptions[$option] ) ) {
@@ -551,9 +561,13 @@
 			wp_cache_set( $option, $_newvalue, 'options' );
 		}
 	}
+	
+	$updates = array( 'option_value' => $newvalue );
+	if( $replace_autoload )
+		$updates[ 'autoload' ] = $autoload;
+	
+	$result = $wpdb->update( $wpdb->options, $updates, array( 'option_name' => $option ) );
 
-	$result = $wpdb->update( $wpdb->options, array( 'option_value' => $newvalue ), array( 'option_name' => $option ) );
-
 	if ( $result ) {
 		do_action( "update_option_{$option}", $oldvalue, $_newvalue );
 		do_action( 'updated_option', $option, $oldvalue, $_newvalue );
