diff --git rules.module rules.module
index e72f39e..a5ac9bb 100644
--- rules.module
+++ rules.module
@@ -5,9 +5,6 @@
  * @file Rules engine module
  */
 
-define('RULES_UI_PATH', 'admin/config/workflow/rules');
-define('RULES_UI_RULE_PATH', RULES_UI_PATH . '/config');
-
 // Add the rules autoloader, which cares about auto-loading the faces include.
 // @see http://drupal.org/project/faces
 spl_autoload_register('rules_autoload');
@@ -475,6 +472,7 @@ function rules_entity_info() {
       'export' => array(
         'default hook' => 'default_rules_configuration',
       ),
+      'access callback' => 'rules_config_access',
     ),
   );
 }
@@ -855,98 +853,6 @@ function rules_permission() {
 }
 
 /**
- * Implements hook_menu().
- * Provides some callbacks used by the embeddable UI.
- */
-function rules_menu() {
-  $items[RULES_UI_RULE_PATH . '/%rules_config'] = array(
-    'title callback' => 'rules_get_title',
-    'title arguments' => array('Editing !plugin "!label"', 5),
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('rules_ui_form_edit_rules_config', 5),
-    'access arguments' => array('administer rules'),
-    'description' => 'Manage reaction rules and rule components.',
-    'type' => MENU_CALLBACK,
-    'file' => 'ui/ui.forms.inc',
-  );
-  $items[RULES_UI_RULE_PATH . '/%rules_config/add/%/%rules_element'] = array(
-    'title callback' => 'rules_get_title',
-    'title arguments' => array('Add a new !plugin', 7),
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('rules_ui_add_element', 5, 7, 8),
-    'access arguments' => array('administer rules'),
-    'load arguments' => array(5),
-    'type' => MENU_CALLBACK,
-    'file' => 'ui/ui.forms.inc',
-  );
-  $items[RULES_UI_RULE_PATH . '/%rules_config/add/event'] = array(
-    'title callback' => 'rules_get_title',
-    'title arguments' => array('Addin events to !plugin "!label"', 5),
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('rules_ui_add_event', 5),
-    'access arguments' => array('administer rules'),
-    'load arguments' => array(5),
-    'type' => MENU_CALLBACK,
-    'file' => 'ui/ui.forms.inc',
-  );
-  $items[RULES_UI_RULE_PATH . '/%rules_config/delete/event'] = array(
-    //@todo: improve title.
-    'title' => 'Remove event',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('rules_ui_remove_event', 5, 8),
-    'access arguments' => array('administer rules'),
-    'description' => 'Remove an event from a reaction rule.',
-    'type' => MENU_CALLBACK,
-    'file' => 'ui/ui.forms.inc',
-  );
-  $items[RULES_UI_RULE_PATH . '/%rules_config/edit/%rules_element'] = array(
-    'title callback' => 'rules_get_title',
-    'title arguments' => array('Editing !plugin "!label"', 7),
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('rules_ui_edit_element', 5, 7),
-    'access arguments' => array('administer rules'),
-    'load arguments' => array(5),
-    'type' => MENU_CALLBACK,
-    'file' => 'ui/ui.forms.inc',
-  );
-  $items[RULES_UI_RULE_PATH . '/%rules_config/autocomplete'] = array(
-    'page callback' => 'rules_ui_form_data_selection_auto_completion',
-    'page arguments' => array(7, 8, 9),
-    'access arguments' => array('administer rules'),
-    'type' => MENU_CALLBACK,
-    'file' => 'ui/ui.forms.inc',
-  );
-  $items[RULES_UI_RULE_PATH . '/%rules_config/delete/%rules_element'] = array(
-    'title callback' => 'rules_get_title',
-    'title arguments' => array('Editing !plugin "!label"', 7),
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('rules_ui_delete_element', 5, 7),
-    'access arguments' => array('administer rules'),
-    'load arguments' => array(5),
-    'type' => MENU_CALLBACK,
-    'file' => 'ui/ui.forms.inc',
-  );
-  $items[RULES_UI_RULE_PATH . '/%rules_config/%'] = array(
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('rules_ui_form_rules_config_confirm_op', 5, 6),
-    'access arguments' => array('administer rules'),
-    'type' => MENU_CALLBACK,
-    'file' => 'ui/ui.forms.inc',
-  );
-  $items[RULES_UI_RULE_PATH . '/%rules_config/clone'] = array(
-    'title callback' => 'rules_get_title',
-    'title arguments' => array('Cloning !plugin "!label"', 5),
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('rules_ui_form_clone_rules_config', 5, 6),
-    'access arguments' => array('administer rules'),
-    'type' => MENU_CALLBACK,
-    'file' => 'ui/ui.forms.inc',
-  );
-
-  return $items;
-}
-
-/**
  * Callback for loading rules configuration elements.
  */
 function rules_element_load($element_id, $config_name) {
@@ -1051,3 +957,12 @@ function rules_modules_disbled($modules) {
   rules_clear_cache();
   //TODO: Disable configs with now broken dependencies?
 }
+
+/**
+ * Access callback for rules configurations.
+ *
+ * @see entity_access()
+ */
+function rules_config_access($op, $rules_config, $account = NULL) {
+  return user_access('administer rules', $account);
+}
diff --git rules_admin/rules_admin.inc rules_admin/rules_admin.inc
index 3188b16..5ffb8e5 100644
--- rules_admin/rules_admin.inc
+++ rules_admin/rules_admin.inc
@@ -11,6 +11,8 @@
  */
 function rules_admin_reaction_overview($form, &$form_state) {
   form_load_include($form_state, 'inc', 'rules', 'ui/ui.forms');
+  // Set the static base path.
+  RulesPluginUI::$basePath = RULES_ADMIN_REACTION_PATH;
 
   $form['filter'] = array(
     '#type' => 'fieldset',
@@ -56,6 +58,9 @@ function rules_admin_reaction_overview($form, &$form_state) {
  * Components overview.
  */
 function rules_admin_components_overview($form, &$form_state) {
+  // Set the static base path.
+  RulesPluginUI::$basePath = RULES_ADMIN_COMPONENT_PATH;
+
   RulesPluginUI::formDefaults($form, $form_state);
 
   $form['filter'] = array(
@@ -126,7 +131,7 @@ function rules_admin_add_reaction_rule($form, &$form_state) {
     $form['settings'][$key]['#access'] = FALSE;
   }
   // Incorporate the form to add the first event.
-  $form['settings'] += rules_ui_add_event(array(), $form_state, $rules_config);
+  $form['settings'] += rules_ui_add_event(array(), $form_state, $rules_config, RULES_ADMIN_REACTION_PATH);
 
   unset($form['settings']['submit']);
   $form['submit']['#value'] = t('Save');
@@ -149,6 +154,7 @@ function rules_admin_add_reaction_rule_submit($form, &$form_state) {
  * Add component form.
  */
 function rules_admin_add_component($form, &$form_state) {
+  RulesPluginUI::$basePath = RULES_ADMIN_COMPONENT_PATH;
   RulesPluginUI::formDefaults($form, $form_state);
 
   $form['plugin_name'] = array(
@@ -217,3 +223,186 @@ function rules_admin_add_component_submit($form, &$form_state) {
   $rules_config->form_submit($form, $form_state);
   $form_state['redirect'] = RulesPluginUI::path($rules_config->name);
 }
+
+/**
+ * Controller class for customizing the default Entity UI.
+ */
+class RulesUIController extends EntityDefaultUIController {
+
+  public function __construct() {
+    $entity_info = rules_entity_info();
+    parent::__construct('rules_config', $entity_info['rules_config']);
+  }
+
+  /**
+   * Overrides EntityDefaultUIController::hook_menu()
+   */
+  public function hook_menu() {
+    // Reaction rules UI menu entries.
+    $items = $this->config_menu(RULES_ADMIN_REACTION_PATH);
+    $items[RULES_UI_PATH] = array(
+      'title' => 'Rules',
+      'position' => 'right',
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('rules_admin_reaction_overview'),
+      'description' => 'Manage reaction rules and rule components.',
+      'access arguments' => array('administer rules'),
+      'file' => 'rules_admin.inc',
+      'file path' => drupal_get_path('module', 'rules_admin'),
+    );
+    $items[RULES_ADMIN_REACTION_PATH] = array(
+      'title' => 'Reaction rules',
+      'type' => MENU_DEFAULT_LOCAL_TASK,
+      'weight' => -1,
+    );
+    $items[RULES_ADMIN_REACTION_PATH . '/add'] = array(
+      'title' => 'Add new rule',
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('rules_admin_add_reaction_rule'),
+      'access arguments' => array('administer rules'),
+      'type' => MENU_LOCAL_ACTION,
+      'file' => 'rules_admin.inc',
+      'file path' => drupal_get_path('module', 'rules_admin'),
+      'weight' => 0,
+    );
+
+    // Components UI menu entries
+    $items += $this->config_menu(RULES_ADMIN_COMPONENT_PATH);
+    $items[RULES_ADMIN_COMPONENT_PATH] = array(
+      'title' => 'Components',
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('rules_admin_components_overview'),
+      'access arguments' => array('administer rules'),
+      'type' => MENU_LOCAL_TASK,
+      'file' => 'rules_admin.inc',
+      'file path' => drupal_get_path('module', 'rules_admin'),
+      'weight' => 0,
+    );
+    $items[RULES_ADMIN_COMPONENT_PATH . '/add'] = array(
+      'title' => 'Add new component',
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('rules_admin_add_component'),
+      'access arguments' => array('administer rules'),
+      'type' => MENU_LOCAL_ACTION,
+      'file' => 'rules_admin.inc',
+      'file path' => drupal_get_path('module', 'rules_admin'),
+      'weight' => 0,
+    );
+
+    $items[RULES_UI_PATH .'/settings'] = array(
+      'title' => 'Settings',
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('rules_admin_settings'),
+      'access arguments' => array('administer rules'),
+      'type' => MENU_LOCAL_TASK,
+      'file' => 'rules_admin.inc',
+      'file path' => drupal_get_path('module', 'rules_admin'),
+      'weight' => 1,
+    );
+    return $items;
+  }
+
+  /**
+   * Generates menu items to manipulate rules configurations.
+   *
+   * @param $base_path
+   *   The path to the overview page from where the configurations are edited.
+   */
+  public function config_menu($base_path) {
+    $items = array();
+    $base_count = count(explode('/', $base_path));
+    $items[$base_path . '/manage/%rules_config'] = array(
+      'title callback' => 'rules_get_title',
+      'title arguments' => array('Editing !plugin "!label"', $base_count + 1),
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('rules_ui_form_edit_rules_config', $base_count + 1, $base_path),
+      'access arguments' => array('administer rules'),
+      'description' => 'Manage reaction rules and rule components.',
+      'type' => MENU_VISIBLE_IN_BREADCRUMB,
+      'file' => 'ui/ui.forms.inc',
+      'file path' => drupal_get_path('module', 'rules'),
+    );
+    $items[$base_path . '/manage/%rules_config/add/%rules_element'] = array(
+      'title callback' => 'rules_get_title',
+      'title arguments' => array('Add a new !plugin', $base_count + 3),
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('rules_ui_add_element', $base_count + 1, $base_count + 4, $base_count + 3, $base_path),
+      'access arguments' => array('administer rules'),
+      'load arguments' => array($base_count + 1),
+      'type' => MENU_VISIBLE_IN_BREADCRUMB,
+      'file' => 'ui/ui.forms.inc',
+      'file path' => drupal_get_path('module', 'rules'),
+    );
+    $items[$base_path . '/manage/%rules_config/add/event'] = array(
+      'title callback' => 'rules_get_title',
+      'title arguments' => array('Addin events to !plugin "!label"', $base_count + 1),
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('rules_ui_add_event', $base_count + 1, $base_path),
+      'access arguments' => array('administer rules'),
+      'load arguments' => array($base_count + 1),
+      'type' => MENU_VISIBLE_IN_BREADCRUMB,
+      'file' => 'ui/ui.forms.inc',
+      'file path' => drupal_get_path('module', 'rules'),
+    );
+    $items[$base_path . '/manage/%rules_config/delete/event'] = array(
+      //@todo: improve title.
+      'title' => 'Remove event',
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('rules_ui_remove_event', $base_count + 1, $base_count + 4, $base_path),
+      'access arguments' => array('administer rules'),
+      'description' => 'Remove an event from a reaction rule.',
+      'type' => MENU_VISIBLE_IN_BREADCRUMB,
+      'file' => 'ui/ui.forms.inc',
+      'file path' => drupal_get_path('module', 'rules'),
+    );
+    $items[$base_path . '/manage/%rules_config/edit/%rules_element'] = array(
+      'title callback' => 'rules_get_title',
+      'title arguments' => array('Editing !plugin "!label"', $base_count + 3),
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('rules_ui_edit_element', $base_count + 1, $base_count + 3, $base_path),
+      'access arguments' => array('administer rules'),
+      'load arguments' => array($base_count + 1),
+      'type' => MENU_VISIBLE_IN_BREADCRUMB,
+      'file' => 'ui/ui.forms.inc',
+      'file path' => drupal_get_path('module', 'rules'),
+    );
+    $items[$base_path . '/manage/%rules_config/autocomplete'] = array(
+      'page callback' => 'rules_ui_form_data_selection_auto_completion',
+      'page arguments' => array($base_count + 3, $base_count + 4, $base_count + 5),
+      'access arguments' => array('administer rules'),
+      'type' => MENU_CALLBACK,
+      'file' => 'ui/ui.forms.inc',
+      'file path' => drupal_get_path('module', 'rules'),
+    );
+    $items[$base_path . '/manage/%rules_config/delete/%rules_element'] = array(
+      'title callback' => 'rules_get_title',
+      'title arguments' => array('Editing !plugin "!label"', $base_count + 3),
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('rules_ui_delete_element', $base_count + 1, $base_count + 3, $base_path),
+      'access arguments' => array('administer rules'),
+      'load arguments' => array($base_count + 1),
+      'type' => MENU_VISIBLE_IN_BREADCRUMB,
+      'file' => 'ui/ui.forms.inc',
+      'file path' => drupal_get_path('module', 'rules'),
+    );
+    $items[$base_path . '/manage/%rules_config/%'] = array(
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('rules_ui_form_rules_config_confirm_op', $base_count + 1, $base_count + 2, $base_path),
+      'access arguments' => array('administer rules'),
+      'type' => MENU_VISIBLE_IN_BREADCRUMB,
+      'file' => 'ui/ui.forms.inc',
+      'file path' => drupal_get_path('module', 'rules'),
+    );
+    $items[$base_path . '/manage/%rules_config/clone'] = array(
+      'title callback' => 'rules_get_title',
+      'title arguments' => array('Cloning !plugin "!label"', $base_count + 1),
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('rules_ui_form_clone_rules_config', $base_count + 1, $base_count + 2, $base_path),
+      'access arguments' => array('administer rules'),
+      'type' => MENU_VISIBLE_IN_BREADCRUMB,
+      'file' => 'ui/ui.forms.inc',
+      'file path' => drupal_get_path('module', 'rules'),
+    );
+    return $items;
+  }
+}
diff --git rules_admin/rules_admin.module rules_admin/rules_admin.module
index 90b554c..9371d82 100644
--- rules_admin/rules_admin.module
+++ rules_admin/rules_admin.module
@@ -5,65 +5,19 @@
  * @file Rules Admin UI
  */
 
-define('RULES_ADMIN_REACION_PATH', RULES_UI_PATH . '/reaction');
+define('RULES_UI_PATH', 'admin/config/workflow/rules');
+define('RULES_ADMIN_REACTION_PATH', RULES_UI_PATH . '/reaction');
 define('RULES_ADMIN_COMPONENT_PATH', RULES_UI_PATH . '/components');
 
 /**
- * Implementation of hook_menu()
+ * Implements hook_entity_info_alter().
  */
-function rules_admin_menu() {
-  $items = array();
-  $items[RULES_UI_PATH] = array(
-    'title' => 'Rules',
-    'position' => 'right',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('rules_admin_reaction_overview'),
-    'description' => 'Manage reaction rules and rule components.',
-    'access arguments' => array('administer rules'),
+function rules_admin_entity_info_alter(&$entity_info) {
+  // Enable the entity API UI controller. See EntityDefaultUIController.
+  $entity_info['rules_config']['admin ui'] = array(
+    'controller class' => 'RulesUIController',
+    'path' => RULES_UI_PATH,
     'file' => 'rules_admin.inc',
+    'file path' => drupal_get_path('module', 'rules_admin'),
   );
-  $items[RULES_ADMIN_REACION_PATH] = array(
-    'title' => 'Reaction rules',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => -1,
-  );
-  $items[RULES_ADMIN_REACION_PATH . '/add'] = array(
-    'title' => 'Add new rule',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('rules_admin_add_reaction_rule'),
-    'access arguments' => array('administer rules'),
-    'type' => MENU_LOCAL_ACTION,
-    'file' => 'rules_admin.inc',
-    'weight' => 0,
-  );
-  $items[RULES_ADMIN_COMPONENT_PATH] = array(
-    'title' => 'Components',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('rules_admin_components_overview'),
-    'access arguments' => array('administer rules'),
-    'type' => MENU_LOCAL_TASK,
-    'file' => 'rules_admin.inc',
-    'weight' => 0,
-  );
-  $items[RULES_ADMIN_COMPONENT_PATH . '/add'] = array(
-    'title' => 'Add new component',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('rules_admin_add_component'),
-    'access arguments' => array('administer rules'),
-    'type' => MENU_LOCAL_ACTION,
-    'file' => 'rules_admin.inc',
-    'weight' => 0,
-  );
-  $items[RULES_UI_PATH .'/settings'] = array(
-    'title' => 'Settings',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('rules_admin_settings'),
-    'access arguments' => array('administer rules'),
-    'type' => MENU_LOCAL_TASK,
-    'file' => 'rules_admin.inc',
-    'weight' => 1,
-  );
-  return $items;
 }
-
-
diff --git ui/ui.core.inc ui/ui.core.inc
index f2f7df5..9330f22 100644
--- ui/ui.core.inc
+++ ui/ui.core.inc
@@ -147,6 +147,18 @@ class RulesPluginUI extends FacesExtender implements RulesPluginUIInterface {
   protected $element;
 
   /**
+   * The base path determines where the Rules overview UI lives. All forms that
+   * want to display Rules (overview) forms need to set this variable. This is
+   * necessary in order to get correct operation links, paths, redirects, bread
+   * crumbs etc.
+   *
+   * @see RulesUIController
+   * @see rules_admin_reaction_overview()
+   * @see rules_admin_components_overview()
+   */
+  public static $basePath = NULL;
+
+  /**
    * Provide $this->element to make the code more meaningful.
    */
   public function __construct(FacesExtendable $object) {
@@ -157,6 +169,9 @@ class RulesPluginUI extends FacesExtender implements RulesPluginUIInterface {
   /**
    * Implements RulesPluginUIInterface.
    * Generates the element edit form.
+   *
+   * Note: Make sure that you set RulesPluginUI::$basePath before using this
+   * method, otherwise paths, links, redirects etc. won't be correct.
    */
   public function form(&$form, &$form_state, $options = array()) {
     self::formDefaults($form, $form_state);
@@ -586,6 +601,9 @@ class RulesPluginUI extends FacesExtender implements RulesPluginUIInterface {
    * Generates the render array for a overview configuration table for arbitrary
    * rule configs that match the given conditions.
    *
+   * Note: Make sure that you set RulesPluginUI::$basePath before using this
+   * method, otherwise paths, links, redirects etc. won't be correct.
+   *
    * @param $conditions
    *   An array of conditions as needed by rules_config_load_multiple().
    * @param $options
@@ -679,9 +697,10 @@ class RulesPluginUI extends FacesExtender implements RulesPluginUIInterface {
    * Generates a path using the given operation for the element with the given
    * id of the configuration with the given name.
    */
-  public static function path($name, $op = NULL, RulesPlugin $element = NULL) {
+  public static function path($name, $op = NULL, RulesPlugin $element = NULL, $parameter = FALSE) {
     $element_id = isset($element) ? $element->elementId() : FALSE;
-    return implode('/', array_filter(array(RULES_UI_RULE_PATH, $name, $op, $element_id)));
+    $base_path = isset(self::$basePath) ? self::$basePath : 'admin/config/rules';
+    return implode('/', array_filter(array($base_path . '/manage', $name, $op, $element_id, $parameter)));
   }
 
   /**
@@ -737,6 +756,13 @@ class RulesPluginUI extends FacesExtender implements RulesPluginUIInterface {
     // Specify the wrapper div used by #ajax.
     $form['#prefix'] = '<div id="rules-form-wrapper">';
     $form['#suffix'] = '</div>';
+
+    // Preserve the base path in the form state. The after build handler will
+    // set self::$basePath again for cached forms.
+    if (isset(self::$basePath)) {
+      $form_state['_rules_base_path'] = self::$basePath;
+      $form['#after_build'][] = 'rules_base_path_handler';
+    }
   }
 }
 
@@ -872,7 +898,7 @@ class RulesContainerPluginUI extends RulesPluginUI {
       if (!empty($info['embeddable']) && $this->element instanceof $info['embeddable']) {
         $render['#links']['add_' . $plugin] = array(
           'title' => t('Add !name', array('!name' => $plugin)),
-          'href' => RulesPluginUI::path($name, 'add/' . $plugin, $this->element),
+          'href' => RulesPluginUI::path($name, 'add', $this->element, $plugin),
         );
       }
     }
diff --git ui/ui.forms.inc ui/ui.forms.inc
index 23d4e0a..f29e278 100755
--- ui/ui.forms.inc
+++ ui/ui.forms.inc
@@ -47,7 +47,8 @@ function rules_form_submit_rebuild($form, &$form_state) {
 /**
  * Edit a rules configuration.
  */
-function rules_ui_form_edit_rules_config($form, &$form_state, $rules_config) {
+function rules_ui_form_edit_rules_config($form, &$form_state, $rules_config, $base_path) {
+  RulesPluginUI::$basePath = $base_path;
   $form_state += array('rules_element' => $rules_config);
   // Add the rule configuration's form.
   $rules_config->form($form, $form_state, array('show settings' => TRUE, 'button' => TRUE));
@@ -74,7 +75,8 @@ function rules_ui_form_edit_rules_config_submit($form, &$form_state) {
 /**
  * Clone a rules configuration form.
  */
-function rules_ui_form_clone_rules_config($form, &$form_state, $rules_config) {
+function rules_ui_form_clone_rules_config($form, &$form_state, $rules_config, $base_path) {
+  RulesPluginUI::$basePath = $base_path;
   $rules_config = clone $rules_config;
   $rules_config->module = 'rules';
   $rules_config->id = FALSE;
@@ -113,10 +115,11 @@ function rules_ui_confirm_operations($op, $rules_config) {
 /**
  * Confirmation form for applying the operation to the config.
  */
-function rules_ui_form_rules_config_confirm_op($form, &$form_state, $rules_config, $op) {
+function rules_ui_form_rules_config_confirm_op($form, &$form_state, $rules_config, $op, $base_path) {
   if ($confirm_question = rules_ui_confirm_operations($op, $rules_config)) {
+    RulesPluginUI::$basePath = $base_path;
     $form_state += array('rules_config' => $rules_config, 'op' => $op);
-    return confirm_form($form, $confirm_question, RULES_UI_PATH, t('This action cannot be undone.'), t('Confirm'), t('Cancel'));
+    return confirm_form($form, $confirm_question, $base_path, t('This action cannot be undone.'), t('Confirm'), t('Cancel'));
   }
   else {
     drupal_not_found();
@@ -171,12 +174,13 @@ function rules_ui_form_rules_config_confirm_op_submit($form, &$form_state) {
 /**
  * Add a new element a rules configuration.
  */
-function rules_ui_add_element($form, &$form_state, $rules_config, $plugin_name, RulesContainerPlugin $parent) {
+function rules_ui_add_element($form, &$form_state, $rules_config, $plugin_name, RulesContainerPlugin $parent, $base_path) {
   $cache = rules_get_cache();
   if (!isset($cache['plugin_info'][$plugin_name]['class'])) {
     drupal_not_found();
     exit;
   }
+  RulesPluginUI::$basePath = $base_path;
   $plugin_is_abstract = in_array('RulesAbstractPlugin', class_parents($cache['plugin_info'][$plugin_name]['class']));
   // In the first step create the element and in the second step show its edit
   // form.
@@ -244,10 +248,11 @@ function rules_ui_add_element_submit($form, &$form_state) {
 /**
  * Delete elements.
  */
-function rules_ui_delete_element($form, &$form_state, $rules_config, $rules_element) {
+function rules_ui_delete_element($form, &$form_state, $rules_config, $rules_element, $base_path) {
+  RulesPluginUI::$basePath = $base_path;
   $form_state += array('rules_config' => $rules_config, 'rules_element' => $rules_element);
   $confirm_question = t('Are you sure you want to delete the %element_plugin %element_name?', array('%element_plugin' => $rules_element->plugin(), '%element_name' => $rules_element->label(), '%plugin' => $rules_config->plugin(), '%label' => $rules_config->label()));
-  return confirm_form($form, $confirm_question, RULES_UI_PATH, t('This action cannot be undone.'), t('Delete'), t('Cancel'));
+  return confirm_form($form, $confirm_question, RulesPluginUI::path($rules_config->name), t('This action cannot be undone.'), t('Delete'), t('Cancel'));
 }
 
 /**
@@ -281,7 +286,8 @@ function rules_ui_delete_element_submit($form, &$form_state) {
 /**
  * Configure a rule element.
  */
-function rules_ui_edit_element($form, &$form_state, $rules_config, $element) {
+function rules_ui_edit_element($form, &$form_state, $rules_config, $element, $base_path) {
+  RulesPluginUI::$basePath = $base_path;
   $form_state += array('rules_element' => $element);
   $form_state['rules_element']->form($form, $form_state, array('button' => TRUE));
   return $form;
@@ -307,7 +313,8 @@ function rules_ui_edit_element_submit($form, &$form_state) {
 /**
  * Add a new event.
  */
-function rules_ui_add_event($form, &$form_state, $rules_config) {
+function rules_ui_add_event($form, &$form_state, $rules_config, $base_path) {
+  RulesPluginUI::$basePath = $base_path;
   $form_state += array('rules_config' => $rules_config);
   $form['event'] = array(
     '#type' => 'select',
@@ -348,10 +355,13 @@ function rules_ui_add_event_submit($form, &$form_state) {
 /**
  * Form to remove a event from a rule.
  */
-function rules_ui_remove_event($form, &$form_state, $rules_config, $event) {
+function rules_ui_remove_event($form, &$form_state, $rules_config, $event, $base_path) {
+  RulesPluginUI::$basePath = $base_path;
   $form_state += array('rules_config' => $rules_config, 'rules_event' => $event);
-  $confirm_question = t('Are you sure you want to remove %event from the %plugin %label?', array('%plugin' => $rules_config->plugin(), '%label' => $rules_config->label(), '%event' => $event));
-  return confirm_form($form, $confirm_question, RULES_UI_RULE_PATH, t('This action cannot be undone.'), t('Remove'), t('Cancel'));
+  $events = rules_fetch_data('event_info');
+  $event_label = $events[$event]['label'];
+  $confirm_question = t('Are you sure you want to remove the event %event from the %plugin %label?', array('%plugin' => $rules_config->plugin(), '%label' => $rules_config->label(), '%event' => $event_label));
+  return confirm_form($form, $confirm_question, RulesPluginUI::path($rules_config->name), t('This action cannot be undone.'), t('Remove'), t('Cancel'));
 }
 
 /**
@@ -629,3 +639,15 @@ function rules_element_sort_helper($a, $b) {
   }
   return ($a['weight'] < $b['weight']) ? -1 : 1;
 }
+
+/**
+ * Form after build handler to set the static base path.
+ *
+ * @see RulesPluginUI::formDefaults()
+ */
+function rules_base_path_handler($form, &$form_state) {
+  if (isset($form_state['_rules_base_path'])) {
+    RulesPluginUI::$basePath = $form_state['_rules_base_path'];
+  }
+  return $form;
+}
