Index: modules/field/field.attach.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.attach.inc,v
retrieving revision 1.36
diff -u -r1.36 field.attach.inc
--- modules/field/field.attach.inc	13 Aug 2009 00:17:47 -0000	1.36
+++ modules/field/field.attach.inc	14 Aug 2009 23:45:27 -0000
@@ -975,15 +975,17 @@
 }
 
 /**
- * Generate and return a structured content array tree suitable for
- * drupal_render() for all of the fields on an object. The format of
- * each field's rendered content depends on the display formatter and
- * its settings.
+ * Generate an array for rendering the fields of an object.
+ *
+ * The format of each field's rendered content depends on the display formatter
+ * and its settings for the build mode.
  *
  * @param $obj_type
  *   The type of $object; e.g. 'node' or 'user'.
  * @param $object
  *   The object with fields to render.
+ *   The object should have an $object->in_preview property set to TRUE when
+ *   the object is being displayed as part of a form preview.
  * @param $build_mode
  *   Build mode, e.g. 'full', 'teaser'...
  * @return
@@ -1038,6 +1040,18 @@
  *   @endcode
  */
 function field_attach_view($obj_type, $object, $build_mode = 'full') {
+  // In order to be equivalent to regular values loaded from field storage,
+  // values coming from a form preview need to run through hook_field_load()
+  // and hook_field_attach_load().
+  if (!empty($object->in_preview)) {
+    _field_invoke_multiple('load', $obj_type, $queried_objects, FIELD_LOAD_REVISION);
+
+    foreach (module_implements('field_attach_load') as $module) {
+      $function = $module . '_field_attach_load';
+      $function($obj_type, $queried_objects, FIELD_LOAD_REVISION);
+    }
+  }
+
   // Let field modules sanitize their data for output.
   _field_invoke('sanitize', $obj_type, $object);
 
