diff --git a/core/includes/common.inc b/core/includes/common.inc
index 7b40e653c34f95399ed7494e20b5d4e0a0ce7c13..358a59a01bbd357d01839cfa24289a9e0aa4c3a5 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -3229,7 +3229,7 @@ function drupal_cron_run() {
 
   $return = FALSE;
   // Grab the defined cron queues.
-  $queues = module_invoke_all('queue_info');
+  $queues = Drupal::moduleHandler()->invokeAll('queue_info');
   drupal_alter('queue_info', $queues);
 
   // Try to acquire cron lock.
@@ -4275,7 +4275,7 @@ function element_info($type) {
   $cache = &$drupal_static_fast['cache'];
 
   if (!isset($cache)) {
-    $cache = module_invoke_all('element_info');
+    $cache = Drupal::moduleHandler()->invokeAll('element_info');
     foreach ($cache as $element_type => $info) {
       $cache[$element_type]['#type'] = $element_type;
     }
@@ -4828,7 +4828,7 @@ function archiver_get_archiver($file) {
 function drupal_get_updaters() {
   $updaters = &drupal_static(__FUNCTION__);
   if (!isset($updaters)) {
-    $updaters = module_invoke_all('updater_info');
+    $updaters = Drupal::moduleHandler()->invokeAll('updater_info');
     drupal_alter('updater_info', $updaters);
     uasort($updaters, 'drupal_sort_weight');
   }
@@ -4848,7 +4848,7 @@ function drupal_get_updaters() {
 function drupal_get_filetransfer_info() {
   $info = &drupal_static(__FUNCTION__);
   if (!isset($info)) {
-    $info = module_invoke_all('filetransfer_info');
+    $info = Drupal::moduleHandler()->invokeAll('filetransfer_info');
     drupal_alter('filetransfer_info', $info);
     uasort($info, 'drupal_sort_weight');
   }
diff --git a/core/includes/entity.inc b/core/includes/entity.inc
index 02a3ec70688cdc346a6314938243c0c75d8fc9fd..7822d7aa2d4afdc3fabeb0479ca27fefa37ffcc2 100644
--- a/core/includes/entity.inc
+++ b/core/includes/entity.inc
@@ -65,7 +65,7 @@ function entity_get_bundles($entity_type = NULL) {
       $bundles = $cache->data;
     }
     else {
-      $bundles = module_invoke_all('entity_bundle_info');
+      $bundles = Drupal::moduleHandler()->invokeAll('entity_bundle_info');
       // If no bundles are provided, use the entity type name and label.
       foreach (entity_get_info() as $type => $entity_info) {
         if (!isset($bundles[$type])) {
@@ -102,7 +102,7 @@ function entity_get_bundles($entity_type = NULL) {
  */
 function entity_invoke_bundle_hook($hook, $entity_type, $bundle, $bundle_new = NULL) {
   entity_info_cache_clear();
-  module_invoke_all('entity_bundle_' . $hook, $entity_type, $bundle, $bundle_new);
+  Drupal::moduleHandler()->invokeAll('entity_bundle_' . $hook, array($entity_type, $bundle, $bundle_new));
 }
 
 /**
diff --git a/core/includes/file.inc b/core/includes/file.inc
index c875bdc546dc5e69f8d170cacfcfce3322e58e08..ec329e1270bd4e888c1f01bb53549a4fa9494b48 100644
--- a/core/includes/file.inc
+++ b/core/includes/file.inc
@@ -189,7 +189,7 @@ function file_get_stream_wrappers($filter = STREAM_WRAPPERS_ALL) {
   $wrappers_storage = &drupal_static(__FUNCTION__);
 
   if (!isset($wrappers_storage)) {
-    $wrappers = module_invoke_all('stream_wrappers');
+    $wrappers = Drupal::moduleHandler()->invokeAll('stream_wrappers');
     foreach ($wrappers as $scheme => $info) {
       // Add defaults.
       $wrappers[$scheme] += array('type' => STREAM_WRAPPERS_NORMAL);
diff --git a/core/includes/form.inc b/core/includes/form.inc
index 72ba2b40c323a4d7b34d1268f119dc1351754d88..a789322f95f86220ee1ba4198b4666bf0b228fcd 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -820,7 +820,7 @@ function drupal_retrieve_form($form_id, &$form_state) {
     // So, we call the hook if $forms isn't yet populated, OR if it doesn't
     // yet have an entry for the requested form_id.
     if (!isset($forms) || !isset($forms[$form_id])) {
-      $forms = module_invoke_all('forms', $form_id, $args);
+      $forms = Drupal::moduleHandler()->invokeAll('forms', array($form_id, $args));
     }
     $form_definition = $forms[$form_id];
     if (isset($form_definition['callback arguments'])) {
diff --git a/core/includes/language.inc b/core/includes/language.inc
index e63acaa52470b6856ee68337ba1189c2279097d8..a3ee24da5167e7a2f68797dbdc22efd087b332d9 100644
--- a/core/includes/language.inc
+++ b/core/includes/language.inc
@@ -161,7 +161,7 @@ function language_types_info() {
   $language_types = &drupal_static(__FUNCTION__);
 
   if (!isset($language_types)) {
-    $language_types = module_invoke_all('language_types_info');
+    $language_types = Drupal::moduleHandler()->invokeAll('language_types_info');
     // Let other modules alter the list of language types.
     drupal_alter('language_types_info', $language_types);
   }
@@ -413,7 +413,7 @@ function language_negotiation_info() {
 
   if (!isset($negotiation_info)) {
     // Collect all the module-defined language negotiation methods.
-    $negotiation_info = module_invoke_all('language_negotiation_info');
+    $negotiation_info = Drupal::moduleHandler()->invokeAll('language_negotiation_info');
     $languages = language_list();
     $selected_language = $languages[language_from_selected($languages)];
     $description = 'Language based on a selected language. ';
diff --git a/core/includes/menu.inc b/core/includes/menu.inc
index 31309f6ed64e05149c9542d2f2c90da9abf3a0d7..cb3f7aca9d5fe762a809c2123ae5fee08ba53930 100644
--- a/core/includes/menu.inc
+++ b/core/includes/menu.inc
@@ -1776,7 +1776,7 @@ function menu_get_custom_theme($initialize = FALSE) {
     // First allow modules to dynamically set a custom theme for the current
     // page. Since we can only have one, the last module to return a valid
     // theme takes precedence.
-    $custom_themes = array_filter(module_invoke_all('custom_theme'), 'drupal_theme_access');
+    $custom_themes = array_filter(Drupal::moduleHandler()->invokeAll('custom_theme'), 'drupal_theme_access');
     if (!empty($custom_themes)) {
       $custom_theme = array_pop($custom_themes);
     }
diff --git a/core/includes/path.inc b/core/includes/path.inc
index b55c503c37bde06a555773d02bedb4f09a846b8a..9a48f47cf36d1b7b4d06a2307f7060187da47726 100644
--- a/core/includes/path.inc
+++ b/core/includes/path.inc
@@ -158,7 +158,7 @@ function path_is_admin($path) {
 function path_get_admin_paths() {
   $patterns = &drupal_static(__FUNCTION__);
   if (!isset($patterns)) {
-    $paths = module_invoke_all('admin_paths');
+    $paths = Drupal::moduleHandler()->invokeAll('admin_paths');
     drupal_alter('admin_paths', $paths);
     // Combine all admin paths into one array, and likewise for non-admin paths,
     // for easier handling.
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 6cee15a5ce71a980c28e0f77ffacf0ac141f6f86..ec6b37a29f1465a3b55dcbc26ec6e6f6f1f315e7 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -1489,7 +1489,7 @@ function theme_enable($theme_list) {
   drupal_theme_rebuild();
 
   // Invoke hook_themes_enabled() after the themes have been enabled.
-  module_invoke_all('themes_enabled', $theme_list);
+  Drupal::moduleHandler()->invokeAll('themes_enabled', array($theme_list));
 }
 
 /**
@@ -1525,7 +1525,7 @@ function theme_disable($theme_list) {
   drupal_theme_rebuild();
 
   // Invoke hook_themes_disabled after the themes have been disabled.
-  module_invoke_all('themes_disabled', $theme_list);
+  Drupal::moduleHandler()->invokeAll('themes_disabled', array($theme_list));
 }
 
 /**
diff --git a/core/includes/update.inc b/core/includes/update.inc
index 3ee24ab85ef99c4fcd0824e75aca22bff1fabd49..4a17a7febfb205f8da0baf37ee437b423f24dd4a 100644
--- a/core/includes/update.inc
+++ b/core/includes/update.inc
@@ -1247,22 +1247,22 @@ function update_already_performed($module, $number) {
 /**
  * Invokes hook_update_dependencies() in all installed modules.
  *
- * This function is similar to module_invoke_all(), with the main difference
- * that it does not require that a module be enabled to invoke its hook, only
- * that it be installed. This allows the update system to properly perform
- * updates even on modules that are currently disabled.
+ * This function is similar to \Drupal::moduleHandler()->invokeAll(), with the
+ * main difference that it does not require that a module be enabled to invoke
+ * its hook, only that it be installed. This allows the update system to
+ * properly perform updates even on modules that are currently disabled.
  *
  * @return
  *   An array of return values obtained by merging the results of the
  *   hook_update_dependencies() implementations in all installed modules.
  *
- * @see module_invoke_all()
+ * @see \Drupal::moduleHandler()->invokeAll()
  * @see hook_update_dependencies()
  */
 function update_retrieve_dependencies() {
   $return = array();
   // Get a list of installed modules, arranged so that we invoke their hooks in
-  // the same order that module_invoke_all() does.
+  // the same order that \Drupal::moduleHandler()->invokeAll() does.
   foreach (Drupal::keyValue('system.schema')->getAll() as $module => $schema) {
     if ($schema == SCHEMA_UNINSTALLED) {
       // Nothing to upgrade.
diff --git a/core/modules/field/field.attach.inc b/core/modules/field/field.attach.inc
index e2f97313816a9da293dc136cd604734062c8cba0..5bab381ec4447fec3bc7ca43f3404c0e74d8b888 100644
--- a/core/modules/field/field.attach.inc
+++ b/core/modules/field/field.attach.inc
@@ -518,7 +518,8 @@ function field_attach_form(EntityInterface $entity, &$form, &$form_state, $langc
   $form['#bundle'] = $entity->bundle();
 
   // Let other modules make changes to the form.
-  // Avoid module_invoke_all() to let parameters be taken by reference.
+  // Avoid \Drupal::moduleHandler()->invokeAll()
+  // to let parameters be taken by reference.
   foreach (Drupal::moduleHandler()->getImplementations('field_attach_form') as $module) {
     $function = $module . '_field_attach_form';
     $function($entity, $form, $form_state, $langcode);
@@ -690,7 +691,7 @@ function field_attach_load($entity_type, $entities, $age = FIELD_LOAD_CURRENT, $
 
     // Invoke hook_field_attach_load(): let other modules act on loading the
     // entity.
-    module_invoke_all('field_attach_load', $entity_type, $queried_entities, $age, $options);
+    Drupal::moduleHandler()->invokeAll('field_attach_load', $entity_type, $queried_entities, $age, $options);
 
     // Build cache data.
     if ($cache_write) {
@@ -823,7 +824,8 @@ function field_attach_extract_form_values(EntityInterface $entity, $form, &$form
   field_invoke_method('extractFormValues', _field_invoke_widget_target($form_display), $entity, $form, $form_state, $options);
 
   // Let other modules act on submitting the entity.
-  // Avoid module_invoke_all() to let $form_state be taken by reference.
+  // Avoid \Drupal::moduleHandler()->invokeAll()
+  // to let $form_state be taken by reference.
   foreach (Drupal::moduleHandler()->getImplementations('field_attach_extract_form_values') as $module) {
     $function = $module . 'field_attach_extract_form_values';
     $function($entity, $form, $form_state);
diff --git a/core/modules/field/field.crud.inc b/core/modules/field/field.crud.inc
index 66e0e4a417549ee47447defcbd5ada6200bb8662..c66fd549cc439611a813e2741faddf4e22e85bc6 100644
--- a/core/modules/field/field.crud.inc
+++ b/core/modules/field/field.crud.inc
@@ -352,7 +352,7 @@ function field_purge_instance($instance) {
   field_info_cache_clear();
 
   // Invoke external hooks after the cache is cleared for API consistency.
-  module_invoke_all('field_purge_instance', $instance);
+  Drupal::moduleHandler()->invokeAll('field_purge_instance', array($instance));
 }
 
 /**
@@ -382,7 +382,7 @@ function field_purge_field($field) {
   field_info_cache_clear();
 
   // Invoke external hooks after the cache is cleared for API consistency.
-  module_invoke_all('field_purge_field', $field);
+  Drupal::moduleHandler()->invokeAll('field_purge_field', array($field));
 }
 
 /**
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index 9858bd08815e4ae24b983663b841a29080573ad6..6454c78bd0c4a32d160265bc3bf255828cd2eb73 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -204,7 +204,7 @@ function file_copy(File $source, $destination = NULL, $replace = FILE_EXISTS_REN
     $file->save();
 
     // Inform modules that the file has been copied.
-    module_invoke_all('file_copy', $file, $source);
+    Drupal::moduleHandler()->invokeAll('file_copy', array($file, $source));
 
     return $file;
   }
@@ -279,7 +279,7 @@ function file_move(File $source, $destination = NULL, $replace = FILE_EXISTS_REN
     $file->save();
 
     // Inform modules that the file has been moved.
-    module_invoke_all('file_move', $file, $source);
+    Drupal::moduleHandler()->invokeAll('file_move', array($file, $source));
 
     // Delete the original if it's not in use elsewhere.
     if ($delete_source && !file_usage()->listUsage($source)) {
@@ -323,7 +323,7 @@ function file_validate(File $file, $validators = array()) {
   }
 
   // Let other modules perform validation on the new file.
-  return array_merge($errors, module_invoke_all('file_validate', $file));
+  return array_merge($errors, Drupal::moduleHandler()->invokeAll('file_validate', array($file)));
 }
 
 /**
diff --git a/core/modules/image/image.module b/core/modules/image/image.module
index c1918eb05499b394ae91fd63d5358cf987a469b7..22d5ffd171eddb5fc2269bb5e59b6fac37b985e0 100644
--- a/core/modules/image/image.module
+++ b/core/modules/image/image.module
@@ -258,7 +258,7 @@ function image_file_download($uri) {
     // Check that the file exists and is an image.
     if ($info = image_get_info($uri)) {
       // Check the permissions of the original to grant access to this image.
-      $headers = module_invoke_all('file_download', $original_uri);
+      $headers = Drupal::moduleHandler()->invokeAll('file_download', array($original_uri));
       // Confirm there's at least one module granting access and none denying access.
       if (!empty($headers) && !in_array(-1, $headers)) {
         return array(
diff --git a/core/modules/language/language.module b/core/modules/language/language.module
index 7e5b87b039572d2630f8bddc33a6f8c02a0bf7e4..66433d314c890f870b2b5218365ed8fe856f8fcb 100644
--- a/core/modules/language/language.module
+++ b/core/modules/language/language.module
@@ -497,7 +497,7 @@ function language_save($language) {
   $language->is_new = $language_entity->isNew();
 
   // Let other modules modify $language before saved.
-  module_invoke_all('language_presave', $language);
+  Drupal::moduleHandler()->invokeAll('language_presave', array($language));
 
   // Assign language properties to language entity.
   $language_entity->label = isset($language->name) ? $language->name : '';
@@ -509,11 +509,11 @@ function language_save($language) {
   $language_entity->save();
   $t_args = array('%language' => $language->name, '%langcode' => $language->id);
   if ($language->is_new) {
-    module_invoke_all('language_insert', $language);
+    Drupal::moduleHandler()->invokeAll('language_insert', array($language));
     watchdog('language', 'The %language (%langcode) language has been created.', $t_args);
   }
   else {
-    module_invoke_all('language_update', $language);
+    Drupal::moduleHandler()->invokeAll('language_update', array($language));
     watchdog('language', 'The %language (%langcode) language has been updated.', $t_args);
   }
 
@@ -571,7 +571,7 @@ function language_delete($langcode) {
   if (isset($languages[$langcode]) && !$languages[$langcode]->locked) {
     $language = $languages[$langcode];
 
-    module_invoke_all('language_delete', $language);
+    Drupal::moduleHandler()->invokeAll('language_delete', array($language));
 
     // Remove the language.
     entity_delete_multiple('language_entity', array($language->id));
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 5a6d53aa95497b691125cb09ef29ad9f1d55067c..5c51300d64e3ebc3bd0a914561453e3d09835ecc 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -821,7 +821,7 @@ function node_permission() {
  *   A query object that has been extended with the Search DB Extender.
  */
 function _node_rankings(SelectExtender $query) {
-  if ($ranking = module_invoke_all('ranking')) {
+  if ($ranking = Drupal::moduleHandler()->invokeAll('ranking')) {
     $tables = &$query->getTables();
     foreach ($ranking as $rank => $values) {
       if ($node_rank = variable_get('node_rank_' . $rank, 0)) {
@@ -888,7 +888,7 @@ function node_search_admin() {
 
   // Note: reversed to reflect that higher number = higher ranking.
   $options = drupal_map_assoc(range(0, 10));
-  foreach (module_invoke_all('ranking') as $var => $values) {
+  foreach (Drupal::moduleHandler()->invokeAll('ranking') as $var => $values) {
     $form['content_ranking']['factors']['node_rank_' . $var] = array(
       '#title' => $values['title'],
       '#type' => 'select',
@@ -945,7 +945,7 @@ function node_search_execute($keys = NULL, $conditions = NULL) {
     // Fetch comments for snippet.
     $node->rendered .= ' ' . module_invoke('comment', 'node_update_index', $node, $item->langcode);
 
-    $extra = module_invoke_all('node_search_result', $node, $item->langcode);
+    $extra = Drupal::moduleHandler()->invokeAll('node_search_result', array($node, $item->langcode));
 
     $language = language_load($item->langcode);
     $uri = $node->uri();
@@ -1756,7 +1756,7 @@ function _node_index_node(EntityInterface $node) {
     $text = '<h1>' . check_plain($node->label($language->id)) . '</h1>' . $node->rendered;
 
     // Fetch extra data normally not visible.
-    $extra = module_invoke_all('node_update_index', $node, $language->id);
+    $extra = Drupal::moduleHandler()->invokeAll('node_update_index', array($node, $language->id));
     foreach ($extra as $t) {
       $text .= $t;
     }
@@ -2185,7 +2185,7 @@ function node_access_grants($op, $account = NULL) {
   }
 
   // Fetch node access grants from other modules.
-  $grants = module_invoke_all('node_grants', $account, $op);
+  $grants = Drupal::moduleHandler()->invokeAll('node_grants', array($account, $op));
   // Allow modules to alter the assigned grants.
   drupal_alter('node_grants', $grants, $account, $op);
 
diff --git a/core/modules/overlay/overlay.module b/core/modules/overlay/overlay.module
index a2f61ee891cf35e1eca49b03001626c8e6249174..2edb2561164b3b5d6b391165fddc16e89e167826 100644
--- a/core/modules/overlay/overlay.module
+++ b/core/modules/overlay/overlay.module
@@ -481,14 +481,14 @@ function overlay_set_mode($mode = NULL) {
       drupal_add_library('overlay', 'drupal.overlay.parent');
 
       // Allow modules to act upon overlay events.
-      module_invoke_all('overlay_parent_initialize');
+      Drupal::moduleHandler()->invokeAll('overlay_parent_initialize');
       break;
 
     case 'child':
       drupal_add_library('overlay', 'drupal.overlay.child');
 
       // Allow modules to act upon overlay events.
-      module_invoke_all('overlay_child_initialize');
+      Drupal::moduleHandler()->invokeAll('overlay_child_initialize');
       break;
   }
   return $overlay_mode;
diff --git a/core/modules/rdf/rdf.module b/core/modules/rdf/rdf.module
index 32ab878e72a103c7abfc56d56fe8021b5fbd69f6..3bce0ee5966bc7823170064e29c9d3b3a282aed7 100644
--- a/core/modules/rdf/rdf.module
+++ b/core/modules/rdf/rdf.module
@@ -109,7 +109,7 @@ function rdf_rdf_namespaces() {
 function rdf_get_namespaces() {
   $namespaces = array();
   // In order to resolve duplicate namespaces by using the earliest defined
-  // namespace, do not use module_invoke_all().
+  // namespace, do not use \Drupal::moduleHandler()->invokeAll().
   foreach (Drupal::moduleHandler()->getImplementations('rdf_namespaces') as $module) {
     $function = $module . '_rdf_namespaces';
     if (function_exists($function)) {
diff --git a/core/modules/search/search.api.php b/core/modules/search/search.api.php
index 03b45aa37902099e464369298537fe721cf73ba5..1a343d26eadf4a07fac64fdaae99db5bdb253858 100644
--- a/core/modules/search/search.api.php
+++ b/core/modules/search/search.api.php
@@ -116,7 +116,7 @@ function hook_search_admin() {
   // Note: reversed to reflect that higher number = higher ranking.
   $options = drupal_map_assoc(range(0, 10));
   $ranks = config('node.settings')->get('search_rank');
-  foreach (module_invoke_all('ranking') as $var => $values) {
+  foreach (Drupal::moduleHandler()->invokeAll('ranking') as $var => $values) {
     $form['content_ranking']['factors'][$var] = array(
       '#title' => $values['title'],
       '#type' => 'select',
@@ -213,7 +213,7 @@ function hook_search_execute($keys = NULL, $conditions = NULL) {
     // Fetch comments for snippet.
     $node->rendered .= ' ' . module_invoke('comment', 'node_update_index', $node, $item->langcode);
 
-    $extra = module_invoke_all('node_search_result', $node, $item->langcode);
+    $extra = Drupal::moduleHandler()->invokeAll('node_search_result', array($node, $item->langcode));
 
     $language = language_load($item->langcode);
     $uri = $node->uri();
@@ -356,7 +356,7 @@ function hook_update_index() {
     $text = '<h1>' . check_plain($node->label()) . '</h1>' . $node->rendered;
 
     // Fetch extra data normally not visible
-    $extra = module_invoke_all('node_update_index', $node);
+    $extra = Drupal::moduleHandler()->invokeAll('node_update_index', array($node));
     foreach ($extra as $t) {
       $text .= $t;
     }
diff --git a/core/modules/search/search.module b/core/modules/search/search.module
index 9e9921b807daee1e1723c0e6eb3cf18baef9be81..a18117282ac61fa5dee64bbaed20a05649df8188 100644
--- a/core/modules/search/search.module
+++ b/core/modules/search/search.module
@@ -305,7 +305,7 @@ function _search_menu_access($name) {
  */
 function search_reindex($sid = NULL, $module = NULL, $reindex = FALSE, $langcode = NULL) {
   if ($module == NULL && $sid == NULL) {
-    module_invoke_all('search_reset');
+    Drupal::moduleHandler()->invokeAll('search_reset');
   }
   else {
     $query = db_delete('search_dataset')
diff --git a/core/modules/shortcut/shortcut.module b/core/modules/shortcut/shortcut.module
index c22c97fa16a117015499e364e7e279cb2af49ced..57ff7d73388ab779bdaeb611ed18f4c86f123301 100644
--- a/core/modules/shortcut/shortcut.module
+++ b/core/modules/shortcut/shortcut.module
@@ -368,7 +368,7 @@ function shortcut_default_set($account = NULL) {
   // have one, we allow the last module which returns a valid result to take
   // precedence. If no module returns a valid set, fall back on the site-wide
   // default, which is the lowest-numbered shortcut set.
-  $suggestions = array_reverse(module_invoke_all('shortcut_default_set', $account));
+  $suggestions = array_reverse(Drupal::moduleHandler()->invokeAll('shortcut_default_set', array($account)));
   $suggestions[] = 'default';
   foreach ($suggestions as $name) {
     if ($shortcut_set = shortcut_set_load($name)) {
diff --git a/core/modules/simpletest/simpletest.module b/core/modules/simpletest/simpletest.module
index 6cdf2be4ff924969d77ba565162394fe965fbdcb..4df46833a40a87f3d2059a0d28ec05fe45e763a2 100644
--- a/core/modules/simpletest/simpletest.module
+++ b/core/modules/simpletest/simpletest.module
@@ -159,7 +159,7 @@ function simpletest_run_tests($test_list, $reporter = 'drupal') {
   );
   batch_set($batch);
 
-  module_invoke_all('test_group_started');
+  Drupal::moduleHandler()->invokeAll('test_group_started');
 
   return $test_id;
 }
@@ -305,7 +305,7 @@ function _simpletest_batch_operation($test_list_init, $test_id, &$context) {
   $size = count($test_list);
   $info = $test->getInfo();
 
-  module_invoke_all('test_finished', $test->results);
+  Drupal::moduleHandler()->invokeAll('test_finished', array($test->results));
 
   // Gather results and compose the report.
   $test_results[$test_class] = $test->results;
@@ -352,7 +352,7 @@ function _simpletest_batch_finished($success, $results, $operations, $elapsed) {
     drupal_set_message(t('The test run did not successfully finish.'), 'error');
     drupal_set_message(t('Use the <em>Clean environment</em> button to clean-up temporary files and tables.'), 'warning');
   }
-  module_invoke_all('test_group_finished');
+  Drupal::moduleHandler()->invokeAll('test_group_finished');
 }
 
 /**
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 59c9bfa74598bd3f2ae8a56a6d267edd7776602d..31201c0d3ea274fc4ff8f974c5377c56ec8c7d50 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -2731,7 +2731,7 @@ function _system_rebuild_theme_data() {
   // Find themes
   $themes = drupal_system_listing('/^' . DRUPAL_PHP_FUNCTION_PATTERN . '\.info.yml$/', 'themes');
   // Allow modules to add further themes.
-  if ($module_themes = module_invoke_all('system_theme_info')) {
+  if ($module_themes = Drupal::moduleHandler()->invokeAll('system_theme_info')) {
     foreach ($module_themes as $name => $uri) {
       // @see file_scan_directory()
       $themes[$name] = (object) array(
@@ -3182,7 +3182,7 @@ function system_cron() {
   // Cleanup the flood.
   Drupal::service('flood')->garbageCollection();
 
-  module_invoke_all('cache_flush');
+  Drupal::moduleHandler()->invokeAll('cache_flush');
   foreach (Cache::getBins() as $cache_backend) {
     $cache_backend->garbageCollection();
   }
diff --git a/core/modules/system/tests/modules/module_test/module_test.module b/core/modules/system/tests/modules/module_test/module_test.module
index 39caf9261846f22456b05955161d58746542535b..fd1d2e69687ad6972c38a545fbf4a3ee904b9d94 100644
--- a/core/modules/system/tests/modules/module_test/module_test.module
+++ b/core/modules/system/tests/modules/module_test/module_test.module
@@ -110,7 +110,7 @@ function module_test_hook_dynamic_loading_invoke() {
  * return 'success!'.
  */
 function module_test_hook_dynamic_loading_invoke_all() {
-  $result = module_invoke_all('test_hook');
+  $result = Drupal::moduleHandler()->invokeAll('test_hook');
   return $result['module_test'];
 }
 
@@ -130,7 +130,7 @@ function module_test_hook_dynamic_loading_invoke_all_during_load($param) {
  * @see module_test_menu().
  */
 function module_test_load($param) {
-  $result = module_invoke_all('test_hook');
+  $result = Drupal::moduleHandler()->invokeAll('test_hook');
   return $result[$param];
 }
 
diff --git a/core/modules/toolbar/toolbar.module b/core/modules/toolbar/toolbar.module
index 845ea9e9b61226529a3141ef366de331f4128f48..dbbca14e1cc6f98e67473ef89d1547f053150ee4 100644
--- a/core/modules/toolbar/toolbar.module
+++ b/core/modules/toolbar/toolbar.module
@@ -199,7 +199,7 @@ function ($object) {
   }
 
   // Get toolbar items from all modules that implement hook_toolbar().
-  $items = module_invoke_all('toolbar');
+  $items = Drupal::moduleHandler()->invokeAll('toolbar');
   // Allow for altering of hook_toolbar().
   drupal_alter('toolbar', $items);
   // Sort the children.
diff --git a/core/modules/update/update.manager.inc b/core/modules/update/update.manager.inc
index 6b6767b05326d92ef232dd2145fb6f5b21746787..86282170dee36ffc1bb30bb46f1dd8c6847082f1 100644
--- a/core/modules/update/update.manager.inc
+++ b/core/modules/update/update.manager.inc
@@ -809,7 +809,7 @@ function update_manager_archive_extract($file, $directory) {
  *   are no errors, it will be an empty array.
  */
 function update_manager_archive_verify($project, $archive_file, $directory) {
-  return module_invoke_all('verify_update_archive', $project, $archive_file, $directory);
+  return Drupal::moduleHandler()->invokeAll('verify_update_archive', array($project, $archive_file, $directory));
 }
 
 /**
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 0ba22d84062f99b22249595f0c1069e2ad2e7ad6..4e179c26495e370d24f5ef627e0d298d6a36bdbc 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -1150,7 +1150,7 @@ function user_login_finalize(UserInterface $account) {
   // or incorrectly does a redirect which would leave the old session in place.
   drupal_session_regenerate();
 
-  module_invoke_all('user_login', $user);
+  Drupal::moduleHandler()->invokeAll('user_login', array($user));
 }
 
 /**
@@ -1287,7 +1287,7 @@ function user_cancel($edit, $uid, $method) {
   // should use those hooks to respond to the account deletion.
   if ($method != 'user_cancel_delete') {
     // Allow modules to add further sets to this batch.
-    module_invoke_all('user_cancel', $edit, $account, $method);
+    Drupal::moduleHandler()->invokeAll('user_cancel', array($edit, $account, $method));
   }
 
   // Finish the batch and actually cancel the account.
diff --git a/core/modules/xmlrpc/xmlrpc.server.inc b/core/modules/xmlrpc/xmlrpc.server.inc
index fded0119cc2b85a29777dd0608dd19949accdf3f..b68ccbbf808db90d177cd2c73949a4263de424bb 100644
--- a/core/modules/xmlrpc/xmlrpc.server.inc
+++ b/core/modules/xmlrpc/xmlrpc.server.inc
@@ -16,7 +16,7 @@
  */
 function xmlrpc_server_page() {
   module_load_include('inc', 'xmlrpc');
-  return xmlrpc_server(module_invoke_all('xmlrpc'));
+  return xmlrpc_server(Drupal::moduleHandler()->invokeAll('xmlrpc'));
 }
 
 /**
diff --git a/core/profiles/standard/standard.install b/core/profiles/standard/standard.install
index 5c29f4d6b7dae613eed670f4028559ab9ca9faa8..f74841e3358ce611b302684d959b746e3dfaab64 100644
--- a/core/profiles/standard/standard.install
+++ b/core/profiles/standard/standard.install
@@ -40,7 +40,7 @@ function standard_install() {
   user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, array('access content', 'access comments', 'post comments', 'skip comment approval'));
 
   // Enable all permissions for the administrator role.
-  user_role_grant_permissions('administrator', array_keys(module_invoke_all('permission')));
+  user_role_grant_permissions('administrator', array_keys(Drupal::moduleHandler()->invokeAll('permission')));
   // Set this as the administrator role.
   $user_settings->set('admin_role', 'administrator')->save();
 
diff --git a/core/update.php b/core/update.php
index 8608f977fd886518b3d03c163813fc642b9f9250..387fe35aa535539b75baab059f69ce06ce78a1e7 100644
--- a/core/update.php
+++ b/core/update.php
@@ -405,7 +405,7 @@ function update_extra_requirements($requirements = NULL) {
  */
 function update_check_requirements($skip_warnings = FALSE) {
   // Check requirements of all loaded modules.
-  $requirements = module_invoke_all('requirements', 'update');
+  $requirements = Drupal::moduleHandler()->invokeAll('requirements', array('update'));
   $requirements += update_extra_requirements();
   $severity = drupal_requirements_severity($requirements);