diff --git rules/includes/rules.core.inc rules/includes/rules.core.inc
index d743757..5d3bde9 100644
--- rules/includes/rules.core.inc
+++ rules/includes/rules.core.inc
@@ -943,6 +943,7 @@ abstract class RulesPlugin extends RulesExtendable {
       foreach ($components as $id => $component) {
         // Clone the component to avoid modules getting the to be cached
         // version from the static loading cache.
+        $component->__call('optimize');
         $component = clone $component;
         $component->setSkipSetup(TRUE);
         // Allow modules to alter the cached component.
diff --git rules/rules.module rules/rules.module
index 1d13078..2e229fe 100644
--- rules/rules.module
+++ rules/rules.module
@@ -332,6 +332,9 @@ function rules_rules_plugin_info() {
         'RulesPluginUIInterface' => array(
           'class' => 'RulesAbstractPluginUI',
         ),
+        'RulesOptimizationInterface' => array(
+          'class' => 'RulesDefaultOptimizer',
+        ),
       ),
     ),
     'action' => array(
@@ -344,6 +347,9 @@ function rules_rules_plugin_info() {
         'RulesPluginUIInterface' => array(
           'class' => 'RulesAbstractPluginUI',
         ),
+        'RulesOptimizationInterface' => array(
+          'class' => 'RulesDefaultOptimizer',
+        ),
       ),
     ),
     'or' => array(
@@ -355,6 +361,9 @@ function rules_rules_plugin_info() {
         'RulesPluginUIInterface' => array(
           'class' => 'RulesConditionContainerUI',
         ),
+        'RulesOptimizationInterface' => array(
+          'class' => 'RulesDefaultOptimizer',
+        ),
       ),
     ),
     'and' => array(
@@ -366,6 +375,9 @@ function rules_rules_plugin_info() {
         'RulesPluginUIInterface' => array(
           'class' => 'RulesConditionContainerUI',
         ),
+        'RulesOptimizationInterface' => array(
+          'class' => 'RulesDefaultOptimizer',
+        ),
       ),
     ),
     'action set' => array(
@@ -377,6 +389,9 @@ function rules_rules_plugin_info() {
         'RulesPluginUIInterface' => array(
           'class' => 'RulesActionContainerUI',
         ),
+        'RulesOptimizationInterface' => array(
+          'class' => 'RulesDefaultOptimizer',
+        ),
       ),
     ),
     'rule' => array(
@@ -388,6 +403,9 @@ function rules_rules_plugin_info() {
         'RulesPluginUIInterface' => array(
           'class' => 'RulesRuleUI',
         ),
+        'RulesOptimizationInterface' => array(
+          'class' => 'RulesDefaultOptimizer',
+        ),
       ),
     ),
     'loop' => array(
@@ -397,6 +415,9 @@ function rules_rules_plugin_info() {
         'RulesPluginUIInterface' => array(
           'class' => 'RulesLoopUI',
         ),
+        'RulesOptimizationInterface' => array(
+          'class' => 'RulesDefaultOptimizer',
+        ),
       ),
     ),
     'reaction rule' => array(
@@ -406,6 +427,9 @@ function rules_rules_plugin_info() {
         'RulesPluginUIInterface' => array(
           'class' => 'RulesReactionRuleUI',
         ),
+        'RulesOptimizationInterface' => array(
+          'class' => 'RulesDefaultOptimizer',
+        ),
       ),
     ),
     'event set' => array(
@@ -427,6 +451,9 @@ function rules_rules_plugin_info() {
         'RulesPluginUIInterface' => array(
           'class' => 'RulesRuleSetUI',
         ),
+        'RulesOptimizationInterface' => array(
+          'class' => 'RulesDefaultOptimizer',
+        ),
       ),
     ),
   );
