Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.19
diff -u -F^f -r1.19 form.inc
--- includes/form.inc	21 Nov 2005 18:14:23 -0000	1.19
+++ includes/form.inc	21 Nov 2005 22:10:39 -0000
@@ -267,8 +274,17 @@ function _form_builder($form_id, $form) 
   }
 
   // Allow for elements to expand to multiple elements. Radios, checkboxes and files for instance.
-  if (function_exists($form['#process']) && !$form['#processed']) {
-    $form = call_user_func($form['#process'], $form);
+  if (isset($form['#process']) && !$form['#processed']) {
+    if (is_array($form['#process'])) {
+      foreach ($form['#process'] as $process) {
+        if (function_exists($process)) {
+          $form = call_user_func($process, $form);
+        }
+      }
+    }
+    elseif (function_exists($form['#process'])) {
+      $form = call_user_func($form['#process'], $form);
+    }
     $form['#processed'] = TRUE;
   }
 
@@ -391,12 +407,12 @@ function _element_info($type, $refresh =
     foreach (module_implements('elements') as $module) {
       $elements = module_invoke($module, 'elements');
       if (is_array($elements)) {
-        $cache = array_merge($cache, $elements);
+        $cache = array_merge_recursive($cache, $elements);
       }
     }
     if (sizeof($cache)) {
       foreach ($cache as $element_type => $info) {
-        $cache[$element_type] = array_merge($basic_defaults, $info);
+        $cache[$element_type] = array_merge_recursive($basic_defaults, $info);
       }
     }
   }
