diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
index 76b8fd2..8f3524e 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
@@ -640,30 +640,20 @@ public function addTranslation($langcode, array $values = array()) {
       throw new \InvalidArgumentException(String::format($message, array('@langcode' => $langcode)));
     }
 
-    // Instantiate a new empty entity so default values will be populated in the
-    // specified language.
-    $entity_type = $this->getEntityType();
-    $default_values = array($entity_type->getKey('bundle') => $this->bundle(), 'langcode' => $langcode);
-    $entity = $this->entityManager()
-      ->getStorage($this->getEntityTypeId())
-      ->create($default_values);
-
-    foreach ($entity as $name => $field) {
-      if (!isset($values[$name]) && !$field->isEmpty()) {
-        $values[$name] = $field->value;
-      }
-    }
-
     $this->translations[$langcode]['status'] = static::TRANSLATION_CREATED;
     $translation = $this->getTranslation($langcode);
-    $definitions = $translation->getFieldDefinitions();
 
-    foreach ($values as $name => $value) {
-      if (isset($definitions[$name]) && $definitions[$name]->isTranslatable()) {
-        $translation->$name = $value;
+    // Apply incoming values or default values for translatable fields.
+    foreach ($this->getFieldDefinitions() as $name => $definition) {
+      if ($definition->isTranslatable()) {
+        if (isset($values[$name])) {
+          $translation->$name = $values[$name];
+        }
+        elseif (!array_key_exists($name, $values)) {
+          $translation->get($name)->applyDefaultValue();
+        }
       }
     }
-
     return $translation;
   }
 
