diff --git a/includes/theme.inc b/includes/theme.inc
index f592891..12a7955 100644
--- a/includes/theme.inc
+++ b/includes/theme.inc
@@ -1148,6 +1148,8 @@ function theme_get_setting($setting_name, $theme = NULL) {
     $cache[$theme] = array(
       'default_logo'                     =>  1,
       'logo_path'                        =>  '',
+      'logo_alt_source'                  =>  'site_name',
+      'logo_alt_custom_text'             =>  '',
       'default_favicon'                  =>  1,
       'favicon_path'                     =>  '',
       // Use the IANA-registered MIME type for ICO files as default.
@@ -1177,6 +1179,13 @@ function theme_get_setting($setting_name, $theme = NULL) {
         if (!empty($themes[$theme_key]->info['settings'])) {
           $cache[$theme] = array_merge($cache[$theme], $themes[$theme_key]->info['settings']);
         }
+        // if the theme provides logo_alt_text, use this by default instead of the site name
+        if (!empty($themes[$theme_key]->info['settings']['logo_alt_text'])) {
+          $cache[$theme]['logo_alt_source'] = 'theme_default';
+        }
+        else {
+          $cache[$theme]['logo_alt_text'] = variable_get('site_name', 'Drupal');
+        }
       }
     }
 
@@ -1207,6 +1216,19 @@ function theme_get_setting($setting_name, $theme = NULL) {
         }
       }
 
+      // Generate the alternative text for the log image.
+      if ($cache[$theme]['toggle_logo']) {
+        if ($cache[$theme]['logo_alt_source'] == 'site_name') {
+          $cache[$theme]['logo_alt_text'] = check_plain(variable_get('site_name', 'Drupal'));
+        }
+        elseif ($cache[$theme]['logo_alt_source'] == 'custom') {
+          $cache[$theme]['logo_alt_text'] = check_plain($cache[$theme]['logo_alt_custom_text']);
+        }
+      }
+      else {
+          $cache[$theme]['logo_alt_text'] = FALSE;
+      }
+
       // Generate the path to the favicon.
       if ($cache[$theme]['toggle_favicon']) {
         if ($cache[$theme]['default_favicon']) {
@@ -2269,6 +2291,7 @@ function template_preprocess_page(&$variables) {
   $variables['language']          = $GLOBALS['language'];
   $variables['language']->dir     = $GLOBALS['language']->direction ? 'rtl' : 'ltr';
   $variables['logo']              = theme_get_setting('logo');
+  $variables['logo_alt_text']     = check_plain(theme_get_setting('logo_alt_text'));
   $variables['main_menu']         = theme_get_setting('toggle_main_menu') ? menu_main_menu() : array();
   $variables['secondary_menu']    = theme_get_setting('toggle_secondary_menu') ? menu_secondary_menu() : array();
   $variables['action_links']      = menu_local_actions();
@@ -2477,6 +2500,7 @@ function template_preprocess_maintenance_page(&$variables) {
   $variables['language']          = $language;
   $variables['language']->dir     = $language->direction ? 'rtl' : 'ltr';
   $variables['logo']              = theme_get_setting('logo');
+  $variables['logo_alt_text']     = check_plain(theme_get_setting('logo_alt_text'));
   $variables['messages']          = $variables['show_messages'] ? theme('status_messages') : '';
   $variables['main_menu']         = array();
   $variables['secondary_menu']    = array();
diff --git a/modules/system/page.tpl.php b/modules/system/page.tpl.php
index ca9273c..e38e154 100644
--- a/modules/system/page.tpl.php
+++ b/modules/system/page.tpl.php
@@ -20,6 +20,7 @@
  *   when linking to the front page. This includes the language domain or
  *   prefix.
  * - $logo: The path to the logo image, as defined in theme configuration.
+ * - $logo_alt_text: The alternative text for the logo image, as defined in theme configuration.
  * - $site_name: The name of the site, empty when display has been disabled
  *   in theme settings.
  * - $site_slogan: The slogan of the site, empty when display has been disabled
@@ -73,7 +74,7 @@
 
       <?php if ($logo): ?>
         <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home" id="logo">
-          <img src="<?php print $logo; ?>" alt="<?php print t('Home'); ?>" />
+          <img src="<?php print $logo; ?>" alt="<?php print $logo_alt_text; ?>" />
         </a>
       <?php endif; ?>
 
diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc
index 6824f19..f5ec7cf 100644
--- a/modules/system/system.admin.inc
+++ b/modules/system/system.admin.inc
@@ -488,6 +488,34 @@ function system_theme_settings($form, &$form_state, $key = '') {
       '#maxlength' => 40,
       '#description' => t("If you don't have direct file access to the server, use this field to upload your logo.")
     );
+    $form['logo']['logo_alt_source'] = array(
+      '#type' => 'radios',
+      '#title' => t('Logo alternative text source'),
+      '#description' => t('Choose what to use as the alternative text for the site logo'), // @todo improve description
+      '#options' => array(
+          'site_name' => t('Site name'),
+          'theme_default' => t('Default alternative text provided by the theme'),
+          'custom'   => t('Custom alternative text'),
+      ),
+      '#default_value' => theme_get_setting('logo_alt_source'),
+    );
+    $form['logo']['logo_alt_custom_text'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Alternative text for custom logo'),
+      '#maxlength' => 255,
+      '#default_value' => theme_get_setting('logo_alt_custom_text', $key),
+      '#description' => t('Text to replace the logo when it is not available.'),
+      '#states' => array(
+        // only show the custom alt text field when custom alt text source is selected.
+        'visible' => array(
+          'input[name="logo_alt_source"]' => array('value' => 'custom'),
+        ),
+        // custom alt text is required when custom alt text source is selected.
+        'required' => array(
+          'input[name="logo_alt_source"]' => array('value' => 'custom'),
+        ),
+      ),
+    );
   }
 
   if ((!$key) || in_array('favicon', $features)) {
@@ -640,6 +668,15 @@ function system_theme_settings_validate($form, &$form_state) {
       form_set_error('favicon_path', t('The custom favicon path is invalid.'));
     }
   }
+
+  // Custom alt text field is required if custom alt text source selected
+  if ($form_state['values']['logo_alt_source'] == 'custom') {
+    if ($form_state['values']['toggle_logo'] == 1) {
+      if (empty($form_state['values']['logo_alt_custom_text'])) {
+        form_set_error('logo_alt_custom_text',t('Enter alternative text for the logo.'));
+      }
+    }
+  }
 }
 
 /**
diff --git a/themes/bartik/templates/page.tpl.php b/themes/bartik/templates/page.tpl.php
index 7b0f990..e8c537f 100644
--- a/themes/bartik/templates/page.tpl.php
+++ b/themes/bartik/templates/page.tpl.php
@@ -24,6 +24,7 @@
  *   when linking to the front page. This includes the language domain or
  *   prefix.
  * - $logo: The path to the logo image, as defined in theme configuration.
+ * - $logo_alt_text: The alternative text for the logo image, as defined in theme configuration.
  * - $site_name: The name of the site, empty when display has been disabled
  *   in theme settings.
  * - $site_slogan: The slogan of the site, empty when display has been disabled
@@ -89,8 +90,8 @@
   <div id="header" class="<?php print $secondary_menu ? 'with-secondary-menu': 'without-secondary-menu'; ?>"><div class="section clearfix">
 
     <?php if ($logo): ?>
-      <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home" id="logo">
-        <img src="<?php print $logo; ?>" alt="<?php print t('Home'); ?>" />
+      <a href="<?php print $front_page; ?>" title="<?php print $logo_alt_text; ?>" rel="home" id="logo">
+        <img src="<?php print $logo; ?>" alt="<?php print $logo_alt_text; ?>" />
       </a>
     <?php endif; ?>
 
diff --git a/themes/garland/page.tpl.php b/themes/garland/page.tpl.php
index 326255c..2fdd10d 100644
--- a/themes/garland/page.tpl.php
+++ b/themes/garland/page.tpl.php
@@ -11,7 +11,7 @@
           <?php if ($title): ?>
             <div id="branding"><strong><a href="<?php print $front_page ?>">
             <?php if ($logo): ?>
-              <img src="<?php print $logo ?>" alt="<?php print $site_name_and_slogan ?>" title="<?php print $site_name_and_slogan ?>" id="logo" />
+              <img src="<?php print $logo ?>" alt="<?php print $logo_alt_text; ?>" title="<?php print $logo_alt_text; ?>" id="logo" />
             <?php endif; ?>
             <?php print $site_html ?>
             </a></strong></div>
