Index: src/wp-includes/admin-bar.php
===================================================================
--- src/wp-includes/admin-bar.php	(revision 28867)
+++ src/wp-includes/admin-bar.php	(working copy)
@@ -655,22 +655,49 @@
 		'title'  => __('Customize'),
 		'href'   => add_query_arg( 'url', urlencode( $current_url ), wp_customize_url() ),
 		'meta'   => array(
-			'class' => 'hide-if-no-customize',
+			'class' => 'hide-if-no-customize load-customize',
 		),
 	) );
 	add_action( 'wp_before_admin_bar_render', 'wp_customize_support_script' );
Index: src/wp-includes/class-wp-admin-bar.php
===================================================================
--- src/wp-includes/class-wp-admin-bar.php	(revision 28867)
+++ src/wp-includes/class-wp-admin-bar.php	(working copy)
@@ -60,6 +60,12 @@
 
 		wp_enqueue_script( 'admin-bar' );
 		wp_enqueue_style( 'admin-bar' );
+		if ( current_user_can( 'edit_theme_options' ) ) {
+			wp_enqueue_script( 'customize-loader' );
+			wp_enqueue_style( 'customize-loader', includes_url( '/css/customize-loader.css' ) );
+			require_once( 'theme.php' );
+			add_action( 'wp_enqueue_scripts', '_wp_customize_loader_settings' ); // enqueued on admin_enqueue_scripts in theme.php
+		}
 
 		/**
 		 * Fires after WP_Admin_Bar is initialized.
Index: src/wp-includes/css/customize-loader.css
===================================================================
--- src/wp-includes/css/customize-loader.css	(revision 0)
+++ src/wp-includes/css/customize-loader.css	(working copy)
@@ -0,0 +1,137 @@
+/*------------------------------------------------------------------------------
+  24.0 - Customize Loader (from theme.css)
+------------------------------------------------------------------------------*/
+
+.no-customize-support .hide-if-no-customize,
+.customize-support .hide-if-customize,
+.no-customize-support.wp-core-ui .hide-if-no-customize,
+.no-customize-support .wp-core-ui .hide-if-no-customize,
+.customize-support.wp-core-ui .hide-if-customize,
+.customize-support .wp-core-ui .hide-if-customize {
+	display: none;
+}
+
+#customize-container {
+	display: none;
+	background: #fff;
+	z-index: 500000;
+	position: fixed;
+	overflow: visible;
+	top: 0;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	height: 100%;
+}
+
+.customize-active #customize-container {
+	display: block;
+}
+
+.customize-loading #customize-container iframe {
+	opacity: 0;
+}
+
+.customize-loading #customize-container {
+	background: #fff url(../images/spinner.gif) no-repeat fixed center center;
+	-webkit-background-size: 20px 20px;
+	background-size: 20px 20px;
+}
+
+#customize-container iframe,
+.theme-install-overlay iframe {
+	height: 100%;
+	width: 100%;
+	z-index: 20;
+	-webkit-transition: opacity 0.3s;
+	transition: opacity 0.3s;
+}
+
+#customize-container .collapse-sidebar {
+	bottom: 16px;
+}
+
+#customize-controls {
+	margin-top: 0;
+}
+
+.theme-install-overlay {
+	display: none;
+}
+
+.theme-install-overlay.single-theme {
+	display: block;
+}
+
+.install-theme-info {
+	display: none;
+	padding: 10px 20px 60px;
+}
+
+.single-theme .install-theme-info {
+	padding-top: 15px;
+}
+
+.theme-install-overlay .install-theme-info {
+	display: block;
+}
+
+.install-theme-info .theme-install {
+	float: right;
+	margin-top: 18px;
+}
+
+.install-theme-info .theme-name {
+	font-size: 16px;
+	line-height: 24px;
+	margin-bottom: 0;
+	margin-top: 0;
+}
+
+.install-theme-info .theme-screenshot {
+	margin-top: 15px;
+	width: 258px;
+	border: 1px solid #ccc;
+}
+
+.install-theme-info .theme-details {
+	overflow: hidden;
+}
+
+.theme-details .theme-version {
+	margin: 15px 0;
+	float: left;
+}
+
+.theme-details .star-rating {
+	margin: 7px 0;
+	float: right;
+}
+
+.theme-details .theme-description {
+	float: left;
+	color: #777;
+	line-height: 20px;
+	max-width: 100%;
+}
+
+.theme-install-overlay .wp-full-overlay-header {
+	margin-top: 9px;
+}
+
+.theme-install-overlay .wp-full-overlay-header .theme-install {
+	float: right;
+	/* For when .theme-install is a span rather than a.button-primary (already installed theme) */
+	line-height: 26px;
+}
+
+.theme-install-overlay .wp-full-overlay-sidebar {
+	background: #EEE;
+	border-right: 1px solid #DDD;
+}
+
+.theme-install-overlay .wp-full-overlay-main {
+	background: #fff url(../images/spinner.gif) no-repeat center center;
+	-webkit-background-size: 20px 20px;
+	background-size: 20px 20px;
+}
Index: src/wp-includes/js/customize-loader.js
===================================================================
--- src/wp-includes/js/customize-loader.js	(revision 28867)
+++ src/wp-includes/js/customize-loader.js	(working copy)
@@ -26,7 +26,7 @@
 			this.bind( 'open', this.overlay.show );
 			this.bind( 'close', this.overlay.hide );
 
-			$('#wpbody').on( 'click', '.load-customize', function( event ) {
+			$('#wpadminbar').on( 'click', '.load-customize a', function( event ) {
 				event.preventDefault();
 
 				// Store a reference to the link that opened the customizer.
@@ -34,7 +34,15 @@
 				// Load the theme.
 				Loader.open( Loader.link.attr('href') );
 			});
+			$('#wpwrap').on( 'click', '.load-customize', function( event ) {
+				event.preventDefault();
 
+				// Store a reference to the link that opened the customizer.
+				Loader.link = $(this);
+				// Load the theme.
+				Loader.open( Loader.link.attr('href') );
+			});
+
 			// Add navigation listeners.
 			if ( $.support.history )
 				this.window.on( 'popstate', Loader.popstate );
