diff --git a/core/includes/entity.inc b/core/includes/entity.inc
index b3220f3..a51034b 100644
--- a/core/includes/entity.inc
+++ b/core/includes/entity.inc
@@ -25,11 +25,13 @@ function entity_render_cache_clear() {
  * Returns the entity bundle info.
  *
  * @param string|null $entity_type
- *   The entity type whose bundle info should be returned, or NULL for all
- *   bundles info. Defaults to NULL.
+ *   (optional) The entity type whose bundle info should be returned, or NULL
+ *   for all bundles info. Defaults to NULL.
  *
  * @return array
- *   The bundle info for a specific entity type, or all entity types.
+ *   The bundle info for a specific entity type, or all entity types. For the
+ *   specific entity type, the array will be keyed by bundle name. For all
+ *   entity types, the array will be keyed by entity type, and then bundle name.
  *
  * @deprecated in Drupal 8.x-dev and will be removed before Drupal 9.0.0. Use
  *   \Drupal\Core\Entity\EntityManagerInterface::getBundleInfo() for a single
diff --git a/core/lib/Drupal/Core/Entity/EntityManagerInterface.php b/core/lib/Drupal/Core/Entity/EntityManagerInterface.php
index 7b180d2..8a3ade0 100644
--- a/core/lib/Drupal/Core/Entity/EntityManagerInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityManagerInterface.php
@@ -171,7 +171,9 @@ public function getStorage($entity_type);
    * Get the bundle info of all entity types.
    *
    * @return array
-   *   An array of all bundle information.
+   *   An array of all bundle information, keyed by entity type and bundle name.
+   *
+   * @see entity_get_bundles()
    */
   public function getAllBundleInfo();
 
@@ -287,7 +289,10 @@ public function createHandlerInstance($class, EntityTypeInterface $definition =
    *   The entity type.
    *
    * @return array
-   *   Returns the bundle information for the specified entity type.
+   *   The bundle information for the specified entity type, keyed by bundle
+   *   name.
+   *
+   * @see entity_get_bundles()
    */
   public function getBundleInfo($entity_type);
 
diff --git a/core/lib/Drupal/Core/Entity/Plugin/DataType/Deriver/EntityDeriver.php b/core/lib/Drupal/Core/Entity/Plugin/DataType/Deriver/EntityDeriver.php
index 76decd9..de01764 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/DataType/Deriver/EntityDeriver.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/Deriver/EntityDeriver.php
@@ -87,7 +87,7 @@ public function getDerivativeDefinitions($base_plugin_definition) {
       ) + $base_plugin_definition;
 
       // Incorporate the bundles as entity:$entity_type:$bundle, if any.
-      foreach (entity_get_bundles($entity_type_id) as $bundle => $bundle_info) {
+      foreach ($this->entityManager->getBundleInfo($entity_type_id) as $bundle => $bundle_info) {
         if ($bundle !== $entity_type_id) {
           $this->derivatives[$entity_type_id . ':' . $bundle] = array(
             'label' => $bundle_info['label'],
diff --git a/core/lib/Drupal/Core/Entity/entity.api.php b/core/lib/Drupal/Core/Entity/entity.api.php
index 3c68a57..7139487 100644
--- a/core/lib/Drupal/Core/Entity/entity.api.php
+++ b/core/lib/Drupal/Core/Entity/entity.api.php
@@ -701,6 +701,8 @@ function hook_entity_view_mode_info_alter(&$view_modes) {
  *   - translatable: (optional) A boolean value specifying whether this bundle
  *     has translation support enabled. Defaults to FALSE.
  *
+ * @see \Drupal\Core\Entity\EntityManagerInterface::getBundleInfo()
+ * @see \Drupal\Core\Entity\EntityManagerInterface::getAllBundleInfo()
  * @see entity_get_bundles()
  * @see hook_entity_bundle_info_alter()
  */
@@ -715,6 +717,8 @@ function hook_entity_bundle_info() {
  * @param array $bundles
  *   An array of bundles, keyed first by entity type, then by bundle name.
  *
+ * @see \Drupal\Core\Entity\EntityManagerInterface::getBundleInfo()
+ * @see \Drupal\Core\Entity\EntityManagerInterface::getAllBundleInfo()
  * @see entity_get_bundles()
  * @see hook_entity_bundle_info()
  */
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
index 6201c52..d03acda 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
@@ -159,7 +159,7 @@ protected function getAutocreateBundle() {
       else {
         // @todo Expose a proper UI for choosing the bundle for autocreated
         // entities in https://www.drupal.org/node/2412569.
-        $bundles = entity_get_bundles($this->getFieldSetting('target_type'));
+        $bundles = \Drupal::entityManager()->getBundleInfo($this->getFieldSetting('target_type'));
         $bundle = key($bundles);
       }
     }
diff --git a/core/modules/contact/contact.module b/core/modules/contact/contact.module
index 5d4c26b..6673232 100644
--- a/core/modules/contact/contact.module
+++ b/core/modules/contact/contact.module
@@ -59,7 +59,7 @@ function contact_entity_type_alter(array &$entity_types) {
  */
 function contact_entity_extra_field_info() {
   $fields = array();
-  foreach (array_keys(entity_get_bundles('contact_message')) as $bundle) {
+  foreach (array_keys(\Drupal::entityManager()->getBundleInfo('contact_message')) as $bundle) {
     $fields['contact_message'][$bundle]['form']['name'] = array(
       'label' => t('Sender name'),
       'description' => t('Text'),
diff --git a/core/modules/content_translation/content_translation.admin.inc b/core/modules/content_translation/content_translation.admin.inc
index 5623f75..23a28f6 100644
--- a/core/modules/content_translation/content_translation.admin.inc
+++ b/core/modules/content_translation/content_translation.admin.inc
@@ -90,7 +90,7 @@ function _content_translation_form_language_content_settings_form_alter(array &$
     $storage_definitions = $entity_type instanceof ContentEntityTypeInterface ? $entity_manager->getFieldStorageDefinitions($entity_type_id) : array();
 
     $entity_type_translatable = $content_translation_manager->isSupported($entity_type_id);
-    foreach (entity_get_bundles($entity_type_id) as $bundle => $bundle_info) {
+    foreach (\Drupal::entityManager()->getBundleInfo($entity_type_id) as $bundle => $bundle_info) {
       // Here we do not want the widget to be altered and hold also the "Enable
       // translation" checkbox, which would be redundant. Hence we add this key
       // to be able to skip alterations. Alter the title and display the message
diff --git a/core/modules/content_translation/content_translation.module b/core/modules/content_translation/content_translation.module
index 3b29ecc..e9869ab 100644
--- a/core/modules/content_translation/content_translation.module
+++ b/core/modules/content_translation/content_translation.module
@@ -338,8 +338,9 @@ function content_translation_language_fallback_candidates_entity_view_alter(&$ca
 function content_translation_entity_extra_field_info() {
   $extra = array();
 
-  foreach (\Drupal::entityManager()->getDefinitions() as $entity_type => $info) {
-    foreach (entity_get_bundles($entity_type) as $bundle => $bundle_info) {
+  $entity_manager = \Drupal::entityManager();
+  foreach ($entity_manager->getDefinitions() as $entity_type => $info) {
+    foreach ($entity_manager->getBundleInfo($entity_type) as $bundle => $bundle_info) {
       if (\Drupal::service('content_translation.manager')->isEnabled($entity_type, $bundle)) {
         $extra[$entity_type][$bundle]['form']['translation'] = array(
           'label' => t('Translation'),
diff --git a/core/modules/entity_reference/src/Tests/EntityReferenceAdminTest.php b/core/modules/entity_reference/src/Tests/EntityReferenceAdminTest.php
index 6c72d49..cadc046 100644
--- a/core/modules/entity_reference/src/Tests/EntityReferenceAdminTest.php
+++ b/core/modules/entity_reference/src/Tests/EntityReferenceAdminTest.php
@@ -88,7 +88,7 @@ public function testFieldAdminHandler() {
 
     // The base handler settings should be displayed.
     $entity_type_id = 'node';
-    $bundles = entity_get_bundles($entity_type_id);
+    $bundles = $this->container->get('entity.manager')->getBundleInfo($entity_type_id);
     foreach ($bundles as $bundle_name => $bundle_info) {
       $this->assertFieldByName('settings[handler_settings][target_bundles][' . $bundle_name . ']');
     }
diff --git a/core/modules/field_ui/src/FieldStorageConfigListBuilder.php b/core/modules/field_ui/src/FieldStorageConfigListBuilder.php
index 6e74442..6170e11 100644
--- a/core/modules/field_ui/src/FieldStorageConfigListBuilder.php
+++ b/core/modules/field_ui/src/FieldStorageConfigListBuilder.php
@@ -65,7 +65,7 @@ public function __construct(EntityTypeInterface $entity_type, EntityManagerInter
     parent::__construct($entity_type, $entity_manager->getStorage($entity_type->id()));
 
     $this->entityManager = $entity_manager;
-    $this->bundles = entity_get_bundles();
+    $this->bundles = $entity_manager->getAllBundleInfo();
     $this->fieldTypeManager = $field_type_manager;
     $this->fieldTypes = $this->fieldTypeManager->getDefinitions();
   }
diff --git a/core/modules/node/src/Plugin/views/wizard/Node.php b/core/modules/node/src/Plugin/views/wizard/Node.php
index 53271b8..919234a 100644
--- a/core/modules/node/src/Plugin/views/wizard/Node.php
+++ b/core/modules/node/src/Plugin/views/wizard/Node.php
@@ -220,7 +220,7 @@ protected function buildFilters(&$form, FormStateInterface $form_state) {
     // entities. If a particular entity type (i.e., bundle) has been
     // selected above, then we only search for taxonomy fields associated
     // with that bundle. Otherwise, we use all bundles.
-    $bundles = array_keys(entity_get_bundles($this->entityTypeId));
+    $bundles = array_keys(\Drupal::entityManager()->getBundleInfo($this->entityTypeId));
     // Double check that this is a real bundle before using it (since above
     // we added a dummy option 'all' to the bundle list on the form).
     if (isset($selected_bundle) && in_array($selected_bundle, $bundles)) {
diff --git a/core/modules/rest/src/LinkManager/TypeLinkManager.php b/core/modules/rest/src/LinkManager/TypeLinkManager.php
index 3c9f665..169e4cc 100644
--- a/core/modules/rest/src/LinkManager/TypeLinkManager.php
+++ b/core/modules/rest/src/LinkManager/TypeLinkManager.php
@@ -110,7 +110,7 @@ protected function writeCache($context = array()) {
     // Type URIs correspond to bundles. Iterate through the bundles to get the
     // URI and data for them.
     $entity_types = \Drupal::entityManager()->getDefinitions();
-    foreach (entity_get_bundles() as $entity_type_id => $bundles) {
+    foreach (\Drupal::entityManager()->getAllBundleInfo() as $entity_type_id => $bundles) {
       // Only content entities are supported currently.
       // @todo Consider supporting config entities.
       if ($entity_types[$entity_type_id]->isSubclassOf('\Drupal\Core\Config\Entity\ConfigEntityInterface')) {
diff --git a/core/modules/taxonomy/src/Tests/VocabularyCrudTest.php b/core/modules/taxonomy/src/Tests/VocabularyCrudTest.php
index 1c174d4..6e0c26c 100644
--- a/core/modules/taxonomy/src/Tests/VocabularyCrudTest.php
+++ b/core/modules/taxonomy/src/Tests/VocabularyCrudTest.php
@@ -165,9 +165,9 @@ function testTaxonomyVocabularyChangeMachineName() {
     $this->vocabulary->save();
 
     // Check that entity bundles are properly updated.
-    $info = entity_get_bundles('taxonomy_term');
-    $this->assertFalse(isset($info[$old_name]), 'The old bundle name does not appear in entity_get_bundles().');
-    $this->assertTrue(isset($info[$new_name]), 'The new bundle name appears in entity_get_bundles().');
+    $info = $this->container->get('entity.manager')->getBundleInfo('taxonomy_term');
+    $this->assertFalse(isset($info[$old_name]), 'The old bundle name does not appear in getBundleInfo().');
+    $this->assertTrue(isset($info[$new_name]), 'The new bundle name appears in getBundleInfo().');
 
     // Check that the field is still attached to the vocabulary.
     $this->assertTrue(FieldConfig::loadByName('taxonomy_term', $new_name, 'field_test'), 'The bundle name was updated correctly.');
diff --git a/core/modules/views/src/Plugin/views/filter/Bundle.php b/core/modules/views/src/Plugin/views/filter/Bundle.php
index e328dfc..9a86203 100644
--- a/core/modules/views/src/Plugin/views/filter/Bundle.php
+++ b/core/modules/views/src/Plugin/views/filter/Bundle.php
@@ -89,7 +89,7 @@ public function init(ViewExecutable $view, DisplayPluginBase $display, array &$o
    */
   public function getValueOptions() {
     if (!isset($this->valueOptions)) {
-      $types = entity_get_bundles($this->entityTypeId);
+      $types = $this->entityManager->getBundleInfo($this->entityTypeId);
       $this->valueTitle = $this->t('@entity types', array('@entity' => $this->entityType->getLabel()));
 
       $options = array();
diff --git a/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php b/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
index 946d752..c14af48 100644
--- a/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
+++ b/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
@@ -59,7 +59,7 @@
   protected $entityTypeId;
 
   /**
-   * Contains the information from entity_get_info of the $entity_type.
+   * Contains the information from getBundleInfo() of the $entity_type.
    *
    * @var \Drupal\Core\Entity\EntityTypeInterface
    */
@@ -591,7 +591,7 @@ protected function rowStyleOptions() {
   protected function buildFilters(&$form, FormStateInterface $form_state) {
     module_load_include('inc', 'views_ui', 'admin');
 
-    $bundles = entity_get_bundles($this->entityTypeId);
+    $bundles = \Drupal::entityManager()->getBundleInfo($this->entityTypeId);
     // If the current base table support bundles and has more than one (like user).
     if (!empty($bundles) && $this->entityType && $this->entityType->hasKey('bundle')) {
       // Get all bundles and their human readable names.
diff --git a/core/modules/views/src/Tests/Entity/FilterEntityBundleTest.php b/core/modules/views/src/Tests/Entity/FilterEntityBundleTest.php
index 808c8a4..7bab5a2 100644
--- a/core/modules/views/src/Tests/Entity/FilterEntityBundleTest.php
+++ b/core/modules/views/src/Tests/Entity/FilterEntityBundleTest.php
@@ -54,7 +54,7 @@ protected function setUp() {
 
     ViewTestData::createTestViews(get_class($this), array('views_test_config'));
 
-    $this->entityBundles = entity_get_bundles('node');
+    $this->entityBundles = $this->container->get('entity.manager')->getBundleInfo('node');
 
     $this->entities['count'] = 0;
 
