diff --git a/includes/theme.inc b/includes/theme.inc
index ff54d6e..fc95c65 100644
--- a/includes/theme.inc
+++ b/includes/theme.inc
@@ -2638,7 +2638,7 @@ function template_preprocess_page(&$variables) {
   // Move some variables to the top level for themer convenience and template cleanliness.
   $variables['show_messages'] = $variables['page']['#show_messages'];
 
-  foreach (system_region_list($GLOBALS['theme']) as $region_key => $region_name) {
+  foreach (system_region_list($GLOBALS['theme'], REGIONS_ALL, FALSE) as $region_key) {
     if (!isset($variables['page'][$region_key])) {
       $variables['page'][$region_key] = array();
     }
diff --git a/modules/block/block.module b/modules/block/block.module
index ca41da7..0953e6f 100644
--- a/modules/block/block.module
+++ b/modules/block/block.module
@@ -265,7 +265,7 @@ function block_page_build(&$page) {
   $item = menu_get_item();
   if ($item['path'] != 'admin/structure/block/demo/' . $theme) {
     // Load all region content assigned via blocks.
-    foreach (array_keys($all_regions) as $region) {
+    foreach (system_region_list($theme, REGIONS_ALL, FALSE) as $region) {
       // Assign blocks to region.
       if ($blocks = block_get_blocks_by_region($region)) {
         $page[$region] = $blocks;
@@ -285,8 +285,7 @@ function block_page_build(&$page) {
     // Append region description if we are rendering the regions demo page.
     $item = menu_get_item();
     if ($item['path'] == 'admin/structure/block/demo/' . $theme) {
-      $visible_regions = array_keys(system_region_list($theme, REGIONS_VISIBLE));
-      foreach ($visible_regions as $region) {
+      foreach (system_region_list($theme, REGIONS_VISIBLE, FALSE) as $region) {
         $description = '<div class="block-region">' . $all_regions[$region] . '</div>';
         $page[$region]['block_description'] = array(
           '#markup' => $description,
diff --git a/modules/simpletest/tests/common.test b/modules/simpletest/tests/common.test
index 92aefe4..b2a083c 100644
--- a/modules/simpletest/tests/common.test
+++ b/modules/simpletest/tests/common.test
@@ -1254,7 +1254,7 @@ class DrupalSetContentTestCase extends DrupalWebTestCase {
   function testRegions() {
     global $theme_key;
 
-    $block_regions = array_keys(system_region_list($theme_key));
+    $block_regions = system_region_list($theme_key, REGIONS_ALL, FALSE);
     $delimiter = $this->randomName(32);
     $values = array();
     // Set some random content for each region available.
diff --git a/modules/system/system.module b/modules/system/system.module
index 8a080fa..91a6494 100644
--- a/modules/system/system.module
+++ b/modules/system/system.module
@@ -2708,7 +2708,7 @@ function system_find_base_themes($themes, $key, $used_keys = array()) {
  * @return
  *   An array of regions in the form $region['name'] = 'description'.
  */
-function system_region_list($theme_key, $show = REGIONS_ALL) {
+function system_region_list($theme_key, $show = REGIONS_ALL, $labels = TRUE) {
   $themes = list_themes();
   if (!isset($themes[$theme_key])) {
     return array();
@@ -2716,13 +2716,17 @@ function system_region_list($theme_key, $show = REGIONS_ALL) {
 
   $list = array();
   $info = $themes[$theme_key]->info;
-  // If requested, suppress hidden regions. See block_admin_display_form().
-  foreach ($info['regions'] as $name => $label) {
-    if ($show == REGIONS_ALL || !isset($info['regions_hidden']) || !in_array($name, $info['regions_hidden'])) {
-      $list[$name] = t($label);
+    // If requested, suppress hidden regions. See block_admin_display_form().
+    foreach ($info['regions'] as $name => $label) {
+      if ($show == REGIONS_ALL || !isset($info['regions_hidden']) || !in_array($name, $info['regions_hidden'])) {
+        if ($labels) {
+          $list[$name] = t($label);
+        }
+        else {
+          $list[$name] = $name;
+        }
+      }
     }
-  }
-
   return $list;
 }
 
@@ -2747,7 +2751,7 @@ function system_system_info_alter(&$info, $file, $type) {
  *   A string that is the region name.
  */
 function system_default_region($theme) {
-  $regions = array_keys(system_region_list($theme, REGIONS_VISIBLE));
+  $regions = array_keys(system_region_list($theme, REGIONS_VISIBLE, FALSE));
   return isset($regions[0]) ? $regions[0] : '';
 }
 
@@ -3516,8 +3520,7 @@ function system_retrieve_file($url, $destination = NULL, $managed = FALSE, $repl
 function system_page_alter(&$page) {
   // Find all non-empty page regions, and add a theme wrapper function that
   // allows them to be consistently themed.
-  $regions = system_region_list($GLOBALS['theme']);
-  foreach (array_keys($regions) as $region) {
+  foreach (system_region_list($GLOBALS['theme'], REGIONS_ALL, FALSE) as $region) {
     if (!empty($page[$region])) {
       $page[$region]['#theme_wrappers'][] = 'region';
       $page[$region]['#region'] = $region;
