diff --git a/core/misc/ajax.js b/core/misc/ajax.js
index 8e935ed..32f54be 100644
--- a/core/misc/ajax.js
+++ b/core/misc/ajax.js
@@ -78,6 +78,28 @@ Drupal.behaviors.AJAX = {
 };
 
 /**
+ * Freeze the current body height (as minimum height). Used to prevent
+ * unnecessary upwards scrolling when doing DOM manipulations.
+ */
+Drupal.freezeHeight = function () {
+  Drupal.unfreezeHeight();
+  $('<div id="freeze-height"></div>').css({
+    position: 'absolute',
+    top: '0px',
+    left: '0px',
+    width: '1px',
+    height: $('body').css('height')
+  }).appendTo('body');
+};
+
+/**
+ * Unfreeze the body height.
+ */
+Drupal.unfreezeHeight = function () {
+  $('#freeze-height').remove();
+};
+
+/**
  * Ajax object.
  *
  * All Ajax objects on a page are accessible through the global Drupal.ajax
diff --git a/core/misc/drupal.js b/core/misc/drupal.js
index 627e264..bd83e88 100644
--- a/core/misc/drupal.js
+++ b/core/misc/drupal.js
@@ -1,11 +1,8 @@
 var Drupal = Drupal || { 'behaviors': {}, 'locale': {} };
 
-// Allow other JavaScript libraries to use $.
-jQuery.noConflict();
-
 // JavaScript should be made compatible with libraries other than jQuery by
 // wrapping it in an anonymous closure.
-(function ($, Drupal, drupalSettings) {
+(function (Drupal, drupalSettings) {
 
 "use strict";
 
@@ -341,28 +338,6 @@ Drupal.theme = function (func) {
 };
 
 /**
- * Freeze the current body height (as minimum height). Used to prevent
- * unnecessary upwards scrolling when doing DOM manipulations.
- */
-Drupal.freezeHeight = function () {
-  Drupal.unfreezeHeight();
-  $('<div id="freeze-height"></div>').css({
-    position: 'absolute',
-    top: '0px',
-    left: '0px',
-    width: '1px',
-    height: $('body').css('height')
-  }).appendTo('body');
-};
-
-/**
- * Unfreeze the body height.
- */
-Drupal.unfreezeHeight = function () {
-  $('#freeze-height').remove();
-};
-
-/**
  * Encodes a Drupal path for use in a URL.
  *
  * For aesthetic reasons slashes are not escaped.
@@ -433,29 +408,23 @@ Drupal.ajaxError = function (xmlhttp, uri) {
 };
 
 // Class indicating that JS is enabled; used for styling purpose.
-$('html').addClass('js');
+document.documentElement.className += ' js';
 
 //Attach all behaviors.
-$(function () {
+domready(function () {
   Drupal.attachBehaviors(document, drupalSettings);
 });
 
 /**
- * The default themes.
+ * Formats text for emphasized display in a placeholder inside a sentence.
+ *
+ * @param str
+ *   The text to format (plain-text).
+ * @return
+ *   The formatted text (html).
  */
-$.extend(Drupal.theme, {
-
-  /**
-   * Formats text for emphasized display in a placeholder inside a sentence.
-   *
-   * @param str
-   *   The text to format (plain-text).
-   * @return
-   *   The formatted text (html).
-   */
-  placeholder: function (str) {
-    return '<em class="placeholder">' + Drupal.checkPlain(str) + '</em>';
-  }
-});
+Drupal.theme.placeholder = function (str) {
+  return '<em class="placeholder">' + Drupal.checkPlain(str) + '</em>';
+};
 
-})(jQuery, Drupal, window.drupalSettings);
+})(Drupal, window.drupalSettings);
diff --git a/core/misc/ready.min.js b/core/misc/ready.min.js
new file mode 100644
index 0000000..e17d705
--- /dev/null
+++ b/core/misc/ready.min.js
@@ -0,0 +1,4 @@
+/*!
+  * domready (c) Dustin Diaz 2012 - License MIT
+  */
+!function(a,b){typeof module!="undefined"?module.exports=b():typeof define=="function"&&typeof define.amd=="object"?define(b):this[a]=b()}("domready",function(a){function m(a){l=1;while(a=b.shift())a()}var b=[],c,d=!1,e=document,f=e.documentElement,g=f.doScroll,h="DOMContentLoaded",i="addEventListener",j="onreadystatechange",k="readyState",l=/^loade|c/.test(e[k]);return e[i]&&e[i](h,c=function(){e.removeEventListener(h,c,d),m()},d),g&&e.attachEvent(j,c=function(){/^c/.test(e[k])&&(e.detachEvent(j,c),m())}),a=g?function(c){self!=top?l?c():b.push(c):function(){try{f.doScroll("left")}catch(b){return setTimeout(function(){a(c)},50)}c()}()}:function(a){l?a():b.push(a)}})
\ No newline at end of file
diff --git a/core/modules/system/lib/Drupal/system/Tests/Common/JavaScriptTest.php b/core/modules/system/lib/Drupal/system/Tests/Common/JavaScriptTest.php
index 21ea3de..59dd880 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Common/JavaScriptTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Common/JavaScriptTest.php
@@ -193,6 +193,7 @@ function testReset() {
    */
   function testAddInline() {
     drupal_add_library('system', 'drupal');
+    drupal_add_library('system', 'jquery');
     $inline = 'jQuery(function () { });';
     $javascript = drupal_add_js($inline, array('type' => 'inline', 'scope' => 'footer'));
     $this->assertTrue(array_key_exists('core/misc/jquery.js', $javascript), 'jQuery is added when inline scripts are added.');
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 34e36fe..4f44589 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -1141,7 +1141,17 @@ function system_library_info() {
       'core/misc/drupal.js' => array('group' => JS_LIBRARY, 'weight' => -18),
     ),
     'dependencies' => array(
-      array('system', 'jquery'),
+      array('system', 'domready'),
+    ),
+  );
+
+  // Drupal-specific JavaScript.
+  $libraries['domready'] = array(
+    'title' => 'domready',
+    'version' => '',
+    'website' => 'https://github.com/ded/domready',
+    'js' => array(
+      'core/misc/ready.min.js' => array('group' => JS_LIBRARY, 'weight' => -19),
     ),
   );
 
