--- nodequeue.module.old	2010-03-15 02:31:53.000000000 +0100
+++ nodequeue.module	2010-03-15 20:30:15.000000000 +0100
@@ -2206,12 +2206,52 @@ function nodequeue_set_subqueue_position
   if (empty($subqueues)) {
     return;
   }
+
   $placeholders = db_placeholders($subqueues, 'int');
   $args = array_keys($subqueues);
-  $args[] = $nid;
-  $result = db_query("SELECT sqid, MIN(position) AS position FROM {nodequeue_nodes} WHERE sqid IN ($placeholders) AND nid = %d GROUP BY sqid", $args);
-  while ($obj = db_fetch_object($result)) {
-    $subqueues[$obj->sqid]->position = $obj->position;
+
+  if (module_exists('translation_helpers')) {
+    $result = db_query("SELECT sq.sqid, q.i18n FROM {nodequeue_subqueue} sq JOIN {nodequeue_queue} q ON q.qid = sq.qid WHERE sqid IN ($placeholders)", $args);
+    // Define array to store queues with option "Treat translated nodes as a single node"
+    $automatic_queues = array();
+    // Define array to store queues with option "Manually manage translated nodes"
+    $manually_queues = array();
+    while ($obj = db_fetch_object($result)) {
+      if ($obj->i18n) {
+        $automatic_queues[] = $obj->sqid;
+      }
+      else {
+        $manually_queues[] = $obj->sqid;
+      }
+    }
+    if ($automatic_queues) {
+      // We need the nid from the source translation to get the position for the automatically managed queues.
+      if ($node = node_load($nid)) {
+        $args = $automatic_queues;
+        $placeholders = db_placeholders($args, 'int');
+        $args[] = $node->tnid;
+        $result = db_query("SELECT sqid, MIN(position) AS position FROM {nodequeue_nodes} WHERE sqid IN ($placeholders) AND nid = %d GROUP BY sqid", $args);
+        while ($obj = db_fetch_object($result)) {
+          $subqueues[$obj->sqid]->position = $obj->position;
+        }
+      }
+    }
+    if ($manually_queues) {
+      $args = $manually_queues;
+      $placeholders = db_placeholders($args, 'int');
+      $args[] = $nid;
+      $result = db_query("SELECT sqid, MIN(position) AS position FROM {nodequeue_nodes} WHERE sqid IN ($placeholders) AND nid = %d GROUP BY sqid", $args);
+      while ($obj = db_fetch_object($result)) {
+        $subqueues[$obj->sqid]->position = $obj->position;
+      }
+    }
+  }
+  else {
+    $args[] = $nid;
+    $result = db_query("SELECT sqid, MIN(position) AS position FROM {nodequeue_nodes} WHERE sqid IN ($placeholders) AND nid = %d GROUP BY sqid", $args);
+    while ($obj = db_fetch_object($result)) {
+      $subqueues[$obj->sqid]->position = $obj->position;
+    }
   }
 }
 
