diff --git a/src/Entity/Job.php b/src/Entity/Job.php
index 48feca2..3befafe 100644
--- a/src/Entity/Job.php
+++ b/src/Entity/Job.php
@@ -374,6 +374,13 @@ class Job extends ContentEntityBase implements EntityOwnerInterface, JobInterfac
   /**
    * {@inheritdoc}
    */
+  public function getRemoteSourceLanguage() {
+    return $this->getTranslator()->mapToRemoteLanguage($this->getSourceLangcode());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function getSetting($name) {
     if (isset($this->settings->$name)) {
       return $this->settings->$name;
diff --git a/src/Entity/Translator.php b/src/Entity/Translator.php
index 22316e8..e5e4097 100644
--- a/src/Entity/Translator.php
+++ b/src/Entity/Translator.php
@@ -127,6 +127,13 @@ class Translator extends ConfigEntityBase implements TranslatorInterface {
   protected $languageCacheOutdated;
 
   /**
+   * The remote languages mappings.
+   *
+   * @var array
+   */
+  protected $remoteLanguagesMappings = array();
+
+  /**
    * {@inheritdoc}
    */
   public function id() {
@@ -345,15 +352,37 @@ class Translator extends ConfigEntityBase implements TranslatorInterface {
   /**
    * {@inheritdoc}
    */
-  public function mapToRemoteLanguage($language) {
-    return $this->getPlugin()->mapToRemoteLanguage($this, $language);
+  public function getRemoteLanguagesMappings() {
+    if (!empty($this->remoteLanguagesMappings)) {
+      return $this->remoteLanguagesMappings;
+    }
+
+    foreach (\Drupal::languageManager()->getLanguages() as $language => $info) {
+      $this->remoteLanguagesMappings[$language] = $this->mapToRemoteLanguage($language);
+    }
+
+    return $this->remoteLanguagesMappings;
   }
 
   /**
    * {@inheritdoc}
    */
-  public function mapToLocalLanguage($language) {
-    return $this->getPlugin()->mapToLocalLanguage($this, $language);
+  public function mapToRemoteLanguage($language) {
+    if (!$this->providesRemoteLanguageMappings()) {
+      return $language;
+    }
+
+    if ($mappings = $this->getSetting(['remote_languages_mappings', $language])) {
+      return $mappings;
+    }
+
+    $default_mappings = $this->getPlugin()->getDefaultRemoteLanguagesMappings();
+
+    if (isset($default_mappings[$language])) {
+      return $default_mappings[$language];
+    }
+
+    return $language;
   }
 
   /**
diff --git a/src/JobInterface.php b/src/JobInterface.php
index 33360ec..70c32d1 100644
--- a/src/JobInterface.php
+++ b/src/JobInterface.php
@@ -219,6 +219,14 @@ interface JobInterface extends ContentEntityInterface, EntityOwnerInterface {
   public function getMessagesSince($time = NULL);
 
   /**
+   * Returns remote source language code.
+   *
+   * @return string
+   *   Remote language code.
+   */
+  public function getRemoteSourceLanguage();
+
+  /**
    * Retrieves a setting value from the job settings.
    *
    * Pulls the default values (if defined) from the plugin controller.
diff --git a/src/Tests/PluginsTest.php b/src/Tests/PluginsTest.php
index 63a1ef4..3474f09 100644
--- a/src/Tests/PluginsTest.php
+++ b/src/Tests/PluginsTest.php
@@ -141,32 +141,29 @@ class PluginsTest extends TMGMTKernelTestBase {
    */
   function testRemoteLanguagesMappings() {
     $this->addLanguage('en');
-    $controller = $this->default_translator->getPlugin();
 
-    $mappings = $controller->getRemoteLanguagesMappings($this->default_translator);
+    $mappings = $this->default_translator->getRemoteLanguagesMappings();
     $this->assertEqual($mappings, array(
       'en' => 'en-us',
       'de' => 'de-ch',
     ));
 
-    $this->assertEqual($controller->mapToRemoteLanguage($this->default_translator, 'en'), 'en-us');
-    $this->assertEqual($controller->mapToRemoteLanguage($this->default_translator, 'de'), 'de-ch');
-    $this->assertEqual($controller->mapToLocalLanguage($this->default_translator, 'en-us'), 'en');
-    $this->assertEqual($controller->mapToLocalLanguage($this->default_translator, 'de-ch'), 'de');
+    $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');
     $this->default_translator->save();
 
-    $this->assertEqual($controller->mapToRemoteLanguage($this->default_translator, 'en'), 'en-uk');
-    $this->assertEqual($controller->mapToRemoteLanguage($this->default_translator, 'de'), 'de-de');
+    $this->assertEqual($this->default_translator->mapToRemoteLanguage('en'), 'en-uk');
+    $this->assertEqual($this->default_translator->mapToRemoteLanguage('de'), 'de-de');
 
     // Test the fallback.
     $this->container->get('state')->set('tmgmt_test_translator_map_languages', FALSE);
     $this->container->get('plugin.manager.tmgmt.translator')->clearCachedDefinitions();
 
-    $this->assertEqual($controller->mapToRemoteLanguage($this->default_translator, 'en'), 'en');
-    $this->assertEqual($controller->mapToRemoteLanguage($this->default_translator, 'de'), 'de');
+    $this->assertEqual($this->default_translator->mapToRemoteLanguage('en'), 'en');
+    $this->assertEqual($this->default_translator->mapToRemoteLanguage('de'), 'de');
   }
 
   /**
diff --git a/src/TranslatorInterface.php b/src/TranslatorInterface.php
index 2dce386..ee14cfe 100644
--- a/src/TranslatorInterface.php
+++ b/src/TranslatorInterface.php
@@ -167,30 +167,25 @@ interface TranslatorInterface extends ConfigEntityInterface {
   public function getNotCanTranslateReason(JobInterface $job);
 
   /**
-   * Maps local language to remote language.
-   *
-   * @param string $language
-   *   Local language code.
+   * Gets existing remote languages mappings.
    *
-   * @return string
-   *   Remote language code.
+   * This method is responsible to provide all local to remote language pairs.
    *
-   * @ingroup tmgmt_remote_languages_mapping
+   * @return array
+   *   An array of local => remote language codes
    */
-  public function mapToRemoteLanguage($language);
+  public function getRemoteLanguagesMappings();
 
   /**
-   * Maps remote language to local language.
+   * Maps local language to remote language.
    *
    * @param string $language
-   *   Remote language code.
-   *
-   * @return string
    *   Local language code.
    *
-   * @ingroup tmgmt_remote_languages_mapping
+   * @return string
+   *   Remote language code.
    */
-  public function mapToLocalLanguage($language);
+  public function mapToRemoteLanguage($language);
 
   /**
    * Determines if this translator supports remote language mappings.
diff --git a/src/TranslatorPluginBase.php b/src/TranslatorPluginBase.php
index 4de183a..f3b8813 100644
--- a/src/TranslatorPluginBase.php
+++ b/src/TranslatorPluginBase.php
@@ -20,7 +20,6 @@ use Drupal\tmgmt\Entity\Translator;
 abstract class TranslatorPluginBase extends PluginBase implements TranslatorPluginInterface {
 
   protected $supportedRemoteLanguages = array();
-  protected $remoteLanguagesMappings = array();
 
   /**
    * Characters that indicate the beginning of an escaped string.
@@ -83,63 +82,6 @@ abstract class TranslatorPluginBase extends PluginBase implements TranslatorPlug
   /**
    * {@inheritdoc}
    */
-  public function getRemoteLanguagesMappings(TranslatorInterface $translator) {
-    if (!empty($this->remoteLanguagesMappings)) {
-      return $this->remoteLanguagesMappings;
-    }
-
-    foreach (\Drupal::languageManager()->getLanguages() as $language => $info) {
-      $this->remoteLanguagesMappings[$language] = $this->mapToRemoteLanguage($translator, $language);
-    }
-
-    return $this->remoteLanguagesMappings;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function mapToRemoteLanguage(TranslatorInterface $translator, $language) {
-    if (!$translator->providesRemoteLanguageMappings()) {
-      return $language;
-    }
-
-    if ($mappings = $translator->getSetting(['remote_languages_mappings', $language])) {
-      return $mappings;
-    }
-
-    $default_mappings = $this->getDefaultRemoteLanguagesMappings();
-
-    if (isset($default_mappings[$language])) {
-      return $default_mappings[$language];
-    }
-
-    return $language;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function mapToLocalLanguage(TranslatorInterface $translator, $language) {
-    if (!$translator->providesRemoteLanguageMappings()) {
-      return $language;
-    }
-
-    $mappings = $translator->getSetting('remote_languages_mappings');
-    if (is_null($mappings)) {
-      $mappings = $this->getDefaultRemoteLanguagesMappings();
-    }
-
-    if ($remote_language = array_search($language, $mappings)) {
-      return $remote_language;
-    }
-
-    return $language;
-  }
-
-
-  /**
-   * {@inheritdoc}
-   */
   public function getSupportedTargetLanguages(TranslatorInterface $translator, $source_language) {
     $languages = entity_metadata_language_list();
     unset($languages[LANGUAGE_NONE], $languages[$source_language]);
diff --git a/src/TranslatorPluginInterface.php b/src/TranslatorPluginInterface.php
index c6af5ce..21373d4 100644
--- a/src/TranslatorPluginInterface.php
+++ b/src/TranslatorPluginInterface.php
@@ -99,49 +99,6 @@ interface TranslatorPluginInterface extends PluginInspectionInterface {
   public function getSupportedRemoteLanguages(TranslatorInterface $translator);
 
   /**
-   * Gets existing remote languages mappings.
-   *
-   * This method is responsible to provide all local to remote language pairs.
-   *
-   * @param \Drupal\tmgmt\TranslatorInterface $translator
-   *   Translator entity for which to get mappings.
-   *
-   * @return array
-   *   An array of local => remote language codes.
-   *
-   * @ingroup tmgmt_remote_languages_mapping
-   */
-  public function getRemoteLanguagesMappings(TranslatorInterface $translator);
-
-  /**
-   * @param TranslatorInterface $translator
-   *   Translator entity for which to get remote language.
-   * @param $language
-   *   Local language code.
-   *
-   * @return string
-   *   Remote language code.
-   *
-   * @ingroup tmgmt_remote_languages_mapping
-   */
-  public function mapToRemoteLanguage(TranslatorInterface $translator, $language);
-
-  /**
-   * Maps remote language to local language.
-   *
-   * @param \Drupal\tmgmt\TranslatorInterface $translator
-   *   Translator entity for which to get local language.
-   * @param $language
-   *   Remote language code.
-   *
-   * @return string
-   *   Local language code.
-   *
-   * @ingroup tmgmt_remote_languages_mapping
-   */
-  public function mapToLocalLanguage(TranslatorInterface $translator, $language);
-
-  /**
    * Returns all available target languages that are supported by this service
    * when given a source language.
    *
diff --git a/tmgmt.api.php b/tmgmt.api.php
index e375f5d..2e0fe94 100644
--- a/tmgmt.api.php
+++ b/tmgmt.api.php
@@ -175,7 +175,7 @@ function hook_tmgmt_translator_plugin_info_alter(&$info) {
  * TMGMTDefaultTranslatorPluginController that deal with mappings info.
  *
  * - getRemoteLanguagesMappings() - provides pairs of local_code => remote_code.
- * - mapToRemoteLanguage() & mapToLocalLanguage() - helpers to map local/remote.
+ * - mapToRemoteLanguage() - helpers to map local/remote.
  *   Note that methods with same names and functionality are provided by the
  *   TMGMTTranslator entity. These are convenience methods.
  *
diff --git a/translators/tmgmt_file/src/Plugin/tmgmt_file/Format/Html.php b/translators/tmgmt_file/src/Plugin/tmgmt_file/Format/Html.php
index 7198253..323ac76 100644
--- a/translators/tmgmt_file/src/Plugin/tmgmt_file/Format/Html.php
+++ b/translators/tmgmt_file/src/Plugin/tmgmt_file/Format/Html.php
@@ -56,8 +56,8 @@ class Html implements FormatInterface {
     $elements = array(
       '#theme' => 'tmgmt_file_html_template',
       '#tjid' => $job->id(),
-      '#source_language' => $job->getTranslator()->mapToRemoteLanguage($job->getSourceLangcode()),
-      '#target_language' => $job->getTranslator()->mapToRemoteLanguage($job->getTargetLangcode()),
+      '#source_language' => $job->getRemoteSourceLanguage(),
+      '#target_language' => $job->getRemoteSourceLanguage(),
       '#items' => $items,
     );
     return \Drupal::service('renderer')->renderPlain($elements);
@@ -113,8 +113,8 @@ class Html implements FormatInterface {
     }
 
     // Check language.
-    if ($meta['languageSource'] != $job->getTranslator()->mapToRemoteLanguage($job->getSourceLangcode()) ||
-        $meta['languageTarget'] != $job->getTranslator()->mapToRemoteLanguage($job->getTargetLangcode())) {
+    if ($meta['languageSource'] != $job->getRemoteSourceLanguage() ||
+        $meta['languageTarget'] != $job->getRemoteSourceLanguage()) {
       return FALSE;
     }
 
diff --git a/translators/tmgmt_file/src/Plugin/tmgmt_file/Format/Xliff.php b/translators/tmgmt_file/src/Plugin/tmgmt_file/Format/Xliff.php
index 1df29f7..61725b9 100644
--- a/translators/tmgmt_file/src/Plugin/tmgmt_file/Format/Xliff.php
+++ b/translators/tmgmt_file/src/Plugin/tmgmt_file/Format/Xliff.php
@@ -114,7 +114,7 @@ class Xliff extends \XMLWriter implements FormatInterface {
     $this->writeAttribute('resname', $key);
 
     $this->startElement('source');
-    $this->writeAttribute('xml:lang', $this->job->getTranslator()->mapToRemoteLanguage($this->job->getSourceLangcode()));
+    $this->writeAttribute('xml:lang', $this->job->getRemoteSourceLanguage());
 
     if ($job->getSetting('xliff_processing')) {
       $this->writeRaw($this->processForExport($element['#text'], $key_array));
@@ -125,7 +125,7 @@ class Xliff extends \XMLWriter implements FormatInterface {
 
     $this->endElement();
     $this->startElement('target');
-    $this->writeAttribute('xml:lang', $this->job->getTranslator()->mapToRemoteLanguage($this->job->getTargetLangcode()));
+    $this->writeAttribute('xml:lang', $this->job->getRemoteSourceLanguage());
 
     if (!empty($element['#translation']['#text'])) {
       if ($job->getSetting('xliff_processing')) {
@@ -165,8 +165,8 @@ class Xliff extends \XMLWriter implements FormatInterface {
     // File element.
     $this->startElement('file');
     $this->writeAttribute('original', 'xliff-core-1.2-strict.xsd');
-    $this->writeAttribute('source-language', $job->getTranslator()->mapToRemoteLanguage($job->getSourceLangcode()));
-    $this->writeAttribute('target-language', $job->getTranslator()->mapToRemoteLanguage($job->getTargetLangcode()));
+    $this->writeAttribute('source-language', $job->getRemoteSourceLanguage());
+    $this->writeAttribute('target-language', $job->getRemoteSourceLanguage());
     $this->writeAttribute('datatype', 'plaintext');
     // Date needs to be in ISO-8601 UTC
     $this->writeAttribute('date', date('Y-m-d\Th:m:i\Z'));
@@ -249,7 +249,7 @@ class Xliff extends \XMLWriter implements FormatInterface {
     }
 
     // Compare source language.
-    if (!isset($xml->file['source-language']) || $job->getTranslator()->mapToRemoteLanguage($job->getSourceLangcode()) != $xml->file['source-language']) {
+    if (!isset($xml->file['source-language']) || $job->getRemoteSourceLanguage() != $xml->file['source-language']) {
       $job->addMessage('The imported file source language @file_language does not match the job source language @job_language.', array(
         '@file_language' => empty($xml->file['source-language']) ? t('none') : $xml->file['source-language'],
         '@job_language' => $job->source_language,
@@ -258,7 +258,7 @@ class Xliff extends \XMLWriter implements FormatInterface {
     }
 
     // Compare target language.
-    if (!isset($xml->file['target-language']) || $job->getTranslator()->mapToRemoteLanguage($job->getTargetLangcode()) != $xml->file['target-language']) {
+    if (!isset($xml->file['target-language']) || $job->getRemoteSourceLanguage() != $xml->file['target-language']) {
       $job->addMessage('The imported file target language @file_language does not match the job target language @job_language.', array(
         '@file_language' => empty($xml->file['target-language']) ? t('none') : $xml->file['target-language'],
         '@job_language' => $job->target_language,
