Index: image.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/image/image.module,v
retrieving revision 1.313
diff -u -p -r1.313 image.module
--- image.module	9 Aug 2009 17:58:31 -0000	1.313
+++ image.module	15 Aug 2009 12:16:54 -0000
@@ -436,8 +436,18 @@ function image_form_submit($form, &$form
 
 /**
  * Implementation of hook_view
+ *
+ * Shows the image node with the requested derivative, if allowed.
+ * Also rebuilds image derivatives if $node->rebuild_images was set by 
+ * image_load().
  */
 function image_view($node, $teaser = 0, $page = 0) {
+  // Correct any problems with the derivative images.
+  if ($node->rebuild_images) {
+    image_update($node);
+    watchdog('image', 'Derivative images were regenerated for %title.', array('%title' => $node->title), WATCHDOG_INFO, l(t('view'), 'node/'. $node->nid));
+  }
+
   $sizes = image_get_sizes();
   $size = IMAGE_PREVIEW;
   if (isset($_GET['size'])) {
@@ -463,6 +473,9 @@ function image_view($node, $teaser = 0, 
 
 /**
  * Implementation of hook_load().
+ *
+ * Loads image data from the database, and sets $node->rebuild_images if a 
+ * rebuild of derivatives is needed.
  */
 function image_load(&$node) {
   $result = db_query("SELECT i.image_size, f.filepath FROM {image} i INNER JOIN {files} f ON i.fid = f.fid WHERE i.nid = %d", $node->nid);
@@ -509,12 +522,6 @@ function image_load(&$node) {
       $node->rebuild_images = TRUE;
     }
   }
-
-  // Correct any problems with the derivative images.
-  if ($node->rebuild_images) {
-    image_update($node);
-    watchdog('image', 'Derivative images were regenerated for %title.', array('%title' => $node->title), WATCHDOG_INFO, l(t('view'), 'node/'. $node->nid));
-  }
 }
 
 /**
Index: tests/image.test
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/image/tests/image.test,v
retrieving revision 1.8
diff -u -p -r1.8 image.test
--- tests/image.test	14 Aug 2009 21:48:46 -0000	1.8
+++ tests/image.test	15 Aug 2009 12:16:54 -0000
@@ -246,6 +246,9 @@ class ImageTestCase extends DrupalWebTes
     // Rebuild derivative images.
     $node_api = node_load($node_api->nid);
 
+    $node_post = image_view($node_post);
+    $node_api = image_view($node_api);
+
     // Verify that both nodes are equal.
     $equality = ($node_post->title == $node_api->title);
     $this->assertTrue($equality, t('Image node titles are equal.'));
Index: views/image_handler_field_image_node_image.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/image/views/image_handler_field_image_node_image.inc,v
retrieving revision 1.1
diff -u -p -r1.1 image_handler_field_image_node_image.inc
--- views/image_handler_field_image_node_image.inc	1 May 2009 22:29:47 -0000	1.1
+++ views/image_handler_field_image_node_image.inc	15 Aug 2009 12:16:54 -0000
@@ -107,9 +107,13 @@ class image_handler_field_image_node_ima
     $node = $this->build_image_display_node($values);
 
     // image_load() will load the files for all derivatives. Derivatives larger
-    // than the original fall back to the original. Stale derivatives will be
-    // regenerated.
+    // than the original fall back to the original. 
     image_load($node);
+    // Rebuild derivatives if needed.
+    if ($node->rebuild_images) {
+      image_update($node);
+      watchdog('image', 'Derivative images were regenerated for %title.', array('%title' => $node->title), WATCHDOG_INFO, l(t('view'), 'node/'. $node->nid));
+    }    
 
     return image_display($node, $derivative);
   }
