diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 1a3580f..2b7fdae 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -1685,6 +1685,7 @@ function comment_form($form, &$form_state, $comment) {
   else {
     $comment = $form_state['comment'];
   }
+  $form_state['entity_original'] = $comment;
 
   $node = node_load($comment->nid);
   $form['#node'] = $node;
diff --git a/core/modules/entity/entity.module b/core/modules/entity/entity.module
index fe9a6e5..fe31ae2 100644
--- a/core/modules/entity/entity.module
+++ b/core/modules/entity/entity.module
@@ -424,6 +424,9 @@ function entity_form_field_validate($entity_type, $form, &$form_state) {
   // until we have fully validated the submitted input. Therefore, for
   // validation, act on a pseudo entity created out of the form values.
   $pseudo_entity = (object) $form_state['values'];
+  if (!empty($form_state['entity_original'])) {
+    $pseudo_entity->original = $form_state['entity_original'];
+  }
   field_attach_form_validate($entity_type, $pseudo_entity, $form, $form_state);
 }
 
diff --git a/core/modules/field/tests/field_test.entity.inc b/core/modules/field/tests/field_test.entity.inc
index 52ed3fc..cf7c6ed 100644
--- a/core/modules/field/tests/field_test.entity.inc
+++ b/core/modules/field/tests/field_test.entity.inc
@@ -345,6 +345,7 @@ function field_test_entity_form($form, &$form_state, $entity, $add = FALSE) {
   else {
     $entity = $form_state['test_entity'];
   }
+  $form_state['entity_original'] = $entity;
 
   foreach (array('ftid', 'ftvid', 'fttype') as $key) {
     $form[$key] = array(
diff --git a/core/modules/node/node.pages.inc b/core/modules/node/node.pages.inc
index 4e94b26..36d7ae8 100644
--- a/core/modules/node/node.pages.inc
+++ b/core/modules/node/node.pages.inc
@@ -131,6 +131,7 @@ function node_form($form, &$form_state, $node) {
   else {
     $node = $form_state['node'];
   }
+  $form_state['entity_original'] = $node;
 
   // Some special stuff when previewing a node.
   if (isset($form_state['node_preview'])) {
diff --git a/core/modules/taxonomy/taxonomy.admin.inc b/core/modules/taxonomy/taxonomy.admin.inc
index beb87f9..6d1b6d2 100644
--- a/core/modules/taxonomy/taxonomy.admin.inc
+++ b/core/modules/taxonomy/taxonomy.admin.inc
@@ -681,6 +681,7 @@ function taxonomy_form_term($form, &$form_state, $edit = array(), $vocabulary =
       $vocabulary = taxonomy_vocabulary_load($term->vid);
     }
   }
+  $form_state['entity_original'] = $term;
 
   $parent = array_keys(taxonomy_term_load_parents($term->tid));
   $form['#term'] = (array) $term;
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 865f17b..8973a32 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -3688,7 +3688,7 @@ function user_register_form($form, &$form_state) {
     drupal_goto('user/' . $user->uid);
   }
 
-  $form['#user'] = drupal_anonymous_user();
+  $form['#user'] = $form_state['entity_original'] = drupal_anonymous_user();
 
   $form['#attached']['library'][] = array('system', 'jquery.cookie');
   $form['#attributes']['class'][] = 'user-info-from-cookie';
diff --git a/core/modules/user/user.pages.inc b/core/modules/user/user.pages.inc
index c54bd4c..d9ab607 100644
--- a/core/modules/user/user.pages.inc
+++ b/core/modules/user/user.pages.inc
@@ -219,6 +219,7 @@ function user_profile_form($form, &$form_state, $account) {
   else {
     $account = $form_state['user'];
   }
+  $form_state['entity_original'] = $account;
 
   // @todo Legacy support. Modules are encouraged to access the entity using
   //   $form_state. Remove in Drupal 8.
