Index: wp-includes/admin-bar.php
===================================================================
--- wp-includes/admin-bar.php	(revision 21813)
+++ wp-includes/admin-bar.php	(working copy)
@@ -657,6 +657,28 @@
 	) );
 }
 
+function wp_admin_bar_screen_options( $wp_admin_bar ) {
+
+	if ( ! get_current_screen()->show_screen_options() )
+		return;
+
+	$wp_admin_bar->add_menu( array(
+		'parent' => 'top-secondary',
+		'id'    => 'screen-options',
+		'title' => '<span class="ab-icon"></span>',
+		'href'  => '',
+	) );
+}
+
+function wp_admin_bar_contextual_help( $wp_admin_bar ) {
+	$wp_admin_bar->add_menu( array(
+		'parent' => 'top-secondary',
+		'id'    => 'screen-help',
+		'title' => 'Help<span class="ab-icon"></span>',
+		'href'  => '',
+	) );
+}
+
 /**
  * Add secondary menus.
  *
Index: wp-includes/js/admin-bar.js
===================================================================
--- wp-includes/js/admin-bar.js	(revision 21813)
+++ wp-includes/js/admin-bar.js	(working copy)
@@ -10,9 +10,10 @@
 				node.attr('tabindex', '0').attr('tabindex', tab);
 		};
 
-		$('#wpadminbar').removeClass('nojq').removeClass('nojs').find('li.menupop').hoverIntent({
+		$('#wpadminbar').removeClass('nojq').removeClass('nojs').find('li.menupop').not('.sticky').hoverIntent({
 			over: function(e){
 				$(this).addClass('hover');
+				heightCheck($(this));
 			},
 			out: function(e){
 				$(this).removeClass('hover');
@@ -22,6 +23,11 @@
 			interval: 100
 		});
 
+		$('.sticky', '#wpadminbar').click(function(e){
+			e.preventDefault();
+			$(this).toggleClass('hover');
+		});
+
 		$('#wp-admin-bar-get-shortlink').click(function(e){
 			e.preventDefault();
 			$(this).addClass('selected').children('.shortlink-input').blur(function(){
@@ -66,8 +72,22 @@
 			e.preventDefault();
 			$('html, body').animate({ scrollTop: 0 }, 'fast');
 		});
+		
+		
 
 	});
+	
+	function heightCheck( menu ) {
+		// Add overflow if sub menu height exceeds window height
+		var wHeight = jQuery(window).height(),
+			toolbarPlusPadding = 28 + 23,
+			subWrapper = menu.find('.ab-sub-wrapper'),
+			subMenuHeight = subWrapper.height() + toolbarPlusPadding;
+		
+		if ( subMenuHeight > wHeight )
+			subWrapper.css({ 'overflow-y': 'auto', 'overflow-x': 'hidden', 'height': wHeight - toolbarPlusPadding + 'px'});
+	}
+	
 } else {
 	(function(d, w) {
 		var addEvent = function( obj, type, fn ) {
Index: wp-includes/css/admin-bar.css
===================================================================
--- wp-includes/css/admin-bar.css	(revision 21813)
+++ wp-includes/css/admin-bar.css	(working copy)
@@ -10,7 +10,7 @@
 	font: normal 13px/28px sans-serif;
 	color: #ccc;
 	text-shadow: #444 0px -1px 0px;
-}
+} 
 
 #wpadminbar ul li:before,
 #wpadminbar ul li:after {
@@ -517,6 +517,25 @@
 }
 
 /**
+ * Sticky menu toggle arrows
+ */
+#wpadminbar .sticky .sticky-indicator {
+	position: relative;
+	float: right;
+	width: 20px;
+	height: 16px;
+	margin-top: 6px;
+	background-image: url("../images/admin-bar-sprite.png");
+	background-position: 0 -254px;
+	background-repeat: no-repeat;
+	cursor: pointer;
+}
+
+#wpadminbar .sticky.hover .sticky-indicator {
+	background-position: 0 -228px;
+}
+
+/**
  * WP Logo icon
  */
 #wp-admin-bar-wp-logo > .ab-item .ab-icon {
@@ -573,6 +592,22 @@
 }
 
 /**
+ * Screen Settings icon
+ */
+#wpadminbar #wp-admin-bar-screen-options > .ab-item .ab-icon {
+	background-image: url(../images/admin-bar-sprite.png?d=20111130);
+	background-position: -3px -252px;
+	background-repeat: no-repeat;
+}
+
+#wpadminbar.nojs #wp-admin-bar-screen-options:hover > .ab-item .ab-icon,
+#wpadminbar #wp-admin-bar-screen-options.hover > .ab-item .ab-icon {
+	background-image: url(../images/admin-bar-sprite.png?d=20111130);
+	background-position: -3px -228px;
+	background-repeat: no-repeat;
+}
+
+/**
  * Customize support classes
  */
 .no-customize-support .hide-if-no-customize,
@@ -590,9 +625,11 @@
 	#wp-admin-bar-wp-logo > .ab-item .ab-icon,
 	#wp-admin-bar-updates > .ab-item .ab-icon,
 	#wp-admin-bar-comments > .ab-item .ab-icon,
-	#wpadminbar #wp-admin-bar-new-content > .ab-item .ab-icon {
-		background-image: url(../images/admin-bar-sprite-2x.png?d=20120830);
-		background-size: 20px 220px;
+	#wpadminbar #wp-admin-bar-new-content > .ab-item .ab-icon,
+	#wpadminbar #wp-admin-bar-screen-options > .ab-item .ab-icon,
+	#wpadminbar .sticky .sticky-indicator {
+		background-image: url( "../images/admin-bar-sprite-2x.png?d=20120830" );
+		background-size: 20px 276px;
 	}
 }
 
Index: wp-includes/class-wp-admin-bar.php
===================================================================
--- wp-includes/class-wp-admin-bar.php	(revision 21813)
+++ wp-includes/class-wp-admin-bar.php	(working copy)
@@ -104,6 +104,7 @@
 			'parent' => false,
 			'href'   => false,
 			'group'  => false,
+			'sticky' => false,
 			'meta'   => array(),
 		);
 
@@ -396,6 +397,8 @@
 
 		$is_parent = ! empty( $node->children );
 		$has_link  = ! empty( $node->href );
+		$has_title = ! empty( $node->title );
+		$is_sticky = $node->sticky === true ? true : false;
 
 		$tabindex = isset( $node->meta['tabindex'] ) ? (int) $node->meta['tabindex'] : '';
 		$aria_attributes = $tabindex ? 'tabindex="' . $tabindex . '"' : '';
@@ -410,40 +413,49 @@
 		if ( ! empty( $node->meta['class'] ) )
 			$menuclass .= $node->meta['class'];
 
+		if ( $is_sticky )
+			$menuclass .= 'sticky';
+
 		if ( $menuclass )
 			$menuclass = ' class="' . esc_attr( trim( $menuclass ) ) . '"';
 
 		?>
 
 		<li id="<?php echo esc_attr( 'wp-admin-bar-' . $node->id ); ?>"<?php echo $menuclass; ?>><?php
-			if ( $has_link ):
-				?><a class="ab-item" <?php echo $aria_attributes; ?> href="<?php echo esc_url( $node->href ) ?>"<?php
-					if ( ! empty( $node->meta['onclick'] ) ) :
-						?> onclick="<?php echo esc_js( $node->meta['onclick'] ); ?>"<?php
+			if ( $has_title ):
+				if ( $has_link ):
+					?><a class="ab-item" <?php echo $aria_attributes; ?> href="<?php echo esc_url( $node->href ) ?>"<?php
+						if ( ! empty( $node->meta['onclick'] ) ) :
+							?> onclick="<?php echo esc_js( $node->meta['onclick'] ); ?>"<?php
+						endif;
+					if ( ! empty( $node->meta['target'] ) ) :
+						?> target="<?php echo esc_attr( $node->meta['target'] ); ?>"<?php
 					endif;
-				if ( ! empty( $node->meta['target'] ) ) :
-					?> target="<?php echo esc_attr( $node->meta['target'] ); ?>"<?php
+					if ( ! empty( $node->meta['title'] ) ) :
+						?> title="<?php echo esc_attr( $node->meta['title'] ); ?>"<?php
+					endif;
+					?>><?php
+				else:
+					?><a href="#" onclick="return false;" class="ab-item ab-empty-item" <?php echo $aria_attributes;
+					if ( ! empty( $node->meta['title'] ) ) :
+						?> title="<?php echo esc_attr( $node->meta['title'] ); ?>"<?php
+					endif;
+					?>><?php
 				endif;
-				if ( ! empty( $node->meta['title'] ) ) :
-					?> title="<?php echo esc_attr( $node->meta['title'] ); ?>"<?php
+	
+				echo $node->title;
+
+				if ( $is_sticky ) :
+					?><span class="sticky-indicator"></span><?php
 				endif;
-				?>><?php
-			else:
-				?><div class="ab-item ab-empty-item" <?php echo $aria_attributes;
-				if ( ! empty( $node->meta['title'] ) ) :
-					?> title="<?php echo esc_attr( $node->meta['title'] ); ?>"<?php
+
+				if ( $has_link ) :
+					?></a><?php
+				else:
+					?></a><?php
 				endif;
-				?>><?php
 			endif;
 
-			echo $node->title;
-
-			if ( $has_link ) :
-				?></a><?php
-			else:
-				?></div><?php
-			endif;
-
 			if ( $is_parent ) :
 				?><div class="ab-sub-wrapper"><?php
 					foreach ( $node->children as $group ) {
@@ -455,6 +467,8 @@
 			if ( ! empty( $node->meta['html'] ) )
 				echo $node->meta['html'];
 
+			if ( ! empty( $node->meta['html_callback'] ) )
+				call_user_func( $node->meta['html_callback'] );
 			?>
 		</li><?php
 	}
@@ -483,6 +497,11 @@
 		}
 		add_action( 'admin_bar_menu', 'wp_admin_bar_edit_menu', 80 );
 
+		if ( is_admin() ) {
+			add_action( 'admin_bar_menu', 'wp_admin_bar_screen_options', 90 );
+			add_action( 'admin_bar_menu', 'wp_admin_bar_contextual_help', 90 );
+		}
+
 		add_action( 'admin_bar_menu', 'wp_admin_bar_add_secondary_groups', 200 );
 
 		do_action( 'add_admin_bar_menus' );
Index: wp-admin/includes/screen.php
===================================================================
--- wp-admin/includes/screen.php	(revision 21813)
+++ wp-admin/includes/screen.php	(working copy)
@@ -784,8 +784,6 @@
 
 		// Time to render!
 		?>
-		<div id="screen-meta" class="metabox-prefs">
-
 			<div id="contextual-help-wrap" class="<?php echo esc_attr( $help_class ); ?>" tabindex="-1" aria-label="<?php esc_attr_e('Contextual Help Tab'); ?>">
 				<div id="contextual-help-back"></div>
 				<div id="contextual-help-columns">
@@ -863,22 +861,6 @@
 		?>
 		</div>
 		<?php
-		if ( ! $this->get_help_tabs() && ! $this->show_screen_options() )
-			return;
-		?>
-		<div id="screen-meta-links">
-		<?php if ( $this->get_help_tabs() ) : ?>
-			<div id="contextual-help-link-wrap" class="hide-if-no-js screen-meta-toggle">
-			<a href="#contextual-help-wrap" id="contextual-help-link" class="show-settings" aria-controls="contextual-help-wrap" aria-expanded="false"><?php _e( 'Help' ); ?></a>
-			</div>
-		<?php endif;
-		if ( $this->show_screen_options() ) : ?>
-			<div id="screen-options-link-wrap" class="hide-if-no-js screen-meta-toggle">
-			<a href="#screen-options-wrap" id="show-settings-link" class="show-settings" aria-controls="screen-options-wrap" aria-expanded="false"><?php _e( 'Screen Options' ); ?></a>
-			</div>
-		<?php endif; ?>
-		</div>
-		<?php
 	}
 
 	public function show_screen_options() {
Index: wp-admin/admin-header.php
===================================================================
--- wp-admin/admin-header.php	(revision 21813)
+++ wp-admin/admin-header.php	(working copy)
@@ -115,6 +115,7 @@
 <div id="wpcontent">
 
 <?php
+$current_screen->set_parentage( $parent_file );
 do_action('in_admin_header');
 ?>
 
@@ -122,8 +123,6 @@
 <?php
 unset($title_class, $blog_name, $total_update_count, $update_title);
 
-$current_screen->set_parentage( $parent_file );
-
 ?>
 
 <div id="wpbody-content" aria-label="<?php esc_attr_e('Main content'); ?>">
