diff --git a/islandora.services.yml b/islandora.services.yml
index 74725d80..0843c028 100644
--- a/islandora.services.yml
+++ b/islandora.services.yml
@@ -54,7 +54,7 @@ services:
     arguments: ['@entity_type.manager', '@current_user', '@language_manager', '@file_system', '@islandora.utils']
   islandora.utils:
     class: Drupal\islandora\IslandoraUtils
-    arguments: ['@entity_type.manager', '@entity_field.manager', '@context.manager', '@flysystem_factory', '@language_manager']
+    arguments: ['@entity_type.manager', '@entity_field.manager', '@context.manager', '@flysystem_factory', '@language_manager', '@cache.data', '@current_user']
   islandora.entity_mapper:
     class: Islandora\EntityMapper\EntityMapper
   islandora.stomp.auth_header_listener:
diff --git a/src/IslandoraUtils.php b/src/IslandoraUtils.php
index a2df7589..a026ac18 100644
--- a/src/IslandoraUtils.php
+++ b/src/IslandoraUtils.php
@@ -3,6 +3,9 @@
 namespace Drupal\islandora;
 
 use Drupal\context\ContextManager;
+use Drupal\Component\Utility\Html;
+use Drupal\Core\Cache\Cache;
+use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Entity\EntityInterface;
@@ -10,6 +13,7 @@ use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Entity\Query\QueryException;
 use Drupal\Core\Entity\Query\QueryInterface;
 use Drupal\Core\Language\LanguageManagerInterface;
+use Drupal\Core\Session\AccountProxyInterface;
 use Drupal\Core\Site\Settings;
 use Drupal\Core\Url;
 use Drupal\file\FileInterface;
@@ -70,6 +74,20 @@ class IslandoraUtils {
    */
   protected $languageManager;
 
+  /**
+   * Cache backend.
+   *
+   * @var \Drupal\Core\Cache\CacheBackendInterface
+   */
+  protected $cache;
+
+  /**
+   * Current user.
+   *
+   * @var \Drupal\Core\Session\AccountProxyInterface
+   */
+  protected $currentUser;
+
   /**
    * Constructor.
    *
@@ -83,19 +101,27 @@ class IslandoraUtils {
    *   Flysystem factory.
    * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
    *   Language manager.
+   * @param \Drupal\Core\Cache\CacheBackendInterface $cache
+   *   Cache backend.
+   * @param \Drupal\Core\Session\AccountProxyInterface $current_user
+   *   Current user account.
    */
   public function __construct(
     EntityTypeManagerInterface $entity_type_manager,
     EntityFieldManagerInterface $entity_field_manager,
     ContextManager $context_manager,
     FlysystemFactory $flysystem_factory,
-    LanguageManagerInterface $language_manager
+    LanguageManagerInterface $language_manager,
+    CacheBackendInterface $cache,
+    AccountProxyInterface $current_user
   ) {
     $this->entityTypeManager = $entity_type_manager;
     $this->entityFieldManager = $entity_field_manager;
     $this->contextManager = $context_manager;
     $this->flysystemFactory = $flysystem_factory;
     $this->languageManager = $language_manager;
+    $this->cache = $cache;
+    $this->currentUser = $current_user;
   }
 
   /**
@@ -235,6 +261,19 @@ class IslandoraUtils {
    *   Calling getStorage() throws if the storage handler couldn't be loaded.
    */
   public function getTermForUri($uri) {
+
+    $cid_parts = [
+      'islandora',
+      'term-for-uri',
+      'user-' . $this->currentUser->id(),
+      'uri-' . Html::getClass($uri),
+    ];
+    $cid = implode(':', $cid_parts);
+
+    if ($cache = $this->cache->get($cid)) {
+      return $cache->data;
+    }
+
     // Get authority link fields to search.
     $field_map = $this->entityFieldManager->getFieldMap();
     $fields = [];
@@ -258,12 +297,19 @@ class IslandoraUtils {
       ->condition($orGroup)
       ->execute();
 
-    if (empty($results)) {
-      return NULL;
+    $term = NULL;
+    if (!empty($results)) {
+      $term = $this->entityTypeManager->getStorage('taxonomy_term')
+        ->load(reset($results));
+      $this->cache->set(
+        $cid,
+        $term,
+        CacheBackendInterface::CACHE_PERMANENT,
+        Cache::mergeTags(array_merge($term->getCacheTags(), ['user:' . $this->currentUser->id()]))
+      );
     }
 
-    return $this->entityTypeManager->getStorage('taxonomy_term')
-      ->load(reset($results));
+    return $term;
   }
 
   /**