diff --git a/sources/content/src/Tests/ContentEntitySourceUiTest.php b/sources/content/src/Tests/ContentEntitySourceUiTest.php
index 7875484..3aa4a98 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(de-ch): ' . $node->label());
+    $this->assertText('de(de-ch): ' . $node->getTitle());
+    $this->assertText('de(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.
@@ -246,12 +246,12 @@ 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(de-ch): ' . $node->getTitle());
+    $this->assertText('de(de-ch): ' . $node->body->value);
 
     $this->drupalGet('es/node/' . $node->id());
-    $this->assertText('es_' . $node->getTitle());
-    $this->assertText('es_' . $node->body->value);
+    $this->assertText('es: ' . $node->getTitle());
+    $this->assertText('es: ' . $node->body->value);
   }
 
   /**
@@ -339,14 +339,14 @@ 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(de-ch): ' . $comment->getSubject());
+    $this->assertText('de(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');
-    $this->clickLink('es_' . $comment->getSubject());
+    $this->clickLink('es: ' . $comment->getSubject());
     $this->drupalGet('es/node/' . $comment->id());
-    $this->assertText('es_' . $comment->get('comment_body')->value);
+    $this->assertText('es: ' . $comment->get('comment_body')->value);
   }
 
   /**
diff --git a/sources/locale/src/Tests/LocaleSourceTest.php b/sources/locale/src/Tests/LocaleSourceTest.php
index fe19e52..913f476 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->getTargetLangcode() . '(' . $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->getTargetLangcode() . ': ' . $expected_translation);
   }
 
   /**
diff --git a/sources/locale/src/Tests/LocaleSourceUiTest.php b/sources/locale/src/Tests/LocaleSourceUiTest.php
index 315e89f..965be1c 100644
--- a/sources/locale/src/Tests/LocaleSourceUiTest.php
+++ b/sources/locale/src/Tests/LocaleSourceUiTest.php
@@ -85,7 +85,7 @@ class LocaleSourceUiTest extends TMGMTTestBase {
     // Review and accept the job item.
     $job_items = tmgmt_job_item_load_latest('locale', 'default', $locale_object->lid, 'en');
     $this->drupalGet('admin/tmgmt/items/' . $job_items['gsw-berne']->id());
-    $this->assertRaw('gsw-berne_Hello World');
+    $this->assertRaw('gsw-berne: Hello World');
     $this->drupalPostForm(NULL, array(), t('Save as completed'));
     $this->drupalGet('admin/tmgmt/sources/locale/default');
 
diff --git a/src/Entity/Translator.php b/src/Entity/Translator.php
index fdcc1f3..f18bb8f 100644
--- a/src/Entity/Translator.php
+++ b/src/Entity/Translator.php
@@ -44,6 +44,7 @@ use Drupal\tmgmt\TranslatorInterface;
  *     "weight",
  *     "plugin",
  *     "settings",
+ *     "remote_languages_mappings",
  *   },
  *   links = {
  *     "collection" = "/admin/config/regional/tmgmt_translator",
@@ -400,8 +401,9 @@ class Translator extends ConfigEntityBase implements TranslatorInterface {
       return $language;
     }
 
-    if ($mapping = $this->getSetting(['remote_languages_mappings', $language])) {
-      return $mapping;
+    $mapping = $this->get('remote_languages_mappings');
+    if (!empty($mapping) && array_key_exists($language, $mapping)) {
+      return $mapping[$language];
     }
 
     $default_mappings = $this->getPlugin()->getDefaultRemoteLanguagesMappings();
diff --git a/src/Tests/PluginsTest.php b/src/Tests/PluginsTest.php
index 0e7b6b3..04eabb3 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(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(de-ch): Stored data';
       }
       $item_data = $item->getData();
       $this->assertEqual($expected_text, $item_data['dummy']['deep_nesting']['#translation']['#text']);
diff --git a/src/Tests/TMGMTKernelTestBase.php b/src/Tests/TMGMTKernelTestBase.php
index 6aa870c..e9ef868 100644
--- a/src/Tests/TMGMTKernelTestBase.php
+++ b/src/Tests/TMGMTKernelTestBase.php
@@ -44,7 +44,7 @@ abstract class TMGMTKernelTestBase extends KernelTestBase {
     $this->installEntitySchema('tmgmt_job_item');
     $this->installEntitySchema('tmgmt_message');
 
-    $this->default_translator = entity_create('tmgmt_translator', array('name' => 'test_translator', 'plugin' => 'test_translator'));
+    $this->default_translator = entity_create('tmgmt_translator', array('name' => 'test_translator', 'plugin' => 'test_translator', 'remote_languages_mappings' => []));
     $this->default_translator->save();
 
     $this->addLanguage('de');
@@ -60,6 +60,7 @@ abstract class TMGMTKernelTestBase extends KernelTestBase {
       'name' => strtolower($this->randomMachineName()),
       'label' => $this->randomMachineName(),
       'plugin' => 'test_translator',
+      'remote_languages_mappings' => [],
       'settings' => array(
         'key' => $this->randomMachineName(),
         'another_key' => $this->randomMachineName(),
diff --git a/src/Tests/TranslatorTest.php b/src/Tests/TranslatorTest.php
index 3db34ef..5a28077 100644
--- a/src/Tests/TranslatorTest.php
+++ b/src/Tests/TranslatorTest.php
@@ -110,8 +110,10 @@ class TranslatorTest extends TMGMTTestBase {
     $this->assertEqual($this->default_translator->mapToRemoteLanguage('en'), 'en-us');
     $this->assertEqual($this->default_translator->mapToRemoteLanguage('de'), 'de-ch');
 
-    $this->default_translator->setSetting(['remote_languages_mappings', 'de'], 'de-de');
-    $this->default_translator->setSetting(['remote_languages_mappings', 'en'], 'en-uk');
+    $remote_language_mappings = $this->default_translator->get('remote_languages_mappings');
+    $remote_language_mappings['de'] = 'de-de';
+    $remote_language_mappings['en'] = 'en-uk';
+    $this->default_translator->set('remote_languages_mappings', $remote_language_mappings);
     $this->default_translator->save();
 
     $this->assertEqual($this->default_translator->mapToRemoteLanguage('en'), 'en-uk');
@@ -125,4 +127,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-br(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-pt(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.module b/tmgmt.module
index 89d6b64..b6d809a 100644
--- a/tmgmt.module
+++ b/tmgmt.module
@@ -427,6 +427,7 @@ function tmgmt_translator_auto_create(array $definition) {
     $translator = Translator::create([
       'name' => $plugin,
       'plugin' => $plugin,
+      'remote_languages_mappings' => array(),
       'label' => $definition['label'] . ' (auto created)',
       'description' => (string) $definition['description'],
     ]);
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..1b2942a 100644
--- a/tmgmt_test/src/Plugin/tmgmt/Translator/TestTranslator.php
+++ b/tmgmt_test/src/Plugin/tmgmt/Translator/TestTranslator.php
@@ -86,7 +86,12 @@ 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'];
+          if ($job->getTargetLangcode() != $job->getRemoteTargetLanguage()) {
+            $tdata[$key]['#text'] = $job->getTargetLangcode() . '(' . $job->getRemoteTargetLanguage() . '): ' . $value['#text'];
+          }
+          else {
+            $tdata[$key]['#text'] = $job->getTargetLangcode() . ': ' . $value['#text'];
+          }
         }
         $job->submitted('Test translation created.');
         $job->addTranslatedData(\Drupal::service('tmgmt.data')->unflatten($tdata));
@@ -108,7 +113,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;
