diff --git rules/includes/rules.plugins.inc rules/includes/rules.plugins.inc
index 15e2f23..dd71535 100644
--- rules/includes/rules.plugins.inc
+++ rules/includes/rules.plugins.inc
@@ -570,6 +570,7 @@ class RulesEventSet extends RulesRuleSet {
         $event = new RulesEventSet($info);
         $event->name = $name;
         foreach ($rules as $rule) {
+          $rule = $event->__call('optimize', array($rule));
           $event->rule($rule);
         }
         $event->setSkipSetup();
@@ -589,3 +590,30 @@ class RulesEventSet extends RulesRuleSet {
     return $this->availableVariables();
   }
 }
+
+/**
+ * Interface for optimized rules
+ */
+interface RulesOptimizationInterface {
+  /**
+   * Convert the input rules into a decision tree structure
+   *
+   * @param $rules
+   *   All the rules trigerrable by the RulesRuleSet or RulesEventSet
+   */
+  public function optimize($rule);
+}
+
+/**
+ * Class implementing optimization method
+ */
+class RulesOptimization extends FacesExtender implements RulesOptimizationInterface {
+  /**
+   * Implementation of this method would be in
+   * rules_optimization module.
+   * After that it would be integrated
+   */
+  public function optimize($rule){
+    return $rule;
+  }
+}
diff --git rules/rules.module rules/rules.module
index a2b9046..17a4812 100644
--- rules/rules.module
+++ rules/rules.module
@@ -381,6 +381,11 @@ function rules_rules_plugin_info() {
     'event set' => array(
       'class' => 'RulesEventSet',
       'embeddable' => FALSE,
+      'extenders' => array(
+        'RulesOptimizationInterface' => array(
+          'class' => 'RulesOptimization',
+        ),
+      ),
     ),
     'rule set' => array(
       'class' => 'RulesRuleSet',
