Index: wp-admin/custom-header.php
===================================================================
--- wp-admin/custom-header.php	(revision 17246)
+++ wp-admin/custom-header.php	(working copy)
@@ -168,27 +168,23 @@
 			return;
 
 		$this->updated = true;
-
+                check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
 		if ( isset( $_POST['resetheader'] ) ) {
-			check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
 			remove_theme_mod( 'header_image' );
 			return;
 		}
 
 		if ( isset( $_POST['resettext'] ) ) {
-			check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
 			remove_theme_mod('header_textcolor');
 			return;
 		}
 
 		if ( isset( $_POST['removeheader'] ) ) {
-			check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
 			set_theme_mod( 'header_image', '' );
 			return;
 		}
 
 		if ( isset( $_POST['text-color'] ) ) {
-			check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
 			$_POST['text-color'] = str_replace( '#', '', $_POST['text-color'] );
 			if ( 'blank' == $_POST['text-color'] ) {
 				set_theme_mod( 'header_textcolor', 'blank' );
@@ -200,11 +196,14 @@
 		}
 
 		if ( isset($_POST['default-header']) ) {
-			check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
 			$this->process_default_headers();
 			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']) ) {
+			set_theme_mod('header_alt', esc_html($_POST['alt-text']));
+		}
 	}
 
 	/**
@@ -498,6 +497,16 @@
 
 	if ( get_header_image() ) : ?>
 <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 header_alt() ?>" />
+</fieldset></td>
+</tr>
+<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-content/themes/twentyten/header.php
===================================================================
--- wp-content/themes/twentyten/header.php	(revision 17246)
+++ wp-content/themes/twentyten/header.php	(working copy)
@@ -74,7 +74,7 @@
 						// Houston, we have a new header image!
 						echo get_the_post_thumbnail( $post->ID );
 					elseif ( get_header_image() ) : ?>
-						<img src="<?php header_image(); ?>" width="<?php echo HEADER_IMAGE_WIDTH; ?>" height="<?php echo HEADER_IMAGE_HEIGHT; ?>" alt="" />
+                                <img src="<?php header_image(); ?>" width="<?php echo HEADER_IMAGE_WIDTH; ?>" height="<?php echo HEADER_IMAGE_HEIGHT; ?>" alt="<?php header_alt(); ?>" />
 					<?php endif; ?>
 			</div><!-- #branding -->
 
Index: wp-includes/theme.php
===================================================================
--- wp-includes/theme.php	(revision 17246)
+++ wp-includes/theme.php	(working copy)
@@ -1420,6 +1420,28 @@
 }
 
 /**
+ * Retrieve background image alt attribute for custom background.
+ *
+ * @uses HEADER_ALT
+ *
+ * @return string
+ */
+function get_header_alt() {
+	$default = defined('HEADER_ALT') ? HEADER_ALT : '';
+
+	return get_theme_mod('header_alt', $default);
+}
+
+/**
+ * Display background image alt attribute.
+ *
+ *
+ */
+function header_alt() {
+	echo get_header_alt();
+}
+
+/**
  * Retrieve header image for custom header.
  *
  * @since 2.1.0
