diff --git a/local/config/vufind/facets.ini b/local/config/vufind/facets.ini
index 5b40659817517ee7b9d9716eca2ddb861f223375..fdf7ccf912b6d48609842ec039ab4ce7251325aa 100644
--- a/local/config/vufind/facets.ini
+++ b/local/config/vufind/facets.ini
@@ -239,3 +239,15 @@ hide_facets = "genre_facet,era_facet,geographic_facet"
 ; Special facets sorted alphabetically.
 [SortedByIndex]
 ;index[] = format
+
+; Special terms (key), which can't / shouldn't be translated but marked as other language (value) for BARF reasons
+[LanguageTags]
+De Gruyter Journals / Social Sciences and Humanities = "en"
+Free = "en"
+JSTOR Music Archive = "en"
+Local = "en"
+Microform = "en"
+Open Access = "en"
+Online = "en"
+Proceeding = "en"
+Répertoire International des Sources Musicales = "fr"
diff --git a/local/languages/de.ini b/local/languages/de.ini
index b257ab271cbbbf0aba982fd9af093519c8487ff9..6f2899bb1c01b4f0b5df5e8aaceeba57c7d4edeb 100644
--- a/local/languages/de.ini
+++ b/local/languages/de.ini
@@ -254,6 +254,7 @@ Due Date = Fällig am
 Each field should have a value = "Jedes Feld sollte einen Wert besitzen"
 For technical reasons, this title can not be saved. = "Dieser Titel läßt sich aus technischen Gründen leider nicht als Favorit abspeichern."
 Edit = Bearbeiten
+Edit this Advanced Search = "Suche bearbeiten"
 Edition = Ausgabe
 Electronic = Online-Ressource
 Electronic Article = "Elektronischer Aufsatz"
@@ -506,6 +507,8 @@ Stackrequest = "Bestellungen"
 Stack Request = "Bestellungen"
 Stacks = Magazin
 Staff View = Internformat
+Start a new Advanced Search = "Neue erweiterte Suche"
+Start a new Basic Search = "Neue einfache Suche"
 Start Page = Startseite
 Start browsing again = Stöbern neu beginnen
 Status = Status
@@ -1803,11 +1806,12 @@ footer_ezb = "Elektronische Zeitschriftenbibliothek (EZB)"
 footer_kvk = "Karlsruher Virtueller Katalog (KVK)"
 footer_dbis = "Datenbankinformationssystem (DBIS)"
 footer_nwb = "nwb-Datenbank"
+Footer-Powered-By-Text = "Betrieben mit"
 
 ; Powered by alt and title tags
-vufind-logo_alt = "VuFind"
+vufind-logo_alt = "VuFind-Software"
 vufind-logo_title = "Weitere Informationen in englischer Sprache finden Sie auf VuFind.org"
-finc-logo_alt = "finc"
+finc-logo_alt = "finc-Software"
 finc-logo_title = "Weitere Informationen zu 'finc' finden Sie in unserem finc-Blog"
 
 ; source providers
@@ -2043,9 +2047,6 @@ 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"
@@ -2054,3 +2055,12 @@ bookbag_email_selected = "Links zu ausgewählten Medien per E-Mail versenden"
 
 ; #18441
 Skip_navigation_links = "Sprunglinks zur Suche und zum Inhalt"
+
+; #18019 & #18754
+select_item = "Titel wählen"
+select_item_search_result = "Titel zum Mailen, Exportieren, Drucken, Speichern oder Merken auswählen"
+select_item_favorite = "Titel zum Mailen, Löschen, Exportieren, Drucken oder Merken auswählen"
+select_item_hold_cancel = "Titel auswählen, um Bestellung oder Vormerkung zu stornieren"
+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"
diff --git a/local/languages/en.ini b/local/languages/en.ini
index a4cb46bf4b95a77e2b4f17edcbcb02e68f6345b7..389553aabc039aac15129e38c4a5b03168b9177a 100644
--- a/local/languages/en.ini
+++ b/local/languages/en.ini
@@ -312,7 +312,7 @@ VideoTape = Video Tape
 ;Video Disc = Video Disc
 ;Video Reel = Video Reel
 ;Video Tape = Video Tape
-;Visual Media = Visual Media
+Visual Media = Visual Media
 
 ;------
 ; end of remaining format tanslations
@@ -1921,11 +1921,12 @@ footer_ezb = "Electronic Journals Library (EZB)"
 footer_kvk = "Karlsruhe Virtual Catalog (KVK)"
 footer_dbis = "Database Information System (DBIS)"
 footer_nwb = "Database nwb"
+Footer-Powered-By-Text = "Powered by"
 
 ; Powered by alt and title tags
-vufind-logo_alt = "VuFind"
+vufind-logo_alt = "VuFind software"
 vufind-logo_title = "For further informationen please visit VuFind.org"
-finc-logo_alt = "finc"
+finc-logo_alt = "finc software"
 finc-logo_title = "For further informationen in German on 'finc' please visit our finc-Blog"
 
 ; Tab to Close-text for closing FNDTN ToolTips
@@ -2131,8 +2132,14 @@ 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"
-
 ; #18441
 Skip_navigation_links = "Skip navigation links"
+
+; #18019 & #18754
+select_item = "Select item"
+select_item_search_result = "Select item for mailing, exporting, printing, saving as favorite or adding to book bag"
+select_item_favorite = "Select item for mailing, removing from favorites, exporting, printing or adding to book bag"
+select_item_hold_cancel = "Select item for canceling holds or recall"
+select_item_checked_out_renew = "Select item for renewing"
+select_item_ill_request_cancel = "Select item for canceling interlibrary loan requests"
+select_item_storage_retrieval_request_cancel = "Select item for canceling storage retrieval requests"
diff --git a/module/finc/src/finc/Controller/MyResearchController.php b/module/finc/src/finc/Controller/MyResearchController.php
index 9fadc523e76e2765998465baacb5ecaf4a2f8fa0..c70b0f6cfbc9a6c7531f8892fc3b4d6e50e42730 100644
--- a/module/finc/src/finc/Controller/MyResearchController.php
+++ b/module/finc/src/finc/Controller/MyResearchController.php
@@ -143,7 +143,7 @@ class MyResearchController extends \VuFind\Controller\MyResearchController imple
 
             $results = $runner->run($request, 'Favorites', $setupCallback);
             return $this->createViewModel(
-                ['params' => $results->getParams(), 'results' => $results]
+                ['params' => $results->getParams(), 'results' => $results, 'context' => "favorite"]
             );
         } catch (ListPermissionException $e) {
             if (!$this->getUser()) {
diff --git a/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php b/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php
index ae53d4e3012e8f0c6a13288b51f37492e9ca1100..31b918110ee4f57b3270a454c0a432382ec3e66b 100644
--- a/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php
+++ b/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php
@@ -46,7 +46,6 @@ trait SolrMarcFincTrait
      * Returns true if the record supports real-time AJAX status lookups.
      *
      * @return bool
-     * @access public
      */
     public function supportsAjaxStatus()
     {
@@ -58,7 +57,6 @@ trait SolrMarcFincTrait
      * in 040$e)
      *
      * @return bool
-     * @access public
      */
     public function isRDA()
     {
@@ -98,7 +96,6 @@ trait SolrMarcFincTrait
                     $indicator1 = $url->getIndicator('1');
                     $indicator2 = $url->getIndicator('2');
 
-
                     $isISIL = false;
 
                     if ($isil) {
@@ -164,14 +161,12 @@ trait SolrMarcFincTrait
         return $retVal;
     }
 
-
     /**
      * Return a description about volumes in stock via consortial field
      * with subfield $h.
      * Currently only used in DE-L152.
      *
      * @return array
-     * @access public
      */
     public function getVolumesInStock()
     {
@@ -185,7 +180,6 @@ trait SolrMarcFincTrait
      * Currently only used in DE-L152.
      *
      * @return array
-     * @access public
      */
     public function getVolumesCommentInStock()
     {
@@ -231,7 +225,6 @@ trait SolrMarcFincTrait
      * LocalMarcFieldOfLibrary $m
      *
      * @return null|string
-     * @access public
      */
     public function getLocalOrderInformation()
     {
@@ -263,7 +256,6 @@ trait SolrMarcFincTrait
      * university library of Freiberg at finc marc 972i.
      *
      * @return string
-     * @access protected
      */
     protected function getLocalGivenCallnumber()
     {
@@ -280,7 +272,6 @@ trait SolrMarcFincTrait
      * Get an array of supplements and special issue entry.
      *
      * @return array
-     * @access public
      * @link   http://www.loc.gov/marc/bibliographic/bd770.html
      */
     public function getSupplements()
@@ -315,7 +306,6 @@ trait SolrMarcFincTrait
      * field 024 indicator 8 subfield $a. Refs #1442
      *
      * @return array
-     * @access public
      */
     public function getIndexOfGermanPrints()
     {
@@ -331,10 +321,10 @@ trait SolrMarcFincTrait
         }
         foreach ($fields as $field) {
             // ->getIndicator(position)
-            if (in_array($field->getIndicator('1'),$lookfor_indicators)) {
+            if (in_array($field->getIndicator('1'), $lookfor_indicators)) {
                 if ($subfield = $field->getSubfield('a')) {
                     $data = $subfield->getData();
-                    if (stripos($data,'VD') === 0) {
+                    if (stripos($data, 'VD') === 0) {
                         $retval[] = $data;
                     }
                 }
@@ -343,12 +333,10 @@ trait SolrMarcFincTrait
         return  $retval;
     }
 
-
     /**
      * Method reading MARC field 24
      *
      * @return array
-     * @access public
      */
     public function getOtherIdentifiers()
     {
@@ -374,7 +362,6 @@ trait SolrMarcFincTrait
      * of the Petrucci music library subfield 590b
      *
      * @return array
-     * @access public
      */
     public function getInstrumentation()
     {
@@ -385,7 +372,6 @@ trait SolrMarcFincTrait
      * Get the ISSN from a record. Refs #969
      *
      * @return array
-     * @access public
      */
     public function getISSNs()
     {
@@ -396,7 +382,6 @@ trait SolrMarcFincTrait
      * Get the ISSN from a the parallel title of a record. Refs #969
      *
      * @return array
-     * @access public
      */
     public function getISSNsParallelTitles()
     {
@@ -575,7 +560,6 @@ trait SolrMarcFincTrait
      * subfield t and (if present) subfield r.
      *
      * @return array
-     * @access public
      */
     public function getWorkPartTitleDetails()
     {
@@ -588,7 +572,7 @@ trait SolrMarcFincTrait
             #return preg_replace(
             #    $titleRegexPattern, '', trim($string)
             #);
-            return rtrim($string, " \t\n\r\0\x0B".'.:-/');
+            return rtrim($string, " \t\n\r\0\x0B" . '.:-/');
         };
 
         if ($fields = $this->getMarcRecord()->getFields('505')) {
@@ -618,14 +602,13 @@ trait SolrMarcFincTrait
      * from MARC field 700.
      *
      * @return array
-     * @access public
      */
     public function getWorkTitleDetails()
     {
         $workTitles = [];
 
         $truncateTrail = function ($string) {
-            return rtrim($string, " \t\n\r\0\x0B".'.:-/');
+            return rtrim($string, " \t\n\r\0\x0B" . '.:-/');
         };
 
         if ($fields = $this->getMarcRecord()->getFields('700')) {
@@ -729,7 +712,6 @@ trait SolrMarcFincTrait
      * Refs #328
      *
      * @return array
-     * @access public
      */
     public function getJournalHoldings()
     {
@@ -762,9 +744,9 @@ trait SolrMarcFincTrait
                 }
                 $retval[$key]['link'] =
                     '/Record/' . $this->getUniqueID()
-                    .'/HoldJournalCHE?callnumber='
+                    . '/HoldJournalCHE?callnumber='
                     . urlencode($retval[$key]['callnumber'])
-                    .'&barcode=' . $barcode;
+                    . '&barcode=' . $barcode;
                 $key++;
             }
         }
@@ -777,7 +759,6 @@ trait SolrMarcFincTrait
      * Seems to be very extraordinary special case. Refs #1302
      *
      * @return array
-     * @access protected
      */
     protected function getLocalAccessNumber()
     {
@@ -789,14 +770,13 @@ trait SolrMarcFincTrait
         }
         return [];
     }
-    
+
     /**
      * Return a local access number for call number.
      * Marc field depends on library e.g. 986 for GfzK.
      * Seems to be very extraordinary special case. Refs #7924
      *
      * @return array
-     * @access public
      */
     public function getLocalSubject()
     {
@@ -842,7 +822,6 @@ trait SolrMarcFincTrait
      * Get all local class subjects. First realization for HGB. Refs #2626
      *
      * @return array
-     * @access protected
      */
     protected function getLocalClassSubjects()
     {
@@ -865,14 +844,12 @@ trait SolrMarcFincTrait
         return $array;
     }
 
-
     /**
      * Returning local format field of a library using an consortial defined
      * field with subfield $c. Marc field depends on library e.g. 970 for HMT or
      * 972 for TUBAF
      *
      * @return array
-     * @access public
      */
     public function getLocalFormat()
     {
@@ -895,7 +872,6 @@ trait SolrMarcFincTrait
      * settings in config.ini. Refs 7063
      *
      * @return mixed
-     * @access protected
      */
     protected function getLocalMarcFieldOfLibrary()
     {
@@ -929,7 +905,6 @@ trait SolrMarcFincTrait
      * Refs #1308
      *
      * @return array
-     * @access protected
      */
     protected function getLocalNotice()
     {
@@ -944,7 +919,6 @@ trait SolrMarcFincTrait
      * Marc field depends on library e.g. 986 for GFZK. Refs #8146
      *
      * @return array
-     * @access public
      */
     public function getLocalSignature()
     {
@@ -968,7 +942,6 @@ trait SolrMarcFincTrait
      * subfield $h. Marc field depends on library e.g. 972 for TUF.
      *
      * @return array
-     * @access protected
      */
     protected function getLocalStockSpecification()
     {
@@ -986,7 +959,6 @@ trait SolrMarcFincTrait
      * at the marc field.
      *
      * @return mixed    null if there's no field or array with results
-     * @access public
      */
     public function getMusicHeading()
     {
@@ -1015,7 +987,6 @@ trait SolrMarcFincTrait
      * getting previous title of marc field 780.
      *
      * @return array
-     * @access protected
      */
     public function getNewerTitles()
     {
@@ -1047,13 +1018,11 @@ trait SolrMarcFincTrait
         return $array;
     }
 
-
     /**
      * Get notice of a title representing a special case of University
      * library of Chemnitz: MAB field 999l
      *
      * @return string
-     * @access protected
      */
     protected function getNotice()
     {
@@ -1067,7 +1036,6 @@ trait SolrMarcFincTrait
      * mentioned record in 787 $a{t}.
      *
      * @return array|null
-     * @access public
      */
     public function getOtherRelationshipEntry()
     {
@@ -1108,7 +1076,6 @@ trait SolrMarcFincTrait
      * of the Petrucci music library subfield 590a
      *
      * @return array
-     * @access public
      */
     public function getPieceStyle()
     {
@@ -1122,7 +1089,6 @@ trait SolrMarcFincTrait
      * @todo More flexible implementation
      *
      * @return array
-     * @access protected
      */
     protected function getParallelEditions()
     {
@@ -1159,7 +1125,6 @@ trait SolrMarcFincTrait
      * Get an array of previous titles for the record.
      *
      * @return array
-     * @access protected
      */
     public function getPreviousTitles()
     {
@@ -1187,7 +1152,7 @@ trait SolrMarcFincTrait
                 $array[$key]['id'] = current($linkedRecords['first_results'])->getUniqueId();
             }
         } // end foreach
-        
+
         return $array;
     }
 
@@ -1199,7 +1164,6 @@ trait SolrMarcFincTrait
      * @todo pass prices by euro currency
      *
      * @return string
-     * @access public
      */
     public function getPrice()
     {
@@ -1213,7 +1177,7 @@ trait SolrMarcFincTrait
                         ['lhs','rhs','error','icc'],
                         ['"lhs"','"rhs"','"error"','"icc"'],
                         file_get_contents(
-                            "http://www.google.com/ig/calculator?q=".$price.$currency."=?EUR"
+                            "http://www.google.com/ig/calculator?q=" . $price . $currency . "=?EUR"
                         )
                     ),
                     true
@@ -1224,7 +1188,7 @@ trait SolrMarcFincTrait
                     return  money_format('%.2n', $rhs[0]);
                 }
             }
-            return $currency . " ". $price;
+            return $currency . " " . $price;
         }
         return "";
     }
@@ -1233,7 +1197,6 @@ trait SolrMarcFincTrait
      * Get the provenience of a title.
      *
      * @return array
-     * @access public
      */
     public function getProvenience()
     {
@@ -1246,7 +1209,6 @@ trait SolrMarcFincTrait
      * 972 for TUBAF
      *
      * @return bool
-     * @access protected
      */
     protected function getPurchaseInformation()
     {
@@ -1262,7 +1224,6 @@ trait SolrMarcFincTrait
      * Get a short list of series for ISBD citation style
      *
      * @return array
-     * @access protected
      * @link   http://www.loc.gov/marc/bibliographic/bd830.html
      */
     protected function getSeriesWithVolume()
@@ -1274,7 +1235,6 @@ trait SolrMarcFincTrait
      * Get local classification of UDK.
      *
      * @return array
-     * @access protected
      * @deprecated Seems to be only for HTWK in use formerly?
      */
     protected function getUDKs()
@@ -1326,7 +1286,6 @@ trait SolrMarcFincTrait
      * Get addional entries for personal names.
      *
      * @return array
-     * @access protected
      * @link   http://www.loc.gov/marc/bibliographic/bd700.html
      */
     protected function getAdditionalAuthors()
@@ -1357,7 +1316,6 @@ trait SolrMarcFincTrait
      * for UBL only implemented. Refs. #1315
      *
      * @return array
-     * @access public
      */
     public function getAdditionals()
     {
@@ -1390,7 +1348,7 @@ trait SolrMarcFincTrait
                         // only proceed if we actually have a value for the text
                         if (count($text) > 0) {
                             $array[$i] = [
-                                'text'       => implode(', ', $text),
+                                'text' => implode(', ', $text),
                                 'identifier' => ($line->getSubfield('i'))
                                     ? $line->getSubfield('i')->getData() : '',
                                 'note' => ($line->getSubfield('n'))
@@ -1409,7 +1367,7 @@ trait SolrMarcFincTrait
                                 foreach ($linkFields as $current) {
                                     $linked[] = $current->getData();
                                 }
-                                $linkedRecords = $this->searchRelatedRecords('isbn',$linked, 1);
+                                $linkedRecords = $this->searchRelatedRecords('isbn', $linked, 1);
                                 if (!empty($linkedRecords['first_results'])) {
                                     $array[$i]['related_records'] = $linkedRecords;
                                 }
@@ -1423,7 +1381,7 @@ trait SolrMarcFincTrait
                         foreach ($linkFields as $current) {
                             $linked[] = $current->getData();
                         }
-                        $linkedRecords = $this->searchRelatedRecords('isbn',$linked, 1);
+                        $linkedRecords = $this->searchRelatedRecords('isbn', $linked, 1);
                         if (!empty($linkedRecords['first_results'])) {
                             $array[$i] = [
                                 'related_records' => $linkedRecords,
@@ -1450,12 +1408,12 @@ trait SolrMarcFincTrait
     {
         $array = [];
         $fields = [
-            '773' => ['a'=>['',': '], 't'=>['',''], 'g'=>[' ; ','']],
-            '490' => ['a'=>['','']],
-            '800' => ['a'=>['',': '], 't'=>['',''], 'v'=>[' ; ',''] ,'g'=>[' ; ','']],
-            '810' => ['a'=>['',': '], 't'=>['',''], 'v'=>[' ; ',''] ,'g'=>[' ; ','']],
-            '811' => ['a'=>['',': '], 't'=>['',''], 'v'=>[' ; ',''] ,'g'=>[' ; ','']],
-            '830' => ['a'=>['',''], 'v'=>[' ; ','']]
+            '773' => ['a' => ['',': '], 't' => ['',''], 'g' => [' ; ','']],
+            '490' => ['a' => ['','']],
+            '800' => ['a' => ['',': '], 't' => ['',''], 'v' => [' ; ',''],'g' => [' ; ','']],
+            '810' => ['a' => ['',': '], 't' => ['',''], 'v' => [' ; ',''],'g' => [' ; ','']],
+            '811' => ['a' => ['',': '], 't' => ['',''], 'v' => [' ; ',''],'g' => [' ; ','']],
+            '830' => ['a' => ['',''], 'v' => [' ; ','']]
         ];
         $i = 0;
 
@@ -1487,9 +1445,9 @@ trait SolrMarcFincTrait
                             } elseif (empty($val)) {
                                 continue;
                             } else {
-                                $text[] = $l_delim.$val->getData().$r_delim;
-                                if (in_array($subfield,['a','t'])) $label[] = $l_delim.$val->getData().$r_delim;
-                                else $suffix[] = $l_delim.$val->getData().$r_delim;
+                                $text[] = $l_delim . $val->getData() . $r_delim;
+                                if (in_array($subfield, ['a','t'])) $label[] = $l_delim . $val->getData() . $r_delim;
+                                else $suffix[] = $l_delim . $val->getData() . $r_delim;
                             }
                         } else {
                             if (empty($val)) {
@@ -1497,21 +1455,21 @@ trait SolrMarcFincTrait
                             }
                             if ($field == '490') {
                                 if ($line->getIndicator(1) == 0) {
-                                    $text[] = $l_delim.$val->getData().$r_delim;
-                                    if ($subfield === 'a') $label[] = $l_delim.$val->getData().$r_delim;
-                                    else $suffix[] = $l_delim.$val->getData().$r_delim;
+                                    $text[] = $l_delim . $val->getData() . $r_delim;
+                                    if ($subfield === 'a') $label[] = $l_delim . $val->getData() . $r_delim;
+                                    else $suffix[] = $l_delim . $val->getData() . $r_delim;
                                 }
                             } elseif ($subfield == 'v' && in_array($field, ['800', '810', '811'])) {
                                 if (!empty($val)) {
-                                    $suffix[] = $text[] = $l_delim.$val->getData().$r_delim;
+                                    $suffix[] = $text[] = $l_delim . $val->getData() . $r_delim;
                                     // do not use the next (and last) subfield $g,
                                     // if $v is already set
                                     break;
                                 }
                             } else {
-                                $text[] = $l_delim.$val->getData().$r_delim;
-                                if (in_array($subfield,['a','t'])) $label[] = $l_delim.$val->getData().$r_delim;
-                                else $suffix[] = $l_delim.$val->getData().$r_delim;
+                                $text[] = $l_delim . $val->getData() . $r_delim;
+                                if (in_array($subfield, ['a','t'])) $label[] = $l_delim . $val->getData() . $r_delim;
+                                else $suffix[] = $l_delim . $val->getData() . $r_delim;
                             }
                         }
                     }
@@ -1520,9 +1478,9 @@ trait SolrMarcFincTrait
                     // only proceed if we actually have a value for the text
                     if (count($text) > 0) {
                         $array[$i] = [
-                            'text'       => implode('', $text),
-                            'label'      => !empty($label) ? implode('',$label) : '',
-                            'suffix'     => !empty($suffix) ? implode('',$suffix) : '',
+                            'text' => implode('', $text),
+                            'label' => !empty($label) ? implode('', $label) : '',
+                            'suffix' => !empty($suffix) ? implode('', $suffix) : '',
                             'identifier' => ($line->getSubfield('i'))
                                 ? $line->getSubfield('i')->getData() : 'Set Multipart'
                         ];
@@ -1551,7 +1509,6 @@ trait SolrMarcFincTrait
      * Refs. #8509
      *
      * @return array|null
-     * @access public
      */
     public function getAdditionalNotes()
     {
@@ -1574,13 +1531,12 @@ trait SolrMarcFincTrait
      * Returns all notes.
      *
      * @return array
-     * @access public
      */
     public function getAllNotes()
     {
         $notes = array_merge(
-            (array) $this->getGeneralNotes(),
-            (array) $this->getAdditionalNotes()
+            (array)$this->getGeneralNotes(),
+            (array)$this->getAdditionalNotes()
         );
         foreach ($notes as &$note) {
             if (preg_match('/(.*)\.\s*$/', $note, $matches)) {
@@ -1595,7 +1551,6 @@ trait SolrMarcFincTrait
      * Refs #8369
      *
      * @return array
-     * @access public
      */
     public function getHierarchyParentID()
     {
@@ -1617,7 +1572,7 @@ trait SolrMarcFincTrait
                     if ($field->getSubfield('w')) {
                         // refactored with #18333
                         $related = $this->getRelatedKxpRecord($field);
-                        if (!empty( $related['first_results'] ?? [])) {
+                        if (!empty($related['first_results'] ?? [])) {
                             $parentID[] = current($related['first_results'])->getUniqueId();
                         }
                     } elseif ($fieldNumber == '490') {
@@ -1645,7 +1600,6 @@ trait SolrMarcFincTrait
      * Refs #8369
      *
      * @return array
-     * @access public
      */
     public function getHierarchyParentTitle()
     {
@@ -1728,7 +1682,6 @@ trait SolrMarcFincTrait
      * the bsz heading subjects chains.
      *
      * @return array
-     * @access public
      */
     public function getAllSubjectHeadingsExtended()
     {
@@ -1740,7 +1693,7 @@ trait SolrMarcFincTrait
         foreach ($fields as $field) {
             $subjectrow = $field->getIndicator('1');
             if ($subjectrow != $firstindicator) {
-                $key = (isset($key) ? $key +1 : 0);
+                $key = (isset($key) ? $key + 1 : 0);
                 $firstindicator = $subjectrow;
             }
             // #5668 #5046 BSZ MARC may contain uppercase subfields but solrmarc set
@@ -1770,7 +1723,6 @@ trait SolrMarcFincTrait
      * @param boolean $extended If dynamic index extension activated
      *
      * @return array
-     * @access public
      */
     public function getAllSubjectHeadings($extended = false)
     {
@@ -1845,15 +1797,14 @@ trait SolrMarcFincTrait
      * Check if Topics exists. Realized for instance of UBL only.
      *
      * @return boolean      True if topics exist.
-     * @access public
      */
     public function hasTopics()
     {
         $rvk = $this->getRvkWithMetadata();
-        return (
+        return
             parent::hasTopics()
             || (is_array($rvk) && count($rvk) > 0)
-        );
+        ;
     }
 
     /**
@@ -1861,7 +1812,6 @@ trait SolrMarcFincTrait
      * for UBL only implemented.
      *
      * @return array
-     * @access public
      */
     public function getTopics()
     {
@@ -1916,7 +1866,6 @@ trait SolrMarcFincTrait
      * for petrucci music library.
      *
      * @return array
-     * @access protected
      */
     protected function getCatalogueNumber()
     {
@@ -1927,7 +1876,6 @@ trait SolrMarcFincTrait
      * Get the volume number
      *
      * @return array
-     * @access protected
      */
     protected function getVolume()
     {
@@ -1939,7 +1887,6 @@ trait SolrMarcFincTrait
      *
      * @return array    Return multidimensional array with key of 'coordinates'
      *                  and 'scale'
-     * @access public
      */
     public function getCartographicData()
     {
@@ -1966,7 +1913,6 @@ trait SolrMarcFincTrait
      * Get an array of content notes.
      *
      * @return array
-     * @access protected
      */
     protected function getContentNote()
     {
@@ -1977,7 +1923,6 @@ trait SolrMarcFincTrait
      * Get an array of included titles.
      *
      * @return array
-     * @access protected
      */
     protected function getIncludedTitles()
     {
@@ -1990,7 +1935,6 @@ trait SolrMarcFincTrait
      * Get dissertation notes for the record.
      *
      * @return array $retVal
-     * @access public
      */
     public function getDissertationNote()
     {
@@ -2015,7 +1959,6 @@ trait SolrMarcFincTrait
      * @param boolean $allow_multiple_results
      *
      * @return string|array
-     * @access protected
      */
     protected function getRelatedItems($allow_multiple_results = false)
     {
@@ -2027,7 +1970,7 @@ trait SolrMarcFincTrait
     }
 
     public function searchRelatedRecords($field, $values, $limit = 20,
-        $filters=[], $backend_id = 'Solr'
+        $filters = [], $backend_id = 'Solr'
     ) {
 
         if (!empty($filters)) {
@@ -2078,7 +2021,6 @@ trait SolrMarcFincTrait
      * Get RVK classification number with metadata from Marc records. Refs #599
      *
      * @return array
-     * @access public
      */
     public function getRvkWithMetadata()
     {
@@ -2119,7 +2061,6 @@ trait SolrMarcFincTrait
      * Get RVK notation
      *
      * @return array
-     * @access public
      */
     public function getRVK()
     {
@@ -2148,7 +2089,6 @@ trait SolrMarcFincTrait
      * Get BK notation
      *
      * @return array
-     * @access public
      */
     public function getBK()
     {
@@ -2200,7 +2140,6 @@ trait SolrMarcFincTrait
      * Get DDC notation
      *
      * @return array
-     * @access public
      */
     public function getDDC()
     {
@@ -2225,7 +2164,6 @@ trait SolrMarcFincTrait
      * Get an array of citations and references notes.
      *
      * @return array
-     * @access public
      */
     public function getReferenceNotes()
     {
@@ -2236,7 +2174,6 @@ trait SolrMarcFincTrait
      * Get the publishers number and source of the record.
      *
      * @return array
-     * @access public
      */
     public function getPublisherNumber()
     {
@@ -2247,7 +2184,6 @@ trait SolrMarcFincTrait
      * Get the musical key of a piece (Marc 384).
      *
      * @return array
-     * @access public
      */
     public function getMusicalKey()
     {
@@ -2259,7 +2195,6 @@ trait SolrMarcFincTrait
      *
      * @return array Items internal Bibliotheca-ID called "Mediennummer"
      * @deprecated Remove when Bibliotheca support ends
-     * @access public
      */
     public function getMediennummer()
     {
@@ -2284,7 +2219,6 @@ trait SolrMarcFincTrait
      * Get title uniform
      *
      * @return array
-     * @access public
      */
     public function getTitleUniform()
     {
@@ -2319,14 +2253,22 @@ trait SolrMarcFincTrait
     }
 
     /**
+     * Get an array of publication detail lines combining information from Marc 260, 264, 533
      *
+     * @return array
      */
     public function getPublicationDetails() {
 
         $places =
         $names =
         $dates = [];
-        foreach (array('260','264') as $pos => $field_name) {
+
+        $getSubfieldLinesConcat = function ($field, $code, $separator) {
+            return implode($separator, array_map(function ($elem) {return $elem->getData();}, $field->getSubfields($code) ?? []));
+        };
+
+        // getting contents from marc 260 and 264
+        foreach (['260','264'] as $pos => $field_name) {
             if ($fields = $this->getMarcRecord()->getFields($field_name)) {
                 foreach ($fields as $field) {
                     // for MARC $264 if indicator2 equals 1 we have publication details
@@ -2334,29 +2276,30 @@ trait SolrMarcFincTrait
                     if ($pos === '264' && $field->getIndicator('2') !== '1') {
                         continue;
                     }
-                    foreach (array(
+                    foreach ([
                                  'places' => 'a',
                                  'names' => 'b',
                                  'dates' => 'c'
-                             ) as $key => $sub_name) {
-                        if ($lines = $field->getSubfields($sub_name)) {
-                            ${$key}[] = implode(
-                                ', ',
-                                array_map(
-                                    function ($elem) {
-                                        return $elem->getData();
-                                    },
-                                    $lines
-                                )
-                            );
-                        } else {
-                            ${$key}[] = '';
-                        }
+                             ] as $key => $sub_name) {
+                        ${$key}[] = $getSubfieldLinesConcat($field, $sub_name, ', ');
                     }
                 }
             }
         }
 
+        // getting (additional) contents from marc 533 - Reproduction Note (https://www.loc.gov/marc/bibliographic/bd533.html)
+        if ($fields = $this->getMarcRecord()->getFields('533')) {
+            $mapping = ['type' => 'a', 'place' => 'b', 'name' => 'c', 'date' => 'd'];
+            foreach ($fields as $field) {
+                foreach ($mapping as $key => $sub_name) {
+                    ${$key} = $getSubfieldLinesConcat($field, $sub_name, ', ');
+                }
+                $places[] = (empty($type) ? '' : $type . '. ') . $place ?? '';
+                $names[] = $name ?? '';
+                $dates[] = $date ?? '';
+            }
+        }
+
         $i = 0;
         $retval = [];
         while (isset($places[$i]) || isset($names[$i]) || isset($dates[$i])) {
@@ -2377,14 +2320,13 @@ trait SolrMarcFincTrait
      * Get the delivery status of the record.
      *
      * @return string
-     * @access public
      */
     public function getDeliveryStatus()
     {
         $retVal = [];
         $statuses = $this->getMarcRecord()->getFields('366');
 
-        if(!is_null($statuses)) {
+        if(null !== $statuses) {
             foreach ($statuses as $status) {
                 $value = $status->getSubfield('e');
                 if($value) {
@@ -2421,7 +2363,7 @@ trait SolrMarcFincTrait
             preg_match('/([1-9]\d*)/', $data, $matches);
             if ($page = $matches[0])
             {
-                return (int) $page;
+                return (int)$page;
             }
         }
         return null;
@@ -2491,4 +2433,4 @@ trait SolrMarcFincTrait
         }
         return null;
     }
-}
\ No newline at end of file
+}
diff --git a/module/finc/src/finc/Resolver/Driver/Ezb.php b/module/finc/src/finc/Resolver/Driver/Ezb.php
index d75a33704612cf2f422a7242df9da3f13fb6a442..49010ca04e3bcf9c791a0fca8348f8aa7686333e 100644
--- a/module/finc/src/finc/Resolver/Driver/Ezb.php
+++ b/module/finc/src/finc/Resolver/Driver/Ezb.php
@@ -128,8 +128,10 @@ class Ezb extends AbstractBase implements TranslatorAwareInterface
             // use IP-based request as fallback
             $openURL .= '&pid=client_ip%3D' . $_SERVER['REMOTE_ADDR'];
         }
-        $openURL .= isset($parsed['zdbid']) ?
-            '%26zdbid%3D' . $parsed['zdbid'] : '';
+        $openURL .= !isset($parsed['rft.issn']) && isset($parsed['zdbid']) ?
+            '&zdbid=' . $parsed['zdbid'] : '';
+
+        $openURL .= urlencode('&ezb=1');
 
         $url = $this->getResolverUrl($openURL);
 
diff --git a/module/finc/src/finc/View/Helper/Root/ExternalLink.php b/module/finc/src/finc/View/Helper/Root/ExternalLink.php
new file mode 100644
index 0000000000000000000000000000000000000000..91b1df9feaadbd1b7b2d51291c99fbd5a88d46d9
--- /dev/null
+++ b/module/finc/src/finc/View/Helper/Root/ExternalLink.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * External link view helper
+ *
+ * PHP version 7
+ *
+ * Copyright (C) Leipzig University Library 2020.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * @category VuFind
+ * @package  View_Helpers
+ * @author   Dorian Merz <merz@ub.uni-leipzig.de>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     https://vufind.org/wiki/development Wiki
+ */
+namespace finc\View\Helper\Root;
+
+/**
+ * External link view helper
+ *
+ * @category VuFind
+ * @package  View_Helpers
+ * @author   Dorian Merz <merz@ub.uni-leipzig.de>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     https://vufind.org/wiki/development Wiki
+ */
+class ExternalLink extends \Zend\View\Helper\AbstractHelper
+{
+    /**
+     * Context view helper
+     *
+     * @var \VuFind\View\Helper\Root\Translate
+     */
+    protected $translator;
+
+    /**
+     * Default html attributes for external links
+     *
+     * @var string[]
+     */
+    protected $defaultAttributes = [
+        'target' => "_blank",
+        'rel' => 'noopener'
+    ];
+
+    /**
+     * Renders an anchor element (hyperlink) to an external website
+     *
+     * @param string $href           URL of the external website
+     * @param string $label          desired label or translation token
+     * @param array  $attributes     more attributes to apply to the a element,
+     *                               key-value-pairs
+     * @param bool   $translateLabel true if label shall be translated
+     *
+     * @return string
+     */
+    public function __invoke(
+        $href,
+        $label = '',
+        $attributes = [],
+        $translateLabel = false
+    ) {
+        $link = '<a href="' . $href . '"';
+        $attributes = array_merge($this->defaultAttributes, $attributes);
+        foreach ($attributes as $key => $value) {
+            $link .= ' ' . $key . '="' . $value . '"';
+        }
+        $link .= '>';
+        if (empty($label)) {
+            $label = $href;
+        } elseif ($translateLabel) {
+            $label = $this->translate($label);
+        }
+        $link .= $label . '</a>';
+
+        return $link;
+    }
+
+    /**
+     * Helper function to provide access to Translate ViewHelper
+     *
+     * @param string $label translation token
+     *
+     * @return string
+     */
+    protected function translate($label)
+    {
+        if (!isset($this->translator)) {
+            $this->translator = $this->getView()->plugin('translate');
+        }
+        return $this->translator->translate($label);
+    }
+}
diff --git a/module/finc/src/finc/View/Helper/Root/Factory.php b/module/finc/src/finc/View/Helper/Root/Factory.php
index e4109ef4a2a8d6de1cde6956221ed5be15b0e8f9..4e44d5bae6a6e2bf0f8fa2a1aac7ae8a438cfb84 100644
--- a/module/finc/src/finc/View/Helper/Root/Factory.php
+++ b/module/finc/src/finc/View/Helper/Root/Factory.php
@@ -151,7 +151,8 @@ class Factory
         // constructor
         if (file_exists(
             \VuFind\Config\Locator::getConfigPath('OpenUrlRules.json')
-        )) {
+        )
+        ) {
             $openUrlRules = json_decode(
                 file_get_contents(
                     \VuFind\Config\Locator::getConfigPath('OpenUrlRules.json')
@@ -194,7 +195,8 @@ class Factory
         // constructor
         if (file_exists(
             \VuFind\Config\Locator::getConfigPath('ExternalCatalogue.json')
-        )) {
+        )
+        ) {
             $externalAccessLinks = json_decode(
                 file_get_contents(
                     \VuFind\Config\Locator::getConfigPath('ExternalCatalogue.json')
@@ -209,9 +211,26 @@ class Factory
         );
     }
 
+    /**
+     * Construct Head Title Helper
+     *
+     * @param ContainerInterface $container Service manager
+     *
+     * @return HeadTitle
+     */
     public static function getHeadTitle(ContainerInterface $container)
     {
         $config = $container->get('VuFind\Config')->get('config')->Site;
         return new HeadTitle($config->title ?? '');
     }
+
+    /**
+     * Construct ExternalLink
+     *
+     * @return ExternalLink
+     */
+    public static function getExternalLink()
+    {
+        return new ExternalLink();
+    }
 }
diff --git a/module/finc/src/finc/View/Helper/Root/Flashmessages.php b/module/finc/src/finc/View/Helper/Root/Flashmessages.php
index 1b099d258b2ac6056d4c5f7c0706a8efb742528f..c26fbb8288ac275b56259037cc28f61869a73fb5 100644
--- a/module/finc/src/finc/View/Helper/Root/Flashmessages.php
+++ b/module/finc/src/finc/View/Helper/Root/Flashmessages.php
@@ -39,8 +39,8 @@ namespace finc\View\Helper\Root;
 class Flashmessages extends \VuFind\View\Helper\Bootstrap3\Flashmessages
 {
     /**
-     * Generate flash message <p>'s with appropriate classes based on message type.
-     * This is basically a copy of the parent method but uses p-Tags instead of divs
+     * Generate flash message <div>'s with appropriate classes based on message type.
+     * This is basically a copy of the parent method but adds role = alert to divs
      *
      * @return string $html
      */
@@ -53,14 +53,14 @@ class Flashmessages extends \VuFind\View\Helper\Bootstrap3\Flashmessages
                 $this->fm->getMessages($ns), $this->fm->getCurrentMessages($ns)
             );
             foreach (array_unique($messages, SORT_REGULAR) as $msg) {
-                $html .= '<p class="' . $this->getClassForNamespace($ns) . '"';
+                $html .= '<div class="' . $this->getClassForNamespace($ns) . '"';
                 if (isset($msg['dataset'])) {
                     foreach ($msg['dataset'] as $attr => $value) {
                         $html .= ' data-' . $attr . '="'
                             . htmlspecialchars($value) . '"';
                     }
                 }
-                $html .= '>';
+                $html .= ' role="alert">';
                 // Advanced form:
                 if (is_array($msg)) {
                     // Use a different translate helper depending on whether
@@ -83,7 +83,7 @@ class Flashmessages extends \VuFind\View\Helper\Bootstrap3\Flashmessages
                     $transEsc = $this->getView()->plugin('transEsc');
                     $html .= $transEsc($msg);
                 }
-                $html .= '</p>';
+                $html .= '</div>';
             }
             $this->fm->clearMessages($ns);
             $this->fm->clearCurrentMessages($ns);
diff --git a/module/finc/src/finc/View/Helper/Root/SideFacet.php b/module/finc/src/finc/View/Helper/Root/SideFacet.php
index 240b5abd29b89c68c0424847ccf0df155a639a4c..528bd3b3c2d1c9c989df33c63b3f5ca36c5ca677 100644
--- a/module/finc/src/finc/View/Helper/Root/SideFacet.php
+++ b/module/finc/src/finc/View/Helper/Root/SideFacet.php
@@ -89,4 +89,29 @@ class SideFacet extends AbstractHelper
         }
         return $sideFacets;
     }
+
+    /**
+     * Get term with corresponding language tag within html element
+     *
+     * @param string $term     translation to decorate with language tag
+     * @param string $element  wrapping html element
+     * @param string $language current language
+     *
+     * @return string
+     *
+     * @deprecated remove when there's a VuFind core solution
+     */
+    public function getLanguageTag(string $term, string $element, string $language)
+    {
+        $retval = $term;
+
+        if (isset($this->config->LanguageTags[$term])
+            && $this->config->LanguageTags[$term] !== $language
+        ) {
+            $retval = "<$element " . 'lang="' . $this->config->LanguageTags[$term]
+                . '">' . "$term</$element>";
+        }
+
+        return $retval;
+    }
 }
diff --git a/themes/finc-accessibility/js/account_ajax.js b/themes/finc-accessibility/js/account_ajax.js
deleted file mode 100644
index 9d657d9f5d95421a30dd8782a76fa4205947137f..0000000000000000000000000000000000000000
--- a/themes/finc-accessibility/js/account_ajax.js
+++ /dev/null
@@ -1,256 +0,0 @@
-/*global userIsLoggedIn, VuFind */
-VuFind.register('account', function Account() {
-  // Retrieved statuses
-  var LOADING = -1 * Math.PI; // waiting for request
-  var MISSING = -2 * Math.PI; // no data available
-  var INACTIVE = -3 * Math.PI; // status element missing
-  var _statuses = {};
-
-  // Account Icons
-  var ICON_LEVELS = {
-    "NONE": 0,
-    "GOOD": 1,
-    "WARNING": 2,
-    "DANGER": 3
-  };
-  var _accountIcons = {};
-  _accountIcons[ICON_LEVELS.NONE] = "fa fa-user-circle";
-  _accountIcons[ICON_LEVELS.GOOD] = "fa fa-bell text-success";
-  _accountIcons[ICON_LEVELS.WARNING] = "fa fa-bell text-warning";
-  _accountIcons[ICON_LEVELS.DANGER] = "fa fa-exclamation-triangle text-danger";
-
-  var _submodules = [];
-
-  var _sessionDataPrefix = "vf-account-status-";
-  var _save = function _save(module) {
-    sessionStorage.setItem(
-      _sessionDataPrefix + module,
-      JSON.stringify(_statuses[module])
-    );
-  };
-
-  // Clearing save forces AJAX update next page load
-  var clearCache = function clearCache(name) {
-    if (typeof name === "undefined") {
-      for (var sub in _submodules) {
-        if (Object.prototype.hasOwnProperty.call(_submodules, sub)) {
-          clearCache(sub);
-        }
-      }
-    } else {
-      sessionStorage.removeItem(_sessionDataPrefix + name);
-    }
-  };
-
-  var _getStatus = function _getStatus(module) {
-    return (typeof _statuses[module] === "undefined") ? LOADING : _statuses[module];
-  };
-
-  var _render = function _render() {
-    var accountStatus = ICON_LEVELS.NONE;
-    for (var sub in _submodules) {
-      if (Object.prototype.hasOwnProperty.call(_submodules, sub)) {
-        var $element = $(_submodules[sub].selector);
-        if (!$element) {
-          _statuses[sub] = INACTIVE;
-          continue;
-        }
-        var status = _getStatus(sub);
-        if (status === MISSING) {
-          $element.addClass('hidden');
-        } else {
-          $element.removeClass('hidden');
-          if (status === LOADING) {
-            $element.html('<i class="fa fa-spin fa-spinner"></i>');
-          } else {
-            var moduleStatus = _submodules[sub].render($element, _statuses[sub], ICON_LEVELS);
-            if (moduleStatus > accountStatus) {
-              accountStatus = moduleStatus;
-            }
-          }
-        }
-      }
-    }
-    $("#account-icon").attr("class", _accountIcons[accountStatus]);
-    if (accountStatus > ICON_LEVELS.NONE) {
-      $("#account-icon")
-        .attr("data-toggle", "tooltip")
-        .attr("data-placement", "bottom")
-        .attr("title", VuFind.translate("account_has_alerts"))
-        ;
-    } else {
-      $("#account-icon").tooltip("destroy");
-    }
-  };
-  var _ajaxLookup = function _ajaxLookup(module) {
-    $.ajax({
-      url: VuFind.path + '/AJAX/JSON?method=' + _submodules[module].ajaxMethod,
-      dataType: 'json'
-    })
-      .done(function ajaxLookupDone(response) {
-        _statuses[module] = response.data;
-      })
-      .fail(function ajaxLookupFail() {
-        _statuses[module] = MISSING;
-      })
-      .always(function ajaxLookupAlways() {
-        _save(module);
-        _render();
-      });
-  };
-
-  var _load = function _load(module) {
-    var $element = $(_submodules[module].selector);
-    if (!$element) {
-      _statuses[module] = INACTIVE;
-    } else {
-      var json = sessionStorage.getItem(_sessionDataPrefix + module);
-      var session = typeof json === "undefined" ? null : JSON.parse(json);
-      if (
-        session === null ||
-        session === LOADING ||
-        session === MISSING
-      ) {
-        _statuses[module] = LOADING;
-        _ajaxLookup(module);
-      } else {
-        _statuses[module] = session;
-      }
-      _render();
-    }
-  };
-
-  var init = function init() {
-    // Update information when certain actions are performed
-    $("#renewals").submit(function clearCheckedOut() {
-      clearCache("checkedOut");
-    });
-    $('#cancelHold, [name="placeHold"]').submit(function clearHolds() {
-      clearCache("holds");
-    });
-    $('#ILLRequestForm, #cancelILLRequest').submit(function clearHolds() {
-      clearCache("illRequests");
-    });
-    $('[name="placeStorageRetrievalRequest"], #cancelStorageRetrievalRequest').submit(function clearStorageRetrievals() {
-      clearCache("storageRetrievalRequests");
-    });
-    $("#library_card").change(function clearChangeLibraryCard() {
-      clearCache(/* all */);
-    });
-  };
-
-  var register = function register(name, module) {
-    if (typeof _submodules[name] === "undefined") {
-      _submodules[name] = typeof module == 'function' ? module() : module;
-    }
-    var $el = $(_submodules[name].selector);
-    if ($el.length > 0) {
-      $el.removeClass("hidden");
-      _statuses[name] = LOADING;
-      _load(name);
-    } else {
-      _statuses[name] = INACTIVE;
-    }
-  };
-
-  return {
-    init: init,
-    clearCache: clearCache,
-    // if user is logged out, clear cache instead of register
-    register: userIsLoggedIn ? register : clearCache
-  };
-});
-
-$(document).ready(function registerAccountAjax() {
-
-  VuFind.account.register("fines", {
-    selector: ".fines-status",
-    ajaxMethod: "getUserFines",
-    render: function render($element, status, ICON_LEVELS) {
-      if (status.value === 0) {
-        $element.addClass("hidden");
-        return ICON_LEVELS.NONE;
-      }
-      $element.html('<span class="badge overdue">' + status.display + '</span>');
-      return ICON_LEVELS.DANGER;
-    }
-  });
-
-  VuFind.account.register("checkedOut", {
-    selector: ".checkedout-status",
-    ajaxMethod: "getUserTransactions",
-    render: function render($element, status, ICON_LEVELS) {
-      var html = '';
-      var level = ICON_LEVELS.NONE;
-      if (status.ok > 0) {
-        html += '<span class="badge ok" data-toggle="tooltip" title="' + VuFind.translate('Checked Out Items') + '">' + status.ok + '</span>';
-      }
-      if (status.warn > 0) {
-        html += '<span class="badge warn" data-toggle="tooltip" title="' + VuFind.translate('renew_item_due_tooltip') + '">' + status.warn + '</span>';
-        level = ICON_LEVELS.WARNING;
-      }
-      if (status.overdue > 0) {
-        html += '<span class="badge overdue" data-toggle="tooltip" title="' + VuFind.translate('renew_item_overdue_tooltip') + '">' + status.overdue + '</span>';
-        level = ICON_LEVELS.DANGER;
-      }
-      $element.html(html);
-      $('[data-toggle="tooltip"]', $element).tooltip();
-      return level;
-    }
-  });
-
-  VuFind.account.register("holds", {
-    selector: ".holds-status",
-    ajaxMethod: "getUserHolds",
-    render: function render($element, status, ICON_LEVELS) {
-      var level = ICON_LEVELS.NONE;
-      if (status.available > 0) {
-        $element.html('<i class="fa fa-bell text-success" data-toggle="tooltip" title="' + VuFind.translate('hold_available') + '"></i>');
-        level = ICON_LEVELS.GOOD;
-      } else if (status.in_transit > 0) {
-        $element.html('<i class="fa fa-clock-o text-warning" data-toggle="tooltip" title="' + VuFind.translate('request_in_transit') + '"></i>');
-      } else {
-        $element.addClass("holds-status hidden");
-      }
-      $('[data-toggle="tooltip"]', $element).tooltip();
-      return level;
-    }
-  });
-
-  VuFind.account.register("illRequests", {
-    selector: ".illrequests-status",
-    ajaxMethod: "getUserILLRequests",
-    render: function render($element, status, ICON_LEVELS) {
-      var level = ICON_LEVELS.NONE;
-      if (status.available > 0) {
-        $element.html('<i class="fa fa-bell text-success" data-toggle="tooltip" title="' + VuFind.translate('ill_request_available') + '"></i>');
-        level = ICON_LEVELS.GOOD;
-      } else if (status.in_transit > 0) {
-        $element.html('<i class="fa fa-clock-o text-warning" data-toggle="tooltip" title="' + VuFind.translate('request_in_transit') + '"></i>');
-      } else {
-        $element.addClass("holds-status hidden");
-      }
-      $('[data-toggle="tooltip"]', $element).tooltip();
-      return level;
-    }
-  });
-
-  VuFind.account.register("storageRetrievalRequests", {
-    selector: ".storageretrievalrequests-status",
-    ajaxMethod: "getUserStorageRetrievalRequests",
-    render: function render($element, status, ICON_LEVELS) {
-      var level = ICON_LEVELS.NONE;
-      if (status.available > 0) {
-        $element.html('<i class="fa fa-bell text-success" data-toggle="tooltip" title="' + VuFind.translate('storage_retrieval_request_available') + '"></i>');
-        level = ICON_LEVELS.GOOD;
-      } else if (status.in_transit > 0) {
-        $element.html('<i class="fa fa-clock-o text-warning" data-toggle="tooltip" title="' + VuFind.translate('request_in_transit') + '"></i>');
-      } else {
-        $element.addClass("holds-status hidden");
-      }
-      $('[data-toggle="tooltip"]', $element).tooltip();
-      return level;
-    }
-  });
-
-});
diff --git a/themes/finc-accessibility/templates/Recommend/AlphaBrowseLink.phtml b/themes/finc-accessibility/templates/Recommend/AlphaBrowseLink.phtml
index 6c3f63c4b61fab76fef821b2b1b8d4f9fbcb35a4..8d7fc91cc4c775c9d19045d2361d7e4c22b9ae69 100644
--- a/themes/finc-accessibility/templates/Recommend/AlphaBrowseLink.phtml
+++ b/themes/finc-accessibility/templates/Recommend/AlphaBrowseLink.phtml
@@ -14,5 +14,5 @@
     ]
   );
 ?>
-<p class="alert alert-info"><?=$link?></p>
+<p class="alert alert-info" role="alert"><?=$link?></p>
 <!-- finc-accessibility: Recommend - AlphaBrowseLink - END -->
diff --git a/themes/finc-accessibility/templates/Recommend/Channels.phtml b/themes/finc-accessibility/templates/Recommend/Channels.phtml
index 10710cbd4018d93ad48304cd973dca02d7bcf16a..9ea450e3ed1056f39a5a9eebb1616a27140dcba3 100644
--- a/themes/finc-accessibility/templates/Recommend/Channels.phtml
+++ b/themes/finc-accessibility/templates/Recommend/Channels.phtml
@@ -7,7 +7,7 @@
         . $results->getUrlQuery()->getParams(false)
         . '&source=' . urlencode($results->getParams()->getSearchClassId());
 ?>
-<p class="channels-alert alert alert-info">
+<p class="channels-alert alert alert-info" role="alert">
   <a href="<?=$this->escapeHtmlAttr($link)?>"><?=$this->transEsc('channel_expand')?></a>
 </p>
 <!-- finc-accessibility: Recommend - Channels - END -->
diff --git a/themes/finc-accessibility/templates/Recommend/DOI.phtml b/themes/finc-accessibility/templates/Recommend/DOI.phtml
index 0a20a62a35e08cb2eaf590fb0199514e022c1384..d39d99a2e6cc32115663df33cc0dd5747cae4d80 100644
--- a/themes/finc-accessibility/templates/Recommend/DOI.phtml
+++ b/themes/finc-accessibility/templates/Recommend/DOI.phtml
@@ -3,7 +3,7 @@
 
 <?php $doi = $this->recommend->getDOI(); if (!empty($doi)): ?>
   <?php $url = $this->recommend->getURL(); ?>
-  <p class="alert alert-info">
+  <p class="alert alert-info" role="alert">
     <?=$this->translate('doi_detected_html', ['%%url%%' => $url, '%%doi%%' => $doi])?>
   </p>
   <?php if ($this->recommend->isFullMatch()): ?>
diff --git a/themes/finc-accessibility/templates/Recommend/RemoveFilters.phtml b/themes/finc-accessibility/templates/Recommend/RemoveFilters.phtml
index c79a65f63ca767b0ff7333209e7ac8624dbe71b9..07f915a551d4bf3f16dec7ae90ec717809d2883c 100644
--- a/themes/finc-accessibility/templates/Recommend/RemoveFilters.phtml
+++ b/themes/finc-accessibility/templates/Recommend/RemoveFilters.phtml
@@ -2,7 +2,7 @@
 <?php /* #17950 - use <p> for alerts - HR */ ?>
 
 <?php if ($this->recommend->hasFilters()): ?>
-  <p class="alert alert-info">
+  <p class="alert alert-info" role="alert">
     <?=$this->transEsc('nohit_active_filters')?> 
     <a href="<?=$this->recommend->getFilterlessUrl()?>"><?=$this->transEsc('nohit_query_without_filters')?></a>
   </p>
diff --git a/themes/finc-accessibility/templates/Recommend/SideFacets/filter-list.phtml b/themes/finc-accessibility/templates/Recommend/SideFacets/filter-list.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..d7e75e1a60ccff2ce9e4bf5a8cdb58d4fe7bdc24
--- /dev/null
+++ b/themes/finc-accessibility/templates/Recommend/SideFacets/filter-list.phtml
@@ -0,0 +1,33 @@
+<!-- finc-accessibility - Recommend - SideFacets - filter-list.phtml -->
+<?php /* #18509 copied from bootstrap for adding language tags to displayText */ ?>
+<div class="facet-group active-filters">
+  <div class="title"><?=$this->transEsc('Remove Filters')?></div>
+  <?php foreach ($filterList as $field => $filters): ?>
+    <?php foreach ($filters as $i => $filter): ?>
+      <?php
+        $index = isset($filter['field']) ? array_search($filter['field'], $collapsedFacets) : false;
+        if ($index !== false) {
+          unset($collapsedFacets[$index]); // Open if we have a match
+        }
+        if (isset($filter['specialType']) && $filter['specialType'] == 'keyword') {
+          $removeLink = $this->currentPath() . $results->getUrlQuery()->replaceTerm($filter['value'], '');
+        } else {
+          $removeLink = $this->currentPath() . $results->getUrlQuery()->removeFacet($filter['field'], $filter['value'], $filter['operator']);
+        }
+        if ($filter['displayText'] == '[* TO *]') {
+          $filter['displayText'] = $this->translate('filter_wildcard');
+        }
+      ?>
+      <a class="facet" href="<?=$removeLink ?>" title="<?=$this->transEsc('clear_tag_filter') ?>">
+        <span class="sr-only"><?=$this->transEsc('clear_tag_filter') ?></span>
+        <span class="text">
+            <?php if ($filter['operator'] == 'NOT'): ?><?=$this->transEsc('NOT') ?><?php endif; ?>
+            <?php if ($filter['operator'] == 'OR' && $i > 0): ?><?=$this->transEsc('OR') ?><?php endif; ?>
+            <?=$this->transEsc($field) ?>: <?=$this->sideFacet()->getLanguageTag($this->escapeHtml($filter['displayText']), 'span', $this->layout()->userLang) ?>
+        </span>
+        <span class="status"><i class="fa fa-times" aria-hidden="true"></i></span>
+      </a>
+    <?php endforeach; ?>
+  <?php endforeach; ?>
+</div>
+<!-- finc-accessibility - Recommend - SideFacets - filter-list.phtml  - END -->
diff --git a/themes/finc-accessibility/templates/Recommend/SwitchType.phtml b/themes/finc-accessibility/templates/Recommend/SwitchType.phtml
index c44dc55b6b04da6d8e3fd71da4d8501f47b8fadf..9276727ecdf680fa8c1b7cb6629c34f6ba34778e 100644
--- a/themes/finc-accessibility/templates/Recommend/SwitchType.phtml
+++ b/themes/finc-accessibility/templates/Recommend/SwitchType.phtml
@@ -2,7 +2,7 @@
 <?php /* #17950 - use <p> for alerts - HR */ ?>
 
 <?php if ($handler = $this->recommend->getNewHandler()): ?>
-  <p class="alert alert-info">
+  <p class="alert alert-info" role="alert" role="alert">
     <?=$this->transEsc('widen_prefix')?>
     <a href="<?=$this->recommend->getResults()->getUrlQuery()->setHandler($handler)?>"><?=$this->transEsc($this->recommend->getNewHandlerName())?></a>.
   </p>
diff --git a/themes/finc-accessibility/templates/RecordDriver/EDS/result-list.phtml b/themes/finc-accessibility/templates/RecordDriver/EDS/result-list.phtml
index d65ddb57d0e14cf38e6911fafdc8e393755d7fb3..a8ddccec426875e49ae2dc9914bcda25cc33a56d 100644
--- a/themes/finc-accessibility/templates/RecordDriver/EDS/result-list.phtml
+++ b/themes/finc-accessibility/templates/RecordDriver/EDS/result-list.phtml
@@ -11,9 +11,9 @@
   $thumbnail = false;
   $thumbnailAlignment = $this->record($this->driver)->getThumbnailAlignment('result');
   ob_start(); ?>
-  <div class="media-<?=$thumbnailAlignment ?> <?=$this->escapeHtml($coverDetails['size'])?>">
+  <div class="media-<?=$thumbnailAlignment ?> <?=$this->escapeHtml($coverDetails['size'])?>" aria-hidden="true">
     <?php if ($coverDetails['cover']): ?>
-      <a href="<?=$this->recordLink()->getUrl($this->driver)?>" class="_record_link">
+      <a href="<?=$this->recordLink()->getUrl($this->driver)?>" class="_record_link" tabindex="-1">
         <img src="<?=$this->escapeHtmlAttr($coverDetails['cover'])?>" class="recordcover" alt="<?=$this->transEsc('Cover Image')?>"/>
       </a>
     <?php else: ?>
@@ -118,7 +118,7 @@
         <i class="fa fa-fw fa-star" aria-hidden="true"></i> <a href="<?=$this->recordLink()->getActionUrl($this->driver, 'Save')?>" class="save-record" data-lightbox id="<?=$this->driver->getUniqueId() ?>" title="<?=$this->transEsc('Add to favorites')?>"><?=$this->transEsc('Add to favorites')?></a><br/>
 
         <?php /* Saved lists */ ?>
-        <p class="savedLists alert alert-info hidden">
+        <p class="savedLists alert alert-info hidden" role="alert">
           <strong><?=$this->transEsc("Saved in")?>:</strong>
         </p>
       <?php endif; ?>
diff --git a/themes/finc-accessibility/templates/Related/Channels.phtml b/themes/finc-accessibility/templates/Related/Channels.phtml
index 04f65247244c0ea79f6b2872dbfe1a73ec3368f9..5b5abb0465820528c50343ab7aad9fa33b6526c6 100644
--- a/themes/finc-accessibility/templates/Related/Channels.phtml
+++ b/themes/finc-accessibility/templates/Related/Channels.phtml
@@ -7,7 +7,7 @@
         . '?id=' . urlencode($driver->getUniqueId())
         . '&source=' . urlencode($driver->getSourceIdentifier());
 ?>
-<p class="channels-alert alert alert-info">
+<p class="channels-alert alert alert-info" role="alert">
   <a href="<?=$this->escapeHtmlAttr($link)?>"><?=$this->transEsc('channel_expand')?></a>
 </p>
 <!-- finc-accessibility: Related - Channels - END -->
diff --git a/themes/finc-accessibility/templates/myresearch/delete.phtml b/themes/finc-accessibility/templates/myresearch/delete.phtml
index 19fc345724ecabbc95f7602577310e30e2be84f4..aeb2c39b4b64b8759d3c88c1df86a5bd96292a15 100644
--- a/themes/finc-accessibility/templates/myresearch/delete.phtml
+++ b/themes/finc-accessibility/templates/myresearch/delete.phtml
@@ -7,7 +7,7 @@
   <div id="popupMessages"><?=$this->flashmessages()?></div>
   <div id="popupDetails">
     <?php if (!$this->list): ?>
-      <p class="alert alert-info"><?=$this->transEsc("fav_delete_warn") ?></p>
+      <p class="alert alert-info" role="alert"><?=$this->transEsc("fav_delete_warn") ?></p>
     <?php else: ?>
       <h2><?=$this->transEsc("List") ?>: <?=$this->escapeHtml($this->list->title) ?></h2>
     <?php endif; ?>
diff --git a/themes/finc-accessibility/templates/myresearch/login.phtml b/themes/finc-accessibility/templates/myresearch/login.phtml
index 5bf1facad28941ca265940bc867cf9cd8d4841c9..f7d5f80479408229447b485f1b3b0056d30a18c3 100644
--- a/themes/finc-accessibility/templates/myresearch/login.phtml
+++ b/themes/finc-accessibility/templates/myresearch/login.phtml
@@ -22,7 +22,7 @@
 <?=$this->flashmessages()?>
 
 <?php if ($hideLogin): ?>
-  <p class="alert alert-danger"><?=$this->transEsc('login_disabled')?></p>
+  <p class="alert alert-danger" role="alert"><?=$this->transEsc('login_disabled')?></p>
 <?php else: ?>
   <?=$this->auth()->getLogin()?>
 <?php endif; ?>
diff --git a/themes/finc-accessibility/templates/record/comments-list.phtml b/themes/finc-accessibility/templates/record/comments-list.phtml
index 66b90c54bb8dfd790243408f195f0f0c04471309..fa892bbad12807b77f5528e057e0e19c6e5e8e69 100644
--- a/themes/finc-accessibility/templates/record/comments-list.phtml
+++ b/themes/finc-accessibility/templates/record/comments-list.phtml
@@ -1,7 +1,7 @@
 <!-- finc-accessibility: record - comments-list -->
 <?php $comments = $this->driver->getComments(); ?>
 <?php if (empty($comments) || count($comments) == 0): ?>
-  <p class="alert alert-info"><?=$this->transEsc('Be the first to leave a comment')?>!</p>
+  <p class="alert alert-info" role="alert"><?=$this->transEsc('Be the first to leave a comment')?>!</p>
 <?php else: ?>
   <?php foreach ($comments as $comment): ?>
     <div class="comment">
diff --git a/themes/finc/images/dfg_logo_text.png b/themes/finc/images/dfg_logo_text.png
old mode 100755
new mode 100644
diff --git a/themes/finc/js/cart-finc.js b/themes/finc/js/cart-finc.js
new file mode 100644
index 0000000000000000000000000000000000000000..0fbaf1015f44cd429d87a2f1db9a0f5745c5c320
--- /dev/null
+++ b/themes/finc/js/cart-finc.js
@@ -0,0 +1,8 @@
+/* #18034 - inform screen reader about changes, eventually intregrate by PR into bootstrap cart.js - RL */
+$(document).ready(function() {
+  var cart = document.getElementById("cartSummary");
+  if (cart != null) {
+    cart.setAttribute("aria-live", "polite");
+    cart.setAttribute("aria-atomic", "true");
+  }
+});
diff --git a/themes/finc/js/lightbox.js b/themes/finc/js/lightbox.js
index 50e34faa90b8204e93fa5c5085a02bde4186a5bb..ecd9155acd7e7952e7780678724aced2b96168cf 100644
--- a/themes/finc/js/lightbox.js
+++ b/themes/finc/js/lightbox.js
@@ -42,7 +42,7 @@ VuFind.register('lightbox', function Lightbox() {
   // Public: Present an alert
   function showAlert(message, _type) {
     var type = _type || 'info';
-    _html('<p class="flash-message alert alert-' + type + '">' + message + '</p>'
+    _html('<div class="flash-message alert alert-' + type + '" role="alert">' + message + '</div>'
         + '<button class="btn btn-default" data-dismiss="modal">' + VuFind.translate('close') + '</button>');
     _modal.modal('show');
   }
@@ -50,7 +50,7 @@ VuFind.register('lightbox', function Lightbox() {
     var type = _type || 'info';
     _modalBody.find('.flash-message,.fa.fa-spinner').remove();
     _modalBody.find('h2:first-of-type')
-      .after('<p class="flash-message alert alert-' + type + '">' + message + '</p>');
+      .after('<div class="flash-message alert alert-' + type + '" role="alert">' + message + '</div>');
   }
   function close() {
     _modal.modal('hide');
diff --git a/themes/finc/scss/_customVariables.scss b/themes/finc/scss/_customVariables.scss
index 2ec7208aa6fee819e34ae66f6cc2d778ee0fe718..d8f505d4b88e7fd32bd74953b1592c2392463fb3 100644
--- a/themes/finc/scss/_customVariables.scss
+++ b/themes/finc/scss/_customVariables.scss
@@ -149,6 +149,9 @@ $button-title-hover-bg: $brand-secondary !default;
 
 $btn-language-hover-bg: $brand-primary !default;
 $btn-language-active-hover-bg: $steel !default;
+$btn-language-hover-color: $white !default;
+
+$btn-header-nav-medium-only-padding: 6px 2px !default;
 
 // Padding for toolbar buttons in record view/detail view
 $record-view-toolbar-button-padding: .5rem;
@@ -225,7 +228,7 @@ $navbar-height-sm: $navbar-height !default;
 $navbar-height-xs: $navbar-height + 40px !default;
 $navbar-max-height-xs: $navbar-height + 40px !default;
 
-//// Navigation elements default height: This height must be adapted to the button height, which changes with default font size; apply to navigation elements such as select dropdowns
+//// Navigation elements default height: This height _must_ be adapted to the button height (.btn, .search-filter-toggle {}), which changes with default font size; apply to navigation elements such as select dropdowns
 $navigation-element-default-height: 38px;
 
 //// Top-padding for #content -> .row first-of-type (and .sidebar) - change this value to change both;
diff --git a/themes/finc/scss/compiled.scss b/themes/finc/scss/compiled.scss
index 91c61145434bd4598a9d808516cd808adde03d9e..dce8272442bc2503932997b3945fa6e771c16f05 100644
--- a/themes/finc/scss/compiled.scss
+++ b/themes/finc/scss/compiled.scss
@@ -101,6 +101,11 @@ body {
     }
   }
 
+  // for XS
+  @media (max-width: $screen-xs-max) {
+    padding-top: 8.5rem;
+  }
+
   // for tablet
   @media (min-width: $screen-sm-min) {
     padding-top: $navbar-height-sm;
@@ -131,25 +136,32 @@ label,
 }
 
 // HEADINGS
-//// All
-//// remove top margin to align with sidebars etc., except advanced search on XS
-h1:first-of-type {
-  margin-top: 0;
-}
+//// h1
+h1 {
+  font-size: 2rem;
+
+  //// remove top margin to align with sidebars etc., except advanced search on XS
+  &:first-of-type {
+    margin-top: 0;
 
-@media only screen and (max-width: $screen-xs-max) {
-  h1:first-of-type {
-    margin-top: revert;
+    @media (max-width: $screen-xs-max) {
+      margin-top: revert;
 
-    body:not(.template-name-advanced) & {
-      margin-top: 0;
+      body:not(.template-name-advanced) & {
+        margin-top: 0;
+      }
     }
   }
-}
 
-//// h1
-h1 {
-  font-size: 2rem;
+  .template-dir-cart.template-name-cart .container &,
+  .template-dir-content.template-name-content &,
+  .template-dir-myresearch.template-name-editlist &,
+  .template-dir-search.template-name-newitem &,
+  .template-dir-search.template-name-reserves & {
+    @media (max-width: $screen-xs-max) {
+      padding-top: 15px;
+    }
+  }
 }
 
 //// h2
@@ -159,16 +171,16 @@ h2 {
   .sidebar & {
     font-size: 1.5rem;
 
-    @media only screen and (max-width: $screen-xs-max) {
+    @media (max-width: $screen-xs-max) {
       margin-left: $grid-gutter-width / 2;
     }
 
-    @media only screen and (max-width: $screen-sm-max) {
+    @media (max-width: $screen-sm-max) {
       font-size: 1.25rem;
       margin-top: 1.75rem;
     }
 
-    @media only screen and (min-width: $screen-md-min) {
+    @media (min-width: $screen-md-min) {
       &:first-of-type {
         margin-top: 0;
       }
@@ -184,20 +196,20 @@ h3 {
 //// h4
 h4 {
   font-size: 1.25rem;
-}
 
-////// H4 atop Sidebar - align to limit and sort
-.sidebar h4 {
-  margin-top: 0;
+  ////// H4 atop Sidebar - align to limit and sort
+  .sidebar & {
+    margin-top: 0;
 
-  @media (max-width: $screen-sm-max) {
-    text-align: center;
-  }
+    @media (max-width: $screen-sm-max) {
+      text-align: center;
+    }
 
-  // keep level with left-hand content
-  @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
-    font-size: $font-size-base + 2px;
-    margin-top: ($grid-gutter-width / 2);
+    // keep level with left-hand content
+    @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
+      font-size: $font-size-base + 2px;
+      margin-top: ($grid-gutter-width / 2);
+    }
   }
 }
 
@@ -370,7 +382,6 @@ legend {
 }
 
 //// label {}
-
 .text-success,
 .text-danger {
   padding: .5em;
@@ -523,6 +534,13 @@ select {
   .template-name-myresearch & {
     background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMTJweCIgeT0iMHB4IiB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzcHgiIHZpZXdCb3g9IjAgMCA2IDMiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDYgMyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBvbHlnb24gcG9pbnRzPSI1Ljk5MiwwIDIuOTkyLDMgLTAuMDA4LDAgIi8+PC9zdmc+);
   }
+
+  .searchForm & {
+    @media (min-width: $screen-sm-min) {
+      // prevent adv search button from breaking onto new line
+      max-width: 140px;
+    }
+  }
 }
 
 // remove icons in limiter select boxes in adv. search
@@ -565,6 +583,8 @@ a {
 
 // CLASSES (Elements that are used in several places)
 //// BUTTONS
+// NOTE: buttons have a default height of 38px, the same as $navigation-element-default-height for select boxes etc
+
 ////// Transparent buttons (button with border and darker text on light or white BGs)
 .btn-transparent {
   @include button-variant($btn-transparent-color, $btn-transparent-bg, $btn-transparent-border);
@@ -686,7 +706,7 @@ a {
 //// HOVERABLE DROPDOWNS -- make DDs hoverable as in FNDTN
 // Add the dropdown-on-hover class to the parent li container! OR use on all (see commented-out part below)
 // Menu will show on hover
-@media only screen and (min-width: $screen-sm-min) {
+@media (min-width: $screen-sm-min) {
   .dropdown-on-hover:hover .dropdown-menu {
     display: block;
   }
@@ -855,7 +875,7 @@ table.collapse.in {
 
   // push COVER down on SM and XS
   .media-left {
-    @media only screen and (max-width: $screen-sm-max) {
+    @media (max-width: $screen-sm-max) {
       margin-top: 15px;
     }
   }
@@ -869,6 +889,7 @@ table.collapse.in {
   .cover-container {
     min-width: 6em;
   }
+
   // cover - END
 }
 
@@ -1015,6 +1036,40 @@ table.collapse.in {
   position: absolute;
 }
 
+// Class to remplace hidden-sm, hidden-md, hidden-lg
+.hidden-sm-up {
+  @media (min-width: $screen-sm-min) {
+    display: none;
+  }
+}
+
+.hidden-sm-md {
+  @media (min-width: $screen-sm-min) and (max-width: $screen-md-max) {
+    display: none;
+  }
+}
+
+.visible-sm-only {
+  @media (max-width: $screen-xs-max) {
+    display: none;
+  }
+
+  @media (min-width: $screen-md-min) {
+    display: none;
+  }
+}
+
+.visible-sm-md-only {
+  @media (max-width: $screen-xs-max) {
+    display: none;
+  }
+
+  @media (min-width: $screen-lg-min) {
+    display: none;
+  }
+}
+
+
 // Flex container for wrapping flex elements, such als header
 .flex-container {
   @media (min-width: $screen-sm-min) {
@@ -1305,7 +1360,7 @@ header,
   display: flex; // important for subsequent flex elements
 
   // stack elements on top of each other on XS
-  @media only screen and (max-width: $screen-xs-max) {
+  @media (max-width: $screen-xs-max) {
     flex-direction: column;
   }
 }
@@ -1319,7 +1374,7 @@ header,
 
 //// Keep navbar on left, when offcanvas is active, give same appearance as ever
 .offcanvas.active .navbar-fixed-top {
-  @media only screen and (max-width: $screen-xs-max) {
+  @media (max-width: $screen-xs-max) {
     margin-top: -$navbar-height-xs;
     position: relative;
   }
@@ -1339,9 +1394,9 @@ header,
     min-height: 3rem;
   }
 
-  @media only screen and (max-width: $screen-xs-max) {
-    header & {
-      min-height: 5rem;
+  header & {
+    @media (max-width: $screen-xs-max) {
+      min-height: 9rem;
     }
   }
 
@@ -1364,12 +1419,12 @@ header,
   // Searchbox see below
 
   // Set max height for xs devices
-  @media only screen and (max-width: $screen-xs-max) {
+  @media (max-width: $screen-xs-max) {
     min-height: $navbar-height-xs;
   }
 
   // Define height for navbar on small, allow for stacked search box +
-  @media only screen and (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
+  @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
     min-height: $navbar-height-sm;
     //padding-bottom: ($grid-gutter-width / 2);
   }
@@ -1385,9 +1440,9 @@ header,
 }
 
 // Style language dropdown for XS
-@media (max-width: $screen-xs-max) {
-  // avoid BG bleed on small
-  .navbar .navbar-nav {
+.navbar .navbar-nav {
+  @media (max-width: $screen-xs-max) {
+    // avoid BG bleed on small
     margin-bottom: 0;
   }
 }
@@ -1401,12 +1456,15 @@ header,
   border: 0;
   min-width: auto;
 
-  .btn:hover {
+  .btn:hover,
+  .btn:focus {
     background-color: $btn-language-hover-bg;
+    color: $btn-language-hover-color;
   }
 
   .active .btn:hover {
     background-color: $btn-language-active-hover-bg;
+    color: $btn-language-hover-color;
   }
 
   li a {
@@ -1422,18 +1480,40 @@ header,
       }
     }
   }
+}
 
-  &.oneLanguage {
-    display: block;
-    position: relative;
+// Language select when there is only one language
+.oneLanguage {
+  display: block;
+  margin-top: 0;
+  position: relative;
+
+  .btn {
+    background: transparent;
+    color: $brand-primary;
+
+    @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
+      float: right;
+      padding: 6px 0;
+    }
+
+    @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
+      float: right;
+      padding: 6px;
+    }
+  }
+
+  .visible-sm-only {
+    text-transform: capitalize;
   }
 }
 
+
 .navbar-header {
   flex: 0 1 auto;
 
   // ensure proper margins on XS in conjunction with flex-direction: column
-  @media only screen and (max-width: $screen-xs-max) {
+  @media (max-width: $screen-xs-max) {
     .container > & {
       margin-left: 0;
       margin-right: 0;
@@ -1482,7 +1562,7 @@ header,
 
 // Remove cart text to make searchbox fit on intermediate tablets
 .cart-label {
-  @media only screen and (min-width: $screen-sm-min) and (max-width: 994px) {
+  @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
     display: none;
   }
 }
@@ -1532,8 +1612,8 @@ header,
 }
 
 //// navbar-right - add negative right margin to align last button in row to content in sidebar below (right padding)
-@media (min-width: $screen-sm-min) {
-  .navbar-right {
+.navbar-right {
+  @media (min-width: $screen-sm-min) {
     margin-right: -$navbar-padding-horizontal;
   }
 }
@@ -1542,6 +1622,11 @@ header,
 .nav > li > a.btn {
   @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $btn-border-radius-base);
 
+  // make buttons fit on SM
+  @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
+    padding: $btn-header-nav-medium-only-padding; // 6px 2px
+  }
+
   &:hover,
   &:focus {
     background-color: $component-active-bg; // Same hover-color must be applied to 'Advanced Search' button below
@@ -1552,108 +1637,64 @@ header,
 
 // NAVBAR - END
 
+
 // SEARCHBOX and Autocomplete
 // Make seachbox container flexible -- values should complement those of #header-collapse (right-hand side navigation elements)
 .search.container {
   padding-right: 0;
 
-  // Make wider to fit searchbox and right-hand nav-elements
-  @media (min-width: $screen-sm-min) {
-    flex: 0 1 auto;
-    padding-top: $button-top-padding;
-    width: auto;
-  }
-
   // Float "Find" button next to searchbox on XS and SM
   @media (max-width: $screen-sm-max) {
     padding-left: 0;
   }
 
-  @media only screen and (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
+  @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
     flex: content;
   }
 
-  .searchForm_lookfor {
-    @media (max-width: $screen-xs-max) {
-      //max-width: 80%;
-    }
-  }
-
-  .searchForm {
-    @media only screen and (max-width: $screen-sm-max) {
-      display: flex;
-
-      input {
-        flex-grow: 2;
-        flex-shrink: 2;
-        // max-width: 43%;
-      }
-
-      .navbar {
-        flex-grow: 1;
-        flex-shrink: 1;
-      }
-
-      // take out of flexbox flow
-      .checkbox {
-        position: absolute;
-        top: 40px;
-      }
-    }
-
-    @media only screen and (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
-      display: block;
-
-      .checkbox {
-        position: static;
-      }
-    }
-  }
-
-  .btn,
-  .form-control {
-    @media only screen and (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
-      float: left;
-    }
+  // Make wider to fit searchbox and right-hand nav-elements
+  @media (min-width: $screen-sm-min) {
+    flex: 0 1 auto;
+    padding-top: $button-top-padding;
+    width: auto;
   }
 }
 
-//// this will get search box and buttons in line
-
-.navbar-left {
-  // push searchbox down on mobile
-  @media only screen and (max-width: $screen-xs-max) {
-    display: contents;
+.searchForm {
+  @media (max-width: $screen-sm-max) {
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: flex-start;
     margin-bottom: 0;
     margin-top: 0;
-
-    &.navbar-form {
-      padding-top: 0;
-    }
+    padding-top: 0;
   }
-}
 
-.searchForm {
   // Search slot inside the search container
-  @media only screen and (min-width: $screen-sm-min) {
+  @media (min-width: $screen-sm-min) {
     width: 100%;
   }
 
-  .list-unstyled li {
-    float: left;
+  @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
+    display: block;
+  }
 
-    // Advanced Search button
-    .btn.secondary {
-      &:hover,
-      &:focus {
-        background-color: $component-active-bg; // Same hover-color must be applied to Header buttons above
-        color: $white;
-      }
+  // Searchform input field
+  input:not([type='checkbox']) {
+    @media (max-width: $screen-sm-max) {
+      display: flex;
+      flex-basis: 50%;
+      flex-grow: 2;
+      flex-shrink: 2;
     }
   }
 
-  input {
-    float: left;
+  // Fixme: Is there a navbar inside searchForm anywhere?
+  .navbar {
+    @media (max-width: $screen-sm-max) {
+      flex-grow: 1;
+      flex-shrink: 1;
+    }
   }
 
   // Keep filters, shards etc; apply same styles to checkboxes on HOME and all other pages,
@@ -1664,29 +1705,41 @@ header,
     float: none;
     padding-top: ($grid-gutter-width / 4);
 
+    @media (max-width: $screen-sm-max) {
+      // make this correspond to .searchForm @media (max-width: $screen-sm-max) {}, requires "flex-wrap: wrap" on parent
+      display: flex;
+      margin-top: .7rem;
+      padding-top: 0;
+      width: 100%;
+    }
+
+    @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
+      position: static;
+    }
+
+    // actual checkbox box
     input {
       margin-right: .25rem;
       // make sure, input and label are aligned in acceptable manner between 100% and 200% zoom
       margin-top: $inputs-top-margin;
     }
   }
-}
 
-//// Searchbox on Homepage
-@media only screen and (max-width: $screen-xs-max) {
-  .searchHomeContent {
-    .well {
-      background-color: transparent;
-      border: 0;
-      box-shadow: none;
-      min-height: ($grid-gutter-width / 2);
-      padding: 0;
+  // BUTTONS in search form
+  .btn,
+  .form-control {
+    // align pre-filter and search button
+    vertical-align: top;
+
+    @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
+      float: left;
     }
+  }
 
-    .searchForm .navbar-left,
-    .searchForm .navbar-right {
-      border: 0;
-      margin-top: 0;
+  // make advanced search button discernible
+  .btn-transparent {
+    @media (max-width: $screen-sm-max) {
+      border: 1px solid $oil;
     }
   }
 }
@@ -1699,6 +1752,18 @@ header,
 }
 
 //// Advanced Search links in header
+// outer container for adv search links
+.navbar-form {
+  margin-bottom: 0; // overwrites BS theme
+
+  .result-advanced & {
+    // create sufficient space for header menu
+    @media (min-width: $screen-sm-min) and (max-width: $screen-md-max) {
+      max-width: 400px;
+    }
+  }
+}
+
 .adv_search_terms {
   background-color: $brand-secondary;
   border: 1px solid $brand-primary;
@@ -1708,13 +1773,15 @@ header,
 }
 
 .adv_search_links {
-  border-bottom: 1px solid $brand-primary;
-  border-left: 1px solid $brand-primary;
-  border-right: 1px solid $brand-primary;
+  border: 1px solid $brand-primary;
   list-style: none;
   margin: 0;
   padding: 0;
 
+  @media (min-width: $screen-sm-min) {
+    margin-top: 5px;
+  }
+
   a {
     border-top: 0;
     display: inline;
@@ -1726,7 +1793,7 @@ header,
   }
 
   // 786px and above as inline list
-  @media only screen and (min-width: $screen-sm-min) {
+  @media (min-width: $screen-sm-min) {
     a {
       border-bottom: 0;
       border-right: 1px solid $brand-primary;
@@ -1740,6 +1807,7 @@ header,
   }
 }
 
+
 // SEARCHBOX and Autocomplete - END
 
 // BREADCRUMBS - for detailed switches see customVariables
@@ -1757,8 +1825,18 @@ header,
     color: $white;
   }
 
+  // Result list after an advanced search in width XS should not get this slash
+  > li + li::before {
+    @media (max-width: $screen-xs-max) {
+      display: none;
+    }
+  }
+
   //// color of links in breadcrumbs
-  a,
+  a {
+    color: $white;
+  }
+
   > .active a {
     color: darken($breadcrumb-active-color, 10%);
   }
@@ -1766,15 +1844,16 @@ header,
   //// more contrast: switch the colors
   a:focus,
   a:hover {
-    background-color: $breadcrumb-color;
-    color: $breadcrumb-bg;
+    background-color: transparent;
+    color: darken($white, 10%);
   }
 }
 
-////// Prevent overlapping of header on breadcrumb on 100% zoom on advanced search result list
-////// (works only correctly for one line in cell "Your search terms")
-.template-dir-search.template-name-results .search .navbar-form {
-  margin-bottom: 5px;
+// Search result after advanced search needs padding for XS
+.result-advanced .breadcrumbs {
+  @media (max-width: $screen-xs-max) {
+    padding-top: .6rem;
+  }
 }
 
 // BREADCRUMBS - END
@@ -1805,7 +1884,7 @@ footer {
 .sidebar {
   padding-top: $content-top-padding;
 
-  @media only screen and (max-width: $screen-sm-max) {
+  @media (max-width: $screen-xs-max) {
     padding-top: 0;
   }
 }
@@ -1844,10 +1923,6 @@ footer {
   float: left;
 }
 
-.limit {
-  margin-right: ($grid-gutter-width / 2);
-}
-
 .limit,
 .sort {
   margin-bottom: 5px;
@@ -1855,6 +1930,7 @@ footer {
   label {
     line-height: normal;
     margin-bottom: 0;
+    padding-right: 0;
   }
 
   select {
@@ -1862,8 +1938,28 @@ footer {
   }
 }
 
-.search-controls-div {
+.limit {
+  margin-right: ($grid-gutter-width / 2);
+
+  @media (max-width: $screen-xs-max) {
+    float: right;
+    margin-bottom: 7px;
+    margin-right: 0;
+  }
+
+  label {
+    text-align: left;
+  }
+}
+
+.limit-inner,
+.sort-inner {
   display: inline-block;
+
+  // top align buttons and select boxes
+  .btn {
+    vertical-align: top;
+  }
 }
 
 .search-sort {
@@ -1873,9 +1969,15 @@ footer {
 // limit the width of the select field if necessary - for more select details, see FORMS section above
 .sort select {
   max-width: 12em;
+
+  @media only screen and (max-width: 410px) {
+    max-width: 9em;
+  }
 }
 
-@media only screen and (max-width: $screen-xs-max) {
+
+// FIXME: THis needs to be reviewed for #18810 - CK
+@media (max-width: $screen-sm-max) {
   .limit,
   .sort {
     float: left;
@@ -1885,35 +1987,24 @@ footer {
     select {
       display: block;
     }
-    
+
     select {
       margin-bottom: 0;
       margin-right: .2rem;
     }
   }
-  
-  .limit {
-    margin-right: 1rem;
-  }
-  
+
   // Place the refresh button near to the select box
-  .search-controls-div {
+  .limit-inner,
+  .sort-inner {
     display: flex;
   }
-  
-  // Force the label for floating the text left
-  .search-sort.text-right {
-    text-align: left;
-  }
-  
-  // Force the search-sort content to being floated left. Otherwise the refresh button is not visible during user zoom 200%.
-  .sort.right {
-    float: left !important;
-  }
 }
 
+// SEARCH CONTROLS - END
+
 //// Off-Canvas
-@media only screen and (max-width: $screen-sm-max) {
+@media (max-width: $screen-sm-min) {
   .close-offcanvas {
     display: block;
   }
@@ -1974,7 +2065,6 @@ footer {
 }
 
 //// Off-Canvas - END
-// SEARCH CONTROLS - END
 
 //// Search Results padding
 ////// pulled out via .search-results, use negative gutter-width divided by 2
@@ -1988,13 +2078,26 @@ footer {
 .bulk-action-buttons,
 .bulkActionButtons {
   padding-left: ($grid-gutter-width / 2);
+
+  @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
+    .btn-group {
+      margin-left: -($grid-gutter-width / 2);
+    }
+  }
+}
+
+// truncate "add to bookbag" to make it fit -- Fixme: needs review, CK
+#updateCart {
+  @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
+    max-width: 163px;
+  }
 }
 
 //// Result List ol, ul that contains li.result or facet group that contains li.facet
 .record-list {
   list-style: none;
-  padding: 0;
   margin: 0;
+  padding: 0;
 }
 
 //// Results (see BS SCSS/COMPONENTS/... for details)
@@ -2019,11 +2122,11 @@ footer {
     font-weight: normal; // overwrites VF-BS-Theme setting
 
     // reset font size for xs
-    @media only screen and (max-width: $screen-xs-max) {
+    @media (max-width: $screen-xs-max) {
       font-size: $font-size-base;
     }
 
-    @media only screen and (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
+    @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
       font-size: $font-size-base + 2px;
     }
   }
@@ -2194,7 +2297,7 @@ footer {
 
 /////// Format items in availability column
 .availability-column {
-  @media only screen and (max-width: $screen-sm-max) {
+  @media (max-width: $screen-sm-max) {
     a {
       display: block;
       margin-top: 6px;
@@ -2353,6 +2456,17 @@ footer {
 ////// Add top margin for better looks
 .searchHomeContent {
   margin-top: 1em;
+
+  @media (max-width: $screen-xs-max) {
+    // Fixme: Where is .well used? CK
+    .well {
+      background-color: transparent;
+      border: 0;
+      box-shadow: none;
+      min-height: ($grid-gutter-width / 2);
+      padding: 0;
+    }
+  }
 }
 
 ////// browsing suggestion lists on home (prevent torn-apart look when 2 columns only)
@@ -2430,7 +2544,7 @@ footer {
 // SIDEBAR
 // Width when offcanvas is off
 body:not(.offcanvas) .sidebar {
-  @media only screen and (max-width: $screen-xs-max) {
+  @media (max-width: $screen-xs-max) {
     width: 100%;
   }
 }
@@ -2496,7 +2610,7 @@ body:not(.offcanvas) .sidebar {
 
 
 //// Offcanvas is used to widths of 767px ($screen-xs-max)
-@media only screen and (max-width: $screen-xs-max) {
+@media (max-width: $screen-xs-max) {
   .offcanvas.active .sidebar {
     padding-right: ($grid-gutter-width / 2);
   }
@@ -2753,7 +2867,7 @@ footer ul {
   opacity: unset;
   right: 0;
 
-  @media (min-width: 768px) {
+  @media (min-width: $screen-sm-min) {
     right: -60px;
 
     body.rtl & {
@@ -2923,7 +3037,6 @@ input {
 // Accessibility - END
 
 // Account
-
 .has-error .form-control,
 .sms-error .form-control {
   border: 1px solid $brand-danger;
@@ -2938,7 +3051,9 @@ input {
 // Account - END
 
 // Dropdown Toggler color
-// WARNING: Potential Breaking Change! e.g. bookbag delete button with dropdown -- could result in white text on white background --> introduce variable "$btn-transparent-active-color" in custom themes and define color
+// WARNING: Potential Breaking Change!
+// e.g. bookbag delete button with dropdown -- could result in white text on white background
+// --> introduce variable "$btn-transparent-active-color" in custom themes and define color
 // FIXME: MOVE TO buttons or dropdowns section
 .open .btn-transparent.dropdown-toggle {
   &[aria-expanded="true"] {
@@ -2961,11 +3076,19 @@ input {
 }
 
 // AMSL
-
 .template-dir-amsl.template-name-sources-list {
   .panel-body span {
     margin: 10px 15px 10px 0;
   }
 }
 
-// AMSL - END
\ No newline at end of file
+// AMSL - END
+
+.template-dir-browse.template-name-home {
+  .browse-container {
+    @media (max-width: $screen-xs-max) {
+      padding-top: 15px;
+    }
+  }
+}
+
diff --git a/themes/finc/templates/Recommend/SideFacets/single-facet.phtml b/themes/finc/templates/Recommend/SideFacets/single-facet.phtml
index 58b71027afa3d45a1526d6942dabac89ac2457af..bedb8055591bb54649d1295fab44e0d0510c0d48 100644
--- a/themes/finc/templates/Recommend/SideFacets/single-facet.phtml
+++ b/themes/finc/templates/Recommend/SideFacets/single-facet.phtml
@@ -21,6 +21,9 @@
     $displayText = $this->escapeHtml($this->facet['value']);
   }
 
+  // #18509 decorate special untranslated terms with language tags
+  $displayText = $this->sideFacet()->getLanguageTag($displayText, 'span', $this->layout()->userLang);
+
   if ($this->facet['operator'] == 'OR') {
     $displayText =
       '<i class="fa ' . ($this->facet['isApplied'] ? 'fa-check-square-o' : 'fa-square-o') . '" aria-hidden="true"></i> '
diff --git a/themes/finc/templates/RecordDriver/DefaultRecord/collection-info.phtml b/themes/finc/templates/RecordDriver/DefaultRecord/collection-info.phtml
index fcd4bba892f0c6b2d12ea9b1414a3ad4f49a056b..da6f1ba8e886185d7a21902dc4b8be2d31fbaeaf 100644
--- a/themes/finc/templates/RecordDriver/DefaultRecord/collection-info.phtml
+++ b/themes/finc/templates/RecordDriver/DefaultRecord/collection-info.phtml
@@ -6,7 +6,7 @@
   $cover = $coverDetails['html'];
   $preview = $this->record($this->driver)->getPreviews(); ?>
   <?php if ($QRCode || $cover || $preview): ?>
-    <div class="media-left <?=$this->escapeHtmlAttr($coverDetails['size'])?>">
+    <div class="media-left <?=$this->escapeHtmlAttr($coverDetails['size'])?>" aria-hidden="<?=$cover?'true':'false'?>>
       <?php /* Display thumbnail if appropriate: */ ?>
       <?php if ($cover): ?>
         <?=$cover?>
@@ -34,7 +34,7 @@
     <?php endif; ?>
 
     <?php /* Display the lists that this record is saved to */ ?>
-    <p class="savedLists hidden alert alert-info" id="savedLists">
+    <p class="savedLists hidden alert alert-info" id="savedLists" role="alert">
       <strong><?=$this->transEsc("Saved in")?>:</strong>
     </p>
 
diff --git a/themes/finc/templates/RecordDriver/DefaultRecord/core.phtml b/themes/finc/templates/RecordDriver/DefaultRecord/core.phtml
index c254fb694053657433ec03fbd7cdecf0852a6cdd..53e91883a964fd80e73fbdfe44a6adc239dba54e 100644
--- a/themes/finc/templates/RecordDriver/DefaultRecord/core.phtml
+++ b/themes/finc/templates/RecordDriver/DefaultRecord/core.phtml
@@ -9,7 +9,7 @@
   $preview = $this->record($this->driver)->getPreviews();
   ?>
   <?php if ($QRCode || $cover || $preview): ?>
-    <div class="media-left <?= $this->escapeHtmlAttr($coverDetails['size']) ?> img-col">
+    <div class="media-left <?= $this->escapeHtmlAttr($coverDetails['size']) ?> img-col" aria-hidden="<?=$cover?'true':'false'?>">
       <?php /* Display thumbnail if appropriate: */ ?>
       <?php if ($cover): ?>
         <?=$cover?>
diff --git a/themes/finc/templates/RecordDriver/DefaultRecord/list-entry.phtml b/themes/finc/templates/RecordDriver/DefaultRecord/list-entry.phtml
index fb02204b5e109f165299c750dffcf523a98e066b..04e30ed779b6e49868cd3a8cc932f49b536accd8 100644
--- a/themes/finc/templates/RecordDriver/DefaultRecord/list-entry.phtml
+++ b/themes/finc/templates/RecordDriver/DefaultRecord/list-entry.phtml
@@ -21,7 +21,7 @@ $thumbnailAlignment = $this->record($this->driver)->getThumbnailAlignment('list'
 <li class="result<?php if ($this->driver->supportsAjaxStatus()): ?> ajaxItem<?php endif ?>">
   <?php if ($cover):
     ob_start(); ?>
-    <div class="media-<?=$thumbnailAlignment?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>">
+    <div class="media-<?=$thumbnailAlignment?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>" aria-hidden="true">
       <?=$cover?>
     </div>
     <?php $thumbnail = ob_get_contents(); ?>
diff --git a/themes/finc/templates/RecordDriver/DefaultRecord/offcanvas-toggler-myresearch.phtml b/themes/finc/templates/RecordDriver/DefaultRecord/offcanvas-toggler-myresearch.phtml
index 3a0f991d8c718e6956ad65a2ad51fe92f3830328..c185ad9f4c1002ef73e9729f58209e1cbb5693ab 100644
--- a/themes/finc/templates/RecordDriver/DefaultRecord/offcanvas-toggler-myresearch.phtml
+++ b/themes/finc/templates/RecordDriver/DefaultRecord/offcanvas-toggler-myresearch.phtml
@@ -1,7 +1,7 @@
 <!-- finc: RecordDriver - DefaultRecord - offcanvas-toggler-myresearch -->
 <?php ?>
 <span class="offcanvas-toggler">
-  <a class="search-filter-toggle btn btn-primary visible-xs" href="#myresearch-sidebar" data-toggle="offcanvas" title="<?=$this->transEsc('sidebar_expand')?>">
+  <a class="search-filter-toggle btn btn-primary visible-xs" href="#myresearch-sidebar" data-toggle="offcanvas" aria-label="<?=$this->transEsc('sidebar_expand')?>">
     <?=$this->transEsc('offcanvas-toggler-myresearch')?>
   </a>
 </span>
diff --git a/themes/finc/templates/RecordDriver/DefaultRecord/offcanvas-toggler.phtml b/themes/finc/templates/RecordDriver/DefaultRecord/offcanvas-toggler.phtml
index aa6b8054f3cc968367097f1c570c0f9ef6d3db7b..bd8ba5bf89242ef3e8d353c2b6bb3218df06f3b6 100644
--- a/themes/finc/templates/RecordDriver/DefaultRecord/offcanvas-toggler.phtml
+++ b/themes/finc/templates/RecordDriver/DefaultRecord/offcanvas-toggler.phtml
@@ -1,7 +1,7 @@
 <!-- finc: RecordDriver - DefaultRecord - offcanvas-toggler -->
 <?php ?>
 <span class="offcanvas-toggler">
-  <a class="search-filter-toggle btn btn-primary visible-xs" href="#myresearch-sidebar" data-toggle="offcanvas" title="<?=$this->transEsc('sidebar_expand')?>">
+  <a class="search-filter-toggle btn btn-primary visible-xs" href="#myresearch-sidebar" data-toggle="offcanvas" aria-label="<?=$this->transEsc('sidebar_expand')?>">
     <?=$this->transEsc('offcanvas-toggler-record-view')?>
   </a>
 </span>
diff --git a/themes/finc/templates/RecordDriver/DefaultRecord/result-list.phtml b/themes/finc/templates/RecordDriver/DefaultRecord/result-list.phtml
index 36660cc5e396252fc74e6434b0e0fd971fcc63e4..5be28ca9b03c5b5062c999a4e1214a44eebdde7d 100644
--- a/themes/finc/templates/RecordDriver/DefaultRecord/result-list.phtml
+++ b/themes/finc/templates/RecordDriver/DefaultRecord/result-list.phtml
@@ -8,7 +8,7 @@ $thumbnailAlignment = $this->record($this->driver)->getThumbnailAlignment('resul
 $describedById = $driver->getSourceIdentifier() . '|' . $driver->getUniqueId();
 if ($cover):
   ob_start(); ?>
-  <div class="media-<?=$thumbnailAlignment?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>">
+  <div class="media-<?=$thumbnailAlignment?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>" aria-hidden="true">
     <?=$cover?>
   </div>
   <?php $thumbnail = ob_get_contents(); ?>
@@ -216,7 +216,7 @@ $i = 0;
           <?=$block?>
         <?php endif; ?>
         <?php /* Saved lists */ ?>
-        <p class="savedLists alert alert-info hidden">
+        <p class="savedLists alert alert-info hidden" role="alert">
           <strong><?=$this->transEsc("Saved in")?>:</strong>
         </p>
       <?php endif; ?>
diff --git a/themes/finc/templates/RecordDriver/FincMissing/result-list.phtml b/themes/finc/templates/RecordDriver/FincMissing/result-list.phtml
index b21060414fe9f741847bb2c695b19086527eca64..4d6782043354e03aaba5a131f530df365700489c 100644
--- a/themes/finc/templates/RecordDriver/FincMissing/result-list.phtml
+++ b/themes/finc/templates/RecordDriver/FincMissing/result-list.phtml
@@ -13,7 +13,7 @@ $thumbnail = false;
 $thumbnailAlignment = $this->record($this->driver)->getThumbnailAlignment('result');
 if ($cover):
   ob_start(); ?>
-  <div class="media-<?=$thumbnailAlignment?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>">
+  <div class="media-<?=$thumbnailAlignment?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>" aria-hidden="true">
     <?=$cover?>
   </div>
   <?php $thumbnail = ob_get_contents(); ?>
diff --git a/themes/finc/templates/RecordDriver/SolrAI/core.phtml b/themes/finc/templates/RecordDriver/SolrAI/core.phtml
index 85550c63194e1c7b09e2e18ef66db7aeda4e3d63..4408efacce9795b28a166f97b3f33cfbad1535af 100644
--- a/themes/finc/templates/RecordDriver/SolrAI/core.phtml
+++ b/themes/finc/templates/RecordDriver/SolrAI/core.phtml
@@ -10,7 +10,7 @@
   $preview = $this->record($this->driver)->getPreviews();
   ?>
   <?php if ($QRCode || $cover || $preview): ?>
-    <div class="media-left <?= $this->escapeHtmlAttr($coverDetails['size']) ?> img-col">
+    <div class="media-left <?= $this->escapeHtmlAttr($coverDetails['size']) ?> img-col" aria-hidden="<?=$cover?'true':'false'?>">
       <?php /* Display thumbnail if appropriate: */ ?>
       <?php if ($cover): ?>
         <?=$cover?>
@@ -73,7 +73,7 @@
             <?php else: ?>
               <tr>
                 <th><?= $this->transEsc($current['label']) ?>:</th>
-                <td><?= $current['value'] ?></td>
+                <td data-title="<?= $this->transEsc($current['label']) ?>:"><?= $current['value'] ?></td>
               </tr>
             <?php endif; ?>
           <?php endforeach; ?>
diff --git a/themes/finc/templates/RecordDriver/SolrAI/result-list.phtml b/themes/finc/templates/RecordDriver/SolrAI/result-list.phtml
index 25c28d3b4118de527446d7216f83a413a90ea57c..43128c1339ec62287bb668015c83d9274630ac7f 100644
--- a/themes/finc/templates/RecordDriver/SolrAI/result-list.phtml
+++ b/themes/finc/templates/RecordDriver/SolrAI/result-list.phtml
@@ -6,7 +6,7 @@ $thumbnail = false;
 $thumbnailAlignment = $this->record($this->driver)->getThumbnailAlignment('result');
 if ($cover):
   ob_start(); ?>
-  <div class="media-<?=$thumbnailAlignment?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>">
+  <div class="media-<?=$thumbnailAlignment?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>" aria-hidden="true">
     <?=$cover?>
   </div>
   <?php $thumbnail = ob_get_contents(); ?>
diff --git a/themes/finc/templates/RecordDriver/SolrLido/core.phtml b/themes/finc/templates/RecordDriver/SolrLido/core.phtml
index 7ff89c40e2447efb65cc2f80f18a041b505449a5..22041396bbf6639fc4e5803a47f737edebc48d6a 100644
--- a/themes/finc/templates/RecordDriver/SolrLido/core.phtml
+++ b/themes/finc/templates/RecordDriver/SolrLido/core.phtml
@@ -30,7 +30,7 @@
   $preview = $this->record($this->driver)->getPreviews();
   ?>
   <?php if ($QRCode || $cover || $preview): ?>
-    <div class="media-left <?=$this->escapeHtmlAttr($coverDetails['size'])?> img-col">
+    <div class="media-left <?=$this->escapeHtmlAttr($coverDetails['size'])?> img-col" aria-hidden="<?=$cover?'true':'false'?>">
       <?php /* Display thumbnail if appropriate: */ ?>
       <?php if ($cover): ?>
         <?=$cover?>
diff --git a/themes/finc/templates/RecordDriver/SolrMarc/core.phtml b/themes/finc/templates/RecordDriver/SolrMarc/core.phtml
index 62ca005ec177d49d5bd7eaf67169c92bc4495bb0..66c9a108e801f5978cfd5c7019085a804ed3e0b0 100644
--- a/themes/finc/templates/RecordDriver/SolrMarc/core.phtml
+++ b/themes/finc/templates/RecordDriver/SolrMarc/core.phtml
@@ -10,7 +10,7 @@
   $preview = $this->record($this->driver)->getPreviews();
   ?>
   <?php if ($QRCode || $cover || $preview): ?>
-  <div class="media-left <?=$this->escapeHtmlAttr($coverDetails['size'])?> img-col">
+  <div class="media-left <?=$this->escapeHtmlAttr($coverDetails['size'])?> img-col" aria-hidden="<?=$cover?'true':'false'?>">
       <?php /* Display thumbnail if appropriate: */ ?>
       <?php if ($cover): ?>
         <?=$cover?>
diff --git a/themes/finc/templates/footer.phtml b/themes/finc/templates/footer.phtml
index 926350450de85245ddf54ca6dff4990dd7694093..b39d33f6adef441e6b1a61844b7c4a6b7531d49c 100644
--- a/themes/finc/templates/footer.phtml
+++ b/themes/finc/templates/footer.phtml
@@ -34,14 +34,11 @@
     <hr>
     <div class="footer-container powered-by">
       <div class="footer-column">
-        <?=$this->layout()->poweredBy?>
-        <span lang="en">Powered by</span>
-        <a href="https://vufind.org/" title="<?=$this->transEsc('vufind-logo_title')?>" target="_blank">
-          <img src="<?=$this->imageLink('vufind_logo.png')?>" alt="<?=$this->transEsc('vufind-logo_alt')?>"/>
-        </a>
-        <a href="http://blog.finc.info" title="<?=$this->transEsc('finc-logo_title')?>" target="_blank">
-          <img src="<?=$this->imageLink('finc_logo.png')?>" alt="<?=$this->transEsc('finc-logo_alt')?>"/>
-        </a>
+        <span>
+          <?= $this->transEsc("Footer-Powered-By-Text") ?>
+        </span>
+        <?= $this->externalLink("https://vufind.org", '<img src="' . $this->imageLink('vufind_logo.png') . '" alt="' . $this->translate('vufind-logo_alt') . '" aria-hidden="true"/>', ['title' => $this->translate('vufind-logo_title')]) ?>
+        <?= $this->externalLink("http://blog.finc.info", '<img src="' . $this->imageLink('finc_logo.png') . '" alt="' . $this->translate('finc-logo_alt') . '" aria-hidden="true"/>', ['title' => $this->translate('finc-logo_title'), 'aria-hidden' => 'true']) ?>
       </div>
     </div>
 </footer>
diff --git a/themes/finc/templates/header.phtml b/themes/finc/templates/header.phtml
index fc370fe70a5bb8367eab7727d972fb0dd3969b42..1f64dd68a52fb9b8c1732260854b20eebae2fc2d 100644
--- a/themes/finc/templates/header.phtml
+++ b/themes/finc/templates/header.phtml
@@ -17,7 +17,7 @@
     <?php /* remove h1 from header and use h1 in content area instead - CK*/ ?>
     <a class="navbar-brand lang-<?=$this->layout()->userLang?>" href="<?=$this->url('home')?>" aria-label="<?=$this->transEsc('Home')?>">
       <?php /* Custom finc header - make sure that one variant of Library name is readable on any device - CK*/ ?>
-      <span class="hidden-sm hidden-md hidden-lg"><?=$this->transEsc("LibraryName")?></span>
+      <span class="hidden-sm-up"><?=$this->transEsc("LibraryName")?></span>
       <img src="<?=$this->imageLink('headerlogo.png')?>" class="hidden-xs" alt="Logo <?=$this->transEsc('LibraryName')?>" aria-hidden="true">
       <?php /*  Custom finc header - END */ ?>
     </a>
@@ -48,7 +48,8 @@
             <li class="logoutOptions<?php if ($account->dropdownEnabled()): ?> with-dropdown<?php endif ?><?php if (!$account->isLoggedIn()): ?> hidden<?php endif ?>">
               <a class="btn" href="<?=$this->url('myresearch-home', [], ['query' => ['redirect' => 0]])?>">
                 <i id="account-icon" class="fa fa-home" aria-hidden="true"></i>
-                <span><?=$this->transEsc("Your Account")?></span>
+                <span class="hidden-sm-md"><?=$this->transEsc("Your Account")?></span>
+                <span class="visible-sm-md-only"><?=$this->transEsc("Account")?></span>
               </a>
             </li>
             <?php if ($account->dropdownEnabled()): ?>
@@ -109,7 +110,10 @@
                   <?php foreach ($this->layout()->allLangs as $langCode => $langName): ?>
                     <?php if ($langCode !== $this->layout()->userLang) : ?>
                       <li>
-                        <button type="submit" class="btn <?=(count($this->layout()->allLangs) == 2) ? ' btn-secondary' : ''?>" href="#" onClick="document.langForm.mylang.value='<?=$langCode?>';document.langForm.submit()"><?=$this->displayLanguageOption($langName)?></button>
+                        <button type="submit" class="btn <?=(count($this->layout()->allLangs) == 2) ? ' btn-secondary' : ''?>" href="#" onClick="document.langForm.mylang.value='<?=$langCode?>';document.langForm.submit()">
+                          <span class="visible-sm-md-only"><?=$langCode?></span>
+                          <span class="hidden-sm-md"><?=$this->displayLanguageOption($langName)?></span>
+                        </button>
                       </li>
                     <?php endif; ?>
                   <?php endforeach; ?>
diff --git a/themes/finc/templates/layout/layout.phtml b/themes/finc/templates/layout/layout.phtml
index de31a198ebb34751939531dd2df5d536f8046c64..fac3c55ea90673bac2a47b954084ead02a7cc4a3 100644
--- a/themes/finc/templates/layout/layout.phtml
+++ b/themes/finc/templates/layout/layout.phtml
@@ -142,7 +142,19 @@ JS;
   ?>
   <?=$this->headScript()?>
 </head>
-<body class="template-dir-<?=$this->templateDir?> template-name-<?=$this->templateName?> <?=$this->layoutClass('offcanvas-row')?><?php if ($this->layout()->rtl): ?> rtl<?php endif; ?>">
+<?php
+$searchType = '';
+// to determine the searchtype it is necessary to ask the child model for its searchType
+if ($this->layout()->templateName === 'results' && $this->layout()->hasChildren()) {
+  try {
+      $searchType
+          = current($this->layout()->getChildren())->params->getSearchType();
+  } catch (\Throwable $t) {
+    // ignore all errors
+  }
+}
+?>
+<body class="template-dir-<?=$this->templateDir?> template-name-<?=$this->templateName?> <?=$this->layoutClass('offcanvas-row')?><?php if ($this->layout()->rtl): ?> rtl<?php endif; ?><?php if ($searchType=='advanced'): ?> result-advanced<?php endif; ?>">
 <?php // Set up the search box -- there are three possible cases:
 // 1. No search box was set; we should default to the normal box
 // 2. It was set to false; we should display nothing
@@ -185,9 +197,10 @@ if (!isset($this->layout()->searchbox)) {
     && !empty($this->layout()->breadcrumbs)
     && $this->layout()->breadcrumbs !== false
   ): ?>
-    <ul class="breadcrumb large-centered hidden-xs hidden-print">
+    <?php /* The breadcrumb for the result list after advanced search will also be shown for XS but not with the Start link - #17720 - HR */ ?>
+    <ul class="breadcrumb large-centered<?php if (!(($this->templateDir=='search') && ($this->templateName=='results') && ($searchType=='advanced'))) : ?> hidden-xs<?php endif; ?> hidden-print">
       <?php /* added Home link - #17603 - HR */?>
-      <li><a href="<?=$this->url('home')?>"><?=$this->transEsc('Home')?></a></li>
+      <li <?php if (($this->templateDir=='search') && ($this->templateName=='results') && ($searchType=='advanced')) : ?> class="hidden-xs"<?php endif; ?>><a href="<?=$this->url('home')?>"><?=$this->transEsc('Home')?></a></li>
       <?php if (is_array($this->layout()->breadcrumbs)): ?>
         <?php if (count($this->layout()->breadcrumbs) > 1): ?>
           <?=$this->render('breadcrumbs/multi.phtml', [
@@ -212,7 +225,6 @@ if (!isset($this->layout()->searchbox)) {
       <?=$this->layout()->content?>
   </div>
 </div>
-
 <?=$this->render('footer.phtml')?>
 
 
diff --git a/themes/finc/templates/myresearch/checkedout.phtml b/themes/finc/templates/myresearch/checkedout.phtml
index 00979e067ad3eea77db77c565373ebbb01b99c5e..a0ae5b548244ab7d72d87af175ff79aedbb86724 100644
--- a/themes/finc/templates/myresearch/checkedout.phtml
+++ b/themes/finc/templates/myresearch/checkedout.phtml
@@ -85,7 +85,7 @@
             <?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?>" aria-describedby="<?=$describedById?>" aria-label="<?=$this->transEsc('select_item')?>" />
+                <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_checked_out_renew')?>" />
               </label>
               <input type="hidden" name="selectAllIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['renew_details'])?>" />
               <input type="hidden" name="renewAllIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['renew_details'])?>" />
@@ -102,7 +102,7 @@
           $thumbnailAlignment = $this->record($resource)->getThumbnailAlignment('account');
           if ($cover):
             ob_start(); ?>
-            <div class="media-<?=$thumbnailAlignment ?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>">
+            <div class="media-<?=$thumbnailAlignment ?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>" aria-hidden="true">
               <?=$cover ?>
             </div>
             <?php $thumbnail = ob_get_contents(); ?>
diff --git a/themes/finc/templates/myresearch/historicloans.phtml b/themes/finc/templates/myresearch/historicloans.phtml
index 969bed2ec547bad90b19f7e89b04222ed21f0dfc..2f73364f07ac9703c2240869447fb082bdf65d1d 100644
--- a/themes/finc/templates/myresearch/historicloans.phtml
+++ b/themes/finc/templates/myresearch/historicloans.phtml
@@ -51,7 +51,7 @@
           $thumbnailAlignment = $this->record($resource)->getThumbnailAlignment('account');
           if ($cover):
             ob_start(); ?>
-            <div class="media-<?=$thumbnailAlignment ?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>">
+            <div class="media-<?=$thumbnailAlignment ?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>" aria-hidden="true">
               <?=$cover ?>
             </div>
             <?php $thumbnail = ob_get_contents();
diff --git a/themes/finc/templates/myresearch/holds.phtml b/themes/finc/templates/myresearch/holds.phtml
index 315ba230bf4cfd4cd947dff18d0dd16cc0b970a7..d46127d4fc138748d752e11aa24f6a2dee01a031 100644
--- a/themes/finc/templates/myresearch/holds.phtml
+++ b/themes/finc/templates/myresearch/holds.phtml
@@ -53,7 +53,7 @@
           <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?>" aria-describedby="<?=$describedById?>" aria-label="<?=$this->transEsc('select_item')?>" />
+              <input type="checkbox" name="cancelSelectedIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['cancel_details']) ?>" id="checkbox_<?=$safeId?>" aria-describedby="<?=$describedById?>" aria-label="<?=$this->transEsc('select_item_hold_cancel')?>" />
             </label>
           </div>
         <?php endif; ?>
@@ -65,7 +65,7 @@
           $thumbnailAlignment = $this->record($resource)->getThumbnailAlignment('account');
           if ($cover):
             ob_start(); ?>
-            <div class="media-<?=$thumbnailAlignment ?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>">
+            <div class="media-<?=$thumbnailAlignment ?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>" aria-hidden="true">
               <?=$cover ?>
             </div>
             <?php $thumbnail = ob_get_contents(); ?>
diff --git a/themes/finc/templates/myresearch/illrequests.phtml b/themes/finc/templates/myresearch/illrequests.phtml
index c95819f7c4f53a17bc9d01f5bd165940b39fc4de..086406fd81ddfa636e747aff995ef2e247820d06 100644
--- a/themes/finc/templates/myresearch/illrequests.phtml
+++ b/themes/finc/templates/myresearch/illrequests.phtml
@@ -54,7 +54,7 @@
           <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?>" aria-describedby="<?=$describedById?>" aria-label="<?=$this->transEsc('select_item')?>" />
+              <input type="checkbox" name="cancelSelectedIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['cancel_details']) ?>" id="checkbox_<?=$safeId?>" aria-describedby="<?=$describedById?>" aria-label="<?=$this->transEsc('select_item_ill_request_cancel')?>" />
             </label>
           </div>
         <?php endif; ?>
@@ -66,7 +66,7 @@
           $thumbnailAlignment = $this->record($resource)->getThumbnailAlignment('account');
           if ($cover):
             ob_start(); ?>
-            <div class="media-<?=$thumbnailAlignment ?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>">
+            <div class="media-<?=$thumbnailAlignment ?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>" aria-hidden="true">
               <?=$cover ?>
             </div>
             <?php $thumbnail = ob_get_contents(); ?>
diff --git a/themes/finc/templates/myresearch/storageretrievalrequests.phtml b/themes/finc/templates/myresearch/storageretrievalrequests.phtml
index b05bc9fb85ecb8da4d6b794ce1caf0542d3b2549..18bd7f3ca95305f8e741381b199fc031ffef1a69 100644
--- a/themes/finc/templates/myresearch/storageretrievalrequests.phtml
+++ b/themes/finc/templates/myresearch/storageretrievalrequests.phtml
@@ -53,7 +53,7 @@
           <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?>"  aria-describedby="<?=$describedById?>" aria-label="<?=$this->transEsc('select_item')?>" />
+              <input type="checkbox" name="cancelSelectedIDS[]" value="<?=$this->escapeHtmlAttr($ilsDetails['cancel_details']) ?>" id="checkbox_<?=$safeId?>"  aria-describedby="<?=$describedById?>" aria-label="<?=$this->transEsc('select_item_storage_retrieval_request_cancel')?>" />
             </label>
           </div>
         <?php endif; ?>
@@ -65,7 +65,7 @@
           $thumbnailAlignment = $this->record($resource)->getThumbnailAlignment('account');
           if ($cover):
             ob_start(); ?>
-            <div class="media-<?=$thumbnailAlignment ?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>">
+            <div class="media-<?=$thumbnailAlignment ?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>" aria-hidden="true">
               <?=$cover ?>
             </div>
             <?php $thumbnail = ob_get_contents(); ?>
diff --git a/themes/finc/templates/record/checkbox.phtml b/themes/finc/templates/record/checkbox.phtml
index 4a77b03ba688132f05fb98d9ebb3c5b4e9b4d49d..408f48b1a76de9533c3568044d94c2582ead29b9 100644
--- a/themes/finc/templates/record/checkbox.phtml
+++ b/themes/finc/templates/record/checkbox.phtml
@@ -1,6 +1,7 @@
 <!-- finc: record - checkbox -->
+<?php $label = isset($this->context) ? 'select_item_' . $this->context : 'select_item'; ?>
 <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')?>"/>
+  <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($label)?>"/>
   <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/templates/record/cover.phtml b/themes/finc/templates/record/cover.phtml
index f8d179eb3f3b9d1e6c246f092509450557a16f84..d528c97f6358d0cb62317dc0a7e8e359ddc0ba2b 100644
--- a/themes/finc/templates/record/cover.phtml
+++ b/themes/finc/templates/record/cover.phtml
@@ -4,7 +4,7 @@
   the class .nocover prevents nocover images from loading in lightbox or can be used to hide the images */ ?>
 <?php $alt = $alt ?? $this->transEsc('Cover Image')?>
 <?php if ($cover): ?>
-  <?php if ($this->link): ?><a href="<?=$this->escapeHtmlAttr($this->link)?>" target="_blank" aria-hidden="true"><?php endif; ?>
+  <?php if ($this->link): ?><a href="<?=$this->escapeHtmlAttr($this->link)?>" target="_blank" tabindex="-1"><?php endif; ?>
   <img alt="<?=$alt?>" <?php if ($linkPreview): ?>data-linkpreview="true" <?php endif; ?>class="recordcover" src="<?=$this->escapeHtmlAttr($cover); ?>" aria-hidden="true"/>
   <?php if ($this->link): ?></a><?php endif; ?>
 <?php elseif ($cover === false): ?>
@@ -14,7 +14,7 @@
         <div class="spinner"><i class="fa fa-spinner fa-spin"></i></div>
         <div class="cover-container">
           <?=$this->render('record/coverReplacement')?>
-          <a class="coverlink hidden">
+          <a class="coverlink hidden" tabindex="-1">
             <img src onerror="loadCoverByElement({source:'<?=$this->escapeHtmlAttr($driver->getSourceIdentifier())?>', recordId:'<?=$this->escapeHtmlAttr($driver->getUniqueID())?>', size:'<?=$this->escapeHtmlAttr($size)?>'}, $('#cover-<?=$driver->getUniqueID()?>'))"
               <?php if ($linkPreview): ?>data-linkpreview="true" <?php endif; ?> class="recordcover ajax" alt="<?=$this->escapeHtmlAttr($alt); ?>" />
           </a>
diff --git a/themes/finc/templates/search/advanced/layout.phtml b/themes/finc/templates/search/advanced/layout.phtml
index 9298d19437392defad3a3205ad534266e2fe72b1..10453d28ce049b94643f250672bbbd6111ad451d 100644
--- a/themes/finc/templates/search/advanced/layout.phtml
+++ b/themes/finc/templates/search/advanced/layout.phtml
@@ -78,7 +78,7 @@ if (isset($searchDetails) && is_object($searchDetails)) {
       <div class="clearfix">
           <?php ?>
         <span class="offcanvas-toggler">
-          <a class="search-filter-toggle btn btn-primary visible-xs" href="#myresearch-sidebar" data-toggle="offcanvas" title="<?=$this->transEsc('sidebar_expand')?>">
+          <a class="search-filter-toggle btn btn-primary visible-xs" href="#myresearch-sidebar" data-toggle="offcanvas" aria-label="<?=$this->transEsc('sidebar_expand')?>">
             <?=$this->transEsc('offcanvas-toggler-search-tips')?>
           </a>
         </span>
diff --git a/themes/finc/templates/search/advanced/ranges.phtml b/themes/finc/templates/search/advanced/ranges.phtml
index 3c41b51dda92daf80d898a75add153796865aa68..bad19945e1b1cf91b1015f2c3f76682bba306f6d 100644
--- a/themes/finc/templates/search/advanced/ranges.phtml
+++ b/themes/finc/templates/search/advanced/ranges.phtml
@@ -9,11 +9,11 @@
       <input type="hidden" name="<?=$this->escapeHtmlAttr($current['type'])?>range[]" value="<?=$escField?>"/>
       <div class="date-fields">
         <div class="date-from">
-          <label for="<?=$escField?>from"><?=$this->transEsc('date_from')?>:</label>
+          <label id="from-label" for="<?=$escField?>from"><?=$this->transEsc('date_from')?>:</label>
           <input type="text" name="<?=$escField?>from" id="<?=$escField?>from" value="<?=isset($current['values'][0])?$this->escapeHtmlAttr($current['values'][0]):''?>" class="form-control" <?=$extraInputAttribs?>/>
         </div>
         <div class="date-to">
-          <label for="<?=$escField?>to"><?=$this->transEsc('date_to')?>:</label>
+          <label id="to-label" for="<?=$escField?>to"><?=$this->transEsc('date_to')?>:</label>
           <input type="text" name="<?=$escField?>to" id="<?=$escField?>to" value="<?=isset($current['values'][1])?$this->escapeHtmlAttr($current['values'][1]):''?>" class="form-control" <?=$extraInputAttribs?>/>
         </div>
       </div>
@@ -67,6 +67,10 @@ $('#{$escField}from, #{$escField}to').change(function () {
     true
   );
 });
+$(document).ready(function() {
+  $(".slider-handle.min-slider-handle").attr("aria-labelledby", "from-label");
+  $(".slider-handle.max-slider-handle").attr("aria-labelledby", "to-label");
+});
 JS;
         ?>
         <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET'); ?>
diff --git a/themes/finc/templates/search/controls/limit.phtml b/themes/finc/templates/search/controls/limit.phtml
index 8c34fc5bc7c59e9b45cfec87ffa22e854c485ad9..d90750005b5f49a86ae0a44a6965f312c3bffddc 100644
--- a/themes/finc/templates/search/controls/limit.phtml
+++ b/themes/finc/templates/search/controls/limit.phtml
@@ -5,7 +5,7 @@
   <?php /* finc: DO NOT use class 'form-inline' as it messes up the select box */ ?>
   <form class="limit" action="<?=$this->currentPath() . $this->results->getUrlQuery()->setLimit(null)?>" method="post">
     <label for="limit"><?=$this->transEsc('Results per page')?></label>
-    <div class="search-controls-div">
+    <div class="limit-inner">
       <?php /* finc: DO NOT use class 'form-control' as it messes up the select box */ ?>
       <select id="limit" name="limit">
         <?php foreach ($limitList as $limitVal => $limitData): ?>
diff --git a/themes/finc/templates/search/controls/sort.phtml b/themes/finc/templates/search/controls/sort.phtml
index 557a995a4dc38021cd6812228a1263145acd9e0b..ba9d20221c30bfdea7103b55cdf4ec63204bc914 100644
--- a/themes/finc/templates/search/controls/sort.phtml
+++ b/themes/finc/templates/search/controls/sort.phtml
@@ -5,7 +5,7 @@
   <form class="search-sort text-right" action="<?=$this->currentPath()?>" method="get" name="sort">
     <?=$this->results->getUrlQuery()->asHiddenFields(['sort' => '/.*/']);?>
     <label for="sort_options_1"><?=$this->transEsc('Sort')?></label>
-    <div class="search-controls-div">
+    <div class="sort-inner">
       <?php /* finc: DO NOT use class 'form-control' as it messes up the select box */ ?>
       <select id="sort_options_1" name="sort">
         <?php foreach ($list as $sortType => $sortData): ?>
diff --git a/themes/finc/templates/search/results.phtml b/themes/finc/templates/search/results.phtml
index d5c200b30de591ff488b6242b07328cdbeb46164..de9ade6fd08919a365af15829592376107b95f24 100644
--- a/themes/finc/templates/search/results.phtml
+++ b/themes/finc/templates/search/results.phtml
@@ -1,5 +1,7 @@
 <!-- finc: search - results -->
 <?php
+$this->context = 'search_result';
+
 // Set up page title:
 $lookfor = $this->results->getUrlQuery()->isQuerySuppressed() ? '' : $this->params->getDisplayQuery();
 if (isset($this->overrideTitle)) {
@@ -71,7 +73,7 @@ $this->headScript()->appendFile("check_save_statuses.js");
         <?=$this->context()->renderInContext('search/controls/showing.phtml', ['lookfor' => $lookfor, 'recordTotal' => $recordTotal]) ?>
         </span>
         <span class="offcanvas-toggler">
-          <a class="search-filter-toggle btn btn-primary visible-xs" href="#myresearch-sidebar" data-toggle="offcanvas" title="<?=$this->transEsc('sidebar_expand') ?>">
+          <a class="search-filter-toggle btn btn-primary visible-xs" href="#myresearch-sidebar" data-toggle="offcanvas" aria-label="<?=$this->transEsc('sidebar_expand') ?>">
           <?=$this->transEsc('Refine Results') ?>
           </a>
         </span>
diff --git a/themes/finc/templates/search/searchbox.phtml b/themes/finc/templates/search/searchbox.phtml
index 3e8963def57269b1389a5f9cf8727fabd3a67044..6529d9cf80bec94a36c23c786561f41c587cdffa 100644
--- a/themes/finc/templates/search/searchbox.phtml
+++ b/themes/finc/templates/search/searchbox.phtml
@@ -35,7 +35,8 @@ $hiddenFilterParams = $this->searchTabs()->getCurrentHiddenFilterParams($this->s
     <?php $tabs = $this->context($this)->renderInContext('search/searchTabs', ['searchTabs' => $tabConfig['tabs']]); ?>
     <?php if (!empty($tabs)): ?><?=$tabs?>
     <div class="tab-content clearfix no-gutter-all"><?php endif; ?>
-      <p class="adv_search_terms"><?=$this->transEsc("Your search terms")?> : "<strong><?=$this->escapeHtml($this->lookfor)?></strong>"</p>
+      <?php /* Do not show the advanced search terms (adv_search_terms) because they will be shown within the breadcrumb - #17720 - HR */ ?>
+      <?php /* <p class="adv_search_terms"><?=$this->transEsc("Your search terms")?> : "<strong><?=$this->escapeHtml($this->lookfor)?></strong>"</p> */ ?>
       <p class="adv_search_links">
         <a href="<?=$this->url($advSearch)?>?edit=<?=$this->escapeHtmlAttr($this->searchId)?>"><?=$this->transEsc("Edit this Advanced Search")?></a>
         <a href="<?=$this->url($advSearch) . $hiddenFilterParams?>"><?=$this->transEsc("Start a new Advanced Search")?></a>
diff --git a/themes/finc/theme.config.php b/themes/finc/theme.config.php
index 51037a227bb81a1179f169b376ce8b91026d8014..3896a57fa8beb2d1e681c1a4b599d47299116f8c 100644
--- a/themes/finc/theme.config.php
+++ b/themes/finc/theme.config.php
@@ -5,7 +5,8 @@ return [
         'check_item_statuses.js',
         'lightbox_form_cache.js',
         'covers.js',
-        'common-finc.js'
+        'common-finc.js',
+        'cart-finc.js'
     ],
     'helpers' => [
         'aliases' => [
@@ -18,6 +19,7 @@ return [
             'record' => 'finc\View\Helper\Root\Record',
             'flashmessages' => 'finc\View\Helper\Root\Flashmessages',
             'headTitle' => 'finc\View\Helper\Root\HeadTitle',
+            'externalLink' => 'finc\View\Helper\Root\ExternalLink',
         ],
         'factories' => [
             'finc\View\Helper\Root\BranchInfo' =>
@@ -44,6 +46,8 @@ return [
                 'VuFind\View\Helper\Root\FlashmessagesFactory',
             'finc\View\Helper\Root\HeadTitle' =>
                 'finc\View\Helper\Root\Factory::getHeadTitle',
+            'finc\View\Helper\Root\ExternalLink' =>
+                'finc\View\Helper\Root\Factory::getExternalLink',
         ]
     ]
 ];