diff --git a/uc_cart/uc_cart.admin.inc b/uc_cart/uc_cart.admin.inc
index 9f58e8b..cd05a2d 100644
--- a/uc_cart/uc_cart.admin.inc
+++ b/uc_cart/uc_cart.admin.inc
@@ -47,6 +47,18 @@ function uc_cart_cart_settings_form() {
     '#title' => t('General cart settings'),
     '#summary callback' => 'summarize_form',
   );
+  $form['general']['uc_cart_contents_sorting'] = array(
+    '#type' => 'select',
+    '#options' => array(
+      '' => t('Unsorted'),
+      'cart_item_id_asc' => t('Oldest added items first'),
+      'cart_item_id_desc' => t('Newest added items first'),
+      'changed_asc' => t('Oldest added or changed items first'),
+      'changed_desc' => t('Newest added or changed items first'),
+    ),
+    '#title' => t('How to sort the cart contents.'),
+    '#default_value' => variable_get('uc_cart_contents_sorting', ''),
+  );
   $form['general']['uc_cart_add_item_msg'] = array(
     '#type' => 'checkbox',
     '#title' => t('Display an update message when an item is added to the cart through an add to cart form.'),
diff --git a/uc_cart/uc_cart.module b/uc_cart/uc_cart.module
index d51b037..6804f82 100644
--- a/uc_cart/uc_cart.module
+++ b/uc_cart/uc_cart.module
@@ -1353,7 +1353,22 @@ function uc_cart_get_contents($cid = NULL, $action = NULL) {
 
   if (!isset($items[$cid])) {
     $items[$cid] = array();
-    $result = db_query("SELECT c.*, n.title, n.vid FROM {node} n INNER JOIN {uc_cart_products} c ON n.nid = c.nid WHERE c.cart_id = '%s'", $cid);
+    $sql = "SELECT c.*, n.title, n.vid FROM {node} n INNER JOIN {uc_cart_products} c ON n.nid = c.nid WHERE c.cart_id = '%s'";
+    switch (variable_get('uc_cart_contents_sorting', '')) {
+      case 'cart_item_id_asc':
+        $sql .= ' ORDER BY c.cart_item_id ASC';
+        break;
+      case 'cart_item_id_desc':
+        $sql .= ' ORDER BY c.cart_item_id DESC';
+        break;
+      case 'changed_asc':
+        $sql .= ' ORDER BY c.changed ASC';
+        break;
+      case 'changed_desc':
+        $sql .= ' ORDER BY c.changed DESC';
+        break;
+    }
+    $result = db_query($sql, $cid);
 
     while ($item = db_fetch_object($result)) {
       for ($i = 0; $i < count($items[$cid]); $i++) {
