diff --git a/local/config/vufind/config.ini b/local/config/vufind/config.ini
index be6fd603ce9b01c28bcdd32c6fb084df72461362..336c633977e56d3869521d78678d4a0b6cff5afd 100644
--- a/local/config/vufind/config.ini
+++ b/local/config/vufind/config.ini
@@ -99,7 +99,7 @@ showBookBag = true
 ; Set the maximum amount of items allowed in the Book Bag - Default is 100
 bookBagMaxSize = 20
 ; Display bulk items (export, save, etc.) and checkboxes on search result screens?
-showBulkOptions = false
+showBulkOptions = true
 ; Should users be allowed to save searches in their accounts?
 allowSavedSearches = true
 ; Generator value to display in an HTML header <meta> tag:
diff --git a/local/languages/de.ini b/local/languages/de.ini
index b9ce710d22e612e56cbf143f87cb22df229c2840..29ae8c90af51aed7880a7919bebfb4fabd72158d 100644
--- a/local/languages/de.ini
+++ b/local/languages/de.ini
@@ -2041,3 +2041,12 @@ form-button-submit = "Ausgefülltes Formular abschicken"
 
 ; #17601
 offcanvas-toggler-search-tips = "Suchtipps einblenden"
+
+; #18019 remove if using VuFind 7.0
+select_item = "Titel auswählen"
+
+; #17993
+; only for German translation
+Email = "Mailen"
+Print = "Drucken"
+bookbag_email_selected = "Links zu ausgewählten Medien per E-Mail versenden"
diff --git a/local/languages/en.ini b/local/languages/en.ini
index 791449b2a2f9be5e9712e720fd81d4a2aee980e5..962d249c742cb4d301349c47973d00dd95cf1a62 100644
--- a/local/languages/en.ini
+++ b/local/languages/en.ini
@@ -2129,3 +2129,6 @@ form-button-submit = "Submit the completed form"
 
 ; #17601
 offcanvas-toggler-search-tips = "Show search help"
+
+; #18019 remove if using VuFind 7.0
+select_item = "Select item"
\ No newline at end of file
diff --git a/module/finc/src/finc/Cover/Loader.php b/module/finc/src/finc/Cover/Loader.php
index b67ff8ee24e3f877679eafc1cbee4f2ac09bfb07..672c93a651b7fbe559f76997257c65330d295b72 100644
--- a/module/finc/src/finc/Cover/Loader.php
+++ b/module/finc/src/finc/Cover/Loader.php
@@ -41,6 +41,8 @@ namespace finc\Cover;
  */
 class Loader extends \VuFind\Cover\Loader
 {
+    const EMPTY_IMAGE_CONTENT = 'nothing here';
+
     /**
      * Flag denoting the last loaded image was a FailImage
      *
@@ -57,9 +59,26 @@ class Loader extends \VuFind\Cover\Loader
     public function loadUnavailable()
     {
         $this->hasLoadedUnavailable = true;
+        file_put_contents($this->localFile,self::EMPTY_IMAGE_CONTENT);
         return parent::loadUnavailable();
     }
 
+    public function loadImage($settings = [])
+    {
+        parent::loadImage($settings);
+        if ($this->image === self::EMPTY_IMAGE_CONTENT) {
+            $this->hasLoadedUnavailable = true;
+        }
+    }
+
+    public function getImage()
+    {
+        if ($this->image === self::EMPTY_IMAGE_CONTENT) {
+            $this->hasLoadedUnavailable = true;
+        }
+        return parent::getImage();
+    }
+
     /**
      * Returns true if the last loaded image was the FailImage
      *
diff --git a/module/finc/src/finc/Cover/Router.php b/module/finc/src/finc/Cover/Router.php
index 8a758f27c9f6adb72c488431ee3a4584026c9fb0..5cc789f6855650b7008b42f843917db92cbeaac2 100644
--- a/module/finc/src/finc/Cover/Router.php
+++ b/module/finc/src/finc/Cover/Router.php
@@ -98,10 +98,8 @@ class Router implements \Zend\Log\LoggerAwareInterface
             if (!$resolveDynamic) {
                 return null;
             }
-            $settings = is_array($thumb) ? array_merge($thumb, ['size' => $size])
-                : ['size' => $size];
             if ($testLoadImage) {
-                $this->coverLoader->loadImage($settings);
+                $this->coverLoader->loadImage(array_merge($thumb, ['size' => $size]));
                 if ($this->coverLoader->hasLoadedUnavailable()) {
                     return false;
                 }
diff --git a/themes/bootstrap3/templates/record/checkbox.phtml b/themes/bootstrap3/templates/record/checkbox.phtml
index 7c37bb0ab2482b8e6e321128dd30ed6fc4f77ac6..750c00fea0667df5b8b9cead6dba29d2097fd554 100644
--- a/themes/bootstrap3/templates/record/checkbox.phtml
+++ b/themes/bootstrap3/templates/record/checkbox.phtml
@@ -1,5 +1,5 @@
 <label class="record-checkbox hidden-print">
-  <input class="checkbox-select-item" type="checkbox" name="ids[]" value="<?=$this->escapeHtmlAttr($this->id) ?>"<?php if(isset($this->formAttr)): ?> form="<?=$this->formAttr ?>"<?php endif; ?>/>
+  <input class="checkbox-select-item" type="checkbox" name="ids[]" value="<?=$this->escapeHtmlAttr($this->id)?>"<?php if(isset($this->formAttr)): ?> form="<?=$this->formAttr ?>"<?php endif; ?>/>
   <span class="checkbox-icon"></span>
   <?php if (strlen($this->number ?? '') > 0): ?><span class="sr-only"><?=$this->transEsc('result_checkbox_label', ['%%number%%' => $this->number]) ?></span><?php endif; ?>
 </label>
diff --git a/themes/finc/scss/compiled.scss b/themes/finc/scss/compiled.scss
index 5c153ecaaef943a9932ed4c81a5b2bf78bc2db71..6870670f53221c7761a4047a1b77b927fd30dc9a 100644
--- a/themes/finc/scss/compiled.scss
+++ b/themes/finc/scss/compiled.scss
@@ -2309,9 +2309,11 @@ footer {
 // MAIN CONTENT - END
 
 // SIDEBAR
-// Width when offcanvas if off
+// Width when offcanvas is off
 body:not(.offcanvas) .sidebar {
-  width: 100%;
+  @media only screen and (max-width: $screen-xs-max) {
+    width: 100%;
+  }
 }
 
 //// pull content to right border for sidebar right
diff --git a/themes/finc/templates/RecordDriver/DefaultRecord/list-entry.phtml b/themes/finc/templates/RecordDriver/DefaultRecord/list-entry.phtml
index 991ba371499a349bff31bede9361361cf666133e..cc628b48a0c4ff22cf1488a09c1c4a77cd1af1cb 100644
--- a/themes/finc/templates/RecordDriver/DefaultRecord/list-entry.phtml
+++ b/themes/finc/templates/RecordDriver/DefaultRecord/list-entry.phtml
@@ -37,17 +37,18 @@ if ($cover):
       <div class="result-body">
         <div class="resultItemLine1">
           <?php $missing = $this->driver instanceof \VuFind\RecordDriver\Missing; ?>
+          <?php $describedById = $driver->getSourceIdentifier() . '|' . $driver->getUniqueId(); ?>
             <?php if ($missing && $this->driver->isCachedRecord()): ?>
-                <span class="title"><?=$this->record($this->driver)->getTitleHtml()?></span>
+                <span id="<?=$describedById?>" class="title"><?=$this->record($this->driver)->getTitleHtml()?></span>
                 <p class="alert alert-info">
                     <?= $this->translate('record_from_cache')?>
                     <?php if ($queryParams = $this->record($this->driver)->getAdvancedSearchQueryParams()): ?>
-                        <br/><a href="<?=$this->url('search-results', [], ['query'=>$queryParams])?>"><?=$this->transEsc('search_cached_record', ['%%title_full%%' => $this->driver->getTitle()])?></a>
+                        <br/><a href="<?=$this->url('search-results', [], ['query' => $queryParams])?>"><?=$this->transEsc('search_cached_record', ['%%title_full%%' => $this->driver->getTitle()])?></a>
                     <?php endif; ?>
                 </p>
             <?php elseif (!$missing): ?>
                 <a href="<?=$this->recordLink()->getUrl($this->driver)?>" class="getFull" data-view="<?=$this->params->getOptions()->getListViewOption() ?>">
-                    <span class="title"><?=$this->record($this->driver)->getTitleHtml()?></span>
+                    <span id="<?=$describedById?>" class="title"><?=$this->record($this->driver)->getTitleHtml()?></span>
                 </a>
             <?php endif;?>
         </div>
@@ -200,7 +201,7 @@ if ($cover):
         <?php if ($isEditable): ?>
           <i class="fa fa-fw fa-edit" aria-hidden="true"></i> <a
             href="<?=$this->url('myresearch-edit')?>?id=<?=urlencode($id)?>&amp;source=<?=urlencode($source)?><?php if (null !== $list_id): ?>&amp;list_id=<?=urlencode($list_id)?><?php endif; ?>"
-            class="edit tool"><?=$this->transEsc('Edit')?></a><br/>
+            class="edit tool" aria-label="<?=$this->transEsc('Edit').': '.$this->record($this->driver)->getTitleHtml()?>"><?=$this->transEsc('Edit')?></a><br/>
           <?php /* Use a different delete URL if we're removing from a specific list or the overall favorites: */
           $deleteUrl = null === $list_id
             ? $this->url('myresearch-favorites')
@@ -215,7 +216,7 @@ if ($cover):
             <i class="fa fa-fw fa-trash-o" aria-hidden="true"></i>
             <a class="dropdown-toggle del-button" id="<?= $dLabel ?>"
                role="button" data-toggle="dropdown"
-               href="<?= $deleteUrlGet ?>">
+               href="<?= $deleteUrlGet ?>" aria-label="<?=$this->transEsc('Delete').': '.$this->record($this->driver)->getTitleHtml()?>">
               <?= $this->transEsc('Delete') ?>
             </a>
             <ul class="dropdown-menu" role="menu" aria-labelledby="<?= $dLabel ?>">
diff --git a/themes/finc/templates/RecordDriver/FincMissing/result-list.phtml b/themes/finc/templates/RecordDriver/FincMissing/result-list.phtml
index ac12afe218d6bbb6d573191c4570de887a9b20cd..b21060414fe9f741847bb2c695b19086527eca64 100644
--- a/themes/finc/templates/RecordDriver/FincMissing/result-list.phtml
+++ b/themes/finc/templates/RecordDriver/FincMissing/result-list.phtml
@@ -1,12 +1,12 @@
 <!-- finc: recordDriver - FincMissing - result-list -->
 <?php /*
  this is mostly a copy of finc: recordDriver - DefaultRecord - result-list
- it is only used for the print view of FincMissingRecords in bulk mode
+ it is only used for the print view of FincMissingRecords in bulk mode;
+ Fixme: Please remove any code we don't need here! - CK
  */
 ?>
 
 <?php
-/* finc: compare SolrAI/result-list with this one during upgrades! - CK */
 $coverDetails = $this->record($this->driver)->getCoverDetails('result-list', 'medium', $this->recordLink()->getUrl($this->driver));
 $cover = $coverDetails['html'];
 $thumbnail = false;
@@ -21,7 +21,7 @@ if ($cover):
   <?php /* Show finc style-based icons; */ ?>
 <?php elseif ($this->record($this->driver)->showStyleBasedIcons()): ?>
   <?php ob_start(); ?>
-  <div class="media-<?=$thumbnailAlignment?> record-icon">
+  <div class="media-<?=$thumbnailAlignment?> record-icon missing">
     <?=$this->record($this->driver)->getRecordIcon()?>
   </div>
   <?php $thumbnail = ob_get_contents(); ?>
@@ -38,84 +38,18 @@ if ($cover):
   <div class="media-body">
     <div class="result-body">
       <div>
-        <a href="<?=$this->recordLink()->getUrl($this->driver)?>" class="title getFull" data-view="<?=$this->params->getOptions()->getListViewOption()?>">
+        <?php /* We don't use links for missing records as they would lead nowhere - CK */ ?>
+        <span href="<?=$this->recordLink()->getUrl($this->driver)?>" class="title getFull" data-view="<?=$this->params->getOptions()->getListViewOption()?>">
           <?=$this->record($this->driver)->getTitleHtml()?>
-        </a>
+        </span>
       </div>
 
-      <div>
-          <?php $summAuthors = $this->driver->getPrimaryAuthors();
-          if (!empty($summAuthors)): ?>
-            <?=$this->transEsc('by')?>
-            <?php $authorCount = count($summAuthors);
-            foreach ($summAuthors as $i => $summAuthor): ?>
-              <a href="<?=$this->record($this->driver)->getLink('author', $this->highlight($summAuthor, null, true, false))?>" class="author"><?=$this->highlight($summAuthor)?></a><?=$i + 1 < $authorCount ? ',' : ''?>
-            <?php endforeach; ?>
-          <?php endif; ?>
-          <?php
-          /* finc-specific from here, #8639, #7345 - CK */
-          /* finc-specific: nxt line #8639 - CK */ ?>
-          <?php $journalTitle = $this->driver->getContainerTitle();
-          $summDate = current($this->driver->getPublicationDates()); ?>
-          <?php if (!empty($journalTitle)): ?>
-            <?=!empty($summAuthor) ? '<br />' : ''?>
-            <?=$this->transEsc('Published in')?>
-            <?php $containerSource = $this->driver->getSourceIdentifier(); ?>
-            <?php $containerID = $this->driver->getContainerRecordID(); ?>
-            <?php /* TODO: handle highlighting more elegantly here: */ ?>
-            <a href="<?=($containerID ? $this->recordLink()->getUrl("$containerSource|$containerID") : $this->record($this->driver)->getLink('journaltitle', str_replace(['{{{{START_HILITE}}}}', '{{{{END_HILITE}}}}'], '', $journalTitle)))?>"><?=$this->highlight($journalTitle) ?></a>
-            <?php /* finc-specific: nxt line #8639 - CK */ ?>
-            <?=!empty($summDate) ? ' (' . $this->escapeHtml($summDate) . ')' : ''?>
-          <?php elseif (!empty($summDate)): ?>
-            <?=!empty($summAuthor) ? '<br />' : ''?>
-            <?php /* finc-specific: nxt line #8639 - CK */ ?>
-            <?=$this->transEsc('Published') . ' ' . $this->escapeHtml($summDate)?>
-          <?php endif; ?>
-          <?php $summInCollection = $this->driver->getContainingCollections();
-          if (!empty($summInCollection)): ?>
-            <?php foreach ($summInCollection as $collId => $collText): ?>
-              <div>
-                <strong><?=$this->transEsc("in_collection_label")?></strong>
-                <a class="collectionLinkText" href="<?=$this->url('collection', ['id' => $collId])?>?recordID=<?=urlencode($this->driver->getUniqueID())?>">
-                  <?=$this->escapeHtml($collText)?>
-                </a>
-              </div>
-            <?php endforeach; ?>
-          <?php endif; ?>
-      </div>
 
-      <?php $summCallNo = $this->driver->getCallNumber();
-        if (!empty($summCallNo)): ?>
-          <div class="callnumAndLocation">
-            <strong><?=$this->transEsc('Call Number')?>:</strong> <?=$this->escapeHtml($summCallNo)?>
-          </div>
-      <?php endif; ?>
+      <?php /* We don't display formats nor previews nor other details for missing records - CK */ ?>
 
-      <div class="result-formats">
-        <?=$this->record($this->driver)->getFormatList()?>
-      </div>
     </div>
     <div class="result-links hidden-print">
-      <?php /* Display qrcode if appropriate: */ ?>
-
-      <?php if ($this->cart()->isActiveInSearch() && $this->params->getOptions()->supportsCart() && $this->cart()->isActive()): ?>
-        <?=$this->render('record/cart-buttons.phtml', ['id' => $this->driver->getUniqueId(), 'source' => $this->driver->getSourceIdentifier()]);?><br/>
-      <?php endif; ?>
-
-      <?php if ($this->userlist()->getMode() !== 'disabled'): ?>
-        <?php if ($this->permission()->allowDisplay('feature.Favorites')): ?>
-          <?php /* Add to favorites; finc: keep Icon inside link - CK */ ?>
-          <a href="<?=$this->recordLink()->getActionUrl($this->driver, 'Save')?>" data-lightbox class="save-record result-link-label" data-id="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>" title="<?=$this->transEsc('Add to favorites')?>">
-            <i class="fa fa-fw fa-star" aria-hidden="true"></i> <span class="hidden-xs hidden-sm"><?=$this->transEsc('Add to favorites')?></span>
-          </a><br/>
-        <?php elseif ($block = $this->permission()->getAlternateContent('feature.Favorites')): ?>
-          <?=$block?>
-        <?php endif; ?>
-        <?php /* Saved lists */ ?>
-        <p class="savedLists alert alert-info hidden">
-          <strong><?=$this->transEsc("Saved in")?>:</strong>
-        </p>
-      <?php endif; ?>
+      <?php /* We don't display any interaction buttons for missing records - CK */ ?>
 
       <?=$this->driver->supportsCoinsOpenUrl() ? '<span class="Z3988" title="' . $this->escapeHtmlAttr($this->driver->getCoinsOpenUrl()) . '"></span>' : ''?>
     </div>
diff --git a/themes/finc/templates/cart/contents.phtml b/themes/finc/templates/cart/contents.phtml
index 2ececda64d0cd0f05fe5eecaf9328bb71a357bbf..1546577216b002f73c576f91678eea424fcd6b8a 100644
--- a/themes/finc/templates/cart/contents.phtml
+++ b/themes/finc/templates/cart/contents.phtml
@@ -7,7 +7,8 @@ if (!empty($records)): ?>
         <div class="checkbox">
           <label>
           <?=$this->record($record)->getCheckbox('cart')?>
-          <a title="<?=$this->transEsc('View Record')?>" href="<?=$this->recordLink()->getUrl($record)?>" data-lightbox-ignore><?=$this->escapeHtml($record->getBreadcrumb())?>
+          <?php $describedById = $record->getSourceIdentifier() . '|' . $record->getUniqueId(); ?>
+          <a id="<?=$describedById?>" title="<?=$this->transEsc('View Record')?>" href="<?=$this->recordLink()->getUrl($record)?>" data-lightbox-ignore><?=$this->escapeHtml($record->getBreadcrumb())?>
             <?php
             // finc-specific: Collect citation data:
             $helper = $this->citation($record);
diff --git a/themes/finc/templates/myresearch/checkedout.phtml b/themes/finc/templates/myresearch/checkedout.phtml
index a004ba5b0b99714875ad6e6b5e7f3c37da1807ee..94e915df201858d8068ee82e43261344d50ad37c 100644
--- a/themes/finc/templates/myresearch/checkedout.phtml
+++ b/themes/finc/templates/myresearch/checkedout.phtml
@@ -77,13 +77,14 @@
 
     <?php $i = 0; foreach ($this->transactions as $resource): ?>
       <?php $ilsDetails = $resource->getExtraDetail('ils_details'); ?>
+      <?php $describedById = $resource->getSourceIdentifier() . '|' . $resource->getUniqueId(); ?>
       <div id="record<?=$this->escapeHtmlAttr($resource->getUniqueId())?>" class="result">
         <?php if ($this->renewForm): ?>
           <div class="checkbox">
             <?php if (isset($ilsDetails['renewable']) && $ilsDetails['renewable'] && isset($ilsDetails['renew_details'])): ?>
               <?php $safeId = preg_replace('/[^a-zA-Z0-9]/', '', $ilsDetails['renew_details']); ?>
               <label>
-                <input class="checkbox-select-item" type="checkbox" name="renewSelectedIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['renew_details'])?>" id="checkbox_<?=$safeId?>" />
+                <input class="checkbox-select-item" type="checkbox" name="renewSelectedIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['renew_details'])?>" id="checkbox_<?=$safeId?>" aria-describedby="<?=$describedById?>" aria-label="<?=$this->transEsc('select_item')?>" />
               </label>
               <input type="hidden" name="selectAllIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['renew_details'])?>" />
               <input type="hidden" name="renewAllIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['renew_details'])?>" />
@@ -116,7 +117,7 @@
               if (is_a($resource, 'VuFind\\RecordDriver\\SolrDefault') && !is_a($resource, 'VuFind\\RecordDriver\\Missing')) {
                 $title = $resource->getTitle();
                 $title = empty($title) ? $this->transEsc('Title not available') : $this->escapeHtml($title);
-                echo '<a href="' . $this->recordLink()->getUrl($resource) .
+                echo '<a id="' .  $describedById . '" href="' . $this->recordLink()->getUrl($resource) .
                   '" class="title">' . $title . '</a>';
               } elseif (isset($ilsDetails['title']) && !empty($ilsDetails['title'])){
                 // If the record is not available in Solr, perhaps the ILS driver sent us a title we can show...
diff --git a/themes/finc/templates/myresearch/holds.phtml b/themes/finc/templates/myresearch/holds.phtml
index a56c24f8d94134a858957ccd987aff1025b45a7e..e145814611680b1ac82e7bdd4ab0e30880333240 100644
--- a/themes/finc/templates/myresearch/holds.phtml
+++ b/themes/finc/templates/myresearch/holds.phtml
@@ -45,13 +45,14 @@
     <?php foreach ($this->recordList as $resource): ?>
       <?php $iteration++; ?>
       <?php $ilsDetails = $resource->getExtraDetail('ils_details'); ?>
+      <?php $describedById = $resource->getSourceIdentifier() . '|' . $resource->getUniqueId(); ?>
       <div id="record<?=$this->escapeHtmlAttr($resource->getUniqueId()) ?>" class="result">
         <?php if ($this->cancelForm && isset($ilsDetails['cancel_details'])): ?>
           <?php $safeId = preg_replace('/[^a-zA-Z0-9]/', '', $resource->getUniqueId()); ?>
           <input type="hidden" name="cancelAllIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['cancel_details']) ?>" />
           <div class="checkbox">
             <label>
-              <input type="checkbox" name="cancelSelectedIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['cancel_details']) ?>" id="checkbox_<?=$safeId?>" />
+              <input type="checkbox" name="cancelSelectedIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['cancel_details']) ?>" id="checkbox_<?=$safeId?>" aria-describedby="<?=$describedById?>" aria-label="<?=$this->transEsc('select_item')?>" />
             </label>
           </div>
         <?php endif; ?>
@@ -79,11 +80,11 @@
               if (is_a($resource, 'VuFind\\RecordDriver\\SolrDefault') && !is_a($resource, 'VuFind\\RecordDriver\\Missing')) {
                 $title = $resource->getTitle();
                 $title = empty($title) ? $this->transEsc('Title not available') : $this->escapeHtml($title);
-                echo '<a href="' . $this->recordLink()->getUrl($resource)
+                echo '<a id="' . $describedById . '" href="' . $this->recordLink()->getUrl($resource)
                   . '" class="title">' . $title . '</a>';
               } elseif (isset($ilsDetails['title']) && !empty($ilsDetails['title'])){
                 // If the record is not available in Solr, perhaps the ILS driver sent us a title we can show...
-                echo '<span class="title">' . $this->escapeHtml($ilsDetails['title']) . '</span>';
+                echo '<span class="title" id="' . $describedById . '">' . $this->escapeHtml($ilsDetails['title']) . '</span>';
               } else {
                 // Last resort -- indicate that no title could be found.
                 echo $this->transEsc('Title not available');
diff --git a/themes/finc/templates/myresearch/illrequests.phtml b/themes/finc/templates/myresearch/illrequests.phtml
index 4fbba305d4d0dede164fcfc960c15ffe3152a89a..7c56bb1e6ce0678f8d0736bfeef7bac0a6874321 100644
--- a/themes/finc/templates/myresearch/illrequests.phtml
+++ b/themes/finc/templates/myresearch/illrequests.phtml
@@ -46,13 +46,14 @@
     <?php foreach ($this->recordList as $resource): ?>
       <?php $iteration++; ?>
       <?php $ilsDetails = $resource->getExtraDetail('ils_details'); ?>
+      <?php $describedById = $resource->getSourceIdentifier() . '|' . $resource->getUniqueId(); ?>
       <div id="record<?=$this->escapeHtmlAttr($resource->getUniqueId()) ?>" class="result">
         <?php if ($this->cancelForm && isset($ilsDetails['cancel_details'])): ?>
           <?php $safeId = preg_replace('/[^a-zA-Z0-9]/', '', $resource->getUniqueId()); ?>
           <div class="checkbox">
             <input type="hidden" name="cancelAllIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['cancel_details']) ?>" />
             <label>
-              <input type="checkbox" name="cancelSelectedIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['cancel_details']) ?>" id="checkbox_<?=$safeId?>" />
+              <input type="checkbox" name="cancelSelectedIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['cancel_details']) ?>" id="checkbox_<?=$safeId?>" aria-describedby="<?=$describedById?>" aria-label="<?=$this->transEsc('select_item')?>" />
             </label>
           </div>
         <?php endif; ?>
@@ -80,7 +81,7 @@
               if (is_a($resource, 'VuFind\\RecordDriver\\SolrDefault') && !is_a($resource, 'VuFind\\RecordDriver\\Missing')) {
                 $title = $resource->getTitle();
                 $title = empty($title) ? $this->transEsc('Title not available') : $this->escapeHtml($title);
-                echo '<a href="' . $this->recordLink()->getUrl($resource)
+                echo '<a id="' . $describedById . '" href="' . $this->recordLink()->getUrl($resource)
                   . '" class="title">' . $title . '</a>';
               } elseif (isset($ilsDetails['title']) && !empty($ilsDetails['title'])){
                 // If the record is not available in Solr, perhaps the ILS driver sent us a title we can show...
diff --git a/themes/finc/templates/myresearch/storageretrievalrequests.phtml b/themes/finc/templates/myresearch/storageretrievalrequests.phtml
index 115894920ccac17fe5a8bedf77c573d44f45e51a..8719b5f71ad15ea416d1fafebba1d604575e5781 100644
--- a/themes/finc/templates/myresearch/storageretrievalrequests.phtml
+++ b/themes/finc/templates/myresearch/storageretrievalrequests.phtml
@@ -45,13 +45,14 @@
     <?php foreach ($this->recordList as $resource): ?>
       <?php $iteration++; ?>
       <?php $ilsDetails = $resource->getExtraDetail('ils_details'); ?>
+      <?php $describedById = $resource->getSourceIdentifier() . '|' . $resource->getUniqueId(); ?>
       <div id="record<?=$this->escapeHtmlAttr($resource->getUniqueId()) ?>" class="result">
         <?php if ($this->cancelForm && isset($ilsDetails['cancel_details'])): ?>
           <?php $safeId = preg_replace('/[^a-zA-Z0-9]/', '', $resource->getUniqueId()); ?>
           <div class="checkbox">
             <input type="hidden" name="cancelAllIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['cancel_details']) ?>" />
             <label class="pull-left flip">
-              <input type="checkbox" name="cancelSelectedIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['cancel_details']) ?>" id="checkbox_<?=$safeId?>" />
+              <input type="checkbox" name="cancelSelectedIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['cancel_details']) ?>" id="checkbox_<?=$safeId?>"  aria-describedby="<?=$describedById?>" aria-label="<?=$this->transEsc('select_item')?>" />
             </label>
           </div>
         <?php endif; ?>
@@ -79,7 +80,7 @@
               if (is_a($resource, 'VuFind\\RecordDriver\\SolrDefault') && !is_a($resource, 'VuFind\\RecordDriver\\Missing')) {
                 $title = $resource->getTitle();
                 $title = empty($title) ? $this->transEsc('Title not available') : $this->escapeHtml($title);
-                echo '<a href="' . $this->recordLink()->getUrl($resource)
+                echo '<a id="' . $describedById . '" href="' . $this->recordLink()->getUrl($resource)
                   . '" class="title">' . $title . '</a>';
               } elseif (isset($ilsDetails['title']) && !empty($ilsDetails['title'])){
                 // If the record is not available in Solr, perhaps the ILS driver sent us a title we can show...
diff --git a/themes/finc/templates/record/checkbox.phtml b/themes/finc/templates/record/checkbox.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..4a77b03ba688132f05fb98d9ebb3c5b4e9b4d49d
--- /dev/null
+++ b/themes/finc/templates/record/checkbox.phtml
@@ -0,0 +1,8 @@
+<!-- finc: record - checkbox -->
+<label class="record-checkbox hidden-print">
+  <input class="checkbox-select-item" type="checkbox" name="ids[]" value="<?=$this->id?>"<?php if(isset($this->formAttr)): ?> form="<?=$this->formAttr ?>"<?php endif; ?> aria-describedby="<?=$this->id?>" aria-label="<?=$this->transEsc('select_item')?>"/>
+  <span class="checkbox-icon"></span>
+  <?php if (strlen($this->number ?? '') > 0): ?><span class="sr-only"><?=$this->transEsc('result_checkbox_label', ['%%number%%' => $this->number]) ?></span><?php endif; ?>
+</label>
+<input type="hidden" name="idsAll[]" value="<?=$this->escapeHtmlAttr($this->id) ?>"<?php if(isset($this->formAttr)): ?> form="<?=$this->formAttr ?>"<?php endif; ?>/>
+<!-- finc: record - cart-buttons - END -->
diff --git a/themes/finc/templates/search/bulk-action-buttons.phtml b/themes/finc/templates/search/bulk-action-buttons.phtml
index 000657184878a36dd55ac105a2e0987fd6dbbdcb..cc40884afe28ff37699faaf0e3e6d1483eb120b3 100644
--- a/themes/finc/templates/search/bulk-action-buttons.phtml
+++ b/themes/finc/templates/search/bulk-action-buttons.phtml
@@ -12,7 +12,7 @@
       <?php if (isset($this->showBulkOptions) && $this->showBulkOptions): ?>
         <input id="ribbon-email" class="btn btn-transparent" type="submit" name="email" title="<?=$this->transEsc('bookbag_email_selected')?>" value="<?=$this->transEsc('Email')?>"<?php if($this->formAttr):?> form="<?=$this->escapeHtmlAttr($this->formAttr) ?>"<?php endif; ?>/>
         <?php $exportOptions = $this->export()->getBulkOptions(); if (count($exportOptions) > 0): ?>
-          <input id="ribbon-export" class="btn btn-transparent" type="submit" name="export" title="<?=$this->transEsc('bookbag_export_selected')?>" value="<?=$this->transEsc('Export')?>"<?php if($this->formAttr):?> form="<?=$this->escapeHtmlAttr($this->formAttr) ?>"<?php endif; ?>/>
+        <input id="ribbon-export" class="btn btn-transparent" type="submit" name="export" title="<?=$this->transEsc('bookbag_export_selected')?>" value="<?=$this->transEsc('Export')?>"<?php if($this->formAttr):?> form="<?=$this->escapeHtmlAttr($this->formAttr) ?>"<?php endif; ?>/>
         <?php endif; ?>
         <input id="ribbon-print" class="btn btn-transparent" type="submit" name="print" title="<?=$this->transEsc('bookbag_print_selected')?>" value="<?=$this->transEsc('Print')?>"<?php if($this->formAttr):?> form="<?=$this->escapeHtmlAttr($this->formAttr) ?>"<?php endif; ?>/>
         <?php if ($this->userlist()->getMode() !== 'disabled'): ?>