--- vat.module	2010-06-15 12:10:44.000000000 +0200

 /**
  * Implementation of hook_field_info().
@@ -22,7 +22,7 @@ function vat_field_info() {
 function vat_field_settings($op, $field) {
   switch ($op) {
     case 'database columns':
-      $columns['vat'] = array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'sortable' => TRUE);
+      $columns['vat'] = array('type' => 'varchar', 'length' => 15, 'not null' => FALSE, 'sortable' => TRUE);
       return $columns;
   }
 }
@@ -33,11 +33,13 @@ function vat_field_settings($op, $field)
 function vat_field($op, &$node, $field, &$items, $teaser, $page) {
   switch ($op) {
     case 'validate':
-      foreach ($items as $delta => $item) {
-        if ($item['vat'] != '' && !vat_is_valid_vat(trim($item['vat']))) {
-          form_set_error($field['field_name'], t('%vat is not a valid vat number', array('%vat' => $item['vat'])));
+      if (is_array($items)) {    
+        foreach ($items as $delta => $item) {
+          if ($item['vat'] != '' && !vat_is_valid_vat(trim($item['vat']))) {
+            form_set_error($field['field_name'], t('%vat is not a valid vat number', array('%vat' => $item['vat'])));
+          }
         }
-      }
+      }  
       break;
       
     case 'presave':
@@ -138,11 +140,9 @@ function vat_field_formatter_info() {
  */
 function vat_widget_info() {
   return array(
-    'text_textfield' => array(
+    'vat_textfield' => array(
       'label' => t('Text field'),
-      // hook_widget_info_alter() doesn't exist so we need to include
-      // all field types.
-      'field types' => array('vat', 'text'),
+      'field types' => array('vat'),
       'multiple values' => CONTENT_HANDLE_CORE,
       'callbacks' => array(
         'default value' => CONTENT_CALLBACK_DEFAULT,
@@ -152,6 +152,20 @@ function vat_widget_info() {
 }
 
 /**
+ * Implementation of FAPI hook_elements().
+ */
+function vat_elements() {
+  return array(
+    'vat_textfield' => array(
+      '#input' => TRUE,
+      '#columns' => array('vat'),
+      '#delta' => 0,
+      '#process' => array('vat_textfield_process'),
+    ),
+  );
+}
+
+/**
  * Implementation of hook_widget().
  */
 function vat_widget(&$form, &$form_state, $field, $items, $delta = 0) {
@@ -163,19 +177,49 @@ function vat_widget(&$form, &$form_state
 }
 
 /**
+ * Process an individual element.
+ */
+function vat_textfield_process($element, $edit, $form_state, $form) {
+  $field = $form['#field_info'][$element['#field_name']];
+  $field_key = $element['#columns'][0];
+  $delta = $element['#delta'];
+  $element[$field_key] = array(
+    '#type' => 'textfield',
+    '#title' => $element['#title'],
+    '#description' => content_filter_xss($field['widget']['description']),
+    '#required' => $element['#required'],
+    '#maxlength' => 15,
+    '#size' => 15,
+    '#attributes' => array('class' => 'text'),
+    '#default_value' => isset($element['#value'][$field_key]) ? $element['#value'][$field_key] : NULL,
+  );
+  return $element;
+}
+
+/**
+ * FAPI theme for an individual text elements.
+ */
+function theme_vat_textfield($element) {
+  return $element['#children'];
+}
+
+/**
  * Implementation of hook_theme().
  */
 function vat_theme() {
   return array(
+    'vat_textfield' => array(
+      'arguments' => array('element' => NULL),
+    ),
     'vat_formatter_default' => array(
       'arguments' => array('element' => NULL),
     ),
-  );
+  );  
 }
 
 /**
  * Theme function for 'default' vat field formatter.
  */
 function theme_vat_formatter_default($element) {
-  return $element['#item']['vat'];
+  return !empty($element['#item']['vat']) ? $element['#item']['vat'] : '';
 }
