diff --git a/local/languages/de.ini b/local/languages/de.ini
index c0b5aeabfe3151d51a8468ebacb1bfca6b6267fc..543fd6499f2e45d161d2ae565e9af9121272955e 100644
--- a/local/languages/de.ini
+++ b/local/languages/de.ini
@@ -2065,3 +2065,6 @@ select_item_hold_cancel = "Titel auswählen, um Bestellung oder Vormerkung zu st
 select_item_checked_out_renew = "Titel zum Verlängern auswählen"
 select_item_ill_request_cancel = "Titel auswählen, um Fernleihanfrage zu stornieren"
 select_item_storage_retrieval_request_cancel = "Titel auswählen, um Magazinbestellung zu stornieren"
+
+; #17915
+toggle-dropdown = "Untermenü aufklappen"
diff --git a/local/languages/en.ini b/local/languages/en.ini
index f66672e884b3fc36d65fbd500f3e63f7975e59ea..ac07e3194069d996547b5e2b19670ebc414a6cb2 100644
--- a/local/languages/en.ini
+++ b/local/languages/en.ini
@@ -2148,3 +2148,6 @@ select_item_storage_retrieval_request_cancel = "Select item for canceling storag
 Edit this Advanced Search = "Edit this Search"
 Start a new Advanced Search = "New Advanced Search"
 Start a new Basic Search = "New Basic Search"
+
+; #17915
+toggle-dropdown = "Toggle Dropdown"
diff --git a/themes/finc-accessibility/templates/channels/channelList.phtml b/themes/finc-accessibility/templates/channels/channelList.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..1224ee29b4180f3f85758c83d6180da2301c045b
--- /dev/null
+++ b/themes/finc-accessibility/templates/channels/channelList.phtml
@@ -0,0 +1,74 @@
+<!-- finc-accessibility: channels - channelList -->
+<?php /* copied from bootstrap3 - #17915 - add aria-label - HR */ ?>
+<?php
+  $this->headLink()->appendStylesheet('vendor/slick.css');
+  $this->headLink()->appendStylesheet('vendor/slick-theme.css');
+  $this->headScript()->appendFile('vendor/slick.min.js');
+  $this->headScript()->appendFile('channels.js');
+  $this->headScript()->appendFile('vendor/jquery.dotdotdot.min.js');
+  $this->jsTranslations()->addStrings([
+    'channel_browse' => 'channel_browse',
+    'channel_expand' => 'channel_expand',
+    'channel_search' => 'channel_search',
+    'nohit_heading' => 'nohit_heading',
+    'View Record' => 'View Record',
+  ]);
+
+  $finalChannels = [];
+  $finalCount = 0;
+  foreach ($channels as $current) {
+      if (isset($current['contents'])) {
+          $finalChannels[] = $current;
+          $finalCount++;
+      } elseif ($finalCount > 0 && isset($current['token'])) {
+          $finalChannels[$finalCount - 1]['relatedTokens'][] = $current;
+      }
+  }
+?>
+
+<?php if (empty($token)): ?>
+  <form action="<?=$this->url('channels-search')?>" class="channel-search form-inline">
+    <?=$this->transEsc('channel_searchbox_label')?>
+    <input type="text" name="lookfor" class="form-control" value="<?=$this->escapeHtmlAttr($this->lookfor) ?>" aria-label="<?=$this->transEsc('search_terms') ?>"/>
+    <input type="submit" value="<?=$this->escapeHtmlAttr($this->translate('Submit'))?>" class="btn btn-default" aria-label="<?=$this->transEsc('Submit') ?>" />
+  </form>
+<?php endif; ?>
+
+<?php $insideButton = false; ?>
+<?php foreach ($finalChannels as $channel): ?>
+  <?php
+    $groupId = $channel['groupId'] ?? $channel['providerId'];
+    $channelID = 'channel-' . md5(serialize($channel));
+  ?>
+  <div class="channel-wrapper">
+    <div class="channel-title">
+      <h2><?=$this->escapeHtml($channel['title'])?></h2>
+    </div>
+
+    <?php if (count($channel['relatedTokens'] ?? []) > 0): ?>
+      <div class="channel-add-menu hidden" data-group="<?=$groupId ?>">
+        <button type="button" class="add-btn btn btn-link"><?=$this->transEsc('channel_add_more') ?></button><!--
+     --><button type="button" class="btn btn-link dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="<?=$this->transEsc('toggle-dropdown') ?>">
+          <span class="caret"></span>
+        </button>
+        <ul class="dropdown-menu">
+          <?php foreach ($channel['relatedTokens'] as $related): ?>
+            <li><a href="<?=current(explode('?', $this->serverUrl(true)))?>?<?=empty($queryParams) ? '' : $this->escapeHtmlAttr($queryParams . '&')?>channelProvider=<?=urlencode($related['providerId']) ?>&amp;channelToken=<?=urlencode($related['token']) ?>&amp;layout=lightbox" data-token="<?=$related['token'] ?>"><?=$this->escapeHtml($this->truncate($related['title'], 100)) ?></a></li>
+          <?php endforeach; ?>
+        </ul>
+      </div>
+    <?php endif; ?>
+
+    <div id="<?=$channelID ?>" class="channel" data-group="<?=$groupId ?>" data-link-json='<?=empty($channel['links']) ? '[]' : json_encode($channel['links']) ?>'>
+      <!-- Wrapper for slides -->
+      <?php foreach ($channel['contents'] as $index => $item): ?>
+        <a href="<?=empty($item['routeDetails']) ? $this->recordLink()->getUrl("{$item['source']}|{$item['id']}") : $this->url($item['routeDetails']['route'], $item['routeDetails']['params'])?>" class="channel-record slide hidden" data-record-id="<?=$this->escapeHtmlAttr($item['id']) ?>" data-record-source="<?=$item['source'] ?>" title="<?=$this->escapeHtml($item['title'])?>">
+          <div class="thumb">
+            <img <?=$index < 6 ? "src" : "data-lazy" ?>="<?=$this->escapeHtmlAttr($item['thumbnail'] ? $item['thumbnail'] : $this->url('cover-unavailable'))?>"/>
+          </div>
+          <?=$this->escapeHtml($item['title'])?>
+        </a>
+      <?php endforeach; ?>
+    </div>
+  </div>
+<?php endforeach; ?>
diff --git a/themes/finc/js/channels.js b/themes/finc/js/channels.js
index 0667f0d44a6703bb28bf845f263b43f0b0d2c5df..c6f232cdf3aa589f8a661fea1df2acebd7914e9e 100644
--- a/themes/finc/js/channels.js
+++ b/themes/finc/js/channels.js
@@ -9,7 +9,7 @@ VuFind.register('channels', function Channels() {
     }
     var $cont = $(
       '<div class="dropdown">' +
-      '  <button class="btn btn-link" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">' +
+      '  <button class="btn btn-link" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true" aria-label="' + VuFind.translate('toggle-dropdown') + '">' +
       '    <i class="fa fa-caret-square-o-down"></i>' +
       '   </button>' +
       '</div>'
diff --git a/themes/finc/templates/header.phtml b/themes/finc/templates/header.phtml
index 1f64dd68a52fb9b8c1732260854b20eebae2fc2d..7a37482bbcc7ac0c29756766a026eb3335cba979 100644
--- a/themes/finc/templates/header.phtml
+++ b/themes/finc/templates/header.phtml
@@ -10,8 +10,7 @@
   <?php /* This element only holds the mobile toggler and the navbar-brand/library name - CK */ ?>
   <div class="navbar-header">
     <?php /* mobile navigation toggler - CK */ ?>
-    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#header-collapse">
-      <span class="sr-only"><?=$this->transEsc("mobile_toggle_navigation_text")?></span>
+    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#header-collapse" aria-label="<?=$this->transEsc("mobile_toggle_navigation_text")?>">
       <i class="fa fa-bars" aria-hidden="true"></i>
     </button>
     <?php /* remove h1 from header and use h1 in content area instead - CK*/ ?>
@@ -32,7 +31,7 @@
         <ul class="nav navbar-nav navbar-right flip">
           <?php if ($this->feedback()->tabEnabled()): ?>
             <li>
-              <a id="feedbackLink" data-lightbox class="btn" href="<?=$this->url('feedback-home')?>"> <i class="fa fa-envelope" aria-hidden="true"></i><span class="sr-only"><?=$this->transEsc("Feedback")?></span></a>
+              <a id="feedbackLink" data-lightbox class="btn" href="<?=$this->url('feedback-home')?>" aria-label="<?=$this->transEsc("Feedback")?>"> <i class="fa fa-envelope" aria-hidden="true"></i></a>
             </li>
           <?php endif; ?>
           <?php $cart = $this->cart();
diff --git a/themes/finc/templates/layout/layout.phtml b/themes/finc/templates/layout/layout.phtml
index fac3c55ea90673bac2a47b954084ead02a7cc4a3..0ec319d7ed627ac142d57492d419004954a8393c 100644
--- a/themes/finc/templates/layout/layout.phtml
+++ b/themes/finc/templates/layout/layout.phtml
@@ -233,8 +233,7 @@ if (!isset($this->layout()->searchbox)) {
 <div id="modal" class="modal fade hidden-print" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="modal-title" aria-hidden="true" aria-describedby="modal-description">
   <div class="modal-dialog">
     <div class="modal-content">
-      <button type="button" class="close" data-dismiss="modal" tabindex="0">
-        <span class="sr-only"><?= $this->transEsc('CloseModal') ?></span>
+      <button type="button" class="close" data-dismiss="modal" tabindex="0" aria-label="<?= $this->transEsc('CloseModal') ?>">
         <i class="fa fa-times" aria-hidden="true"></i>
       </button>
       <div class="sr-only" id="modal-description">
diff --git a/themes/finc/templates/librarycards/editcard.phtml b/themes/finc/templates/librarycards/editcard.phtml
index 3bd6a5481027a6d283402970989b1ba2f0f5df08..9a7926db76b7240eaabdc86e678bccbaf0ab8cb3 100644
--- a/themes/finc/templates/librarycards/editcard.phtml
+++ b/themes/finc/templates/librarycards/editcard.phtml
@@ -39,7 +39,7 @@
     <input id="login_password" type="password" name="password" value="" placeholder="<?=!empty($this->card->id) ? $this->escapeHtmlAttr($this->translate('library_card_edit_password_placeholder')) : ''?>" class="form-control"/>
   </div>
   <div class="form-group">
-    <input class="btn btn-primary" type="submit" name="submit" value="<?=$this->transEsc('Save') ?>"/>
+    <input class="btn btn-primary" type="submit" name="submit" value="<?=$this->transEsc('Save') ?>" aria-label="<?=$this->transEsc('Save') ?>"/>
   </div>
 </form>
 <!-- finc - templates - librarycards - editcard - END -->
diff --git a/themes/finc/templates/myresearch/edit.phtml b/themes/finc/templates/myresearch/edit.phtml
index bb73f1956319e23e36bd55da9fbce3729b9cb02f..0484ff434fbfb08d8b1806970c946cb7d0545bd3 100644
--- a/themes/finc/templates/myresearch/edit.phtml
+++ b/themes/finc/templates/myresearch/edit.phtml
@@ -59,7 +59,7 @@
   <?php endif; ?>
   <?php if (!empty($this->savedData) || count($this->lists) > 0): ?>
     <div class="form-group">
-      <input class="btn btn-primary" type="submit" name="submit" value="<?=$this->transEsc('Save') ?>"/>
+      <input class="btn btn-primary" type="submit" name="submit" value="<?=$this->transEsc('Save') ?>" aria-label="<?=$this->transEsc('Save') ?>"/>
     </div>
   <?php endif; ?>
   </form>
diff --git a/themes/finc/templates/myresearch/editlist.phtml b/themes/finc/templates/myresearch/editlist.phtml
index 404b909125b30f167479a694f4585849df6e6ca8..364c4bbfdcb32d92f55bd280129b06a8bfe3c24e 100644
--- a/themes/finc/templates/myresearch/editlist.phtml
+++ b/themes/finc/templates/myresearch/editlist.phtml
@@ -45,7 +45,7 @@
     </div>
   <?php endif; ?>
   <div class="form-group">
-    <input class="btn btn-primary" type="submit" name="submit" value="<?=$this->transEsc('Save') ?>"/>
+    <input class="btn btn-primary" type="submit" name="submit" value="<?=$this->transEsc('Save') ?>" aria-label="<?=$this->transEsc('Save') ?>"/>
   </div>
 </form>
 <!-- finc - templates - myresearch - editlist - END -->
diff --git a/themes/finc/templates/myresearch/holds.phtml b/themes/finc/templates/myresearch/holds.phtml
index d46127d4fc138748d752e11aa24f6a2dee01a031..67298804196e4d9e207e1ce0adfa587ddc096a96 100644
--- a/themes/finc/templates/myresearch/holds.phtml
+++ b/themes/finc/templates/myresearch/holds.phtml
@@ -24,7 +24,7 @@
         <input type="hidden" id="submitType" name="cancelSelected" value="1"/>
         <input type="hidden" id="cancelConfirm" name="confirm" value="0"/>
         <div class="btn-group">
-          <input id="cancelSelected" name="cancelSelected" type="submit" value="<?=$this->transEsc("hold_cancel_selected") ?>" class="btn btn-default dropdown-toggle" data-toggle="dropdown"/>
+          <input id="cancelSelected" name="cancelSelected" type="submit" value="<?=$this->transEsc("hold_cancel_selected") ?>" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-label="<?=$this->transEsc("hold_cancel_selected") ?>"/>
           <ul class="dropdown-menu">
             <li class="disabled"><a><?=$this->transEsc("confirm_hold_cancel_selected_text") ?></a></li>
             <li><a href="#" onClick="$('#cancelConfirm').val(1);$('#submitType').attr('name','cancelSelected');$(this).parents('form').submit(); return false;"><?=$this->transEsc('confirm_dialog_yes') ?></a></li>
@@ -32,7 +32,7 @@
           </ul>
         </div>
         <div class="btn-group">
-          <input id="cancelAll" name="cancelAll" type="submit" value="<?=$this->transEsc("hold_cancel_all") ?>" class="btn btn-default dropdown-toggle" data-toggle="dropdown"/>
+          <input id="cancelAll" name="cancelAll" type="submit" value="<?=$this->transEsc("hold_cancel_all") ?>" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-label="<?=$this->transEsc("hold_cancel_all") ?>"/>
           <ul class="dropdown-menu">
             <li class="disabled"><a><?=$this->transEsc("confirm_hold_cancel_all_text") ?></a></li>
             <li><a href="#" onClick="$('#cancelConfirm').val(1);$('#submitType').attr('name','cancelAll');$(this).parents('form').submit(); return false;"><?=$this->transEsc('confirm_dialog_yes') ?></a></li>
diff --git a/themes/finc/templates/myresearch/profile.phtml b/themes/finc/templates/myresearch/profile.phtml
index c5be5678f25c4b72e5504658f67ba08856ea784b..8360cd61d7bb948c9826c2a4ef1c035eaa4718fe 100644
--- a/themes/finc/templates/myresearch/profile.phtml
+++ b/themes/finc/templates/myresearch/profile.phtml
@@ -44,7 +44,7 @@
                   value="<?= $this->escapeHtmlAttr($lib['locationID']) ?>"<?= ($selected == $lib['locationID']) ? ' selected="selected"' : '' ?>><?= $this->transEsc('location_' . $lib['locationDisplay'], null, $lib['locationDisplay']) ?></option>
               <?php endforeach; ?>
           </select>
-          <input class="btn btn-default" type="submit" value="<?= $this->transEsc('Save') ?>"/>
+          <input class="btn btn-default" type="submit" value="<?= $this->transEsc('Save') ?>" aria-label="<?= $this->transEsc('Save') ?>"/>
         </form>
       </td>
     <?php endif; ?>
diff --git a/themes/finc/templates/search/advanced/layout.phtml b/themes/finc/templates/search/advanced/layout.phtml
index 10453d28ce049b94643f250672bbbd6111ad451d..d21f9a5a648256858e6bf7eacdd92097bcd473b9 100644
--- a/themes/finc/templates/search/advanced/layout.phtml
+++ b/themes/finc/templates/search/advanced/layout.phtml
@@ -118,7 +118,7 @@ if (isset($searchDetails) && is_object($searchDetails)) {
                         <option value="<?=$this->escapeHtml($searchVal)?>"<?php if(isset($setQueries[$group][$search]) && $searchVal == $setQueries[$group][$search]->getHandler()):?> selected<?php endif;?>><?=$this->transEsc($searchDesc)?></option>
                       <?php endforeach; ?>
                     </select>
-                    <a href="javascript:void(0);" class="adv-term-remove hidden"><span class="sr-only"><?=$this->transEsc("remove")?></span><i class="fa fa-times" aria-hidden="true"></i></a>
+                    <a href="javascript:void(0);" class="adv-term-remove hidden" aria-label="<?=$this->transEsc("remove")?>"><i class="fa fa-times" aria-hidden="true"></i></a>
                   </div>
                   <?php if($group == 0 && $search == 0): ?>
                     </div>
@@ -151,16 +151,16 @@ if (isset($searchDetails) && is_object($searchDetails)) {
       </div>
       <?php /* finc: introduce 'fnd-btn'-class to swap submit and clear buttons for consistency */ ?>
       <div class="adv-submit">
-        <input class="clear-btn btn btn-transparent" type="button" value="<?=$this->transEsc('Clear')?>">
-        <input class="fnd-btn btn btn-primary" type="submit" value="<?= $this->transEsc('Find')?>">
+        <input class="clear-btn btn btn-transparent" type="button" value="<?=$this->transEsc('Clear')?>" aria-label="<?=$this->transEsc('Clear')?>">
+        <input class="fnd-btn btn btn-primary" type="submit" value="<?= $this->transEsc('Find')?>" aria-label="<?= $this->transEsc('Find')?>">
       </div>
       <?php if (isset($this->extraAdvancedControls)): ?>
         <div class="clearfix">
           <?=$this->extraAdvancedControls ?>
         </div>
         <div class="adv-submit margin-t margin-btm">
-          <input class="clear-btn btn btn-transparent" type="button" value="<?=$this->transEsc('Clear')?>">
-          <input class="fnd-btn btn btn-primary" type="submit" value="<?= $this->transEsc('Find')?>">
+          <input class="clear-btn btn btn-transparent" type="button" value="<?=$this->transEsc('Clear')?>" aria-label="<?=$this->transEsc('Clear')?>">
+          <input class="fnd-btn btn btn-primary" type="submit" value="<?= $this->transEsc('Find')?>" aria-label="<?= $this->transEsc('Find')?>">
         </div>
       <?php endif; ?>
     </div>
diff --git a/themes/finc/templates/search/newitem.phtml b/themes/finc/templates/search/newitem.phtml
index 75049b76728d99909875fd5c5c842176e1c25d1c..a4af3a11f2d6a141fb86eef281d19a124529a40b 100644
--- a/themes/finc/templates/search/newitem.phtml
+++ b/themes/finc/templates/search/newitem.phtml
@@ -34,7 +34,7 @@
         </select>
       </div>
     <?php endif; ?>
-    <input class="btn btn-primary" type="submit" name="submit" value="<?= $this->transEsc('Find') ?>"/>
+    <input class="btn btn-primary" type="submit" name="submit" value="<?= $this->transEsc('Find') ?>" aria-label="<?= $this->transEsc('Find')?>"/>
   </form>
 </div>
 <!-- finc - templates - search - newitem - END -->
diff --git a/themes/finc/templates/search/reserves.phtml b/themes/finc/templates/search/reserves.phtml
index 8a78cc689175398c7ad2ec16c11537797f64f4ae..723436e1af346726ff1688b88290f313811629a6 100644
--- a/themes/finc/templates/search/reserves.phtml
+++ b/themes/finc/templates/search/reserves.phtml
@@ -26,7 +26,7 @@
             <option value="<?=$this->escapeHtmlAttr($courseId)?>"><?=$this->escapeHtml($courseName)?></option>
           <?php endforeach; ?>
         </select>
-        <input class="btn btn-primary" type="submit" name="submit" value="<?=$this->transEsc('Find')?>"/>
+        <input class="btn btn-primary" type="submit" name="submit" value="<?=$this->transEsc('Find')?>" aria-label="<?= $this->transEsc('Find')?>"/>
       </div>
     <?php endif; ?>
 
@@ -39,7 +39,7 @@
             <option value="<?=$this->escapeHtmlAttr($instId)?>"><?=$this->escapeHtml($instName)?></option>
           <?php endforeach; ?>
         </select>
-        <input class="btn btn-primary" type="submit" name="submit" value="<?=$this->transEsc('Find')?>"/>
+        <input class="btn btn-primary" type="submit" name="submit" value="<?=$this->transEsc('Find')?>" aria-label="<?= $this->transEsc('Find')?>"/>
       </div>
     <?php endif; ?>
 
@@ -52,7 +52,7 @@
             <option value="<?=$this->escapeHtmlAttr($deptId)?>"><?=$this->escapeHtml($deptName)?></option>
           <?php endforeach; ?>
         </select>
-        <input class="btn btn-primary" type="submit" name="submit" value="<?=$this->transEsc('Find')?>"/>
+        <input class="btn btn-primary" type="submit" name="submit" value="<?=$this->transEsc('Find')?>" aria-label="<?= $this->transEsc('Find')?>"/>
       </div>
     <?php endif; ?>
   </form>
diff --git a/themes/finc/templates/search/searchbox.phtml b/themes/finc/templates/search/searchbox.phtml
index 6529d9cf80bec94a36c23c786561f41c587cdffa..7821f78003dd9af01c916e4dbdd60f7fb8b5e871 100644
--- a/themes/finc/templates/search/searchbox.phtml
+++ b/themes/finc/templates/search/searchbox.phtml
@@ -59,7 +59,7 @@ $hiddenFilterParams = $this->searchTabs()->getCurrentHiddenFilterParams($this->s
     <?php elseif ($handlerCount == 1): ?>
       <input type="hidden" name="type" value="<?=$this->escapeHtmlAttr($handlers[0]['value'])?>"/>
     <?php endif; ?>
-    <button type="submit" class="btn btn-primary"><i class="fa fa-search" aria-hidden="true"></i> <span class="find-label sr-only"><?=$this->transEsc("Find")?></span></button>
+    <button type="submit" class="btn btn-primary" aria-label="<?=$this->transEsc("Find")?>"><i class="fa fa-search" aria-hidden="true"></i></button>
     <?php if ($advSearch): ?>
       <a href="<?=$this->url($advSearch) . ((isset($this->searchId) && $this->searchId) ? '?edit=' . $this->escapeHtmlAttr($this->searchId) : $hiddenFilterParams)?>" class="btn btn-transparent" role="button" rel="nofollow" aria-label="<?=$this->transEsc("Advanced")?>"><i class="fa fa-cog"></i> <span class="hidden-xs hidden-sm hidden-md"><?=$this->transEsc("Advanced")?></span></a>
     <?php endif; ?>