diff --git a/includes/plugins.inc b/includes/plugins.inc
index 9077d38..3de0616 100644
--- a/includes/plugins.inc
+++ b/includes/plugins.inc
@@ -175,13 +175,27 @@ class panels_cache_object {
 
     // If there are any differences between the old and the new javascript then
     // store them to be added later.
-    if ($diff = array_diff_assoc($js, $start)) {
-      $this->js = $diff;
-    }
-
-    // Special case the settings key and get the difference of the data.
-    if ($settings_diff = array_diff_assoc($js['settings']['data'], $start['settings']['data'])) {
-      $this->js['settings'] = $settings_diff;
+    if ($diff = drupal_array_diff_assoc_recursive($js, $start)) {
+      // Iterate over the diff to ensure we keep the keys on merge and don't add
+      // unnecessary items.
+      foreach ($diff as $key => $diff_data) {
+        // Special case the settings key and get the difference of the data.
+        if ($key === 'settings') {
+          // Iterate over the diff to ensure we keep the keys on merge and don't
+          // add unnecessary items.
+          if (isset($diff[$key]['data'])) {
+            foreach ($diff[$key]['data'] as $settings_key => $settings_data) {
+              // Merge the changes with the base to get a complete settings
+              // array.
+              $this->js[$key]['data'][] = drupal_array_merge_deep($settings_data, $diff[$key]['data'][$settings_key]);
+            }
+          }
+        }
+        else {
+          // Merge the changes with the base to get a complete array.
+          $this->js[$key] = drupal_array_merge_deep($start[$key], $diff_data);
+        }
+      }
     }
 
     // And for tokens:
@@ -213,7 +227,7 @@ class panels_cache_object {
           drupal_add_js($args['data'], $args);
         }
         else {
-          foreach ($args as $setting) {
+          foreach ($args['data'] as $setting) {
             drupal_add_js($setting, 'setting');
           }
         }
diff --git a/panels.info b/panels.info
index 70b961d..5aa334b 100644
--- a/panels.info
+++ b/panels.info
@@ -4,6 +4,7 @@ core = 7.x
 package = "Panels"
 configure = admin/structure/panels
 dependencies[] = ctools
+dependencies[] = system (>=7.23)
 files[] = panels.module
 files[] = includes/common.inc
 files[] = includes/legacy.inc
