diff --git a/core/modules/content_translation/content_translation.module b/core/modules/content_translation/content_translation.module
index 70413d9..536a50c 100644
--- a/core/modules/content_translation/content_translation.module
+++ b/core/modules/content_translation/content_translation.module
@@ -14,6 +14,7 @@
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\language\ContentLanguageSettingsInterface;
 
 /**
  * Implements hook_help().
@@ -192,6 +193,63 @@ function content_translation_entity_base_field_info(EntityTypeInterface $entity_
 }
 
 /**
+ * Implements hook_ENTITY_TYPE_insert() for language content settings.
+ */
+function content_translation_language_content_settings_insert(ContentLanguageSettingsInterface $settings) {
+  // @see \Drupal\content_translation\ContentTranslationManager::isEnabled()
+  if ($settings->getThirdPartySetting('content_translation', 'enabled', FALSE)) {
+    /** @var \Drupal\Core\Entity\EntityFieldManagerInterface $field_manager */
+    $field_manager = \Drupal::service('entity_field.manager');
+    /** @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $schema_repository */
+    $schema_repository = \Drupal::service('entity.last_installed_schema.repository');
+    $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
+    $entity_type_id = $settings->getTargetEntityTypeId();
+
+    $field_manager->useCaches(FALSE);
+    $storage_definitions = $field_manager->getFieldStorageDefinitions($entity_type_id);
+    $field_manager->useCaches(TRUE);
+    $installed_storage_definitions = $schema_repository->getLastInstalledFieldStorageDefinitions($entity_type_id);
+
+    foreach (array_diff_key($storage_definitions, $installed_storage_definitions) as $storage_definition) {
+      /** @var $storage_definition \Drupal\Core\Field\FieldStorageDefinitionInterface */
+      if ($storage_definition->getProvider() == 'content_translation') {
+        $definition_update_manager->installFieldStorageDefinition($storage_definition->getName(), $entity_type_id, 'content_translation', $storage_definition);
+      }
+    }
+  }
+}
+
+/**
+ * Implements hook_ENTITY_TYPE_update() for language content settings.
+ */
+function content_translation_language_content_settings_update(ContentLanguageSettingsInterface $settings) {
+  /** @var \Drupal\language\ContentLanguageSettingsInterface $original_settings */
+  $original_settings = $settings->original;
+  // @see \Drupal\content_translation\ContentTranslationManager::isEnabled()
+  if ($settings->getThirdPartySetting('content_translation', 'enabled', FALSE)
+      && !$original_settings->getThirdPartySetting('content_translation', 'enabled', FALSE)
+      ) {
+    /** @var \Drupal\Core\Entity\EntityFieldManagerInterface $field_manager */
+    $field_manager = \Drupal::service('entity_field.manager');
+    /** @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $schema_repository */
+    $schema_repository = \Drupal::service('entity.last_installed_schema.repository');
+    $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
+    $entity_type_id = $settings->getTargetEntityTypeId();
+
+    $field_manager->useCaches(FALSE);
+    $storage_definitions = $field_manager->getFieldStorageDefinitions($entity_type_id);
+    $field_manager->useCaches(TRUE);
+    $installed_storage_definitions = $schema_repository->getLastInstalledFieldStorageDefinitions($entity_type_id);
+    foreach (array_diff_key($storage_definitions, $installed_storage_definitions) as $storage_definition) {
+      /** @var $storage_definition \Drupal\Core\Field\FieldStorageDefinitionInterface */
+      if ($storage_definition->getProvider() == 'content_translation') {
+        $definition_update_manager->installFieldStorageDefinition($storage_definition->getName(), $entity_type_id, 'content_translation', $storage_definition);
+      }
+    }
+  }
+}
+
+/**
  * Implements hook_field_info_alter().
  *
  * Content translation extends the @FieldType annotation with following key:
diff --git a/core/modules/content_translation/content_translation.services.yml b/core/modules/content_translation/content_translation.services.yml
index f7cc11f..8d4740f 100644
--- a/core/modules/content_translation/content_translation.services.yml
+++ b/core/modules/content_translation/content_translation.services.yml
@@ -23,10 +23,4 @@ services:
 
   content_translation.manager:
     class: Drupal\content_translation\ContentTranslationManager
-    arguments: ['@entity.manager', '@content_translation.updates_manager']
-
-  content_translation.updates_manager:
-    class: Drupal\content_translation\ContentTranslationUpdatesManager
-    arguments: ['@entity.manager', '@entity.definition_update_manager']
-    tags:
-      - { name: event_subscriber }
+    arguments: ['@entity.manager']
diff --git a/core/modules/content_translation/src/ContentTranslationManager.php b/core/modules/content_translation/src/ContentTranslationManager.php
index a1c2391..a9d1ad7 100644
--- a/core/modules/content_translation/src/ContentTranslationManager.php
+++ b/core/modules/content_translation/src/ContentTranslationManager.php
@@ -18,23 +18,13 @@ class ContentTranslationManager implements ContentTranslationManagerInterface {
   protected $entityManager;
 
   /**
-   * The updates manager.
-   *
-   * @var \Drupal\content_translation\ContentTranslationUpdatesManager
-   */
-  protected $updatesManager;
-
-  /**
    * Constructs a ContentTranslationManageAccessCheck object.
    *
    * @param \Drupal\Core\Entity\EntityManagerInterface $manager
    *   The entity type manager.
-   * @param \Drupal\content_translation\ContentTranslationUpdatesManager $updates_manager
-   *   The updates manager.
    */
-  public function __construct(EntityManagerInterface $manager, ContentTranslationUpdatesManager $updates_manager) {
+  public function __construct(EntityManagerInterface $manager) {
     $this->entityManager = $manager;
-    $this->updatesManager = $updates_manager;
   }
 
   /**
@@ -81,8 +71,6 @@ public function getSupportedEntityTypes() {
   public function setEnabled($entity_type_id, $bundle, $value) {
     $config = $this->loadContentLanguageSettings($entity_type_id, $bundle);
     $config->setThirdPartySetting('content_translation', 'enabled', $value)->save();
-    $entity_type = $this->entityManager->getDefinition($entity_type_id);
-    $this->updatesManager->updateDefinitions(array($entity_type_id => $entity_type));
   }
 
   /**
diff --git a/core/modules/content_translation/src/ContentTranslationUpdatesManager.php b/core/modules/content_translation/src/ContentTranslationUpdatesManager.php
deleted file mode 100644
index 4fa54f3..0000000
--- a/core/modules/content_translation/src/ContentTranslationUpdatesManager.php
+++ /dev/null
@@ -1,104 +0,0 @@
-<?php
-
-namespace Drupal\content_translation;
-
-use Drupal\Component\Utility\NestedArray;
-use Drupal\Core\Config\ConfigEvents;
-use Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface;
-use Drupal\Core\Entity\EntityManagerInterface;
-use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\migrate\Event\MigrateEvents;
-use Drupal\migrate\Event\MigrateImportEvent;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-
-/**
- * Provides the logic needed to update field storage definitions when needed.
- */
-class ContentTranslationUpdatesManager implements EventSubscriberInterface {
-
-  /**
-   * The entity manager.
-   *
-   * @var \Drupal\Core\Entity\EntityManagerInterface
-   */
-  protected $entityManager;
-
-  /**
-   * The entity definition update manager.
-   *
-   * @var \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface
-   */
-  protected $updateManager;
-
-  /**
-   * Constructs an updates manager instance.
-   *
-   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
-   *   The entity manager.
-   * @param \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface $update_manager
-   *   The entity definition update manager.
-   */
-  public function __construct(EntityManagerInterface $entity_manager, EntityDefinitionUpdateManagerInterface $update_manager) {
-    $this->entityManager = $entity_manager;
-    $this->updateManager = $update_manager;
-  }
-
-  /**
-   * Executes field storage definition updates if needed.
-   *
-   * @param array $entity_types
-   *   A list of entity type definitions to be processed.
-   */
-  public function updateDefinitions(array $entity_types) {
-    // Handle field storage definition creation, if needed.
-    // @todo Generalize this code in https://www.drupal.org/node/2346013.
-    // @todo Handle initial values in https://www.drupal.org/node/2346019.
-    if ($this->updateManager->needsUpdates()) {
-      foreach ($entity_types as $entity_type_id => $entity_type) {
-        $storage_definitions = $this->entityManager->getFieldStorageDefinitions($entity_type_id);
-        $installed_storage_definitions = $this->entityManager->getLastInstalledFieldStorageDefinitions($entity_type_id);
-        foreach (array_diff_key($storage_definitions, $installed_storage_definitions) as $storage_definition) {
-          /** @var $storage_definition \Drupal\Core\Field\FieldStorageDefinitionInterface */
-          if ($storage_definition->getProvider() == 'content_translation') {
-            $this->updateManager->installFieldStorageDefinition($storage_definition->getName(), $entity_type_id, 'content_translation', $storage_definition);
-          }
-        }
-      }
-    }
-  }
-
-  /**
-   * Listener for the ConfigImporter import event.
-   */
-  public function onConfigImporterImport() {
-    $entity_types = array_filter($this->entityManager->getDefinitions(), function (EntityTypeInterface $entity_type) {
-      return $entity_type->isTranslatable();
-    });
-    $this->updateDefinitions($entity_types);
-  }
-
-  /**
-   * Listener for migration imports.
-   */
-  public function onMigrateImport(MigrateImportEvent $event) {
-    $migration = $event->getMigration();
-    $configuration = $migration->getDestinationConfiguration();
-    $entity_types = NestedArray::getValue($configuration, ['content_translation_update_definitions']);
-    if ($entity_types) {
-      $entity_types = array_intersect_key($this->entityManager->getDefinitions(), array_flip($entity_types));
-      $this->updateDefinitions($entity_types);
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function getSubscribedEvents() {
-    $events[ConfigEvents::IMPORT][] = ['onConfigImporterImport', 60];
-    if (class_exists('\Drupal\migrate\Event\MigrateEvents')) {
-      $events[MigrateEvents::POST_IMPORT][] = ['onMigrateImport'];
-    }
-    return $events;
-  }
-
-}
diff --git a/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateLanguageContentSettingsTest.php b/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateLanguageContentSettingsTest.php
index 0420d70..33ac603 100644
--- a/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateLanguageContentSettingsTest.php
+++ b/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateLanguageContentSettingsTest.php
@@ -25,6 +25,7 @@ protected function setUp() {
     parent::setUp();
 
     $this->installConfig(['node']);
+    $this->installEntitySchema('node');
     $this->executeMigrations(['d6_node_type', 'd6_language_content_settings']);
   }
 
diff --git a/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateLanguageContentSettingsTest.php b/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateLanguageContentSettingsTest.php
index defc6cd..3cbf1d6 100644
--- a/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateLanguageContentSettingsTest.php
+++ b/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateLanguageContentSettingsTest.php
@@ -24,6 +24,7 @@ protected function setUp() {
     parent::setUp();
 
     $this->installConfig(['node']);
+    $this->installEntitySchema('node');
     $this->executeMigrations(['d7_node_type', 'd7_language_content_settings']);
   }
 
