diff --git a/relativity.module b/relativity.module
--- a/relativity.module
+++ b/relativity.module
@@ -425,6 +425,14 @@
     '#size' => 60,
     '#maxlength' => 250,
   );
+  
+  $group['global_options']['relativity_descendants_label'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Label for "Descendant nodes"'),
+    '#default_value' => variable_get('relativity_descendants_label', t('Descendant nodes')),
+    '#size' => 60,
+    '#maxlength' => 250,
+  );
 
   $group['global_options']['relativity_actions_label'] = array(
     '#type' => 'textfield',
@@ -625,6 +633,15 @@
       '#maxlength' => 4,	
       '#default_value' => variable_get('relativity_'.$type.'_children_weight', 11),
     );
+    
+    $group['node_'.$type.'_options']['relativity_'.$type.'_descendants_weight'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Descendant nodes weight'),
+      '#description' => t('Enter 0 for no display'), 	
+      '#size' => 4,
+      '#maxlength' => 4,	
+      '#default_value' => variable_get('relativity_'.$type.'_descendants_weight', 0),
+    );
 
     $group['node_'.$type.'_options']['relativity_'.$type.'_operations_weight'] = array(
       '#type' => 'textfield',
@@ -690,6 +707,7 @@
       $blocks[1]['info'] = t('Node relativity: children');
       $blocks[2]['info'] = t('Node relativity: parent');
       $blocks[3]['info'] = t('Node relativity: link operations');
+      $blocks[4]['info'] = t('Node relativity: descendants');
       return $blocks;
 
     case 'configure':
@@ -766,6 +784,13 @@
                                );
               }
               break;
+            case 4:
+              $descendants = relativity_load_descendants($node, true);
+              if (count($descendants) > 0) {
+                $block = array('subject' => variable_get('relativity_descendants_label', t('Related Descendants')),
+                               'content' => theme('relativity_block_descendants', $descendants)
+                               );
+              }
           }
         }
       }  
@@ -833,6 +858,38 @@
       }
     } while($keep_going);
     return $ancestors;
+  }
+}
+
+
+/**
+ * Generate an array of descendants for the given node.
+ * This will keep looking for more descendants until a circular path was found.
+ * The output will be an array of the form
+ *   array([nid] => childs), 
+ * childs being itself an array, eventually empty if the node has no child.
+ */
+function relativity_load_descendants($node, $block=FALSE, $nids = null) {
+  if (is_numeric($node->nid)) {
+    $descendants = array();
+    if (is_null($nids)) {
+      $nids = array($node->nid);
+    }
+    $allowed_types = variable_get('relativity_allow_types', array());
+    if ($block == TRUE) {
+      $allowed_types = variable_get('relativity_nav_types', $allowed_types);
+    }
+	
+    $result = db_query("SELECT nid from {relativity} where parent_nid=%d", $node->nid);
+    while ($obj = db_fetch_object($result)) {
+        // make an array of nodes to display at this level
+        $child_node = node_load($obj->nid);
+        if (!in_array($obj->nid, $nids) && node_access('view', $child_node) && in_array($child_node->type, $allowed_types)) {
+          $nids[] = $obj->nid;
+          $descendants[$obj->nid] = relativity_load_descendants($obj, $block, $nids);
+        }
+    }
+    return $descendants;
   }
 }
 
@@ -1087,6 +1144,14 @@
       if ($w = variable_get('relativity_'.$node->type.'_children_weight', 11)) {
         $node->content['relativity_children'] = array(
           '#value' => theme('relativity_show_children', $node),
+          '#weight' => $w,
+        );
+      }
+      
+      if ($w = variable_get('relativity_'.$node->type.'_descendants_weight', 0)) {
+        $descendants = relativity_load_descendants($node);
+        $node->content['relativity_children'] = array(
+          '#value' => theme('relativity_show_descendants', $descendants),
           '#weight' => $w,
         );
       }
@@ -1540,6 +1605,21 @@
   return $output;
 }
 
+function theme_relativity_show_descendants($descendants, $fieldset=1, $indent=0) {
+  $output = '';
+  foreach($descendants as $nid => $childs) {
+    $child = node_load($nid); // This is cheap, we already loaded the node
+                              // so it's in cache.
+    $output .= theme('relativity_ancestor', $child, $indent);
+    $output .= theme('relativity_show_descendants', $childs, 0, $indent + 1);
+  }
+  if($fieldset && $output) {
+    $output = theme('fieldset', array('#title' => variable_get('relativity_descendants_label', t('Descendant nodes')),
+                                      '#children' => $output));
+  }
+  return $output;
+}
+
 
 
 
@@ -1636,6 +1716,10 @@
   return theme('relativity_show_ancestors', $node, $ancestors, 0);
 }
 
+function theme_relativity_block_descendants($descendants) {
+  return theme('relativity_show_descendants', $descendants, 0);
+}
+
 function theme_relativity_block_link_operations($parent) {
   return theme('relativity_show_link_operations', $parent, 0);
 }
