diff --git a/rules_link.admin.inc b/rules_link.admin.inc
index 0cac85c..7aa93c0 100644
--- a/rules_link.admin.inc
+++ b/rules_link.admin.inc
@@ -584,11 +584,3 @@ function rules_link_component_form_submit(&$form, &$form_state) {
 
   drupal_set_message(t('Your Rules Link components has been saved.'));
 }
-
-/**
- * Implements hook_rules_link_delete to delete the condition and rule set.
- */
-function rules_link_rules_link_delete(RulesLink $rules_link) {
-  rules_link_load_condition_set($rules_link)->delete();
-  rules_link_load_rules_set($rules_link)->delete();
-}
\ No newline at end of file
diff --git a/rules_link.module b/rules_link.module
index 1b280d2..10ba738 100644
--- a/rules_link.module
+++ b/rules_link.module
@@ -228,16 +228,38 @@ class RulesLink extends Entity {
   public function __construct($values = array()) {
     parent::__construct($values, 'rules_link');
   }
+}
+
+/**
+ * Implements hook_rules_link_insert().
+ */
+function rules_link_rules_link_insert($link) {
+  // Do not directly issue menu rebuilds here to avoid potentially multiple
+  // rebuilds. Instead, let menu_get_item() issue the rebuild on the next page.
+  variable_set('menu_rebuild_needed', TRUE);
+}
 
-  /**
-   * Override save function.
-   */
-  public function save() {
-    parent::save();
-    menu_rebuild();
+/**
+ * Implements hook_rules_link_update().
+ */
+function rules_link_rules_link_update($link) {
+  // Make sure to only issue menu rebuilds if necessary.
+  // @see rules_link_rules_link_insert()
+  if (!empty($link->original) && ($link->path != $link->original->path || $link->settings['link_type'] != $link->original->settings['link_type'])) {
+    variable_set('menu_rebuild_needed', TRUE);
   }
 }
 
+/**
+ * Implements hook_rules_link_delete().
+ */
+function rules_link_rules_link_delete($link) {
+  // @see rules_link_rules_link_insert()
+  variable_set('menu_rebuild_needed', TRUE);
+  // Delete associate rule configs.
+  rules_link_load_condition_set($link)->delete();
+  rules_link_load_rules_set($link)->delete();
+}
 
 /**
  * Generates a token used to protect links from spoofing.
