diff --git a/smartqueue.install b/smartqueue.install
index b6684e3..10064f3 100644
--- a/smartqueue.install
+++ b/smartqueue.install
@@ -23,6 +23,12 @@ function smartqueue_schema() {
         'size' => 'tiny',
         'default' => 0,
       ),
+      'use_parents_all' => array(
+        'description' => 'Whether a queue is to use all the terms ancestors when displaying the queue selection.',
+        'type' => 'int',
+        'size' => 'tiny',
+        'default' => 0,
+      ),
     ),
     'primary key' => array('name'),
   );
@@ -98,3 +104,17 @@ function smartqueue_update_7002() {
 
   return t('The {smartqueue} table has been cleaned.');
 }
+
+/**
+ * Add use_parents_all.
+ */
+function smartqueue_update_7003() {
+  $spec = array(        
+    'description' => 'Whether a queue is to use all the terms ancestors when displaying the queue selection.',
+    'type' => 'int',
+    'size' => 'tiny',
+    'default' => 0,
+  );
+  db_add_field('smartqueue', 'use_parents_all', $spec);
+}
+
diff --git a/smartqueue.module b/smartqueue.module
index d26c67e..dd84f86 100644
--- a/smartqueue.module
+++ b/smartqueue.module
@@ -37,6 +37,13 @@ function smartqueue_taxonomy_nodequeue_form($queue, &$form) {
     '#default_value' => isset($queue->use_parents) ? $queue->use_parents : 0,
   );
 
+  $form['placeholder']['use_parents_all'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Assume all ancestor terms for hierarchical vocabs'),
+    '#description' => t("Instead of using just the node's terms for nodequeue assignment use all the ancestors of a term in addition. This has no effect if there in non hierarchical vocabularies."),
+    '#default_value' => isset($queue->use_parents_all) ? $queue->use_parents_all : 0,
+  );
+
   $form['subqueue_title'] = array(
     '#type' => 'textfield',
     '#title' => t('Subqueue title'),
@@ -78,6 +85,7 @@ function smartqueue_taxonomy_nodequeue_form_submit_finish($queue, $form_state) {
     db_update('smartqueue')
       ->fields(array(
         'use_parents' => $form_state['values']['use_parents'],
+        'use_parents_all' => $form_state['values']['use_parents_all'],
       ))
       ->condition('name', $queue->name)
       ->execute();
@@ -88,6 +96,7 @@ function smartqueue_taxonomy_nodequeue_form_submit_finish($queue, $form_state) {
       ->fields(array(
         'name' => $queue->name,
         'use_parents' => $form_state['values']['use_parents'],
+        'use_parents_all' => $form_state['values']['use_parents_all'],
       ))
       ->execute();
   }
@@ -120,6 +129,13 @@ function smartqueue_taxonomy_nodequeue_subqueues(&$queue, $node) {
     }
   }
 
+  if (!empty($field_names) && $queue->use_parents_all) {
+    // Replace taxonomy IDs with all their parents'.
+    foreach ($field_names as $field_name => &$tids) {
+      $tids = smartqueue_taxonomy_get_children($tids);
+    }
+  }
+
   // Forbid NO terms being set, but allow
   // various non-terms to be set.
   $empty = TRUE;
@@ -166,9 +182,10 @@ function smartqueue_nodequeue_alter(&$data, $type) {
     case 'load_queues':
       $queues = array_keys($data);
       if (count($queues)) {
-        $result = db_query("SELECT name, use_parents FROM {smartqueue} WHERE name IN (:queues)", array(':queues' => $queues));
+        $result = db_query("SELECT name, use_parents, use_parents_all FROM {smartqueue} WHERE name IN (:queues)", array(':queues' => $queues));
         foreach ($result as $queue) {
           $data[$queue->name]->use_parents = $queue->use_parents;
+          $data[$queue->name]->use_parents_all = $queue->use_parents_all;
         }
       }
       break;
@@ -298,3 +315,21 @@ function smartqueue_taxonomy_get_parents($tids) {
     return array();
   }
 }
+
+
+function smartqueue_taxonomy_get_children($tids) {
+  if ($tids) {
+    $parent_tids = array();
+    foreach ($tids as $tid) {
+      $parent_terms = taxonomy_get_parents_all($tid);
+      $parent_tids[] = $tid;
+      foreach ($parent_terms as $term) {
+        $parent_tids[] = $term->tid;
+      }
+    }
+    return $parent_tids;
+  }
+  else {
+    return array();
+  }
+}
