diff --git a/includes/salsa_entity.entity.inc b/includes/salsa_entity.entity.inc
index c023419..ccb4a68 100644
--- a/includes/salsa_entity.entity.inc
+++ b/includes/salsa_entity.entity.inc
@@ -35,18 +35,26 @@ class SalsaEntity extends Entity {
 
   public function defaultUri() {
     return array(
-      'path' => 'salsa/' . str_replace('salsa_', '', $this->entityType) . '/' . $this->{$this->idKey},
+      'path' => 'salsa/' . $this->getSalsaType() . '/' . $this->{$this->idKey},
       'options' => array(),
     );
   }
 
   /**
+   * Get the entity type without the "salsa_" prefix.
+   *
+   * @return string
+   */
+  protected function getSalsaType() {
+    return str_replace('salsa_', '', $this->entityType);
+  }
+
+  /**
    * Defines the entity label if the 'entity_class_label' callback is used.
    */
   protected function defaultLabel() {
-    // Add in the translated specified label property.
     if (!empty($this->entityInfo['entity keys']['label'])) {
-      return $this->{$this->entityInfo['entity keys']['label']};
+      return $this->getTranslation($this->entityInfo['entity keys']['label']);
     }
   }
 
@@ -88,4 +96,57 @@ class SalsaEntity extends Entity {
 
     return $return;
   }
+
+  /**
+   * 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 = Iso693::get($langcode);
+
+    // Check for cached data.
+    $cache_key = 'salsa:translation:' . $iso693_3 . ':' . $this->getSalsaType() . ':' . $this->identifier();
+    $cache = cache_get($cache_key, 'cache');
+
+    if (!$cache || (REQUEST_TIME > $cache->expire)) {
+      $data = array();
+
+      if ($salsa = salsa_api()) {
+        // Build the term based on the object and the ID of this entity.
+        $term = $this->getSalsaType() . ',' . $this->identifier() . ',%';
+
+        // build the conditions array and get all values form salsa.
+        $conditions = array(
+          'Status' => array('#value' => 'Active', '#operator' => '='),
+          'language_code' => array('#value' => $iso693_3, '#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) {
+            $field = substr($item->term, strrpos($item->term, ',') + 1);
+            $data[$field] = $item->translation;
+          }
+        }
+
+        // Cache the result for 10 minutes.
+        cache_set($cache_key, $data, 'cache', REQUEST_TIME + 600);
+      }
+    }
+    else {
+      $data = $cache->data;
+    }
+
+    // Return the translated value or the default one if there is no translation.
+    if (isset($data[$property])) {
+      return $data[$property];
+    }
+
+    // Return the default value or an empty string.
+    return isset($this->{$property}) ? $this->{$property} : NULL;
+  }
 }
diff --git a/includes/salsa_entity.iso693-3.inc b/includes/salsa_entity.iso693-3.inc
new file mode 100644
index 0000000..6d3a429
--- /dev/null
+++ b/includes/salsa_entity.iso693-3.inc
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * @file
+ * Static helper class to get the ISO-693-3 language code from a given ISO-693-2.
+ */
+
+/**
+ * Class Iso693
+ */
+class Iso693 {
+  /**
+   * returns a ISO-693-3 code for the requested language.
+   *
+   * @param string $langcode
+   *   Optional: ISO-693-2 Code language - 2-char
+   *
+   * @return string|null
+   *   The ISO-693-3 or NULL if the language is not defined yet.
+   */
+  public static function get($langcode = NULL) {
+    global $language;
+
+    if (!isset($langcode)) {
+      $langcode = $language->language;
+    }
+
+    if (array_key_exists($langcode, self::$code)) {
+      return self::$code[$langcode];
+    }
+    return NULL;
+  }
+
+  private static $code = array(
+    'de' => 'deu',
+    'en' => 'eng',
+    'fr' => 'fre',
+    'it' => 'ita',
+    'es' => 'spa',
+    'ru' => 'rus',
+  );
+
+}
diff --git a/includes/salsa_entity.mock.inc b/includes/salsa_entity.mock.inc
index 02f2599..59cddd0 100644
--- a/includes/salsa_entity.mock.inc
+++ b/includes/salsa_entity.mock.inc
@@ -87,7 +87,7 @@ class SalsaAPIMock extends SalsaAPI implements SalsaAPIInterface {
 </data>
 EOF;
     }
-    elseif ($query[0] == 'object=signup_page') {
+    elseif ($script == '/api/getObjects.sjs' && $query[0] == 'object=signup_page') {
       $response = <<<EOF
 <?xml version="1.0"?>
 <data organization_KEY="11111">
@@ -139,7 +139,7 @@ EOF;
 </data>
 EOF;
     }
-    elseif ($query[0] == 'object=groups' && count($query) == 1) {
+    elseif ($script == '/api/getObjects.sjs' && $query[0] == 'object=groups' && count($query) == 1) {
       $response = <<<EOF
 <?xml version="1.0"?>
 <data organization_KEY="11111">
@@ -269,7 +269,7 @@ EOF;
 </data>
 EOF;
     }
-    elseif ($query[0] == 'object=supporter_groups' && isset($query[1]) && $query[1] == 'condition=supporter_KEY=1') {
+    elseif ($script == '/api/getObjects.sjs' && $query[0] == 'object=supporter_groups' && isset($query[1]) && $query[1] == 'condition=supporter_KEY=1') {
       $response = <<<EOF
 <?xml version="1.0"?>
 <data organization_KEY="11111">
@@ -289,7 +289,7 @@ EOF;
 </data>
 EOF;
     }
-    elseif ($query[0] == 'object=tag') {
+    elseif ($script == '/api/getObjects.sjs' && $query[0] == 'object=tag') {
       $response = <<<EOF
 <?xml version="1.0"?>
 <data organization_KEY="11111">
@@ -338,7 +338,7 @@ EOF;
 </data>
 EOF;
     }
-    elseif ($query[0] == 'object=tag_data') {
+    elseif ($script == '/api/getObjects.sjs' && $query[0] == 'object=tag_data') {
       $response = <<<EOF
 <?xml version="1.0"?>
 <data organization_KEY="11111">
@@ -490,7 +490,7 @@ EOF;
 </data>
 EOF;
     }
-    elseif ($query[0] == 'object=database_table' && isset($query[1]) && $query[1] == 'condition=table_name=supporter') {
+    elseif ($script == '/api/getObjects.sjs' && $query[0] == 'object=database_table' && isset($query[1]) && $query[1] == 'condition=table_name=supporter') {
       $response = <<<EOF
 <?xml version="1.0"?>
 <data organization_KEY="11111">
@@ -610,7 +610,7 @@ EOF;
 </data>
 EOF;
     }
-    elseif ($query[0] == 'object=unsubscribe_page') {
+    elseif ($script == '/api/getObjects.sjs' && $query[0] == 'object=unsubscribe_page') {
       $response = <<<EOF
 <?xml version="1.0"?>
 <data organization_KEY="11111">
@@ -646,7 +646,6 @@ EOF;
 </data>
 EOF;
     }
-
     elseif ($script == '/api/describe2.sjs' && $query[0] == 'object=supporter_my_donate_page_donation') {
       $response = <<<EOF
 <?xml version="1.0"?>
@@ -774,8 +773,7 @@ EOF;
 </data>
 EOF;
     }
-
-    if ($script == '/api/describe2.sjs' && $query[0] == 'object=donation') {
+    elseif ($script == '/api/describe2.sjs' && $query[0] == 'object=donation') {
       $response = <<<EOF
 <?xml version="1.0"?>
 <data organization_KEY="0">
@@ -3255,7 +3253,7 @@ EOF;
 </data>
 EOF;
     }
-    elseif (($query[0] == 'object=event') && isset($query[1]) && $query[1] == 'condition=event_KEY=1') {
+    elseif ($script == '/api/getObjects.sjs' && ($query[0] == 'object=event') && isset($query[1]) && $query[1] == 'condition=event_KEY=1') {
       $limit = variable_get('salsa_entity_mock_max_attendee', 2);
       $paid = variable_get('salsa_entity_mock_event_payment', 'true');
       $response = <<<EOF
@@ -3347,7 +3345,7 @@ EOF;
 </data>
 EOF;
     }
-    elseif ($query[0] == 'object=supporter_event' && isset($query[1]) && $query[1] == 'condition=supporter_KEY=999'
+    elseif ($script == '/api/getObjects.sjs' && $query[0] == 'object=supporter_event' && isset($query[1]) && $query[1] == 'condition=supporter_KEY=999'
       && isset($query[2]) && $query[2] == 'condition=event_KEY=1') {
       $response = <<<EOF
 <?xml version="1.0"?>
@@ -3375,6 +3373,52 @@ EOF;
 </data>
 EOF;
     }
+    elseif ($script == '/api/getObjects.sjs' && $query[0] == 'object=translation') {
+      $response = <<<EOF
+<?xml version="1.0"?>
+<data organization_KEY="1111">
+  <translation>
+    <item>
+      <translation_KEY>1</translation_KEY>
+      <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>
+      <term>event,1,Description</term>
+      <translation>Description 1 german</translation>
+      <Status>Active</Status>
+      <key>1</key>
+      <object>translation</object>
+    </item>
+    <item>
+      <translation_KEY>2</translation_KEY>
+      <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>
+      <term>event,1,Directions</term>
+      <translation>Directions 1 german</translation>
+      <Status>Active</Status>
+      <key>2</key>
+      <object>translation</object>
+    </item>
+    <item>
+      <translation_KEY>3</translation_KEY>
+      <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>fre</language_code>
+      <term>event,1,Event_Name</term>
+      <translation>Event_Name 1 french</translation>
+      <Status>Active</Status>
+      <key>3</key>
+      <object>translation</object>
+    </item>
+    <count>3</count>
+  </translation>
+</data>
+EOF;
+    }
     elseif ($query[0] == 'json' && isset($query[1]) && $query[1] = 'object=event'
       && isset($query[2]) && $query[2] == 'condition=event_KEY=1'
       && isset($query[3]) && $query[3] == 'include=' . urlencode('required$groups_KEYS')) {
diff --git a/salsa_advocacy/theme/salsa_advocacy_actions_list.tpl.php b/salsa_advocacy/theme/salsa_advocacy_actions_list.tpl.php
index 578f3b0..0c32278 100644
--- a/salsa_advocacy/theme/salsa_advocacy_actions_list.tpl.php
+++ b/salsa_advocacy/theme/salsa_advocacy_actions_list.tpl.php
@@ -2,8 +2,8 @@
 
 if (!empty($actions)) {
   foreach ($actions as $action) {
-    $title = $action->Title ? $action->Title : t('(No Title)');
-    $description = $action->Description ? '<p>' . $action->Description . '</p>' : '';
+    $title = $action->Title ? $action->getTranslation('Title') : t('(No Title)');
+    $description = $action->Description ? '<p>' . $action->getTranslation('Description') . '</p>' : '';
     echo '<h3>' . l($title, 'salsa/action/' . $action->action_KEY) . '</h3>';
     echo $description;
   }
diff --git a/salsa_donate_page/salsa_donate_page.module b/salsa_donate_page/salsa_donate_page.module
index 31346b1..5eebb8b 100644
--- a/salsa_donate_page/salsa_donate_page.module
+++ b/salsa_donate_page/salsa_donate_page.module
@@ -194,16 +194,18 @@ function salsa_donate_page_form($form, &$form_state, $donate_page, $view_mode) {
     $form['Donation']['donors_list'] = salsa_donate_page_get_donors_list($donate_page);
   }
 
-  if (!empty($donate_page->Custom_Donation_HTML)) {
+  $value = $donate_page->getTranslation('Custom_Donation_HTML');
+  if (!empty($value)) {
     $form['Donation']['Custom_Donation_HTML'] = array(
-      '#markup' => $donate_page->Custom_Donation_HTML,
+      '#markup' => $value,
       '#weight' => 0,
     );
   }
   else {
-    if (!empty($donate_page->Pre_Donation_Text)) {
+    $value = $donate_page->getTranslation('Pre_Donation_Text');
+    if (!empty($value)) {
       $form['Donation']['Pre_Donation_Text'] = array(
-        '#markup' => $donate_page->Pre_Donation_Text,
+        '#markup' => $value,
         '#weight' => 5,
       );
     }
@@ -691,10 +693,11 @@ function salsa_donate_page_form($form, &$form_state, $donate_page, $view_mode) {
     '#maxlength' => 4,
   );
 
-  if (isset($donate_page->Confirm_Box_Text)) {
+  $value = $donate_page->getTranslation('Confirm_Box_Text');
+  if (isset($value)) {
     $form['eligibility'] = array(
       '#type' => 'checkbox',
-      '#title' => check_plain(t($donate_page->Confirm_Box_Text)),
+      '#title' => check_plain($value),
       '#attributes' => array('id' => array('eligibility')),
     );
   }
@@ -705,9 +708,10 @@ function salsa_donate_page_form($form, &$form_state, $donate_page, $view_mode) {
     );
   }
 
-  if (!empty($donate_page->PreSubmit_Footer)) {
+  $value = $donate_page->getTranslation('PreSubmit_Footer');
+  if (!empty($value)) {
     $form['PreSubmit_Footer'] = array(
-      '#markup' => '<p>' . t($donate_page->PreSubmit_Footer) . '</p>',
+      '#markup' => '<p>' . $value . '</p>',
     );
   }
 
diff --git a/salsa_entity.info b/salsa_entity.info
index 007a04e..f6930a3 100644
--- a/salsa_entity.info
+++ b/salsa_entity.info
@@ -8,6 +8,7 @@ dependencies[] = entity
 dependencies[] = salsa_api
 
 files[] = salsa_entity.inc
+files[] = includes/salsa_entity.iso693-3.inc
 files[] = includes/salsa_entity.ui.inc
 files[] = includes/salsa_entity.entity.inc
 files[] = includes/salsa_entity.donation.inc
diff --git a/salsa_event/salsa_event.module b/salsa_event/salsa_event.module
index 55f3a53..f3d9c66 100644
--- a/salsa_event/salsa_event.module
+++ b/salsa_event/salsa_event.module
@@ -300,21 +300,23 @@ function salsa_event_form($form, &$form_state, $event, $view_mode = 'full') {
       );
     }
 
+    $value = $event->getTranslation('Description');
     $form['Description'] = array(
-      '#markup' => isset($event->Description) ? '<div>' . $event->Description . '</div>' : '',
+      '#markup' => isset($value) ? '<div>' . $value . '</div>' : '',
     );
 
     $form['Event_Location'] = array(
       '#markup' => '<h2>' . t('Event Location') . '</h2>',
     );
 
-    if ($event->Location_Common_Name) {
+    $value = $event->getTranslation('Location_Common_Name');
+    if (isset($value)) {
       $form['Location_Common_Name'] = array(
-        '#markup' => '<div><strong>' . $event->Location_Common_Name . '</strong></div>',
+        '#markup' => '<div><strong>' . $value . '</strong></div>',
       );
     }
 
-    if ($event->Address) {
+    if (isset($event->Address)) {
       $form['Address'] = array(
         '#markup' => '<div>' . $event->Address . '</div>',
       );
@@ -333,13 +335,14 @@ function salsa_event_form($form, &$form_state, $event, $view_mode = 'full') {
       );
     }
 
-    if ($event->Directions) {
+    $value = $event->getTranslation('Directions');
+    if (isset($value)) {
       $form['Directions_Label'] = array(
         '#markup' => '<div><strong>' . t('Directions') . '</strong></div>',
       );
 
       $form['Directions'] = array(
-        '#markup' => '<div>' . $event->Directions . '</div>',
+        '#markup' => '<div>' . $value . '</div>',
       );
     }
 
@@ -1157,7 +1160,7 @@ function salsa_event_cancel_form($form, &$form_state, $event_key) {
   $event_key;
   global $user;
   $event = entity_load_single('salsa_event', $event_key);
-  $question = t('Are you sure you want to cancel your registration to event %event_name?', array('%event_name' => $event->Event_Name));
+  $question = t('Are you sure you want to cancel your registration to event %event_name?', array('%event_name' => $event->getTranslation('Event_Name')));
   return confirm_form($form, $question, 'user/' . $user->uid . '/salsa_my_events', t('You can sign up again afterwards.'));
 }
 
diff --git a/salsa_event/theme/salsa_event_display.tpl.php b/salsa_event/theme/salsa_event_display.tpl.php
index 5a8d34a..732d799 100644
--- a/salsa_event/theme/salsa_event_display.tpl.php
+++ b/salsa_event/theme/salsa_event_display.tpl.php
@@ -15,10 +15,10 @@ if ($event->This_Event_Costs_Money == 'false' && $cancel_link) {
     <div class="salsa-event-start"><?php print format_date(strtotime($event->Start)); ?></div>
   <?php endif; ?>
   <?php if (!empty($event->Event_Name)): ?>
-    <div class="salsa-event-name"><?php print l($event->Event_Name, 'salsa/event/' . $event->event_KEY); ?></div>
+    <div class="salsa-event-name"><?php print l($event->getTranslation('Event_Name'), 'salsa/event/' . $event->event_KEY); ?></div>
   <?php endif; ?>
   <?php if (!empty($event->Description)): ?>
-    <div class="salsa-event-description"><?php print $event->Description; ?></div>
+    <div class="salsa-event-description"><?php print $event->getTranslation('Description'); ?></div>
   <?php endif; ?>
   <?php if (!empty($event->Address)): ?>
     <div class="salsa-event-address"><?php print $event->Address; ?></div>
diff --git a/salsa_event/theme/salsa_event_registration_info.tpl.php b/salsa_event/theme/salsa_event_registration_info.tpl.php
index 533c285..3fbd322 100644
--- a/salsa_event/theme/salsa_event_registration_info.tpl.php
+++ b/salsa_event/theme/salsa_event_registration_info.tpl.php
@@ -11,7 +11,7 @@ if (user_access('view salsa my event page') && module_exists('salsa_profile') &&
 else {
   echo '<div>' . t('If this is not you, sign up under a different email address !link', array('!link' => l(t('here'), 'salsa/supporter/reset', array('query' => array('destination' => current_path()))))) . '</div>';
 }
-echo '<div><strong>' . t('Your Registration Information for @event', array('@event' => $event->Event_Name)) . '</strong></div>';
+echo '<div><strong>' . t('Your Registration Information for @event', array('@event' => $event->getTranslation('Event_Name'))) . '</strong></div>';
 
 echo '<table>';
 echo '<tr>';
diff --git a/salsa_my_donate_page/salsa_my_donate_page.module b/salsa_my_donate_page/salsa_my_donate_page.module
index fd5642e..bf26140 100644
--- a/salsa_my_donate_page/salsa_my_donate_page.module
+++ b/salsa_my_donate_page/salsa_my_donate_page.module
@@ -219,7 +219,7 @@ function salsa_my_donate_page_create_form($form, &$form_state, $my_donate_page)
 
   $form['Creation_Page_Description'] = array(
     '#type' => 'item',
-    '#markup' => '<p>' . $form_state['my_donate_page']->Create_Description . '</p>',
+    '#markup' => '<p>' .  $my_donate_page->getTranslation('Create_Description') . '</p>',
   );
 
   salsa_my_donate_page_customize_form($form, $form_state);
@@ -304,14 +304,14 @@ function salsa_my_donate_page_customize_form(&$form, &$form_state) {
   $form['Page_Title'] = array(
     '#type' => 'textfield',
     '#title' => t('Page Title'),
-    '#default_value' => isset($form_state['supporter_my_donate_page']->Page_Title) ? $form_state['supporter_my_donate_page']->Page_Title : $form_state['my_donate_page']->Suggested_Title,
+    '#default_value' => isset($form_state['supporter_my_donate_page']->Page_Title) ? $form_state['supporter_my_donate_page']->Page_Title : $form_state['my_donate_page']->getTranslation('Suggested_Title'),
   );
 
   $form['Description'] = array(
     '#type' => 'textarea',
     '#title' => t('Description'),
     '#description' => t('Please enter a helpful description for your friends.'),
-    '#default_value' => isset($form_state['supporter_my_donate_page']->Description) ? $form_state['supporter_my_donate_page']->Description : $form_state['my_donate_page']->Suggested_Description,
+    '#default_value' => isset($form_state['supporter_my_donate_page']->Description) ? $form_state['supporter_my_donate_page']->Description : $form_state['my_donate_page']->getTranslation('Suggested_Description'),
   );
 
   $form['Donation_Goal_Title'] = array(
@@ -496,7 +496,7 @@ function salsa_my_donate_page_form($form, &$form_state, $supporter_my_donate_pag
   if (!empty($supporter_my_donate_page->Image)) {
     $image_vars = array(
       'path' => variable_get('salsa_api_url') . $supporter_my_donate_page->Image,
-      'alt' => $supporter_my_donate_page->Page_Title,
+      'alt' => $supporter_my_donate_page->getTranslation('Page_Title'),
     );
 
     $form['Image'] = array(
@@ -507,7 +507,7 @@ function salsa_my_donate_page_form($form, &$form_state, $supporter_my_donate_pag
 
   $form['description'] = array(
     '#type' => 'item',
-    '#markup' => check_plain($supporter_my_donate_page->Description),
+    '#markup' => check_plain($supporter_my_donate_page->getTranslation('Description')),
   );
 
   $form['progress'] = array(
@@ -557,8 +557,8 @@ function salsa_my_donate_page_form($form, &$form_state, $supporter_my_donate_pag
 
   $form['Donation']['Pre_Donation_Text'] = array(
     '#type' => 'item',
-    '#markup' => $my_donate_page->Pre_Donation_Text,
-    '#access' => !empty($my_donate_page->Pre_Donation_Text),
+    '#markup' => $my_donate_page->getTranslation('Pre_Donation_Text'),
+    '#access' => strlen($my_donate_page->getTranslation('Pre_Donation_Text')) > 0,
   );
 
   if ($my_donate_page->Include_Recurring_Payments == 'true') {
diff --git a/salsa_my_donate_page/theme/salsa_my_donate_page_campaigns_list.tpl.php b/salsa_my_donate_page/theme/salsa_my_donate_page_campaigns_list.tpl.php
index 05a9a6b..b5f10f5 100644
--- a/salsa_my_donate_page/theme/salsa_my_donate_page_campaigns_list.tpl.php
+++ b/salsa_my_donate_page/theme/salsa_my_donate_page_campaigns_list.tpl.php
@@ -1,8 +1,8 @@
 <?php
 
 foreach ($my_donate_pages as $my_donate_page) {
-  echo '<h2>' . $my_donate_page->Title . '</h2>';
-  echo '<div>' . $my_donate_page->Description . '</div>';
+  echo '<h2>' . $my_donate_page->getTranslation('Title') . '</h2>';
+  echo '<div>' . $my_donate_page->getTranslation('Description') . '</div>';
   $uri = $my_donate_page->uri();
   echo '<div>' . l(t('Select this campaign'), $uri['path']) . '</div>';
 }
diff --git a/salsa_my_donate_page/theme/salsa_my_donate_page_home.tpl.php b/salsa_my_donate_page/theme/salsa_my_donate_page_home.tpl.php
index 69cab7e..2949781 100644
--- a/salsa_my_donate_page/theme/salsa_my_donate_page_home.tpl.php
+++ b/salsa_my_donate_page/theme/salsa_my_donate_page_home.tpl.php
@@ -34,7 +34,7 @@ foreach ($donations as $donation) {
     $donation->RESPMSG,
     $donation->Status,
     $donation->amount,
-    isset($donation->Note) ? $donation->Note : '',
+    isset($donation->Note) ? $donation->getTranslation('Note') : '',
   );
 }
 
diff --git a/salsa_questionnaire/salsa_questionnaire.module b/salsa_questionnaire/salsa_questionnaire.module
index cd90f8a..8bbe5ef 100644
--- a/salsa_questionnaire/salsa_questionnaire.module
+++ b/salsa_questionnaire/salsa_questionnaire.module
@@ -208,9 +208,9 @@ function salsa_questionnaire_form_submit($form, &$form_state) {
 function salsa_questionnaire_build_question_field(&$form, $question, $responses) {
   // SetUp basic field properties.
   $form['Questions']['Response_Question_' . $question->questionnaire_question_KEY] = array(
-    '#title' => check_plain($question->Question),
-    '#prefix' => '<div class="qHeader">' . $question->Header . '</div>',
-    '#suffix' => '<div class="qFooter">' . $question->Footer . '</div>',
+    '#title' => check_plain($question->getTranslation('Question')),
+    '#prefix' => '<div class="qHeader">' . $question->getTranslation('Header') . '</div>',
+    '#suffix' => '<div class="qFooter">' . $question->getTranslation('Footer') . '</div>',
     '#required' => $question->This_Question_Is_Required == 'true' ? TRUE : FALSE,
   );
 
diff --git a/salsa_signup_page/salsa_signup_page.module b/salsa_signup_page/salsa_signup_page.module
index d7442e2..3fc42b6 100644
--- a/salsa_signup_page/salsa_signup_page.module
+++ b/salsa_signup_page/salsa_signup_page.module
@@ -129,7 +129,7 @@ function salsa_signup_page_form($form, &$form_state, $signup_page) {
     $form['Groups'] = array(
       '#type' => 'fieldset',
       '#title' => t('Groups'),
-      '#prefix' => $signup_page->PreGroup_Text,
+      '#prefix' => $signup_page->getTranslation('PreGroup_Text'),
     );
 
     $form['Groups']['groups_KEYS'] = array(
@@ -155,7 +155,7 @@ function salsa_signup_page_form($form, &$form_state, $signup_page) {
       $form['Tags'] = array(
         '#type' => 'fieldset',
         '#title' => t('Tags'),
-        '#prefix' => $signup_page->PreInterest_Text,
+        '#prefix' => $signup_page->getTranslation('PreInterest_Text'),
       );
 
       $form['Tags']['tags'] = array(
@@ -166,7 +166,7 @@ function salsa_signup_page_form($form, &$form_state, $signup_page) {
   }
 
   $form['PreFooter'] = array(
-    '#markup' => '<div>' . $signup_page->PreFooter . '</div>',
+    '#markup' => '<div>' . $signup_page->getTranslation('PreFooter') . '</div>',
   );
 
   // Submit button.
@@ -176,7 +176,7 @@ function salsa_signup_page_form($form, &$form_state, $signup_page) {
   );
 
   $form['Footer'] = array(
-    '#markup' => '<div>' . $signup_page->Footer . '</div>',
+    '#markup' => '<div>' . $signup_page->getTranslation('Footer') . '</div>',
   );
 
   // Add additional submit handler that creates / updates supporter.
@@ -299,7 +299,7 @@ function salsa_signup_page_form_user_register_form_alter(&$form, &$form_state, $
     if (isset($signup_page->Opt_in_Text)) {
       $form['Supporter_Info']['Receive_Email'] = array(
         '#type' => 'checkbox',
-        '#title' => check_plain(t($signup_page->Opt_in_Text)),
+        '#title' => check_plain(t($signup_page->getTranslation('Opt_in_Text'))),
         '#required' => TRUE,
       );
     }
@@ -319,7 +319,7 @@ function salsa_signup_page_form_user_register_form_alter(&$form, &$form_state, $
       $form['Groups'] = array(
         '#type' => 'fieldset',
         '#title' => t('Groups'),
-        '#prefix' => $signup_page->PreGroup_Text,
+        '#prefix' => $signup_page->getTranslation('PreGroup_Text'),
       );
 
       $form['Groups']['groups_KEYS'] = array(
@@ -345,7 +345,7 @@ function salsa_signup_page_form_user_register_form_alter(&$form, &$form_state, $
         $form['Tags'] = array(
           '#type' => 'fieldset',
           '#title' => t('Tags'),
-          '#prefix' => $signup_page->PreInterest_Text,
+          '#prefix' => $signup_page->getTranslation('PreInterest_Text'),
         );
 
         $form['Tags']['tags'] = array(
diff --git a/salsa_tell_a_friend/salsa_tell_a_friend.module b/salsa_tell_a_friend/salsa_tell_a_friend.module
index 812b0ba..7a5e318 100644
--- a/salsa_tell_a_friend/salsa_tell_a_friend.module
+++ b/salsa_tell_a_friend/salsa_tell_a_friend.module
@@ -65,7 +65,7 @@ function salsa_tell_a_friend_form($form, &$form_state, $tell_a_friend) {
   );
 
   $form['HTML_Content'] = array(
-    '#markup' => $tell_a_friend->HTML_Content,
+    '#markup' => $tell_a_friend->getTranslation('HTML_Content'),
   );
 
   $form['Address_Book_Link'] = array(
@@ -96,27 +96,27 @@ function salsa_tell_a_friend_form($form, &$form_state, $tell_a_friend) {
   );
 
   $form['Subject_HTML'] = array(
-    '#markup' => '<div>' . t('Subject:') . '<br />' . $tell_a_friend->Letter_Subject . '</div>',
+    '#markup' => '<div>' . t('Subject:') . '<br />' . $tell_a_friend->getTranslation('Letter_Subject') . '</div>',
   );
 
   $form['subject'] = array(
     '#type' => 'hidden',
-    '#value' => $tell_a_friend->Letter_Subject,
+    '#value' => $tell_a_friend->getTranslation('Letter_Subject'),
   );
 
   $form['content'] = array(
     '#type' => 'textarea',
     '#title' => t('Customize your message'),
-    '#default_value' => $tell_a_friend->Letter_Body,
+    '#default_value' => $tell_a_friend->getTranslation('Letter_Body'),
   );
 
   $form['Uneditable_Content'] = array(
-    '#markup' => '<div>' . t('Here is the message that we are going to append:') . '<br />' . $tell_a_friend->Uneditable_Content . '</div>',
+    '#markup' => '<div>' . t('Here is the message that we are going to append:') . '<br />' . $tell_a_friend->getTranslation('Uneditable_Content') . '</div>',
   );
 
   $form['content2'] = array(
     '#type' => 'hidden',
-    '#value' => $tell_a_friend->Uneditable_Content,
+    '#value' => $tell_a_friend->getTranslation('Uneditable_Content'),
   );
 
   $form['Emails_Limit_Msg'] = array(
diff --git a/salsa_unsubscribe_page/salsa_unsubscribe_page.module b/salsa_unsubscribe_page/salsa_unsubscribe_page.module
index 3e40d66..5aabd48 100644
--- a/salsa_unsubscribe_page/salsa_unsubscribe_page.module
+++ b/salsa_unsubscribe_page/salsa_unsubscribe_page.module
@@ -48,10 +48,11 @@ function salsa_unsubscribe_page_form($form, &$form_state, $unsubscribe_page) {
   }
 
   if ($form_state['supporter']) {
-    if (isset($unsubscribe_page->PreTag_Text)) {
+    $value = $unsubscribe_page->getTranslation('PreTag_Text');
+    if (isset($value)) {
       $form['PreTag_Text'] = array(
         '#type' => 'item',
-        '#markup' => $unsubscribe_page->PreTag_Text,
+        '#markup' => $value,
       );
     }
 
@@ -154,10 +155,11 @@ function salsa_unsubscribe_page_form($form, &$form_state, $unsubscribe_page) {
       );
     }
 
-    if (isset($unsubscribe_page->Footer)) {
+    $value = $unsubscribe_page->getTranslation('Footer');
+    if (isset($value)) {
       $form['Footer'] = array(
         '#type' => 'item',
-        '#markup' => $unsubscribe_page->Footer,
+        '#markup' => $value,
       );
     }
 
diff --git a/tests/salsa_entity.test b/tests/salsa_entity.test
index 64718dd..65c984c 100644
--- a/tests/salsa_entity.test
+++ b/tests/salsa_entity.test
@@ -60,3 +60,58 @@ class SalsaEntityAPITestCase extends SalsaEntityBaseTestCase {
     $this->assertFalse($supporter, t('Supporter with supporter_KEY @key does not exist.', array('@key' => '00000002')));
   }
 }
+
+/**
+ * Tests basic API for translations.
+ */
+class SalsaEntityTranslationTestCase extends SalsaEntityBaseTestCase {
+  public function setUp() {
+    parent::setUp(array('salsa_event'));
+    // Allow anonymous user role to access on salsa event page.
+    user_role_change_permissions(DRUPAL_ANONYMOUS_RID, array(
+      'view salsa_event' => TRUE,
+    ));
+  }
+
+  public static function getInfo() {
+    return array(
+      'name' => t('Test salsa translations'),
+      'description' => t('Check if the translations made in Salsa are loaded and processed correctly.'),
+      'group' => t('Salsa API'),
+    );
+  }
+
+  /**
+   * Check for translation support on SalsaEntity.
+   *
+   * We mock the following values on Event Nr. 1:
+   *  de: Description: Description 1 german
+   *  de: Directions:  Directions 1 german
+   *  fr: Event_Name:  Event_Name 1 french
+   */
+  function testGetTranslationGerman() {
+    $event = entity_load_single('salsa_event', '1');
+    $this->assertTrue(is_object($event), 'Event for translation is loaded successfully.');
+
+    $this->assertEqual($event->getTranslation('Description', 'de'), 'Description 1 german');
+    $this->assertEqual($event->getTranslation('Event_Name',  'de'), 'Test Event');
+    $this->assertEqual($event->getTranslation('Directions',  'de'), 'Directions 1 german');
+  }
+
+  /**
+   * Check for translation support on SalsaEntity.
+   *
+   * We mock the following values on Event Nr. 1:
+   *  de: Description: Description 1 german
+   *  de: Directions:  Directions 1 german
+   *  fr: Event_Name:  Event_Name 1 french
+   */
+  function testGetTranslationFrench() {
+    $event = entity_load_single('salsa_event', '1');
+    $this->assertTrue(is_object($event), 'Event for translation is loaded successfully.');
+
+    $this->assertEqual($event->getTranslation('Description', 'fr'), '<p>&#160;</p>');
+    $this->assertEqual($event->getTranslation('Event_Name',  'fr'), 'Event_Name 1 french');
+    $this->assertEqual($event->getTranslation('Directions',  'fr'), NULL);
+  }
+}
