--- nodereference_field.module	2009-06-12 20:58:18.000000000 +0100
+++ nodereference_field.module	2009-11-10 14:20:16.000000000 +0000
@@ -194,9 +194,59 @@
         }
       }
     }
-  }
+  } 
+  // HACK
+  // This will replace the validation for elements inside auto-create
+  // fieldsets with a wrapper function.
+  
+  if ($form['#id'] == 'node-form') {
+    // examine form elements
+    foreach($form as $form_index => $element) {
+      // identify auto-create fieldset containers
+      if (is_array($element) && $element['#theme'] == 'nodereference_field_node_edit') {
+        // identify children
+        foreach(element_children($element) as $child_index) {
+            
+          $child_element =& $form[$form_index][$child_index];
+
+          // for each instance of field, replace validation with wrapper 
+          // and store some info for the validation wrapper
+          foreach($child_element as $row_index => $value) {
+            if (is_int($row_index)) {
+              $child_element[$row_index]['#old_element_validate'] = $child_element[$row_index]['#element_validate'];    
+              $child_element[$row_index]['#element_validate'] = array('nodereference_field_wrapped_validate');
+              $child_element[$row_index]['#node_ref_row_index'] = $row_index;
+              $child_element[$row_index]['#node_ref_id'] = str_replace('_container', '', $form_index);
+            }
+          }          
+        }
+      }
+    } 
+  } // END HACK
 }
 
+// HACK
+/**
+ * this wraps the standard validation for form elements inside an auto-create fieldset with a check
+ * to see if it needs to be run. it will run the standard validation only if required. i.e. if
+ * a new auto-create node is going to be created.
+ * 
+ * @param array $element
+ * @param array $form_state
+ */
+function nodereference_field_wrapped_validate($element, &$form_state) {
+  $added_node_ref_value = $element['#post'][$element['#node_ref_id']][$element['#node_ref_row_index']]['nid']['nid'];
+
+  if (!empty($added_node_ref_value)) {
+    if (!empty($element['#old_element_validate'])) {
+      
+      foreach($element['#old_element_validate'] as $callback) {
+        call_user_func($callback, $element, $form_state);
+      }
+    }
+  }
+}
+// END HACK
 /**
  * Add referenced fields and place inside fieldset.
  *
@@ -246,6 +296,7 @@
   $type = nodereference_autocreate_type_get($field['referenceable_types']);
   $referenced_type = content_types($type);
   $referenced_fields = $referenced_type['fields'];
+  
 
   // On node creation there are no values set for the field. Add a
   // blank value for the nodereference_autocreate field so that the
@@ -265,7 +316,7 @@
     $path = &$form[$container][$field['field_name']][$field['field_name'] . '_add_more']['#ahah']['path'];
     $path = str_replace('content/js_add_more/', 'nodereference_field/js_add_more/', $path);
   }
-
+  
   foreach ($form['#node']->$field['field_name'] as $row_key => $value) {
     foreach ($referenceable_fields as $field_name => $referenceable_field) {
       $field = $referenced_fields[$field_name];
@@ -444,7 +495,6 @@
 //        'label' => t('Body'),
 //      ),
 //    );
-
     foreach ($type['fields'] as $field) {
       if ($field['type'] == 'nodereference' || $field['multiple'] >= 1) {
         // Prevent infinite references and references to multiple value fields.
