diff --git a/core/lib/Drupal/Core/Entity/Entity.php b/core/lib/Drupal/Core/Entity/Entity.php
index 5d70510..5e14e70 100644
--- a/core/lib/Drupal/Core/Entity/Entity.php
+++ b/core/lib/Drupal/Core/Entity/Entity.php
@@ -13,7 +13,7 @@
 /**
  * Defines a base entity class.
  */
-abstract class Entity implements EntityInterface {
+abstract class Entity implements EntityInterface, \Serializable {
 
   /**
    * The language code of the entity's default language.
@@ -397,11 +397,21 @@ protected function urlGenerator() {
   /**
    * {@inheritdoc}
    */
-  public function __sleep() {
+  public function serialize() {
     // Don't serialize the url generator.
-    $this->urlGenerator = NULL;
+    $values = get_object_vars($this);
+    unset($values['urlGenerator']);
+    return serialize($values);
+  }
 
-    return array_keys(get_object_vars($this));
+  /**
+   * {@inheritdoc}
+   */
+  public function unserialize($serialized) {
+    $values = unserialize($serialized);
+    $entity_type = $values['entityTypeId'];
+    unset($values['entityTypeId']);
+    $this->__construct($values, $entity_type);
   }
 
 }
diff --git a/core/lib/Drupal/Core/TypedData/DataDefinition.php b/core/lib/Drupal/Core/TypedData/DataDefinition.php
index 9d036a2..28be538 100644
--- a/core/lib/Drupal/Core/TypedData/DataDefinition.php
+++ b/core/lib/Drupal/Core/TypedData/DataDefinition.php
@@ -37,7 +37,7 @@ public static function create($type) {
    * {@inheritdoc}
    */
   public static function createFromDataType($type) {
-    return self::create($type);
+    return static::create($type);
   }
 
   /**
