--- node.module.orig	2005-05-26 22:34:37.017636732 +0200
+++ node.module	2005-05-26 23:23:16.399222579 +0200
@@ -32,8 +32,8 @@
       <dt>Published</dt><dd>When using Drupal's moderation system a node remains unpublished -- unavailable to non-moderators -- until it is marked Published.</dd></dl>
       <p>Now that you know what is in a node, here are some of the types of nodes available.</p>", array("%teaser" => url("admin/node/configure/settings")));
 
-      foreach (node_list() as $type) {
-        $output .= '<h3>'. t('Node type: %module', array('%module' => node_invoke($type, 'node_name'))). '</h3>';
+      foreach (node_name_list() as $type => $node_name) {
+        $output .= '<h3>'. t('Node type: %module', array('%module' => $node_name)). '</h3>';
         $output .= implode("\n", module_invoke_all('help', 'node/add#'. $type));
       }
 
@@ -291,6 +291,24 @@
 }
 
 /**
+ * Get a list of all the defined node types, sorted by node name.
+ *
+ * @return
+ *   An associative array in which the keys are node types, and the values
+ *   are the node names.
+ */
+function node_name_list() {
+  $node_types = array();
+  foreach (node_list() as $type) {
+    $node_name = node_invoke($type, 'node_name');
+    $node_types[$type] = $node_name ? $node_name : $type;
+  }
+  asort($node_types);
+  reset($node_types);
+  return $node_types;
+}
+
+/**
  * Determine whether a node hook exists.
  *
  * @param &$node
@@ -804,10 +822,7 @@
   /*
   ** Filters
   */
-  $node_types = drupal_map_assoc(node_list());
-  foreach ($node_types as $k => $v) {
-    $node_types[$k] = node_invoke($v, 'node_name');
-  }
+  $node_types = node_name_list();
   // Regular filters
   $filters = array(
     'status'   => array('title' => t('status'),
@@ -974,8 +989,8 @@
     $header = array(t('Type'), t('Operations'));
 
     $rows = array();
-    foreach (node_list() as $type) {
-      $rows[] = array(node_invoke($type, 'node_name'), l(t('configure'), 'admin/node/configure/types/'. $type));
+    foreach (node_name_list() as $type => $node_name) {
+      $rows[] = array($node_name, l(t('configure'), 'admin/node/configure/types/'. $type));
     }
 
     print theme('page', theme('table', $header, $rows));
@@ -1423,13 +1438,13 @@
   }
   else {
     // If no (valid) node type has been provided, display a node type overview.
-    foreach (node_list() as $type) {
+    foreach (node_name_list() as $type => $node_name) {
       if (node_access('create', $type)) {
         $out = '<li>';
-        $out .= ' '. l(node_invoke($type, 'node_name'), "node/add/$type", array('title' => t('Add a new %s.', array('%s' => node_invoke($type, 'node_name')))));
+        $out .= ' '. l($node_name, "node/add/$type", array('title' => t('Add a new %s.', array('%s' => $node_name))));
         $out .= " <div style=\"margin-left: 20px;\">". implode("\n", module_invoke_all('help', 'node/add#'. $type)) .'</div>';
         $out .= '</li>';
-        $item[node_invoke($type, 'node_name')] = $out;
+        $item[$node_name] = $out;
       }
     }
 
