diff --git a/src/wp-includes/option.php b/src/wp-includes/option.php
index 13f5d49c87..ee52f3d969 100644
--- a/src/wp-includes/option.php
+++ b/src/wp-includes/option.php
@@ -755,8 +755,17 @@ function update_option( $option, $value, $autoload = null ) {
 		$value = clone $value;
 	}
 
-	$value     = sanitize_option( $option, $value );
-	$old_value = get_option( $option );
+	$value      = sanitize_option( $option, $value );
+	$old_value  = get_option( $option );
+	$notoptions = wp_cache_get( 'notoptions', 'options' );
+	if ( ! is_array( $notoptions ) ) {
+		$notoptions = array();
+	}
+	if ( isset( $notoptions[ $option ] ) ) {
+		$is_new_option = true;
+	} else {
+		$is_new_option = false;
+	}
 
 	/**
 	 * Filters a specific option before its value is (maybe) serialized and updated.
@@ -783,6 +792,15 @@ function update_option( $option, $value, $autoload = null ) {
 	 */
 	$value = apply_filters( 'pre_update_option', $value, $option, $old_value );
 
+	if ( $is_new_option ) {
+		// Default setting for new options is 'yes'.
+		if ( null === $autoload ) {
+			$autoload = 'yes';
+		}
+
+		return add_option( $option, $value, '', $autoload );
+	}
+
 	/*
 	 * If the new and old values are the same, no need to update.
 	 *
@@ -796,16 +814,6 @@ function update_option( $option, $value, $autoload = null ) {
 		return false;
 	}
 
-	/** This filter is documented in wp-includes/option.php */
-	if ( apply_filters( "default_option_{$option}", false, $option, false ) === $old_value ) {
-		// Default setting for new options is 'yes'.
-		if ( null === $autoload ) {
-			$autoload = 'yes';
-		}
-
-		return add_option( $option, $value, '', $autoload );
-	}
-
 	$serialized_value = maybe_serialize( $value );
 
 	/**
@@ -832,6 +840,7 @@ function update_option( $option, $value, $autoload = null ) {
 		return false;
 	}
 
+	// Yes, again... it needs to be fresh.
 	$notoptions = wp_cache_get( 'notoptions', 'options' );
 
 	if ( is_array( $notoptions ) && isset( $notoptions[ $option ] ) ) {
