diff --git a/plugins/context_reaction_block.inc b/plugins/context_reaction_block.inc
index c14aa98..bae38f6 100644
--- a/plugins/context_reaction_block.inc
+++ b/plugins/context_reaction_block.inc
@@ -215,7 +215,7 @@ class context_reaction_block extends context_reaction {
     }
 
     // Populate all block regions
-    $all_regions = system_region_list($theme);
+    $all_regions = $this->get_enabled_regions($theme);
 
     // Load all region content assigned via blocks.
     foreach (array_keys($all_regions) as $region) {
@@ -255,11 +255,22 @@ class context_reaction_block extends context_reaction {
    */
   protected function is_enabled_region($region) {
     global $theme;
-    $regions = array_keys(system_region_list($theme));
+    $regions = array_keys($this->get_enabled_regions($theme));
     return in_array($region, $regions, TRUE);
   }
 
   /**
+   * Cache results of system_region_list
+   */
+  static function get_enabled_regions($theme) {
+    if (!$regions = context_cache_get('system_region_list' . $theme)) {
+      $regions = $this->get_enabled_regions($theme);
+      context_cache_set('system_region_list' . $theme, $regions);
+    }
+    return $regions;
+  }
+
+  /**
    * Determine whether inline editing requirements are met and that the current
    * user may edit.
    */
@@ -290,7 +301,7 @@ class context_reaction_block extends context_reaction {
       return FALSE;
     }
     // Check that this region is not hidden
-    $visible = system_region_list($theme, REGIONS_VISIBLE);
+    $visible = $this->get_enabled_regions($theme, REGIONS_VISIBLE);
     return $requirements && $this->is_enabled_region($region) && isset($visible[$region]);
   }
 
@@ -328,7 +339,7 @@ class context_reaction_block extends context_reaction {
          context_isset('context_ui', 'context_ui_editor_present'))
     ) {
       global $theme;
-      $regions = system_region_list($theme);
+      $regions = $this->get_enabled_regions($theme);
       $name = isset($regions[$region]) ? $regions[$region] : $region;
       // The negative weight + sorted will push our region marker to the top of the region
       $build['context'] = array(
