@@ -254,7 +254,26 @@
   return $outlines;   
 }
 
+/**
+ * Helper function: return an array of available outlines as (volume_id => title).
+ */
+function _list_outlines_parents(){
+  static $outlines_parents = NULL;
+  
+  if (empty($outlines_parents)) { 
+    $result = db_query("SELECT ov.volume_id, ov.title, onodes.nid FROM {outline_volume} AS ov LEFT JOIN {outline_nodes} AS onodes ON (ov.volume_id = onodes.volume_id) WHERE onodes.parent = 0 ORDER BY ov.title ASC");
+    $outlines = array();
+    while ($volume = db_fetch_object($result)) {
+      $outlines_parents[$volume->volume_id] = array(
+        'title' => $volume->title,
+        'nid' => $volume->nid,
+      );
+    }
+  } 
+  return $outlines_parents;   
+}
 
+
 /**
  * Helper function: generate a select form listing available outlines.
  */
@@ -1403,10 +1422,10 @@
 function outline_admin_overview() {
   $output = '';
 
-  $all_outlines = _list_outlines();
+  $all_outlines = _list_outlines_parents();
   $rows = array();
-  foreach ($all_outlines as $nid => $title) {
-    $rows[] = array(l($title, 'node/'. $nid), l(t('administer'), 'admin/content/outline/'. $nid));
+  foreach ($all_outlines as $volume_id => $outline) {
+    $rows[] = array(l($outline['title'], 'node/'. $outline['nid']), l(t('administer'), 'admin/content/outline/'. $outline['nid']));
   }
   if (count($rows)) {
     $headers = array(t('Outline'), t('Operations'));
