=== modified file 'uc_attribute/uc_attribute.module'
--- uc_attribute/uc_attribute.module	2008-12-17 22:37:57 +0000
+++ uc_attribute/uc_attribute.module	2008-12-30 20:30:26 +0000
@@ -371,13 +371,13 @@
 function uc_attribute_cart_item($op, &$item) {
   switch ($op) {
     case 'load':
-      $item->options = _uc_cart_product_get_options($item);
+      $options = _uc_cart_product_get_options($item);
 
       $op_costs = 0;
       $op_prices = 0;
       $op_weight = 0;
 
-      foreach ($item->options as $option) {
+      foreach ($options as $option) {
         $op_costs += $option['cost'];
         $op_prices += $option['price'];
         $op_weight += $option['weight'];
@@ -393,6 +393,19 @@
   }
 }
 
+function uc_attribute_cart_item_description($item) {
+  $rows = array();
+  foreach (_uc_cart_product_get_options($item) as $option) {
+    $rows[] = t('@attribute: @option', array('@attribute' => $option['attribute'], '@option' => $option['name']));
+  }
+
+  if (count($rows)) {
+    $output = theme('item_list', $rows, NULL, 'ul', array('class' => 'product-description'));
+  }
+
+  return $output;
+}
+
 /******************************************************************************
  * Module Functions                                                           *
  ******************************************************************************/
@@ -539,7 +552,8 @@
         $options[$aid]['attribute'] = $attribute->name;
       }
       else {
-        $options[$aid] = array('attribute' => $attribute->name,
+        $options[$aid] = array(
+          'attribute' => $attribute->name,
           'oid' => 0,
           'name' => $oid,
           'cost' => 0,

=== modified file 'uc_cart/uc_cart.css'
--- uc_cart/uc_cart.css	2008-02-05 20:48:06 +0000
+++ uc_cart/uc_cart.css	2008-12-30 20:30:26 +0000
@@ -149,7 +149,7 @@
 }
 
 #continue-shopping-button {
-  margin-right: 100%; 
+  margin-right: 100%;
   margin-left: .5em;
   white-space: nowrap;
 }
@@ -201,7 +201,7 @@
   font-weight: bold;
 }
 
-.product-options {
+.product-description {
   font-size: .7em;
 }
 

=== modified file 'uc_cart/uc_cart.module'
--- uc_cart/uc_cart.module	2008-12-17 22:37:57 +0000
+++ uc_cart/uc_cart.module	2008-12-30 14:48:12 +0000
@@ -398,8 +398,9 @@
         $output .= '<tr class="cart-block-item"><td class="cart-block-item-qty">'. $display_item['qty']['#default_value'] .'x</td>'
                   .'<td class="cart-block-item-title">'. $display_item['title']['#value'] .'</td>'
                   .'<td class="cart-block-item-price">'. uc_currency_format($display_item['#total']) .'</td></tr>';
-        if ($display_item['options']['#value']) {
-          $output .= '<tr><td colspan="3">'. $display_item['options']['#value'] .'</td></tr>';
+
+        if (isset($display_item['description']['#value'])) {
+          $output .= '<tr><td colspan="3">'. $display_item['description']['#value'] .'</td></tr>';
         }
       }
       $total += ($item->price) * $item->qty;
@@ -649,10 +650,13 @@
     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]['desc']['#value'] = $display_item['title']['#value']
-        .'<br />'. $display_item['options']['#value'];
+
+      $description = $display_item['title']['#value'] . $display_item['description']['#value'];
+      $form['items'][$i]['desc']['#value'] = $description;
+
       $form['items'][$i]['title']['#type'] = 'value';
-      $form['items'][$i]['options']['#type'] = 'value';
+      $form['items'][$i]['description']['#type'] = 'value';
+
       if (empty($display_item['qty'])) {
         $form['items'][$i]['qty'] = array(
           '#value' => '',
@@ -985,7 +989,6 @@
       $item->weight = $product->weight;
       $item->data = unserialize($item->data);
       $item->module = $item->data['module'];
-      $item->options = array();
       $item->model = $product->model;
 
       // Invoke hook_cart_item() with $op = 'load' in enabled modules.

=== modified file 'uc_cart/uc_cart_block.css'
--- uc_cart/uc_cart_block.css	2008-03-05 16:23:54 +0000
+++ uc_cart/uc_cart_block.css	2008-12-30 20:30:26 +0000
@@ -72,13 +72,12 @@
   text-align: right;
 }
 
-#block-cart-contents ul.cart-options {
+#block-cart-contents ul.product-description {
   margin: 0pt;
   padding: 0pt 0pt 0.25em 1em;
 }
-#block-cart-contents .cart-options li {
+#block-cart-contents .product-description li {
   margin: 0pt;
   padding-top: 0pt;
   padding-bottom: 0pt;
-  font-size: .7em;
 }

=== modified file 'uc_cart/uc_cart_checkout_pane.inc'
--- uc_cart/uc_cart_checkout_pane.inc	2008-12-17 19:54:57 +0000
+++ uc_cart/uc_cart_checkout_pane.inc	2008-12-29 20:33:36 +0000
@@ -28,11 +28,10 @@
       $items = uc_cart_get_contents();
       $output = '<table>';
       foreach ($items as $item) {
-        $rows = array();
-        foreach ($item->options as $option) {
-          $rows[] = t('@attribute: @option', array('@attribute' => $option['attribute'], '@option' => $option['name']));
+        $desc = check_plain($item->title);
+        foreach (module_implements('cart_item_description') as $module) {
+          $desc .= module_invoke($module, 'cart_item_description', $item);
         }
-        $desc = check_plain($item->title) . theme('item_list', $rows, NULL, 'ul', array('class' => 'product-options'));
         $output .= '<tr valign="top"><td>'. $item->qty .'x</td><td width="100%">'. $desc
                   .'</td><td nowrap="nowrap">'. uc_currency_format($item->price * $item->qty) .'</td></tr>';
       }
@@ -563,12 +562,10 @@
     $total = ($item->qty) ? $item->qty * $item->price : $item->price;
     $subtotal += $total;
 
-    // Add product attributes to the product description, if any.
-    $options = array();
-    foreach ($item->options as $option) {
-      $options[] = t('@attribute: @option', array('@attribute' => $option['attribute'], '@option' => $option['name']));
+    $description = check_plain($item->title);
+    foreach (module_implements('cart_item_description') as $module) {
+      $description .= module_invoke($module, 'cart_item_description', $item);
     }
-    $description = check_plain($item->title) . theme('item_list', $options, NULL, 'ul', array('class' => 'product-options'));
 
     $rows[] = array(
       array('data' => t('@qtyx', array('@qty' => $item->qty)), 'class' => 'qty'),

=== modified file 'uc_order/uc_order.css'
--- uc_order/uc_order.css	2008-01-23 22:30:47 +0000
+++ uc_order/uc_order.css	2008-12-30 20:30:26 +0000
@@ -199,7 +199,7 @@
   border-top: 0px;
 }
 
-.product-options {
+.product-description {
   font-size: .7em;
 }
 

=== modified file 'uc_order/uc_order.order_pane.inc'
--- uc_order/uc_order.order_pane.inc	2008-12-17 22:37:57 +0000
+++ uc_order/uc_order.order_pane.inc	2008-12-30 20:30:26 +0000
@@ -743,7 +743,7 @@
         }
       }
       $data['product'] = array(
-        '#value' => check_plain($product->title) . theme('item_list', $option_rows, NULL, 'ul', array('class' => 'product-options')),
+        '#value' => check_plain($product->title) . theme('item_list', $option_rows, NULL, 'ul', array('class' => 'product-description')),
       );
       $data['model'] = array(
         '#value' => check_plain($product->model),
@@ -844,7 +844,7 @@
         }
       }
       $data['product'] = array(
-        '#value' => check_plain($product->title) . theme('item_list', $option_rows, NULL, 'ul', array('class' => 'product-options')),
+        '#value' => check_plain($product->title) . theme('item_list', $option_rows, NULL, 'ul', array('class' => 'product-description')),
       );
       $data['model'] = array(
         '#value' => check_plain($product->model),

=== modified file 'uc_product/uc_product.module'
--- uc_product/uc_product.module	2008-12-23 15:43:36 +0000
+++ uc_product/uc_product.module	2008-12-30 18:16:18 +0000
@@ -590,7 +590,7 @@
   $form['base']['default_qty'] = array('#type' => 'textfield',
     '#title' => t('Default quantity to add to cart'),
     '#default_value' => !is_null($node->default_qty) ? $node->default_qty : 1,
-    '#description' => t('Leave blank or zero to disable the quantity field in the add to cart form.'),
+    '#description' => t('Leave blank or zero to disable the quantity field next to the add to cart button, if it is enabled <a href="!settings_url">in general</a>. If it is disabled, this field is ignored.', array('!settings_url' => url('admin/store/settings/products/edit'))),
     '#weight' => 27,
     '#size' => 5,
     '#maxlength' => 6,
@@ -1040,14 +1040,6 @@
   $element['module'] = array('#type' => 'value', '#value' => 'uc_product');
   $element['remove'] = array('#type' => 'checkbox');
 
-  $element['options'] = '';
-  if (module_exists('uc_attribute') && is_array($item->options)) {
-    foreach ($item->options as $option) {
-      $op_names[] = t('@attribute: @option', array('@attribute' => $option['attribute'], '@option' => $option['name']));
-    }
-    $element['options'] = array('#value' => theme('item_list', $op_names, NULL, 'ul', array('class' => 'cart-options')));
-  }
-
   $element['title'] = array(
     '#value' => node_access('view', $node) ? l($item->title, 'node/'. $node->nid) : check_plain($item->title),
   );
@@ -1059,6 +1051,15 @@
     '#size' => 5,
     '#maxlength' => 6
   );
+
+  $description = '';
+  foreach (module_implements('cart_item_description') as $module) {
+    $description .= module_invoke($module, 'cart_item_description', $item);
+  }
+  if ($description) {
+    $element['description'] = array('#value' => $description);
+  }
+
   return $element;
 }
 

=== added file 'uc_product_kit/uc_product_kit.css'
--- uc_product_kit/uc_product_kit.css	1970-01-01 00:00:00 +0000
+++ uc_product_kit/uc_product_kit.css	2008-12-30 20:30:26 +0000
@@ -0,0 +1,30 @@
+/* $Id$ */
+
+/* .kit-component-cart-desc ul {
+  display: inline;
+} */
+/* .kit-component-cart-desc ul:before {
+  content: "--";
+} */
+
+#block-cart-contents .kit-component-cart-desc ul.product-description {
+  padding-left: 0;
+}
+
+#block-cart-contents .product-description .kit-component-cart-desc ul:before {
+  margin-right: 0.15em;
+}
+
+.kit-component-cart-desc .item-list li {
+  display: inline;
+  background: transparent none;
+  font-style: italic;
+  font-size: 1em;
+  padding-left: 0;
+}
+.kit-component-cart-desc li:after {
+  content: ", ";
+}
+.kit-component-cart-desc li.last:after {
+  content: "";
+}

=== modified file 'uc_product_kit/uc_product_kit.module'
--- uc_product_kit/uc_product_kit.module	2008-12-19 20:38:19 +0000
+++ uc_product_kit/uc_product_kit.module	2008-12-30 20:30:26 +0000
@@ -729,27 +729,22 @@
       $element['nid'] = array('#type' => 'value', '#value' => $kit->nid);
       $element['module'] = array('#type' => 'value', '#value' => 'uc_product_kit');
       $element['remove'] = array('#type' => 'checkbox');
-      if ($kit->mutable == UC_PRODUCT_KIT_UNMUTABLE_WITH_LIST) {
-        $element['options'] = array('#value' => '<div class="item-list"><ul class="cart-options">'."\n");
-      }
       $element['title'] = array('#value' => l($kit->title, 'node/'. $kit->nid));
-      $element['#total'] = 0;
       $element['qty'] = array(
         '#type' => 'textfield',
         '#default_value' => $item->qty / $kit->products[$item->nid]->qty,
         '#size' => 5,
         '#maxlength' => 6,
       );
+      $element['#total'] = 0;
+      $element['#extra'] = array();
+
       $elements[$unique_id] = $element;
     }
     // Add product specific information
-    $op_names = '';
-    foreach ($item->options as $option) {
-      $op_names .= $option['name'] .', ';
-    }
-    $op_names = substr($op_names, 0, strlen($op_names) - 2);
-    if ($op_names) {
-      $op_names = '-- '. $op_names;
+    $extra = '';
+    foreach (module_implements('cart_item_description') as $module) {
+      $extra .= module_invoke($module, 'cart_item_description', $item);
     }
     if (node_access('view', node_load($item->nid))) {
       $title = l($item->title, 'node/'. $item->nid);
@@ -758,11 +753,13 @@
       $title = $item->title;
     }
     if ($kit->mutable == UC_PRODUCT_KIT_UNMUTABLE_WITH_LIST) {
-      $elements[$unique_id]['options']['#value'] .= '<li>'. $item->qty .' x '. $title ." <em>$op_names</em></li>\n";
+      $elements[$unique_id]['#extra'][] = array('data' => $item->qty .' x '. $title . $extra, 'class' => 'kit-component-cart-desc');
     }
+
     $elements[$unique_id]['#total'] += $item->price * $item->qty;
     $elements[$unique_id]['data'][$item->nid] = $item;
     $products[$unique_id][] = $item->nid;
+
     // Check if all products in this kit have been accounted for.
     $done = TRUE;
     foreach ($kit->products as $product) {
@@ -771,9 +768,14 @@
         break;
       }
     }
+
     if ($done) {
+      drupal_add_css(drupal_get_path('module', 'uc_product_kit') .'/uc_product_kit.css');
+
       $elements[$unique_id]['data'] = array('#type' => 'value', '#value' => serialize($elements[$unique_id]['data']));
-      $elements[$unique_id]['options']['#value'] .= "</ul></div>\n";
+      if ($kit->mutable == UC_PRODUCT_KIT_UNMUTABLE_WITH_LIST) {
+        $elements[$unique_id]['description']['#value'] .= theme('item_list', $elements[$unique_id]['#extra'], NULL, 'ul', array('class' => 'product-description'));
+      }
       $element = $elements[$unique_id];
       unset($products[$unique_id]);
       unset($elements[$unique_id]);

