diff --git a/modules/node.module b/modules/node.module
index 7d533fb9d661a62c66886c9f329db98bc5a8b65c..5dddec218867681f7360a05f05516d845c533575 100644
--- a/modules/node.module
+++ b/modules/node.module
@@ -1628,7 +1628,7 @@ function node_form_array($node) {
   $form['#node']   = $node;
 
   // Get the node-specific bits.
-  $form = array_merge($form, node_invoke($node, 'form'));
+  $form = array_merge_recursive($form, node_invoke($node, 'form'));
   if (!isset($form['title']['#weight'])) {
     $form['title']['#weight'] = -5;
   }
diff --git a/modules/node/node.module b/modules/node/node.module
index 7d533fb9d661a62c66886c9f329db98bc5a8b65c..5dddec218867681f7360a05f05516d845c533575 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -1628,7 +1628,7 @@ function node_form_array($node) {
   $form['#node']   = $node;
 
   // Get the node-specific bits.
-  $form = array_merge($form, node_invoke($node, 'form'));
+  $form = array_merge_recursive($form, node_invoke($node, 'form'));
   if (!isset($form['title']['#weight'])) {
     $form['title']['#weight'] = -5;
   }