diff --git uc_aac.module uc_aac.module
old mode 100644
new mode 100755
index c42f7f8..7384142
--- uc_aac.module
+++ uc_aac.module
@@ -110,7 +110,7 @@ function theme_uc_aac_js($nid, $price, $update_attributes) {
      * buttons update on click.
      */
     function initialize_fields_'. $nid .'() {
-      $("#node-'. $nid .' select").each(function () {
+      $("#node-'. $nid .' select, #node-'. $nid .' :checkbox").each(function () {
         var element = this;
         if (element.name && element.name.match("attributes")) {
           $(this).change(function () {
@@ -118,7 +118,7 @@ function theme_uc_aac_js($nid, $price, $update_attributes) {
           });
         }
       });
-      $("#node-'. $nid .' :radio").each(function () {
+      $("#node-'. $nid .' :radio, #node-'. $nid .' :checkbox").each(function () {
         var element = this;
         if (element.name && element.name.match("attributes")) {
           // Needed because off odd click() behavior in IE with Jquery Update
@@ -151,6 +151,12 @@ function theme_uc_aac_js($nid, $price, $update_attributes) {
           aac_form.elements[aac_form.elements.length] = element;
         }
       });
+      $("#node-'. $nid .' :checkbox").each(function () {
+        var element = this;
+        if (element.name && element.name.match("attributes")) {
+          aac_form.elements[aac_form.elements.length] = element;
+        }
+      });
       var this_update = new Date();
       aac_'. $nid .'_update = this_update.getTime();
       $(aac_form).ajaxSubmit( {
@@ -210,6 +216,30 @@ function theme_uc_aac_js($nid, $price, $update_attributes) {
                     initialize_fields_'. $nid .'();
                   }
                 }
+
+                if (json_results.attributes[i].type == "checkbox") {
+                  var checkbox_index = 0;
+                  $("#node-'. $nid .' :checkbox").parent().each(function (j) {
+                    if (this.firstChild.name.substr(0, this.firstChild.name.length - 4) == json_results.attributes[i].name) {
+                      checkbox_option = json_results.attributes[i].options[checkbox_index];
+                      if (checkbox_option.adjustment.length > 0) {
+                        checkbox_option.label += ",";
+                      }
+                      checkbox_index ++;
+                      if ($.browser.msie) {
+                        var checkbox_input = this.innerHTML.slice(0, this.innerHTML.indexOf(">") + 1);
+                        this.innerHTML = checkbox_input + " " + checkbox_option.label + " " + checkbox_option.adjustment;
+                      }
+                      else {
+                        this.childNodes[this.childNodes.length-1].textContent = " " + checkbox_option.label + " " + checkbox_option.adjustment;
+                      }
+                    }
+                  });
+                  if ($.browser.msie) {
+                    // Re-apply all of the onClick events that get lost when using innerHTML
+                    initialize_fields_'. $nid .'();
+                  }
+                }
               }
             }
             var currentsellHTML= $("#node-'. $nid .' .uc-price-sell").html();
@@ -244,10 +274,17 @@ function _uc_aac_calculate_price() {
   $base_price = db_result(db_query('SELECT sell_price FROM {uc_products} WHERE nid=%d AND vid=(SELECT vid FROM {node} WHERE nid=%d)', $nid, $nid));
   $updated_price = $base_price;
   $attributes = $field_values['attributes'];
-  $types = array(0 => "text", 1 => "select", 2 => "radio");
+  $types = array(0 => "text", 1 => "select", 2 => "radio", 3 => 'checkbox');
   if ($attributes) {
-    foreach ($attributes as $attribute) {
-      $aid = db_result(db_query('SELECT aid FROM {uc_attribute_options} WHERE oid = %d', $attribute));
+    foreach ($attributes as $aid => $selected_options) {
+      if(!$selected_options || (is_array($selected_options && empty($selected_options)))) {
+        continue;
+      }
+
+      if(!is_array($selected_options)) {
+        $selected_options = array($selected_options);
+      }
+
       $display = db_result(db_query('SELECT display FROM {uc_product_attributes} WHERE aid = %d AND nid = %d', $aid, $nid));
       $options = db_query('SELECT DISTINCT upo.oid, uao.name, upo.cost, upo.price FROM {uc_attribute_options} AS uao LEFT JOIN {uc_product_options} AS upo ON uao.oid = upo.oid WHERE uao.aid = %d AND upo.nid = %d ORDER BY upo.ordering, uao.ordering, uao.name', $aid, $nid);
       $names = array();
@@ -255,16 +292,16 @@ function _uc_aac_calculate_price() {
       while ($option = db_fetch_object($options)) {
         $names[$option->oid] = $option->name;
         $prices[$option->oid] = $option->price;
-        if ($option->oid == $attribute) {
+        if (in_array($option->oid, $selected_options)) {
           $used_price[$aid] = $option->price;
           $updated_price += $option->price;
         }
       }
       $attribute_options = array();
       foreach ($prices as $oid => $attribute_price) {
-        $adjusted_price = $attribute_price - $used_price[$aid];
+        $adjusted_price = $types[$display] != 'checkbox' ? $attribute_price - $used_price[$aid] : $used_price[$aid];
         $price_text = '';
-        if ($adjusted_price != 0) {
+        if ($types[$display] == 'checkbox' || $adjusted_price != 0) {
           if ($adjusted_price > 0) {
             $price_text .= "+";
           }
