diff --git a/includes/salsa_entity.entity.inc b/includes/salsa_entity.entity.inc
index d25df5b..524ab43 100644
--- a/includes/salsa_entity.entity.inc
+++ b/includes/salsa_entity.entity.inc
@@ -103,15 +103,15 @@ class SalsaEntity extends Entity {
    * Implements Entity::getTranslation().
    */
   public function getTranslation($property, $langcode = NULL) {
-    // The language code from salsa is in ISO-693-3, drupal language is in
-    // ISO-693 - this means we need to convert the 2-char drupal language
-    // into a 3-char language.
-    $iso693_3_langcode = SalsaEntityLanguageMapper::toIso693_3($langcode);
+    // The language code from salsa is in ISO-639-2, drupal language is in
+    // ISO-639-1 - this means we need to convert the 2-char drupal language
+    // code into a 3-char salsa language code.
+    $iso639_2_langcode = SalsaEntityLanguageMapper::toIso639_2($langcode);
 
-    if (!isset(self::$translations[$iso693_3_langcode][$this->getSalsaType()][$this->identifier()])) {
-      self::$translations[$iso693_3_langcode][$this->getSalsaType()][$this->identifier()] = $this->loadTranslation($iso693_3_langcode);
+    if (!isset(self::$translations[$iso639_2_langcode][$this->getSalsaType()][$this->identifier()])) {
+      self::$translations[$iso639_2_langcode][$this->getSalsaType()][$this->identifier()] = $this->loadTranslation($iso639_2_langcode);
     }
-    $data = self::$translations[$iso693_3_langcode][$this->getSalsaType()][$this->identifier()];
+    $data = self::$translations[$iso639_2_langcode][$this->getSalsaType()][$this->identifier()];
 
     // Return the translated value or the default one if there is no translation.
     if (isset($data[$property])) {
@@ -125,15 +125,15 @@ class SalsaEntity extends Entity {
   /**
    * Loads the translation data for the current entity and given language.
    *
-   * @param string $iso693_3
+   * @param string $iso639_2
    *   Language code.
    *
    * @return array
    *   Array with translations.
    */
-  protected function loadTranslation($iso693_3) {
+  protected function loadTranslation($iso639_2) {
     // Check for cached data.
-    $cache_key = $iso693_3 . ':' . $this->getSalsaType() . ':' . $this->identifier();
+    $cache_key = $iso639_2 . ':' . $this->getSalsaType() . ':' . $this->identifier();
     $cache = cache_get($cache_key, 'cache_salsa_translation');
 
     if ($cache && (REQUEST_TIME < $cache->expire)) {
@@ -148,14 +148,14 @@ class SalsaEntity extends Entity {
         // build the conditions array and get all values form salsa.
         $conditions = array(
           'Status' => array('#value' => 'Active', '#operator' => '='),
-          'language_code' => array('#value' => $iso693_3, '#operator' => '='),
+          'language_code' => array('#value' => $iso639_2, '#operator' => '='),
           'term' => array('#value' => $term, '#operator' => 'LIKE'),
         );
         $values = $salsa->getObjects('translation', $conditions);
 
         // Get all translations and cache the results.
         foreach ($values as $item) {
-          if ($item->language_code == $iso693_3) {
+          if ($item->language_code == $iso639_2) {
             $field = substr($item->term, strrpos($item->term, ',') + 1);
             $data[$field] = $item->translation;
           }
diff --git a/includes/salsa_entity.language_mapper.inc b/includes/salsa_entity.language_mapper.inc
index 1730a59..11faceb 100644
--- a/includes/salsa_entity.language_mapper.inc
+++ b/includes/salsa_entity.language_mapper.inc
@@ -2,64 +2,73 @@
 
 /**
  * @file
- * Contains SalsaEntityIso693.
+ * Contains SalsaEntityLanguageMapper.
  */
 
 /**
- * Static helper class to get the ISO-693-3 language code from a given ISO-693-2.
+ * Static helper class.
+ *
+ * Gets the ISO-639-2 language code from a given ISO-639-1 and vice versa.
  */
 class SalsaEntityLanguageMapper {
 
   /**
-   * Mapping of language codes, keyed by ISO-693-2.
+   * Mapping of language codes, keyed by ISO-639-1.
    *
    * @var array
    */
-  protected static $code = array(
-    'de' => 'deu',
+  protected static $code_mapping = array(
+    'de' => 'ger',
     'en' => 'eng',
     'fr' => 'fre',
     'it' => 'ita',
     'es' => 'spa',
     'ru' => 'rus',
+    'ca' => 'cat',
+    'ar' => 'ara',
+    'ku' => 'kur',
+    'pt' => 'por',
   );
 
   /**
-   * Returns a ISO-693-3 code for the requested language.
+   * Returns a ISO-639-2 code for the requested language.
    *
    * @param string $langcode
-   *   (optional) ISO-693-2 Code language - 2-char, defaults to the current
+   *   (optional) ISO-639-1 Code language - 2-char, defaults to the current
    *   language.
    *
    * @return string|null
-   *   The ISO-693-3 or NULL if the language is not defined yet.
+   *   The ISO-639-2 or NULL if the language is not defined yet.
    */
-  public static function toIso693_3($langcode = NULL) {
+  public static function toIso639_2($langcode = NULL) {
     global $language;
 
     if (!isset($langcode)) {
       $langcode = $language->language;
     }
+    // Provide possibility to override code mapping.
+    $codes = variable_get('salsa_entity_supporter_language_code_mapping', self::$code_mapping);
 
-    if (isset(self::$code[$langcode])) {
-      return self::$code[$langcode];
+    if (isset($codes[$langcode])) {
+      return $codes[$langcode];
     }
     return NULL;
   }
 
-
   /**
-   * Returns a ISO-693-3 code for the requested language.
+   * Returns a ISO-639-1 code for the requested language.
    *
    * @param string $langcode
-   *   ISO-693-3 Code language - 3-char.
+   *   ISO-639-2 Code language - 3-char.
    *
    * @return string|null
-   *   The ISO-693-2 or NULL if the language is not defined yet.
+   *   The ISO-639-1 or NULL if the language is not defined yet.
    */
-  public static function fromIso693_3($langcode) {
-    if ($key = array_search($langcode, self::$code)) {
-      return self::$code[$key];
+  public static function fromIso639_2($langcode) {
+    // Provide possibility to override code mapping.
+    $codes = variable_get('salsa_entity_supporter_language_code_mapping', self::$code_mapping);
+    if ($key = array_search($langcode, $codes)) {
+      return $codes[$key];
     }
     return NULL;
   }
diff --git a/salsa_advocacy/salsa_advocacy.module b/salsa_advocacy/salsa_advocacy.module
index 31b05ce..0fa47d2 100644
--- a/salsa_advocacy/salsa_advocacy.module
+++ b/salsa_advocacy/salsa_advocacy.module
@@ -663,6 +663,14 @@ function salsa_advocacy_targeted_form_hidden_fields(&$form, $form_state) {
     '#type' => 'hidden',
     '#value' => $form_state['salsa_object']->redirect_path,
   );
+
+  // Add field for the supporter language, unless setting it was disabled.
+  if (variable_get('salsa_entity_set_supporter_language', TRUE)) {
+    $form['Supporter_Info']['Language_Code'] = array(
+      '#type' => 'hidden',
+      '#value' => SalsaEntityLanguageMapper::toIso639_2(),
+    );
+  }
 }
 
 /**
diff --git a/salsa_entity.module b/salsa_entity.module
index 8f39734..b8da30e 100644
--- a/salsa_entity.module
+++ b/salsa_entity.module
@@ -232,6 +232,24 @@ function salsa_entity_salsa_object_type_info() {
 }
 
 /**
+ * Implements hook_entity_presave().
+ *
+ * Necessary to set the language property on supporter objects upon saving and
+ * updating.
+ */
+function salsa_entity_entity_presave($entity, $type) {
+  if ($type == 'salsa_supporter' && variable_get('salsa_entity_set_supporter_language', TRUE)) {
+    // Set the code only for new supporters and such that don't have any
+    // language code yet.
+    if (empty($entity->supporter_KEY) && empty($entity->Language_Code)) {
+      $lang_code = SalsaEntityLanguageMapper::toIso639_2();
+      $default_language = variable_get('language_default');
+      $entity->Language_Code = $lang_code ? $lang_code : SalsaEntityLanguageMapper::toIso639_2($default_language->language);
+    }
+  }
+}
+
+/**
  * A callback that returns at list of possible values for the property.
  */
 function salsa_entity_property_info_options($name, $info) {
