Index: wp-includes/widgets.php
===================================================================
--- wp-includes/widgets.php	(revision 11685)
+++ wp-includes/widgets.php	(working copy)
@@ -957,89 +957,29 @@
  * @return array Upgraded list of widgets to version 2 array format.
  */
 function wp_get_sidebars_widgets($update = true) {
-	global $wp_registered_widgets, $wp_registered_sidebars, $_wp_sidebars_widgets;
-
+	global $_wp_sidebars_widgets;
+	
 	// If loading from front page, consult $_wp_sidebars_widgets rather than options
 	// to see if wp_convert_widget_settings() has made manipulations in memory.
 	if ( is_admin() ) {
 		$sidebars_widgets = get_option('sidebars_widgets', array());
 	} else {
 		if ( empty($_wp_sidebars_widgets) )
-			$sidebars_widgets = get_option('sidebars_widgets', array());
-		else
-			$sidebars_widgets = &$_wp_sidebars_widgets;
+			$_wp_sidebars_widgets = get_option('sidebars_widgets', array());
+
+		$sidebars_widgets = $_wp_sidebars_widgets;
 	}
-	$_sidebars_widgets = array();
 
-	if ( !isset($sidebars_widgets['array_version']) )
-		$sidebars_widgets['array_version'] = 1;
-
-	switch ( $sidebars_widgets['array_version'] ) {
-		case 1 :
-			foreach ( (array) $sidebars_widgets as $index => $sidebar )
-			if ( is_array($sidebar) )
-			foreach ( (array) $sidebar as $i => $name ) {
-				$id = strtolower($name);
-				if ( isset($wp_registered_widgets[$id]) ) {
-					$_sidebars_widgets[$index][$i] = $id;
-					continue;
-				}
-				$id = sanitize_title($name);
-				if ( isset($wp_registered_widgets[$id]) ) {
-					$_sidebars_widgets[$index][$i] = $id;
-					continue;
-				}
-
-				$found = false;
-
-				foreach ( $wp_registered_widgets as $widget_id => $widget ) {
-					if ( strtolower($widget['name']) == strtolower($name) ) {
-						$_sidebars_widgets[$index][$i] = $widget['id'];
-						$found = true;
-						break;
-					} elseif ( sanitize_title($widget['name']) == sanitize_title($name) ) {
-						$_sidebars_widgets[$index][$i] = $widget['id'];
-						$found = true;
-						break;
-					}
-				}
-
-				if ( $found )
-					continue;
-
-				unset($_sidebars_widgets[$index][$i]);
-			}
-			$_sidebars_widgets['array_version'] = 2;
-			$sidebars_widgets = $_sidebars_widgets;
-			unset($_sidebars_widgets);
-
-		case 2 :
-			$sidebars = array_keys( $wp_registered_sidebars );
-			if ( !empty( $sidebars ) ) {
-				// Move the known-good ones first
-				foreach ( (array) $sidebars as $id ) {
-					if ( array_key_exists( $id, $sidebars_widgets ) ) {
-						$_sidebars_widgets[$id] = $sidebars_widgets[$id];
-						unset($sidebars_widgets[$id], $sidebars[$id]);
-					}
-				}
-
-				// Assign to each unmatched registered sidebar the first available orphan
-				unset( $sidebars_widgets[ 'array_version' ] );
-				while ( ( $sidebar = array_shift( $sidebars ) ) && $widgets = array_shift( $sidebars_widgets ) )
-					$_sidebars_widgets[ $sidebar ] = $widgets;
-
-				$_sidebars_widgets['array_version'] = 3;
-				$sidebars_widgets = $_sidebars_widgets;
-				unset($_sidebars_widgets);
-			}
-
-			if ( $update && is_admin() )
-				update_option('sidebars_widgets', $sidebars_widgets);
+	if ( !isset($sidebars_widgets['array_version']) || $sidebars_widgets['array_version'] != 3 ) {
+		$sidebars_widgets = array('array_version' => 3 );
+		if ( $update && is_admin() )
+			update_option('sidebars_widgets', array());
 	}
 
-	if ( isset($sidebars_widgets['array_version']) )
-		unset($sidebars_widgets['array_version']);
+	if ( !is_admin() )
+		$_wp_sidebars_widgets = $sidebars_widgets;
+	
+	unset($sidebars_widgets['array_version']);
 
 	$sidebars_widgets = apply_filters('sidebars_widgets', $sidebars_widgets);
 	return $sidebars_widgets;
@@ -1086,9 +1026,8 @@
  * @return array
  */
 function wp_convert_widget_settings($base_name, $option_name, $settings) {
-	global $_wp_sidebars_widgets;
 	// This test may need expanding.
-	$single = false;
+	$single = $changed = false;
 	if ( empty($settings) ) {
 		$single = true;
 	} else {
@@ -1113,19 +1052,24 @@
 				$GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets');
 			$sidebars_widgets = &$GLOBALS['_wp_sidebars_widgets'];
 		}
+		
+		if ( !isset($sidebars_widgets['array_version']) || $sidebars_widgets['array_version'] != 3 ) {
+			$sidebars_widgets = array('array_version' => 3 );
+		}
 
 		foreach ( (array) $sidebars_widgets as $index => $sidebar ) {
 			if ( is_array($sidebar) ) {
 				foreach ( $sidebar as $i => $name ) {
 					if ( $base_name == $name ) {
 						$sidebars_widgets[$index][$i] = "$name-2";
+						$changed = true;
 						break 2;
 					}
 				}
 			}
 		}
 
-		if ( is_admin() )
+		if ( is_admin() && $changed )
 			update_option('sidebars_widgets', $sidebars_widgets);
 	}
 
