Index: uc_aac.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/uc_aac/uc_aac.js,v
retrieving revision 1.1
diff -u -p -r1.1 uc_aac.js
--- uc_aac.js	4 Nov 2009 19:04:50 -0000	1.1
+++ uc_aac.js	9 Nov 2009 21:44:01 -0000
@@ -27,7 +27,7 @@ jQuery.fn.uc_aac_attach = function() {
   $(this).find('select[@name^=attributes]').change(function() {
     uc_aac_calculate(this);
   });
-  $(this).find('input:radio[@name^=attributes]').click(function() {
+  $(this).find('input:radio[@name^=attributes], input:checkbox[@name^=attributes]').click(function() {
     uc_aac_calculate(this);
   });
 }
Index: uc_aac.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/uc_aac/uc_aac.module,v
retrieving revision 1.10
diff -u -p -r1.10 uc_aac.module
--- uc_aac.module	4 Nov 2009 19:04:50 -0000	1.10
+++ uc_aac.module	9 Nov 2009 21:44:01 -0000
@@ -49,17 +49,55 @@ function uc_aac_form_alter(&$form, $form
         $form['qty']['#default_value'] = $form['#parameters'][2]->default_qty;
   
         foreach (element_children($form['attributes']) as $aid) {
-          $selected_oid = $form['#parameters'][2]->attributes[$aid]->default_option;
-          $form['attributes'][$aid]['#default_value'] = $selected_oid;
-  
           // Reset options for each $aid
           $options = array();
   
-          foreach ($form['#parameters'][2]->attributes[$aid]->options as $option) {
-            $price = $option->price - $form['#parameters'][2]->attributes[$aid]->options[$selected_oid]->price;
-            $options[$option->oid] = $option->name . ($price != 0 ? ', '. ($price > 0 ? '+' : '') . uc_currency_format($price) : '');
+          if ($form['attributes'][$aid]['#type'] == 'select' || $form['attributes'][$aid]['#type'] == 'radios') {
+            $selected_oid = $form['#parameters'][2]->attributes[$aid]->default_option;
+            $form['attributes'][$aid]['#default_value'] = $selected_oid;
+
+            // Rebuild option text
+            foreach ($form['#parameters'][2]->attributes[$aid]->options as $option) {
+              $price = $option->price - $form['#parameters'][2]->attributes[$aid]->options[$selected_oid]->price;
+              $options[$option->oid] = $option->name . ($price != 0 ? ', '. ($price > 0 ? '+' : '') . uc_currency_format($price) : '');
+            }
+          }
+          elseif ($form['attributes'][$aid]['#type'] == 'checkboxes') {
+            // TODO: Find out why the default option is not always an array.
+            $selected_oid = $form['#parameters'][2]->attributes[$aid]->default_option;
+            if (!is_array($selected_oid)) {
+              $selected_oid = array();
+            }
+            $form['attributes'][$aid]['#default_value'] = $selected_oid;
+
+            foreach ($form['#parameters'][2]->attributes[$aid]->options as $option) {
+              // Negate selected options
+              if (in_array($option->oid, $selected_oid)) {
+                $price = -$option->price;
+              }
+              else {
+                $price = $option->price;
+              }
+
+              // Rebuild option text
+              $oid_text = '';
+              if ($price != 0) {
+                $oid_text = ', ';
+                if ($price > 0) {
+                  $oid_text .= '+'. uc_currency_format($price);
+                }
+                else {
+                  $oid_text .= '('. uc_currency_format($price) .')';
+                }
+              }
+              $options[$option->oid] = $option->name . $oid_text;
+            }
+          }
+
+          // If options have been reconfigured
+          if (!empty($options)) {
+            $form['attributes'][$aid]['#options'] = $options;
           }
-          $form['attributes'][$aid]['#options'] = $options;
         }
       }
     }
