diff --git modules/field/field.module modules/field/field.module
index ec52fb8..39b1f73 100644
--- modules/field/field.module
+++ modules/field/field.module
@@ -679,10 +679,10 @@ function field_view_field($entity_type, $entity, $field_name, $display = array()
     $options = array('field_name' => $field_name, 'language' => $display_language);
     $null = NULL;
 
+    list($id, , $bundle) = entity_extract_ids($entity_type, $entity);
+
     // Invoke prepare_view steps if needed.
     if (empty($entity->_field_view_prepared)) {
-      list($id) = entity_extract_ids($entity_type, $entity);
-
       // First let the field types do their preparation.
       _field_invoke_multiple('prepare_view', $entity_type, array($id => $entity), $display, $null, $options);
       // Then let the formatters do their own specific massaging.
@@ -691,6 +691,8 @@ function field_view_field($entity_type, $entity, $field_name, $display = array()
 
     // Build the renderable array.
     $result = _field_invoke_default('view', $entity_type, $entity, $display, $null, $options);
+    $result['#entity_type'] = $entity_type;
+    $result['#bundle'] = $bundle;
 
     // Invoke hook_field_attach_view_alter() to let other modules alter the
     // renderable array, as in a full field_attach_view() execution.
@@ -698,6 +700,7 @@ function field_view_field($entity_type, $entity, $field_name, $display = array()
       'entity_type' => $entity_type,
       'entity' => $entity,
       'view_mode' => '_custom',
+      'language' => $langcode,
     );
     drupal_alter('field_attach_view', $result, $context);
 
