Index: wp-includes/admin-bar.php
===================================================================
--- wp-includes/admin-bar.php	(revision 19229)
+++ wp-includes/admin-bar.php	(working copy)
@@ -91,46 +91,40 @@
 		) );
 	}
 
-	// Add secondary menu.
-	$wp_admin_bar->add_menu( array(
-		'parent' => 'wp-logo',
-		'id'     => 'wp-logo-secondary',
-		'title'  => '&nbsp;',
-		'meta'   => array(
-			'class' => 'secondary',
-		),
-	) );
-
 	// Add WordPress.org link
 	$wp_admin_bar->add_menu( array(
-		'parent' => 'wp-logo-secondary',
-		'id'     => 'wporg',
-		'title'  => __('WordPress.org'),
-		'href'   => __('http://wordpress.org'),
+		'parent'    => 'wp-logo',
+		'secondary' => true,
+		'id'        => 'wporg',
+		'title'     => __('WordPress.org'),
+		'href'      => __('http://wordpress.org'),
 	) );
 
 	// Add codex link
 	$wp_admin_bar->add_menu( array(
-		'parent' => 'wp-logo-secondary',
-		'id'     => 'documentation',
-		'title'  => __('Documentation'),
-		'href'   => __('http://codex.wordpress.org'),
+		'parent'    => 'wp-logo',
+		'secondary' => true,
+		'id'        => 'documentation',
+		'title'     => __('Documentation'),
+		'href'      => __('http://codex.wordpress.org'),
 	) );
 
 	// Add forums link
 	$wp_admin_bar->add_menu( array(
-		'parent' => 'wp-logo-secondary',
-		'id'     => 'support-forums',
-		'title'  => __('Support Forums'),
-		'href'   => __('http://wordpress.org/support/'),
+		'parent'    => 'wp-logo',
+		'secondary' => true,
+		'id'        => 'support-forums',
+		'title'     => __('Support Forums'),
+		'href'      => __('http://wordpress.org/support/'),
 	) );
 
 	// Add feedback link
 	$wp_admin_bar->add_menu( array(
-		'parent' => 'wp-logo-secondary',
-		'id'     => 'feedback',
-		'title'  => __('Feedback'),
-		'href'   => __('http://wordpress.org/support/forum/requests-and-feedback'),
+		'parent'    => 'wp-logo',
+		'secondary' => true,
+		'id'        => 'feedback',
+		'title'     => __('Feedback'),
+		'href'      => __('http://wordpress.org/support/forum/requests-and-feedback'),
 	) );
 }
 
@@ -150,17 +144,15 @@
 		/* Add the 'My Account' menu */
 		$avatar = get_avatar( $user_id, 28 );
 		$howdy  = sprintf( __('Howdy, %1$s'), $user_identity );
-		$class  = 'opposite';
+		$class  = empty( $avatar ) ? '' : 'with-avatar';
 
-		if ( ! empty( $avatar ) )
-			$class .= ' with-avatar';
-
 		$wp_admin_bar->add_menu( array(
-			'id'    => 'my-account',
-			'title' => $howdy . $avatar,
-			'href'  => $profile_url,
-			'meta'  => array(
-				'class' => $class,
+			'id'        => 'my-account',
+			'secondary' => true,
+			'title'     => $howdy . $avatar,
+			'href'      => $profile_url,
+			'meta'      => array(
+				'class'     => $class,
 			),
 		) );
 
@@ -322,17 +314,6 @@
 		) );
 	}
 
-	if ( $wp_admin_bar->user->blogs ) {
-		$wp_admin_bar->add_menu( array(
-			'parent' => 'my-sites',
-			'id'     => 'my-sites-secondary',
-			'title'  => '&nbsp;',
-			'meta'   => array(
-				'class' => 'secondary',
-			),
-		) );
-	}
-
 	// Add blog links
 	$blue_wp_logo_url = includes_url('images/wpmini-blue.png');
 
@@ -345,10 +326,11 @@
 		$menu_id  = 'blog-' . $blog->userblog_id;
 
 		$wp_admin_bar->add_menu( array(
-			'parent' => 'my-sites-secondary',
-			'id'     => $menu_id,
-			'title'  => $blavatar . $blogname,
-			'href'   => get_admin_url( $blog->userblog_id ),
+			'parent'    => 'my-sites',
+			'secondary' => true,
+			'id'        => $menu_id,
+			'title'     => $blavatar . $blogname,
+			'href'      => get_admin_url( $blog->userblog_id ),
 		) );
 
 		$wp_admin_bar->add_menu( array(
@@ -473,23 +455,23 @@
  * @since 3.1.0
  */
 function wp_admin_bar_new_content_menu( $wp_admin_bar ) {
-	$primary = $secondary = array();
+	$actions = array();
 
 	$cpts = (array) get_post_types( array( 'show_in_admin_bar' => true ), 'objects' );
 
 	if ( isset( $cpts['post'] ) && current_user_can( $cpts['post']->cap->edit_posts ) ) {
-		$primary[ 'post-new.php' ] = array( $cpts['post']->labels->name_admin_bar, 'new-post' );
+		$actions[ 'post-new.php' ] = array( $cpts['post']->labels->name_admin_bar, 'new-post' );
 		unset( $cpts['post'] );
 	}
 
 	if ( current_user_can( 'upload_files' ) )
-		$primary[ 'media-new.php' ] = array( _x( 'Media', 'add new from admin bar' ), 'new-media' );
+		$actions[ 'media-new.php' ] = array( _x( 'Media', 'add new from admin bar' ), 'new-media' );
 
 	if ( current_user_can( 'manage_links' ) )
-		$primary[ 'link-add.php' ] = array( _x( 'Link', 'add new from admin bar' ), 'new-link' );
+		$actions[ 'link-add.php' ] = array( _x( 'Link', 'add new from admin bar' ), 'new-link' );
 
 	if ( isset( $cpts['page'] ) && current_user_can( $cpts['page']->cap->edit_posts ) ) {
-		$primary[ 'post-new.php?post_type=page' ] = array( $cpts['page']->labels->name_admin_bar, 'new-page' );
+		$actions[ 'post-new.php?post_type=page' ] = array( $cpts['page']->labels->name_admin_bar, 'new-page' );
 		unset( $cpts['page'] );
 	}
 
@@ -499,47 +481,33 @@
 			continue;
 
 		$key = 'post-new.php?post_type=' . $cpt->name;
-		$primary[ $key ] = array( $cpt->labels->name_admin_bar, 'new-' . $cpt->name );
+		$actions[ $key ] = array( $cpt->labels->name_admin_bar, 'new-' . $cpt->name );
 	}
 
 	if ( current_user_can( 'create_users' ) || current_user_can( 'promote_users' ) )
-		$secondary[ 'user-new.php' ] = array( _x( 'User', 'add new from admin bar' ), 'new-user' );
+		$actions[ 'user-new.php' ] = array( _x( 'User', 'add new from admin bar' ), 'new-user', true );
 
-	if ( ! $primary && ! $secondary )
+	if ( ! $actions )
 		return;
 
 	$wp_admin_bar->add_menu( array(
 		'id'    => 'new-content',
+		'secondary' => true,
 		'title' => _x( 'Add New', 'admin bar menu group label' ),
-		'href'  => admin_url( current( array_keys( $primary ) ) ),
+		'href'  => admin_url( current( array_keys( $actions ) ) ),
 	) );
 
-	$items = array(
-		'new-content' => $primary,
-		'new-content-secondary' => $secondary,
-	);
+	foreach ( $actions as $link => $action ) {
+		$action = array_pad( $action, 3, false );
+		list( $title, $id, $secondary ) = $action;
 
-	foreach ( $items as $parent => $actions ) {
-
-		if ( ! empty( $actions ) && $parent == 'new-content-secondary' ) {
-			$wp_admin_bar->add_menu( array(
-				'parent' => 'new-content',
-				'id'     => 'new-content-secondary',
-				'title'  => '&nbsp;',
-				'meta'   => array(
-					'class' => 'secondary',
-				),
-			) );
-		}
-
-		foreach ( $actions as $link => $action ) {
-			$wp_admin_bar->add_menu( array(
-				'parent' => $parent,
-				'id'     => $action[1],
-				'title'  => $action[0],
-				'href'   => admin_url( $link )
-			) );
-		}
+		$wp_admin_bar->add_menu( array(
+			'parent'    => 'new-content',
+			'secondary' => $secondary,
+			'id'        => $id,
+			'title'     => $title,
+			'href'      => admin_url( $link )
+		) );
 	}
 }
 
Index: wp-includes/css/admin-bar.dev.css
===================================================================
--- wp-includes/css/admin-bar.dev.css	(revision 19229)
+++ wp-includes/css/admin-bar.dev.css	(working copy)
@@ -78,12 +78,13 @@
 	border-right: 1px solid #333;
 }
 
-#wpadminbar .quicklinks > ul > li.opposite {
+#wpadminbar .quicklinks .top-secondary > li {
 	border-left: 1px solid #333;
 	border-right: 0;
+	float: right;
 }
 
-#wpadminbar .quicklinks > ul > li.opposite > a {
+#wpadminbar .quicklinks .top-secondary > li > a {
 	border-left: 1px solid #555;
 	border-right: 0;
 }
@@ -117,7 +118,7 @@
 	border-color: #dfdfdf;
 }
 
-#wpadminbar .quicklinks .opposite.menupop ul {
+#wpadminbar .quicklinks .top-secondary .menupop ul {
 	right: 0;
 	margin: 0 -1px 0 0;
 }
@@ -166,8 +167,8 @@
 	border-width: 1px;
 }
 
-#wpadminbar .quicklinks .opposite.menupop li:hover > ul,
-#wpadminbar .quicklinks .opposite.menupop li.hover > ul {
+#wpadminbar .quicklinks .top-secondary .menupop li:hover > ul,
+#wpadminbar .quicklinks .top-secondary .menupop li.hover > ul {
 	margin-left: 0;
 	left: inherit;
 	right: 100%;
@@ -232,37 +233,30 @@
 	padding: 0 1.5em 0 0;
 }
 
-#wpadminbar .opposite.menupop li a > span {
+#wpadminbar .top-secondary .menupop li a > span {
 	background-position: -28px -31px;
 	padding: 0 0 0 1.5em;
 }
 
-#wpadminbar .quicklinks .menupop .secondary {
-	background: #eee;
-	margin: 6px 0 -6px;
-	border-top: 1px solid #dfdfdf;
-}
-
-#wpadminbar .quicklinks .menupop .secondary > a {
-	display: none;
-}
-
-#wpadminbar .quicklinks .menupop li.secondary > ul,
-#wpadminbar .quicklinks .opposite.menupop li.secondary > ul {
+#wpadminbar .quicklinks .menupop ul.sub-secondary {
 	display: block;
 	position: relative;
 	right: auto;
 	margin: 0;
 	border: 0;
+
 	background: #eee;
+	margin: 6px 0 -6px;
+	border-top: 1px solid #dfdfdf;
+
 	-moz-box-shadow: none;
 	-webkit-box-shadow: none;
 	box-shadow: none;
 }
 
-#wpadminbar .quicklinks .menupop li.secondary > ul > li:hover,
-#wpadminbar .quicklinks .menupop li.secondary > ul > li.hover,
-#wpadminbar .quicklinks .menupop li.secondary > ul > li a:focus {
+#wpadminbar .quicklinks .menupop .sub-secondary > li:hover,
+#wpadminbar .quicklinks .menupop .sub-secondary > li.hover,
+#wpadminbar .quicklinks .menupop .sub-secondary > li a:focus {
 	background: #dfdfdf;
 }
 
@@ -283,7 +277,7 @@
 	color: #000;
 }
 
-#wpadminbar li.opposite {
+#wpadminbar .top-secondary {
 	float: right;
 }
 
Index: wp-includes/class-wp-admin-bar.php
===================================================================
--- wp-includes/class-wp-admin-bar.php	(revision 19229)
+++ wp-includes/class-wp-admin-bar.php	(working copy)
@@ -12,6 +12,11 @@
 			$this->proto = 'https://';
 
 		$this->user = new stdClass;
+		$this->root = new stdClass;
+		$this->root->children  = (object) array(
+			'primary'   => array(),
+			'secondary' => array(),
+		);
 
 		if ( is_user_logged_in() ) {
 			/* Populate settings we need for the menu based on the current user. */
@@ -59,11 +64,12 @@
 	 * Add a node to the menu.
 	 *
 	 * @param array $args - The arguments for each node.
-	 * - id       - string - The ID of the item.
-	 * - title    - string - The title of the node.
-	 * - parent   - string - The ID of the parent node. Optional.
-	 * - href     - string - The link for the item. Optional.
-	 * - meta     - array  - Meta data including the following keys: html, class, onclick, target, title.
+	 * - id         - string    - The ID of the item.
+	 * - title      - string    - The title of the node.
+	 * - parent     - string    - The ID of the parent node. Optional.
+	 * - href       - string    - The link for the item. Optional.
+	 * - secondary  - boolean   - If the item should be part of a secondary menu. Optional. Default false.
+	 * - meta       - array     - Meta data including the following keys: html, class, onclick, target, title.
 	 */
 	public function add_node( $args ) {
 		// Shim for old method signature: add_node( $parent_id, $menu_obj, $args )
@@ -80,11 +86,12 @@
 		}
 
 		$defaults = array(
-			'id'       => false,
-			'title'    => false,
-			'parent'   => false,
-			'href'     => false,
-			'meta'     => array(),
+			'id'        => false,
+			'title'     => false,
+			'parent'    => false,
+			'href'      => false,
+			'secondary' => false,
+			'meta'      => array(),
 		);
 
 		// If the node already exists, keep any data that isn't provided.
@@ -92,6 +99,10 @@
 			$defaults = (array) $this->nodes[ $args['id'] ];
 
 		$args = wp_parse_args( $args, $defaults );
+		$args['children'] = (object) array(
+			'primary'   => array(),
+			'secondary' => array(),
+		);
 
 		$this->nodes[ $args['id'] ] = (object) $args;
 	}
@@ -106,19 +117,20 @@
 
 			// Handle root menu items
 			if ( empty( $node->parent ) ) {
-				$this->root[] = $node;
-				continue;
-			}
+				$parent = $this->root;
 
 			// If the parent node isn't registered, ignore the node.
-			if ( ! isset( $this->nodes[ $node->parent ] ) )
+			} elseif ( ! isset( $this->nodes[ $node->parent ] ) ) {
 				continue;
 
-			$parent = $this->nodes[ $node->parent ];
-			if ( ! isset( $parent->children ) )
-				$parent->children = array();
+			} else {
+				$parent = $this->nodes[ $node->parent ];
+			}
 
-			$parent->children[] = $node;
+			if ( $node->secondary )
+				$parent->children->secondary[] = $node;
+			else
+				$parent->children->primary[] = $node;
 		}
 
 		?>
@@ -126,10 +138,19 @@
 			<div class="quicklinks">
 				<ul class="ab-top-menu"><?php
 
-					foreach ( $this->root as $node ) {
+					foreach ( $this->root->children->primary as $node ) {
 						$this->recursive_render( $node );
 					}
 
+					if ( ! empty( $this->root->children->secondary ) ):
+						?><ul class="top-secondary"><?php
+
+							foreach ( $this->root->children->secondary as $node ) {
+								$this->recursive_render( $node );
+							}
+
+						?></ul><?php
+					endif;
 				?></ul>
 			</div>
 		</div>
@@ -138,7 +159,7 @@
 	}
 
 	function recursive_render( $node ) {
-		$is_parent = ! empty( $node->children );
+		$is_parent = ! empty( $node->children->primary );
 
 		$menuclass = $is_parent ? 'menupop' : '';
 		if ( ! empty( $node->meta['class'] ) )
@@ -173,16 +194,22 @@
 
 			?></a>
 
-			<?php if ( $is_parent ) : ?>
-				<ul><?php
-
-				// Render children.
-				foreach ( $node->children as $child_node ) {
+			<?php
+			if ( $is_parent ) :
+				?><ul><?php
+				foreach ( $node->children->primary as $child_node ) {
 					$this->recursive_render( $child_node );
 				}
 
-				?></ul>
-			<?php endif;
+				if ( ! empty( $node->children->secondary ) ):
+					?><ul class="sub-secondary"><?php
+					foreach ( $node->children->secondary as $child_node ) {
+						$this->recursive_render( $child_node );
+					}
+					?></ul><?php
+				endif;
+				?></ul><?php
+			endif;
 
 			if ( ! empty( $node->meta['html'] ) )
 				echo $node->meta['html'];
