diff --git a/core/modules/field/field.api.php b/core/modules/field/field.api.php
index 455ecc2..5ab1ee4 100644
--- a/core/modules/field/field.api.php
+++ b/core/modules/field/field.api.php
@@ -2345,8 +2345,8 @@ function hook_field_extra_fields_display_alter(&$displays, $context) {
  *   An associative array containing:
  *   - entity_type: The entity type; e.g., 'node' or 'user'.
  *   - entity: The entity object.
- *   - field: The field that the widget belongs to.
- *   - instance: The instance of the field.
+ *   - field: The field that the widget belongs to. Passed in by reference.
+ *   - instance: The instance of the field. Passed in by reference.
  *
  * @see hook_field_widget_properties_ENTITY_TYPE_alter()
  */
diff --git a/core/modules/field/field.form.inc b/core/modules/field/field.form.inc
index 4cf953d..2267fe8 100644
--- a/core/modules/field/field.form.inc
+++ b/core/modules/field/field.form.inc
@@ -30,8 +30,9 @@ function field_default_form($entity_type, $entity, $field, $instance, $langcode,
   $context = array(
     'entity_type' => $entity_type,
     'entity' => $entity,
-    'field' => $field,
-    'instance' => $instance,
+    // Set field and instance by reference so they can be altered too.
+    'field' => &$field,
+    'instance' => &$instance,
   );
   drupal_alter(array('field_widget_properties', 'field_widget_properties_' . $entity_type), $instance['widget'], $context);
 
