diff --git modules/system/system.api.php modules/system/system.api.php
index 916d890..17aba88 100644
--- modules/system/system.api.php
+++ modules/system/system.api.php
@@ -3986,5 +3986,22 @@ function hook_menu_site_status_alter(&$menu_site_status, $path) {
 }
 
 /**
+ * @param &$list
+ *   List of the available regions from a specified theme.
+ * @param $theme_key
+ *   The name of the theme.
+ * @param $show
+ *   Possible values: REGIONS_ALL or REGIONS_VISIBLE. Visible excludes hidden
+ *   regions.
+ */
+function hook_region_list_alter(&$list, $theme_key, $show) {
+  // The 'sidebar_visible' field instance on 'page' node types controls the
+  // 'sidebar' region.
+  if (($node = menu_get_object()) && $node->type == 'page' && !$node->sidebar_visible[LANGUAGE_NONE][0]['value']) {
+    unset($list[$theme_key][$show]['sidebar']);
+  }
+}
+
+/**
  * @} End of "addtogroup hooks".
  */
diff --git modules/system/system.module modules/system/system.module
index ce66f5f..f77a33e 100644
--- modules/system/system.module
+++ modules/system/system.module
@@ -2544,6 +2544,7 @@ function system_region_list($theme_key, $show = REGIONS_ALL) {
         $list[$theme_key][$show][$name] = $label;
       }
     }
+    drupal_alter('region_list', $list, $theme_key, $show);
   }
   return $list[$theme_key][$show];
 }
