diff --git a/conditional_fields.module b/conditional_fields.module
index 06e7737..81e2456 100644
--- a/conditional_fields.module
+++ b/conditional_fields.module
@@ -501,7 +501,16 @@ function conditional_fields_form_after_build($form, &$form_state) {
         $values = array();
 
         if ($options['values_set'] == CONDITIONAL_FIELDS_DEPENDENCY_VALUES_WIDGET) {
-          $values[$options['condition']] = $options['value_form'];
+          // If we consider children, build it like a dynamic OR condition.
+          if (isset($options['children']) && $options['children']) {
+            $values[] = array($options['condition'] => $options['value_form']);
+            $children = taxonomy_get_children($options['value_form']);
+            foreach (array_keys($children) as $key) {
+              $values[] = array($options['condition'] => $key);
+            }
+          } else {
+            $values[$options['condition']] = $options['value_form'];
+          }
         }
         elseif ($options['values_set'] == CONDITIONAL_FIELDS_DEPENDENCY_VALUES_REGEX) {
           $values[$options['condition']] = $options['value'];
@@ -1035,6 +1044,21 @@ function conditional_fields_evaluate_dependencies($dependent, $form, $form_state
 function conditional_fields_evaluate_dependency($context, $values, $options) {
   if ($options['values_set'] == CONDITIONAL_FIELDS_DEPENDENCY_VALUES_WIDGET) {
     $dependency_values = $context == 'view' ? $options['value'] : $options['value_form'];
+    $children = isset($options['children']) && $options['children'];
+
+    if ($children) {
+      $is_array = is_array($dependency_values);
+      $parent = $is_array ? $dependency_values[0]['target_id'] : $dependency_values;
+      if (!$is_array) {
+        $dependency_values = array((string) $parent);
+      }
+      // Yes, childs is a typo. But it's to differentiate it from the $children
+      // boolean.
+      $childs = taxonomy_get_children($parent);
+      foreach (array_keys($childs) as $key) {
+        $dependency_values[] = $is_array ? array('target_id' => (string) $key) : (string) $key;
+      }
+    }
 
     // Simple case: both values are strings or integers. Should never happen in
     // view context, but does no harm to check anyway.
@@ -1056,7 +1080,7 @@ function conditional_fields_evaluate_dependency($context, $values, $options) {
       // If $values is a string and $dependency_values an array, convert $values
       // to the standard field array form format. This covers cases like single
       // value textfields.
-      $values = array(array('value' => $values));
+      $values = $children ? array(array('target_id' => $values)) : array(array('value' => $values));
     }
 
     // If we are in form context, we are almost done.
@@ -1068,16 +1092,29 @@ function conditional_fields_evaluate_dependency($context, $values, $options) {
         $dependency_values = array(array($key => $dependency_values));
       }
 
-      // Compare arrays recursively ignoring keys, since multiple select widgets
-      // values have numeric keys in form format and string keys in storage
-      // format.
-      return array_values($dependency_values) == array_values($values);
+      if ($children) {
+        // Check that the "allowed" array contains the value of the field.
+        return in_array($values[0]['target_id'], $dependency_values);
+      } else {
+        // Compare arrays recursively ignoring keys, since multiple select widgets
+        // values have numeric keys in form format and string keys in storage
+        // format.
+        return array_values($dependency_values) == array_values($values);
+      }
+    }
+
+    if ($children) {
+      foreach ($values as &$value) {
+        $value = array_intersect_key($value, $dependency_values[0]);
+      }
+
+      return in_array($values[0], $dependency_values);
     }
 
     // $values, when viewing fields, may contain all sort of additional
     // information, so filter out from $values the keys that are not present in
     // $dependency_values.
-    // Values here are alway keyed by delta (regardless of multiple value
+    // Values here are always keyed by delta (regardless of multiple value
     // settings).
     foreach ($values as $delta => &$value) {
       if (isset($dependency_values[$delta])) {
@@ -1898,6 +1935,16 @@ function conditional_fields_dependency_description($dependee_name, $dependent_na
     switch ($options['values_set']) {
       case CONDITIONAL_FIELDS_DEPENDENCY_VALUES_WIDGET:
         if (count($options['value']) == 1) {
+          // It's a taxonomy term and we consider the children as well.
+          if (isset($options['children']) && $options['children']) {
+            return t('%dependent_name is !state when %dependee_name has value "@value" or a child\'s value.', array(
+              '%dependent_name' => $dependent_name,
+              '!state' => drupal_strtolower($states[$options['state']]),
+              '%dependee_name' => $dependee_name,
+              '@value' => current($options['value'][0]),
+            ));
+          }
+
           return t('%dependent_name is !state when %dependee_name has value "@value".', array(
             '%dependent_name' => $dependent_name,
             '!state' => drupal_strtolower($states[$options['state']]),
diff --git a/includes/conditional_fields.admin.inc b/includes/conditional_fields.admin.inc
index bf790f0..ff38782 100644
--- a/includes/conditional_fields.admin.inc
+++ b/includes/conditional_fields.admin.inc
@@ -387,6 +387,7 @@ function conditional_fields_dependency_edit_form($form, &$form_state, $dependenc
   $instances = field_read_instances(array('id' => $dependency['dependee']));
   $dependee_instance = array_shift($instances);
   $dependee = field_info_field($dependee_instance['field_name']);
+  $dependee_settings = $dependee['settings'];
 
   // Build a dummy field widget to use as form field in single value selection
   // option.
@@ -454,6 +455,16 @@ function conditional_fields_dependency_edit_form($form, &$form_state, $dependenc
     'field' => $dummy_field,
   );
 
+  // If we point to an taxonomy term, include parents.
+  if (($dependee['type'] == 'entityreference' && $dependee_settings['target_type'] == 'taxonomy_term')) {
+    $form['value']['children'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Include child terms?'),
+      '#description' => t('Are child terms allowed to trigger this dependency?'),
+      '#default_value' => isset($dependency['options']['children']) ? $dependency['options']['children'] : FALSE,
+    );
+  }
+
   $form['values'] = array(
     '#type' => 'textarea',
     '#title' => t('Set of values'),
@@ -782,6 +793,9 @@ function conditional_fields_dependency_edit_form_submit($form, &$form_state) {
       $value = array();
       field_default_extract_form_values(NULL, NULL, array('field_name' => $dependee), NULL, LANGUAGE_NONE, $value, $form['value']['field'], $form_state);
       $dependency['options']['value'] = $value;
+      if (isset($form_state['values']['value']['children'])) {
+        $dependency['options']['children'] = $form_state['values']['value']['children'];
+      }
     }
     elseif ($dependency['options']['values_set'] == CONDITIONAL_FIELDS_DEPENDENCY_VALUES_REGEX) {
       // The regular expression is inserted in an associative array, so it will
