diff --git a/plugin/tmgmt.ui.translator.inc b/plugin/tmgmt.ui.translator.inc
index 15578d2..2705ced 100644
--- a/plugin/tmgmt.ui.translator.inc
+++ b/plugin/tmgmt.ui.translator.inc
@@ -16,9 +16,17 @@ class TMGMTDefaultTranslatorUIController extends TMGMTPluginBase implements TMGM
       $controller = tmgmt_translator_plugin_controller($translator->plugin);
     }
 
-    // If current translator is configured to provide remote language mapping
-    // provide the form to configure mappings, unless it does not exists yet.
-    if (!empty($controller) && tmgmt_provide_remote_languages_mappings($translator)) {
+    // We have supported remote languages therefore we can display the config
+    // form for languages mappings.
+    if (tmgmt_provide_remote_languages_mappings($translator) && !empty($controller)) {
+
+      // Load the supported remote languages.
+      $supported_remote_languages = array();
+      if (!empty($controller)) {
+        $supported_remote_languages = $controller->getSupportedRemoteLanguages($translator);
+      }
+
+      $form_state['supported_remote_languages'] = $supported_remote_languages;
 
       $form['remote_languages_mappings'] = array(
         '#tree' => TRUE,
@@ -29,26 +37,46 @@ class TMGMTDefaultTranslatorUIController extends TMGMTPluginBase implements TMGM
         '#collapsed' => TRUE,
       );
 
-      $options = array();
-      foreach ($controller->getSupportedRemoteLanguages($translator) as $language) {
+      $options = array(LANGUAGE_NONE => t('Undefined'));
+      $non_configured = array();
+      foreach ($supported_remote_languages as $language) {
         $options[$language] = $language;
       }
 
       foreach ($controller->getRemoteLanguagesMappings($translator) as $local_language => $remote_language) {
+
+        // Check if the remote language is among supported remote languages and
+        // if not select the "und" option and add it to the non configured
+        // languages.
+        $default = $remote_language;
+        if (empty($remote_language) || !isset($options[$remote_language]) || $remote_language == LANGUAGE_NONE) {
+          $non_configured[$local_language] = $local_language;
+          $default = LANGUAGE_NONE;
+        }
+
         $form['remote_languages_mappings'][$local_language] = array(
-          '#type' => 'textfield',
+          '#type' => 'select',
           '#title' => tmgmt_language_label($local_language) . ' (' . $local_language . ')',
-          '#default_value' => $remote_language,
-          '#size' => 6,
+          '#default_value' => $default,
+          '#options' => $options,
+          '#element_validate' => array('tmgmt_ui_remote_mappings_validate'),
         );
 
-        if (!empty($options)) {
-          $form['remote_languages_mappings'][$local_language]['#type'] = 'select';
-          $form['remote_languages_mappings'][$local_language]['#options'] = $options;
-          $form['remote_languages_mappings'][$local_language]['#empty_option'] = ' - ';
-          unset($form['remote_languages_mappings'][$local_language]['#size']);
+        // In case we do not have any remote languages output a textfield
+        // instead of the select.
+        if (empty($supported_remote_languages)) {
+          $form['remote_languages_mappings'][$local_language]['#type'] = 'textfield';
+          $form['remote_languages_mappings'][$local_language]['#size'] = 6;
         }
       }
+
+      if (!empty($non_configured)) {
+        $form['remote_languages_mappings']['#collapsed'] = FALSE;
+        drupal_set_message(format_plural(count($non_configured),
+          'Local language %list does not have target language and thus cannot be used for translation.',
+          'Local languages %list do not have target language and thus cannot be used for translation.',
+          array('%list' => implode(', ', $non_configured))), 'warning');
+      }
     }
 
     if (!element_children($form)) {
diff --git a/ui/tmgmt_ui.module b/ui/tmgmt_ui.module
index 5dd392c..80fa259 100644
--- a/ui/tmgmt_ui.module
+++ b/ui/tmgmt_ui.module
@@ -1193,3 +1193,31 @@ function tmgmt_ui_help($path, $arg) {
 
   return $output;
 }
+
+/**
+ * Remote languages mappings form validator.
+ *
+ * @see TMGMTDefaultTranslatorUIController::pluginSettingsForm().
+ */
+function tmgmt_ui_remote_mappings_validate($element, &$form_state, $form) {
+  $duplicates = array();
+
+  foreach ($form_state['values']['settings']['remote_languages_mappings'] as $remote_language) {
+    // Keep track of remote languages assigned to multiple local languages.
+    if (array_key_exists($remote_language, $duplicates) && $remote_language != LANGUAGE_NONE) {
+      $duplicates[$remote_language] = $remote_language;
+    }
+    else {
+      $duplicates[$remote_language] = NULL;
+    }
+  }
+
+  $duplicates = array_filter($duplicates);
+  if (!empty($duplicates)) {
+    form_set_error('settings][remote_languages_mappings', format_plural(count($duplicates),
+      'Remote language %list is assigned to more than one local language.',
+      'Remote languages %list are assigned to more than one local language.',
+      array('%list' => implode(', ', $duplicates)))
+    );
+  }
+}
