diff -rupN content.module content.module
--- content.module	2009-01-26 15:45:34.000000000 +0100
+++ content.module	2009-02-02 17:32:21.000000000 +0100
@@ -420,22 +420,17 @@ function content_nodeapi(&$node, $op, $a
     // Special case for 'view' op, we want to adjust weights of non-cck fields
     // even if there are no actual fields for this type.
     if ($op == 'view') {
-      foreach ($type['extra'] as $key => $value) {
-        // Some core 'fields' use a different key in node forms and in 'view'
-        // render arrays.
-        if (isset($value['view']) && isset($node->content[$value['view']])) {
-          $node->content[$value['view']]['#weight'] = $value['weight'];
-        }
-        elseif (isset($node->content[$key])) {
-          $node->content[$key]['#weight'] = $value['weight'];
-        }
+      if (!isset($node->content['#pre_render'])) {
+        $node->content['#pre_render'] = array();
       }
+      $node->content['#pre_render'][] = 'content_alter_extra_weight';
+      $node->content['#content_extra_fields'] = $type['extra'];
     }
   }
 }
 
 /**
- *  Implementation of hook_form_alter().
+ * Implementation of hook_form_alter().
  */
 function content_form_alter(&$form, $form_state, $form_id) {
   if (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] .'_node_form' == $form_id) {
@@ -446,12 +441,31 @@ function content_form_alter(&$form, $for
       $form = array_merge($form, content_form($form, $form_state));
     }
     // Adjust weights for non-CCK fields.
-    foreach ($type['extra'] as $key => $value) {
-      if (isset($form[$key])) {
-        $form[$key]['#weight'] = $value['weight'];
+    if (!isset($form['#pre_render'])) {
+      $form['#pre_render'] = array();
+    }
+    $form['#pre_render'][] = 'content_alter_extra_weight';
+    $form['#content_extra_fields'] = $type['extra'];
+  }
+}
+
+/**
+ * Adjust weight for non-CCK fields.
+ */
+function content_alter_extra_weight($elements) {
+  if (isset($elements['#content_extra_fields'])) {
+    foreach ($elements['#content_extra_fields'] as $key => $value) {
+      // Some core 'fields' use a different key in node forms and in 'view'
+      // render arrays.
+      if (isset($value['view']) && isset($elements[$value['view']])) {
+        $elements[$value['view']]['#weight'] = $value['weight'];
+      }
+      elseif (isset($elements[$key])) {
+        $elements[$key]['#weight'] = $value['weight'];
       }
     }
   }
+  return $elements;
 }
 
 /**
