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
diff --git a/views_content_cache.module b/views_content_cache.module
index 253926e..c3554a3 100644
--- a/views_content_cache.module
+++ b/views_content_cache.module
@@ -60,6 +60,30 @@ 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($sqid, $nodes) {
+  $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 +472,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(
