Index: src/wp-admin/includes/class-wp-custom-logo.php
===================================================================
--- src/wp-admin/includes/class-wp-custom-logo.php	(revision 36903)
+++ src/wp-admin/includes/class-wp-custom-logo.php	(working copy)
@@ -21,35 +21,10 @@
 	 * @access public
 	 */
 	public function __construct() {
-		add_action( 'wp_head', array( $this, 'head_text_styles' ) );
 		add_action( 'delete_attachment', array( $this, 'delete_attachment_data' ) );
 	}
 
 	/**
-	 * Hides header text on the front end if necessary.
-	 *
-	 * @since 4.5.0
-	 * @access public
-	 */
-	public function head_text_styles() {
-		// Bail if our theme supports custom headers.
-		if ( current_theme_supports( 'custom-header' ) || get_theme_mod( 'custom_logo_header_text', true ) ) {
-			return;
-		}
-
-		// Is Display Header Text unchecked? If so, hide the header text.
-		?>
-		<!-- Custom Logo: hide header text -->
-		<style type="text/css">
-			<?php echo sanitize_html_class( $this->header_text_classes() ); ?>  {
-				position: absolute;
-				clip: rect(1px, 1px, 1px, 1px);
-			}
-		</style>
-		<?php
-	}
-
-	/**
 	 * Reset the custom logo if the current logo is deleted in the media manager.
 	 *
 	 * @since 4.5.0
@@ -64,41 +39,6 @@
 			remove_theme_mod( 'custom_logo' );
 		}
 	}
-
-	/**
-	 * Retrieves the header text classes.
-	 *
-	 * If not defined in add_theme_support(), defaults from Underscores will be used.
-	 *
-	 * @since 4.5.0
-	 * @access protected
-	 *
-	 * @return string String of classes to hide.
-	 */
-	protected function header_text_classes() {
-		$args = get_theme_support( 'custom-logo' );
-
-		if ( isset( $args[0]['header-text'] ) ) {
-			// Use any classes defined in add_theme_support().
-			$classes = $args[0]['header-text'];
-		} else {
-			// Otherwise, use these defaults, which will work with any Underscores-based theme.
-			$classes = array(
-				'site-title',
-				'site-description',
-			);
-		}
-
-		// If there's an array of classes, reduce them to a string for output.
-		if ( is_array( $classes ) ) {
-			$classes = array_map( 'sanitize_html_class', $classes );
-			$classes = (string) '.' . implode( ', .', $classes );
-		} else {
-			$classes = (string) '.' . $classes;
-		}
-
-		return $classes;
-	}
 }
 
 /**
Index: src/wp-includes/class-wp-customize-manager.php
===================================================================
--- src/wp-includes/class-wp-customize-manager.php	(revision 36903)
+++ src/wp-includes/class-wp-customize-manager.php	(working copy)
@@ -1922,13 +1922,13 @@
 			'section'    => 'title_tagline',
 		) );
 
-		// Add a setting to hide header text if the theme isn't supporting the feature itself.
-		// @todo
-		if ( ! current_theme_supports( 'custom-header' ) ) {
+		// Add a setting to hide header text if the theme doesn't support custom headers.
+		if ( ! current_theme_supports( 'custom-header', 'header-text' ) ) {
 			$this->add_setting( 'header_text', array(
+				'theme_supports'    => array( 'custom-logo', 'header-text' ),
 				'default'           => 1,
 				'sanitize_callback' => 'absint',
-				'transport'         => 'postMessage',
+			//	'transport'         => 'postMessage',
 			) );
 
 			$this->add_control( 'header_text', array(
Index: src/wp-includes/default-filters.php
===================================================================
--- src/wp-includes/default-filters.php	(revision 36903)
+++ src/wp-includes/default-filters.php	(working copy)
@@ -371,6 +371,7 @@
  */
 // Theme
 add_action( 'wp_loaded', '_custom_header_background_just_in_time' );
+add_action( 'wp_loaded', '_custom_logo_just_in_time' );
 add_action( 'plugins_loaded', '_wp_customize_include' );
 add_action( 'admin_enqueue_scripts', '_wp_customize_loader_settings' );
 add_action( 'delete_attachment', '_delete_attachment_theme_mod' );
Index: src/wp-includes/theme.php
===================================================================
--- src/wp-includes/theme.php	(revision 36903)
+++ src/wp-includes/theme.php	(working copy)
@@ -1732,6 +1732,40 @@
 }
 
 /**
+ * Registers the internal custom header and background routines.
+ *
+ * @since 4.5.0
+ * @access private
+ */
+function _custom_logo_just_in_time() {
+	if ( ! current_theme_supports( 'custom-header' ) && get_theme_support( 'custom-logo', 'header-text' ) && ! get_theme_mod( 'header_text', true ) ) {
+		add_action( 'wp_head', '_custom_logo_cb' );
+	}
+}
+
+/**
+ * Hides header text for custom logo.
+ *
+ * @since 4.5.0
+ * @access private
+ */
+function _custom_logo_cb() {
+	$classes = (array) get_theme_support( 'custom-logo', 'header-text' );
+	$classes = array_map( 'sanitize_html_class', $classes );
+	$classes = '.' . implode( ', .', $classes );
+
+	?>
+	<!-- Custom Logo: hide header text -->
+	<style type="text/css">
+		<?php echo $classes; ?> {
+			position: absolute;
+			clip: rect(1px, 1px, 1px, 1px);
+		}
+	</style>
+<?php
+}
+
+/**
  * Gets the theme support arguments passed when registering that support
  *
  * @since 3.1.0
@@ -1751,6 +1785,7 @@
 
 	$args = array_slice( func_get_args(), 1 );
 	switch ( $feature ) {
+		case 'custom-logo' :
 		case 'custom-header' :
 		case 'custom-background' :
 			if ( isset( $_wp_theme_features[ $feature ][0][ $args[0] ] ) )
@@ -1877,8 +1912,9 @@
 			$type = $args[0];
 			return in_array( $type, $_wp_theme_features[$feature][0] );
 
+		case 'custom-logo':
 		case 'custom-header':
-		case 'custom-background' :
+		case 'custom-background':
 			// specific custom header and background capabilities can be registered by passing
 			// an array to add_theme_support()
 			$header_support = $args[0];
