diff --git a/core/misc/ajax.js b/core/misc/ajax.js
index 53351ad..f5d09a3 100644
--- a/core/misc/ajax.js
+++ b/core/misc/ajax.js
@@ -1,4 +1,4 @@
-(function ($, window) {
+(function ($, window, Drupal, drupalSettings) {
 
 "use strict";
 
@@ -318,7 +318,7 @@ Drupal.ajax.prototype.beforeSerialize = function (element, options) {
   // $.ajax(). When there is no form and $.ajax() is used, beforeSerialize()
   // isn't called, but don't rely on that: explicitly check this.form.
   if (this.form) {
-    var settings = this.settings || Drupal.settings;
+    var settings = this.settings || drupalSettings;
     Drupal.detachBehaviors(this.form, settings, 'serialize');
   }
 
@@ -337,7 +337,7 @@ Drupal.ajax.prototype.beforeSerialize = function (element, options) {
   // @see ajax_base_page_theme()
   // @see drupal_get_css()
   // @see drupal_get_js()
-  var pageState = Drupal.settings.ajaxPageState;
+  var pageState = drupalSettings.ajaxPageState;
   options.data['ajax_page_state[theme]'] = pageState.theme;
   options.data['ajax_page_state[theme_token]'] = pageState.theme_token;
   for (var cssFile in pageState.css) {
@@ -446,7 +446,7 @@ Drupal.ajax.prototype.success = function (response, status) {
   // commands is not sufficient, because behaviors from the entire form need
   // to be reattached.
   if (this.form) {
-    var settings = this.settings || Drupal.settings;
+    var settings = this.settings || drupalSettings;
     Drupal.attachBehaviors(this.form, settings);
   }
 
@@ -502,7 +502,7 @@ Drupal.ajax.prototype.error = function (response, uri) {
   $(this.element).removeClass('progress-disabled').removeAttr('disabled');
   // Reattach behaviors, if they were detached in beforeSerialize().
   if (this.form) {
-    var settings = response.settings || this.settings || Drupal.settings;
+    var settings = response.settings || this.settings || drupalSettings;
     Drupal.attachBehaviors(this.form, settings);
   }
 };
@@ -551,7 +551,7 @@ Drupal.ajax.prototype.commands = {
       case 'replaceAll':
       case 'empty':
       case 'remove':
-        settings = response.settings || ajax.settings || Drupal.settings;
+        settings = response.settings || ajax.settings || drupalSettings;
         Drupal.detachBehaviors(wrapper, settings);
     }
 
@@ -592,7 +592,7 @@ Drupal.ajax.prototype.commands = {
     // optional.
     if (new_content.parents('html').length > 0) {
       // Apply any settings from the returned JSON if available.
-      settings = response.settings || ajax.settings || Drupal.settings;
+      settings = response.settings || ajax.settings || drupalSettings;
       Drupal.attachBehaviors(new_content, settings);
     }
   },
@@ -601,7 +601,7 @@ Drupal.ajax.prototype.commands = {
    * Command to remove a chunk from the page.
    */
   remove: function (ajax, response, status) {
-    var settings = response.settings || ajax.settings || Drupal.settings;
+    var settings = response.settings || ajax.settings || drupalSettings;
     Drupal.detachBehaviors($(response.selector), settings);
     $(response.selector).remove();
   },
@@ -637,7 +637,7 @@ Drupal.ajax.prototype.commands = {
    */
   settings: function (ajax, response, status) {
     if (response.merge) {
-      $.extend(true, Drupal.settings, response.settings);
+      $.extend(true, drupalSettings, response.settings);
     }
     else {
       ajax.settings = response.settings;
@@ -694,4 +694,4 @@ Drupal.ajax.prototype.commands = {
   }
 };
 
-})(jQuery, this);
+})(jQuery, this, Drupal, drupalSettings);
diff --git a/core/misc/drupal.js b/core/misc/drupal.js
index d7a4e40..c9055f5 100644
--- a/core/misc/drupal.js
+++ b/core/misc/drupal.js
@@ -9,9 +9,6 @@ jQuery.noConflict();
 
 "use strict";
 
-// Populate Drupal.settings with the drupalSettings variable.
-Drupal.settings = drupalSettings;
-
 /**
  * Custom error type thrown after attach/detach if one or more behaviors failed.
  *
@@ -70,7 +67,7 @@ DrupalBehaviorError.prototype = new Error();
  *   is used.
  * @param settings
  *   An object containing settings for the current context. If none is given,
- *   the global Drupal.settings object is used.
+ *   the global drupalSettings object is used.
  */
 Drupal.attachBehaviors = function (context, settings) {
   context = context || document;
@@ -112,7 +109,7 @@ Drupal.attachBehaviors = function (context, settings) {
  *   is used.
  * @param settings
  *   An object containing settings for the current context. If none given, the
- *   global Drupal.settings object is used.
+ *   global drupalSettings object is used.
  * @param trigger
  *   A string containing what's causing the behaviors to be detached. The
  *   possible triggers are:
diff --git a/core/misc/tabledrag.js b/core/misc/tabledrag.js
index f578d4a..9a6c21c 100644
--- a/core/misc/tabledrag.js
+++ b/core/misc/tabledrag.js
@@ -1,4 +1,4 @@
-(function ($) {
+(function ($, Drupal, drupalSettings) {
 
 "use strict";
 
@@ -1060,9 +1060,9 @@ Drupal.tableDrag.prototype.row.prototype.isValidSwap = function (row) {
  *   DOM element what will be swapped with the row group.
  */
 Drupal.tableDrag.prototype.row.prototype.swap = function (position, row) {
-  Drupal.detachBehaviors(this.group, Drupal.settings, 'move');
+  Drupal.detachBehaviors(this.group, drupalSettings, 'move');
   $(row)[position](this.group);
-  Drupal.attachBehaviors(this.group, Drupal.settings);
+  Drupal.attachBehaviors(this.group, drupalSettings);
   this.changed = true;
   this.onSwap(row);
 };
@@ -1248,4 +1248,4 @@ $.extend(Drupal.theme, {
   }
 });
 
-})(jQuery);
+})(jQuery, Drupal, drupalSettings);
diff --git a/core/modules/locale/locale.datepicker.js b/core/modules/locale/locale.datepicker.js
index 55edf37..b23e57d 100644
--- a/core/modules/locale/locale.datepicker.js
+++ b/core/modules/locale/locale.datepicker.js
@@ -3,7 +3,7 @@
  * Datepicker JavaScript for the Locale module.
  */
 
-(function ($) {
+(function ($, Drupal, drupalSettings) {
 
 "use strict";
 
@@ -12,7 +12,7 @@
  */
 Drupal.behaviors.localeDatepicker = {
   attach: function(context, settings) {
-    // This code accesses Drupal.settings and localized strings via Drupal.t().
+    // This code accesses drupalSettings and localized strings via Drupal.t().
     // So this code should run after these are initialized. By placing it in an
     // attach behavior this is assured.
     $.datepicker.regional['drupal-locale'] = $.extend({
@@ -78,9 +78,9 @@ Drupal.behaviors.localeDatepicker = {
       dateFormat: Drupal.t('mm/dd/yy'),
       firstDay: 0,
       isRTL: 0
-    }, Drupal.settings.jquery.ui.datepicker);
+    }, drupalSettings.jquery.ui.datepicker);
     $.datepicker.setDefaults($.datepicker.regional['drupal-locale']);
   }
 };
 
-})(jQuery);
+})(jQuery, Drupal, drupalSettings);
diff --git a/core/modules/node/node.js b/core/modules/node/node.js
index b61c117..f0b5a38 100644
--- a/core/modules/node/node.js
+++ b/core/modules/node/node.js
@@ -3,7 +3,7 @@
  * Defines Javascript behaviors for the node module.
  */
 
-(function ($) {
+(function ($, Drupal, drupalSettings) {
 
 "use strict";
 
@@ -27,7 +27,7 @@ Drupal.behaviors.nodeDetailsSummaries = {
 
     $context.find('.node-form-author').drupalSetSummary(function (context) {
       var $context = $(context);
-      var name = $context.find('.form-item-name input').val() || Drupal.settings.anonymous,
+      var name = $context.find('.form-item-name input').val() || drupalSettings.anonymous,
         date = $context.find('.form-item-date input').val();
       return date ?
         Drupal.t('By @name on @date', { '@name': name, '@date': date }) :
@@ -67,4 +67,4 @@ Drupal.behaviors.nodeDetailsSummaries = {
   }
 };
 
-})(jQuery);
+})(jQuery, Drupal, drupalSettings);
diff --git a/core/modules/overlay/overlay-parent.js b/core/modules/overlay/overlay-parent.js
index caf9336..a800184 100644
--- a/core/modules/overlay/overlay-parent.js
+++ b/core/modules/overlay/overlay-parent.js
@@ -3,7 +3,7 @@
  * Attaches the behaviors for the Overlay parent pages.
  */
 
-(function ($) {
+(function ($, Drupal, drupalSettings) {
 
 "use strict";
 
@@ -367,13 +367,13 @@ Drupal.overlay.isAdminLink = function (url) {
   // Turn the list of administrative paths into a regular expression.
   if (!this.adminPathRegExp) {
     var prefix = '';
-    if (Drupal.settings.overlay.pathPrefixes.length) {
+    if (drupalSettings.overlay.pathPrefixes.length) {
       // Allow path prefixes used for language negatiation followed by slash,
       // and the empty string.
-      prefix = '(' + Drupal.settings.overlay.pathPrefixes.join('/|') + '/|)';
+      prefix = '(' + drupalSettings.overlay.pathPrefixes.join('/|') + '/|)';
     }
-    var adminPaths = '^' + prefix + '(' + Drupal.settings.overlay.paths.admin.replace(/\s+/g, '|') + ')$';
-    var nonAdminPaths = '^' + prefix + '(' + Drupal.settings.overlay.paths.non_admin.replace(/\s+/g, '|') + ')$';
+    var adminPaths = '^' + prefix + '(' + drupalSettings.overlay.paths.admin.replace(/\s+/g, '|') + ')$';
+    var nonAdminPaths = '^' + prefix + '(' + drupalSettings.overlay.paths.non_admin.replace(/\s+/g, '|') + ')$';
     adminPaths = adminPaths.replace(/\*/g, '.*');
     nonAdminPaths = nonAdminPaths.replace(/\*/g, '.*');
     this.adminPathRegExp = new RegExp(adminPaths);
@@ -788,9 +788,9 @@ Drupal.overlay.fragmentizeLink = function (link, parentLocation) {
 function refreshRegion(regionName, regionSelector) {
   var $region = $(regionSelector);
   Drupal.detachBehaviors($region);
-  $.get(Drupal.url(Drupal.settings.overlay.ajaxCallback + '/' + regionName), function (newElement) {
+  $.get(Drupal.url(drupalSettings.overlay.ajaxCallback + '/' + regionName), function (newElement) {
     $region.replaceWith($(newElement));
-    Drupal.attachBehaviors($region, Drupal.settings);
+    Drupal.attachBehaviors($region, drupalSettings);
   });
 }
 
@@ -865,7 +865,7 @@ Drupal.overlay.getPath = function (link) {
   if (path.charAt(0) !== '/') {
     path = '/' + path;
   }
-  path = path.replace(new RegExp(Drupal.settings.basePath + Drupal.settings.scriptPath), '');
+  path = path.replace(new RegExp(drupalSettings.basePath + drupalSettings.scriptPath), '');
 
   return path;
 };
@@ -982,4 +982,4 @@ $.extend(Drupal.theme, {
   }
 });
 
-})(jQuery);
+})(jQuery, Drupal, drupalSettings);
diff --git a/core/modules/statistics/statistics.js b/core/modules/statistics/statistics.js
index f869ed7..5d66655 100644
--- a/core/modules/statistics/statistics.js
+++ b/core/modules/statistics/statistics.js
@@ -1,4 +1,4 @@
-(function ($) {
+(function ($, Drupal, drupalSettings) {
 
   "use strict";
 
@@ -6,8 +6,8 @@
     $.ajax({
       type: "POST",
       cache: false,
-      url: Drupal.settings.statistics.url,
-      data: Drupal.settings.statistics.data
+      url: drupalSettings.statistics.url,
+      data: drupalSettings.statistics.data
     });
   });
-})(jQuery);
+})(jQuery, Drupal, drupalSettings);
diff --git a/core/modules/system/system.modules.js b/core/modules/system/system.modules.js
index 1efe863..9cd93a3 100644
--- a/core/modules/system/system.modules.js
+++ b/core/modules/system/system.modules.js
@@ -1,8 +1,8 @@
-(function ($, Drupal) {
+(function ($, Drupal, drupalSettings) {
 
 "use strict";
 
-$.extend(Drupal.settings, {
+$.extend(drupalSettings, {
   hideModules: {
     method: 'toggle',
     duration: 0
@@ -119,4 +119,4 @@ Drupal.behaviors.tableFilterByText = {
   }
 };
 
-}(jQuery, Drupal));
+}(jQuery, Drupal, drupalSettings));
diff --git a/core/modules/views/js/ajax_view.js b/core/modules/views/js/ajax_view.js
index 5bf75bb..fe91547 100644
--- a/core/modules/views/js/ajax_view.js
+++ b/core/modules/views/js/ajax_view.js
@@ -2,7 +2,7 @@
  * @file
  * Handles AJAX fetching of views, including filter submission and response.
  */
-(function ($) {
+(function ($, Drupal, drupalSettings) {
 
 "use strict";
 
@@ -11,8 +11,8 @@
  */
 Drupal.behaviors.ViewsAjaxView = {};
 Drupal.behaviors.ViewsAjaxView.attach = function() {
-  if (Drupal.settings && Drupal.settings.views && Drupal.settings.views.ajaxViews) {
-    $.each(Drupal.settings.views.ajaxViews, function(i, settings) {
+  if (drupalSettings && drupalSettings.views && drupalSettings.views.ajaxViews) {
+    $.each(drupalSettings.views.ajaxViews, function(i, settings) {
       Drupal.views.instances[i] = new Drupal.views.ajaxView(settings);
     });
   }
@@ -29,7 +29,7 @@ Drupal.views.ajaxView = function(settings) {
   this.$view = $(selector);
 
   // Retrieve the path to use for views' ajax.
-  var ajax_path = Drupal.settings.views.ajax_path;
+  var ajax_path = drupalSettings.views.ajax_path;
 
   // If there are multiple views this might've ended up showing up multiple times.
   if (ajax_path.constructor.toString().indexOf("Array") !== -1) {
@@ -135,4 +135,4 @@ Drupal.ajax.prototype.commands.viewsScrollTop = function (ajax, response) {
   }
 };
 
-})(jQuery);
+})(jQuery, Drupal, drupalSettings);
diff --git a/core/modules/views/js/base.js b/core/modules/views/js/base.js
index 5cb7e5e..f929e43 100644
--- a/core/modules/views/js/base.js
+++ b/core/modules/views/js/base.js
@@ -2,7 +2,7 @@
  * @file
  * Some basic behaviors and utility functions for Views.
  */
-(function ($) {
+(function ($, Drupal, drupalSettings) {
 
   "use strict";
 
@@ -63,7 +63,7 @@
    */
   Drupal.Views.getPath = function (href) {
     href = Drupal.Views.pathPortion(href);
-    href = href.substring(Drupal.settings.basePath.length, href.length);
+    href = href.substring(drupalSettings.basePath.length, href.length);
     // 3 is the length of the '?q=' added to the url without clean urls.
     if (href.substring(0, 3) === '?q=') {
       href = href.substring(3, href.length);
@@ -77,4 +77,4 @@
     return href;
   };
 
-})(jQuery);
+})(jQuery, Drupal, drupalSettings);
diff --git a/core/modules/views/views_ui/js/ajax.js b/core/modules/views/views_ui/js/ajax.js
index 8595dc8..6e58aa6 100644
--- a/core/modules/views/views_ui/js/ajax.js
+++ b/core/modules/views/views_ui/js/ajax.js
@@ -2,14 +2,14 @@
  * @file
  * Handles AJAX submission and response in Views UI.
  */
-(function ($) {
+(function ($, Drupal, drupalSettings) {
 
   "use strict";
 
   Drupal.ajax.prototype.commands.viewsSetForm = function (ajax, response, status) {
-    var ajax_title = Drupal.settings.views.ajax.title;
-    var ajax_body = Drupal.settings.views.ajax.id;
-    var ajax_popup = Drupal.settings.views.ajax.popup;
+    var ajax_title = drupalSettings.views.ajax.title;
+    var ajax_body = drupalSettings.views.ajax.id;
+    var ajax_popup = drupalSettings.views.ajax.popup;
     $(ajax_title).html(response.title);
     $(ajax_body).html(response.output);
     $(ajax_popup).dialog('open');
@@ -38,8 +38,8 @@
   };
 
   Drupal.ajax.prototype.commands.viewsDismissForm = function (ajax, response, status) {
-    Drupal.ajax.prototype.commands.viewsSetForm({}, {'title': '', 'output': Drupal.settings.views.ajax.defaultForm});
-    $(Drupal.settings.views.ajax.popup).dialog('close');
+    Drupal.ajax.prototype.commands.viewsSetForm({}, {'title': '', 'output': drupalSettings.views.ajax.defaultForm});
+    $(drupalSettings.views.ajax.popup).dialog('close');
   };
 
   Drupal.ajax.prototype.commands.viewsHighlight = function (ajax, response, status) {
@@ -220,4 +220,4 @@
     }
   };
 
-})(jQuery);
+})(jQuery, Drupal, drupalSettings);
diff --git a/core/modules/views/views_ui/js/views-admin.js b/core/modules/views/views_ui/js/views-admin.js
index a8fc481..74b6a84 100644
--- a/core/modules/views/views_ui/js/views-admin.js
+++ b/core/modules/views/views_ui/js/views-admin.js
@@ -2,6 +2,8 @@
  * @file
  * Some basic behaviors and utility functions for Views UI.
  */
+(function ($, Drupal, drupalSettings) {
+
 Drupal.viewsUi = {};
 
 Drupal.behaviors.viewsUiEditView = {};
@@ -1089,7 +1091,7 @@ Drupal.viewsUi.resizeModal = function (e, no_shrink) {
   });
 
   // Ensure inner popup height matches.
-  $(Drupal.settings.views.ajax.popup).css('height', height + 'px');
+  $(drupalSettings.views.ajax.popup).css('height', height + 'px');
 
   $scroll.css({
     'height': scrollHeight + 'px',
@@ -1098,10 +1100,12 @@ Drupal.viewsUi.resizeModal = function (e, no_shrink) {
 
 };
 
-jQuery(function() {
+$(function() {
 
   "use strict"
 
-  jQuery(window).bind('resize', Drupal.viewsUi.resizeModal);
-  jQuery(window).bind('scroll', Drupal.viewsUi.resizeModal);
+  $(window).bind('resize', Drupal.viewsUi.resizeModal);
+  $(window).bind('scroll', Drupal.viewsUi.resizeModal);
 });
+
+})(jQuery, Drupal, drupalSettings);
diff --git a/core/themes/bartik/color/preview.js b/core/themes/bartik/color/preview.js
index 551c0e0..cb57121 100644
--- a/core/themes/bartik/color/preview.js
+++ b/core/themes/bartik/color/preview.js
@@ -2,7 +2,7 @@
  * @file
  * Preview for the Bartik theme.
  */
-(function ($) {
+(function ($, Drupal, drupalSettings) {
 
   "use strict";
 
@@ -11,11 +11,11 @@
     callback: function(context, settings, form, farb, height, width) {
       // Change the logo to be the real one.
       if (!this.logoChanged) {
-        $('#preview #preview-logo img').attr('src', Drupal.settings.color.logo);
+        $('#preview #preview-logo img').attr('src', drupalSettings.color.logo);
         this.logoChanged = true;
       }
       // Remove the logo if the setting is toggled off.
-      if (Drupal.settings.color.logo === null) {
+      if (drupalSettings.color.logo === null) {
         $('div').remove('#preview-logo');
       }
 
@@ -42,4 +42,4 @@
       form.find('#preview #preview-site-name').css('color', form.find('#palette input[name="palette[titleslogan]"]').val());
     }
   };
-})(jQuery);
+})(jQuery, Drupal, drupalSettings);
