--- oldform.inc	2007-12-07 12:58:45.000000000 +0200
+++ form.inc	2007-12-07 13:07:52.000000000 +0200
@@ -237,20 +237,24 @@ function drupal_retrieve_form($form_id) 
  *   The path to redirect the user to upon completion.
  */
 function drupal_process_form($form_id, &$form) {
-  global $form_values, $form_submitted, $user, $form_button_counter;
+  global $form_values, $form_submitted, $form_validate, $user, $form_button_counter;
   static $saved_globals = array();
   // In some scenarios, this function can be called recursively. Pushing any pre-existing
   // $form_values and form submission data lets us start fresh without clobbering work done
   // in earlier recursive calls.
-  array_push($saved_globals, array($form_values, $form_submitted, $form_button_counter));
+  array_push($saved_globals, array($form_values, $form_submitted, $form_validate, $form_button_counter));
 
   $form_values = array();
   $form_submitted = FALSE;
+  $form_validate = TRUE;
   $form_button_counter = array(0, 0);
 
   drupal_prepare_form($form_id, $form);
   if (($form['#programmed']) || (!empty($_POST) && (($_POST['form_id'] == $form_id)))) {
-    drupal_validate_form($form_id, $form);
+    // Do not validate the form if #executes_validate_callback was set to FALSE on the pressed button
+	if ($form_validate === TRUE){
+	  drupal_validate_form($form_id, $form);
+	}
     // IE does not send a button value when there is only one submit button (and no non-submit buttons)
     // and you submit by pressing enter.
     // In that case we accept a submission without button values.
@@ -264,7 +268,7 @@ function drupal_process_form($form_id, &
 
   // We've finished calling functions that alter the global values, so we can
   // restore the ones that were there before this function was called.
-  list($form_values, $form_submitted, $form_button_counter) = array_pop($saved_globals);
+  list($form_values, $form_submitted, $form_validate, $form_button_counter) = array_pop($saved_globals);
   return $redirect;
 }
 
@@ -646,7 +650,7 @@ function form_error(&$element, $message 
  *   An associative array containing the structure of the form.
  */
 function form_builder($form_id, $form) {
-  global $form_values, $form_submitted, $form_button_counter;
+  global $form_values, $form_submitted, $form_validate, $form_button_counter;
 
   // Initialize as unprocessed.
   $form['#processed'] = FALSE;
@@ -746,6 +750,9 @@ function form_builder($form_id, $form) {
       // See if a submit button was pressed.
       if (isset($form['#post'][$form['#name']]) && $form['#post'][$form['#name']] == $form['#value']) {
         $form_submitted = $form_submitted || $form['#executes_submit_callback'];
+		
+		// See if validation has to take place, defaults to TRUE
+		$form_validate = $form_validate && (isset($form['#executes_validate_callback']) == FALSE || $form['#executes_validate_callback'] === TRUE);
 
         // In most cases, we want to use form_set_value() to manipulate the
         // global variables. In this special case, we want to make sure that
