diff --git a/class/UCXF_Field.class.php b/class/UCXF_Field.class.php
index 097ecb4..62fcda0 100644
--- a/class/UCXF_Field.class.php
+++ b/class/UCXF_Field.class.php
@@ -19,6 +19,7 @@ class UCXF_Field {
   const UCXF_WIDGET_TYPE_CHECKBOX = 4;
   const UCXF_WIDGET_TYPE_TEXTFIELD = 5;
   const UCXF_WIDGET_TYPE_PHP_SELECT = 6;
+  const UCXF_WIDGET_TYPE_TEXTAREA = 7;
 
   // -----------------------------------------------------------------------------
   // PROPERTIES
@@ -226,6 +227,8 @@ class UCXF_Field {
    */
   public function output_value($p_sValue) {
     switch ($this->value_type) {
+      case self::UCXF_WIDGET_TYPE_TEXTAREA:
+        return ($p_sValue != '') ? nl2br(check_plain($p_sValue)) : t('n/a');
       case self::UCXF_WIDGET_TYPE_CHECKBOX:
         return ($p_sValue) ? t('Yes') : t('No');
       case self::UCXF_WIDGET_TYPE_SELECT:
@@ -246,6 +249,8 @@ class UCXF_Field {
     switch ($this->value_type) {
       case UCXF_Field::UCXF_WIDGET_TYPE_TEXTFIELD:
         return t('Textfield');
+      case UCXF_Field::UCXF_WIDGET_TYPE_TEXTAREA:
+        return t('Textarea');
       case UCXF_Field::UCXF_WIDGET_TYPE_SELECT:
         return t('Select list');
       case UCXF_Field::UCXF_WIDGET_TYPE_CHECKBOX:
@@ -422,6 +427,10 @@ class UCXF_Field {
         '#title' => t('Textfield'),
         '#description' => t('Let the user input the data in a textbox. If you want a default value, put it in "value" field below.'),
       ),
+      self::UCXF_WIDGET_TYPE_TEXTAREA => array(
+        '#title' => t('Textarea'),
+        '#description' => t('Let the user input the data in a textarea. If you want a default value, put it in "value" field below.'),
+      ),
       self::UCXF_WIDGET_TYPE_SELECT => array(
         '#title' => t('Select list'),
         '#description' => t('Let the user select from a list of options (enter one <strong>safe_key|Some readable option</strong> per line).'),
@@ -658,6 +667,21 @@ class UCXF_Field {
         }
         break;
 
+      case self::UCXF_WIDGET_TYPE_TEXTAREA:
+        $return_field = array(
+          '#type' => 'textarea',
+          '#title' => $this->output('label'),
+          '#description' => $this->output('description'),
+          '#rows' => 4,
+          '#required' => $this->required,
+        );
+        // Add default value only when there is one
+        $default_value = $this->generate_value();
+        if ($default_value != '') {
+          $return_field['#default_value'] = $default_value;
+        }
+        break;
+
       case self::UCXF_WIDGET_TYPE_CHECKBOX:
         $return_field = array(
           '#type' => 'checkbox',
@@ -711,6 +735,7 @@ class UCXF_Field {
   public function generate_value($translate = TRUE) {
     switch ($this->value_type) {
       case self::UCXF_WIDGET_TYPE_TEXTFIELD:
+      case self::UCXF_WIDGET_TYPE_TEXTAREA:
         // This will return a string
         $value = (string) $this->value;
         if ($translate) {
diff --git a/uc_extra_fields_pane.install b/uc_extra_fields_pane.install
index 37b78f7..c32c9ed 100644
--- a/uc_extra_fields_pane.install
+++ b/uc_extra_fields_pane.install
@@ -44,8 +44,8 @@ function uc_extra_fields_pane_schema() {
       ),
       'value' => array(
         'description' => 'The value filled in by the user',
-        'type' => 'varchar',
-        'length' => '255',
+        'type' => 'text',
+        'size' => 'medium',
         'not null' => TRUE,
       ),
     ),
@@ -158,3 +158,11 @@ function uc_extra_fields_pane_update_7100() {
     ->condition('name', 'uc_extra_fields_pane', '=')
     ->execute();
 }
+
+/**
+ * Convert value field from varchar to medium text.
+ */
+function uc_extra_fields_pane_update_7101() {
+  $schema = uc_extra_fields_pane_schema();
+  db_change_field('uc_extra_fields_values', 'value', 'value', $schema['uc_extra_fields_values']['fields']['value']);
+}
diff --git a/uc_extra_fields_pane.module b/uc_extra_fields_pane.module
index 7077205..c3cc284 100644
--- a/uc_extra_fields_pane.module
+++ b/uc_extra_fields_pane.module
@@ -38,6 +38,7 @@ function uc_extra_fields_pane_help($path, $arg = array()) {
       $output .= '<h2>' . t('About the field types') . '</h2>';
       $output .= '<ul>';
       $output .= '<li><strong>' . t('Textfield') . '</strong><br />' . t('This field type adds a simple text field to the form. This field can be pre-filled with a default value.') . '</li>';
+      $output .= '<li><strong>' . t('Textarea') . '</strong><br />' . t('This field type adds a multi-line textarea field to the form. This field can be pre-filled with a default value.') . '</li>';
       $output .= '<li><strong>' . t('Select list') . '</strong><br />' . t('This field type adds a selection field to the form (users can select a value from a dropdown menu). In the value section you can define the available options in the format "safe_key|readable part". The <em>safe_key</em> part is the part that will be saved in the database. The <em>readable</em> part is what will be presented to the user. IMPORTANT NOTE: if you want to make this field required, make sure that the first option of the list has an <em>empty</em> safe key. You can insert an empty safe key by typing a space. Example: !example', array('!example' => '<br />' . UCXF_Field::get_example(UCXF_Field::UCXF_WIDGET_TYPE_SELECT))) . '</li>';
       $output .= '<li><strong>' . t('Checkbox') . '</strong><br />' . t('This field type adds a checkbox to the form.') . '</li>';
       $output .= '<li><strong>' . t('Constant') . '</strong><br />' . t('This field type adds a value to the form which can not be changed by the customer. It is just displayed as plain text. However, admins who can change the Ubercart order are able to adjust the value of this field, because then it\'s displayed as a text field. Example: !example', array('!example' => '<br />' . UCXF_Field::get_example(UCXF_Field::UCXF_WIDGET_TYPE_CONSTANT))) . '</li>';
diff --git a/uc_extra_fields_pane.test b/uc_extra_fields_pane.test
index f19c560..aa0f46b 100644
--- a/uc_extra_fields_pane.test
+++ b/uc_extra_fields_pane.test
@@ -95,6 +95,7 @@ abstract class UCXFTestCase extends UbercartTestHelper {
 
     // Create address fields
     $this->textField = $this->createAddressField(UCXF_Field::UCXF_WIDGET_TYPE_TEXTFIELD);
+    $this->textareaField = $this->createAddressField(UCXF_Field::UCXF_WIDGET_TYPE_TEXTAREA);
     $this->selectField = $this->createAddressField(UCXF_Field::UCXF_WIDGET_TYPE_SELECT);
     $this->assertNoText(t('In this example the key of the first item is just a single space.'), t('The select field was saved without problems.'));
     $this->constantField = $this->createAddressField(UCXF_Field::UCXF_WIDGET_TYPE_CONSTANT);
@@ -289,6 +290,8 @@ abstract class UCXFTestCase extends UbercartTestHelper {
         return 1;
       case UCXF_Field::UCXF_WIDGET_TYPE_TEXTFIELD:
         return $this->randomString(12);
+      case UCXF_Field::UCXF_WIDGET_TYPE_TEXTAREA:
+        return $this->randomString(512);
       case UCXF_Field::UCXF_WIDGET_TYPE_SELECT:
       case UCXF_Field::UCXF_WIDGET_TYPE_PHP_SELECT:
         return 'option2';
@@ -800,6 +803,13 @@ class UCXFCheckoutTestCase extends UCXFTestCase {
       'ucxf[description]' => '<script>/*textField*/</script>',
       'ucxf[value]' => "<em>default</em>\n",
     );
+    // Create address fields.
+    $textarea_edit = array(
+      'ucxf[label]' => '<em>textArea</em>',
+      'ucxf[db_name]' => 'ucxf_textarea',
+      'ucxf[description]' => '<script>/*textArea*/</script>',
+      'ucxf[value]' => "<em>default</em>\n",
+    );
     $selectfield_edit = array(
       'ucxf[label]' => '<em>selectField</em>',
       'ucxf[db_name]' => 'ucxf_selectfield',
@@ -819,6 +829,7 @@ class UCXFCheckoutTestCase extends UCXFTestCase {
     );
 
     $this->textField = $this->createAddressField(UCXF_Field::UCXF_WIDGET_TYPE_TEXTFIELD, $textfield_edit);
+    $this->textField = $this->createAddressField(UCXF_Field::UCXF_WIDGET_TYPE_TEXTAREA, $textarea_edit);
     $this->selectField = $this->createAddressField(UCXF_Field::UCXF_WIDGET_TYPE_SELECT, $selectfield_edit);
     $this->constantField = $this->createAddressField(UCXF_Field::UCXF_WIDGET_TYPE_CONSTANT, $constantfield_edit);
     $this->checkboxField = $this->createAddressField(UCXF_Field::UCXF_WIDGET_TYPE_CHECKBOX, $checkbox_edit);
@@ -833,11 +844,13 @@ class UCXFCheckoutTestCase extends UCXFTestCase {
     // Ensure all output is properly sanitized.
     // Field labels.
     $this->assertNoRaw('<em>textField</em>');
+    $this->assertNoRaw('<em>textArea</em>');
     $this->assertNoRaw('<em>selectField</em>');
     $this->assertNoRaw('<em>constantField</em>');
     $this->assertNoRaw('<em>checkboxField</em>');
     // Field descriptions.
     $this->assertNoRaw('<script>/*textField*/</script>');
+    $this->assertNoRaw('<script>/*textArea*/</script>');
     $this->assertNoRaw('<script>/*selectField*/</script>');
     $this->assertNoRaw('<script>/*constantField*/</script>');
     $this->assertNoRaw('<script>/*checkboxField*/</script>');
@@ -847,6 +860,7 @@ class UCXFCheckoutTestCase extends UCXFTestCase {
     // Generate value for the text and select field.
     $values = array(
       'ucxf_textfield' => '<em>default</em>',
+      'ucxf_textarea' => '<em>default</em>',
       'ucxf_selectfield' => '<script>/*selectFieldOptionKey*/</script>',
     );
 
@@ -861,6 +875,7 @@ class UCXFCheckoutTestCase extends UCXFTestCase {
     // Ensure all output is properly sanitized.
     // Field labels.
     $this->assertNoRaw('<em>textField</em>');
+    $this->assertNoRaw('<em>textArea</em>');
     $this->assertNoRaw('<em>selectField</em>');
     $this->assertNoRaw('<em>constantField</em>');
     $this->assertNoRaw('<em>checkboxField</em>');
