Index: includes/common.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/common.inc,v
retrieving revision 1.841
diff -u -p -r1.841 common.inc
--- includes/common.inc	30 Dec 2008 16:43:14 -0000	1.841
+++ includes/common.inc	3 Jan 2009 02:11:29 -0000
@@ -3188,9 +3188,10 @@ function drupal_alter($type, &$data) {
  *   The rendered HTML.
  */
 function drupal_render(&$elements) {
-  if (!isset($elements) || (isset($elements['#access']) && !$elements['#access'])) {
+  if (!isset($elements) || (isset($elements['#access']) && !$elements['#access']) || isset($elements['#rendered'])) {
     return NULL;
   }
+  $elements['#rendered'] = TRUE;
 
   // If the default values for this element haven't been loaded yet, populate
   // them.
Index: includes/theme.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/theme.inc,v
retrieving revision 1.458
diff -u -p -r1.458 theme.inc
--- includes/theme.inc	31 Dec 2008 12:02:21 -0000	1.458
+++ includes/theme.inc	3 Jan 2009 02:11:30 -0000
@@ -1991,12 +1991,21 @@ function template_preprocess_node(&$vari
   
   // Render taxonomy links separately.
   $variables['terms']     = !empty($node->content['links']['terms']) ? drupal_render($node->content['links']['terms']) : '';
-  
+  if ($variables['terms']) {
+    unset($node->content['links']['terms']);
+  }
+
   // Render all remaining node links.
   $variables['links']     = !empty($node->content['links']) ? drupal_render($node->content['links']) : '';
+  if ($variables['links']) {
+    unset($node->content['links']);
+  }
   
   // Render any comments.
   $variables['comments']     = !empty($node->content['comments']) ? drupal_render($node->content['comments']) : '';
+  if ($variables['comments']) {
+    unset($node->content['comments']);
+  }
 
   // Render the rest of the node into $content.
   if (!empty($node->content['teaser'])) {
