diff --git a/config/schema/tmgmt.schema.yml b/config/schema/tmgmt.schema.yml
index 2947c55..ac40ea7 100644
--- a/config/schema/tmgmt.schema.yml
+++ b/config/schema/tmgmt.schema.yml
@@ -39,11 +39,6 @@ tmgmt.translator.*:
       label: 'Translator plugin'
     settings:
       type: tmgmt.translator.settings.[%parent.plugin]
-    remote_languages_mappings:
-      type: sequence
-      sequence:
-        type: string
-        label: Language key
 
 views.access.tmgmt_job:
   type: mapping
@@ -55,3 +50,8 @@ tmgmt.translator_base:
     auto_accept:
       type: boolean
       label: Automatically accept
+    remote_languages_mappings:
+      type: sequence
+      sequence:
+        type: string
+        label: Language key
diff --git a/sources/content/src/Tests/ContentEntitySourceUiTest.php b/sources/content/src/Tests/ContentEntitySourceUiTest.php
index b457e4c..2d6fee4 100644
--- a/sources/content/src/Tests/ContentEntitySourceUiTest.php
+++ b/sources/content/src/Tests/ContentEntitySourceUiTest.php
@@ -101,9 +101,9 @@ class ContentEntitySourceUiTest extends EntityTestBase {
     $this->assertText(t('The translation for @title has been accepted.', array('@title' => $node->getTitle())));
 
     // German node should now be listed and be clickable.
-    $this->clickLink('de_' . $node->label());
-    $this->assertText('de_' . $node->getTitle());
-    $this->assertText('de_' . $node->body->value);
+    $this->clickLink('de-ch_' . $node->label());
+    $this->assertText('de-ch_' . $node->getTitle());
+    $this->assertText('de-ch_' . $node->body->value);
 
     // Test that the destination query argument does not break the redirect
     // and we are redirected back to the correct page.
@@ -243,8 +243,8 @@ class ContentEntitySourceUiTest extends EntityTestBase {
     // Translated nodes should now be listed and be clickable.
     // @todo Use links on translate tab.
     $this->drupalGet('de/node/' . $node->id());
-    $this->assertText('de_' . $node->getTitle());
-    $this->assertText('de_' . $node->body->value);
+    $this->assertText('de-ch_' . $node->getTitle());
+    $this->assertText('de-ch_' . $node->body->value);
 
     $this->drupalGet('es/node/' . $node->id());
     $this->assertText('es_' . $node->getTitle());
@@ -336,8 +336,8 @@ class ContentEntitySourceUiTest extends EntityTestBase {
     $this->assertText(t('The translation for @title has been accepted.', array('@title' => $comment->getSubject())));
 
     // The translated content should be in place.
-    $this->clickLink('de_' . $comment->getSubject());
-    $this->assertText('de_' . $comment->get('comment_body')->value);
+    $this->clickLink('de-ch_' . $comment->getSubject());
+    $this->assertText('de-ch_' . $comment->get('comment_body')->value);
     // @todo Remove when https://www.drupal.org/node/2444267 is fixed.
     \Drupal::entityManager()->getViewBuilder('node')->resetCache();
     $this->drupalGet('comment/1/translations');
diff --git a/sources/locale/src/Tests/LocaleSourceTest.php b/sources/locale/src/Tests/LocaleSourceTest.php
index fe19e52..6081b9c 100644
--- a/sources/locale/src/Tests/LocaleSourceTest.php
+++ b/sources/locale/src/Tests/LocaleSourceTest.php
@@ -76,7 +76,7 @@ class LocaleSourceTest extends TMGMTKernelTestBase {
     }
 
     // Check string translation.
-    $expected_translation = $job->getTargetLangcode() . '_' . $source_text;
+    $expected_translation = $job->getRemoteTargetLanguage() . '_' . $source_text;
     $this->assertTranslation($locale_object->lid, 'de', $expected_translation);
 
     // Translate the german translation to spanish.
@@ -101,7 +101,7 @@ class LocaleSourceTest extends TMGMTKernelTestBase {
     }
 
     // Check string translation.
-    $this->assertTranslation($locale_object->lid, $target_langcode, $job->getTargetLangcode() . '_' . $expected_translation);
+    $this->assertTranslation($locale_object->lid, $target_langcode, $job->getRemoteTargetLanguage() . '_' . $expected_translation);
   }
 
   /**
diff --git a/src/Form/TranslatorForm.php b/src/Form/TranslatorForm.php
index cabb59c..1ef2359 100644
--- a/src/Form/TranslatorForm.php
+++ b/src/Form/TranslatorForm.php
@@ -233,6 +233,7 @@ class TranslatorForm extends EntityForm {
    */
   public function save(array $form, FormStateInterface $form_state) {
     $entity = $this->entity;
+    $entity->setSetting('remote_languages_mappings', $form_state->getValue('remote_languages_mappings'));
     $status = $entity->save();
 
     if ($status === SAVED_UPDATED) {
diff --git a/src/Tests/PluginsTest.php b/src/Tests/PluginsTest.php
index be321e5..69bc87f 100644
--- a/src/Tests/PluginsTest.php
+++ b/src/Tests/PluginsTest.php
@@ -85,11 +85,11 @@ class PluginsTest extends TMGMTKernelTestBase {
     foreach ($translate_job->getItems() as $item) {
       // Check the translated text.
       if ($i != 3) {
-        $expected_text = 'de_Text for job item with type ' . $item->getItemType() . ' and id ' . $item->getItemId() . '.';
+        $expected_text = 'de-ch_Text for job item with type ' . $item->getItemType() . ' and id ' . $item->getItemId() . '.';
       }
       else {
         // The third item has an explicitly stored data value.
-        $expected_text = 'de_Stored data';
+        $expected_text = 'de-ch_Stored data';
       }
       $item_data = $item->getData();
       $this->assertEqual($expected_text, $item_data['dummy']['deep_nesting']['#translation']['#text']);
diff --git a/src/Tests/TranslatorTest.php b/src/Tests/TranslatorTest.php
index 3db34ef..25feb5a 100644
--- a/src/Tests/TranslatorTest.php
+++ b/src/Tests/TranslatorTest.php
@@ -125,4 +125,53 @@ class TranslatorTest extends TMGMTTestBase {
     $this->assertEqual($this->default_translator->mapToRemoteLanguage('de'), 'de');
   }
 
+  /**
+   * Test multiple local language with one single remote language.
+   */
+  protected function testMultipleLocalToSingleRemoteMapping() {
+    $this->addLanguage('pt-br');
+    $this->addLanguage('pt-pt');
+
+    // Add mapping to the file translator.
+    $edit = array(
+      'remote_languages_mappings[pt-br]' => 'pt',
+      'remote_languages_mappings[pt-pt]' => 'pt',
+    );
+    $this->drupalPostForm('admin/config/regional/tmgmt_translator/manage/test_translator', $edit, t('Save'));
+    $this->drupalGet('admin/config/regional/tmgmt_translator/manage/test_translator');
+    $this->assertFieldById('edit-remote-languages-mappings-pt-br', 'pt', 'Mapping saved correctly');
+
+    // Test first local language.
+    $job = tmgmt_job_match_item('en', 'pt-br');
+    $job->addItem('test_source', 'test', 0);
+    $edit = array(
+      'target_language' => 'pt-br',
+    );
+    $this->drupalPostAjaxForm('admin/tmgmt/jobs/' . $job->id(), $edit, 'target_language');
+    $this->assertFieldByXPath('//select[@id="edit-translator"]//option[@value="test_translator"]', t('Test translator (auto created)'), 'Translator maps correctly');
+    $this->drupalPostForm(NULL, $edit, t('Submit to translator'));
+    $this->assertText('Portuguese, Brazil');
+    $this->assertEqual(count($job->getItems()), 1);
+    $this->assertTrue($job->getItems()[1]->accepted());
+    $this->drupalGet('admin/tmgmt/items/' . 1);
+    $this->assertText('pt_Text for job item with type ' . $job->getItems()[1]->getItemType() . ' and id ' . $job->getItems()[1]->getItemId() . '.');
+    $this->assertEqual($job->getTargetLangcode(), 'pt-br');
+
+    // Test the other local language.
+    $job = tmgmt_job_match_item('en', 'pt-pt');
+    $job->addItem('test_source', 'test', 0);
+    $edit = array(
+      'target_language' => 'pt-pt',
+    );
+    $this->drupalPostAjaxForm('admin/tmgmt/jobs/' . $job->id(), $edit, 'target_language');
+    $this->assertFieldByXPath('//select[@id="edit-translator"]//option[@value="test_translator"]', t('Test translator (auto created)'), 'Translator maps correctly');
+    $this->drupalPostForm(NULL, $edit, t('Submit to translator'));
+    $this->assertText('Portuguese, Portugal');
+    $this->assertEqual(count($job->getItems()), 1);
+    $this->assertTrue($job->getItems()[2]->accepted());
+    $this->drupalGet('admin/tmgmt/items/' . 2);
+    $this->assertText('pt_Text for job item with type ' . $job->getItems()[2]->getItemType() . ' and id ' . $job->getItems()[2]->getItemId() . '.');
+    $this->assertEqual($job->getTargetLangcode(), 'pt-pt');
+  }
+
 }
diff --git a/tmgmt_test/config/schema/tmgmt_test.schema.yml b/tmgmt_test/config/schema/tmgmt_test.schema.yml
index ff8933f..c88fd3b 100644
--- a/tmgmt_test/config/schema/tmgmt_test.schema.yml
+++ b/tmgmt_test/config/schema/tmgmt_test.schema.yml
@@ -16,8 +16,3 @@ tmgmt.translator.settings.test_translator:
     another_key:
       type: string
       label: Another key
-    remote_languages_mappings:
-      type: sequence
-      sequence:
-        type: string
-        label: Language key
diff --git a/tmgmt_test/src/Plugin/tmgmt/Translator/TestTranslator.php b/tmgmt_test/src/Plugin/tmgmt/Translator/TestTranslator.php
index 9d6f6be..ed63a59 100644
--- a/tmgmt_test/src/Plugin/tmgmt/Translator/TestTranslator.php
+++ b/tmgmt_test/src/Plugin/tmgmt/Translator/TestTranslator.php
@@ -86,7 +86,7 @@ class TestTranslator extends TranslatorPluginBase implements TranslatorRejectDat
         $data = array_filter(\Drupal::service('tmgmt.data')->flatten($job->getData()), array(\Drupal::service('tmgmt.data'), 'filterData'));
         $tdata = array();
         foreach ($data as $key => $value) {
-          $tdata[$key]['#text'] = $job->getTargetLangcode() . '_' . $value['#text'];
+          $tdata[$key]['#text'] = $job->getRemoteTargetLanguage() . '_' . $value['#text'];
         }
         $job->submitted('Test translation created.');
         $job->addTranslatedData(\Drupal::service('tmgmt.data')->unflatten($tdata));
@@ -108,7 +108,7 @@ class TestTranslator extends TranslatorPluginBase implements TranslatorRejectDat
    * {@inheritdoc}
    */
   public function getSupportedTargetLanguages(TranslatorInterface $translator, $source_language) {
-    $languages = array('en', 'de', 'es', 'it', 'zh-hans', 'gsw-berne');
+    $languages = array('en', 'de', 'es', 'it', 'pt', 'zh-hans', 'gsw-berne');
     $languages = array_combine($languages, $languages);
     unset($languages[$source_language]);
     return $languages;
