diff --git a/rules.module b/rules.module
index d4159de..10167b0 100644
--- a/rules.module
+++ b/rules.module
@@ -14,7 +14,12 @@ spl_autoload_register('rules_autoload');
  */
 function rules_autoload($class) {
   if (stripos($class, 'faces') === 0) {
-    module_load_include('inc', 'rules', 'includes/faces');
+    if (module_exists('faces')) {
+      module_load_include('inc', 'faces');
+    }
+    else {
+      module_load_include('inc', 'rules', 'includes/faces');
+    }
   }
 }
 
@@ -417,7 +422,7 @@ function rules_unwrap_data(array $data, $info = array()) {
  */
 function rules_plugin_factory($plugin_name, $arg1 = NULL, $arg2 = NULL) {
   $cache = rules_get_cache();
-  if (isset($cache['plugin_info'][$plugin_name]['class'])) {
+  if (isset($cache['plugin_info'][$plugin_name]['class']) && class_exists($cache['plugin_info'][$plugin_name]['class'])) {
     return new $cache['plugin_info'][$plugin_name]['class']($arg1, $arg2);
   }
 }
@@ -733,7 +738,7 @@ function rules_invoke_event() {
   unset($args[0]);
   // For invoking the rules event we directly acccess the global $conf. This is
   // fast without having to introduce another static cache.
-  if (!isset($conf['rules_empty_sets'][$event_name]) && $event = rules_get_cache('event_' . $event_name)) {
+  if (!isset($conf['rules_empty_sets'][$event_name]) && ($event = rules_get_cache('event_' . $event_name)) && method_exists($event, 'executeByArgs')) {
     $event->executeByArgs($args);
   }
 }
@@ -760,7 +765,7 @@ function rules_invoke_event_by_args($event_name, $args = array()) {
 
   // For invoking the rules event we directly acccess the global $conf. This is
   // fast without having to introduce another static cache.
-  if (!isset($conf['rules_empty_sets'][$event_name]) && $event = rules_get_cache('event_' . $event_name)) {
+  if (!isset($conf['rules_empty_sets'][$event_name]) && ($event = rules_get_cache('event_' . $event_name)) && method_exists($event, 'executeByArgs')) {
     $event->executeByArgs($args);
   }
 }
@@ -779,7 +784,7 @@ function rules_invoke_event_by_args($event_name, $args = array()) {
 function rules_invoke_component() {
   $args = func_get_args();
   $name = array_shift($args);
-  if ($component = rules_get_cache('comp_' . $name)) {
+  if (($component = rules_get_cache('comp_' . $name)) && method_exists($component, 'executeByArgs')) {
     return $component->executeByArgs($args);
   }
 }
