Index: wp-admin/menu-header.php
===================================================================
--- wp-admin/menu-header.php	(revision 17487)
+++ wp-admin/menu-header.php	(working copy)
@@ -36,6 +36,9 @@
 function _wp_menu_output( $menu, $submenu, $submenu_as_parent = true ) {
 	global $self, $parent_file, $submenu_file, $plugin_page, $pagenow, $typenow;
 
+	$menu_setting_increment = -1;
+	$user_settings = get_all_user_settings();
+
 	$first = true;
 	// 0 = name, 1 = capability, 2 = file, 3 = class, 4 = id, 5 = icon src
 	foreach ( $menu as $key => $item ) {
@@ -45,14 +48,18 @@
 			$class[] = 'wp-first-item';
 			$first = false;
 		}
-		if ( !empty($submenu[$item[2]]) )
+		if ( !empty($submenu[$item[2]]) ) {
 			$class[] = 'wp-has-submenu';
+			$menu_setting_increment++;
+		}
 
 		if ( ( $parent_file && $item[2] == $parent_file ) || ( empty($typenow) && $self == $item[2] ) ) {
 			if ( !empty($submenu[$item[2]]) )
 				$class[] = 'wp-has-current-submenu wp-menu-open';
 			else
 				$class[] = 'current';
+		} elseif ( isset( $user_settings[ 'm' . $menu_setting_increment ] ) && 'o' == $user_settings[ 'm' . $menu_setting_increment ] ) {
+				$class[] = 'wp-menu-open-if-js';
 		}
 
 		if ( ! empty($item[4]) )
Index: wp-admin/js/common.dev.js
===================================================================
--- wp-admin/js/common.dev.js	(revision 17487)
+++ wp-admin/js/common.dev.js	(working copy)
@@ -33,16 +33,9 @@
 	},
 
 	restoreMenuState : function() {
-		$('li.wp-has-submenu', '#adminmenu').each(function(i, e) {
-			var v = getUserSetting( 'm'+i );
-			if ( $(e).hasClass('wp-has-current-submenu') )
-				return true; // leave the current parent open
-
-			if ( 'o' == v )
-				$(e).addClass('wp-menu-open');
-			else if ( 'c' == v )
-				$(e).removeClass('wp-menu-open');
-		});
+		$('#adminmenu').find('li.wp-menu-open-if-js')
+			.addClass('wp-menu-open')
+			.removeClass('wp-menu-open-if-js');
 	},
 
 	toggle : function(el) {
Index: wp-admin/css/wp-admin.dev.css
===================================================================
--- wp-admin/css/wp-admin.dev.css	(revision 17487)
+++ wp-admin/css/wp-admin.dev.css	(working copy)
@@ -861,12 +861,14 @@
 .folded #adminmenu a.menu-top,
 .folded #adminmenu .wp-submenu,
 .folded #adminmenu li.wp-menu-open .wp-submenu,
+body.js .folded #adminmenu li.wp-menu-open-if-js .wp-submenu,
 .folded #adminmenu div.wp-menu-toggle {
 	display: none;
 }
 
 #adminmenu li.wp-menu-open .wp-submenu,
-.no-js #adminmenu .open-if-no-js .wp-submenu {
+.no-js #adminmenu .open-if-no-js .wp-submenu,
+body.js #adminmenu .wp-menu-open-if-js .wp-submenu {
 	display: block;
 }
 
@@ -954,7 +956,8 @@
 	border-bottom-left-radius: 6px;
 }
 
-#adminmenu li.wp-menu-open a.menu-top-last {
+#adminmenu li.wp-menu-open a.menu-top-last,
+body.js #adminmenu li.wp-menu-open-if-js a.menu-top-last {
 	border-bottom: 0 none;
 	-moz-border-radius-bottomright: 0;
 	-moz-border-radius-bottomleft: 0;
