diff --git a/flexifield.module b/flexifield.module
index 63a57c2..5186036 100644
--- a/flexifield.module
+++ b/flexifield.module
@@ -469,11 +469,20 @@ function flexifield_widget_info() {
       'label' => t('Default Widget for Flexi-Field'),
       'field types' => array('flexifield'),
       'multiple values' => CONTENT_HANDLE_MODULE,
+      'callbacks' => array('default value' => CONTENT_CALLBACK_CUSTOM),
     ),
   );
 }
 
 /**
+ * Implementation of CCK's hidden hook_WIDGET_NAME_default_value().
+ */
+function flexifield_default_widget_default_value(&$form, &$form_state, $field, $delta) {
+  // We add a dummy function to keep cck from populating new flexifields with
+  // blank items.
+}
+
+/**
  * Implementation of FAPI hook_elements().
  */
 function flexifield_elements() {
@@ -548,6 +557,17 @@ function flexifield_widget(&$form, &$form_state, $field, $items, $delta = NULL)
   // to make adjustments to what content_multiple_value_form() does.
   else {
     $bReturnSingleItem = TRUE;
+    
+    // Keep extra blank items from getting added to flexifields with values.
+    // We set the item_count flag in $form_state in order to override cck's
+    // default behavior in content_multiple_value_form(). When the form is
+    // submitted by the 'Add another item' button, we see the flag and allow
+    // the item count to increment normally.
+    $item_count = count($items);
+    $form_state['item_count'][$field['field_name']] = (isset($form_state['item_count'][$field['field_name']]))
+      ? $item_count + 1
+      : (($item_count) ? $item_count - 1 : 0);
+
     $element = content_multiple_value_form($form, $form_state, $field, $items);
     $bReturnSingleItem = FALSE;
     module_load_include('inc', 'flexifield', 'flexifield-widget');
