--- uc_attribute.module
+++ (clipboard)
@@ -557,7 +557,7 @@
     foreach ($data['attributes'] as $aid => $selected) {
       $attribute = $node->attributes[$aid];
       // Only discrete options can affect the price of an item.
-      if ($attribute->display && count($attribute->options)) {
+      if (in_array($attribute->display, array(1, 2, 3)) && count($attribute->options)) {
         // There may be many selected options, or just one.
         foreach ((array)$selected as $oid) {
           if ($oid > 0) {
@@ -568,7 +568,7 @@
         }
       }
       else {
-        // Handle textfield attributes.
+        // Handle textfield and textarea attributes.
         $options[$index] = array(
           'attribute' => _uc_attribute_get_name($attribute),
           'oid' => 0,
@@ -655,7 +655,7 @@
       $options[$option->oid] .= $display_price;
     }
 
-    if (count($attribute->options) && $attribute->display > 0) {
+    if (count($attribute->options) && in_array($attribute->display, array(1, 2, 3))) {
       if ($attribute->required) {
         if ($attribute->display == 1) {
           $options = array('' => t('Please select')) + $options;
@@ -683,7 +683,7 @@
     }
     else {
       $form_attributes[$attribute->aid] = array(
-        '#type' => 'textfield',
+        '#type' => $attribute->display == 0 ? 'textfield' : 'textarea',
         '#description' => check_markup($attribute->description),
         '#default_value' => $attribute->required == FALSE ? $attribute->options[$attribute->default_option]->name : '',
         '#required' => $attribute->required,
@@ -707,6 +707,7 @@
     1 => t('Select box'),
     2 => t('Radio buttons'),
     3 => t('Checkboxes'),
+    4 => t('Text area (multiple rows)'),
   );
 }
 
@@ -719,7 +720,7 @@
  *   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 AND pa.display IN (1,2,3)", $nid);
   $aids = array();
   while ($attribute = db_fetch_array($attributes)) {
     $aids[] = $attribute['aid'];

