diff --git a/includes/nodequeue.admin.inc b/includes/nodequeue.admin.inc
index 2f483c1..6db7d58 100644
--- a/includes/nodequeue.admin.inc
+++ b/includes/nodequeue.admin.inc
@@ -999,6 +999,9 @@ function nodequeue_save_subqueue_order($nodes, $qid, $sqid) {
     nodequeue_check_subqueue_size($queue, $subqueue);
   }
 
+  // Save the queue in order to clear caches.
+  nodequeue_save($queue);
+
   return array(NODEQUEUE_OK, 'The queue has been updated.');
 }
 
diff --git a/nodequeue.module b/nodequeue.module
index 32603dc..109a1a6 100644
--- a/nodequeue.module
+++ b/nodequeue.module
@@ -908,9 +908,6 @@ function nodequeue_save(&$queue) {
   if (!isset($queue->qid)) {
     db_query("INSERT INTO {nodequeue_queue} (title, name, subqueue_title, size, link, link_remove, owner, show_in_links, show_in_tab, show_in_ui, i18n, reverse, reference) VALUES ('%s', '%s', '%s', %d, '%s', '%s', '%s', %d, %d, %d, %d, %d, '%s')", $queue->title, $queue->name, $queue->subqueue_title, $queue->size, $queue->link, $queue->link_remove, $queue->owner, $queue->show_in_links, $queue->show_in_tab, $queue->show_in_ui, $queue->i18n, $queue->reverse, $queue->reference);
     $queue->qid = db_last_insert_id('nodequeue_queue', 'qid');
-    if (function_exists('views_invalidate_cache')) {
-      views_invalidate_cache();
-    }
   }
   else {
     // Allow nodequeue to save and not update the name unless supplied
@@ -953,6 +950,13 @@ function nodequeue_save(&$queue) {
       nodequeue_add_subqueue($queue, $title, $reference);
     }
   }
+
+  // Clear caches.
+  cache_clear_all();
+  if (function_exists('views_invalidate_cache')) {
+    views_invalidate_cache();
+  }
+
   return $queue->qid;
 }
 
