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/includes/salsa_entity.mock.inc b/includes/salsa_entity.mock.inc
index aed947b..2cbe364 100644
--- a/includes/salsa_entity.mock.inc
+++ b/includes/salsa_entity.mock.inc
@@ -87,6 +87,81 @@ class SalsaAPIMock extends SalsaAPI implements SalsaAPIInterface {
 </data>
 EOF;
     }
+    elseif (($query[0] == 'object=supporter') && isset($query[1]) &&
+      (($query[1] == 'condition=supporter_KEY=2'))) {
+      $response = <<<EOF
+<?xml version="1.0"?>
+  <data organization_KEY="11111">
+    <supporter>
+      <item>
+        <supporter_KEY>2</supporter_KEY>
+        <organization_KEY>11111</organization_KEY>
+        <chapter_KEY/>
+        <Last_Modified>Mon May 21 2012 11:56:46 GMT-0400 (EDT)</Last_Modified>
+        <Date_Created>Mon May 20 2012 16:48:23 GMT-0400 (EDT)</Date_Created>
+        <Title>Mr</Title>
+        <First_Name>First Name</First_Name>
+        <MI/>
+        <Last_Name>Last Name</Last_Name>
+        <Suffix/>
+        <Email>example@example.com</Email>
+        <Password>d41d8cd98f00b204e9800998ecf8427e</Password>
+        <Receive_Email>1</Receive_Email>
+        <Email_Status/>
+        <Email_Preference/>
+        <Soft_Bounce_Count>0</Soft_Bounce_Count>
+        <Hard_Bounce_Count>0</Hard_Bounce_Count>
+        <Last_Bounce/>
+        <Receive_Phone_Blasts_BOOLVALUE>false</Receive_Phone_Blasts_BOOLVALUE>
+        <Receive_Phone_Blasts>false</Receive_Phone_Blasts>
+        <Phone/>
+        <Cell_Phone/>
+        <Phone_Provider/>
+        <Work_Phone/>
+        <Pager/>
+        <Home_Fax/>
+        <Work_Fax/>
+        <Street>Example Street</Street>
+        <Street_2/>
+        <Street_3/>
+        <City>Example City</City>
+        <State/>
+        <Zip>1000</Zip>
+        <PRIVATE_Zip_Plus_4>0000</PRIVATE_Zip_Plus_4>
+        <County/>
+        <District/>
+        <Country>CH</Country>
+        <Latitude>0.000000</Latitude>
+        <Longitude>0.000000</Longitude>
+        <Organization/>
+        <Department/>
+        <Occupation/>
+        <Instant_Messenger_Service/>
+        <Instant_Messenger_Name/>
+        <Web_Page/>
+        <Alternative_Email/>
+        <Other_Data_1/>
+        <Other_Data_2/>
+        <Other_Data_3/>
+        <Notes/>
+        <Source>Web</Source>
+        <Source_Details>(No Referring info)</Source_Details>
+        <Source_Tracking_Code>(No Original Source Available)</Source_Tracking_Code>
+        <Tracking_Code/>
+        <Status/>
+        <Timezone/>
+        <Language_Code>eng</Language_Code>
+        <uid/>
+        <custom_field_1/>
+        <custom_field_2/>
+        <key>2</key>
+        <object>supporter</object>
+      </item>
+      <count>1</count>
+  </supporter>
+</data>
+EOF;
+    }
     elseif ($script == '/api/getObjects.sjs' && $query[0] == 'object=signup_page') {
       $response = <<<EOF
 <?xml version="1.0"?>
@@ -3374,7 +3449,7 @@ EOF;
 EOF;
     }
     elseif ($script == '/api/getObjects.sjs' && $query[0] == 'object=translation') {
-      if ($query[1] == 'condition=Status=Active' && $query[2] == 'condition=language_code=deu' & $query[3] == 'condition=termLIKEevent%2C1%2C%25') {
+      if ($query[1] == 'condition=Status=Active' && $query[2] == 'condition=language_code=ger' & $query[3] == 'condition=termLIKEevent%2C1%2C%25') {
         $response = <<<EOF
 <?xml version="1.0"?>
 <data organization_KEY="1111">
@@ -3384,7 +3459,7 @@ EOF;
       <Last_Modified>Mon Jan 1 1970 00:00:00 GMT-0000 (UTC)</Last_Modified>
       <Date_Created>Mon Jan 1 1970 00:00:00 GMT-0000 (UTC)</Date_Created>
       <organization_KEY>1</organization_KEY>
-      <language_code>deu</language_code>
+      <language_code>ger</language_code>
       <term>event,1,Description</term>
       <translation>Description 1 german</translation>
       <Status>Active</Status>
@@ -3396,7 +3471,7 @@ EOF;
       <Last_Modified>Mon Jan 1 1970 00:00:00 GMT-0000 (UTC)</Last_Modified>
       <Date_Created>Mon Jan 1 1970 00:00:00 GMT-0000 (UTC)</Date_Created>
       <organization_KEY>1111</organization_KEY>
-      <language_code>deu</language_code>
+      <language_code>ger</language_code>
       <term>event,1,Directions</term>
       <translation>Directions 1 german</translation>
       <Status>Active</Status>
diff --git a/salsa_advocacy/salsa_advocacy.module b/salsa_advocacy/salsa_advocacy.module
index 0b5fbd4..1199a61 100644
--- a/salsa_advocacy/salsa_advocacy.module
+++ b/salsa_advocacy/salsa_advocacy.module
@@ -666,6 +666,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' => isset($form_state['supporter']->Language_Code) ? $form_state['supporter']->Language_Code : SalsaEntityLanguageMapper::toIso639_2(),
+    );
+  }
 }
 
 /**
diff --git a/salsa_entity.module b/salsa_entity.module
index 81291a8..19dca48 100644
--- a/salsa_entity.module
+++ b/salsa_entity.module
@@ -253,6 +253,23 @@ 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_salsa_supporter_presave($entity) {
+  if (variable_get('salsa_entity_set_supporter_language', TRUE)) {
+    // Set the code only for supporters that don't have any language code yet.
+    if (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) {
diff --git a/tests/salsa_entity.test b/tests/salsa_entity.test
index 89d38e1..721a0f1 100644
--- a/tests/salsa_entity.test
+++ b/tests/salsa_entity.test
@@ -75,7 +75,7 @@ class SalsaEntityTranslationTestCase extends SalsaEntityBaseTestCase {
   }
 
   public function setUp() {
-    parent::setUp(array('salsa_event'));
+    parent::setUp(array('salsa_event', 'locale', 'salsa_entity'));
   }
 
   /**
@@ -105,4 +105,50 @@ class SalsaEntityTranslationTestCase extends SalsaEntityBaseTestCase {
     $this->assertEqual($event2->getTranslation('Event_Name',  'de'), $event2->Event_Name);
   }
 
+  /**
+   * Check whether language is saved proper on supporter objects.
+   */
+  function testSupporterLanguageStorage() {
+    global $language;
+    $language = (object) array(
+      'language' => 'de',
+      'name' => 'German',
+      'native' => 'Deutsch',
+      'direction' => 0,
+      'enabled' => 1,
+      'plurals' => 0,
+      'formula' => '',
+      'domain' => '',
+      'prefix' => '',
+      'weight' => 0,
+      'javascript' => '',
+    );
+    $supporter_id = 1;
+
+    // Disable language storage on supporter objects and make sure the language
+    // code isn't saved.
+    variable_set('salsa_entity_set_supporter_language', FALSE);
+    $supporter = entity_load_single('salsa_supporter', $supporter_id);
+    $supporter->save();
+    $mock = variable_get('salsa_entity_mock_saved');
+    $this->assertTrue(empty($mock['supporter'][$supporter_id]['Language_Code']));
+
+    // Now enable language storage on supporter objects and test if the language
+    // code gets saved.
+    variable_set('salsa_entity_set_supporter_language', TRUE);
+    $supporter = entity_load_single('salsa_supporter', $supporter_id);
+    $supporter->save();
+    $mock = variable_get('salsa_entity_mock_saved');
+    $this->assertEqual($mock['supporter'][$supporter_id]['Language_Code'], SalsaEntityLanguageMapper::toIso639_2($language->language));
+
+    // Load a supporter that already has a language code set to "eng" and test
+    // that the language code doesn't get overridden with "ger", the current
+    // language.
+    $supporter_id = 2;
+    $supporter = entity_load_single('salsa_supporter', $supporter_id);
+    $supporter->save();
+    $mock = variable_get('salsa_entity_mock_saved');
+    $this->assertEqual($supporter->Language_Code, $mock['supporter'][$supporter_id]['Language_Code']);
+  }
+
 }
