diff --git a/tmgmt_oht.connector.inc b/tmgmt_oht.connector.inc
index 3493609..db742ea 100644
--- a/tmgmt_oht.connector.inc
+++ b/tmgmt_oht.connector.inc
@@ -64,6 +64,26 @@ class OHTConnector {
   }
 
   /**
+   * Returns supported language pairs.
+   *
+   * @return mixed
+   *   The list of supported language pairs.
+   */
+  public function getSupportedLanguagePairs() {
+    return $this->getRequest('discover/language_pairs', 'GET', array(), TRUE);
+  }
+
+  /**
+   * Returns supported languages.
+   *
+   * @return mixed
+   *   The list of supported languages.
+   */
+  public function getSupportedLanguages() {
+    return $this->getRequest('discover/languages', 'GET', array(), TRUE);
+  }
+
+  /**
    * Creates new translation project at OHT.
    *
    * @param int $tjiid
diff --git a/tmgmt_oht.plugin.inc b/tmgmt_oht.plugin.inc
index 049aa42..1ee65f2 100644
--- a/tmgmt_oht.plugin.inc
+++ b/tmgmt_oht.plugin.inc
@@ -17,7 +17,6 @@ class TMGMTOhtPluginController extends TMGMTDefaultTranslatorPluginController {
     'bs' => 'bs-ba',
     'bg' => 'bg-bg',
     'ca' => 'ca-es',
-    // '' => 'zh-cn-yue',
     'zn-hans' => 'zh-cn-cmn-s',
     'zn-hant' => 'zh-cn-cmn-t',
     'hr' => 'hr-hr',
@@ -28,10 +27,8 @@ class TMGMTOhtPluginController extends TMGMTDefaultTranslatorPluginController {
     'en-gb' => 'en-uk',
     'en' => 'en-us',
     'et' => 'et-ee',
-    // '' => 'fa-ir',
     'fi' => 'fi-fi',
     'fr' => 'fr-fr',
-    // '' => 'fr-ca',
     'ka' => 'ka-ge',
     'de' => 'de-de',
     'el' => 'el-gr',
@@ -42,7 +39,6 @@ class TMGMTOhtPluginController extends TMGMTDefaultTranslatorPluginController {
     'it' => 'it-it',
     'jp' => 'jp-jp',
     'kk' => 'kk-kz',
-    // '' => 'km-kh',
     'ko' => 'ko-kp',
     'lo' => 'lo-la',
     'lv' => 'lv-lv',
@@ -50,7 +46,6 @@ class TMGMTOhtPluginController extends TMGMTDefaultTranslatorPluginController {
     'mk' => 'mk-mk',
     'ms' => 'ms-my',
     'nb' => 'no-no',
-    'ps' => 'ps',
     'pl' => 'pl-pl',
     'pt-br' => 'pt-br',
     'pt-pt' => 'pt-pt',
@@ -60,14 +55,12 @@ class TMGMTOhtPluginController extends TMGMTDefaultTranslatorPluginController {
     'sk' => 'sk-sk',
     'sl' => 'sl-si',
     'es' => 'es-es',
-    // '' => 'es-ar',
     'sv' => 'sv-se',
     'tl' => 'tl-ph',
     'ta' => 'ta-in',
     'th' => 'th-th',
     'tr' => 'tr-tr',
     'uk' => 'uk-ua',
-    'ur' => 'ur',
     'uz' => 'uz-uz',
     'vi' => 'vi-vn',
   );
@@ -83,35 +76,69 @@ class TMGMTOhtPluginController extends TMGMTDefaultTranslatorPluginController {
    * Implements TMGMTTranslatorPluginControllerInterface::getSupportedLanguages().
    */
   public function getSupportedRemoteLanguages(TMGMTTranslator $translator) {
-    return array_values($this->ohtLanguagesMapping);
+    if (!empty($this->supportedRemoteLanguages)) {
+      return $this->supportedRemoteLanguages;
+    }
+
+    try {
+      $result = $this->getConnector($translator)->getSupportedLanguages();
+      $result = json_decode($result, TRUE);
+
+      // Parse languages.
+      foreach ($result['results'] as $language) {
+        $this->supportedRemoteLanguages[$language['code']] = $language['code'];
+      }
+    } catch (TMGMTOHTException $e) {
+      return [];
+    }
+    return $this->supportedRemoteLanguages;
   }
 
   /**
-   * Implements TMGMTTranslatorPluginControllerInterface::isAvailable().
+   * Implements TMGMTTranslatorPluginControllerInterface::getSupportedTargetLanguages().
    */
-  public function isAvailable(TMGMTTranslator $translator) {
-    if ($translator->getSetting('api_public_key') && $translator->getSetting('api_secret_key')) {
-      return TRUE;
+  public function getSupportedTargetLanguages(TMGMTTranslator $translator, $source_language) {
+    $results = array();
+    $language_pairs = $translator->getSupportedLanguagePairs();
+    foreach ($language_pairs as $language_pair) {
+      if ($source_language == $translator->mapToLocalLanguage($language_pair['source_language'])) {
+        $target_language = $translator->mapToLocalLanguage($language_pair['target_language']);
+        $results[$target_language] = $target_language;
+      }
     }
-    return FALSE;
+
+    return $results;
   }
 
   /**
-   * Implements TMGMTTranslatorPluginControllerInterface::canTranslation().
-   *
-   * We will check are source and target language supported.
+   * Implements TMGMTTranslatorPluginControllerInterface::getSupportedLanguagePairs().
    */
-  public function canTranslate(TMGMTTranslator $translator, TMGMTJob $job) {
-    // If we use sandbox we can translate anyway.
-    if ($translator->getSetting('use_sandbox')) {
-      return TRUE;
+  public function getSupportedLanguagePairs(TMGMTTranslator $translator) {
+    $language_pairs = array();
+
+    try {
+      $result = $this->getConnector($translator)->getSupportedLanguagePairs();
+      $result = json_decode($result, TRUE);
+
+      // Build a mapping of source and target language pairs.
+      foreach ($result['results'] as $language) {
+        foreach ($language['targets'] as $target_language) {
+          $language_pairs[] = array('source_language' => $language['source']['code'], 'target_language' => $target_language['code']);
+        }
+      }
+    } catch (TMGMTOHTException $e) {
+      return array();
     }
-    // If Translator is configured - check if the source and
-    // target language are supported.
-    if ($this->isAvailable($translator)) {
-      $targets = $this->getSupportedRemoteLanguages($translator);
-      return in_array($this->mapToRemoteLanguage($translator, $job->source_language), $targets) &&
-        in_array($this->mapToRemoteLanguage($translator, $job->target_language), $targets);
+
+    return $language_pairs;
+  }
+
+  /**
+   * Implements TMGMTTranslatorPluginControllerInterface::isAvailable().
+   */
+  public function isAvailable(TMGMTTranslator $translator) {
+    if ($translator->getSetting('api_public_key') && $translator->getSetting('api_secret_key')) {
+      return TRUE;
     }
     return FALSE;
   }
