diff --git a/core/includes/entity.inc b/core/includes/entity.inc
index a866864..daccf33 100644
--- a/core/includes/entity.inc
+++ b/core/includes/entity.inc
@@ -457,10 +457,10 @@ function entity_get_form(EntityInterface $entity, $operation = 'default', $langc
  * for copying the form values of added form elements to entity properties.
  * Many of the main entity builder functions can call this helper function to
  * re-use its logic of copying $form_state['values'][PROPERTY] values to
- * $entity->PROPERTY for all entries in $form_state['values'] that are not field
- * data, and calling field_attach_submit() to copy field data. Apart from that
- * this helper invokes any additional builder functions that have been specified
- * in $form['#entity_builders'].
+ * $entity->PROPERTY for all entries in $form_state['values'] that are not
+ * field data, and calling field_attach_extract_form_values() to copy field
+ * data. Apart from that this helper invokes any additional builder functions
+ * that have been specified in $form['#entity_builders'].
  *
  * For some entity forms (e.g., forms with complex non-field data and forms that
  * simultaneously edit multiple entities), this behavior may be inappropriate,
@@ -472,7 +472,8 @@ function entity_form_submit_build_entity($entity_type, $entity, $form, &$form_st
 
   // Copy top-level form values that are not for fields to entity properties,
   // without changing existing entity properties that are not being edited by
-  // this form. Copying field values must be done using field_attach_submit().
+  // this form. Copying field values must be done using
+  // field_attach_extract_form_values().
   $values_excluding_fields = $info['fieldable'] ? array_diff_key($form_state['values'], field_info_instances($entity_type, $entity->bundle())) : $form_state['values'];
   foreach ($values_excluding_fields as $key => $value) {
     $entity->set($key, $value);
@@ -487,7 +488,7 @@ function entity_form_submit_build_entity($entity_type, $entity, $form, &$form_st
 
   // Copy field values to the entity.
   if ($info['fieldable']) {
-    field_attach_submit($entity_type, $entity, $form, $form_state);
+    field_attach_extract_form_values($entity_type, $entity, $form, $form_state);
   }
 }
 
diff --git a/core/lib/Drupal/Core/Entity/EntityFormControllerNG.php b/core/lib/Drupal/Core/Entity/EntityFormControllerNG.php
index 812a192..29f0547 100644
--- a/core/lib/Drupal/Core/Entity/EntityFormControllerNG.php
+++ b/core/lib/Drupal/Core/Entity/EntityFormControllerNG.php
@@ -62,7 +62,8 @@ public function buildEntity(array $form, array &$form_state) {
 
     // Copy top-level form values that are not for fields to entity properties,
     // without changing existing entity properties that are not being edited by
-    // this form. Copying field values must be done using field_attach_submit().
+    // this form. Copying field values must be done using
+    // field_attach_extract_form_values().
     $values_excluding_fields = $info['fieldable'] ? array_diff_key($form_state['values'], field_info_instances($entity_type, $entity->bundle())) : $form_state['values'];
     $translation = $entity->getTranslation($this->getFormLangcode($form_state), FALSE);
     $definitions = $translation->getPropertyDefinitions();
@@ -83,7 +84,7 @@ public function buildEntity(array $form, array &$form_state) {
     // Copy field values to the entity.
     if ($info['fieldable']) {
       $entity->setCompatibilityMode(TRUE);
-      field_attach_submit($entity_type, $entity, $form, $form_state);
+      field_attach_extract_form_values($entity_type, $entity, $form, $form_state);
       $entity->setCompatibilityMode(FALSE);
     }
     return $entity;
diff --git a/core/modules/edit/lib/Drupal/edit/Form/EditFieldForm.php b/core/modules/edit/lib/Drupal/edit/Form/EditFieldForm.php
index 0f451f5..9e59a55 100644
--- a/core/modules/edit/lib/Drupal/edit/Form/EditFieldForm.php
+++ b/core/modules/edit/lib/Drupal/edit/Form/EditFieldForm.php
@@ -83,10 +83,7 @@ public function submit(array $form, array &$form_state) {
   protected function buildEntity(array $form, array &$form_state) {
     $entity = clone $form_state['entity'];
 
-    // @todo field_attach_submit() only "submits" to the in-memory $entity
-    //   object, not to anywhere persistent. Consider renaming it to minimize
-    //   confusion: http://drupal.org/node/1846648.
-    field_attach_submit($entity->entityType(), $entity, $form, $form_state, array('field_name' =>  $form_state['field_name']));
+    field_attach_extract_form_values($entity->entityType(), $entity, $form, $form_state, array('field_name' =>  $form_state['field_name']));
 
     // @todo Refine automated log messages and abstract them to all entity
     //   types: http://drupal.org/node/1678002.
diff --git a/core/modules/field/field.api.php b/core/modules/field/field.api.php
index 2620844..612ace9 100644
--- a/core/modules/field/field.api.php
+++ b/core/modules/field/field.api.php
@@ -903,7 +903,8 @@ function hook_field_formatter_info_alter(array &$info) {
  */
 function hook_field_attach_form($entity_type, $entity, &$form, &$form_state, $langcode) {
   // Add a checkbox allowing a given field to be emptied.
-  // See hook_field_attach_submit() for the corresponding processing code.
+  // See hook_field_attach_extract_form_values() for the corresponding
+  // processing code.
   $form['empty_field_foo'] = array(
     '#type' => 'checkbox',
     '#title' => t("Empty the 'field_foo' field"),
@@ -951,7 +952,7 @@ function hook_field_attach_validate($entity_type, $entity, &$errors) {
 }
 
 /**
- * Act on field_attach_submit().
+ * Act on field_attach_extract_form_values().
  *
  * This hook is invoked after the field module has performed the operation.
  *
@@ -968,7 +969,7 @@ function hook_field_attach_validate($entity_type, $entity, &$errors) {
  * @param $form_state
  *   An associative array containing the current state of the form.
  */
-function hook_field_attach_submit($entity_type, $entity, $form, &$form_state) {
+function hook_field_attach_extract_form_values($entity_type, $entity, $form, &$form_state) {
   // Sample case of an 'Empty the field' checkbox added on the form, allowing
   // a given field to be emptied.
   $values = NestedArray::getValue($form_state['values'], $form['#parents']);
diff --git a/core/modules/field/field.attach.inc b/core/modules/field/field.attach.inc
index 29ebd3b..f6592b3 100644
--- a/core/modules/field/field.attach.inc
+++ b/core/modules/field/field.attach.inc
@@ -748,8 +748,8 @@ function _field_invoke_formatter_target($display) {
  * appear within the same $form element, or within the same '#parents' space.
  *
  * For each call to field_attach_form(), field values are processed by calling
- * field_attach_form_validate() and field_attach_submit() on the same $form
- * element.
+ * field_attach_form_validate() and field_attach_extract_form_values() on the
+ * same $form element.
  *
  * Sample resulting structure in $form:
  * @code
@@ -1124,7 +1124,7 @@ function field_attach_form_validate($entity_type, EntityInterface $entity, $form
 }
 
 /**
- * Performs necessary operations on field data submitted by a form.
+ * Populates an entity object with values from a form submission.
  *
  * Currently, this accounts for drag-and-drop reordering of field values, and
  * filtering of empty values.
@@ -1144,14 +1144,14 @@ function field_attach_form_validate($entity_type, EntityInterface $entity, $form
  *   An associative array of additional options. See field_invoke_method() for
  *   details.
  */
-function field_attach_submit($entity_type, EntityInterface $entity, $form, &$form_state, array $options = array()) {
+function field_attach_extract_form_values($entity_type, EntityInterface $entity, $form, &$form_state, array $options = array()) {
   // Extract field values from submitted values.
-  field_invoke_method('submit', _field_invoke_widget_target(), $entity, $form, $form_state, $options);
+  field_invoke_method('extractFormValues', _field_invoke_widget_target(), $entity, $form, $form_state, $options);
 
   // Let other modules act on submitting the entity.
   // Avoid module_invoke_all() to let $form_state be taken by reference.
-  foreach (module_implements('field_attach_submit') as $module) {
-    $function = $module . '_field_attach_submit';
+  foreach (module_implements('field_attach_extract_form_values') as $module) {
+    $function = $module . 'field_attach_extract_form_values';
     $function($entity_type, $entity, $form, $form_state);
   }
 }
diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetBase.php b/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetBase.php
index fd434d1..a3395a1 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetBase.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetBase.php
@@ -312,9 +312,9 @@ protected function formSingleElement(EntityInterface $entity, array $items, $del
   }
 
   /**
-   * Implements Drupal\field\Plugin\Type\Widget\WidgetInterface::submit().
+   * Implements Drupal\field\Plugin\Type\Widget\WidgetInterface::extractFormValues().
    */
-  public function submit(EntityInterface $entity, $langcode, array &$items, array $form, array &$form_state) {
+  public function extractFormValues(EntityInterface $entity, $langcode, array &$items, array $form, array &$form_state) {
     $field_name = $this->field['field_name'];
 
     // Extract the values from $form_state['values'].
diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetBaseInterface.php b/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetBaseInterface.php
index 8fdd785..ae107c9 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetBaseInterface.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetBaseInterface.php
@@ -63,7 +63,7 @@ public function form(EntityInterface $entity, $langcode, array $items, array &$f
    * @param array $form_state
    *   The form state.
    */
-  public function submit(EntityInterface $entity, $langcode, array &$items, array $form, array &$form_state);
+  public function extractFormValues(EntityInterface $entity, $langcode, array &$items, array $form, array &$form_state);
 
   /**
    * Reports field-level validation errors against actual form elements.
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php
index f971099..cc28198 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php
@@ -457,9 +457,9 @@ function testFieldAttachForm() {
   }
 
   /**
-   * Test field_attach_submit().
+   * Test field_attach_extract_form_values().
    */
-  function testFieldAttachSubmit() {
+  function testFieldAttachExtractFormValues() {
     $this->createFieldWithInstance('_2');
 
     $entity_type = 'test_entity';
@@ -507,9 +507,9 @@ function testFieldAttachSubmit() {
     $form_state['values'][$this->field_name][$langcode] = $values;
     $form_state['values'][$this->field_name_2][$langcode] = $values_2;
 
-    // Call field_attach_submit() for all fields.
+    // Call field_attach_extract_form_values() for all fields.
     $entity = clone($entity_init);
-    field_attach_submit($entity_type, $entity, $form, $form_state);
+    field_attach_extract_form_values($entity_type, $entity, $form, $form_state);
 
     asort($weights);
     asort($weights_2);
@@ -528,10 +528,10 @@ function testFieldAttachSubmit() {
     }
     $this->assertIdentical($entity->{$this->field_name_2}[$langcode], $expected_values_2, 'Submit filters empty values');
 
-    // Call field_attach_submit() for a single field (the second field).
+    // Call field_attach_extract_form_values() for a single field (the second field).
     $options = array('field_name' => $this->field_name_2);
     $entity = clone($entity_init);
-    field_attach_submit($entity_type, $entity, $form, $form_state, $options);
+    field_attach_extract_form_values($entity_type, $entity, $form, $form_state, $options);
     $expected_values_2 = array();
     foreach ($weights_2 as $key => $value) {
       if ($key != 1) {
diff --git a/core/modules/field/tests/modules/field_test/field_test.entity.inc b/core/modules/field/tests/modules/field_test/field_test.entity.inc
index 517f5cb..5a1e173 100644
--- a/core/modules/field/tests/modules/field_test/field_test.entity.inc
+++ b/core/modules/field/tests/modules/field_test/field_test.entity.inc
@@ -230,11 +230,11 @@ function field_test_entity_nested_form($form, &$form_state, $entity_1, $entity_2
  */
 function field_test_entity_nested_form_validate($form, &$form_state) {
   $entity_1 = entity_create('test_entity', $form_state['values']);
-  field_attach_submit('test_entity', $entity_1, $form, $form_state);
+  field_attach_extract_form_values('test_entity', $entity_1, $form, $form_state);
   field_attach_form_validate('test_entity', $entity_1, $form, $form_state);
 
   $entity_2 = entity_create('test_entity', $form_state['values']['entity_2']);
-  field_attach_submit('test_entity', $entity_2, $form['entity_2'], $form_state);
+  field_attach_extract_form_values('test_entity', $entity_2, $form['entity_2'], $form_state);
   field_attach_form_validate('test_entity', $entity_2, $form['entity_2'], $form_state);
 }
 
@@ -243,11 +243,11 @@ function field_test_entity_nested_form_validate($form, &$form_state) {
  */
 function field_test_entity_nested_form_submit($form, &$form_state) {
   $entity_1 = entity_create('test_entity', $form_state['values']);
-  field_attach_submit('test_entity', $entity_1, $form, $form_state);
+  field_attach_extract_form_values('test_entity', $entity_1, $form, $form_state);
   field_test_entity_save($entity_1);
 
   $entity_2 = entity_create('test_entity', $form_state['values']['entity_2']);
-  field_attach_submit('test_entity', $entity_2, $form['entity_2'], $form_state);
+  field_attach_extract_form_values('test_entity', $entity_2, $form['entity_2'], $form_state);
   field_test_entity_save($entity_2);
 
   drupal_set_message(t('test_entities @id_1 and @id_2 have been updated.', array('@id_1' => $entity_1->ftid, '@id_2' => $entity_2->ftid)));
diff --git a/core/modules/node/node.api.php b/core/modules/node/node.api.php
index c139952..78cfe61 100644
--- a/core/modules/node/node.api.php
+++ b/core/modules/node/node.api.php
@@ -799,8 +799,8 @@ function hook_node_validate(Drupal\node\Node $node, $form, &$form_state) {
  * object, but before the node is saved or previewed. It is a chance for modules
  * to adjust the node's properties from what they are simply after a copy from
  * $form_state['values']. This hook is intended for adjusting non-field-related
- * properties. See hook_field_attach_submit() for customizing field-related
- * properties.
+ * properties. See hook_field_attach_extract_form_values() for customizing
+ * field-related properties.
  *
  * @param Drupal\node\Node $node
  *   The node entity being updated in response to a form submission.
