diff --git a/rules_menu/rules_menu.info b/rules_menu/rules_menu.info
new file mode 100644
index 0000000..0438625
--- /dev/null
+++ b/rules_menu/rules_menu.info
@@ -0,0 +1,5 @@
+name = Menu Rules
+description = Provides Rules that are related to menu items
+package = Rules
+core = 7.x
+dependencies[] = rules
diff --git a/rules_menu/rules_menu.module b/rules_menu/rules_menu.module
new file mode 100644
index 0000000..db1a916
--- /dev/null
+++ b/rules_menu/rules_menu.module
@@ -0,0 +1,28 @@
+<?php
+
+/**
+ * @file
+ * Hooks for Menu Rules.
+ */
+
+/**
+ * Implements hook_menu_link_insert().
+ */
+function rules_menu_menu_link_insert($link) {
+  rules_invoke_event('rules_menu_menu_link_insert', $link);
+  rules_invoke_event('rules_menu_menu_link_change', $link, 'insert');
+}
+/**
+ * Implements hook_menu_link_update().
+ */
+function rules_menu_menu_link_update($link) {
+  rules_invoke_event('rules_menu_menu_link_update', $link);
+  rules_invoke_event('rules_menu_menu_link_change', $link, 'update');
+}
+/**
+ * Implements hook_menu_link_delete().
+ */
+function rules_menu_menu_link_delete($link) {
+  rules_invoke_event('rules_menu_menu_link_delete', $link);
+  rules_invoke_event('rules_menu_menu_link_change', $link, 'delete');
+}
diff --git a/rules_menu/rules_menu.rules.inc b/rules_menu/rules_menu.rules.inc
new file mode 100644
index 0000000..1b2fbb3
--- /dev/null
+++ b/rules_menu/rules_menu.rules.inc
@@ -0,0 +1,154 @@
+<?php
+
+/**
+ * @file
+ * Rules Definitions
+ */
+
+/*------------------EVENTS----------------------*/
+/**
+ * Implements hook_rules_event_info().
+ */
+function rules_menu_rules_event_info() {
+  $events = array();
+
+  $events['rules_menu_menu_link_insert'] = array(
+    'label' => t('A menu link was inserted'),
+    'variables' => array(
+      'menu_link' => array('type' => 'menu', 'label' => t('The menu link that was inserted')),
+    ),
+    'group' => t('Menu'),
+  );
+  $events['rules_menu_menu_link_update'] = array(
+    'label' => t('A menu link was updated'),
+    'variables' => array(
+      'menu_link' => array('type' => 'menu', 'label' => t('The menu link that was updated')),
+    ),
+    'group' => t('Menu'),
+  );
+
+  $events['rules_menu_menu_link_delete'] = array(
+    'label' => t('A menu link was deleted'),
+    'variables' => array(
+      'menu_link' => array('type' => 'menu', 'label' => t('The menu link that was deleted')),
+    ),
+    'group' => t('Menu'),
+  );
+  $events['rules_menu_menu_link_change'] = array(
+    'label' => t('A menu link was changed in some way (inserted/updated/deleted)'),
+    'variables' => array(
+      'menu_link' => array('type' => 'menu-link', 'label' => t('The menu link that was changed')),
+      'op' => array('type' => 'text', 'label' => t('The operation that has been executed on the link (insert/update/delete)')),
+    ),
+    'group' => t('Menu'),
+  );
+  return $events;
+}
+/*------------------CONDITIONS----------------------*/
+/**
+ * Implements hook_rules_condition_info().
+ */
+function rules_menu_rules_condition_info() {
+  $conditions = array();
+  $conditions['rules_menu_node_has_menu_entry'] = array(
+    'label' => t('Node has menu entry'),
+    'parameter' => array(
+      'nid' => array(
+        'type' => 'text',
+        'label' => t('Nid'),
+        'default value' => '[node:nid]',
+      ),
+    ),
+    'group' => t('Menu'),
+    'base' => 'rules_menu_node_has_menu_entry',
+  );
+  return $conditions;
+}
+/**
+ * Callback for condition rules_menu_node_has_menu_entry.
+ */
+function rules_menu_node_has_menu_entry($nid) {
+  $query = db_select('menu_links')->condition('link_path', 'node/' . $nid);
+  $num = $query->countQuery()->execute()->fetchField();
+  if($num) {
+    return TRUE;
+  }
+  else {
+    return FALSE;
+  }
+}
+/*------------------ACTIONS----------------------*/
+/**
+ * Implements hook_rules_action_info().
+ */
+function rules_menu_rules_action_info() {
+  $actions = array();
+  $actions['rules_menu_create_item'] = array(
+    'label' => t('Create a menu item for node'),
+    'parameter' => array(
+      'menu_name' => array(
+        'type' => 'text',
+        'label' => t('Menu name (machine-readable)'),
+        'options list' => 'rules_menu_get_menu_names',
+        'default value' => 'main-menu',
+      ),
+      'menu_link_title' => array(
+        'type' => 'text',
+        'label' => t('Menu link title'),
+        'default value' => '[node:title]',
+      ),
+      'nid' => array(
+        'type' => 'text',
+        'label' => 'Nid',
+        'default value' => '[node:nid]',
+      ),
+      'language' => array(
+        'type' => 'text',
+        'label' => 'Language',
+        'default value' => '[node:language]',
+      ),
+    ),
+    'group' => t('Menu'),
+    'base' => 'rules_menu_create_item',
+  );
+  $actions['rules_menu_menu_rebuild'] = array(
+    'label' => t('Rebuild all menus'),
+    'group' => t('Menu'),
+    'base' => 'rules_menu_menu_rebuild',
+  );
+  return $actions;
+}
+/**
+ * Generates option list for action rules_menu_create_item.
+ */
+function rules_menu_get_menu_names() {
+  $menus = menu_load_all();
+  $return = array();
+  foreach ($menus as $menu) {
+    $return[$menu['menu_name']] = $menu['title'];
+  }
+  return $return;
+}
+/**
+ * Callback for action rules_menu_create_item.
+ */
+function rules_menu_create_item($menu_name, $menu_link_title, $nid, $language) {
+  $item = array(
+    'link_title' => $menu_link_title,
+    'menu_name' => $menu_name,
+    'link_path' => 'node/' . $nid,
+    'language' => $language,
+  );
+  menu_link_save($item);
+}
+/**
+ * Callback for action rules_menu_menu_rebuild.
+ */
+function rules_menu_menu_rebuild() {
+  static $done;
+  // Prevents multiple rebuilds during the same page load.
+  if (!$done) {
+    $done = TRUE;
+    menu_rebuild();
+  }
+}
