diff --git a/views_content_cache.module b/views_content_cache.module
index 253926e..21bcd09 100644
--- a/views_content_cache.module
+++ b/views_content_cache.module
@@ -60,6 +60,44 @@ function views_content_cache_votingapi_results($cached, $content_type, $content_
 }
 
 /**
+ * Implementation of hook_nodequeue_add().
+ */
+function views_content_cache_nodequeue_add($sqid, $nid) {
+  $subqueue = nodequeue_load_subqueue($sqid);
+  views_content_cache_update_set($subqueue, 'nodequeue');
+}
+
+/**
+ * Implementation of hook_nodequeue_remove().
+ */
+function views_content_cache_nodequeue_remove($sqid, $nid) {
+  $subqueue = nodequeue_load_subqueue($sqid);
+  views_content_cache_update_set($subqueue, 'nodequeue');
+}
+
+/**
+ * Implementation of hook_nodequeue_sort_alter().
+ */
+function views_content_cache_nodequeue_sort_alter($nodes, $sqid) {
+  /**
+   * In Nodequeue 6.2.11 this changed from a module hook invoked
+   * via module_invoke_all() to a drupal alter hook invoked
+   * via drupal_alter(). In this change the parameter order was
+   * swapped so the logic below attempts to handle both the old
+   * and new versions of Nodequeue.
+   */
+  // Pre 6.2.11
+  if (!is_array($nodes) && is_numeric($nodes)) {
+    $tmp = $sqid;
+    $sqid = $nodes;
+    $nodes = $tmp;
+  }
+
+  $subqueue = nodequeue_load_subqueue($sqid);
+  views_content_cache_update_set($subqueue, 'nodequeue');
+}
+
+/**
  * Create one or more update records for the given object.
  *
  * @param object $object
@@ -449,6 +487,18 @@ function views_content_cache_views_content_cache_plugins() {
       ),
     );
   }
+  if (module_exists('nodequeue')) {
+    $plugins['nodequeue'] = array(
+      'title' => t('Nodequeue'),
+      'description' => t('Invalidates cache when a nodequeue is altered'),
+      'handler' => array(
+        'path' => drupal_get_path('module', 'views_content_cache') . '/plugins',
+        'file' => 'nodequeue.inc',
+        'class' => 'views_content_cache_key_nodequeue',
+        'parent' => 'base',
+      ),
+    );
+  }
   if (module_exists('votingapi')) {
     $plugins['votingapi'] = array(
       'handler' => array(
diff --git a/plugins/nodequeue.inc b/plugins/nodequeue.inc
new file mode 100644
index 0000000..c134eab
--- /dev/null
+++ b/plugins/nodequeue.inc
@@ -0,0 +1,33 @@
+<?php
+
+class views_content_cache_key_nodequeue extends views_content_cache_key {
+  function options_form($value, &$handler) {
+    // Get list of nodequeues
+    $options = array();
+    $subqueues = nodequeue_load_subqueues_by_queue(nodequeue_get_all_qids());
+    foreach ($subqueues as $sqid => $subqueue) {
+      $options[$sqid] = $subqueue->title;
+    }
+    natcasesort($options);
+
+    return array(
+      '#title' => t('Nodequeues'),
+      '#description' => t('Checks for changes to nodequeues for the selected queues.'),
+      '#type' => 'checkboxes',
+      '#options' => $options,
+      '#default_value' => $value,
+      '#weight' => -10,
+    );
+  }
+
+  function content_key($object, $object_type) {
+    if ($object_type === 'nodequeue') {
+      return $object->sqid;
+    }
+  }
+
+  function clause_mode() {
+    // We can't be combined with other cache segments:
+    return 'OR';
+  }
+}
\ No newline at end of file
