diff --git a/includes/nodequeue.admin.inc b/includes/nodequeue.admin.inc
index 06fca99..110901b 100644
--- a/includes/nodequeue.admin.inc
+++ b/includes/nodequeue.admin.inc
@@ -430,6 +430,13 @@ function nodequeue_edit_queue_form($form, &$form_state, $queue) {
     '#description' => t('Ordinarily queues are arranged with the front of the queue (where items will be removed) on top and the back (where items will be added) on the bottom. If checked, this will display the queue such that items will be added to the top and removed from the bottom.'),
   );
 
+  $form['insert_at_front'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Insert nodes at front of queue, and delete from the back.'),
+    '#default_value' => $queue->insert_at_front,
+    '#description' => t('Ordinarily items are added at the back of the queue, and excess nodes are removed from the front. If checked, this behaviour is reversed: nodes will be added at the front and removed from the back.'),
+  );
+
   $form['link'] = array(
     '#type' => 'textfield',
     '#title' => t('Link "add to queue" text'),
diff --git a/nodequeue.install b/nodequeue.install
index 2e6417d..9b66bff 100644
--- a/nodequeue.install
+++ b/nodequeue.install
@@ -85,6 +85,12 @@ function nodequeue_schema() {
         'size' => 'tiny',
         'default' => 0,
       ),
+      'insert_at_front' => array(
+        'description' => '',
+        'type' => 'int',
+        'size' => 'tiny',
+        'default' => 0,
+      ),
       'i18n' => array(
         'description' => '',
         'type' => 'int',
@@ -414,3 +420,16 @@ function nodequeue_update_7201() {
     }
   }
 }
+
+/**
+ * Add new field 'insert_at_front'.
+ */
+function nodequeue_update_7202() {
+  $field = array(
+    'description' => '',
+    'type' => 'int',
+    'size' => 'tiny',
+    'default' => 0,
+  );
+  db_add_field('nodequeue_queue', 'insert_at_front', $field);
+}
diff --git a/nodequeue.module b/nodequeue.module
index 5f84cd5..d950630 100644
--- a/nodequeue.module
+++ b/nodequeue.module
@@ -458,6 +458,7 @@ class nodequeue_queue {
 
   var $subqueue_title = '';
   var $reverse = 0;
+  var $insert_at_front = 0;
 
   // runtime
   var $subqueues = array();
@@ -861,6 +862,7 @@ function nodequeue_save(&$queue) {
     'show_in_ui' => $queue->show_in_ui,
     'i18n' => $queue->i18n,
     'reverse' => $queue->reverse,
+    'insert_at_front' => $queue->insert_at_front,
     'reference' => $queue->reference,
   );
 
@@ -1041,7 +1043,16 @@ function nodequeue_remove_subqueue($sqid) {
  */
 function nodequeue_subqueue_add($queue, &$subqueue, $nid) {
   if (!empty($nid)) {
-    db_query("INSERT INTO {nodequeue_nodes} (sqid, qid, nid, position, timestamp) VALUES (:sqid, :qid, :nid, IFNULL((SELECT MAX(position)+1 FROM (SELECT * from {nodequeue_nodes} WHERE sqid = :sqid) as nn), 1), :time)", array(':sqid' => $subqueue->sqid, ':qid' => $queue->qid, ':nid' => $nid, ':time' => REQUEST_TIME));
+    if ($queue->insert_at_front) {
+      db_update('nodequeue_nodes')
+        ->expression('position', 'position + 1')
+        ->condition('sqid', $subqueue->sqid)
+        ->execute();
+      db_query("INSERT INTO {nodequeue_nodes} (sqid, qid, nid, position, timestamp) VALUES (:sqid, :qid, :nid, 1, :time)", array(':sqid' => $subqueue->sqid, ':qid' => $queue->qid, ':nid' => $nid, ':time' => REQUEST_TIME));
+    }
+    else {
+      db_query("INSERT INTO {nodequeue_nodes} (sqid, qid, nid, position, timestamp) VALUES (:sqid, :qid, :nid, IFNULL((SELECT MAX(position)+1 FROM (SELECT * from {nodequeue_nodes} WHERE sqid = :sqid) as nn), 1), :time)", array(':sqid' => $subqueue->sqid, ':qid' => $queue->qid, ':nid' => $nid, ':time' => REQUEST_TIME));
+    }
     $subqueue->count = db_query("SELECT COUNT(nid) FROM {nodequeue_nodes} WHERE sqid = :sqid", array(':sqid' => $subqueue->sqid))->fetchField();
     // If adding this would make the queue too big, pop the front node
     // (or nodes) out.
@@ -1155,7 +1166,12 @@ function nodequeue_check_subqueue_size($queue, &$subqueue, $size = NULL) {
   }
 
   if ($queue->size && $subqueue->count > $size) {
-    nodequeue_subqueue_remove($subqueue->sqid, 1, $subqueue->count - $size);
+    if ($queue->insert_at_front) {
+      nodequeue_subqueue_remove($subqueue->sqid, $size + 1, $subqueue->count);
+    }
+    else {
+      nodequeue_subqueue_remove($subqueue->sqid, 1, $subqueue->count - $size);
+    }
     $subqueue->count = $size;
   }
 }
