diff --git a/src/Entity/Translator.php b/src/Entity/Translator.php
index 575dc34..7f33b50 100644
--- a/src/Entity/Translator.php
+++ b/src/Entity/Translator.php
@@ -143,7 +143,7 @@ class Translator extends ConfigEntityBase implements TranslatorInterface {
    *
    * @var array
    */
-  protected $remoteLanguagesMappings = array();
+  protected $remote_languages_mappings = array();
 
   /**
    * {@inheritdoc}
@@ -371,15 +371,15 @@ class Translator extends ConfigEntityBase implements TranslatorInterface {
    * {@inheritdoc}
    */
   public function getRemoteLanguagesMappings() {
-    if (!empty($this->remoteLanguagesMappings)) {
-      return $this->remoteLanguagesMappings;
+    if (!empty($this->remote_languages_mappings)) {
+      return $this->remote_languages_mappings;
     }
 
     foreach (\Drupal::languageManager()->getLanguages() as $language => $info) {
-      $this->remoteLanguagesMappings[$language] = $this->mapToRemoteLanguage($language);
+      $this->remote_languages_mappings[$language] = $this->mapToRemoteLanguage($language);
     }
 
-    return $this->remoteLanguagesMappings;
+    return $this->remote_languages_mappings;
   }
 
   /**
diff --git a/src/Form/TranslatorForm.php b/src/Form/TranslatorForm.php
index e1d2804..2054e6c 100644
--- a/src/Form/TranslatorForm.php
+++ b/src/Form/TranslatorForm.php
@@ -127,7 +127,9 @@ class TranslatorForm extends EntityForm {
       $form['plugin_wrapper']['plugin'] = array(
         '#type' => 'select',
         '#title' => t('Translator plugin'),
+        '#submit' => array('::updateRemoteLanguagesMappings'),
         '#limit_validation_errors' => array(array('plugin')),
+        '#executes_submit_callback' => TRUE,
         '#description' => isset($definition['description']) ? Xss::filter($definition['description']) : '',
         '#options' => $available,
         '#default_value' => $entity->getPluginID(),
@@ -167,11 +169,7 @@ class TranslatorForm extends EntityForm {
         '#open' => TRUE,
       );
 
-      $options = array();
-      foreach ($controller->getSupportedRemoteLanguages($entity) as $language) {
-        $options[$language] = $language;
-      }
-
+      $options = $controller->getSupportedRemoteLanguages($entity);
       foreach ($entity->getRemoteLanguagesMappings() as $local_language => $remote_language) {
         $form['plugin_wrapper']['remote_languages_mappings'][$local_language] = array(
           '#type' => 'textfield',
@@ -213,6 +211,30 @@ class TranslatorForm extends EntityForm {
   }
 
   /**
+   * Updates remote languages mappings.
+   *
+   * @param array $form
+   *   An associative array containing the initial structure of the form.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The current state of the complete form.
+   */
+  public function updateRemoteLanguagesMappings(array $form, FormStateInterface $form_state) {
+    // After updating translator plugin, we have to empty remote languages
+    // mappings on it in order to retrieve new ones.
+    $this->entity->set('remote_languages_mappings', NULL);
+
+    if (!empty($form_state->getUserInput()['remote_languages_mappings'])) {
+      // The user input containing remote languages mappings from an old
+      // translator has priority over new mappings. Similarly to the action
+      // above, we have to remove it from here as well.
+      $user_input = $form_state->getUserInput();
+      unset($user_input['remote_languages_mappings']);
+      $form_state->setUserInput($user_input);
+    }
+    $form_state->setRebuild();
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function validateForm(array &$form, FormStateInterface $form_state) {
