diff -urp uc_attribute/uc_attribute.admin.inc /home/jsmith/Downloads/drupal/ubercart_mod/uc_attribute/uc_attribute.admin.inc
--- uc_attribute/uc_attribute.admin.inc	2010-07-11 19:33:31.000000000 -0600
+++ /home/jsmith/Downloads/drupal/ubercart_mod/uc_attribute/uc_attribute.admin.inc	2010-08-17 09:37:28.716809308 -0600
@@ -235,6 +235,9 @@ function uc_attribute_options_form($form
       'price' => array(
         '#value' => $data->price,
       ),
+      'multiplier' => array(
+        '#value' => $data->multiplier,
+      ),
       'weight' => array(
         '#value' => $data->weight,
       ),
@@ -286,7 +289,7 @@ function uc_attribute_options_form_submi
  */
 function theme_uc_attribute_options_form($form) {
 
-  $header = array(t('Name'), t('Default cost'), t('Default price'), t('Default weight'), array('data' => t('List position'), 'sort' => 'asc'), t('Operations'));
+  $header = array(t('Name'), t('Default cost'), t('Default price'), t('Default multiplier'), t('Default weight'), array('data' => t('List position'), 'sort' => 'asc'), t('Operations'));
 
   if (count(element_children($form['options'])) > 0) {
     foreach (element_children($form['options']) as $oid) {
@@ -294,6 +297,7 @@ function theme_uc_attribute_options_form
         drupal_render($form['options'][$oid]['name']),
         drupal_render($form['options'][$oid]['cost']),
         drupal_render($form['options'][$oid]['price']),
+        drupal_render($form['options'][$oid]['multiplier']),
         drupal_render($form['options'][$oid]['weight']),
         drupal_render($form['options'][$oid]['ordering']),
         drupal_render($form['options'][$oid]['ops']),
@@ -360,7 +364,7 @@ function uc_attribute_option_form($form_
     '#title' => t('List position'),
     '#description' => t('Options will be listed sorted by this value and then by their name.<br />May be overridden at the product level.'),
     '#default_value' => isset($option->ordering) ? $option->ordering : 0,
-    '#weight' => 4,
+    '#weight' => 5,
   );
   $form['adjustments'] = array(
     '#type' => 'fieldset',
@@ -381,11 +385,17 @@ function uc_attribute_option_form($form_
     '#default_value' => uc_store_format_price_field_value($option->price),
     '#weight' => 2,
   );
+  $form['adjustments']['multiplier'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Multiplier'),
+    '#default_value' => uc_store_format_price_field_value($option->multiplier),
+    '#weight' => 3,
+  );
   $form['adjustments']['weight'] = array(
     '#type' => 'textfield',
     '#title' => t('Weight'),
     '#default_value' => $option->weight,
-    '#weight' => 3,
+    '#weight' => 4,
   );
 
   $form['submit'] = array(
@@ -412,6 +422,9 @@ function uc_attribute_option_form_valida
   if (!is_numeric($form_state['values']['price']['#value']) && !preg_match($pattern, $form_state['values']['price']['#value'])) {
     form_set_error('price', $price_error);
   }
+  if (!is_numeric($form_state['values']['multiplier']['#value'])) {
+    form_set_error('multiplier', t('This must be in a valid number format.'));
+  }
   if (!is_numeric($form_state['values']['weight']['#value']) && !preg_match($pattern, $form_state['values']['weight']['#value'])) {
     form_set_error('weight', $price_error);
   }
@@ -422,15 +435,15 @@ function uc_attribute_option_form_valida
  */
 function uc_attribute_option_form_submit($form, &$form_state) {
   if (!isset($form_state['values']['oid'])) {
-    db_query("INSERT INTO {uc_attribute_options} (aid, name, cost, price, weight, ordering) VALUES (%d, '%s', %f, %f, %f, %d)",
-      $form_state['values']['aid'], $form_state['values']['name'], $form_state['values']['cost'], $form_state['values']['price'], $form_state['values']['weight'], $form_state['values']['ordering']);
+    db_query("INSERT INTO {uc_attribute_options} (aid, name, cost, price, multiplier,  weight, ordering) VALUES (%d, '%s', %f, %f, %f, %f, %d)",
+      $form_state['values']['aid'], $form_state['values']['name'], $form_state['values']['cost'], $form_state['values']['price'], $form_state['values']['multiplier'],$form_state['values']['weight'], $form_state['values']['ordering']);
     drupal_set_message(t('Created new option %option.', array('%option' => $form_state['values']['name'])));
     watchdog('uc_attribute', 'Created new option %option.', array('%option' => $form_state['values']['name']), WATCHDOG_NOTICE, 'admin/store/attributes/'. $form_state['values']['aid'] .'/options/add');
     $form_state['redirect'] = 'admin/store/attributes/'. $form_state['values']['aid'] .'/options/add';
   }
   else {
-    db_query("UPDATE {uc_attribute_options} SET name = '%s', cost = %f, price = %f, weight = %f, ordering = %d WHERE aid = %d AND oid = %d",
-      $form_state['values']['name'], $form_state['values']['cost'], $form_state['values']['price'], $form_state['values']['weight'], $form_state['values']['ordering'], $form_state['values']['aid'], $form_state['values']['oid']);
+    db_query("UPDATE {uc_attribute_options} SET name = '%s', cost = %f, price = %f, multiplier = %f, weight = %f, ordering = %d WHERE aid = %d AND oid = %d",
+      $form_state['values']['name'], $form_state['values']['cost'], $form_state['values']['price'], $form_state['values']['multiplier'], $form_state['values']['weight'], $form_state['values']['ordering'], $form_state['values']['aid'], $form_state['values']['oid']);
     drupal_set_message(t('Updated option %option.', array('%option' => $form_state['values']['name'])));
     watchdog('uc_attribute', 'Updated option %option.', array('%option' => $form_state['values']['name']), WATCHDOG_NOTICE, 'admin/store/attributes/'. $form_state['values']['aid'] .'/options/'. $form_state['values']['oid']);
     $form_state['redirect'] = 'admin/store/attributes/'. $form_state['values']['aid'] .'/options';
@@ -542,7 +555,7 @@ function uc_object_attributes_form($form
             '#size' => 6,
           ),
           'option' => array(
-            '#value' => $option ? (check_plain($option->name) .' ('. uc_price($option->price, $context) .')' ) : t('n/a'),
+            '#value' => $option ? (check_plain($option->name) .' ('. uc_price($option->price, $context) .')x('. (string)$option->multiplier.')' ) : t('n/a'),
           ),
           'required' => array(
             '#type' => 'checkbox',
@@ -711,7 +724,7 @@ function uc_object_attributes_form_submi
       // Enable all options for added attributes.
       $attribute = uc_attribute_load($aid);
       foreach ($attribute->options as $option) {
-        db_query("INSERT INTO $opt_table ($id, oid, cost, price, weight, ordering) VALUES ($sql_type, %d, %f, %f, %f, %d)", $form_state['values']['id'], $option->oid, $option->cost, $option->price, $option->weight, $option->ordering);
+        db_query("INSERT INTO $opt_table ($id, oid, cost, price, multiplier, weight, ordering) VALUES ($sql_type, %d, %f, %f, %f, %f, %d)", $form_state['values']['id'], $option->oid, $option->cost, $option->price, $option->multiplier, $option->weight, $option->ordering);
       }
       // Make the first option (if any) the default.
       $option = reset($attribute->options);
@@ -788,7 +801,7 @@ function uc_object_options_form($form_st
     if ($base_attr->options) {
       $options = array();
 
-      $result = db_query("SELECT ao.aid, ao.oid, ao.name, ao.cost AS default_cost, ao.price AS default_price, ao.weight AS default_weight, ao.ordering AS default_ordering, po.cost, po.price, po.weight, po.ordering, po.ordering IS NULL AS null_order FROM {uc_attribute_options} AS ao LEFT JOIN $table AS po ON ao.oid = po.oid AND po.". $id_type ." = ". $sql_type ." WHERE aid = %d ORDER BY null_order, po.ordering, default_ordering, ao.name", $id, $attribute->aid);
+      $result = db_query("SELECT ao.aid, ao.oid, ao.name, ao.cost AS default_cost, ao.price AS default_price, ao.multiplier AS default_multiplier, ao.weight AS default_weight, ao.ordering AS default_ordering, po.cost, po.price, po.multiplier, po.weight, po.ordering, po.ordering IS NULL AS null_order FROM {uc_attribute_options} AS ao LEFT JOIN $table AS po ON ao.oid = po.oid AND po.". $id_type ." = ". $sql_type ." WHERE aid = %d ORDER BY null_order, po.ordering, default_ordering, ao.name", $id, $attribute->aid);
       while ($option = db_fetch_object($result)) {
         $oid = $option->oid;
         $options[$oid] = '';
@@ -808,7 +821,12 @@ function uc_object_options_form($form_st
           '#default_value' => uc_store_format_price_field_value(is_null($option->price) ? $option->default_price : $option->price),
           '#size' => 6,
         );
-        $form['attributes'][$aid]['options'][$oid]['weight'] = array(
+         $form['attributes'][$aid]['options'][$oid]['multiplier'] = array(
+          '#type' => 'textfield',
+          '#default_value' => uc_store_format_price_field_value(is_null($option->multiplier) ? $option->default_multiplier : $option->multiplier),
+          '#size' => 6,
+        );
+       $form['attributes'][$aid]['options'][$oid]['weight'] = array(
           '#type' => 'textfield',
           '#default_value' => is_null($option->weight) ? $option->default_weight : $option->weight,
           '#size' => 5,
@@ -864,7 +882,7 @@ function uc_object_options_form($form_st
  * @see uc_object_options_form()
  */
 function theme_uc_object_options_form($form) {
-  $header = array(array('data' => '&nbsp;&nbsp;'. t('Options')) + theme('table_select_header_cell'), t('Default'), t('Cost'), t('Price'), t('Weight'), t('List position'));
+  $header = array(array('data' => '&nbsp;&nbsp;'. t('Options')) + theme('table_select_header_cell'), t('Default'), t('Cost'), t('Price'), t('Multiplier'), t('Weight'), t('List position'));
   $table_id_num = $tables = 0;
 
   foreach (element_children($form['attributes']) as $key) {
@@ -879,7 +897,8 @@ function theme_uc_object_options_form($f
           drupal_render($form['attributes'][$key]['default'][$oid]),
           drupal_render($form['attributes'][$key]['options'][$oid]['cost']),
           drupal_render($form['attributes'][$key]['options'][$oid]['price']),
-          drupal_render($form['attributes'][$key]['options'][$oid]['weight']),
+          drupal_render($form['attributes'][$key]['options'][$oid]['multiplier']),
+		  drupal_render($form['attributes'][$key]['options'][$oid]['weight']),
           drupal_render($form['attributes'][$key]['options'][$oid]['ordering']),
         );
 
@@ -893,7 +912,7 @@ function theme_uc_object_options_form($f
     }
     else {
       $row = array();
-      $row[] = array('data' => drupal_render($form['attributes'][$key]['default']), 'colspan' => 6);
+      $row[] = array('data' => drupal_render($form['attributes'][$key]['default']), 'colspan' => 7);
       $rows[] = $row;
     }
 
@@ -1011,8 +1030,8 @@ function uc_object_options_form_submit($
         db_query("DELETE FROM $opt_table WHERE $id = $sql_type AND oid = %d", $form_state['values']['id'], $oid);
 
         if ($option['select']) {
-          db_query("INSERT INTO $opt_table ($id, oid, cost, price, weight, ordering) VALUES ($sql_type, %d, %f, %f, %f, %d)",
-                   $form_state['values']['id'], $oid, $option['cost'], $option['price'], $option['weight'], $option['ordering']);
+          db_query("INSERT INTO $opt_table ($id, oid, cost, price, multiplier, weight, ordering) VALUES ($sql_type, %d, %f, %f, %f, %f, %d)",
+                   $form_state['values']['id'], $oid, $option['cost'], $option['price'], $option['multiplier'], $option['weight'], $option['ordering']);
         }
         elseif ($form_state['values']['type'] == 'product') {
           $aid = $attribute['aid'];
diff -urp uc_attribute/uc_attribute.module /home/jsmith/Downloads/drupal/ubercart_mod/uc_attribute/uc_attribute.module
--- uc_attribute/uc_attribute.module	2010-01-27 15:23:31.000000000 -0700
+++ /home/jsmith/Downloads/drupal/ubercart_mod/uc_attribute/uc_attribute.module	2010-08-17 10:48:35.600806549 -0600
@@ -351,11 +351,11 @@ function uc_attribute_nodeapi(&$node, $o
           case 'mysqli':
           case 'mysql':
             db_query("INSERT IGNORE INTO {uc_product_attributes} (nid, aid, label, ordering, required, display, default_option) SELECT %d, aid, label, ordering, required, display, default_option FROM {uc_class_attributes} WHERE pcid = '%s'", $node->nid, $node->type);
-            db_query("INSERT IGNORE INTO {uc_product_options} (nid, oid, cost, price, weight, ordering) SELECT %d, oid, cost, price, weight, ordering FROM {uc_class_attribute_options} WHERE pcid = '%s'", $node->nid, $node->type);
+            db_query("INSERT IGNORE INTO {uc_product_options} (nid, oid, cost, price, multiplier, weight, ordering) SELECT %d, oid, cost, price, multiplier, weight, ordering FROM {uc_class_attribute_options} WHERE pcid = '%s'", $node->nid, $node->type);
             break;
           case 'pgsql':
             db_query("INSERT INTO {uc_product_attributes} (nid, aid, label, ordering, required, display, default_option) SELECT %d, aid, label, ordering, required, display, default_option FROM {uc_class_attributes} WHERE pcid = '%s'", $node->nid, $node->type);
-            db_query("INSERT INTO {uc_product_options} (nid, oid, cost, price, weight, ordering) SELECT %d, oid, cost, price, weight, ordering FROM {uc_class_attribute_options} WHERE pcid = '%s'", $node->nid, $node->type);
+            db_query("INSERT INTO {uc_product_options} (nid, oid, cost, price, multiplier, weight, ordering) SELECT %d, oid, cost, price, multiplier, weight, ordering FROM {uc_class_attribute_options} WHERE pcid = '%s'", $node->nid, $node->type);
             break;
         }
 
@@ -455,16 +455,19 @@ function uc_attribute_cart_item($op, &$i
       $options = _uc_cart_product_get_options($item);
 
       $op_costs = 0;
-      $op_prices = 0;
+      $op_prices = $item->price;
       $op_weight = 0;
 
       foreach ($options as $option) {
         $op_costs += $option['cost'];
         $op_prices += $option['price'];
+		if ($option['multiplier'] < 0 || $option['multiplier'] > 0) {
+			$op_prices = $op_prices * $option['multiplier'];
+		}
         $op_weight += $option['weight'];
       }
       $item->cost += $op_costs;
-      $item->price += $op_prices;
+      $item->price = $op_prices;
       $item->weight += $op_weight;
 
       $combination = array();
@@ -556,11 +559,11 @@ function uc_attribute_load($attr_id, $ni
     switch ($type) {
       case 'product':
         $attribute = db_fetch_object(db_query("SELECT a.aid, a.name, a.label AS default_label, a.ordering AS default_ordering, a.required AS default_required, a.display AS default_display, a.description, pa.label, pa.default_option, pa.required, pa.ordering, pa.display FROM {uc_attributes} AS a LEFT JOIN {uc_product_attributes} AS pa ON a.aid = pa.aid AND pa.nid = %d WHERE a.aid = %d", $nid, $attr_id));
-        $result = db_query("SELECT po.nid, po.oid, po.cost, po.price, po.weight, po.ordering, ao.name, ao.aid FROM {uc_product_options} AS po LEFT JOIN {uc_attribute_options} AS ao ON po.oid = ao.oid AND nid = %d WHERE aid = %d ORDER BY po.ordering, ao.name", $nid, $attr_id);
+        $result = db_query("SELECT po.nid, po.oid, po.cost, po.price, po.multiplier, po.weight, po.ordering, ao.name, ao.aid FROM {uc_product_options} AS po LEFT JOIN {uc_attribute_options} AS ao ON po.oid = ao.oid AND nid = %d WHERE aid = %d ORDER BY po.ordering, ao.name", $nid, $attr_id);
         break;
       case 'class':
         $attribute = db_fetch_object(db_query("SELECT a.aid, a.name, a.label AS default_label, a.ordering AS default_ordering, a.required AS default_required, a.display AS default_display, a.description, ca.default_option, ca.label, ca.required, ca.ordering, ca.display FROM {uc_attributes} AS a LEFT JOIN {uc_class_attributes} AS ca ON a.aid = ca.aid AND ca.pcid = '%s' WHERE a.aid = %d", $nid, $attr_id));
-        $result = db_query("SELECT co.pcid, co.oid, co.cost, co.price, co.weight, co.ordering, ao.name, ao.aid FROM {uc_class_attribute_options} AS co LEFT JOIN {uc_attribute_options} AS ao ON co.oid = ao.oid AND co.pcid = '%s' WHERE ao.aid = %d ORDER BY co.ordering, ao.name", $nid, $attr_id);
+        $result = db_query("SELECT co.pcid, co.oid, co.cost, co.price, co.multiplier, co.weight, co.ordering, ao.name, ao.aid FROM {uc_class_attribute_options} AS co LEFT JOIN {uc_attribute_options} AS ao ON co.oid = ao.oid AND co.pcid = '%s' WHERE ao.aid = %d ORDER BY co.ordering, ao.name", $nid, $attr_id);
         break;
       default:
         $attribute = db_fetch_object(db_query("SELECT * FROM {uc_attributes} WHERE aid = %d", $attr_id));
@@ -671,6 +674,7 @@ function _uc_cart_product_get_options($i
             'name' => $selected,
             'cost' => 0,
             'price' => 0,
+			'multiplier' => 0,
             'weight' => 0,
           );
         }
@@ -729,6 +733,9 @@ function _uc_attribute_alter_form($produ
             'price' => $product->sell_price + $option->price,
             'qty' => $qty,
           );
+		  if ($option->multiplier < 0 || $option->multiplier > 0) {
+			$price_info['price'] = $price_info['price'] * $option->multiplier;
+		  }
           $display_price = in_array($attribute->aid, $priced_attributes) ? ', '. uc_price($price_info, $context) : '';
           if (count($priced_attributes) == 1 && $attribute->display != 3) {
             break;
@@ -740,6 +747,7 @@ function _uc_attribute_alter_form($produ
             'qty' => $qty,
           );
           $display_price = ($option->price != 0 ? ', '. ($option->price > 0 ? '+' : '') . uc_price($price_info, $context) : '');
+          $display_price .= ($option->multiplier != 0 ? ', x'. (string)$option->multiplier : '');
           break;
         case 'none':
         default:
@@ -820,7 +828,7 @@ function _uc_attribute_display_types() {
  *   Array of attribute ids that have price affecting options.
  */
 function uc_attribute_priced_attributes($nid) {
-  $attributes = db_query("SELECT DISTINCT (pa.aid) FROM {uc_product_attributes} AS pa INNER JOIN {uc_attribute_options} AS ao ON ao.aid = pa.aid INNER JOIN {uc_product_options} AS po ON (po.oid = ao.oid AND po.nid = pa.nid) WHERE pa.nid = %d AND po.price <> 0 AND pa.display <> 0", $nid);
+  $attributes = db_query("SELECT DISTINCT (pa.aid) FROM {uc_product_attributes} AS pa INNER JOIN {uc_attribute_options} AS ao ON ao.aid = pa.aid INNER JOIN {uc_product_options} AS po ON (po.oid = ao.oid AND po.nid = pa.nid) WHERE pa.nid = %d AND (po.price <> 0 OR po.multiplier <> 0) AND pa.display <> 0", $nid);
   $aids = array();
   while ($attribute = db_fetch_array($attributes)) {
     $aids[] = $attribute['aid'];

