diff --git rules/includes/rules.core.inc rules/includes/rules.core.inc
index cf4e232..13567d8 100644
--- rules/includes/rules.core.inc
+++ rules/includes/rules.core.inc
@@ -915,10 +915,17 @@ abstract class RulesPlugin extends RulesExtendable {
     if (!empty($this->itemInfo['component'])) {
       // Just move each component into the cache.
       $components = rules_config_load_multiple(FALSE, array('plugin' => $this->itemName));
+      $isOptimize = FALSE;
+      if ($this->itemName == 'rule set') {
+        $isOptimize = TRUE;
+      }
 
       foreach ($components as $id => $component) {
         // Clone the component to avoid modules getting the to be cached
         // version from the static loading cache.
+        if ($isOptimize) {
+          $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 ec20790..0cc7cb8 100644
--- rules/rules.module
+++ rules/rules.module
@@ -412,6 +412,9 @@ function rules_rules_plugin_info() {
         'RulesPluginUIInterface' => array(
           'class' => 'RulesRuleSetUI',
         ),
+        'RulesOptimizationInterface' => array(
+          'class' => 'RulesDefaultOptimizer',
+        ),
       ),
     ),
   );
