Index: src/wp-includes/theme.php
===================================================================
--- src/wp-includes/theme.php	(revision 37076)
+++ src/wp-includes/theme.php	(working copy)
@@ -1559,6 +1559,22 @@
 				$args[0] = array_merge( $_wp_theme_features['html5'][0], $args[0] );
 			break;
 
+		case 'custom-logo':
+			$defaults = array(
+				'width'       => null,
+				'height'      => null,
+				'flex-width'  => false,
+				'flex-height' => false,
+				'header-text' => '',
+			);
+			$args[0] = wp_parse_args( array_intersect_key( $args[0], $defaults ), $defaults );
+
+			if ( is_null( $args[0]['width'] ) && is_null( $args[0]['height'] ) ) {
+				$args[0]['flex-width']  = true;
+				$args[0]['flex-height'] = true;
+			}
+			break;
+
 		case 'custom-header-uploads' :
 			return add_theme_support( 'custom-header', array( 'uploads' => true ) );
 
Index: src/wp-includes/class-wp-customize-manager.php
===================================================================
--- src/wp-includes/class-wp-customize-manager.php	(revision 37076)
+++ src/wp-includes/class-wp-customize-manager.php	(working copy)
@@ -1959,11 +1959,15 @@
 			'transport'      => 'postMessage',
 		) );
 
-		$this->add_control( new WP_Customize_Media_Control( $this, 'custom_logo', array(
-			'label'    => __( 'Logo' ),
-			'section'  => 'title_tagline',
-			'priority' => 8,
-			'mime_type' => 'image',
+		$custom_logo_args = get_theme_support( 'custom-logo' );
+		$this->add_control( new WP_Customize_Cropped_Image_Control( $this, 'custom_logo', array(
+			'label'         => __( 'Logo' ),
+			'section'       => 'title_tagline',
+			'priority'      => 8,
+			'height'        => $custom_logo_args[0]['height'],
+			'width'         => $custom_logo_args[0]['width'],
+			'flex_height'   => $custom_logo_args[0]['flex-height'],
+			'flex_width'    => $custom_logo_args[0]['flex-width'],
 			'button_labels' => array(
 				'select'       => __( 'Select logo' ),
 				'change'       => __( 'Change logo' ),
Index: src/wp-content/themes/twentyfifteen/functions.php
===================================================================
--- src/wp-content/themes/twentyfifteen/functions.php	(revision 37076)
+++ src/wp-content/themes/twentyfifteen/functions.php	(working copy)
@@ -108,8 +108,11 @@
 	 *
 	 * @since Twenty Fifteen 1.5
 	 */
-	add_image_size( 'twentyfifteen-logo', 248, 248 );
-	add_theme_support( 'custom-logo', array( 'size' => 'twentyfifteen-logo' ) );
+	add_theme_support( 'custom-logo', array(
+		'height'      => 248,
+		'width'       => 248,
+		'flex-height' => true,
+	) );
 
 	$color_scheme  = twentyfifteen_get_color_scheme();
 	$default_color = trim( $color_scheme[0], '#' );
