Index: trunk/sites/all/modules/flexifield/flexifield-widget.inc
===================================================================
--- trunk/sites/all/modules/flexifield/flexifield-widget.inc	(revision 6)
+++ trunk/sites/all/modules/flexifield/flexifield-widget.inc	(working copy)
@@ -40,10 +40,41 @@
   // the widgets' #process functions.
   _flexifield_setup_form_field_info_hack($aElement, $aContentTypeInfo['fields']);
   
+  // Prevent empty submited sub form element to have any required elements
+  if (!empty($aSubmittedElementData)) {
+    // Construct pseudo item
+    $sItem = array(
+      'value' => $aSubmittedElementData,
+      'type' => $sContentType,
+    );
+    $sFieldSettings = $aForm['#field_info'][$aElement['#field_name']];
+    if (flexifield_content_is_empty($sItem, $sFieldSettings)) {
+      _flexifield_fieldset_clear_required($aElement);
+    }
+  }
+  
   return $aElement;
 }
 
 /**
+ * Clear required flag of a field and all its children
+ */
+function _flexifield_fieldset_clear_required(&$elements) {
+  // Recurse through all children.
+  foreach (element_children($elements) as $key) {
+    if (isset($elements[$key]) && $elements[$key]) {
+      _flexifield_fieldset_clear_required($elements[$key], $form_state);
+    }
+  }
+  if (isset($elements['#required']) && $elements['#required']) {
+    $elements['#required'] = FALSE;
+  }
+  if (isset($elements['#flexifield_storage']['#field_info']['required']) && $elements['#flexifield_storage']['#field_info']['required']) {
+    $elements['#flexifield_storage']['#field_info']['required'] = FALSE;
+  }
+}
+
+/**
  * Setup the result of content_multiple_values_form() for both the 
  * flexifield field and child fields to have some extra stuff happen
  * during form building (#process).
@@ -62,6 +93,8 @@
     $aElement['#flexifield_value_original'] = isset($aElement['#value']) ? $aElement['#value'] : null;
     if (!isset($aElement['#type'])) {
       $aElement['#type'] = 'markup';
+      // Prevent vlaidation errors
+      $aElement['#validated'] = TRUE;
     }
   }
 }
