 jsonapi.services.yml                               |  8 ++++----
 src/Configuration/ResourceManager.php              | 17 ----------------
 src/Configuration/ResourceManagerInterface.php     | 19 ------------------
 src/Normalizer/EntityNormalizer.php                | 23 +++++++++++++++-------
 src/Normalizer/EntityReferenceFieldNormalizer.php  | 19 +++++++++++++-----
 .../JsonApiDocumentTopLevelNormalizer.php          | 20 +++++++++++++------
 .../Kernel/Configuration/ResourceManagerTest.php   | 10 ----------
 .../Unit/Normalizer/ConfigEntityNormalizerTest.php |  4 +++-
 .../EntityReferenceFieldNormalizerTest.php         | 16 ++++++---------
 .../JsonApiDocumentTopLevelNormalizerTest.php      |  4 ++--
 tests/src/Unit/Routing/RoutesTest.php              |  1 -
 11 files changed, 59 insertions(+), 82 deletions(-)

diff --git a/jsonapi.services.yml b/jsonapi.services.yml
index 9f478ab..4811e3c 100644
--- a/jsonapi.services.yml
+++ b/jsonapi.services.yml
@@ -18,7 +18,7 @@ services:
       - { name: normalizer, priority: 21 }
   serializer.normalizer.entity_reference_field.jsonapi:
     class: Drupal\jsonapi\Normalizer\EntityReferenceFieldNormalizer
-    arguments: ['@jsonapi.link_manager', '@entity_field.manager', '@plugin.manager.field.field_type', '@jsonapi.resource.manager']
+    arguments: ['@jsonapi.link_manager', '@entity_field.manager', '@plugin.manager.field.field_type', '@jsonapi.resource.manager', '@entity.repository']
     tags:
       - { name: normalizer, priority: 31 }
   serializer.normalizer.relationship.jsonapi:
@@ -28,17 +28,17 @@ services:
       - { name: normalizer, priority: 21 }
   serializer.normalizer.entity.jsonapi:
     class: Drupal\jsonapi\Normalizer\ContentEntityNormalizer
-    arguments: ['@jsonapi.link_manager', '@jsonapi.current_context']
+    arguments: ['@jsonapi.link_manager', '@jsonapi.current_context', '@entity_type.manager']
     tags:
       - { name: normalizer, priority: 21 }
   serializer.normalizer.config_entity.jsonapi:
     class: Drupal\jsonapi\Normalizer\ConfigEntityNormalizer
-    arguments: ['@jsonapi.link_manager', '@jsonapi.current_context']
+    arguments: ['@jsonapi.link_manager', '@jsonapi.current_context', '@entity_type.manager']
     tags:
       - { name: normalizer, priority: 21 }
   serializer.normalizer.jsonapi_document_toplevel.jsonapi:
     class: Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer
-    arguments: ['@jsonapi.link_manager', '@jsonapi.current_context']
+    arguments: ['@jsonapi.link_manager', '@jsonapi.current_context', '@entity_type.manager']
     tags:
       - { name: normalizer, priority: 22 }
   serializer.normalizer.htt_exception.jsonapi:
diff --git a/src/Configuration/ResourceManager.php b/src/Configuration/ResourceManager.php
index 983774a..11f7fba 100644
--- a/src/Configuration/ResourceManager.php
+++ b/src/Configuration/ResourceManager.php
@@ -85,21 +85,4 @@ class ResourceManager implements ResourceManagerInterface {
     return NULL;
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function getEntityTypeManager() {
-    return $this->entityTypeManager;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function hasBundle($entity_type_id) {
-    return (bool) $this->getEntityTypeManager()
-      ->getDefinition($entity_type_id)
-      ->getBundleEntityType();
-  }
-
-
 }
diff --git a/src/Configuration/ResourceManagerInterface.php b/src/Configuration/ResourceManagerInterface.php
index 60dad9a..2d8e741 100644
--- a/src/Configuration/ResourceManagerInterface.php
+++ b/src/Configuration/ResourceManagerInterface.php
@@ -31,23 +31,4 @@ interface ResourceManagerInterface {
    */
   public function get($entity_type_id, $bundle_id);
 
-  /**
-   * Get the entity type manager.
-   *
-   * @return \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
-   *   The entity type manager.
-   */
-  public function getEntityTypeManager();
-
-  /**
-   * Entity type has a bundle.
-   *
-   * @param string $entity_type_id
-   *   The entity type ID.
-   *
-   * @return bool
-   *   TRUE if the provided entity type has a bundle.
-   */
-  public function hasBundle($entity_type_id);
-
 }
diff --git a/src/Normalizer/EntityNormalizer.php b/src/Normalizer/EntityNormalizer.php
index 0fba062..af7225b 100644
--- a/src/Normalizer/EntityNormalizer.php
+++ b/src/Normalizer/EntityNormalizer.php
@@ -5,6 +5,7 @@ namespace Drupal\jsonapi\Normalizer;
 use Drupal\Core\Access\AccessibleInterface;
 use Drupal\Core\Cache\RefinableCacheableDependencyInterface;
 use Drupal\Core\Entity\ContentEntityInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Field\EntityReferenceFieldItemList;
 use Drupal\jsonapi\Configuration\ResourceConfigInterface;
 use Drupal\jsonapi\Context\CurrentContextInterface;
@@ -54,17 +55,27 @@ class EntityNormalizer extends NormalizerBase implements DenormalizerInterface,
   protected $currentContext;
 
   /**
+   * The entity type manager.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   */
+  protected $entityTypeManager;
+
+  /**
    * Constructs an ContentEntityNormalizer object.
    *
    * @param \Drupal\jsonapi\LinkManager\LinkManagerInterface $link_manager
    *   The link manager.
    * @param \Drupal\jsonapi\Context\CurrentContextInterface $current_context
    *   The current context.
+   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
+   *   The entity type manager.
    */
-  public function __construct(LinkManagerInterface $link_manager, CurrentContextInterface $current_context) {
+  public function __construct(LinkManagerInterface $link_manager, CurrentContextInterface $current_context, EntityTypeManagerInterface $entity_type_manager) {
     $this->linkManager = $link_manager;
     $this->currentContext = $current_context;
     $this->resourceManager = $current_context->getResourceManager();
+    $this->entityTypeManager = $entity_type_manager;
   }
 
   /**
@@ -131,18 +142,16 @@ class EntityNormalizer extends NormalizerBase implements DenormalizerInterface,
     }
     /* @var \Drupal\jsonapi\Configuration\ResourceConfigInterface $resource_config */
     $resource_config = $context['resource_config'];
+    $entity_type_id = $resource_config->getEntityTypeId();
     $bundle_id = $resource_config->getBundleId();
-    $bundle_key = $this->resourceManager
-      ->getEntityTypeManager()
-      ->getDefinition($resource_config->getEntityTypeId())
+    $bundle_key = $this->entityTypeManager->getDefinition($entity_type_id)
       ->getKey('bundle');
     if ($bundle_key && $bundle_id) {
       $data[$bundle_key] = $bundle_id;
     }
 
-    return $this->currentContext->getResourceManager()
-      ->getEntityTypeManager()
-      ->getStorage($resource_config->getEntityTypeId())->create($data);
+    return $this->entityTypeManager->getStorage($entity_type_id)
+      ->create($data);
   }
 
   /**
diff --git a/src/Normalizer/EntityReferenceFieldNormalizer.php b/src/Normalizer/EntityReferenceFieldNormalizer.php
index f8e0039..d786165 100644
--- a/src/Normalizer/EntityReferenceFieldNormalizer.php
+++ b/src/Normalizer/EntityReferenceFieldNormalizer.php
@@ -3,6 +3,8 @@
 namespace Drupal\jsonapi\Normalizer;
 
 use Drupal\Core\Entity\EntityFieldManagerInterface;
+use Drupal\Core\Entity\EntityRepositoryInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
 use Drupal\Core\Field\FieldTypePluginManagerInterface;
 use Drupal\Core\Field\TypedData\FieldItemDataDefinition;
@@ -46,6 +48,13 @@ class EntityReferenceFieldNormalizer extends FieldNormalizer implements Denormal
   protected $pluginManager;
 
   /**
+   * The entity repository.
+   *
+   * @var \Drupal\Core\Entity\EntityRepositoryInterface
+   */
+  protected $entityRepository;
+
+  /**
    * Instantiates a EntityReferenceFieldNormalizer object.
    *
    * @param \Drupal\jsonapi\LinkManager\LinkManagerInterface $link_manager
@@ -56,12 +65,15 @@ class EntityReferenceFieldNormalizer extends FieldNormalizer implements Denormal
    *   The plugin manager for fields.
    * @param \Drupal\jsonapi\Configuration\ResourceManagerInterface $resource_manager
    *   The resource manager.
+   * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository
+   *   The entity repository.
    */
-  public function __construct(LinkManagerInterface $link_manager, EntityFieldManagerInterface $field_manager, FieldTypePluginManagerInterface $plugin_manager, ResourceManagerInterface $resource_manager) {
+  public function __construct(LinkManagerInterface $link_manager, EntityFieldManagerInterface $field_manager, FieldTypePluginManagerInterface $plugin_manager, ResourceManagerInterface $resource_manager, EntityRepositoryInterface $entity_repository) {
     $this->linkManager = $link_manager;
     $this->fieldManager = $field_manager;
     $this->pluginManager = $plugin_manager;
     $this->resourceManager = $resource_manager;
+    $this->entityRepository = $entity_repository;
   }
 
   /**
@@ -118,10 +130,7 @@ class EntityReferenceFieldNormalizer extends FieldNormalizer implements Denormal
 
       // Load the entity by UUID.
       list($entity_type_id,) = explode('--', $value['type']);
-      $entities = $this->resourceManager->getEntityTypeManager()
-        ->getStorage($entity_type_id)
-        ->loadByProperties(['uuid' => $value['id']]);
-      $entity = reset($entities);
+      $entity = $this->entityRepository->loadEntityByUuid($entity_type_id, $value['id']);
       $value['id'] = $entity ? $entity->id() : NULL;
 
       return [$property_key => $value['id']];
diff --git a/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php b/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php
index cf68130..71f362b 100644
--- a/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php
+++ b/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\jsonapi\Normalizer;
 
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
 use Drupal\jsonapi\Context\CurrentContextInterface;
 use Drupal\jsonapi\Resource\EntityCollectionInterface;
@@ -39,16 +40,26 @@ class JsonApiDocumentTopLevelNormalizer extends NormalizerBase implements Denorm
   protected $currentContext;
 
   /**
+   * The entity type manager.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   */
+  protected $entityTypeManager;
+
+  /**
    * Constructs an ContentEntityNormalizer object.
    *
    * @param \Drupal\jsonapi\LinkManager\LinkManagerInterface $link_manager
    *   The link manager to get the links.
    * @param \Drupal\jsonapi\Context\CurrentContextInterface $current_context
    *   The current context.
+   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
+   *   The entity type manager.
    */
-  public function __construct(LinkManagerInterface $link_manager, CurrentContextInterface $current_context) {
+  public function __construct(LinkManagerInterface $link_manager, CurrentContextInterface $current_context, EntityTypeManagerInterface $entity_type_manager) {
     $this->linkManager = $link_manager;
     $this->currentContext = $current_context;
+    $this->entityTypeManager = $entity_type_manager;
   }
 
   /**
@@ -77,13 +88,10 @@ class JsonApiDocumentTopLevelNormalizer extends NormalizerBase implements Denorm
       $relationships = array_map(function ($relationship) {
         $id_list = array_column($relationship['data'], 'id');
         list($entity_type_id,) = explode('--', $relationship['data'][0]['type']);
-        $entity_storage = $this->currentContext->getResourceManager()
-          ->getEntityTypeManager()
-          ->getStorage($entity_type_id);
+        $entity_storage = $this->entityTypeManager->getStorage($entity_type_id);
         // In order to maintain the order ($delta) of the relationships, we need
         // to load the entities and explore the uuid value.
-        $related_entities = array_values($entity_storage
-          ->loadByProperties(['uuid' => $id_list]));
+        $related_entities = array_values($entity_storage->loadByProperties(['uuid' => $id_list]));
         $map = [];
         foreach ($related_entities as $related_entity) {
           $map[$related_entity->uuid()] = $related_entity->id();
diff --git a/tests/src/Kernel/Configuration/ResourceManagerTest.php b/tests/src/Kernel/Configuration/ResourceManagerTest.php
index 000a8d7..6ca6095 100644
--- a/tests/src/Kernel/Configuration/ResourceManagerTest.php
+++ b/tests/src/Kernel/Configuration/ResourceManagerTest.php
@@ -106,14 +106,4 @@ class ResourceManagerTest extends KernelTestBase {
     ];
   }
 
-  /**
-   * @covers ::hasBundle
-   */
-  public function testHasBundle() {
-    $this->assertTrue($this->resourceManager->hasBundle('node'));
-    $this->assertFalse($this->resourceManager->hasBundle('node_type'));
-    $this->assertFalse($this->resourceManager->hasBundle('date_format'));
-    $this->assertFalse($this->resourceManager->hasBundle('user'));
-  }
-
 }
diff --git a/tests/src/Unit/Normalizer/ConfigEntityNormalizerTest.php b/tests/src/Unit/Normalizer/ConfigEntityNormalizerTest.php
index 982d889..6420001 100644
--- a/tests/src/Unit/Normalizer/ConfigEntityNormalizerTest.php
+++ b/tests/src/Unit/Normalizer/ConfigEntityNormalizerTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\Tests\jsonapi\Unit\Normalizer;
 
 use Drupal\Core\Config\Entity\ConfigEntityInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\jsonapi\Configuration\ResourceConfig;
 use Drupal\jsonapi\Configuration\ResourceManagerInterface;
 use Drupal\jsonapi\Normalizer\ConfigEntityNormalizer;
@@ -49,7 +50,8 @@ class ConfigEntityNormalizerTest extends UnitTestCase {
 
     $this->normalizer = new ConfigEntityNormalizer(
       $link_manager->reveal(),
-      $current_context_manager->reveal()
+      $current_context_manager->reveal(),
+      $this->prophesize(EntityTypeManagerInterface::class)->reveal()
     );
 
     $normalizers = [new ScalarNormalizer()];
diff --git a/tests/src/Unit/Normalizer/EntityReferenceFieldNormalizerTest.php b/tests/src/Unit/Normalizer/EntityReferenceFieldNormalizerTest.php
index 7324340..ae48073 100644
--- a/tests/src/Unit/Normalizer/EntityReferenceFieldNormalizerTest.php
+++ b/tests/src/Unit/Normalizer/EntityReferenceFieldNormalizerTest.php
@@ -4,8 +4,7 @@ namespace Drupal\Tests\jsonapi\Unit\Normalizer;
 
 use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Entity\EntityStorageInterface;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Entity\EntityRepositoryInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Core\Field\FieldTypePluginManagerInterface;
@@ -77,22 +76,19 @@ class EntityReferenceFieldNormalizerTest extends UnitTestCase {
     $resource_manager->get('fake_entity_type', 'dummy_bundle')
       ->willReturn(new ResourceConfig('lorem', 'dummy_bundle', NULL));
 
-    $entity_storage = $this->prophesize(EntityStorageInterface::class);
     $entity = $this->prophesize(EntityInterface::class);
     $entity->uuid()->willReturn('4e6cb61d-4f04-437f-99fe-42c002393658');
     $entity->id()->willReturn(42);
-    $entity_storage->loadByProperties(Argument::type('array'))
-      ->willReturn([$entity->reveal()]);
-    $entity_type_manager = $this->prophesize(EntityTypeManagerInterface::class);
-    $entity_type_manager->getStorage('lorem')
-      ->willReturn($entity_storage->reveal());
-    $resource_manager->getEntityTypeManager()->willReturn($entity_type_manager->reveal());
+    $entity_repository = $this->prophesize(EntityRepositoryInterface::class);
+    $entity_repository->loadEntityByUuid('lorem', '4e6cb61d-4f04-437f-99fe-42c002393658')
+      ->willReturn($entity->reveal());
 
     $this->normalizer = new EntityReferenceFieldNormalizer(
       $link_manager->reveal(),
       $field_manager->reveal(),
       $plugin_manager->reveal(),
-      $resource_manager->reveal()
+      $resource_manager->reveal(),
+      $entity_repository->reveal()
     );
   }
 
diff --git a/tests/src/Unit/Normalizer/JsonApiDocumentTopLevelNormalizerTest.php b/tests/src/Unit/Normalizer/JsonApiDocumentTopLevelNormalizerTest.php
index 541e549..e242867 100644
--- a/tests/src/Unit/Normalizer/JsonApiDocumentTopLevelNormalizerTest.php
+++ b/tests/src/Unit/Normalizer/JsonApiDocumentTopLevelNormalizerTest.php
@@ -65,7 +65,6 @@ class JsonApiDocumentTopLevelNormalizerTest extends UnitTestCase {
     $entity_type_manager->getStorage('node')
       ->willReturn($entity_storage->reveal());
     $resource_manager = $this->prophesize(ResourceManagerInterface::class);
-    $resource_manager->getEntityTypeManager()->willReturn($entity_type_manager->reveal());
     $current_context_manager->getResourceManager()->willReturn($resource_manager->reveal());
 
     $current_route = $this->prophesize(Route::class);
@@ -75,7 +74,8 @@ class JsonApiDocumentTopLevelNormalizerTest extends UnitTestCase {
 
     $this->normalizer = new JsonApiDocumentTopLevelNormalizer(
       $link_manager->reveal(),
-      $current_context_manager->reveal()
+      $current_context_manager->reveal(),
+      $entity_type_manager->reveal()
     );
 
     $serializer = $this->prophesize(DenormalizerInterface::class);
diff --git a/tests/src/Unit/Routing/RoutesTest.php b/tests/src/Unit/Routing/RoutesTest.php
index 0d0b1cb..1cd8c4b 100644
--- a/tests/src/Unit/Routing/RoutesTest.php
+++ b/tests/src/Unit/Routing/RoutesTest.php
@@ -36,7 +36,6 @@ class RoutesTest extends UnitTestCase {
     parent::setUp();
     // Mock the resource manager to have some resources available.
     $resource_manager = $this->prophesize(ResourceManagerInterface::class);
-    $resource_manager->hasBundle('entity_type_1')->willReturn(TRUE);
     $resource_manager->all()->willReturn([new ResourceConfig('entity_type_1', 'bundle_1_1', EntityInterface::class)]);
     $container = $this->prophesize(ContainerInterface::class);
     $container->get('jsonapi.resource.manager')->willReturn($resource_manager->reveal());
