diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc
index 49659f8caf26ecb6cb04fb821a30a25029934256..c5a8ba4049ccb1e68c31f90210c69b59bb87667c 100644
--- a/includes/bootstrap.inc
+++ b/includes/bootstrap.inc
@@ -949,6 +949,9 @@ function _drupal_bootstrap($phase) {
       // Initialize the default database.
       require_once './includes/database.inc';
       db_set_active();
+      // Register autoload functions so that we can access classes and interfaces.
+      spl_autoload_register('drupal_autoload_class');
+      spl_autoload_register('drupal_autoload_interface');
       break;
 
     case DRUPAL_BOOTSTRAP_ACCESS:
@@ -1134,3 +1137,182 @@ function ip_address() {
 
   return $ip_address;
 }
+
+/**
+ * @ingroup registry
+ * @{
+ */
+
+/**
+ * Confirm that a function is available.
+ *
+ * If the function is already available, this function does nothing.
+ * If the function is not available, it tries to load the file where the
+ * function lives. If the file is not available, it returns false, so that it
+ * can be used as a drop-in replacement for function_exists().
+ *
+ * @param $function
+ *   The name of the function to check or load.
+ * @return
+ *   TRUE if the function is now available, FALSE otherwise.
+ */
+function drupal_function_exists($function) {
+  static $checked = array();
+
+  if (defined('MAINTENANCE_MODE')) {
+    return function_exists($function);
+  }
+
+  if (isset($checked[$function])) {
+    return $checked[$function];
+  }
+  $checked[$function] = FALSE;
+
+  if (function_exists($function)) {
+    registry_mark_code('function', $function);
+    $checked[$function] = TRUE;
+    return TRUE;
+  }
+
+  $file = db_result(db_query("SELECT filename FROM {registry} WHERE name = '%s' AND type = '%s'", $function, 'function'));
+  if ($file) {
+    require_once($file);
+    $checked[$function] = function_exists($function);
+    if ($checked[$function]) {
+      registry_mark_code('function', $function);
+    }
+  }
+
+  return $checked[$function];
+}
+
+/**
+ * Confirm that an interface is available.
+ *
+ * This function parallels drupal_function_exists(), but is rarely
+ * called directly. Instead, it is registered as an spl_autoload()
+ * handler, and PHP calls it for us when necessary.
+ *
+ * @param $interface
+ *   The name of the interface to check or load.
+ * @return
+ *   TRUE if the interface is currently available, FALSE otherwise.
+ */
+function drupal_autoload_interface($interface) {
+  return _registry_check_code('interface', $interface);
+}
+
+/**
+ * Confirm that a class is available.
+ *
+ * This function parallels drupal_function_exists(), but is rarely
+ * called directly. Instead, it is registered as an spl_autoload()
+ * handler, and PHP calls it for us when necessary.
+ *
+ * @param $class
+ *   The name of the class to check or load.
+ * @return
+ *   TRUE if the class is currently available, FALSE otherwise.
+ */
+function drupal_autoload_class($class) {
+  return _registry_check_code('class', $class);
+}
+
+/**
+ * Helper for registry_check_{interface, class}.
+ */
+function _registry_check_code($type, $name) {
+  $file = db_result(db_query("SELECT filename FROM {registry} WHERE name = '%s' AND type = '%s'", $name, $type));
+  if ($file) {
+    require_once($file);
+    registry_mark_code($type, $name);
+    return TRUE;
+  }
+}
+
+/**
+ * Collect the resources used for this request.
+ *
+ * @param $type
+ *   The type of resource.
+ * @param $name
+ *   The name of the resource.
+ * @param $return
+ *   Boolean flag to indicate whether to return the resources.
+ */
+function registry_mark_code($type, $name, $return = FALSE) {
+  static $resources = array();
+
+  if ($type && $name) {
+    if (!isset($resources[$type])) {
+      $resources[$type] = array();
+    }
+    if (!in_array($name, $resources[$type])) {
+      $resources[$type][] = $name;
+    }
+  }
+
+  if ($return) {
+    return $resources;
+  }
+}
+
+/**
+ * Rescan all enabled modules and rebuild the registry.
+ *
+ * Rescans all code in modules or includes directory, storing a mapping of
+ * each function, file, and hook implementation in the database.
+ */
+function drupal_rebuild_code_registry() {
+  require_once './includes/registry.inc';
+  _drupal_rebuild_code_registry();
+}
+
+/**
+ * Save hook implementations cache.
+ *
+ * @param $hook
+ *   Array with the hook name and list of modules that implement it.
+ * @param $write_to_persistent_cache
+ *   Whether to write to the persistent cache.
+ */
+function registry_cache_hook_implementations($hook, $write_to_persistent_cache = FALSE) {
+  static $implementations;
+
+  if ($hook) {
+    // Newer is always better, so overwrite anything that's come before.
+    $implementations[$hook['hook']] = $hook['modules'];
+  }
+
+  if ($write_to_persistent_cache === TRUE) {
+    cache_set('hooks', $implementations, 'cache_registry');
+  }
+}
+
+/**
+ * Save the files required by the registry for this path.
+ */
+function registry_cache_path_files() {
+  if ($used_code = registry_mark_code(NULL, NULL, TRUE)) {
+    $files = array();
+    $type_sql = array();
+    $params = array();
+    foreach ($used_code as $type => $names) {
+      $type_sql[] = "(name IN (" . db_placeholders($names, 'varchar') . ") AND type = '%s')";
+      $params = array_merge($params, $names);
+      $params[] = $type;
+    }
+    $res = db_query("SELECT DISTINCT filename FROM {registry} WHERE " . implode(' OR ', $type_sql), $params);
+    while ($row = db_fetch_object($res)) {
+      $files[] = $row->filename;
+    }
+    if ($files) {
+      $menu = menu_get_item();
+      cache_set('registry:' . $menu['path'], implode(';', $files), 'cache_registry');
+    }
+  }
+}
+
+/**
+ * @} End of "ingroup registry".
+ */
diff --git a/includes/common.inc b/includes/common.inc
index 371f3443f0e1ffc0322bd625558622ca350e58f1..710d2e3c2b50e64cb501469a2983ff148ccaa5c7 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -1460,11 +1460,15 @@ function l($text, $path, $options = array()) {
  * react to the closing of the page by calling hook_exit().
  */
 function drupal_page_footer() {
+
   if (variable_get('cache', CACHE_DISABLED) != CACHE_DISABLED) {
     page_set_cache();
   }
 
   module_invoke_all('exit');
+
+  registry_cache_hook_implementations(FALSE, TRUE);
+  registry_cache_path_files();
 }
 
 /**
@@ -2700,7 +2704,7 @@ function drupal_render(&$elements) {
   // element is rendered into the final text.
   if (isset($elements['#pre_render'])) {
     foreach ($elements['#pre_render'] as $function) {
-      if (function_exists($function)) {
+      if (drupal_function_exists($function)) {
         $elements = $function($elements);
       }
     }
@@ -2762,7 +2766,7 @@ function drupal_render(&$elements) {
     // which allows the output'ed text to be filtered.
     if (isset($elements['#post_render'])) {
       foreach ($elements['#post_render'] as $function) {
-        if (function_exists($function)) {
+        if (drupal_function_exists($function)) {
           $content = $function($content, $elements);
         }
       }
@@ -3142,7 +3146,7 @@ function drupal_uninstall_schema($module) {
  */
 function drupal_get_schema_unprocessed($module, $table = NULL) {
   // Load the .install file to get hook_schema.
-  module_load_include('install', $module);
+  module_load_install($module);
   $schema = module_invoke($module, 'schema');
 
   if (!is_null($table) && isset($schema[$table])) {
@@ -3528,6 +3532,7 @@ function drupal_flush_all_caches() {
   // Change query-strings on css/js files to enforce reload for all users.
   _drupal_flush_css_js();
 
+  drupal_rebuild_code_registry();
   drupal_clear_css_cache();
   drupal_clear_js_cache();
   system_theme_data();
@@ -3536,7 +3541,7 @@ function drupal_flush_all_caches() {
   node_types_rebuild();
   // Don't clear cache_form - in-progress form submissions may break.
   // Ordered so clearing the page cache will always be the last action.
-  $core = array('cache', 'cache_block', 'cache_filter', 'cache_page');
+  $core = array('cache', 'cache_block', 'cache_filter', 'cache_registry', 'cache_page');
   $cache_tables = array_merge(module_invoke_all('flush_caches'), $core);
   foreach ($cache_tables as $table) {
     cache_clear_all('*', $table, TRUE);
diff --git a/includes/form.inc b/includes/form.inc
index bb02accabcd1ad129004c8938ace5d350a303f93..94aa380b16ea5fcede251c269ae188ccda03a0c1 100644
--- a/includes/form.inc
+++ b/includes/form.inc
@@ -327,7 +327,7 @@ function drupal_retrieve_form($form_id, &$form_state) {
 
   // We first check to see if there's a function named after the $form_id.
   // If there is, we simply pass the arguments on to it to get the form.
-  if (!function_exists($form_id)) {
+  if (!drupal_function_exists($form_id)) {
     // In cases where many form_ids need to share a central constructor function,
     // such as the node editing form, modules can implement hook_forms(). It
     // maps one or more form_ids to the correct constructor functions.
@@ -348,6 +348,7 @@ function drupal_retrieve_form($form_id, &$form_state) {
     }
     if (isset($form_definition['callback'])) {
       $callback = $form_definition['callback'];
+      drupal_function_exists($callback);
     }
   }
 
@@ -504,13 +505,13 @@ function drupal_prepare_form($form_id, &$form, &$form_state) {
   $form += _element_info('form');
 
   if (!isset($form['#validate'])) {
-    if (function_exists($form_id . '_validate')) {
+    if (drupal_function_exists($form_id . '_validate')) {
       $form['#validate'] = array($form_id . '_validate');
     }
   }
 
   if (!isset($form['#submit'])) {
-    if (function_exists($form_id . '_submit')) {
+    if (drupal_function_exists($form_id . '_submit')) {
       // We set submit here so that it can be altered.
       $form['#submit'] = array($form_id . '_submit');
     }
@@ -712,7 +713,7 @@ function _form_validate($elements, &$form_state, $form_id = NULL) {
     // #value data.
     elseif (isset($elements['#element_validate'])) {
       foreach ($elements['#element_validate'] as $function) {
-        if (function_exists($function))  {
+        if (drupal_function_exists($function))  {
           $function($elements, $form_state, $complete_form);
         }
       }
@@ -749,7 +750,7 @@ function form_execute_handlers($type, &$form, &$form_state) {
   }
 
   foreach ($handlers as $function) {
-    if (function_exists($function))  {
+    if (drupal_function_exists($function))  {
       if ($type == 'submit' && ($batch =& batch_get())) {
         // Some previous _submit handler has set a batch. We store the call
         // in a special 'control' batch set, for execution at the correct
@@ -1032,7 +1033,7 @@ function _form_builder_handle_input_element($form_id, &$form, &$form_state, $com
   // checkboxes and files.
   if (isset($form['#process']) && !$form['#processed']) {
     foreach ($form['#process'] as $process) {
-      if (function_exists($process)) {
+      if (drupal_function_exists($process)) {
         $form = $process($form, isset($edit) ? $edit : NULL, $form_state, $complete_form);
       }
     }
diff --git a/includes/install.inc b/includes/install.inc
index 9398077a10aa971697b724c60974b200da3601f8..54bfd4bc442608a13095a967ef187c539ef6b2a8 100644
--- a/includes/install.inc
+++ b/includes/install.inc
@@ -687,8 +687,9 @@ function drupal_check_profile($profile) {
   $requirements = array();
   foreach ($installs as $install) {
     require_once $install->filename;
-    if (module_hook($install->name, 'requirements')) {
-      $requirements = array_merge($requirements, module_invoke($install->name, 'requirements', 'install'));
+    $function = $install->name. '_requirements';
+    if (function_exists($function)) {
+      $requirements = array_merge($requirements, $function('install'));
     }
   }
   return $requirements;
diff --git a/includes/mail.inc b/includes/mail.inc
index 56c765e7c4f4f1e54d3b5270fc52b74f8f428166..c2394a414919340e1b1b1c577054d3fe643128dd 100644
--- a/includes/mail.inc
+++ b/includes/mail.inc
@@ -115,7 +115,7 @@ function drupal_mail($module, $key, $to, $language, $params = array(), $from = N
   // Build the e-mail (get subject and body, allow additional headers) by
   // invoking hook_mail() on this module. We cannot use module_invoke() as
   // we need to have $message by reference in hook_mail().
-  if (function_exists($function = $module . '_mail')) {
+  if (drupal_function_exists($function = $module . '_mail')) {
     $function($key, $message, $params);
   }
 
diff --git a/includes/menu.inc b/includes/menu.inc
index 2e57234dd6f3f0c2d5f46797545c19927964078b..1a52d3da4872db4e97bd1bdf06ee89e01f1ae356 100644
--- a/includes/menu.inc
+++ b/includes/menu.inc
@@ -339,11 +339,16 @@ function menu_execute_active_handler($path = NULL) {
     menu_rebuild();
   }
   if ($router_item = menu_get_item($path)) {
+    $cache = cache_get('registry:' . $router_item['path'], 'cache_registry');
+    if (!empty($cache->data)) {
+      foreach(explode(';', $cache->data) as $file) {
+        require_once($file);
+      }
+    }
     if ($router_item['access']) {
-      if ($router_item['file']) {
-        require_once($router_item['file']);
+      if (drupal_function_exists($router_item['page_callback'])) {
+        return call_user_func_array($router_item['page_callback'], $router_item['page_arguments']);
       }
-      return call_user_func_array($router_item['page_callback'], $router_item['page_arguments']);
     }
     else {
       return MENU_ACCESS_DENIED;
@@ -1665,7 +1670,7 @@ function menu_router_build($reset = FALSE) {
       // We need to manually call each module so that we can know which module
       // a given item came from.
       $callbacks = array();
-      foreach (module_implements('menu') as $module) {
+      foreach (module_implements('menu', NULL, TRUE) as $module) {
         $router_items = call_user_func($module . '_menu');
         if (isset($router_items) && is_array($router_items)) {
           foreach (array_keys($router_items) as $path) {
@@ -2201,12 +2206,12 @@ function _menu_router_build($callbacks) {
           $load_functions[$k] = NULL;
         }
         else {
-          if (function_exists($matches[1] . '_to_arg')) {
+          if (drupal_function_exists($matches[1] . '_to_arg')) {
             $to_arg_functions[$k] = $matches[1] . '_to_arg';
             $load_functions[$k] = NULL;
             $match = TRUE;
           }
-          if (function_exists($matches[1] . '_load')) {
+          if (drupal_function_exists($matches[1] . '_load')) {
             $function = $matches[1] . '_load';
             // Create an array of arguments that will be passed to the _load
             // function when this menu path is checked, if 'load arguments'
@@ -2293,12 +2298,6 @@ function _menu_router_build($callbacks) {
           if (!isset($item['page arguments']) && isset($parent['page arguments'])) {
             $item['page arguments'] = $parent['page arguments'];
           }
-          if (!isset($item['file']) && isset($parent['file'])) {
-            $item['file'] = $parent['file'];
-          }
-          if (!isset($item['file path']) && isset($parent['file path'])) {
-            $item['file path'] = $parent['file path'];
-          }
         }
       }
     }
@@ -2326,34 +2325,25 @@ function _menu_router_build($callbacks) {
       'tab_parent' => '',
       'tab_root' => $path,
       'path' => $path,
-      'file' => '',
-      'file path' => '',
-      'include file' => '',
     );
 
-    // Calculate out the file to be included for each callback, if any.
-    if ($item['file']) {
-      $file_path = $item['file path'] ? $item['file path'] : drupal_get_path('module', $item['module']);
-      $item['include file'] = $file_path . '/' . $item['file'];
-    }
-
     $title_arguments = $item['title arguments'] ? serialize($item['title arguments']) : '';
     db_query("INSERT INTO {menu_router}
       (path, load_functions, to_arg_functions, access_callback,
       access_arguments, page_callback, page_arguments, fit,
       number_parts, tab_parent, tab_root,
       title, title_callback, title_arguments,
-      type, block_callback, description, position, weight, file)
+      type, block_callback, description, position, weight)
       VALUES ('%s', '%s', '%s', '%s',
       '%s', '%s', '%s', %d,
       %d, '%s', '%s',
       '%s', '%s', '%s',
-      %d, '%s', '%s', '%s', %d, '%s')",
+      %d, '%s', '%s', '%s', %d)",
       $path, $item['load_functions'], $item['to_arg_functions'], $item['access callback'],
       serialize($item['access arguments']), $item['page callback'], serialize($item['page arguments']), $item['_fit'],
       $item['_number_parts'], $item['tab_parent'], $item['tab_root'],
       $item['title'], $item['title callback'], $title_arguments,
-      $item['type'], $item['block callback'], $item['description'], $item['position'], $item['weight'], $item['include file']);
+      $item['type'], $item['block callback'], $item['description'], $item['position'], $item['weight']);
   }
   // Sort the masks so they are in order of descending fit, and store them.
   $masks = array_keys($masks);
diff --git a/includes/module.inc b/includes/module.inc
index d0f100298456e371e093ac3aa459e9e1aac53b1d..e62558af4cd920ea3384c466d30f711c13f711de 100644
--- a/includes/module.inc
+++ b/includes/module.inc
@@ -221,7 +221,7 @@ function _module_build_dependencies($files) {
  */
 function module_exists($module) {
   $list = module_list();
-  return array_key_exists($module, $list);
+  return isset($list[$module]);
 }
 
 /**
@@ -231,7 +231,14 @@ function module_load_install($module) {
   // Make sure the installation API is available
   include_once './includes/install.inc';
 
-  module_load_include('install', $module);
+  $file = module_load_include('install', $module);
+  // Ensure that you can module_invoke something inside the newly-loaded
+  // file during install.
+  $module_list = module_list();
+  if (!isset($module_list[$module])) {
+    $module_list[$module]['filename'] = $file;
+    module_list(TRUE, FALSE, FALSE, $module_list);
+  }
 }
 
 /**
@@ -253,6 +260,7 @@ function module_load_include($type, $module, $name = NULL) {
 
   if (is_file($file)) {
     require_once $file;
+    return $file;
   }
   else {
     return FALSE;
@@ -292,7 +300,7 @@ function module_enable($module_list) {
     // Refresh the module list to include the new enabled module.
     module_list(TRUE, FALSE);
     // Force to regenerate the stored list of hook implementations.
-    module_implements('', FALSE, TRUE);
+    drupal_rebuild_code_registry();
   }
 
   foreach ($invoke_modules as $module) {
@@ -301,7 +309,7 @@ function module_enable($module_list) {
     // We check for the existence of node_access_needs_rebuild() since
     // at install time, module_enable() could be called while node.module
     // is not enabled yet.
-    if (function_exists('node_access_needs_rebuild') && !node_access_needs_rebuild() && module_hook($module, 'node_grants')) {
+    if (drupal_function_exists('node_access_needs_rebuild') && !node_access_needs_rebuild() && module_hook($module, 'node_grants')) {
       node_access_needs_rebuild(TRUE);
     }
   }
@@ -333,7 +341,7 @@ function module_disable($module_list) {
     // Refresh the module list to exclude the disabled modules.
     module_list(TRUE, FALSE);
     // Force to regenerate the stored list of hook implementations.
-    module_implements('', FALSE, TRUE);
+    drupal_rebuild_code_registry();
   }
 
   // If there remains no more node_access module, rebuilding will be
@@ -376,7 +384,13 @@ function module_disable($module_list) {
  *   implemented in that module.
  */
 function module_hook($module, $hook) {
-  return function_exists($module . '_' . $hook);
+  $function = $module . '_' . $hook;
+  if (defined('MAINTENANCE_MODE')) {
+    return function_exists($function);
+  }
+  else {
+    return drupal_function_exists($function);
+  }
 }
 
 /**
@@ -395,22 +409,26 @@ function module_hook($module, $hook) {
  *   An array with the names of the modules which are implementing this hook.
  */
 function module_implements($hook, $sort = FALSE, $refresh = FALSE) {
-  static $implementations;
+  static $implementations = array();
 
   if ($refresh) {
     $implementations = array();
-    return;
+  }
+  else if (!defined('MAINTENANCE_MODE') && empty($implementations)) {
+    if ($cache = cache_get('hooks', 'cache_registry')) {
+      $implementations = $cache->data;
+    }
   }
 
   if (!isset($implementations[$hook])) {
     $implementations[$hook] = array();
-    $list = module_list(FALSE, TRUE, $sort);
-    foreach ($list as $module) {
+    foreach (module_list() as $module) {
       if (module_hook($module, $hook)) {
         $implementations[$hook][] = $module;
       }
     }
   }
+  registry_cache_hook_implementations(array('hook' => $hook, 'modules' => $implementations[$hook]));
 
   // The explicit cast forces a copy to be made. This is needed because
   // $implementations[$hook] is only a reference to an element of
@@ -438,9 +456,8 @@ function module_invoke() {
   $module = $args[0];
   $hook = $args[1];
   unset($args[0], $args[1]);
-  $function = $module . '_' . $hook;
   if (module_hook($module, $hook)) {
-    return call_user_func_array($function, $args);
+    return call_user_func_array($module . '_' . $hook, $args);
   }
 }
 /**
@@ -461,12 +478,14 @@ function module_invoke_all() {
   $return = array();
   foreach (module_implements($hook) as $module) {
     $function = $module . '_' . $hook;
-    $result = call_user_func_array($function, $args);
-    if (isset($result) && is_array($result)) {
-      $return = array_merge_recursive($return, $result);
-    }
-    else if (isset($result)) {
-      $return[] = $result;
+    if (drupal_function_exists($function)) {
+      $result = call_user_func_array($function, $args);
+      if (isset($result) && is_array($result)) {
+        $return = array_merge_recursive($return, $result);
+      }
+      else if (isset($result)) {
+        $return[] = $result;
+      }
     }
   }
 
diff --git a/includes/theme.inc b/includes/theme.inc
index d675e156402990e36576f82b1fc1f5445ee6d343..3b4d1dc1c9b60b29d7350139b5f9623b1183d885 100644
--- a/includes/theme.inc
+++ b/includes/theme.inc
@@ -177,7 +177,9 @@ function _init_theme($theme, $base_theme = array(), $registry_callback = '_theme
     }
   }
 
-  $registry_callback($theme, $base_theme, $theme_engine);
+  if (drupal_function_exists($registry_callback)) {
+    $registry_callback($theme, $base_theme, $theme_engine);
+  }
 }
 
 /**
@@ -628,7 +630,7 @@ function theme() {
       // call_user_func_array.
       $args = array(&$variables, $hook);
       foreach ($info['preprocess functions'] as $preprocess_function) {
-        if (function_exists($preprocess_function)) {
+        if (drupal_function_exists($preprocess_function)) {
           call_user_func_array($preprocess_function, $args);
         }
       }
diff --git a/includes/xmlrpcs.inc b/includes/xmlrpcs.inc
index 21509d494fad9413e85f732e00d8ee308b03b149..ffa5fd8c3fd8f75d2d850969352dcb3f9e0f14b1 100644
--- a/includes/xmlrpcs.inc
+++ b/includes/xmlrpcs.inc
@@ -202,7 +202,7 @@ function xmlrpc_server_call($xmlrpc_server, $methodname, $args) {
     }
   }
 
-  if (!function_exists($method)) {
+  if (!drupal_function_exists($method)) {
     return xmlrpc_error(-32601, t('Server error. Requested function @method does not exist.', array("@method" => $method)));
   }
   // Call the mapped function
diff --git a/install.php b/install.php
index 0341500008a89b3a540df3ea06b07fbb5a42a71a..902fe2b8f7382c310db931a94732240580989fbf 100644
--- a/install.php
+++ b/install.php
@@ -785,8 +785,8 @@ function install_tasks($profile, $task) {
 
   // The end of the install process. Remember profile used.
   if ($task == 'done') {
-    // Rebuild menu to get content type links registered by the profile,
-    // and possibly any other menu items created through the tasks.
+    // Rebuild menu and registry to get content type links registered by the
+    // profile, and possibly any other menu items created through the tasks.
     menu_rebuild();
 
     // Register actions declared by any modules.
diff --git a/modules/aggregator/aggregator.info b/modules/aggregator/aggregator.info
index 2d16c0792ff9e3476f89de3f913221f6603cd6b5..ae6d3e767a74d40de0ff4bc631882ba8c27a35a4 100644
--- a/modules/aggregator/aggregator.info
+++ b/modules/aggregator/aggregator.info
@@ -4,3 +4,6 @@ description = "Aggregates syndicated content (RSS, RDF, and Atom feeds)."
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = aggregator.module
+files[] = aggregator.admin.inc
+files[] = aggregator.pages.inc
diff --git a/modules/aggregator/aggregator.module b/modules/aggregator/aggregator.module
index d9af23b273809df7ee72a287a5fc18faf47119c5..565a3617ccf158b9690abc88b0158c6e921dda9d 100644
--- a/modules/aggregator/aggregator.module
+++ b/modules/aggregator/aggregator.module
@@ -84,7 +84,6 @@ function aggregator_menu() {
     'description' => "Configure which content your site aggregates from other sites, how often it polls them, and how they're categorized.",
     'page callback' => 'aggregator_admin_overview',
     'access arguments' => array('administer news feeds'),
-    'file' => 'aggregator.admin.inc',
   );
   $items['admin/content/aggregator/add/feed'] = array(
     'title' => 'Add feed',
@@ -93,7 +92,6 @@ function aggregator_menu() {
     'access arguments' => array('administer news feeds'),
     'type' => MENU_LOCAL_TASK,
     'parent' => 'admin/content/aggregator',
-    'file' => 'aggregator.admin.inc',
   );
   $items['admin/content/aggregator/add/category'] = array(
     'title' => 'Add category',
@@ -102,7 +100,6 @@ function aggregator_menu() {
     'access arguments' => array('administer news feeds'),
     'type' => MENU_LOCAL_TASK,
     'parent' => 'admin/content/aggregator',
-    'file' => 'aggregator.admin.inc',
   );
   $items['admin/content/aggregator/remove/%aggregator_feed'] = array(
     'title' => 'Remove items',
@@ -110,7 +107,6 @@ function aggregator_menu() {
     'page arguments' => array('aggregator_admin_remove_feed', 4),
     'access arguments' => array('administer news feeds'),
     'type' => MENU_CALLBACK,
-    'file' => 'aggregator.admin.inc',
   );
   $items['admin/content/aggregator/update/%aggregator_feed'] = array(
     'title' => 'Update items',
@@ -118,7 +114,6 @@ function aggregator_menu() {
     'page arguments' => array(4),
     'access arguments' => array('administer news feeds'),
     'type' => MENU_CALLBACK,
-    'file' => 'aggregator.admin.inc',
   );
   $items['admin/content/aggregator/list'] = array(
     'title' => 'List',
@@ -132,40 +127,34 @@ function aggregator_menu() {
     'type' => MENU_LOCAL_TASK,
     'weight' => 10,
     'access arguments' => array('administer news feeds'),
-    'file' => 'aggregator.admin.inc',
   );
   $items['aggregator'] = array(
     'title' => 'Feed aggregator',
     'page callback' => 'aggregator_page_last',
     'access arguments' => array('access news feeds'),
     'weight' => 5,
-    'file' => 'aggregator.pages.inc',
   );
   $items['aggregator/sources'] = array(
     'title' => 'Sources',
     'page callback' => 'aggregator_page_sources',
     'access arguments' => array('access news feeds'),
-    'file' => 'aggregator.pages.inc',
   );
   $items['aggregator/categories'] = array(
     'title' => 'Categories',
     'page callback' => 'aggregator_page_categories',
     'access callback' => '_aggregator_has_categories',
-    'file' => 'aggregator.pages.inc',
   );
   $items['aggregator/rss'] = array(
     'title' => 'RSS feed',
     'page callback' => 'aggregator_page_rss',
     'access arguments' => array('access news feeds'),
     'type' => MENU_CALLBACK,
-    'file' => 'aggregator.pages.inc',
   );
   $items['aggregator/opml'] = array(
     'title' => 'OPML feed',
     'page callback' => 'aggregator_page_opml',
     'access arguments' => array('access news feeds'),
     'type' => MENU_CALLBACK,
-    'file' => 'aggregator.pages.inc',
   );
   $items['aggregator/categories/%aggregator_category'] = array(
     'title callback' => '_aggregator_category_title',
@@ -174,7 +163,6 @@ function aggregator_menu() {
     'page arguments' => array(2),
     'access callback' => 'user_access',
     'access arguments' => array('access news feeds'),
-    'file' => 'aggregator.pages.inc',
   );
   $items['aggregator/categories/%aggregator_category/view'] = array(
     'title' => 'View',
@@ -187,7 +175,6 @@ function aggregator_menu() {
     'page arguments' => array('aggregator_page_category', 2),
     'access arguments' => array('administer news feeds'),
     'type' => MENU_LOCAL_TASK,
-    'file' => 'aggregator.pages.inc',
   );
   $items['aggregator/categories/%aggregator_category/configure'] = array(
     'title' => 'Configure',
@@ -196,14 +183,12 @@ function aggregator_menu() {
     'access arguments' => array('administer news feeds'),
     'type' => MENU_LOCAL_TASK,
     'weight' => 1,
-    'file' => 'aggregator.admin.inc',
   );
   $items['aggregator/sources/%aggregator_feed'] = array(
     'page callback' => 'aggregator_page_source',
     'page arguments' => array(2),
     'access arguments' => array('access news feeds'),
     'type' => MENU_CALLBACK,
-    'file' => 'aggregator.pages.inc',
   );
   $items['aggregator/sources/%aggregator_feed/view'] = array(
     'title' => 'View',
@@ -216,7 +201,6 @@ function aggregator_menu() {
     'page arguments' => array('aggregator_page_source', 2),
     'access arguments' => array('administer news feeds'),
     'type' => MENU_LOCAL_TASK,
-    'file' => 'aggregator.pages.inc',
   );
   $items['aggregator/sources/%aggregator_feed/configure'] = array(
     'title' => 'Configure',
@@ -225,7 +209,6 @@ function aggregator_menu() {
     'access arguments' => array('administer news feeds'),
     'type' => MENU_LOCAL_TASK,
     'weight' => 1,
-    'file' => 'aggregator.admin.inc',
   );
   $items['admin/content/aggregator/edit/feed/%aggregator_feed'] = array(
     'title' => 'Edit feed',
@@ -233,7 +216,6 @@ function aggregator_menu() {
     'page arguments' => array('aggregator_form_feed', 5),
     'access arguments' => array('administer news feeds'),
     'type' => MENU_CALLBACK,
-    'file' => 'aggregator.admin.inc',
   );
   $items['admin/content/aggregator/edit/category/%aggregator_category'] = array(
     'title' => 'Edit category',
@@ -241,7 +223,6 @@ function aggregator_menu() {
     'page arguments' => array('aggregator_form_category', 5),
     'access arguments' => array('administer news feeds'),
     'type' => MENU_CALLBACK,
-    'file' => 'aggregator.admin.inc',
   );
 
   return $items;
diff --git a/modules/block/block.info b/modules/block/block.info
index 75bd66eded1d6ffd64180ad8ec705a022502e6eb..4b9dd2afcd578bad9eb228124e6f08959314989f 100644
--- a/modules/block/block.info
+++ b/modules/block/block.info
@@ -4,3 +4,5 @@ description = Controls the boxes that are displayed around the main content.
 package = Core - required
 version = VERSION
 core = 7.x
+files[] = block.module
+files[] = block.admin.inc
diff --git a/modules/block/block.module b/modules/block/block.module
index ba1257a06f97c0357ba100e83693a2822fa38060..d3660c1ec28981ecb119ed60ec88935edf74d5f2 100644
--- a/modules/block/block.module
+++ b/modules/block/block.module
@@ -120,7 +120,6 @@ function block_menu() {
     'description' => 'Configure what block content appears in your site\'s sidebars and other regions.',
     'page callback' => 'block_admin_display',
     'access arguments' => array('administer blocks'),
-    'file' => 'block.admin.inc',
   );
   $items['admin/build/block/list'] = array(
     'title' => 'List',
@@ -132,7 +131,6 @@ function block_menu() {
     'page callback' => 'block_admin_display_js',
     'access arguments' => array('administer blocks'),
     'type' => MENU_CALLBACK,
-    'file' => 'block.admin.inc',
   );
   $items['admin/build/block/configure'] = array(
     'title' => 'Configure block',
@@ -140,7 +138,6 @@ function block_menu() {
     'page arguments' => array('block_admin_configure'),
     'access arguments' => array('administer blocks'),
     'type' => MENU_CALLBACK,
-    'file' => 'block.admin.inc',
   );
   $items['admin/build/block/delete'] = array(
     'title' => 'Delete block',
@@ -148,7 +145,6 @@ function block_menu() {
     'page arguments' => array('block_box_delete'),
     'access arguments' => array('administer blocks'),
     'type' => MENU_CALLBACK,
-    'file' => 'block.admin.inc',
   );
   $items['admin/build/block/add'] = array(
     'title' => 'Add block',
@@ -156,7 +152,6 @@ function block_menu() {
     'page arguments' => array('block_add_block_form'),
     'access arguments' => array('administer blocks'),
     'type' => MENU_LOCAL_TASK,
-    'file' => 'block.admin.inc',
   );
   $default = variable_get('theme_default', 'garland');
   foreach (list_themes() as $key => $theme) {
@@ -165,7 +160,6 @@ function block_menu() {
       'page arguments' => array($key),
       'type' => $key == $default ? MENU_DEFAULT_LOCAL_TASK : MENU_LOCAL_TASK,
       'weight' => $key == $default ? -10 : 0,
-      'file' => 'block.admin.inc',
       'access callback' => '_block_themes_access',
       'access arguments' => array($theme),
     );
diff --git a/modules/blog/blog.info b/modules/blog/blog.info
index f40da2c42a00d3a2bc4a3d44e70e82d872016a59..ae6430bef989a0cce7d886301c29b12727fc5f60 100644
--- a/modules/blog/blog.info
+++ b/modules/blog/blog.info
@@ -4,3 +4,5 @@ description = Enables keeping easily and regularly updated user web pages or blo
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = blog.module
+files[] = blog.pages.inc
diff --git a/modules/blog/blog.module b/modules/blog/blog.module
index a2a207b768de7e15ee42d0575e0ff27a6af03931..1cc82a16d602c803c62c056bed471474b1889a1e 100644
--- a/modules/blog/blog.module
+++ b/modules/blog/blog.module
@@ -138,7 +138,6 @@ function blog_menu() {
     'page callback' => 'blog_page_last',
     'access arguments' => array('access content'),
     'type' => MENU_SUGGESTED_ITEM,
-    'file' => 'blog.pages.inc',
   );
   $items['blog/%user_uid_optional'] = array(
     'title' => 'My blog',
@@ -146,7 +145,6 @@ function blog_menu() {
     'page arguments' => array(1),
     'access callback' => 'blog_page_user_access',
     'access arguments' => array(1),
-    'file' => 'blog.pages.inc',
   );
   $items['blog/%user/feed'] = array(
     'title' => 'Blogs',
@@ -155,14 +153,12 @@ function blog_menu() {
     'access callback' => 'blog_page_user_access',
     'access arguments' => array(1),
     'type' => MENU_CALLBACK,
-    'file' => 'blog.pages.inc',
   );
   $items['blog/feed'] = array(
     'title' => 'Blogs',
     'page callback' => 'blog_feed_last',
     'access arguments' => array('access content'),
     'type' => MENU_CALLBACK,
-    'file' => 'blog.pages.inc',
   );
 
   return $items;
diff --git a/modules/blogapi/blogapi.info b/modules/blogapi/blogapi.info
index b094bba4a7abf4169bf5d146bf71eadcc47a0d3f..fbe20346ad1922a25947ff3ccdff9680b795c4aa 100644
--- a/modules/blogapi/blogapi.info
+++ b/modules/blogapi/blogapi.info
@@ -4,3 +4,4 @@ description = Allows users to post content using applications that support XML-R
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = blogapi.module
diff --git a/modules/book/book.info b/modules/book/book.info
index 9c2f3537a893ca68984bac674303ecc6e1f98763..23684b43eabce05c1da0148053a9959a4b05ad1c 100644
--- a/modules/book/book.info
+++ b/modules/book/book.info
@@ -4,3 +4,6 @@ description = Allows users to structure site pages in a hierarchy or outline.
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = book.module
+files[] = book.admin.inc
+files[] = book.pages.inc
diff --git a/modules/book/book.module b/modules/book/book.module
index 3d33ce5bc89b324b302325cdc00a49a655265c36..990002a08366745a4535839d7ea7af4e797b4588 100644
--- a/modules/book/book.module
+++ b/modules/book/book.module
@@ -85,7 +85,6 @@ function book_menu() {
     'description' => "Manage your site's book outlines.",
     'page callback' => 'book_admin_overview',
     'access arguments' => array('administer book outlines'),
-    'file' => 'book.admin.inc',
   );
   $items['admin/content/book/list'] = array(
     'title' => 'List',
@@ -98,7 +97,6 @@ function book_menu() {
     'access arguments' => array('administer site configuration'),
     'type' => MENU_LOCAL_TASK,
     'weight' => 8,
-    'file' => 'book.admin.inc',
   );
   $items['admin/content/book/%node'] = array(
     'title' => 'Re-order book pages and change titles',
@@ -107,21 +105,18 @@ function book_menu() {
     'access callback' => '_book_outline_access',
     'access arguments' => array(3),
     'type' => MENU_CALLBACK,
-    'file' => 'book.admin.inc',
   );
   $items['book'] = array(
     'title' => 'Books',
     'page callback' => 'book_render',
     'access arguments' => array('access content'),
     'type' => MENU_SUGGESTED_ITEM,
-    'file' => 'book.pages.inc',
   );
   $items['book/export/%/%'] = array(
     'page callback' => 'book_export',
     'page arguments' => array(2, 3),
     'access arguments' => array('access printer-friendly version'),
     'type' => MENU_CALLBACK,
-    'file' => 'book.pages.inc',
   );
   $items['node/%node/outline'] = array(
     'title' => 'Outline',
@@ -131,7 +126,6 @@ function book_menu() {
     'access arguments' => array(1),
     'type' => MENU_LOCAL_TASK,
     'weight' => 2,
-    'file' => 'book.pages.inc',
   );
   $items['node/%node/outline/remove'] = array(
     'title' => 'Remove from outline',
@@ -140,13 +134,11 @@ function book_menu() {
     'access callback' => '_book_outline_remove_access',
     'access arguments' => array(1),
     'type' => MENU_CALLBACK,
-    'file' => 'book.pages.inc',
   );
   $items['book/js/form'] = array(
     'page callback' => 'book_form_update',
     'access arguments' => array('access content'),
     'type' => MENU_CALLBACK,
-    'file' => 'book.pages.inc',
   );
   return $items;
 }
diff --git a/modules/color/color.info b/modules/color/color.info
index 7c1d7b0899a8ef49f6e0a3f5d551df1956c10135..d6794ab124c466b86767ed30ee7f7d1e737d723a 100644
--- a/modules/color/color.info
+++ b/modules/color/color.info
@@ -4,3 +4,4 @@ description = Allows administrators to change the color scheme of compatible the
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = color.module
diff --git a/modules/comment/comment.info b/modules/comment/comment.info
index cdd764b48a634eded8b1b68d7219621ce404c7e8..00f29d422977d2923eee1ea07cda3ee1d31bf1d6 100644
--- a/modules/comment/comment.info
+++ b/modules/comment/comment.info
@@ -4,3 +4,6 @@ description = Allows users to comment on and discuss published content.
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = comment.module
+files[] = comment.admin.inc
+files[] = comment.pages.inc
diff --git a/modules/comment/comment.module b/modules/comment/comment.module
index 05fe9a11eb26541bf68756d9ffa9a33e9cd8011b..ead3cc906beb074df93b9fef434847d8fdcc5157 100644
--- a/modules/comment/comment.module
+++ b/modules/comment/comment.module
@@ -176,7 +176,6 @@ function comment_menu() {
     'description' => 'List and edit site comments and the comment moderation queue.',
     'page callback' => 'comment_admin',
     'access arguments' => array('administer comments'),
-    'file' => 'comment.admin.inc',
   );
 
   // Tabs:
@@ -190,7 +189,6 @@ function comment_menu() {
     'page arguments' => array('approval'),
     'access arguments' => array('administer comments'),
     'type' => MENU_LOCAL_TASK,
-    'file' => 'comment.admin.inc',
   );
 
   $items['comment/delete'] = array(
@@ -198,7 +196,6 @@ function comment_menu() {
     'page callback' => 'comment_delete',
     'access arguments' => array('administer comments'),
     'type' => MENU_CALLBACK,
-    'file' => 'comment.admin.inc',
   );
 
   $items['comment/edit'] = array(
@@ -206,7 +203,6 @@ function comment_menu() {
     'page callback' => 'comment_edit',
     'access arguments' => array('post comments'),
     'type' => MENU_CALLBACK,
-    'file' => 'comment.pages.inc',
   );
   $items['comment/reply/%node'] = array(
     'title' => 'Reply to comment',
@@ -215,7 +211,6 @@ function comment_menu() {
     'access callback' => 'node_access',
     'access arguments' => array('view', 2),
     'type' => MENU_CALLBACK,
-    'file' => 'comment.pages.inc',
   );
 
   return $items;
diff --git a/modules/contact/contact.info b/modules/contact/contact.info
index e88c4c08cabc7f620de63b0d8828c40d3c37e95f..2ddd526c4b75d426a6b2c53d7c856407e8367d61 100644
--- a/modules/contact/contact.info
+++ b/modules/contact/contact.info
@@ -4,3 +4,6 @@ description = Enables the use of both personal and site-wide contact forms.
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = contact.module
+files[] = contact.admin.inc
+files[] = contact.pages.inc
diff --git a/modules/contact/contact.module b/modules/contact/contact.module
index 867f77109dcca0b0f2f20b4f2f98ae608b4b0cb3..cd849cf0530a5a39b49b7fa8b0a1ee7a7cf3fe3d 100644
--- a/modules/contact/contact.module
+++ b/modules/contact/contact.module
@@ -51,13 +51,11 @@ function contact_menu() {
     'description' => 'Create a system contact form and set up categories for the form to use.',
     'page callback' => 'contact_admin_categories',
     'access arguments' => array('administer site-wide contact form'),
-    'file' => 'contact.admin.inc',
   );
   $items['admin/build/contact/list'] = array(
     'title' => 'List',
     'page callback' => 'contact_admin_categories',
     'type' => MENU_DEFAULT_LOCAL_TASK,
-    'file' => 'contact.admin.inc',
   );
   $items['admin/build/contact/add'] = array(
     'title' => 'Add category',
@@ -66,7 +64,6 @@ function contact_menu() {
     'access arguments' => array('administer site-wide contact form'),
     'type' => MENU_LOCAL_TASK,
     'weight' => 1,
-    'file' => 'contact.admin.inc',
   );
   $items['admin/build/contact/edit/%contact'] = array(
     'title' => 'Edit contact category',
@@ -74,7 +71,6 @@ function contact_menu() {
     'page arguments' => array('contact_admin_edit', 3, 4),
     'access arguments' => array('administer site-wide contact form'),
     'type' => MENU_CALLBACK,
-    'file' => 'contact.admin.inc',
   );
   $items['admin/build/contact/delete/%contact'] = array(
     'title' => 'Delete contact',
@@ -82,7 +78,6 @@ function contact_menu() {
     'page arguments' => array('contact_admin_delete', 4),
     'access arguments' => array('administer site-wide contact form'),
     'type' => MENU_CALLBACK,
-    'file' => 'contact.admin.inc',
   );
   $items['admin/build/contact/settings'] = array(
     'title' => 'Settings',
@@ -91,14 +86,12 @@ function contact_menu() {
     'access arguments' => array('administer site-wide contact form'),
     'type' => MENU_LOCAL_TASK,
     'weight' => 2,
-    'file' => 'contact.admin.inc',
   );
   $items['contact'] = array(
     'title' => 'Contact',
     'page callback' => 'contact_site_page',
     'access arguments' => array('access site-wide contact form'),
     'type' => MENU_SUGGESTED_ITEM,
-    'file' => 'contact.pages.inc',
   );
   $items['user/%user/contact'] = array(
     'title' => 'Contact',
@@ -108,7 +101,6 @@ function contact_menu() {
     'access callback' => '_contact_user_tab_access',
     'access arguments' => array(1),
     'weight' => 2,
-    'file' => 'contact.pages.inc',
   );
   return $items;
 }
diff --git a/modules/dblog/dblog.info b/modules/dblog/dblog.info
index 3ec37051f41c9766be5056844a36d15d902f3d6d..b00b387f43aa0534e71724247e4e6761baa0f9ab 100644
--- a/modules/dblog/dblog.info
+++ b/modules/dblog/dblog.info
@@ -4,3 +4,5 @@ description = Logs and records system events to the database.
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = dblog.module
+files[] = dblog.admin.inc
diff --git a/modules/dblog/dblog.module b/modules/dblog/dblog.module
index f5d74c4b4d044afba50ce0454a2dd0b2226aa574..7003a1b3c497e5581acee2648e4e86b30509cea3 100644
--- a/modules/dblog/dblog.module
+++ b/modules/dblog/dblog.module
@@ -48,16 +48,13 @@ function dblog_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('dblog_admin_settings'),
     'access arguments' => array('administer site configuration'),
-    'file' => 'dblog.admin.inc',
   );
-
   $items['admin/reports/dblog'] = array(
     'title' => 'Recent log entries',
     'description' => 'View events that have recently been logged.',
     'page callback' => 'dblog_overview',
     'access arguments' => array('access site reports'),
     'weight' => -1,
-    'file' => 'dblog.admin.inc',
   );
   $items['admin/reports/page-not-found'] = array(
     'title' => "Top 'page not found' errors",
@@ -65,7 +62,6 @@ function dblog_menu() {
     'page callback' => 'dblog_top',
     'page arguments' => array('page not found'),
     'access arguments' => array('access site reports'),
-    'file' => 'dblog.admin.inc',
   );
   $items['admin/reports/access-denied'] = array(
     'title' => "Top 'access denied' errors",
@@ -73,7 +69,6 @@ function dblog_menu() {
     'page callback' => 'dblog_top',
     'page arguments' => array('access denied'),
     'access arguments' => array('access site reports'),
-    'file' => 'dblog.admin.inc',
   );
   $items['admin/reports/event/%'] = array(
     'title' => 'Details',
@@ -81,7 +76,6 @@ function dblog_menu() {
     'page arguments' => array(3),
     'access arguments' => array('access site reports'),
     'type' => MENU_CALLBACK,
-    'file' => 'dblog.admin.inc',
   );
   return $items;
 }
diff --git a/modules/filter/filter.info b/modules/filter/filter.info
index 7f9059c029fe79ef02d67c440c925407879edae3..2c9a8a32bad01a4e92f0dd27b8f20d7fbb2680c6 100644
--- a/modules/filter/filter.info
+++ b/modules/filter/filter.info
@@ -4,3 +4,6 @@ description = Handles the filtering of content in preparation for display.
 package = Core - required
 version = VERSION
 core = 7.x
+files[] = filter.module
+files[] = filter.admin.inc
+files[] = filter.pages.inc
diff --git a/modules/filter/filter.module b/modules/filter/filter.module
index 737198d2f9a473f7d2f2b7d911654b32dba31cfa..edc6e29360a17a6aac7a5178ed8d562579bf48aa 100644
--- a/modules/filter/filter.module
+++ b/modules/filter/filter.module
@@ -73,7 +73,6 @@ function filter_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('filter_admin_overview'),
     'access arguments' => array('administer filters'),
-    'file' => 'filter.admin.inc',
   );
   $items['admin/settings/filters/list'] = array(
     'title' => 'List',
@@ -85,7 +84,6 @@ function filter_menu() {
     'access arguments' => array('administer filters'),
     'type' => MENU_LOCAL_TASK,
     'weight' => 1,
-    'file' => 'filter.admin.inc',
   );
   $items['admin/settings/filters/delete'] = array(
     'title' => 'Delete input format',
@@ -93,14 +91,12 @@ function filter_menu() {
     'page arguments' => array('filter_admin_delete'),
     'access arguments' => array('administer filters'),
     'type' => MENU_CALLBACK,
-    'file' => 'filter.admin.inc',
   );
   $items['filter/tips'] = array(
     'title' => 'Compose tips',
     'page callback' => 'filter_tips_long',
     'access callback' => TRUE,
     'type' => MENU_SUGGESTED_ITEM,
-    'file' => 'filter.pages.inc',
   );
   $items['admin/settings/filters/%filter_format'] = array(
     'type' => MENU_CALLBACK,
@@ -109,14 +105,11 @@ function filter_menu() {
     'page callback' => 'filter_admin_format_page',
     'page arguments' => array(3),
     'access arguments' => array('administer filters'),
-    'file' => 'filter.admin.inc',
   );
-
   $items['admin/settings/filters/%filter_format/edit'] = array(
     'title' => 'Edit',
     'type' => MENU_DEFAULT_LOCAL_TASK,
     'weight' => 0,
-    'file' => 'filter.admin.inc',
   );
   $items['admin/settings/filters/%filter_format/configure'] = array(
     'title' => 'Configure',
@@ -125,7 +118,6 @@ function filter_menu() {
     'access arguments' => array('administer filters'),
     'type' => MENU_LOCAL_TASK,
     'weight' => 1,
-    'file' => 'filter.admin.inc',
   );
   $items['admin/settings/filters/%filter_format/order'] = array(
     'title' => 'Rearrange',
@@ -134,7 +126,6 @@ function filter_menu() {
     'access arguments' => array('administer filters'),
     'type' => MENU_LOCAL_TASK,
     'weight' => 2,
-    'file' => 'filter.admin.inc',
   );
   return $items;
 }
diff --git a/modules/forum/forum.info b/modules/forum/forum.info
index 0d480c0f31191ee2b016c6250c21bc3638fb1ff6..3a642adbc96613d532d7dcc57e9e5ad292459fb3 100644
--- a/modules/forum/forum.info
+++ b/modules/forum/forum.info
@@ -6,3 +6,6 @@ dependencies[] = comment
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = forum.module
+files[] = forum.admin.inc
+files[] = forum.pages.inc
diff --git a/modules/forum/forum.module b/modules/forum/forum.module
index f2e391d6187d03f583bd44a4b46f4bd5ea927e5b..7903c65691be9db62d1b81da4efae867c3e6eb45 100644
--- a/modules/forum/forum.module
+++ b/modules/forum/forum.module
@@ -87,7 +87,6 @@ function forum_menu() {
     'page callback' => 'forum_page',
     'access arguments' => array('access content'),
     'type' => MENU_SUGGESTED_ITEM,
-    'file' => 'forum.pages.inc',
   );
   $items['admin/content/forum'] = array(
     'title' => 'Forums',
@@ -95,7 +94,6 @@ function forum_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('forum_overview'),
     'access arguments' => array('administer forums'),
-    'file' => 'forum.admin.inc',
   );
   $items['admin/content/forum/list'] = array(
     'title' => 'List',
@@ -109,7 +107,6 @@ function forum_menu() {
     'access arguments' => array('administer forums'),
     'type' => MENU_LOCAL_TASK,
     'parent' => 'admin/content/forum',
-    'file' => 'forum.admin.inc',
   );
   $items['admin/content/forum/add/forum'] = array(
     'title' => 'Add forum',
@@ -118,7 +115,6 @@ function forum_menu() {
     'access arguments' => array('administer forums'),
     'type' => MENU_LOCAL_TASK,
     'parent' => 'admin/content/forum',
-    'file' => 'forum.admin.inc',
   );
   $items['admin/content/forum/settings'] = array(
     'title' => 'Settings',
@@ -128,13 +124,11 @@ function forum_menu() {
     'weight' => 5,
     'type' => MENU_LOCAL_TASK,
     'parent' => 'admin/content/forum',
-    'file' => 'forum.admin.inc',
   );
   $items['admin/content/forum/edit/%forum_term'] = array(
     'page callback' => 'forum_form_main',
     'access arguments' => array('administer forums'),
     'type' => MENU_CALLBACK,
-    'file' => 'forum.admin.inc',
   );
   $items['admin/content/forum/edit/container/%forum_term'] = array(
     'title' => 'Edit container',
@@ -142,7 +136,6 @@ function forum_menu() {
     'page arguments' => array('container', 5),
     'access arguments' => array('administer forums'),
     'type' => MENU_CALLBACK,
-    'file' => 'forum.admin.inc',
   );
   $items['admin/content/forum/edit/forum/%forum_term'] = array(
     'title' => 'Edit forum',
@@ -150,7 +143,6 @@ function forum_menu() {
     'page arguments' => array('forum', 5),
     'access arguments' => array('administer forums'),
     'type' => MENU_CALLBACK,
-    'file' => 'forum.admin.inc',
   );
   return $items;
 }
diff --git a/modules/help/help.info b/modules/help/help.info
index 503f739575d546d606ac350161b745453b9eee9c..cdf601be6cf74a070e4d5b67cc4d087156f19f19 100644
--- a/modules/help/help.info
+++ b/modules/help/help.info
@@ -4,3 +4,5 @@ description = Manages the display of online help.
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = help.module
+files[] = help.admin.inc
diff --git a/modules/help/help.module b/modules/help/help.module
index ee972498d4de9c38082fe53952e62d2040d649bc..00a9b9a34eb39ac8a5d38c0c9868affe7424fc14 100644
--- a/modules/help/help.module
+++ b/modules/help/help.module
@@ -15,7 +15,6 @@ function help_menu() {
     'page callback' => 'help_main',
     'access arguments' => array('access administration pages'),
     'weight' => 9,
-    'file' => 'help.admin.inc',
   );
 
   foreach (module_implements('help', TRUE) as $module) {
@@ -25,7 +24,6 @@ function help_menu() {
       'page arguments' => array(2),
       'access arguments' => array('access administration pages'),
       'type' => MENU_CALLBACK,
-      'file' => 'help.admin.inc',
     );
   }
 
diff --git a/modules/locale/locale.info b/modules/locale/locale.info
index 9bd5fc8eb01cf6f498ac1447a161d00b8799d467..aeebbc2f0c7372ee106fae720633f215e56297ed 100644
--- a/modules/locale/locale.info
+++ b/modules/locale/locale.info
@@ -4,3 +4,4 @@ description = Adds language handling functionality and enables the translation o
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = locale.module
diff --git a/modules/menu/menu.info b/modules/menu/menu.info
index e3fa441a6c215e3fa701b08d1821d415531e49a7..30a771270106bb1503c00430bf93368fcc5c7b5b 100644
--- a/modules/menu/menu.info
+++ b/modules/menu/menu.info
@@ -4,3 +4,5 @@ description = Allows administrators to customize the site navigation menu.
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = menu.module
+files[] = menu.admin.inc
diff --git a/modules/menu/menu.module b/modules/menu/menu.module
index a9b1fd04368bbf6110070e8cb5280e5af6853118..060e3b948e49b7bbf452104146f331eb1325f012 100644
--- a/modules/menu/menu.module
+++ b/modules/menu/menu.module
@@ -52,14 +52,11 @@ function menu_menu() {
     'page callback' => 'menu_overview_page',
     'access callback' => 'user_access',
     'access arguments' => array('administer menu'),
-    'file' => 'menu.admin.inc',
   );
-
   $items['admin/build/menu/list'] = array(
     'title' => 'List menus',
     'type' => MENU_DEFAULT_LOCAL_TASK,
     'weight' => -10,
-    'file' => 'menu.admin.inc',
   );
   $items['admin/build/menu/add'] = array(
     'title' => 'Add menu',
@@ -67,7 +64,6 @@ function menu_menu() {
     'page arguments' => array('menu_edit_menu', 'add'),
     'access arguments' => array('administer menu'),
     'type' => MENU_LOCAL_TASK,
-    'file' => 'menu.admin.inc',
   );
   $items['admin/build/menu/settings'] = array(
     'title' => 'Settings',
@@ -76,7 +72,6 @@ function menu_menu() {
     'access arguments' => array('administer menu'),
     'type' => MENU_LOCAL_TASK,
     'weight' => 5,
-    'file' => 'menu.admin.inc',
   );
   $items['admin/build/menu-customize/%menu'] = array(
     'title' => 'Customize menu',
@@ -86,13 +81,11 @@ function menu_menu() {
     'title arguments' => array(3),
     'access arguments' => array('administer menu'),
     'type' => MENU_CALLBACK,
-    'file' => 'menu.admin.inc',
   );
   $items['admin/build/menu-customize/%menu/list'] = array(
     'title' => 'List items',
     'weight' => -10,
     'type' => MENU_DEFAULT_LOCAL_TASK,
-    'file' => 'menu.admin.inc',
   );
   $items['admin/build/menu-customize/%menu/add'] = array(
     'title' => 'Add item',
@@ -100,7 +93,6 @@ function menu_menu() {
     'page arguments' => array('menu_edit_item', 'add', NULL, 3),
     'access arguments' => array('administer menu'),
     'type' => MENU_LOCAL_TASK,
-    'file' => 'menu.admin.inc',
   );
   $items['admin/build/menu-customize/%menu/edit'] = array(
     'title' => 'Edit menu',
@@ -108,7 +100,6 @@ function menu_menu() {
     'page arguments' => array('menu_edit_menu', 'edit', 3),
     'access arguments' => array('administer menu'),
     'type' => MENU_LOCAL_TASK,
-    'file' => 'menu.admin.inc',
   );
   $items['admin/build/menu-customize/%menu/delete'] = array(
     'title' => 'Delete menu',
@@ -116,7 +107,6 @@ function menu_menu() {
     'page arguments' => array(3),
     'access arguments' => array('administer menu'),
     'type' => MENU_CALLBACK,
-    'file' => 'menu.admin.inc',
   );
   $items['admin/build/menu/item/%menu_link/edit'] = array(
     'title' => 'Edit menu item',
@@ -124,7 +114,6 @@ function menu_menu() {
     'page arguments' => array('menu_edit_item', 'edit', 4, NULL),
     'access arguments' => array('administer menu'),
     'type' => MENU_CALLBACK,
-    'file' => 'menu.admin.inc',
   );
   $items['admin/build/menu/item/%menu_link/reset'] = array(
     'title' => 'Reset menu item',
@@ -132,7 +121,6 @@ function menu_menu() {
     'page arguments' => array('menu_reset_item_confirm', 4),
     'access arguments' => array('administer menu'),
     'type' => MENU_CALLBACK,
-    'file' => 'menu.admin.inc',
   );
   $items['admin/build/menu/item/%menu_link/delete'] = array(
     'title' => 'Delete menu item',
@@ -140,9 +128,7 @@ function menu_menu() {
     'page arguments' => array(4),
     'access arguments' => array('administer menu'),
     'type' => MENU_CALLBACK,
-    'file' => 'menu.admin.inc',
   );
-
   return $items;
 }
 
diff --git a/modules/node/node.info b/modules/node/node.info
index ce8986be9785abbc1d915ee7aa472c40dcd31b4d..64eba84626ba5540bfd369bb15a03887cd9a2a06 100644
--- a/modules/node/node.info
+++ b/modules/node/node.info
@@ -4,3 +4,7 @@ description = Allows content to be submitted to the site and displayed on pages.
 package = Core - required
 version = VERSION
 core = 7.x
+files[] = node.module
+files[] = content_types.inc
+files[] = node.admin.inc
+files[] = node.pages.inc
diff --git a/modules/node/node.module b/modules/node/node.module
index ed82a31f851eb9449a594d9c4834f4c95201bbee..ede648a26a53dac25f6335c2616ced62b1bc4e54 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -626,7 +626,8 @@ function _node_type_set_defaults($info) {
 function node_hook(&$node, $hook) {
   $module = node_get_types('module', $node);
   if ($module == 'node') {
-    $module = 'node_content'; // Avoid function name collisions.
+    // Avoid function name collisions.
+    $module = 'node_content';
   }
   return module_hook($module, $hook);
 }
@@ -926,7 +927,9 @@ function node_save(&$node) {
     db_query('UPDATE {node} SET vid = %d WHERE nid = %d', $node->vid, $node->nid);
   }
 
-  // Call the node specific callback (if any).
+  // Call the node specific callback (if any). This can be
+  // node_invoke($node, 'insert') or
+  // node_invoke($node, 'update').
   node_invoke($node, $op);
   node_invoke_nodeapi($node, $op);
 
@@ -1416,7 +1419,6 @@ function node_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('node_admin_content'),
     'access arguments' => array('administer nodes'),
-    'file' => 'node.admin.inc',
   );
 
   $items['admin/content/node/overview'] = array(
@@ -1431,12 +1433,10 @@ function node_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('node_configure'),
     'access arguments' => array('administer nodes'),
-    'file' => 'node.admin.inc',
   );
   $items['admin/content/node-settings/rebuild'] = array(
     'title' => 'Rebuild permissions',
     'page arguments' => array('node_configure_rebuild_confirm'),
-    'file' => 'node.admin.inc',
     // Any user than can potentially trigger a node_acess_needs_rebuild(TRUE)
     // has to be allowed access to the 'node access rebuild' confirm form.
     'access arguments' => array('access administration pages'),
@@ -1448,7 +1448,6 @@ function node_menu() {
     'description' => 'Manage posts by content type, including default status, front page promotion, etc.',
     'page callback' => 'node_overview_types',
     'access arguments' => array('administer content types'),
-    'file' => 'content_types.inc',
   );
   $items['admin/build/types/list'] = array(
     'title' => 'List',
@@ -1460,7 +1459,6 @@ function node_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('node_type_form'),
     'access arguments' => array('administer content types'),
-    'file' => 'content_types.inc',
     'type' => MENU_LOCAL_TASK,
   );
   $items['node'] = array(
@@ -1474,7 +1472,6 @@ function node_menu() {
     'page callback' => 'node_add_page',
     'access callback' => '_node_add_access',
     'weight' => 1,
-    'file' => 'node.pages.inc',
   );
   $items['rss.xml'] = array(
     'title' => 'RSS feed',
@@ -1492,14 +1489,12 @@ function node_menu() {
       'access callback' => 'node_access',
       'access arguments' => array('create', $type->type),
       'description' => $type->description,
-      'file' => 'node.pages.inc',
     );
     $items['admin/content/node-type/' . $type_url_str] = array(
       'title' => $type->name,
       'page callback' => 'drupal_get_form',
       'page arguments' => array('node_type_form', $type),
       'access arguments' => array('administer content types'),
-      'file' => 'content_types.inc',
       'type' => MENU_CALLBACK,
     );
     $items['admin/content/node-type/' . $type_url_str . '/edit'] = array(
@@ -1510,7 +1505,6 @@ function node_menu() {
       'title' => 'Delete',
       'page arguments' => array('node_type_delete_confirm', $type),
       'access arguments' => array('administer content types'),
-      'file' => 'content_types.inc',
       'type' => MENU_CALLBACK,
     );
   }
@@ -1533,7 +1527,6 @@ function node_menu() {
     'access callback' => 'node_access',
     'access arguments' => array('update', 1),
     'weight' => 1,
-    'file' => 'node.pages.inc',
     'type' => MENU_LOCAL_TASK,
   );
   $items['node/%node/delete'] = array(
@@ -1542,7 +1535,6 @@ function node_menu() {
     'page arguments' => array('node_delete_confirm', 1),
     'access callback' => 'node_access',
     'access arguments' => array('delete', 1),
-    'file' => 'node.pages.inc',
     'weight' => 1,
     'type' => MENU_CALLBACK);
   $items['node/%node/revisions'] = array(
@@ -1552,7 +1544,6 @@ function node_menu() {
     'access callback' => '_node_revision_access',
     'access arguments' => array(1),
     'weight' => 2,
-    'file' => 'node.pages.inc',
     'type' => MENU_LOCAL_TASK,
   );
   $items['node/%node/revisions/%/view'] = array(
@@ -1571,7 +1562,6 @@ function node_menu() {
     'page arguments' => array('node_revision_revert_confirm', 1),
     'access callback' => '_node_revision_access',
     'access arguments' => array(1, 'update'),
-    'file' => 'node.pages.inc',
     'type' => MENU_CALLBACK,
   );
   $items['node/%node/revisions/%/delete'] = array(
@@ -1581,7 +1571,6 @@ function node_menu() {
     'page arguments' => array('node_revision_delete_confirm', 1),
     'access callback' => '_node_revision_access',
     'access arguments' => array(1, 'delete'),
-    'file' => 'node.pages.inc',
     'type' => MENU_CALLBACK,
   );
   return $items;
@@ -2025,8 +2014,8 @@ function node_access($op, $node, $account = NULL) {
     return FALSE;
   }
 
-  // Can't use node_invoke(), because the access hook takes the $op parameter
-  // before the $node parameter.
+  // Can't use node_invoke('access', $node), because the access hook takes the
+  // $op parameter before the $node parameter.
   $module = node_get_types('module', $node);
   if ($module == 'node') {
     $module = 'node_content'; // Avoid function name collisions.
diff --git a/modules/openid/openid.info b/modules/openid/openid.info
index f747ff9bdec90cccd5e9ae5a2a60e3aa8448f3a7..c55d44bfa3594b56736f467b446ac686c360b67c 100644
--- a/modules/openid/openid.info
+++ b/modules/openid/openid.info
@@ -4,3 +4,7 @@ description = "Allows users to log into your site using OpenID."
 version = VERSION
 package = Core - optional
 core = 7.x
+files[] = openid.module
+files[] = openid.inc
+files[] = openid.pages.inc
+files[] = xrds.inc
diff --git a/modules/openid/openid.module b/modules/openid/openid.module
index b3a515c99c4b908a6ca3d37ec7409205730ae8dc..8b49a0ac03325ec4ef4593790739084c4a41e15c 100644
--- a/modules/openid/openid.module
+++ b/modules/openid/openid.module
@@ -15,7 +15,6 @@ function openid_menu() {
     'page callback' => 'openid_authentication_page',
     'access callback' => 'user_is_anonymous',
     'type' => MENU_CALLBACK,
-    'file' => 'openid.pages.inc',
   );
   $items['user/%user/openid'] = array(
     'title' => 'OpenID identities',
@@ -24,7 +23,6 @@ function openid_menu() {
     'access callback' => 'user_edit_access',
     'access arguments' => array(1),
     'type' => MENU_LOCAL_TASK,
-    'file' => 'openid.pages.inc',
   );
   $items['user/%user/openid/delete'] = array(
     'title' => 'Delete OpenID',
@@ -33,7 +31,6 @@ function openid_menu() {
     'access callback' => 'user_edit_access',
     'access arguments' => array(1),
     'type' => MENU_CALLBACK,
-    'file' => 'openid.pages.inc',
   );
   return $items;
 }
diff --git a/modules/path/path.info b/modules/path/path.info
index ce0490943d92ad35e707e62e888b1188d7986928..10fa65748bcaea2808cbf243869354a881140931 100644
--- a/modules/path/path.info
+++ b/modules/path/path.info
@@ -4,3 +4,5 @@ description = Allows users to rename URLs.
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = path.module
+files[] = path.admin.inc
diff --git a/modules/path/path.module b/modules/path/path.module
index 49ea6c0008df00bae70c40e1e0cbcad69da17db6..36a975de0c90098114e04713b5a3d3bec1c73e91 100644
--- a/modules/path/path.module
+++ b/modules/path/path.module
@@ -38,14 +38,12 @@ function path_menu() {
     'description' => "Change your site's URL paths by aliasing them.",
     'page callback' => 'path_admin_overview',
     'access arguments' => array('administer url aliases'),
-    'file' => 'path.admin.inc',
   );
   $items['admin/build/path/edit'] = array(
     'title' => 'Edit alias',
     'page callback' => 'path_admin_edit',
     'access arguments' => array('administer url aliases'),
     'type' => MENU_CALLBACK,
-    'file' => 'path.admin.inc',
   );
   $items['admin/build/path/delete'] = array(
     'title' => 'Delete alias',
@@ -53,7 +51,6 @@ function path_menu() {
     'page arguments' => array('path_admin_delete_confirm'),
     'access arguments' => array('administer url aliases'),
     'type' => MENU_CALLBACK,
-    'file' => 'path.admin.inc',
   );
   $items['admin/build/path/list'] = array(
     'title' => 'List',
@@ -65,7 +62,6 @@ function path_menu() {
     'page callback' => 'path_admin_edit',
     'access arguments' => array('administer url aliases'),
     'type' => MENU_LOCAL_TASK,
-    'file' => 'path.admin.inc',
   );
 
   return $items;
diff --git a/modules/php/php.info b/modules/php/php.info
index 56f6b5ea5aa1d0232b25f54bef4a512a3edd34e6..c22d515dea42602ae373ce6357f6c0ca7b6d6acc 100644
--- a/modules/php/php.info
+++ b/modules/php/php.info
@@ -4,3 +4,4 @@ description = Allows embedded PHP code/snippets to be evaluated.
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = php.module
diff --git a/modules/poll/poll.info b/modules/poll/poll.info
index 2cface906fe2876a4abe14476c940e61fae78e6a..d3279f2e8b1561b3d0b608277b8ceed6ce4f1b7c 100644
--- a/modules/poll/poll.info
+++ b/modules/poll/poll.info
@@ -4,3 +4,5 @@ description = Allows your site to capture votes on different topics in the form
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = poll.module
+files[] = poll.pages.inc
diff --git a/modules/poll/poll.module b/modules/poll/poll.module
index c43fc61dd8833033ed67dcd6d3452a1b69141b4d..2a1ab86a23760739ede992134364695bf37560ea 100644
--- a/modules/poll/poll.module
+++ b/modules/poll/poll.module
@@ -87,7 +87,6 @@ function poll_menu() {
     'page callback' => 'poll_page',
     'access arguments' => array('access content'),
     'type' => MENU_SUGGESTED_ITEM,
-    'file' => 'poll.pages.inc',
   );
 
   $items['node/%node/votes'] = array(
@@ -98,7 +97,6 @@ function poll_menu() {
     'access arguments' => array(1, 'inspect all votes', FALSE),
     'weight' => 3,
     'type' => MENU_LOCAL_TASK,
-    'file' => 'poll.pages.inc',
   );
 
   $items['node/%node/results'] = array(
@@ -109,7 +107,6 @@ function poll_menu() {
     'access arguments' => array(1, 'access content', TRUE),
     'weight' => 3,
     'type' => MENU_LOCAL_TASK,
-    'file' => 'poll.pages.inc',
   );
 
   $items['poll/js'] = array(
diff --git a/modules/profile/profile.info b/modules/profile/profile.info
index cc2f86bcbdc794ef44210ffd8ff00d390b1a705b..d1eee555ae90044bbfaf6b202db7edc036c8ddf0 100644
--- a/modules/profile/profile.info
+++ b/modules/profile/profile.info
@@ -4,3 +4,6 @@ description = Supports configurable user profiles.
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = profile.module
+files[] = profile.admin.inc
+files[] = profile.pages.inc
diff --git a/modules/profile/profile.module b/modules/profile/profile.module
index e467791d118389fa31704d6abde71ec58eb09b89..ac81ab065f67d0f079b8415cb167cbf07a7690bf 100644
--- a/modules/profile/profile.module
+++ b/modules/profile/profile.module
@@ -81,7 +81,6 @@ function profile_menu() {
     'page callback' => 'profile_browse',
     'access arguments' => array('access user profiles'),
     'type' => MENU_SUGGESTED_ITEM,
-    'file' => 'profile.pages.inc',
   );
   $items['admin/user/profile'] = array(
     'title' => 'Profiles',
@@ -89,7 +88,6 @@ function profile_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('profile_admin_overview'),
     'access arguments' => array('administer users'),
-    'file' => 'profile.admin.inc',
   );
   $items['admin/user/profile/add'] = array(
     'title' => 'Add field',
@@ -97,14 +95,12 @@ function profile_menu() {
     'page arguments' => array('profile_field_form'),
     'access arguments' => array('administer users'),
     'type' => MENU_CALLBACK,
-    'file' => 'profile.admin.inc',
   );
   $items['admin/user/profile/autocomplete'] = array(
     'title' => 'Profile category autocomplete',
     'page callback' => 'profile_admin_settings_autocomplete',
     'access arguments' => array('administer users'),
     'type' => MENU_CALLBACK,
-    'file' => 'profile.admin.inc',
   );
   $items['admin/user/profile/edit'] = array(
     'title' => 'Edit field',
@@ -112,7 +108,6 @@ function profile_menu() {
     'page arguments' => array('profile_field_form'),
     'access arguments' => array('administer users'),
     'type' => MENU_CALLBACK,
-    'file' => 'profile.admin.inc',
   );
   $items['admin/user/profile/delete'] = array(
     'title' => 'Delete field',
@@ -120,14 +115,12 @@ function profile_menu() {
     'page arguments' => array('profile_field_delete'),
     'access arguments' => array('administer users'),
     'type' => MENU_CALLBACK,
-    'file' => 'profile.admin.inc',
   );
   $items['profile/autocomplete'] = array(
     'title' => 'Profile autocomplete',
     'page callback' => 'profile_autocomplete',
     'access arguments' => array('access user profiles'),
     'type' => MENU_CALLBACK,
-    'file' => 'profile.pages.inc',
   );
   return $items;
 }
diff --git a/modules/search/search.info b/modules/search/search.info
index 6d6590cd24386b621404b62d4adccd919f1e911b..72ea93a24a3389896c11217b9a5a533dd48c5d10 100644
--- a/modules/search/search.info
+++ b/modules/search/search.info
@@ -4,3 +4,6 @@ description = Enables site-wide keyword searching.
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = search.module
+files[] = search.admin.inc
+files[] = search.pages.inc
diff --git a/modules/search/search.module b/modules/search/search.module
index f344782608cc3f76bd4296f6e7025b1c3b061cce..fe2e3279311611e7b9b64b47b9ad4c63c4ee2847 100644
--- a/modules/search/search.module
+++ b/modules/search/search.module
@@ -174,7 +174,6 @@ function search_menu() {
     'page callback' => 'search_view',
     'access arguments' => array('search content'),
     'type' => MENU_SUGGESTED_ITEM,
-    'file' => 'search.pages.inc',
   );
   $items['admin/settings/search'] = array(
     'title' => 'Search settings',
@@ -183,7 +182,6 @@ function search_menu() {
     'page arguments' => array('search_admin_settings'),
     'access arguments' => array('administer search'),
     'type' => MENU_NORMAL_ITEM,
-    'file' => 'search.admin.inc',
   );
   $items['admin/settings/search/wipe'] = array(
     'title' => 'Clear index',
@@ -191,7 +189,6 @@ function search_menu() {
     'page arguments' => array('search_wipe_confirm'),
     'access arguments' => array('administer search'),
     'type' => MENU_CALLBACK,
-    'file' => 'search.admin.inc',
   );
   $items['admin/reports/search'] = array(
     'title' => 'Top search phrases',
@@ -199,7 +196,6 @@ function search_menu() {
     'page callback' => 'dblog_top',
     'page arguments' => array('search'),
     'access arguments' => array('access site reports'),
-    'file' => 'dblog.admin.inc',
     'file path' => drupal_get_path('module', 'dblog'),
   );
 
@@ -213,7 +209,6 @@ function search_menu() {
       'access arguments' => array($name),
       'type' => MENU_LOCAL_TASK,
       'parent' => 'search',
-      'file' => 'search.pages.inc',
     );
   }
   return $items;
diff --git a/modules/simpletest/simpletest.info b/modules/simpletest/simpletest.info
index 9a162e7148a4ccddd5f4b9485fd0f851d97965f5..87db584431419ae1f1314d5cfcd7c5ccf21f6c49 100644
--- a/modules/simpletest/simpletest.info
+++ b/modules/simpletest/simpletest.info
@@ -4,3 +4,4 @@ description = "Provides a framework for unit and functional testing."
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = simpletest.module
diff --git a/modules/statistics/statistics.info b/modules/statistics/statistics.info
index 031e3b6a00c3cf4a70f3460cde8a574a606adbeb..71052696a411b6fb58dafd46d0d312486170cbf4 100644
--- a/modules/statistics/statistics.info
+++ b/modules/statistics/statistics.info
@@ -4,3 +4,6 @@ description = Logs access statistics for your site.
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = statistics.module
+files[] = statistics.admin.inc
+files[] = statistics.pages.inc
diff --git a/modules/statistics/statistics.module b/modules/statistics/statistics.module
index fcf99076599d0da0ea988f6abb33fc909528da59..68de78e11bde399aa1c01eac2336bec07242d880 100644
--- a/modules/statistics/statistics.module
+++ b/modules/statistics/statistics.module
@@ -101,7 +101,6 @@ function statistics_menu() {
     'description' => 'View pages that have recently been visited.',
     'page callback' => 'statistics_recent_hits',
     'access arguments' => array('access statistics'),
-    'file' => 'statistics.admin.inc',
   );
   $items['admin/reports/pages'] = array(
     'title' => 'Top pages',
@@ -109,7 +108,6 @@ function statistics_menu() {
     'page callback' => 'statistics_top_pages',
     'access arguments' => array('access statistics'),
     'weight' => 1,
-    'file' => 'statistics.admin.inc',
   );
   $items['admin/reports/visitors'] = array(
     'title' => 'Top visitors',
@@ -117,14 +115,12 @@ function statistics_menu() {
     'page callback' => 'statistics_top_visitors',
     'access arguments' => array('access statistics'),
     'weight' => 2,
-    'file' => 'statistics.admin.inc',
   );
   $items['admin/reports/referrers'] = array(
     'title' => 'Top referrers',
     'description' => 'View top referrers.',
     'page callback' => 'statistics_top_referrers',
     'access arguments' => array('access statistics'),
-    'file' => 'statistics.admin.inc',
   );
   $items['admin/reports/access/%'] = array(
     'title' => 'Details',
@@ -133,7 +129,6 @@ function statistics_menu() {
     'page arguments' => array(3),
     'access arguments' => array('access statistics'),
     'type' => MENU_CALLBACK,
-    'file' => 'statistics.admin.inc',
   );
   $items['admin/reports/settings'] = array(
     'title' => 'Access log settings',
@@ -143,7 +138,6 @@ function statistics_menu() {
     'access arguments' => array('administer site configuration'),
     'type' => MENU_NORMAL_ITEM,
     'weight' => 3,
-    'file' => 'statistics.admin.inc',
   );
   $items['user/%user/track/navigation'] = array(
     'title' => 'Track page visits',
@@ -152,7 +146,6 @@ function statistics_menu() {
     'access arguments' => array('access statistics'),
     'type' => MENU_LOCAL_TASK,
     'weight' => 2,
-    'file' => 'statistics.pages.inc',
   );
   $items['node/%node/track'] = array(
     'title' => 'Track',
@@ -161,7 +154,6 @@ function statistics_menu() {
     'access arguments' => array('access statistics'),
     'type' => MENU_LOCAL_TASK,
     'weight' => 2,
-    'file' => 'statistics.pages.inc',
   );
 
   return $items;
diff --git a/modules/syslog/syslog.info b/modules/syslog/syslog.info
index 8b22a77f4027b1fc566498744c5ace4a6419a18b..2e02aaf20e744309c373f402fd461ddbc57f24e8 100644
--- a/modules/syslog/syslog.info
+++ b/modules/syslog/syslog.info
@@ -4,3 +4,4 @@ description = Logs and records system events to syslog.
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = syslog.module
diff --git a/modules/system/system.info b/modules/system/system.info
index b4daf5205809f3fc95ab16aae0a6a62ea28d81ae..649436908548d14afb65e78ad19cf2c61cf23216 100644
--- a/modules/system/system.info
+++ b/modules/system/system.info
@@ -4,3 +4,5 @@ description = Handles general site configuration for administrators.
 package = Core - required
 version = VERSION
 core = 7.x
+files[] = system.module
+files[] = system.admin.inc
diff --git a/modules/system/system.install b/modules/system/system.install
index d09eabb480560f96756e77f09beed33ee07e3677..9207e6e2d8e6972e58787f4ca0d5ee332c869e23 100644
--- a/modules/system/system.install
+++ b/modules/system/system.install
@@ -603,6 +603,8 @@ function system_schema() {
   $schema['cache_page']['description'] = t('Cache table used to store compressed pages for anonymous users, if page caching is enabled.');
   $schema['cache_menu'] = $schema['cache'];
   $schema['cache_menu']['description'] = t('Cache table for the menu system to store router information as well as generated link trees for various menu/page/user combinations.');
+  $schema['cache_registry'] = $schema['cache'];
+  $schema['cache_registry']['description'] = t('Cache table for the code registry system to remember what code files need to be loaded on any given page.');
 
   $schema['files'] = array(
     'description' => t('Stores information for uploaded files.'),
@@ -859,11 +861,6 @@ function system_schema() {
         'not null' => TRUE,
         'default' => 0,
       ),
-      'file' => array(
-        'description' => t('The file to include for this element, usually the page callback function lives in this file.'),
-        'type' => 'text',
-        'size' => 'medium',
-      ),
     ),
     'indexes' => array(
       'fit' => array('fit'),
@@ -1056,6 +1053,52 @@ function system_schema() {
     'primary key' => array('mlid'),
   );
 
+  $schema['registry'] = array(
+    'description' => t("Each record is a function, class, or interface name and the file it is in."),
+    'fields' => array(
+      'name'   => array(
+        'description' => t('The name of the function, class, or interface.'),
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+        'default' => '',
+      ),
+      'type'   => array(
+        'description' => t('Either function or class or interface.'),
+        'type' => 'varchar',
+        'length' => 9,
+        'not null' => TRUE,
+        'default' => '',
+      ),
+      'filename'   => array(
+        'description' => t('Name of the file.'),
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+      ),
+    ),
+    'primary key' => array('name', 'type'),
+  );
+
+  $schema['registry_file'] = array(
+    'description' => t("Files parsed to build the registry."),
+    'fields' => array(
+      'filename'   => array(
+        'description' => t('Path to the file.'),
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+      ),
+      'md5'  => array(
+        'description' => t("Md5 hash of the file's contents when last parsed."),
+        'type' => 'varchar',
+        'length' => 32,
+        'not null' => TRUE,
+      ),
+    ),
+    'primary key' => array('filename'),
+  );
+
   $schema['sessions'] = array(
     'description' => t("Drupal's session handlers read and write into the sessions table. Each record represents a user session, either anonymous or authenticated."),
     'fields' => array(
@@ -2682,7 +2725,7 @@ function system_update_7000() {
 }
 
 /**
- * Generate a cron key and save it in the variables table
+ * Generate a cron key and save it in the variables table.
  */
 function system_update_7001() {
   $ret = array();
@@ -2860,9 +2903,49 @@ function system_update_7005() {
   return $ret;
 }
 
+/**
+ * Registry tables and drop the file key of the menu router, since it is no
+ * longer needed.
+ */
+function system_update_7006() {
+  $ret = array();
+  db_drop_field($ret, 'menu_router', 'file');
+  $schema['registry'] = array(
+    'fields' => array(
+      'name'   => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
+      'type'   => array('type' => 'varchar', 'length' => 9, 'not null' => TRUE, 'default' => ''),
+      'filename'   => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
+    ),
+    'primary key' => array('name', 'type'),
+  );
+  $schema['registry_file'] = array(
+    'fields' => array(
+      'filename'   => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
+      'md5'   => array('type' => 'varchar', 'length' => 32, 'not null' => TRUE, 'default' => ''),
+    ),
+    'primary key' => array('filename'),
+  );
+  $schema['cache_registry'] = array(
+    'fields' => array(
+      'cid'        => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
+      'data'       => array('type' => 'blob', 'not null' => FALSE, 'size' => 'big'),
+      'expire'     => array('type' => 'int', 'not null' => TRUE, 'default' => 0),
+      'created'    => array('type' => 'int', 'not null' => TRUE, 'default' => 0),
+      'headers'    => array('type' => 'text', 'not null' => FALSE),
+      'serialized' => array('type' => 'int', 'size' => 'small', 'not null' => TRUE, 'default' => 0)
+    ),
+    'indexes' => array('expire' => array('expire')),
+    'primary key' => array('cid'),
+  );
+  db_create_table($ret, 'cache_registry', $schema['cache_registry']);
+  db_create_table($ret, 'registry', $schema['registry']);
+  db_create_table($ret, 'registry_file', $schema['registry_file']);
+  drupal_rebuild_code_registry();
+  return $ret;
+}
+
 /**
  * @} End of "defgroup updates-6.x-to-7.x"
  * The next series of updates should start at 8000.
  */
 
-
diff --git a/modules/system/system.module b/modules/system/system.module
index e8e9d0e144f7cf0531d7f36968b1cc14dc163d50..2cc438463fe846f87618c72b995449fcd1e43594 100644
--- a/modules/system/system.module
+++ b/modules/system/system.module
@@ -331,27 +331,23 @@ function system_menu() {
     'access arguments' => array('access administration pages'),
     'page callback' => 'system_main_admin_page',
     'weight' => 9,
-    'file' => 'system.admin.inc',
   );
   $items['admin/compact'] = array(
     'title' => 'Compact mode',
     'page callback' => 'system_admin_compact_page',
     'access arguments' => array('access administration pages'),
     'type' => MENU_CALLBACK,
-    'file' => 'system.admin.inc',
   );
   $items['admin/by-task'] = array(
     'title' => 'By task',
     'page callback' => 'system_main_admin_page',
     'access arguments' => array('access administration pages'),
-    'file' => 'system.admin.inc',
     'type' => MENU_DEFAULT_LOCAL_TASK,
   );
   $items['admin/by-module'] = array(
     'title' => 'By module',
     'page callback' => 'system_admin_by_module',
     'access arguments' => array('access administration pages'),
-    'file' => 'system.admin.inc',
     'type' => MENU_LOCAL_TASK,
     'weight' => 2,
   );
@@ -362,7 +358,6 @@ function system_menu() {
     'weight' => -10,
     'page callback' => 'system_admin_menu_block_page',
     'access arguments' => array('access administration pages'),
-    'file' => 'system.admin.inc',
   );
 
   // menu items that are basically just menu blocks
@@ -373,7 +368,6 @@ function system_menu() {
     'weight' => -5,
     'page callback' => 'system_settings_overview',
     'access arguments' => array('access administration pages'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/build'] = array(
     'title' => 'Site building',
@@ -382,7 +376,6 @@ function system_menu() {
     'weight' => -10,
     'page callback' => 'system_admin_menu_block_page',
     'access arguments' => array('access administration pages'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/settings/admin'] = array(
     'title' => 'Administration theme',
@@ -392,7 +385,6 @@ function system_menu() {
     'page arguments' => array('system_admin_theme_settings'),
     'access arguments' => array('administer site configuration'),
     'block callback' => 'system_admin_theme_settings',
-    'file' => 'system.admin.inc',
   );
   // Themes:
   $items['admin/build/themes'] = array(
@@ -401,7 +393,6 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_themes_form', NULL),
     'access arguments' => array('administer site configuration'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/build/themes/select'] = array(
     'title' => 'List',
@@ -439,7 +430,6 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_modules'),
     'access arguments' => array('administer site configuration'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/build/modules/list'] = array(
     'title' => 'List',
@@ -504,7 +494,6 @@ function system_menu() {
     'description' => 'Manage blocked IP addresses.',
     'page callback' => 'system_ip_blocking',
     'access arguments' => array('block IP addresses'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/settings/ip-blocking/delete/%blocked_ip'] = array(
     'title' => 'Delete IP address',
@@ -512,7 +501,6 @@ function system_menu() {
     'page arguments' => array('system_ip_blocking_delete', 4),
     'access arguments' => array('block IP addresses'),
     'type' => MENU_CALLBACK,
-    'file' => 'system.admin.inc',
   );
 
   // Settings:
@@ -522,7 +510,6 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_site_information_settings'),
     'access arguments' => array('administer site configuration'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/settings/error-reporting'] = array(
     'title' => 'Error reporting',
@@ -530,14 +517,12 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_error_reporting_settings'),
     'access arguments' => array('administer site configuration'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/settings/logging'] = array(
     'title' => 'Logging and alerts',
     'description' => "Settings for logging and alerts modules. Various modules can route Drupal's system events to different destination, such as syslog, database, email, ...etc.",
     'page callback' => 'system_logging_overview',
     'access arguments' => array('administer site configuration'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/settings/performance'] = array(
     'title' => 'Performance',
@@ -545,7 +530,6 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_performance_settings'),
     'access arguments' => array('administer site configuration'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/settings/file-system'] = array(
     'title' => 'File system',
@@ -553,7 +537,6 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_file_system_settings'),
     'access arguments' => array('administer site configuration'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/settings/image-toolkit'] = array(
     'title' => 'Image toolkit',
@@ -561,7 +544,6 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_image_toolkit_settings'),
     'access arguments' => array('administer site configuration'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/content/rss-publishing'] = array(
     'title' => 'RSS publishing',
@@ -569,7 +551,6 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_rss_feeds_settings'),
     'access arguments' => array('administer site configuration'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/settings/date-time'] = array(
     'title' => 'Date and time',
@@ -577,14 +558,12 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_date_time_settings'),
     'access arguments' => array('administer site configuration'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/settings/date-time/lookup'] = array(
     'title' => 'Date and time lookup',
     'type' => MENU_CALLBACK,
     'page callback' => 'system_date_time_lookup',
     'access arguments' => array('administer site configuration'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/settings/site-maintenance'] = array(
     'title' => 'Site maintenance',
@@ -592,7 +571,6 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_site_maintenance_settings'),
     'access arguments' => array('administer site configuration'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/settings/clean-urls'] = array(
     'title' => 'Clean URLs',
@@ -600,7 +578,6 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_clean_url_settings'),
     'access arguments' => array('administer site configuration'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/settings/clean-urls/check'] = array(
     'title' => 'Clean URL check',
@@ -627,7 +604,6 @@ function system_menu() {
     'access arguments' => array('access site reports'),
     'weight' => 5,
     'position' => 'left',
-    'file' => 'system.admin.inc',
   );
   $items['admin/reports/status'] = array(
     'title' => 'Status report',
@@ -635,35 +611,30 @@ function system_menu() {
     'page callback' => 'system_status',
     'weight' => 10,
     'access arguments' => array('administer site configuration'),
-    'file' => 'system.admin.inc',
   );
   $items['admin/reports/status/run-cron'] = array(
     'title' => 'Run cron',
     'page callback' => 'system_run_cron',
     'access arguments' => array('administer site configuration'),
     'type' => MENU_CALLBACK,
-    'file' => 'system.admin.inc',
   );
   $items['admin/reports/status/php'] = array(
     'title' => 'PHP',
     'page callback' => 'system_php',
     'access arguments' => array('administer site configuration'),
     'type' => MENU_CALLBACK,
-    'file' => 'system.admin.inc',
   );
   $items['admin/reports/status/sql'] = array(
     'title' => 'SQL',
     'page callback' => 'system_sql',
     'access arguments' => array('administer site configuration'),
     'type' => MENU_CALLBACK,
-    'file' => 'system.admin.inc',
   );
   // Default page for batch operations
   $items['batch'] = array(
     'page callback' => 'system_batch_page',
     'access callback' => TRUE,
     'type' => MENU_CALLBACK,
-    'file' => 'system.admin.inc',
   );
   return $items;
 }
diff --git a/modules/taxonomy/taxonomy.info b/modules/taxonomy/taxonomy.info
index c7a93e3509cb97f094baee53ebfd1e8b8211ebf8..df213cefb4852cfe170dbf50c1aab3fb76d24c88 100644
--- a/modules/taxonomy/taxonomy.info
+++ b/modules/taxonomy/taxonomy.info
@@ -4,3 +4,6 @@ description = Enables the categorization of content.
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = taxonomy.module
+files[] = taxonomy.admin.inc
+files[] = taxonomy.pages.inc
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module
index 77b90f883ab8237ecacfedda09d0980d30e9e47e..56f15b1191cc8bd58c4bad9a05f4e1904cbdd5d8 100644
--- a/modules/taxonomy/taxonomy.module
+++ b/modules/taxonomy/taxonomy.module
@@ -117,7 +117,6 @@ function taxonomy_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('taxonomy_overview_vocabularies'),
     'access arguments' => array('administer taxonomy'),
-    'file' => 'taxonomy.admin.inc',
   );
 
   $items['admin/content/taxonomy/list'] = array(
@@ -133,7 +132,6 @@ function taxonomy_menu() {
     'access arguments' => array('administer taxonomy'),
     'type' => MENU_LOCAL_TASK,
     'parent' => 'admin/content/taxonomy',
-    'file' => 'taxonomy.admin.inc',
   );
 
   $items['admin/content/taxonomy/edit/vocabulary/%taxonomy_vocabulary'] = array(
@@ -142,7 +140,6 @@ function taxonomy_menu() {
     'page arguments' => array(5),
     'access arguments' => array('administer taxonomy'),
     'type' => MENU_CALLBACK,
-    'file' => 'taxonomy.admin.inc',
   );
 
   $items['admin/content/taxonomy/edit/term'] = array(
@@ -150,7 +147,6 @@ function taxonomy_menu() {
     'page callback' => 'taxonomy_admin_term_edit',
     'access arguments' => array('administer taxonomy'),
     'type' => MENU_CALLBACK,
-    'file' => 'taxonomy.admin.inc',
   );
 
   $items['taxonomy/term/%'] = array(
@@ -159,7 +155,6 @@ function taxonomy_menu() {
     'page arguments' => array(2),
     'access arguments' => array('access content'),
     'type' => MENU_CALLBACK,
-    'file' => 'taxonomy.pages.inc',
   );
 
   $items['taxonomy/autocomplete'] = array(
@@ -167,7 +162,6 @@ function taxonomy_menu() {
     'page callback' => 'taxonomy_autocomplete',
     'access arguments' => array('access content'),
     'type' => MENU_CALLBACK,
-    'file' => 'taxonomy.pages.inc',
   );
   $items['admin/content/taxonomy/%taxonomy_vocabulary'] = array(
     'title' => 'List terms',
@@ -175,7 +169,6 @@ function taxonomy_menu() {
     'page arguments' => array('taxonomy_overview_terms', 3),
     'access arguments' => array('administer taxonomy'),
     'type' => MENU_CALLBACK,
-    'file' => 'taxonomy.admin.inc',
   );
 
   $items['admin/content/taxonomy/%taxonomy_vocabulary/list'] = array(
@@ -191,7 +184,6 @@ function taxonomy_menu() {
     'access arguments' => array('administer taxonomy'),
     'type' => MENU_LOCAL_TASK,
     'parent' => 'admin/content/taxonomy/%taxonomy_vocabulary',
-    'file' => 'taxonomy.admin.inc',
   );
 
   return $items;
diff --git a/modules/tracker/tracker.info b/modules/tracker/tracker.info
index 37c1be304ddf67674265c53b2837b5a0054d43da..18fc939a2756e0d8b29bb33c9504612d1d9dda37 100644
--- a/modules/tracker/tracker.info
+++ b/modules/tracker/tracker.info
@@ -5,3 +5,5 @@ dependencies[] = comment
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = tracker.module
+files[] = tracker.pages.inc
diff --git a/modules/tracker/tracker.module b/modules/tracker/tracker.module
index e11d8a9830c6dfcb01f9357c1d1917436e1a8b8a..0044bd480174468418688a5b482af361a9fae616 100644
--- a/modules/tracker/tracker.module
+++ b/modules/tracker/tracker.module
@@ -28,7 +28,6 @@ function tracker_menu() {
     'page callback' => 'tracker_page',
     'access arguments' => array('access content'),
     'weight' => 1,
-    'file' => 'tracker.pages.inc',
   );
   $items['tracker/all'] = array(
     'title' => 'All recent posts',
@@ -49,7 +48,6 @@ function tracker_menu() {
     'access callback' => '_tracker_user_access',
     'access arguments' => array(1),
     'type' => MENU_LOCAL_TASK,
-    'file' => 'tracker.pages.inc',
   );
   $items['user/%user/track/posts'] = array(
     'title' => 'Track posts',
diff --git a/modules/translation/translation.info b/modules/translation/translation.info
index 87ccf945a87be4647e3f6c456b1a810ae4534665..dd5d0f4f468a604950670736c4dd37d7202ee9bb 100644
--- a/modules/translation/translation.info
+++ b/modules/translation/translation.info
@@ -5,3 +5,5 @@ dependencies[] = locale
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = translation.module
+files[] = translation.pages.inc
diff --git a/modules/translation/translation.module b/modules/translation/translation.module
index 9467440184eb544a082b7cc9761a0d180a07ecfe..79a542ac85f0551b1e686d7dfce4b5e80981ba9a 100644
--- a/modules/translation/translation.module
+++ b/modules/translation/translation.module
@@ -63,7 +63,6 @@ function translation_menu() {
     'access arguments' => array(1),
     'type' => MENU_LOCAL_TASK,
     'weight' => 2,
-    'file' => 'translation.pages.inc',
   );
   return $items;
 }
diff --git a/modules/trigger/trigger.info b/modules/trigger/trigger.info
index bc333940be183a18452c6eb5676db7c79b29e1c5..69566095f4db9db8bccb4a153fc887f6250788d0 100644
--- a/modules/trigger/trigger.info
+++ b/modules/trigger/trigger.info
@@ -4,3 +4,5 @@ description = Enables actions to be fired on certain system events, such as when
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = trigger.module
+files[] = trigger.admin.inc
diff --git a/modules/trigger/trigger.module b/modules/trigger/trigger.module
index 9be132ca5712dfc58092f3c842bcf421ab128972..d3d900fadda5d3f0390e587fa68b96fc073b75eb 100644
--- a/modules/trigger/trigger.module
+++ b/modules/trigger/trigger.module
@@ -41,7 +41,6 @@ function trigger_menu() {
     'page callback' => 'trigger_assign',
     'access callback' => 'trigger_access_check',
     'access arguments' => array('node'),
-    'file' => 'trigger.admin.inc',
   );
   // We don't use a menu wildcard here because these are tabs,
   // not invisible items.
@@ -52,7 +51,6 @@ function trigger_menu() {
     'access callback' => 'trigger_access_check',
     'access arguments' => array('node'),
     'type' => MENU_LOCAL_TASK,
-    'file' => 'trigger.admin.inc',
   );
   $items['admin/build/trigger/user'] = array(
     'title' => 'Users',
@@ -61,7 +59,6 @@ function trigger_menu() {
     'access callback' => 'trigger_access_check',
     'access arguments' => array('user'),
     'type' => MENU_LOCAL_TASK,
-    'file' => 'trigger.admin.inc',
   );
   $items['admin/build/trigger/comment'] = array(
     'title' => 'Comments',
@@ -70,7 +67,6 @@ function trigger_menu() {
     'access callback' => 'trigger_access_check',
     'access arguments' => array('comment'),
     'type' => MENU_LOCAL_TASK,
-    'file' => 'trigger.admin.inc',
   );
   $items['admin/build/trigger/taxonomy'] = array(
     'title' => 'Taxonomy',
@@ -79,7 +75,6 @@ function trigger_menu() {
     'access callback' => 'trigger_access_check',
     'access arguments' => array('taxonomy'),
     'type' => MENU_LOCAL_TASK,
-    'file' => 'trigger.admin.inc',
   );
   $items['admin/build/trigger/cron'] = array(
     'title' => 'Cron',
@@ -87,7 +82,6 @@ function trigger_menu() {
     'page arguments' => array('cron'),
     'access arguments' => array('administer actions'),
     'type' => MENU_LOCAL_TASK,
-    'file' => 'trigger.admin.inc',
   );
 
   // We want contributed modules to be able to describe
@@ -107,7 +101,6 @@ function trigger_menu() {
       'page arguments' => array($module),
       'access arguments' => array($module),
       'type' => MENU_LOCAL_TASK,
-      'file' => 'trigger.admin.inc',
     );
   }
   $items['admin/build/trigger/unassign'] = array(
@@ -117,7 +110,6 @@ function trigger_menu() {
     'page arguments' => array('trigger_unassign'),
     'access arguments' => array('administer actions'),
     'type' => MENU_CALLBACK,
-    'file' => 'trigger.admin.inc',
   );
 
   return $items;
diff --git a/modules/update/update.info b/modules/update/update.info
index 1df3eda4c6e30740e03092e3299b5666703d5145..0165525473fef2d9242f73b3a4af3455d150b652 100644
--- a/modules/update/update.info
+++ b/modules/update/update.info
@@ -4,3 +4,8 @@ description = Checks the status of available updates for Drupal and your install
 version = VERSION
 package = Core - optional
 core = 7.x
+files[] = update.module
+files[] = update.compare.inc
+files[] = update.fetch.inc
+files[] = update.report.inc
+files[] = update.settings.inc
diff --git a/modules/update/update.module b/modules/update/update.module
index 92a8ca586f754366cd73e0c7efab738ff1bbadbd..d3e60ce69e652ebe2ac5cdded3eff787ed510154 100644
--- a/modules/update/update.module
+++ b/modules/update/update.module
@@ -121,14 +121,12 @@ function update_menu() {
     'description' => 'Get a status report about available updates for your installed modules and themes.',
     'page callback' => 'update_status',
     'access arguments' => array('administer site configuration'),
-    'file' => 'update.report.inc',
     'weight' => 10,
   );
   $items['admin/reports/updates/list'] = array(
     'title' => 'List',
     'page callback' => 'update_status',
     'access arguments' => array('administer site configuration'),
-    'file' => 'update.report.inc',
     'type' => MENU_DEFAULT_LOCAL_TASK,
   );
   $items['admin/reports/updates/settings'] = array(
@@ -136,14 +134,12 @@ function update_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('update_settings'),
     'access arguments' => array('administer site configuration'),
-    'file' => 'update.settings.inc',
     'type' => MENU_LOCAL_TASK,
   );
   $items['admin/reports/updates/check'] = array(
     'title' => 'Manual update check',
     'page callback' => 'update_manual_status',
     'access arguments' => array('administer site configuration'),
-    'file' => 'update.fetch.inc',
     'type' => MENU_CALLBACK,
   );
 
diff --git a/modules/upload/upload.info b/modules/upload/upload.info
index 2b2a948263cbca9bfcf61473b912d60c79a89f48..aaae110d4606d9e73fe5616d86fec0a631b67533 100644
--- a/modules/upload/upload.info
+++ b/modules/upload/upload.info
@@ -4,3 +4,5 @@ description = Allows users to upload and attach files to content.
 package = Core - optional
 version = VERSION
 core = 7.x
+files[] = upload.module
+files[] = upload.admin.inc
diff --git a/modules/upload/upload.module b/modules/upload/upload.module
index d300a13d327f09eb2d51aab6750af1e4f8f338e8..431d5bf0096574186af73023d5399f5e46ce3efa 100644
--- a/modules/upload/upload.module
+++ b/modules/upload/upload.module
@@ -92,7 +92,6 @@ function upload_menu() {
     'page arguments' => array('upload_admin_settings'),
     'access arguments' => array('administer site configuration'),
     'type' => MENU_NORMAL_ITEM,
-    'file' => 'upload.admin.inc',
   );
   return $items;
 }
diff --git a/modules/user/user.info b/modules/user/user.info
index fb382ebe6ef179571711a67f211634efb4179abd..c7ac1b73705ac084429a29d6519b52c630a57dde 100644
--- a/modules/user/user.info
+++ b/modules/user/user.info
@@ -4,3 +4,6 @@ description = Manages the user registration and login system.
 package = Core - required
 version = VERSION
 core = 7.x
+files[] = user.module
+files[] = user.admin.inc
+files[] = user.pages.inc
diff --git a/modules/user/user.module b/modules/user/user.module
index 2b1414c5921cc05c1bc1c4425c329622780f3467..3fa75e296bf1f2a15019ca52275b8f2d5b6e4a26 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -852,7 +852,6 @@ function user_menu() {
     'access callback' => 'user_access',
     'access arguments' => array('access user profiles'),
     'type' => MENU_CALLBACK,
-    'file' => 'user.pages.inc',
   );
 
   // Registration and login pages.
@@ -861,7 +860,6 @@ function user_menu() {
     'page callback' => 'user_page',
     'access callback' => TRUE,
     'type' => MENU_CALLBACK,
-    'file' => 'user.pages.inc',
   );
 
   $items['user/login'] = array(
@@ -876,7 +874,6 @@ function user_menu() {
     'page arguments' => array('user_register'),
     'access callback' => 'user_register_access',
     'type' => MENU_LOCAL_TASK,
-    'file' => 'user.pages.inc',
   );
 
   $items['user/password'] = array(
@@ -885,7 +882,6 @@ function user_menu() {
     'page arguments' => array('user_pass'),
     'access callback' => 'user_is_anonymous',
     'type' => MENU_LOCAL_TASK,
-    'file' => 'user.pages.inc',
   );
   $items['user/reset/%/%/%'] = array(
     'title' => 'Reset password',
@@ -893,7 +889,6 @@ function user_menu() {
     'page arguments' => array('user_pass_reset', 2, 3, 4),
     'access callback' => TRUE,
     'type' => MENU_CALLBACK,
-    'file' => 'user.pages.inc',
   );
 
   // User administration pages.
@@ -903,8 +898,6 @@ function user_menu() {
     'position' => 'left',
     'page callback' => 'system_admin_menu_block_page',
     'access arguments' => array('access administration pages'),
-    'file' => 'system.admin.inc',
-    'file path' => drupal_get_path('module', 'system'),
   );
   $items['admin/user/user'] = array(
     'title' => 'Users',
@@ -912,7 +905,6 @@ function user_menu() {
     'page callback' => 'user_admin',
     'page arguments' => array('list'),
     'access arguments' => array('administer users'),
-    'file' => 'user.admin.inc',
   );
   $items['admin/user/user/list'] = array(
     'title' => 'List',
@@ -924,7 +916,6 @@ function user_menu() {
     'page arguments' => array('create'),
     'access arguments' => array('administer users'),
     'type' => MENU_LOCAL_TASK,
-    'file' => 'user.admin.inc',
   );
   $items['admin/user/settings'] = array(
     'title' => 'User settings',
@@ -932,7 +923,6 @@ function user_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('user_admin_settings'),
     'access arguments' => array('administer users'),
-    'file' => 'user.admin.inc',
   );
 
   // Permission administration pages.
@@ -942,7 +932,6 @@ function user_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('user_admin_perm'),
     'access arguments' => array('administer permissions'),
-    'file' => 'user.admin.inc',
   );
   $items['admin/user/roles'] = array(
     'title' => 'Roles',
@@ -950,14 +939,12 @@ function user_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('user_admin_new_role'),
     'access arguments' => array('administer permissions'),
-    'file' => 'user.admin.inc',
   );
   $items['admin/user/roles/edit'] = array(
     'title' => 'Edit role',
     'page arguments' => array('user_admin_role'),
     'access arguments' => array('administer permissions'),
     'type' => MENU_CALLBACK,
-    'file' => 'user.admin.inc',
   );
 
   $items['logout'] = array(
@@ -965,7 +952,6 @@ function user_menu() {
     'access callback' => 'user_is_logged_in',
     'page callback' => 'user_logout',
     'weight' => 10,
-    'file' => 'user.pages.inc',
   );
 
   $items['user/%user_uid_optional'] = array(
@@ -977,7 +963,6 @@ function user_menu() {
     'access callback' => 'user_view_access',
     'access arguments' => array(1),
     'parent' => '',
-    'file' => 'user.pages.inc',
   );
 
   $items['user/%user/view'] = array(
@@ -993,7 +978,6 @@ function user_menu() {
     'access callback' => 'user_access',
     'access arguments' => array('administer users'),
     'type' => MENU_CALLBACK,
-    'file' => 'user.pages.inc',
   );
 
   $items['user/%user_category/edit'] = array(
@@ -1004,7 +988,6 @@ function user_menu() {
     'access arguments' => array(1),
     'type' => MENU_LOCAL_TASK,
     'load arguments' => array('%map', '%index'),
-    'file' => 'user.pages.inc',
   );
 
   $items['user/%user_category/edit/account'] = array(
@@ -1029,7 +1012,6 @@ function user_menu() {
           'weight' => $category['weight'],
           'load arguments' => array('%map', '%index'),
           'tab_parent' => 'user/%/edit',
-          'file' => 'user.pages.inc',
         );
       }
     }