diff --git a/uc_cart/uc_cart.admin.inc b/uc_cart/uc_cart.admin.inc
index 9f58e8b..d9bedf7 100644
--- a/uc_cart/uc_cart.admin.inc
+++ b/uc_cart/uc_cart.admin.inc
@@ -52,6 +52,14 @@ function uc_cart_cart_settings_form() {
     '#title' => t('Display an update message when an item is added to the cart through an add to cart form.'),
     '#default_value' => variable_get('uc_cart_add_item_msg', TRUE),
   );
+  if (module_exists('translation')) {
+    $form['general']['uc_cart_use_translation'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Use source translation node when adding products to the cart.'),
+      '#description' => t('Product titles will be translated in the cart and translated products will be grouped together, at the expense of allowing different product settings per language.'),
+      '#default_value' => variable_get('uc_cart_use_translation', FALSE),
+    );
+  }
   $form['general']['uc_add_item_redirect'] = array(
     '#type' => 'textfield',
     '#title' => t('Add to cart redirect'),
diff --git a/uc_cart/uc_cart.module b/uc_cart/uc_cart.module
index 29473b0..5c46018 100644
--- a/uc_cart/uc_cart.module
+++ b/uc_cart/uc_cart.module
@@ -910,7 +910,7 @@ function uc_cart_view_form($form_state, $items = NULL) {
     $display_item = module_invoke($item->module, 'cart_display', $item);
     if (!empty($display_item)) {
       $form['items'][$i] = $display_item;
-      $form['items'][$i]['image']['#value'] = uc_product_get_picture($display_item['nid']['#value'], 'cart');
+      $form['items'][$i]['image']['#value'] = uc_product_get_picture($item->tnid, 'cart');
 
       $description = $display_item['title']['#value'] . $display_item['description']['#value'];
       $form['items'][$i]['desc']['#value'] = $description;
@@ -1326,6 +1326,8 @@ function uc_cart_get_id($create = TRUE) {
  * accessing this function.
  */
 function uc_cart_get_contents($cid = NULL, $action = NULL) {
+  global $language;
+
   static $items = array();
 
   $cid = $cid ? $cid : uc_cart_get_id(FALSE);
@@ -1359,6 +1361,16 @@ function uc_cart_get_contents($cid = NULL, $action = NULL) {
       $item->module = $item->data['module'];
       $item->model = $product->model;
 
+      // Use translated title, if available.
+      $item->tnid = $item->nid;
+      if (module_exists('translation') && variable_get('uc_cart_use_translation', FALSE)) {
+        $translations = translation_node_get_translations($product->tnid);
+        if (isset($translations[$language->language])) {
+          $item->tnid = $translations[$language->language]->nid;
+          $item->title = db_result(db_query("SELECT title FROM {node} WHERE nid = %d", $item->tnid));
+        }
+      }
+
       // Invoke hook_cart_item() with $op = 'load' in enabled modules.
       foreach (module_list() as $module) {
         $func = $module .'_cart_item';
@@ -1473,6 +1485,11 @@ function uc_cart_add_item($nid, $qty = 1, $data = NULL, $cid = NULL, $msg = TRUE
   $cid = $cid ? $cid : uc_cart_get_id();
   $node = node_load($nid);
 
+  // Use source translation node, if available and enabled.
+  if (module_exists('translation') && variable_get('uc_cart_use_translation', FALSE) && $node->tnid) {
+    $node = node_load($node->tnid);
+  }
+
   if (is_null($data)) {
     $data = array('module' => 'uc_product');
   }
diff --git a/uc_product/uc_product.module b/uc_product/uc_product.module
index 4225076..c5428e1 100644
--- a/uc_product/uc_product.module
+++ b/uc_product/uc_product.module
@@ -1209,8 +1209,10 @@ function uc_product_cart_display($item) {
   $element['module'] = array('#type' => 'value', '#value' => 'uc_product');
   $element['remove'] = array('#type' => 'submit', '#value' => t('Remove'));
 
+  // The node title may be translated, so check and link to the translated version.
+  $tnode = node_load($item->tnid);
   $element['title'] = array(
-    '#value' => node_access('view', $node) ? l($item->title, 'node/'. $node->nid) : check_plain($item->title),
+    '#value' => node_access('view', $tnode) ? l($item->title, 'node/'. $item->tnid) : check_plain($item->title),
   );
 
   $context = array(
