diff --git a/includes/rules.core.inc b/includes/rules.core.inc
index 5dbc332..559d1cf 100644
--- a/includes/rules.core.inc
+++ b/includes/rules.core.inc
@@ -1124,7 +1124,8 @@ abstract class RulesPlugin extends RulesExtendable {
         elseif ($this->plugin == 'reaction rule') {
           // Clear event sets cached for evaluation.
           cache_clear_all('event_', 'cache_rules', TRUE);
-          variable_del('rules_event_whitelist');
+          // Clear event whitelist for rebuild.
+          cache_clear_all('rules_event_whitelist', 'cache_rules', TRUE);
         }
         drupal_static_reset('rules_get_cache');
         drupal_static_reset('rules_config_update_dirty_flag');
diff --git a/includes/rules.plugins.inc b/includes/rules.plugins.inc
index 85b7296..90b306d 100644
--- a/includes/rules.plugins.inc
+++ b/includes/rules.plugins.inc
@@ -809,7 +809,7 @@ class RulesEventSet extends RulesRuleSet {
     }
     // Cache a whitelist of configured events so we can use it to speed up later
     // calls. See rules_invoke_event().
-    variable_set('rules_event_whitelist', array_flip(array_keys($sets)));
+    rules_set_cache('rules_event_whitelist', array_flip(array_keys($sets)));
   }
 
   protected function stateVariables($element = NULL) {
diff --git a/rules.install b/rules.install
index 1a81d2f..ed82336 100644
--- a/rules.install
+++ b/rules.install
@@ -500,3 +500,21 @@ function rules_update_7213() {
     }
   }
 }
+
+/**
+ * Switch out the rules_event_whitelist variable for a cache equivalent.
+ */
+function rules_update_7214() {
+  // Set new event_whitelist cache cid.
+  rules_set_cache('rules_event_whitelist', variable_get('rules_event_whitelist', array()));
+  // Delete old conf variable.
+  variable_del('rules_event_whitelist');
+  // Avoid any missing class errors.
+  registry_rebuild();
+  // Clear and rebuild Rules caches.
+  // See: rules_admin_settings_cache_rebuild_submit.
+  rules_clear_cache();
+  rules_get_cache();
+  _rules_rebuild_component_cache();
+  RulesEventSet::rebuildEventCache();
+}
diff --git a/rules.module b/rules.module
index 74077c8..6d25887 100644
--- a/rules.module
+++ b/rules.module
@@ -350,7 +350,7 @@ function &rules_get_cache($cid = 'data') {
         $cache[$cid] = FALSE;
         _rules_rebuild_component_cache();
       }
-      elseif (strpos($cid, 'event_') === 0) {
+      elseif (strpos($cid, 'event_') === 0 || $cid == 'rules_event_whitelist') {
         $cache[$cid] = FALSE;
         RulesEventSet::rebuildEventCache();
       }
@@ -445,7 +445,6 @@ function rules_flush_caches() {
  */
 function rules_clear_cache() {
   cache_clear_all('*', 'cache_rules', TRUE);
-  variable_del('rules_event_whitelist');
   drupal_static_reset('rules_get_cache');
   drupal_static_reset('rules_fetch_data');
   drupal_static_reset('rules_config_update_dirty_flag');
@@ -982,17 +981,16 @@ function rules_invoke_all() {
  * @see rules_invoke_event_by_args()
  */
 function rules_invoke_event() {
-  global $conf;
-
   $args = func_get_args();
   $event_name = $args[0];
   unset($args[0]);
   // We maintain a whitelist of configured events to reduces the number of cache
-  // reads. We access it directly via the global $conf as this is fast without
-  // having to introduce another static cache. Then, if the whitelist is unset,
-  // we ignore it so cache rebuilding is triggered.
-  if (rules_event_invocation_enabled() && (!isset($conf['rules_event_whitelist']) || isset($conf['rules_event_whitelist'][$event_name])) && $event = rules_get_cache('event_' . $event_name)) {
-    $event->executeByArgs($args);
+  // reads. If the whitelist is empty we proceed and it is rebuilt.
+  if (rules_event_invocation_enabled()) {
+    $whitelist = rules_get_cache('rules_event_whitelist');
+    if ((empty($whitelist) || isset($whitelist[$event_name])) && $event = rules_get_cache('event_' . $event_name)) {
+      $event->executeByArgs($args);
+    }
   }
 }
 
@@ -1014,14 +1012,13 @@ function rules_invoke_event() {
  * @see rules_invoke_event()
  */
 function rules_invoke_event_by_args($event_name, $args = array()) {
-  global $conf;
-
   // We maintain a whitelist of configured events to reduces the number of cache
-  // reads. We access it directly via the global $conf as this is fast without
-  // having to introduce another static cache. Then, if the whitelist is unset,
-  // we ignore it so cache rebuilding is triggered.
-  if (rules_event_invocation_enabled() && (!isset($conf['rules_event_whitelist']) || isset($conf['rules_event_whitelist'][$event_name])) && $event = rules_get_cache('event_' . $event_name)) {
-    $event->executeByArgs($args);
+  // reads. If the whitelist is empty we proceed and it is rebuilt.
+  if (rules_event_invocation_enabled()) {
+    $whitelist = rules_get_cache('rules_event_whitelist');
+    if ((empty($whitelist) || isset($whitelist[$event_name])) && $event = rules_get_cache('event_' . $event_name)) {
+      $event->executeByArgs($args);
+    }
   }
 }
 
diff --git a/tests/rules.test b/tests/rules.test
index 20f1c9d..80a544c 100644
--- a/tests/rules.test
+++ b/tests/rules.test
@@ -16,6 +16,8 @@ class RulesTestCase extends DrupalWebTestCase {
   }
 
   function setUp() {
+    include_once dirname(__FILE__) . '/rules_test.test.inc';
+
     parent::setUp('rules', 'rules_test');
     RulesLog::logger()->clear();
     variable_set('rules_debug_log', 1);
@@ -946,6 +948,8 @@ class RulesTestDataCase extends DrupalWebTestCase {
   }
 
   function setUp() {
+    include_once dirname(__FILE__) . '/rules_test.test.inc';
+
     parent::setUp('rules', 'rules_test');
     variable_set('rules_debug_log', 1);
     // Make sure we don't ran over issues with the node_load static cache.
@@ -1091,6 +1095,8 @@ class RulesTriggerTestCase extends DrupalWebTestCase {
   }
 
   function setUp() {
+    include_once dirname(__FILE__) . '/rules_test.test.inc';
+
     parent::setUp('rules', 'rules_test');
     RulesLog::logger()->clear();
     variable_set('rules_debug_log', 1);
@@ -1315,6 +1321,8 @@ class RulesIntegrationTestCase extends DrupalWebTestCase {
   }
 
   function setUp() {
+    include_once dirname(__FILE__) . '/rules_test.test.inc';
+
     parent::setUp('rules', 'rules_test', 'php', 'path');
     RulesLog::logger()->clear();
     variable_set('rules_debug_log', 1);
@@ -2047,6 +2055,8 @@ class RulesEventDispatcherTestCase extends DrupalWebTestCase {
   }
 
   function setUp() {
+    include_once dirname(__FILE__) . '/rules_test.test.inc';
+
     parent::setUp('rules', 'rules_test');
   }
 
