diff --git a/core/modules/entity/lib/Drupal/entity/DatabaseStorageController.php b/core/modules/entity/lib/Drupal/entity/DatabaseStorageController.php
index 20e303e..d88978a 100644
--- a/core/modules/entity/lib/Drupal/entity/DatabaseStorageController.php
+++ b/core/modules/entity/lib/Drupal/entity/DatabaseStorageController.php
@@ -396,7 +396,7 @@ class DatabaseStorageController implements EntityStorageControllerInterface {
       // Ignore slave server temporarily.
       db_ignore_slave();
     }
-    catch (Exception $e) {
+    catch (\Exception $e) {
       $transaction->rollback();
       watchdog_exception($this->entityType, $e);
       throw new EntityStorageException($e->getMessage, $e->getCode, $e);
@@ -411,17 +411,20 @@ class DatabaseStorageController implements EntityStorageControllerInterface {
     try {
       // Load the stored entity, if any.
       if (!$entity->isNew() && !isset($entity->original)) {
-        $entity->original = entity_load_unchanged($this->entityType, $entity->id());
+        $original_entity = entity_load_unchanged($this->entityType, $entity->id());
+      }
+      else {
+        $original_entity = NULL;
       }
 
-      $this->preSave($entity);
-      $this->invokeHook('presave', $entity);
+      $this->preSave($entity, $original_entity);
+      $this->invokeHook('presave', $entity, $original_entity);
 
       if (!$entity->isNew()) {
         $return = drupal_write_record($this->entityInfo['base table'], $entity, $this->idKey);
         $this->resetCache(array($entity->{$this->idKey}));
-        $this->postSave($entity, TRUE);
-        $this->invokeHook('update', $entity);
+        $this->postSave($entity, TRUE, $original_entity);
+        $this->invokeHook('update', $entity, $original_entity);
       }
       else {
         $return = drupal_write_record($this->entityInfo['base table'], $entity);
@@ -429,6 +432,7 @@ class DatabaseStorageController implements EntityStorageControllerInterface {
         $this->resetCache(array());
 
         $entity->enforceIsNew(FALSE);
+        // Not passing $original_entity, defaults to NULL.
         $this->postSave($entity, FALSE);
         $this->invokeHook('insert', $entity);
       }
@@ -439,7 +443,7 @@ class DatabaseStorageController implements EntityStorageControllerInterface {
 
       return $return;
     }
-    catch (Exception $e) {
+    catch (\Exception $e) {
       $transaction->rollback();
       watchdog_exception($this->entityType, $e);
       throw new EntityStorageException($e->getMessage(), $e->getCode(), $e);
@@ -451,7 +455,7 @@ class DatabaseStorageController implements EntityStorageControllerInterface {
    *
    * Used before the entity is saved and before invoking the presave hook.
    */
-  protected function preSave(EntityInterface $entity) { }
+  protected function preSave(EntityInterface $entity, EntityInterface $original = NULL) { }
 
   /**
    * Acts on a saved entity before the insert or update hook is invoked.
@@ -462,8 +466,10 @@ class DatabaseStorageController implements EntityStorageControllerInterface {
    * @param $update
    *   (bool) TRUE if the entity has been updated, or FALSE if it has been
    *   inserted.
+   * @param $original
+   *   The original value of the entity. Only non-NULL if $update is TRUE.
    */
-  protected function postSave(EntityInterface $entity, $update) { }
+  protected function postSave(EntityInterface $entity, $update, EntityInterface $original = NULL) { }
 
   /**
    * Acts on entities before they are deleted.
