Index: wp-admin/custom-header.php
===================================================================
--- wp-admin/custom-header.php	(revision 17243)
+++ wp-admin/custom-header.php	(working copy)
@@ -205,6 +205,11 @@
 			if ( isset($this->default_headers[$_POST['default-header']]) )
 				set_theme_mod('header_image', esc_url($this->default_headers[$_POST['default-header']]['url']));
 		}
+
+		if ( isset( $_POST['alt-text'] ) ) {
+			check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
+			set_theme_mod( 'background_alt', esc_html( $_POST['alt-text'] ) );
+		}
 	}
 
 	/**
@@ -494,10 +499,19 @@
 	?>
 </td>
 </tr>
-	<?php endif;
-
-	if ( get_header_image() ) : ?>
+	<?php endif; ?>
 <tr valign="top">
+<th scope="row"><?php _e( 'Alternative Text' ); ?></th>
+<td>
+<fieldset>
+	<legend class="screen-reader-text">
+		<span><?php _e( 'Alternative Text' ); ?></span>
+	</legend>
+	<input type="text" name="alt-text" id="alt-text" value="<?php echo stripslashes( get_background_alt() ) ?>" />
+</fieldset></td>
+</tr>
+	<?php if ( get_header_image() ) : ?>
+<tr valign="top">
 <th scope="row"><?php _e( 'Remove Image' ); ?></th>
 <td>
 	<p><?php _e( 'This will remove the header image. You will not be able to restore any customizations.' ) ?></p>
Index: wp-includes/theme.php
===================================================================
--- wp-includes/theme.php	(revision 17243)
+++ wp-includes/theme.php	(working copy)
@@ -1544,6 +1544,28 @@
 }
 
 /**
+ * Retrieve background image alt attribute for custom background.
+ *
+ * @uses BACKGROUND_ALT
+ *
+ * @return string
+ */
+function get_background_alt() {
+	$default = defined('BACKGROUND_ALT') ? BACKGROUND_ALT : '';
+
+	return get_theme_mod('background_alt', $default);
+}
+
+/**
+ * Display background image alt attribute.
+ *
+ *
+ */
+function background_alt() {
+	echo get_background_alt();
+}
+
+/**
  * Retrieve background image for custom background.
  *
  * @since 3.0.0
