Index: wp-includes/class-wp-customize-manager.php
===================================================================
--- wp-includes/class-wp-customize-manager.php	(revision 23387)
+++ wp-includes/class-wp-customize-manager.php	(working copy)
@@ -824,6 +824,23 @@
 
 		$this->add_control( new WP_Customize_Background_Image_Control( $this ) );
 
+		$this->add_setting( 'background_size', array(
+			'default'        => 'auto auto',
+			'theme_supports' => 'custom-background'
+		) );
+
+		$this->add_control( 'background_size', array(
+			'label'      => __( 'Background Size' ),
+			'section'    => 'background_image',
+			'type'       => 'radio',
+			'choices'    => array(
+				'auto auto' => __( 'Original' ),
+				'cover'     => __( 'Fill' ),
+				'contain'   => __( 'Fit' ),
+				'100% 100%' => __( 'Stretch' )
+			)
+		) );
+
 		$this->add_setting( 'background_repeat', array(
 			'default'        => 'repeat',
 			'theme_supports' => 'custom-background',
@@ -875,7 +892,7 @@
 		// If the theme is using the default background callback, we can update
 		// the background CSS using postMessage.
 		if ( get_theme_support( 'custom-background', 'wp-head-callback' ) === '_custom_background_cb' ) {
-			foreach ( array( 'color', 'image', 'position_x', 'repeat', 'attachment' ) as $prop ) {
+			foreach ( array( 'color', 'image', 'size', 'repeat', 'position_x', 'attachment' ) as $prop ) {
 				$this->get_setting( 'background_' . $prop )->transport = 'postMessage';
 			}
 		}
Index: wp-includes/js/customize-preview.js
===================================================================
--- wp-includes/js/customize-preview.js	(revision 23387)
+++ wp-includes/js/customize-preview.js	(working copy)
@@ -98,11 +98,11 @@
 		preview.send( 'ready' );
 
 		/* Custom Backgrounds */
-		bg = $.map(['color', 'image', 'position_x', 'repeat', 'attachment'], function( prop ) {
+		bg = $.map(['color', 'image', 'size', 'position_x', 'repeat', 'attachment'], function( prop ) {
 			return 'background_' + prop;
 		});
 
-		api.when.apply( api, bg ).done( function( color, image, position_x, repeat, attachment ) {
+		api.when.apply( api, bg ).done( function( color, image, size, position_x, repeat, attachment ) {
 			var body = $(document.body),
 				head = $('head'),
 				style = $('#custom-background-css'),
@@ -127,6 +127,7 @@
 
 				if ( image() ) {
 					css += 'background-image: url("' + image() + '");';
+					css += 'background-size: ' + size() + ';';
 					css += 'background-position: top ' + position_x() + ';';
 					css += 'background-repeat: ' + repeat() + ';';
 					css += 'background-attachment: ' + attachment() + ';';
Index: wp-includes/theme.php
===================================================================
--- wp-includes/theme.php	(revision 23387)
+++ wp-includes/theme.php	(working copy)
@@ -1160,6 +1160,11 @@
 	if ( $background ) {
 		$image = " background-image: url('$background');";
 
+		$size = get_theme_mod( 'background_size', 'auto auto' );
+		if ( ! in_array( $size, array( 'auto auto', 'cover', 'contain', '100% 100%' ) ) )
+			$size = 'auto auto';
+		$size = " background-size: $size;";
+
 		$repeat = get_theme_mod( 'background_repeat', 'repeat' );
 		if ( ! in_array( $repeat, array( 'no-repeat', 'repeat-x', 'repeat-y', 'repeat' ) ) )
 			$repeat = 'repeat';
@@ -1175,7 +1180,7 @@
 			$attachment = 'scroll';
 		$attachment = " background-attachment: $attachment;";
 
-		$style .= $image . $repeat . $position . $attachment;
+		$style .= $image . $size . $repeat . $position . $attachment;
 	}
 ?>
 <style type="text/css" id="custom-background-css">
@@ -1721,4 +1726,4 @@
 		}());
 	</script>
 	<?php
-}
\ No newline at end of file
+}
Index: wp-admin/js/custom-background.js
===================================================================
--- wp-admin/js/custom-background.js	(revision 23387)
+++ wp-admin/js/custom-background.js	(working copy)
@@ -12,14 +12,18 @@
 			}
 		});
 
-		$('input[name="background-position-x"]').change(function() {
-			bgImage.css('background-position', $(this).val() + ' top');
-		});
+		$('input[name="background-size"]').change( function() {
+			bgImage.css( 'background-size', $( this ).val() );
+		} );
 
 		$('input[name="background-repeat"]').change(function() {
 			bgImage.css('background-repeat', $(this).val());
 		});
 
+		$('input[name="background-position-x"]').change(function() {
+			bgImage.css('background-position', $(this).val() + ' top');
+		});
+
 		$('#choose-from-library-link').click( function( event ) {
 			var $el = $(this);
 
@@ -71,4 +75,4 @@
 			frame.open();
 		});
 	});
-})(jQuery);
\ No newline at end of file
+})(jQuery);
Index: wp-admin/js/customize-controls.js
===================================================================
--- wp-admin/js/customize-controls.js	(revision 23387)
+++ wp-admin/js/customize-controls.js	(working copy)
@@ -929,7 +929,7 @@
 		// Control visibility for default controls
 		$.each({
 			'background_image': {
-				controls: [ 'background_repeat', 'background_position_x', 'background_attachment' ],
+				controls: [ 'background_size', 'background_repeat', 'background_position_x', 'background_attachment' ],
 				callback: function( to ) { return !! to }
 			},
 			'show_on_front': {
Index: wp-admin/css/wp-admin.css
===================================================================
--- wp-admin/css/wp-admin.css	(revision 23387)
+++ wp-admin/css/wp-admin.css	(working copy)
@@ -4871,9 +4871,8 @@
 	border: 1px solid #dfdfdf;
 }
 
-div#custom-background-image img {
-	max-width: 400px;
-	max-height: 300px;
+div#custom-background-image.active {
+	height: 300px;
 }
 
 
Index: wp-admin/custom-background.php
===================================================================
--- wp-admin/custom-background.php	(revision 23387)
+++ wp-admin/custom-background.php	(working copy)
@@ -132,6 +132,17 @@
 			return;
 		}
 
+		if ( isset( $_POST['background-size'] ) ) {
+			check_admin_referer( 'custom-background' );
+
+			if ( in_array( $_POST['background-size'], array( 'auto auto', 'cover', 'contain', '100% 100%' ) ) )
+				$size = $_POST['background-size'];
+			else
+				$size = 'auto auto';
+
+			set_theme_mod( 'background_size', $size );
+		}
+
 		if ( isset($_POST['background-repeat']) ) {
 			check_admin_referer('custom-background');
 			if ( in_array($_POST['background-repeat'], array('repeat', 'no-repeat', 'repeat-x', 'repeat-y')) )
@@ -203,17 +214,15 @@
 	$background_styles .= 'background-color: #' . $bgcolor . ';';
 
 if ( get_background_image() ) {
+
 	// background-image URL must be single quote, see below
-	$background_styles .= ' background-image: url(\'' . set_url_scheme( get_theme_mod( 'background_image_thumb', get_background_image() ) ) . '\');'
+	$background_styles .= ' background-image: url(\'' . set_url_scheme( get_theme_mod( 'background_image', get_background_image() ) ) . '\');'
+		. ' background-size: ' . get_theme_mod( 'background_size', 'auto auto' ) . ';'
 		. ' background-repeat: ' . get_theme_mod('background_repeat', 'repeat') . ';'
 		. ' background-position: top ' . get_theme_mod('background_position_x', 'left');
 }
 ?>
-<div id="custom-background-image" style="<?php echo $background_styles; ?>"><?php // must be double quote, see above ?>
-<?php if ( get_background_image() ) { ?>
-<img class="custom-background-image" src="<?php echo set_url_scheme( get_theme_mod( 'background_image_thumb', get_background_image() ) ); ?>" style="visibility:hidden;" alt="" /><br />
-<img class="custom-background-image" src="<?php echo set_url_scheme( get_theme_mod( 'background_image_thumb', get_background_image() ) ); ?>" style="visibility:hidden;" alt="" />
-<?php } ?>
+<div id="custom-background-image" <?php echo get_background_image() ? 'class="active"' : ''; ?> style="<?php echo $background_styles; ?>"><?php // must be double quote, see above ?>
 </div>
 <?php } ?>
 </td>
@@ -273,6 +282,26 @@
 <tbody>
 <?php if ( get_background_image() ) : ?>
 <tr valign="top">
+<th scope="row"><?php _e( 'Size' ); ?></th>
+<td><fieldset><legend class="screen-reader-text"><span><?php _e( 'Background Size' ); ?></span></legend>
+	<label><input type="radio" name="background-size" value="auto auto"<?php checked( 'auto auto', get_theme_mod( 'background_size', 'auto auto' ) ); ?> /> <?php _e( 'Original' ); ?></label>
+	<label><input type="radio" name="background-size" value="cover"<?php checked( 'cover', get_theme_mod( 'background_size', 'auto auto' ) ); ?> /> <?php _e( 'Fill' ); ?></label>
+	<label><input type="radio" name="background-size" value="contain"<?php checked( 'contain', get_theme_mod( 'background_size', 'auto auto' ) ); ?> /> <?php _e( 'Fit' ); ?></label>
+	<label><input type="radio" name="background-size" value="100% 100%"<?php checked( '100% 100%', get_theme_mod( 'background_size', 'auto auto' ) ); ?> /> <?php _e( 'Stretch' ); ?></label>
+</fieldset></td>
+</tr>
+
+<tr valign="top">
+<th scope="row"><?php _e( 'Repeat' ); ?></th>
+<td><fieldset><legend class="screen-reader-text"><span><?php _e( 'Background Repeat' ); ?></span></legend>
+<label><input type="radio" name="background-repeat" value="no-repeat"<?php checked('no-repeat', get_theme_mod('background_repeat', 'repeat')); ?> /> <?php _e('No Repeat'); ?></label>
+	<label><input type="radio" name="background-repeat" value="repeat"<?php checked('repeat', get_theme_mod('background_repeat', 'repeat')); ?> /> <?php _e('Tile'); ?></label>
+	<label><input type="radio" name="background-repeat" value="repeat-x"<?php checked('repeat-x', get_theme_mod('background_repeat', 'repeat')); ?> /> <?php _e('Tile Horizontally'); ?></label>
+	<label><input type="radio" name="background-repeat" value="repeat-y"<?php checked('repeat-y', get_theme_mod('background_repeat', 'repeat')); ?> /> <?php _e('Tile Vertically'); ?></label>
+</fieldset></td>
+</tr>
+
+<tr valign="top">
 <th scope="row"><?php _e( 'Position' ); ?></th>
 <td><fieldset><legend class="screen-reader-text"><span><?php _e( 'Background Position' ); ?></span></legend>
 <label>
@@ -291,16 +320,6 @@
 </tr>
 
 <tr valign="top">
-<th scope="row"><?php _e( 'Repeat' ); ?></th>
-<td><fieldset><legend class="screen-reader-text"><span><?php _e( 'Background Repeat' ); ?></span></legend>
-<label><input type="radio" name="background-repeat" value="no-repeat"<?php checked('no-repeat', get_theme_mod('background_repeat', 'repeat')); ?> /> <?php _e('No Repeat'); ?></label>
-	<label><input type="radio" name="background-repeat" value="repeat"<?php checked('repeat', get_theme_mod('background_repeat', 'repeat')); ?> /> <?php _e('Tile'); ?></label>
-	<label><input type="radio" name="background-repeat" value="repeat-x"<?php checked('repeat-x', get_theme_mod('background_repeat', 'repeat')); ?> /> <?php _e('Tile Horizontally'); ?></label>
-	<label><input type="radio" name="background-repeat" value="repeat-y"<?php checked('repeat-y', get_theme_mod('background_repeat', 'repeat')); ?> /> <?php _e('Tile Vertically'); ?></label>
-</fieldset></td>
-</tr>
-
-<tr valign="top">
 <th scope="row"><?php _e( 'Attachment' ); ?></th>
 <td><fieldset><legend class="screen-reader-text"><span><?php _e( 'Background Attachment' ); ?></span></legend>
 <label>
