diff --git a/core/includes/ajax.inc b/core/includes/ajax.inc
index cda55b4..d92e877 100644
--- a/core/includes/ajax.inc
+++ b/core/includes/ajax.inc
@@ -291,7 +291,7 @@ function ajax_render($commands = array()) {
   $scripts = drupal_add_js();
   if (!empty($scripts['settings'])) {
     $settings = $scripts['settings'];
-    array_unshift($commands, ajax_command_settings(call_user_func_array('array_merge_recursive', $settings['data']), TRUE));
+    array_unshift($commands, ajax_command_settings(drupal_array_merge_deep_array$settings['data']), TRUE));
   }
 
   // Allow modules to alter any Ajax response.
diff --git a/core/includes/common.inc b/core/includes/common.inc
index c6a29b7..dba938d 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -7555,7 +7555,7 @@ function drupal_get_filetransfer_info() {
               $values['file path'] = drupal_get_path('module', $module);
             }
           }
-          $info = array_merge_recursive($info, $result);
+          $info = drupal_array_merge_deep($info, $result);
         }
       }
     }
diff --git a/core/includes/module.inc b/core/includes/module.inc
index 221ad60..dff74b6 100644
--- a/core/includes/module.inc
+++ b/core/includes/module.inc
@@ -737,7 +737,7 @@ function module_hook_info() {
         if (function_exists($function)) {
           $result = $function();
           if (isset($result) && is_array($result)) {
-            $hook_info = array_merge_recursive($hook_info, $result);
+            $hook_info = drupal_array_merge_deep($hook_info, $result);
           }
         }
       }
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index 204a48f..aade075 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -278,7 +278,7 @@ function file_ajax_upload() {
 
   $output = theme('status_messages') . drupal_render($form);
   $js = drupal_add_js();
-  $settings = call_user_func_array('array_merge_recursive', $js['settings']['data']);
+  $settings = drupal_array_merge_deep_array($js['settings']['data']);
 
   $commands = array();
   $commands[] = ajax_command_replace(NULL, $output, $settings);
diff --git a/core/modules/node/node.pages.inc b/core/modules/node/node.pages.inc
index cd1eb6d..5e63df4 100644
--- a/core/modules/node/node.pages.inc
+++ b/core/modules/node/node.pages.inc
@@ -171,7 +171,7 @@ function node_form($form, &$form_state, $node) {
   //   handlers to the form buttons below. Remove hook_form() entirely.
   $function = node_type_get_base($node) . '_form';
   if (function_exists($function) && ($extra = $function($node, $form_state))) {
-    $form = array_merge_recursive($form, $extra);
+    $form = drupal_array_merge_deep($form, $extra);
   }
   // If the node type has a title, and the node type form defined no special
   // weight for it, we default to a weight of -5 for consistency.
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 77d6ebf..f4b7070 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -3759,7 +3759,7 @@ function _system_date_formats_build() {
 
     // If another module already set this format, merge in the new settings.
     if (isset($date_formats[$module_format['type']][$module_format['format']])) {
-      $date_formats[$module_format['type']][$module_format['format']] = array_merge_recursive($date_formats[$module_format['type']][$module_format['format']], $module_format);
+      $date_formats[$module_format['type']][$module_format['format']] = drupal_array_merge_deep($date_formats[$module_format['type']][$module_format['format']], $module_format);
     }
     else {
       // This setting will be overridden later if it already exists in the db.
diff --git a/core/modules/translation/translation.pages.inc b/core/modules/translation/translation.pages.inc
index 8c09850..1146d41 100644
--- a/core/modules/translation/translation.pages.inc
+++ b/core/modules/translation/translation.pages.inc
@@ -58,7 +58,7 @@ function translation_node_overview($node) {
         $path = 'node/add/' . str_replace('_', '-', $node->type);
         $links = language_negotiation_get_switch_links($type, $path);
         $query = array('query' => array('translation' => $node->nid, 'target' => $langcode));
-        $options[] = empty($links->links[$langcode]['href']) ? l($text, $path, $query) : l($text, $links->links[$langcode]['href'], array_merge_recursive($links->links[$langcode], $query));
+        $options[] = empty($links->links[$langcode]['href']) ? l($text, $path, $query) : l($text, $links->links[$langcode]['href'], drupal_array_merge_deep($links->links[$langcode], $query));
       }
       $status = t('Not translated');
     }
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index eb2f521..a9faf87 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -1497,7 +1497,7 @@ function template_process_username(&$variables) {
     // to use the former unless they want to add attributes on the link only.
     // If a link is being rendered, these need to be merged. Some attributes are
     // themselves arrays, so the merging needs to be recursive.
-    $variables['link_options']['attributes'] = array_merge_recursive($variables['link_attributes'], $variables['attributes_array']);
+    $variables['link_options']['attributes'] = drupal_array_merge_deep($variables['link_attributes'], $variables['attributes_array']);
   }
 }
 
