diff --git a/includes/nodequeue.admin.inc b/includes/nodequeue.admin.inc
index 7efa512..c5788b9 100644
--- a/includes/nodequeue.admin.inc
+++ b/includes/nodequeue.admin.inc
@@ -868,7 +868,7 @@ function nodequeue_arrange_subqueue_form($form, $form_state, $queue, $nodes, $su
  */
 function nodequeue_arrange_subqueue_form_validate($form, &$form_state) {
   $positions = array();
-  foreach ($form_state['values'] as $nid => $element) {
+  foreach ($form_state['values']['nodes'] as $nid => $element) {
     if (is_numeric($nid) && is_numeric($element['position'])) {
       $positions[$nid] = $element['position'];
     }
@@ -877,7 +877,7 @@ function nodequeue_arrange_subqueue_form_validate($form, &$form_state) {
     $seen = array();
     foreach ($positions as $nid => $position) {
       if (isset($seen[$position])) {
-        form_set_error($nid . '][position', t('Duplicate position value.'));
+        form_set_error('nodes][' . $nid . '][position', t('Duplicate position value.'));
       }
       $seen[$position] = TRUE;
     }
diff --git a/nodequeue_dragdrop.js b/nodequeue_dragdrop.js
index 406b76f..cbf8f97 100644
--- a/nodequeue_dragdrop.js
+++ b/nodequeue_dragdrop.js
@@ -160,8 +160,9 @@ function nodequeueUpdateNodePositions(table_id) {
   var reverse = Drupal.settings.nodequeue.reverse[table_id.replace(/-/g, '_')];
   var size = reverse ? $('#' + table_id + ' .node-position').size() : 1;
 
-  $('#' + table_id + ' tr').filter(":visible").find('.node-position').each(function(i) {
+  $('#' + table_id + ' tr').filter(":visible").find('select.node-position').each(function(i) {
     $(this).val(size);
+    $(this).find("option[value='" + size + '"]').attr('selected', 'selected');
     reverse ? size-- : size++;
   });
 }
