Index: blog.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/blog.module,v
retrieving revision 1.226
diff -u -F^f -r1.226 blog.module
--- blog.module	7 Sep 2005 20:17:18 -0000	1.226
+++ blog.module	12 Sep 2005 15:22:51 -0000
@@ -183,12 +183,21 @@ function blog_page_last() {
 }
 
 /**
+ * Implementation of hook_validate().
+ */
+function blog_validate(&$node) {
+  node_validate_title($node);
+}
+
+/**
  * Implementation of hook_form().
  */
 function blog_form(&$node) {
   global $nid;
   $iid = $_GET['iid'];
 
+  $output = form_textfield(t('Title'), 'title', $node->title, 60, 128, NULL, NULL, TRUE);
+
   if (empty($node->body)) {
     /*
     ** If the user clicked a "blog it" link, we load the data from the
Index: book.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/book.module,v
retrieving revision 1.315
diff -u -F^f -r1.315 book.module
--- book.module	6 Sep 2005 18:55:41 -0000	1.315
+++ book.module	12 Sep 2005 15:22:52 -0000
@@ -225,13 +225,16 @@ function book_validate(&$node) {
     $node->weight = 0;
     $node->revision = 1;
   }
+
+  node_validate_title($node);
 }
 
 /**
  * Implementation of hook_form().
  */
 function book_form(&$node) {
-  $output = form_select(t('Parent'), 'parent', ($node->parent ? $node->parent : arg(4)), book_toc($node->nid), t('The parent that this page belongs in. Note that pages whose parent is &lt;top-level&gt; are regarded as independent, top-level books.'));
+  $output = form_textfield(t('Title'), 'title', $node->title, 60, 128, NULL, NULL, TRUE);
+  $output .= form_select(t('Parent'), 'parent', ($node->parent ? $node->parent : arg(4)), book_toc($node->nid), t('The parent that this page belongs in. Note that pages whose parent is &lt;top-level&gt; are regarded as independent, top-level books.'));
 
   if (function_exists('taxonomy_node_form')) {
     $output .= implode('', taxonomy_node_form('book', $node));
Index: forum.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/forum.module,v
retrieving revision 1.269
diff -u -F^f -r1.269 forum.module
--- forum.module	8 Sep 2005 19:22:28 -0000	1.269
+++ forum.module	12 Sep 2005 15:22:53 -0000
@@ -517,6 +517,8 @@ function forum_validate(&$node) {
   // Make sure all fields are set properly:
   $node->icon = $node->icon ? $node->icon : '';
 
+  node_validate_title($node);
+
   if ($node->taxonomy) {
     // Extract the node's proper topic ID.
     $vocabulary = variable_get('forum_nav_vocabulary', '');
@@ -558,6 +560,8 @@ function forum_update($node) {
  * Implementation of hook_form().
  */
 function forum_form(&$node) {
+  $output = form_textfield(t('Subject'), 'title', $node->title, 60, 128, NULL, NULL, TRUE);
+
   if (!$node->nid) {
     // new topic
     $node->taxonomy[] = arg(3);
@@ -566,7 +570,7 @@ function forum_form(&$node) {
     $node->taxonomy = array($node->tid);
   }
 
-  $output = implode('', taxonomy_node_form('forum', $node));
+  $output .= implode('', taxonomy_node_form('forum', $node));
 
   if ($node->nid) {
     // if editing, give option to leave shadows
Index: node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node.module,v
retrieving revision 1.527
diff -u -F^f -r1.527 node.module
--- node.module	2 Sep 2005 02:11:41 -0000	1.527
+++ node.module	12 Sep 2005 15:22:55 -0000
@@ -1213,13 +1213,6 @@ function node_validate($node) {
   // Convert the node to an object, if necessary.
   $node = array2object($node);
 
-  // Validate the title field.
-  if (isset($node->title)) {
-    if (trim($node->title) == '') {
-      form_set_error('title', t('You have to specify a title.'));
-    }
-  }
-
   // Make sure the body has the minimum number of words.
   // todo use a better word counting algorithm that will work in other languages
   if (isset($node->body) && count(explode(' ', $node->body)) < variable_get('minimum_'. $node->type .'_size', 0)) {
@@ -1296,6 +1289,18 @@ function node_validate($node) {
 }
 
 /**
+ * Validate the title of a node
+ */
+function node_validate_title($node) {
+  // Validate the title field.
+  if (isset($node->title)) {
+    if (trim($node->title) == '') {
+      form_set_error('title', t('You have to specify a title.'));
+    }
+  }
+}
+
+/**
  * Generate the node editing form.
  */
 function node_form($edit) {
@@ -1349,9 +1354,8 @@ function node_form($edit) {
     $output .= $extras ? '<div class="extra">'. $extras .'</div></div>' : '</div>';
   }
 
-  // Add the default fields.
+  // Open the enclosing div.
   $output .= '<div class="standard">';
-  $output .= form_textfield(t('Title'), 'title', $edit->title, 60, 128, NULL, NULL, TRUE);
 
   // Add the node-type-specific fields.
   $output .= $form;
Index: page.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/page.module,v
retrieving revision 1.136
diff -u -F^f -r1.136 page.module
--- page.module	30 Aug 2005 15:22:29 -0000	1.136
+++ page.module	12 Sep 2005 15:22:55 -0000
@@ -64,9 +64,18 @@ function page_menu($may_cache) {
 }
 
 /**
+ * Implementation of hook_validate().
+ */
+function page_validate(&$node) {
+  node_validate_title($node);
+}
+
+/**
  * Implementation of hook_form().
  */
 function page_form(&$node) {
+  $output = form_textfield(t('Title'), 'title', $node->title, 60, 128, NULL, NULL, TRUE);
+
   if (function_exists('taxonomy_node_form')) {
     $output .= implode('', taxonomy_node_form('page', $node));
   }
Index: story.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/story.module,v
retrieving revision 1.170
diff -u -F^f -r1.170 story.module
--- story.module	29 Aug 2005 19:58:49 -0000	1.170
+++ story.module	12 Sep 2005 15:22:55 -0000
@@ -64,10 +64,17 @@ function story_menu($may_cache) {
 }
 
 /**
+ * Implementation of hook_validate().
+ */
+function story_validate(&$node) {
+  node_validate_title($node);
+}
+
+/**
  * Implementation of hook_form().
  */
 function story_form(&$node) {
-  $output = '';
+  $output = form_textfield(t('Title'), 'title', $node->title, 60, 128, NULL, NULL, TRUE);
 
   if (function_exists('taxonomy_node_form')) {
     $output .= implode('', taxonomy_node_form('story', $node));
