Index: src/wp-includes/widgets.php
===================================================================
--- src/wp-includes/widgets.php	(revision 33588)
+++ src/wp-includes/widgets.php	(working copy)
@@ -536,8 +536,13 @@
 
 		$settings = get_option( $this->option_name );
 
-		if ( false === $settings && isset( $this->alt_option_name ) ) {
-			$settings = get_option( $this->alt_option_name );
+		if ( false === $settings ) {
+			if ( isset( $this->alt_option_name ) ) {
+				$settings = get_option( $this->alt_option_name );
+			} else {
+				// Save an option so it can be autoloaded next time.
+				$this->save_settings( array() );
+			}
 		}
 
 		if ( ! is_array( $settings ) && ! ( $settings instanceof ArrayObject || $settings instanceof ArrayIterator ) ) {
Index: tests/phpunit/tests/widgets.php
===================================================================
--- tests/phpunit/tests/widgets.php	(revision 33588)
+++ tests/phpunit/tests/widgets.php	(working copy)
@@ -233,6 +233,11 @@
 		$this->assertArrayHasKey( 'title', $instance );
 		unset( $option_value['_multiwidget'] );
 
+		// Pretend this widget is new.
+		delete_option( 'widget_nav_menu' );
+		$never_used = get_option( 'widget_nav_menu' );
+		$this->assertFalse( $never_used );
+
 		wp_widgets_init();
 		$wp_widget_search = $wp_registered_widgets['search-2']['callback'][0];
 
@@ -243,6 +248,11 @@
 		foreach ( $option_value as $widget_number => $instance ) {
 			$this->assertEquals( $settings[ $widget_number ], $option_value[ $widget_number ] );
 		}
+
+		// After widgets_init(), get_settings() should create the widget option.
+		$never_used = get_option( 'widget_nav_menu' );
+		$this->assertEquals( 1, $never_used['_multiwidget'] );
+		$this->assertArrayNotHasKey( 0, $never_used );
 	}
 
 	/**
