diff --git a/addons/nodequeue_rules/README.txt b/addons/nodequeue_rules/README.txt
new file mode 100644
index 0000000..93594bc
--- /dev/null
+++ b/addons/nodequeue_rules/README.txt
@@ -0,0 +1,14 @@
+-- SUMMARY --
+
+This module provides a basic rules integration for nodequeue.
+
+
+-- REQUIREMENTS --
+
+ - Nodequeue (http://drupal.org/project/nodequeue)
+ - Rules (http://drupal.org/project/rules)
+
+
+-- INSTALLATION --
+
+Install as usual, see http://drupal.org/node/895232 for further information.
diff --git a/addons/nodequeue_rules/nodequeue_rules.info b/addons/nodequeue_rules/nodequeue_rules.info
new file mode 100644
index 0000000..b6e09e8
--- /dev/null
+++ b/addons/nodequeue_rules/nodequeue_rules.info
@@ -0,0 +1,6 @@
+name = Nodequeue Rules
+core = 7.x
+description = "Provides a basic rules integration for nodequeue."
+package = Nodequeue
+dependencies[] = nodequeue
+dependencies[] = rules
diff --git a/addons/nodequeue_rules/nodequeue_rules.module b/addons/nodequeue_rules/nodequeue_rules.module
new file mode 100644
index 0000000..9ae66ed
--- /dev/null
+++ b/addons/nodequeue_rules/nodequeue_rules.module
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * @file
+ *
+ * @see nodequeue_rules.rules.inc
+ */
+
+/**
+ * Event: Node added to a nodequeue.
+ * Implements hook_nodequeue_add()
+ */
+function nodequeue_rules_nodequeue_add($sqid, $nid) {
+  $subqueue = nodequeue_load_subqueue($sqid);
+  $queue = nodequeue_load($subqueue->qid);
+  $node = node_load($nid);
+  rules_invoke_event('nodequeue_rules_event_add_node', $queue, $node);
+}
+
+/**
+ * Event: Node removed from a nodequeue.
+ * Implements hook_nodequeue_remove()
+ */
+function nodequeue_rules_nodequeue_remove($sqid, $nid) {
+  $subqueue = nodequeue_load_subqueue($sqid);
+  $queue = nodequeue_load($subqueue->qid);
+  $node = node_load($nid);
+  rules_invoke_event('nodequeue_rules_event_remove_node', $queue, $node);
+}
+
+/**
+ * Event: Nodes changed places in the nodequeue
+ * Implements hook_nodequeue_swap()
+ */
+function nodequeue_rules_nodequeue_save_subqueue_order_alter($sqid, $nids) {
+  $subqueue = nodequeue_load_subqueue($sqid);
+  $queue = nodequeue_load($subqueue->qid);
+  $nodes = array();
+  foreach ($nids as $data) {
+    $nodes[] = node_load($data['nid']);
+  }
+  rules_invoke_event('nodequeue_rules_event_save_subqueue_order_alter', $queue, $nodes);
+}
diff --git a/addons/nodequeue_rules/nodequeue_rules.rules.inc b/addons/nodequeue_rules/nodequeue_rules.rules.inc
new file mode 100644
index 0000000..a570a54
--- /dev/null
+++ b/addons/nodequeue_rules/nodequeue_rules.rules.inc
@@ -0,0 +1,171 @@
+<?php
+
+/**
+ * @file
+ * Rules integration for the nodequeue module.
+ */
+
+/**
+ * Implements hook_rules_condition_info()
+ */
+function nodequeue_rules_rules_condition_info() {
+  return array(
+    'nodequeue_node_in_queue' => array(
+      'label' => t('Nodequeue the node belongs to'),
+      'group' => t('Nodequeue'),
+      'parameter' => array(
+        'queue' => array(
+          'type' => 'text',
+          'label' => t('Queue'),
+          'description' => t('The queue where the node was added.'),
+          'options list' => 'nodequeue_rules_get_queue_names',
+        ),
+        'node' => array(
+          'type' => 'node',
+          'label' => t('Node'),
+          'description' => t('The node that was added to the nodequeue.'),
+        ),
+      ),
+    ),
+  );
+}
+
+/**
+ * The callback for the condition 'nodequeue_rules_nodequeue_node_was_added'
+ */
+function nodequeue_node_in_queue($queue_name, $node) {
+  // Note that the order of the parameters is the same as in the declaration of
+  // the condition. Use the same variable names as in the declaration to avoid
+  // confusion.
+  $queue = nodequeue_load_queue_by_name($queue_name);
+  $node_in_queue = db_select('nodequeue_nodes', 'nodequeue_nodes')
+    ->fields('nodequeue_nodes', array('qid', 'nid'))
+    ->condition('nid', $node->nid, '=')
+    ->condition('qid', $queue->qid, '=')
+    ->execute()
+    ->fetchAssoc();
+  // All conditions return TRUE or FALSE.
+  return ($queue->qid == $node_in_queue['qid']) ? TRUE : FALSE;
+}
+
+/**
+* Implementation of hook_rules_event_info().
+*/
+function nodequeue_rules_rules_event_info() {
+  return array(
+    //Event: Node added to a nodequeue
+    'nodequeue_rules_event_add_node' => array(
+      'label' => t('After adding a node to a nodequeue'),
+      'group' => t('Nodequeue'),
+      'variables' => array(
+        'queue' => array('type' => 'text', 'label' => t('nodequeue the node was added in')),
+        'node' => array('type' => 'node', 'label' => t('the node that was added')),
+      ),
+    ),
+    'nodequeue_rules_event_remove_node' => array(
+      'label' => t('After removing a node from a nodequeue'),
+      'group' => t('Nodequeue'),
+      'variables' => array(
+        'queue' => array('type' => 'text', 'label' => t('nodequeue the node was removed from')),
+        'node' => array('type' => 'node', 'label' => t('the node that was removed')),
+      ),
+    ),
+    'nodequeue_rules_event_save_subqueue_order_alter' => array(
+      'label' => t('After swapping nodes in a nodequeue'),
+      'group' => t('Nodequeue'),
+      'variables' => array(
+        'queue' => array('type' => 'text', 'label' => t('nodequeue the nodes were swapped in')),
+        'nodes' => array('type' => 'nodes', 'label' => t('the nodes that were swapped')),
+      ),
+    ),
+  );
+}
+
+/**
+ * Implements hook_rules_action_info().
+ */
+function nodequeue_rules_rules_action_info() {
+  return array(
+    // Action: Add a given node to the given nodequeue.
+    'nodequeue_rules_action_add_node' => array(
+      'label' => t('Add node to nodequeue'),
+      'group' => t('Nodequeue'),
+      'parameter' => array(
+        'node' => array(
+          'type' => 'node',
+          'label' => t('Node'),
+          'description' => t('The node you want to add.'),
+        ),
+        'queue' => array(
+          'type' => 'text',
+          'label' => t('Queue'),
+          'description' => t('The queue where the node should be added to.'),
+          'options list' => 'nodequeue_rules_get_queue_names',
+        ),
+      ),
+    ),
+    // Action: Remove the given node from the given nodequeue.
+    'nodequeue_rules_action_remove_node' => array(
+      'label' => t('Remove node from nodequeue'),
+      'group' => t('Nodequeue'),
+      'parameter' => array(
+        'node' => array(
+          'type' => 'node',
+          'label' => t('Node'),
+          'description' => t('The node you want to remove.'),
+        ),
+        'queue' => array(
+          'type' => 'text',
+          'label' => t('Queue'),
+          'description' => t('The queue where the node should be removed from.'),
+          'options list' => 'nodequeue_rules_get_queue_names',
+        ),
+      ),
+    ),
+  );
+}
+
+/**
+ * Action: Add the given node to the given nodequeue.
+ */
+function nodequeue_rules_action_add_node($node, $queue_name) {
+  $queue = nodequeue_load_queue_by_name($queue_name);
+  $smartqueue_enabled = function_exists('smartqueue_taxonomy_nodequeue_subqueues') ? TRUE : FALSE;
+  if ($smartqueue_enabled) {
+    $references = smartqueue_taxonomy_nodequeue_subqueues($queue, $node);
+  }
+  $subqueues = nodequeue_load_subqueues_by_queue($queue->qid);
+  foreach($subqueues as $subqueue) {
+    if ($smartqueue_enabled) {
+      if (in_array($subqueue->reference, $references)) {
+        nodequeue_subqueue_add($queue, $subqueue, $node->nid);
+      }
+    }
+    else {
+      nodequeue_subqueue_add($queue, $subqueue, $node->nid);
+    }
+  }
+}
+
+/**
+ * Action: Remove the given node from the given nodequeue.
+ */
+function nodequeue_rules_action_remove_node($node, $queue_name) {
+  $queue = nodequeue_load_queue_by_name($queue_name);
+  $subqueue = array_shift(nodequeue_load_subqueues_by_queue($queue->qid));
+  if (!$queue->i18n || (isset($node->tnid) && empty($node->tnid))) {
+    nodequeue_subqueue_remove_node($subqueue->qid, $node->nid);
+  }
+}
+
+/**
+ * Return a list of nodequeue names.
+ */
+function nodequeue_rules_get_queue_names() {
+  $items = array();
+  $queues = nodequeue_load_queues(nodequeue_get_all_qids());
+  foreach ($queues as $queue) {
+    $items[$queue->name] = $queue->title;
+  }
+  return $items;
+}
