diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc
index 1c8b5c7..e64b7ec 100644
--- a/includes/bootstrap.inc
+++ b/includes/bootstrap.inc
@@ -1101,7 +1102,14 @@ function drupal_load($type, $name) {
   $filename = drupal_get_filename($type, $name);
 
   if ($filename) {
-    include_once DRUPAL_ROOT . '/' . $filename;
+    // Special case system.module to avoid breaking drush.
+    // @see https://github.com/drush-ops/drush/pull/822
+    if ($name !== 'system') {
+      include DRUPAL_ROOT . '/' . $filename;
+    }
+    else {
+      include_once DRUPAL_ROOT . '/' . $filename;
+    }
     $files[$type][$name] = TRUE;
 
     return TRUE;
@@ -3135,7 +3143,14 @@ function _registry_check_code($type, $name = NULL) {
   $cache_key = $type[0] . $name;
   if (isset($lookup_cache[$cache_key])) {
     if ($lookup_cache[$cache_key]) {
-      require_once DRUPAL_ROOT . '/' . $lookup_cache[$cache_key];
+      $extension = pathinfo($lookup_cache[$cache_key], PATHINFO_EXTENSION);
+      if ($extension == 'module') {
+        $module_name = pathinfo($lookup_cache[$cache_key], PATHINFO_FILENAME);
+        drupal_load('module', $module_name);
+      }
+      else {
+        require_once DRUPAL_ROOT . '/' . $lookup_cache[$cache_key];
+      }
     }
     return (bool) $lookup_cache[$cache_key];
   }
@@ -3157,7 +3172,14 @@ function _registry_check_code($type, $name = NULL) {
   $lookup_cache[$cache_key] = $file;
 
   if ($file) {
-    require_once DRUPAL_ROOT . '/' . $file;
+    $extension = pathinfo($lookup_cache[$cache_key], PATHINFO_EXTENSION);
+    if ($extension == 'module') {
+      $module_name = pathinfo($lookup_cache[$cache_key], PATHINFO_FILENAME);
+      drupal_load('module', $module_name);
+    }
+    else {
+      require_once DRUPAL_ROOT . '/' . $lookup_cache[$cache_key];
+    }
     return TRUE;
   }
   else {
