diff -prauN /srv/orig/wghtml/wghtml/class_wghtml.php /srv/drupal-5.2/sites/all/modules/wghtml/wghtml/class_wghtml.php
--- /srv/orig/wghtml/wghtml/class_wghtml.php	2007-02-25 03:46:58.000000000 +0100
+++ /srv/drupal-5.2/sites/all/modules/wghtml/wghtml/class_wghtml.php	2007-10-05 03:53:04.000000000 +0200
@@ -144,6 +144,8 @@ class wghtml_page {
     }
 
     $this->status = $status;
+    if ($this->status == 'fetched' || $this->status == 'retrieved' || $this->status == 'refreshed')
+      $this->status = ''; /* silence status as long as everything went ok */
 
     return;
 
diff -prauN /srv/orig/wghtml/wghtml/implement_node_drupal46.php /srv/drupal-5.2/sites/all/modules/wghtml/wghtml/implement_node_drupal46.php
--- /srv/orig/wghtml/wghtml/implement_node_drupal46.php	2007-02-25 03:46:59.000000000 +0100
+++ /srv/drupal-5.2/sites/all/modules/wghtml/wghtml/implement_node_drupal46.php	2007-10-05 11:46:49.000000000 +0200
@@ -60,6 +60,22 @@ class wghtml_implementation extends wght
     }
   }
 
+/*
+ * Delete any information associated with the page id or its file
+ * identity from the database, as if the page had never been seen.
+ */
+  function drop_page() {
+    if (!empty ($this->pageId)) {
+      if ($node = node_load ($this->pageId))
+        delete_node ($node->nid);
+      db_query ('LOCK TABLES {wghtml_pages} WRITE, {wghtml_versions} WRITE');
+      db_query ('DELETE FROM {wghtml_versions} WHERE pageId = %d', $this->pageId);
+      db_query ('DELETE FROM {wghtml_pages} WHERE pageId = %d', $this->pageId);
+      if (!empty ($this->identity))
+        db_query ('DELETE FROM {wghtml_pages} WHERE identity = \'%s\'', $this->identity);
+      db_query ('UNLOCK TABLES');
+    }
+  }
 
 /*
  * Save the page into the cache. As we want the page to be a Drupal node,
@@ -77,7 +93,7 @@ class wghtml_implementation extends wght
       node_save($node);
       $this->pageId = $node->nid;
 
-      // TODO why doesn't this work? db_query('LOCK TABLES {wghtml_versions} WRITE');
+      db_query('LOCK TABLES {wghtml_pages} WRITE, {wghtml_versions} WRITE');
       // TODO should check here that it has still not been created and return if it has
 
       // create page record
@@ -134,9 +150,15 @@ class wghtml_implementation extends wght
     $node->created = $this->signature;
     $node->changed = $this->signature;
     $node->revisions = '';
-    $node->comment = 2;
+    $node->comment = variable_get('comment_'. $node->type, 2);
     $node->format = $this->config[$this->config['implementation']]['format'];
     //  'teaser', 'revisions', 'status', 'promote', 'moderate', 'sticky', 'format');
+    $node_type_default = variable_get('node_options_'. $node->type, array('status', 'promote'));
+    $node->status = in_array('status', $node_type_default);
+    $node->promote = in_array('promote', $node_type_default);
+    $node->sticky = in_array('sticky', $node_type_default);
+    $node->revision = in_array('revision', $node_type_default);
+
     return $node;
   }
 
diff -prauN /srv/orig/wghtml/wghtml.module /srv/drupal-5.2/sites/all/modules/wghtml/wghtml.module
--- /srv/orig/wghtml/wghtml.module	2007-02-25 03:46:54.000000000 +0100
+++ /srv/drupal-5.2/sites/all/modules/wghtml/wghtml.module	2007-10-05 03:46:17.000000000 +0200
@@ -33,8 +33,10 @@ function wghtml_admin_settings() {
   return 'The administration for wgHTML has note been done yet.';
 }
 
-function &_wghtml_get_object() {
+function &_wghtml_get_object ($reuse = TRUE) {
   static $wghtml;
+  if (!$reuse)
+    unset ($wghtml);
   if ( !isset($wghtml) ) {
     require_once dirname(__FILE__).'/wghtml/class_wghtml.php';
     require_once dirname(__FILE__).'/wghtml/implement_'.$GLOBALS['wghtml_config']['implementation'].'.php';
diff -prauN /srv/orig/wghtml/wghtml_node_module.php /srv/drupal-5.2/sites/all/modules/wghtml/wghtml_node_module.php
--- /srv/orig/wghtml/wghtml_node_module.php	2007-02-25 03:46:54.000000000 +0100
+++ /srv/drupal-5.2/sites/all/modules/wghtml/wghtml_node_module.php	2007-10-05 11:48:48.000000000 +0200
@@ -98,9 +98,21 @@ function _wghtml_show($action=false, $fi
   $page =& _wghtml_get_object();
   // get the requested page: $file is usually false so get_page uses the REQUEST_URI from the redirect as a default
   $page->get_page($file);
+  if (empty ($page->pageId)) { // redirect to 404 page for invalid page requests
+    $_REQUEST['destination'] = urldecode ($_SERVER['REQUEST_URI']); // save real request for search404
+    return drupal_not_found();
+  }
 
   // now load the node: the node load hook will add the page to the node
   $node = module_invoke('node', 'load', $page->pageId);
+  if (empty ($node) && $page->pageId) /* might be a deleted node, need page rebuild */
+    {
+      $page->drop_page(); /* delete database traces */
+      /* start over, i.e. unset ->pageId and ->version */
+      $page = &_wghtml_get_object (false);
+      $page->get_page ($file);
+      $node = module_invoke ('node', 'load', $page->pageId);
+    }
   return node_page_view($node);
 
   if ( empty($page->error) ) {
