diff --git a/local/config/vufind/DAIA.ini b/local/config/vufind/DAIA.ini
index 45316a4ddef94262674c871d9226332fc802f9b8..07f3c6e856ddb9fbced67ade0bc56227a6b41bfa 100644
--- a/local/config/vufind/DAIA.ini
+++ b/local/config/vufind/DAIA.ini
@@ -14,6 +14,12 @@
 ; daiaResponseFormat = json
 ;
 
+; This section contains settings applying to DAIA and its deriving classes such as
+; PAIA.
+;[General]
+; Set the time to live (ttl) for cached data (default is 30 seconds).
+;cacheLifetime = 90
+
 [DAIA]
 ; The base URL for the DAIA webservice.
 ;baseUrl            = http://localhost/daialibero/daia/
@@ -50,3 +56,18 @@ daiaContentTypes['xml'] = "application/xml"
 ; (separate multiple values by commas, for example:
 ; daiaContentTypes['json'] = "application/json, application/javascript"
 daiaContentTypes['json'] = "application/json"
+
+; Enable caching for DAIA items (default is false).
+;daiaCache = false
+
+; DAIA does not support placing holds (this functionality is covered by PAIA) but is
+; able to provide a link to the OPAC to perform such an action. Regarding placing
+; holds/recalls such link is usually given as href for an unavailable service.
+; Uncomment the below section Holds with the setting 'function' to show a link to
+; the OPAC (if it was provided in the DAIA response) instead of a VuFind
+; Holds-Button.
+; If PAIA is used in combination with the DAIA driver, handling holds etc. should be
+; left to the logic in the PAIA driver - thus keep this section commented out if you
+; are using PAIA as well.
+; [Holds]
+; function = getHoldLink
diff --git a/local/config/vufind/RecordTabs.ini b/local/config/vufind/RecordTabs.ini
index 916b7c4ce21c63692e2c27eed1108acc617a3b2b..22aeec0ac810660f321628156bf1cad2c42b02ce 100644
--- a/local/config/vufind/RecordTabs.ini
+++ b/local/config/vufind/RecordTabs.ini
@@ -1,15 +1,3 @@
-;####################################################################
-;##################### DO NOT DELETE THIS HEADER ####################
-;################### Leipzig University Library © 2022 ##############
-;
-; This is the ISIL-instance-specific default INI-file and inherits
-; all the settings from the INI-file defined in [Parent_Config] which
-; points to the default INI-file located in the folder vufind2/local
-;
-
-[Parent_Config]
-relative_path = ../../../config/vufind/RecordTabs.ini
-
 ; This file controls the display of tabs on the Record page for various types of
 ; records. Each section name matches a record driver class name, and those settings
 ; will be used when displaying that type of record. If no settings are found for a
diff --git a/local/config/vufind/config.ini b/local/config/vufind/config.ini
index 693da8d8ea259331358e83103c93f99922d8fd5d..94f2c250dbc9f9c716c3315f47da1dbbee3deda2 100644
--- a/local/config/vufind/config.ini
+++ b/local/config/vufind/config.ini
@@ -24,22 +24,41 @@ autoConfigure = true
 ; Base URL is normally auto-detected, but this setting is used when autodetection is
 ; not possible (i.e. during sitemap generation at the command line).
 url             = http://localhost/vufind_generic
+; Set to true if VuFind is behind a reverse proxy (typically Apache with mod_proxy),
+; make sure your reverse proxy sets the necessary headers.
+;reverse_proxy    = true
 email           = dummy@vufind.org
 title           = "Generic Katalog (devel)"
 ; The separator used between page name and site name in the <title> tag of pages.
 titleSeparator = "::"
 ; This is the default theme for non-mobile devices (or all devices if mobile_theme
 ; is disabled below). Available standard themes:
-;   bootstrap3 = HTML5 theme using Bootstrap 3 + jQuery libraries, with minimal
-;               styling
+;   bootstrap3 = HTML5 theme using Bootstrap 3 + jQuery libraries, with minimal styling
 ;   bootprint3 = bootstrap3 theme with more attractive default styling applied
 ;                (named after the earlier, now-deprecated blueprint theme)
+;   sandal     = bootstrap3 theme with a "flat" styling applied (a newer look
+;                than bootprint3).
 theme           = finc
 ; Uncomment the following line to use a different default theme for mobile devices.
 ; You may not wish to use this setting if you are using one of the Bootstrap-based
-; standard themes since they support responsive design. Available mobile theme:
-;   jquerymobile = Theme built using jQuery Mobile framework
-;mobile_theme    = jquerymobile
+; standard themes since they support responsive design.
+;mobile_theme    = mobile
+
+; Automatic asset minification and concatenation setting. When active, HeadScript
+; and HeadLink will concatenate and minify all viable files to reduce requests and
+; load times. This setting is off by default.
+;
+; This configuration takes the form of a semi-colon separated list of
+; environment:configuration pairs where "environment" is a possible APPLICATION_ENV
+; value (e.g. 'production' or 'development') or '*'/no prefix for all contexts.
+; Possible values for 'configuration' within each environment are 'js', 'css',
+; 'off'/false, 'on'/true/'*'. This allows global enabling/disabling of the pipeline
+; or separate configurations for different types of resources. Multiple configuration
+; values may be comma-separated -- e.g. 'js,css'.
+;
+; Example: "development:off; production:js,css"
+;asset_pipeline = "production:js"
+
 ; This is a comma-separated list of themes that may be accessed via the ?ui GET
 ; parameter.  Each entry has two parts: the value used on the URL followed by the
 ; actual theme name.  For example, http://library.myuniversity.edu/vufind?ui=theme1
@@ -47,12 +66,14 @@ theme           = finc
 ; of "standard" and "mobile" are reserved for the default and mobile themes defined
 ; above.
 ;alternate_themes = theme1:myTheme1,theme2:myTheme2
+
 ; This is a comma-separated list of theme options that will be displayed to the user
 ; as a drop-down.  Each entry has two parts: a value for the "ui" GET parameter and
 ; an on-screen description.  "standard" refers to the "theme" setting above, "mobile"
 ; refers to the "mobile_theme" setting, and all other values must be defined in
 ; alternate_themes above.  When commented out, no drop-down theme list will display.
 ;selectable_themes = "standard:Standard Theme,mobile:Mobile Theme"
+
 ; Use the browser language setting to set the VuFind language.
 browserDetectLanguage = true
 language        = de    ; default -- more options available in [Languages] below.
@@ -69,22 +90,31 @@ displayDateFormat = "d.m.Y"
 ; A string used to format user interface time strings using the PHP date() function
 ; default is H:i (HH:MM 23:01)
 displayTimeFormat = "H:i"
-; The base VuFind URL will load the "Home" action of this module unless the user
-; is logged in:
+; The base VuFind URL will load this controller unless the user is logged in:
 defaultModule   = Search
-; The base VuFind URL will load the "Home" action of this module when the user
-; is logged in:
+; When defaultModule is used, this action will be triggered (default = Home)
+;defaultAction = Home
+; The base VuFind URL will load this controller when the user is logged in:
 defaultLoggedInModule = MyResearch
+; When defaultLoggedInModule is used, this action will be triggered (default = Home)
+;defaultLoggedInAction = Home
+; The search backend that VuFind will use in search boxes when nothing else is
+; specified (e.g. on user account pages, search history, etc.). Default = Solr
+;defaultSearchBackend = Solr
 ; The route VuFind will send users to following a log out operation. Set to false
 ; or omit to attempt to retain the user's current context after log out.
 ;logOutRoute = home
-; This tab will show by default when a record is viewed:
+; Default tab to display when a record is viewed (see also RecordTabs.ini):
 defaultRecordTab = Holdings
-; Hide the holdings tab if no holdings are available from the ILS
+; Hide the holdings tab if no holdings are available from the ILS; note that this
+; feature requires your ILS driver to support the hasHoldings() method.
 hideHoldingsTabWhenEmpty = false
 ; Whether to load the default tab through AJAX (which brings some performance
 ; gain but breaks compatibility with non-Javascript-enabled browsers; off by default)
 ;loadInitialTabWithAjax = true
+; The holdingsTemplate to use to display the ILS holdings (defaults to standard).
+; See the templates/RecordTab/holdingsils subdirectory of your theme for options.
+;holdingsTemplate = extended
 ; This page will show by default when a user accesses the MyResearch module:
 defaultAccountPage = Profile
 ; Allow access to the Admin module? (See the access.AdminModule setting in
@@ -96,21 +126,38 @@ sidebarOnLeft = false
 showStaffViewInLightbox = true
 ; Invert the sidebarOnLeft setting for right-to-left languages?
 mirrorSidebarInRTL = true
+; Put search result thumbnails on the left (true) or right (false)
+resultThumbnailsOnLeft = true
+; Put favorites list thumbnails on the left (true) or right (false)
+listThumbnailsOnLeft = true
+; Put hold/checkedout/ILL/etc. item thumbnails on the left (true) or right (false)
+accountThumbnailsOnLeft = true
+; Show thumbnail on opposite side in right-to-left languages?
+mirrorThumbnailsRTL = true
 ; Handle menu as an offcanvas slider at mobile sizes (in bootstrap3-based themes)
 offcanvas = true
 ; Show (true) / Hide (false) Book Bag - Default is Hide.
 showBookBag = true
 ; Set the maximum amount of items allowed in the Book Bag - Default is 100
 bookBagMaxSize = 20
+; Show individual add/remove bookbag buttons in search results? (Supersedes cart
+; checkboxes and bulk action buttons unless showBulkOptions is true).
+bookbagTogglesInSearch = true
 ; Display bulk items (export, save, etc.) and checkboxes on search result screens?
 showBulkOptions = true
 ; Should users be allowed to save searches in their accounts?
 allowSavedSearches = true
+; Some VuFind features can be made compatible with non-Javascript browsers at
+; a performance cost. By default, this compatibility is disabled, but it can
+; be turned on here. Note that even with this setting turned on, some features
+; still require Javascript; this simply improves compatibility for certain
+; features (such as display of hierarchies).
+nonJavascriptSupportEnabled = false
 ; Generator value to display in an HTML header <meta> tag:
-generator = "VuFind 5.1.1"
+generator = "VuFind 6.1.2"
 
 ; This section allows you to configure the mechanism used for storing user
-; sessions.  Available types: File, Memcache, Database.
+; sessions.  Available types: File, Memcache, Database, Redis.
 ; Some of the settings below only apply to specific session handlers;
 ; such settings are named with an obvious prefix.  Non-prefixed settings
 ; are global to all handlers.
@@ -128,6 +175,15 @@ secure = true
 ;memcache_host               = localhost
 ;memcache_port               = 11211
 ;memcache_connection_timeout = 1
+;
+; Settings related to Redis-based sessions; default values are listed below
+;redis_host               = localhost
+;redis_port               = 6379
+;redis_connection_timeout = 0.5
+;redis_db                 = 0
+;redis_auth               = some_secret_password
+;redis_version            = 3
+;redis_standalone         = true
 
 ; This section controls how VuFind creates cookies (to store session IDs, bookbag
 ; contents, theme/language settings, etc.)
@@ -140,23 +196,49 @@ secure = true
 ; the browser from ever sending cookies over an unencrypted connection (i.e.
 ; before being redirected to HTTPS). Default is false.
 ;only_secure = true
+; Whether to set cookies set by the server (apart from cart function) "HTTP only" so
+; that they cannot be accessed by scripts. Default is true.
+;http_only = false
 ; Set the domain used for cookies (sometimes useful for sharing the cookies across
 ; subdomains); by default, cookies will be restricted to the current hostname.
 ;domain = ".example.edu"
+; This sets the session cookie's name. Comment this out to use the default
+; PHP_SESS_ID value. If running multiple versions of VuFind (or multiple PHP
+; applications) on the same host, it is strongly recommended to give each a
+; different session_name setting to avoid data contamination.
+session_name = VUFIND_SESSION
 
 ; Please set the ILS that VuFind will interact with.
 ;
-; Available drivers: Aleph, Amicus, ClaviusSQL, Evergreen, Horizon (basic database
-;       access only), HorizonXMLAPI (more features via API), Innovative, Koha, LBS4,
-;       MultiBackend (to chain together multiple drivers in a consortial setting),
-;       NewGenLib, NoILS (for users without an ILS, or to disable ILS functionality
-;       during maintenance), Polaris, Unicorn (which also applies to SirsiDynix
-;       Symphony), Virtua, Voyager (for Voyager 6+), VoyagerRestful (for Voyager 7+
-;       w/ RESTful web services), XCNCIP2 (for XC NCIP Tookit v2.x)
-; Note: Unicorn users should visit the vufind-unicorn project for more details:
-;       http://code.google.com/p/vufind-unicorn/
-; Note: DAIA supports XML or JSON results (since release 2.4).
-;       For details look in the driver code and the corresponding ini file.
+; Available drivers:
+;   - Aleph
+;   - Alma
+;   - Amicus
+;   - DAIA (using either XML or JSON API)
+;   - Demo (fake ILS driver returning complex responses)
+;   - Evergreen
+;   - Folio
+;   - Horizon (basic database access only)
+;   - HorizonXMLAPI (more features via API)
+;   - Innovative (for INNOPAC; see also Sierra/SierraRest)
+;   - Koha (basic database access only)
+;   - KohaILSDI (more features via ILS-DI API)
+;   - LBS4
+;   - MultiBackend (to chain together multiple drivers in a consortial setting)
+;   - NewGenLib
+;   - NoILS (for users with no ILS, or to disable ILS features during maintenance),
+;   - PAIA
+;   - Polaris
+;   - Sample (fake ILS driver returning bare-minimum data)
+;   - Sierra (basic database access only)
+;   - SierraRest (more features via API)
+;   - Symphony (uses native SirsiDynix APIs)
+;   - Unicorn (also applies to Symphony; requires installation of connector found at:
+;     http://code.google.com/p/vufind-unicorn/)
+;   - Virtua
+;   - Voyager (database access only; for Voyager 6+)
+;   - VoyagerRestful (for Voyager 7+ w/ RESTful web services)
+;   - XCNCIP2 (for XC NCIP Tookit v2.x)
 ;
 ; If you haven't set up your ILS yet, two fake drivers are available for testing
 ; purposes.  "Sample" is fast but does very little; "Demo" simulates more
@@ -171,6 +253,11 @@ driver          = Sample
 ;loadNoILSOnFailure - Whether or not to load the NoILS driver if the main driver fails
 loadNoILSOnFailure = true
 
+; List of search backends that contain records from your ILS (defaults to Solr
+; unless set otherwise). You can set ilsBackends = false to disable ILS status
+; loading entirely.
+;ilsBackends[] = Solr
+
 ; This setting determines how and when hold / recall links are displayed.
 ; Legal values:
 ; - all (Show links for all items - Place Hold for Available Items and Place Recall
@@ -223,7 +310,8 @@ title_level_holds_mode = "disabled"
 ; the item information provided by the ILS driver.
 ;
 ; Most commonly-used values:
-; - holdings_id (Use holdings record id if available, location name otherwise - Default)
+; - holdings_id,location (Use holdings record id if available, location name as
+;   secondary - Default)
 ; - location (Use location name)
 ;
 ; See https://vufind.org/wiki/development:plugins:ils_drivers#getholding for
@@ -236,7 +324,7 @@ title_level_holds_mode = "disabled"
 ;
 ; You may use multiple group keys (delimited by comma), e.g.,
 ; - item_agency_id,location
-;holdings_grouping = holdings_id
+;holdings_grouping = holdings_id,location
 
 ; Text fields such as holdings_notes gathered from items to be displayed in each
 ; holdings group in the display order.
@@ -253,11 +341,53 @@ title_level_holds_mode = "disabled"
 ; memory problems for users with huge numbers of items). Default = 50.
 ;checked_out_page_size = 50
 
+; The number of historic loans to display per page; 0 for no limit (may cause
+; memory problems for users with a large number of historic loans). Default = 50
+;historic_loan_page_size = 50
+
+; Whether to display the item barcode for each loan. Default is false.
+;display_checked_out_item_barcode = true
+
+; This section controls features related to user accounts
+[Account]
+; Allow the user to set a home library through the Profile screen, which will
+; override ILS-provided default pickup locations throughout the system.
+set_home_library = true
+
+; Allow the user to "subscribe" to search history entries in order to receive
+; email notifications of new search results.
+schedule_searches = false
+
+; Should we always send a scheduled search email the first time we run notices
+; after a user has subscribed (true), or should we only send an email when there
+; is actually something new (false, default)
+force_first_scheduled_email = false
+
+; When schedule_searches is set to true, you can customize the schedule frequencies
+; here -- just use the number of days between notifications in the brackets. Labels
+; will be run through the translator.
+;scheduled_search_frequencies[0] = schedule_none
+;scheduled_search_frequencies[1] = schedule_daily
+;scheduled_search_frequencies[7] = schedule_weekly
+
 ; This section allows you to determine how the users will authenticate.
 ; You can use an LDAP directory, the local ILS (or multiple ILSes through
-; the MultiILS option), the VuFind database (Database), Shibboleth, SIP2,
-; CAS, Facebook or some combination of these (via the MultiAuth or ChoiceAuth
-; options).
+; the MultiILS option), the VuFind database (Database), a hard-coded list of
+; access passwords (PasswordAccess), AlmaDatabase (combination
+; of VuFind database and Alma account), Shibboleth, SIP2, CAS, Facebook, Email or
+; some combination of these (via the MultiAuth or ChoiceAuth options).
+;
+; The Email method is special; it is intended to be used through ChoiceAuth in
+; combination with Database authentication (or any other method that reliably stores
+; the user's email address) to make it possible to log in by receiving an
+; authentication link at the email address stored in VuFind's database. Email is
+; also supported as the primary authentication mechanism for some ILS drivers (e.g.
+; Alma). In these cases, ChoiceAuth is not needed, and ILS should be configured as
+; the Authentication method; see the ILS driver's configuration for possible options.
+;
+; Also note that the Email method stores hashes in your database's auth_hash table.
+; You should run the "php $VUFIND_HOME/public/index.php util expire_auth_hashes"
+; utility periodically to clean out old data in this table.
 [Authentication]
 ;method          = LDAP
 ;method         = ILS
@@ -276,11 +406,21 @@ method         = Database
 ; (the recommended setting in most situations).
 ;ILS_username_field = cat_username
 
-; Whether or not to hide the Login Options
+; Whether or not to hide the Login Options; not that even when this is set to
+; false, ILS driver settings may be used to conditionally hide the login. See
+; hideLogin in the [Settings] section of NoILS.ini for an example.
 hideLogin = false
 
+; When set to true, uses AJAX calls to annotate the account menu with
+; notifications (overdue items, total fines, etc.)
+enableAjax = true
+
+; When set to true, replicates the account menu as a drop-down next to the
+; account link in the header.
+enableDropdown = false
+
 ; Set this to false if you would like to store local passwords in plain text
-; (only applies when method = Database above).
+; (only applies when method = Database or AlmaDatabase above).
 hash_passwords = false
 
 ; Allow users to recover passwords via email (if supported by Auth method)
@@ -293,9 +433,21 @@ recover_interval      = 60
 ; Default: Two weeks
 recover_hash_lifetime = 1209600
 
+; Allow users to set change their email address (if supported by Auth method).
+; When turning this on, it is also strongly recommended to turn on verify_email
+; below.
+change_email = false
+
 ; Allow users to set change their passwords (if supported by Auth method)
 change_password = true
 
+; Force users to verify their email address before being able to log in
+; (only if method=Database) or make changes to it (if change_email=true).
+; If you wish to customize the email messages used by the system, see the
+; translation strings starting with verify and change_notification, as well as
+; the notify-email-change.phtml and verify-email.phtml Email templates.
+verify_email = false
+
 ; Set this to false if you would like to store catalog passwords in plain text
 encrypt_ils_password = true
 
@@ -305,14 +457,14 @@ ils_encryption_key = false
 
 ; This is the algorithm used to encrypt and decrypt catalog passwords.
 ; A symmetrical encryption algorithm must be used.
-; You can use mcrypt_list_algorithms() to see available options on your system.
+; You can use openssl_get_cipher_methods() to see available options on your system.
 ; Common choices: blowfish (default), aes
 ; If you want to convert from one algorithm to another, run this from $VUFIND_HOME:
 ;   php public/index.php util switch_db_hash oldhash:oldkey (or none) newhash:newkey
 ;ils_encryption_algo = "blowfish"
 
 ; This setting may optionally be uncommented to restrict the email domain(s) from
-; which users are allowed to register when using the Database method.
+; which users are allowed to register when using the Database or AlmaDatabase method.
 ;domain_whitelist[] = "myuniversity.edu"
 ;domain_whitelist[] = "mail.myuniversity.edu"
 
@@ -320,14 +472,27 @@ ils_encryption_key = false
 ; this).
 ;minimum_password_length = 4
 ;maximum_password_length = 32
+; Specify default limit of accepted characters in the password. Allowed values
+; are "numeric", "alphanumeric" or a regular expression
+;password_pattern = "(?=.*\d)(?=.*[a-z])(?=.*[A-Z])"
+; Specify default hint about what the password may contain when using a regexp
+; pattern. May be text or a translation key. The "numeric" and "alphanumeric"
+; patterns have translated default hints.
+;password_hint = "Include both upper and lowercase letters and at least one number."
 
 ; Uncomment this line to switch on "privacy mode" in which no user information
 ; will be stored in the database. Note that this is incompatible with social
 ; features, password resets, and many other features. It is not recommended for
-; use with "Database" authentication, since the user will be forced to create a
-; new account upon every login.
+; use with "Database" or "AlmaDatabase" authentication, since the user will be
+; forced to create a new account upon every login.
 ;privacy = true
 
+; Allow a user to delete their account. Default is false.
+;account_deletion = true
+; Whether comments added by a user are deleted when they remove their account.
+; Default is true.
+;delete_comments_with_user = false
+
 ; See the comments in library/VF/Auth/MultiAuth.php for full details
 ; on using multiple authentication methods.  Note that MultiAuth assumes login
 ; with username and password, so some methods (i.e. Shibboleth) may not be
@@ -348,43 +513,6 @@ ils_encryption_key = false
 ;[ChoiceAuth]
 ;choice_order = Shibboleth,Database
 
-; This section will allow you to control whether VuFind should record usage
-; statistics.
-[Statistics]
-; You can uncomment one or more of these lines to enable statistics tracking.
-; Each enabled mode will write stats to a different target (Solr stats index,
-; flat file, or database tables).  Some modes require additional settings below.
-;
-; Currently, VuFind stores statistics in two different contexts: searches and
-; record views.  By default, an enabled mode will log both types of stats.  If
-; you want to log different types of stats to different targets, you can use a
-; qualifier -- for example, "mode[] = Solr:Record" and "mode[] = Db:Search".
-; Multiple targets may be separated by commas.  Do not use qualifiers unless you
-; really need to -- logging all statistics to the same target makes reporting
-; more effective.
-;
-; Note: Statistics gathering includes browser detection.  For best results, make
-; sure you have a recent browscap.ini file configured in PHP.  See
-; http://php.net/manual/en/function.get-browser.php#refsect1-function.get-browser-notes
-;mode[] = Solr
-;mode[] = File
-;mode[] = Db
-
-; When using the Solr mode, specify the address of a Solr server containing a
-; "stats" core here; if no URL is specified, [Index]/url below will be used.
-;solr            = http://localhost:8080/solr
-
-; When using the File mode, specify a directory for saving stat files here:
-;file            = /usr/local/vufind/local/logs
-
-; When displaying search statistics in the Admin module, do you want to see a single
-; merged list, or separate grouped lists by module (Solr, Summon, etc.)
-searchesBySource = false
-
-; When display record view statistics in the Admin module, do you want to see a
-; single merged list, or separate grouped lists by module (Solr, Summon, etc.)
-recordsBySource = false
-
 ; This section defines the location/behavior of the Solr index and requires no
 ; changes for most installations
 [Index]
@@ -392,7 +520,10 @@ recordsBySource = false
 ; until one can be reached. This is only useful for advanced fault-tolerant Solr
 ; installations.
 url = https://index.ub.uni-leipzig.de/solr
+; Default bibliographic record core
 default_core    = biblio
+; Default authority record core
+default_authority_core = authority
 ; This setting needs to match the <maxBooleanClauses> setting in your solrconfig.xml
 ; file; when VuFind has to look up large numbers of records using ID values, it may
 ; have to restrict the size of its result set based on this limitation.
@@ -405,6 +536,11 @@ timeout=120
 ; You can choose dismax for standard Dismax (the default) or edismax for Extended
 ; Dismax, or you can configure your own custom handler in solrconfig.xml.
 default_dismax_handler = dismax
+; This is the number of records to retrieve in a batch e.g. when building a record
+; hierarchy. A higher number results in fewer round-trips but may increase Solr's
+; memory usage. Default is 1000.
+;cursor_batch_size = 1000
+
 
 ; Enable/Disable searching reserves using the "reserves" Solr core.  When enabling
 ; this feature, you need to run the util/index_reserves.php script to populate the
@@ -419,10 +555,17 @@ host            = localhost
 port            = 25
 ;username       = user
 ;password       = pass
+; The server name to report to the upstream mail server when sending mail.
+;name = vufind.myuniversity.edu
 ; If a login is required you can define which protocol to use for securing the
 ; connection. If no explicit protocol ('tls' or 'ssl') is configured, a protocol
 ; based on the configured port is chosen (587 -> tls, 487 -> ssl).
 ;secure         = tls
+; This setting enforces a limit (in seconds) on the lifetime of an SMTP
+; connection, which can be useful when sending batches of emails, since it can
+; help avoid errors caused by server timeouts. Comment out the setting to disable
+; the limit.
+connection_time_limit = 60
 ; Uncomment this setting to disable outbound mail but simulate success; this
 ; is useful for interface testing but should never be used in production!
 ;testOnly = true
@@ -443,9 +586,33 @@ maximum_recipients = 1
 ; will be sent based on user_email_in_from and default_from above, with the email
 ; setting from the [Site] section used as a last resort.
 disable_from = false
+; From field override. Setting this allows keeping the "from" field in email forms
+; but will only use it as a reply-to address. The address defined here is used as the
+; actual "from" address.
+; Note: If a feature explicitly sets a different reply-to address (for example,
+; Feedback forms), the original from address will NOT override that reply-to value.
+;override_from = "no-reply@myuniversity.edu"
+
+; Being a special case of mail message, sending record results via SMS ("Text this")
+; may be "enabled" or "disabled" ("enabled" by default).
+; Should you choose to leave it enabled, see also sms.ini for further
+; configuration options.
+sms = enabled
+
+; Set this value to "database" to shorten links sent via email/SMS and
+; store its path in the database (default "none").
+url_shortener = none
 
 ; This section needs to be changed to match your database connection information
 [Database]
+; Connection string format is [platform]://[username]:[password]@[host]:[port]/[db]
+; where:
+; [platform] = database platform (mysql, oci8 or pgsql)
+; [username] = username for connection
+; [password] = password for connection (optional)
+; [host] = host of database server
+; [port] = port of database server (optional)
+; [db] = database name
 database          = mysql://root@localhost/vufind
 
 ; If your database (e.g. PostgreSQL) uses a schema, you can set it here:
@@ -456,19 +623,36 @@ database          = mysql://root@localhost/vufind
 ; for compatibility with existing VuFind 1.x installations.
 ;charset = utf8
 
+; Reduce access to a set of single passwords
+; This is only used when Authentication method is PasswordAccess. See above.
+; Recommended to be used in conjunction with very restricted permissions.ini settings
+; and with most social settings disabled
+;[PasswordAccess]
+; access_user is a map of users to passwords
+; entering a correct password will login as that user
+;access_user[user] = password
+;access_user[admin] = superpassword
+
 ; LDAP is optional.  This section only needs to exist if the
 ; Authentication Method is set to LDAP.  When LDAP is active,
-; host, port, basedn and username are required.  The remaining
-; settings are optional, mapping fields in your LDAP schema
-; to fields in VuFind's database -- the more you fill in, the more
-; data will be imported from LDAP into VuFind.
+; host, port, basedn and username are required.
 ;[LDAP]
 ; Prefix the host with ldaps:// to use LDAPS; omit the prefix for standard
 ; LDAP with TLS.
 ;host            = ldap.myuniversity.edu
 ;port            = 389       ; LDAPS usually uses port 636 instead
+; By default, when you use regular LDAP (not LDAPS), VuFind uses TLS security.
+; You can set disable_tls to true to bypass TLS if your server does not support
+; it. Note that this setting is ignored if you use ldaps:// in the host setting.
+;disable_tls     = false
 ;basedn          = "o=myuniversity.edu"
 ;username        = uid
+; separator string for mapping multi-valued ldap-fields to a user attribute
+; if no separator is given, only the first value is mapped to the given attribute
+;separator = ';'
+; Optional settings to map fields in your LDAP schema to fields in the user table
+; in VuFind's database -- the more you fill in, the more data will be imported
+; from LDAP into VuFind:
 ;firstname       = givenname
 ;lastname        = sn
 ;email           = mail
@@ -496,6 +680,13 @@ database          = mysql://root@localhost/vufind
 ; Server param with the identity provider entityID if a Shibboleth session exists.
 ; If omitted, Shib-Identity-Provider is used.
 ;idpserverparam = Shib-Identity-Provider
+; Optional: Session ID parameter for SAML2 single logout support. If omitted, single
+; logout support is disabled. Note that if SLO support is enabled, Shibboleth session
+; ID's are tracked in external_session table which may need to be cleaned up with the
+; expire_session_mappings command line utility. See
+; https://vufind.org/wiki/configuration:shibboleth for more information on how
+; to configure the single logout support.
+;session_id = Shib-Session-ID
 ; Optional: you may set attribute names and values to be used as a filter;
 ; users will only be logged into VuFind if they match these filters.
 ;userattribute_1       = entitlement
@@ -548,7 +739,6 @@ database          = mysql://root@localhost/vufind
 ; Required: CAS login URL.
 ;login                 = https://cas.myuniversity.edu/cas/login
 
-
 ; Required: CAS logout URL.
 ;logout                = https://cas.myuniversity.edu/cas/logout
 
@@ -560,6 +750,11 @@ database          = mysql://root@localhost/vufind
 ; defaultLoggedInModule from [Site] section will be used).
 ;target                = http://lib.myuniversity.edu/vufind/MyResearch/Home
 
+; Optional: protocol to follow (legal values include CAS_VERSION_1_0,
+; CAS_VERSION_2_0, CAS_VERSION_3_0 and SAML_VERSION_1_1; default is
+; SAML_VERSION_1_1)
+;protocol = SAML_VERSION_1_1
+
 ; Some or all of the following entries may be uncommented to map CAS
 ; attributes to user database columns:
 ;cat_username = acctSyncUserID
@@ -613,10 +808,28 @@ showStyleBasedIcons = true
 ;coversize = false
 
 ; You can select Syndetics, LibraryThing, Summon, Amazon, Booksite, OpenLibrary,
-; Contentcafe, Buchhandel.de and/or Google Books.
+; Contentcafe, Buchhandel.de, Google Books, BrowZine and/or LocalFile.
+;   Note: BrowZine requires you to have BrowZine.ini configured appropriately.
 ;   Note: Summon service takes a Serials Solutions client key, NOT Summon API key!
+;   For LocalFile:PathToFile, you may use a combination of directory path information
+;        and tokens for filename and image type. If you have multiple directories
+;        in which you have stored coverimages, you can specify multiple paths to search
+;        by specifying multiple LocalFile:PathToFile in the coverage images list below.
+;        Allowed tokens:
+;          %anyimage%         - Match known image file extensions (gif, jpg, etc.)
+;          %isbn10%           - 10-digit ISBN
+;          %isbn13%           - 13-digit ISBN
+;          %issn%             - ISSN
+;          %oclc%             - OCLC Number
+;          %recordid%         - Bibliographic record ID
+;          %size%             - Size (small/medium/large)
+;          %source%           - Search backend of record (e.g. Summon, Solr, etc.)
+;          %upc%              - UPC Number
+;          %vufind-home%      - The VUFIND_HOME environment variable
+;          %vufind-local-dir% - The VUFIND_LOCAL_DIR environment variable
+;        Example: LocalFile:%vufind-local-dir%/path/to/file/%size%/issn/%issn%.%anyimage%
+;coverimages     = Syndetics:MySyndeticsId,Amazon:MyAccessKeyId,Booksite,LibraryThing:MyLibraryThingId,Google,OpenLibrary,Summon:MySerialsSolutionsClientKey,Contentcafe:MyContentCafeID,BrowZine,LocalFile:PathToFile
 coverimages     = OpenLibrary,Google,LibraryThing:MyLibraryThingId
-;Syndetics:MySyndeticsId,Amazon:MyAccessKeyId,Booksite,LibraryThing:MyLibraryThingId,Google,OpenLibrary,Summon:MySerialsSolutionsClientKey,Contentcafe:MyContentCafeID
 
 ; This setting controls which services will have images cached on your local disk.
 ; Set to true to cache all applicable services. Set to false to disable caching. Set
@@ -643,7 +856,6 @@ coverimagesCache = true
 ; path relative to the base of your theme directory for a static image to display.
 noCoverAvailableImage = images/noCover2.gif
 
-
 ; This setting controls how cover image URLs are loaded. They could be loaded as
 ; part of main request, or asynchronously. Asynchronous loading is disabled by
 ; default; to enable it, just uncomment the line below.
@@ -674,6 +886,13 @@ noCoverAvailableImage = images/noCover2.gif
 ; content providers.
 ;hide_if_empty = reviews,excerpts
 
+; You can select from Syndetics or SyndeticsPlus to add summary information to
+; the description tab.
+;summaries = Syndetics:MySyndeticsId,SyndeticsPlus:MySyndeticsId
+
+; You can select from Syndetics or SyndeticsPlus to load Tables of Contents
+;toc = Syndetics:MySyndeticsId,SyndeticsPlus:MySyndeticsId
+
 ; You can select from Syndetics or SyndeticsPlus
 ;authorNotes = Syndetics:MySyndeticsId,SyndeticsPlus:MySyndeticsId
 
@@ -694,9 +913,15 @@ noCoverAvailableImage = images/noCover2.gif
 ;amazonassociate = MyAmazonAssociateID
 
 ; You can select from Google, OpenLibrary, HathiTrust.  You should consult
-; http://code.google.com/apis/books/branding.html before using Google Book Search.
+; https://developers.google.com/books/branding before using Google Book Search.
 ; previews       = Google,OpenLibrary,HathiTrust
 
+; This setting controls whether or not cover images are linked to previews when
+; available. Legal settings are false (never link), * (always link; default), or
+; a comma-separated list of templates in which linking should occur (see coversize
+; above for a list of legal values).
+;linkPreviewsToCovers = *
+
 ; Possible HathiRights options = pd,ic,op,orph,und,umall,ic-world,nobody,pdus,cc-by,cc-by-nd,
 ; cc-by-nc-nd,cc-by-nc,cc-by-nc-sa,cc-by-sa,orphcand,cc-zero,und-world,icus
 ; Default is "pd,ic-world" if unset here.
@@ -720,14 +945,17 @@ noCoverAvailableImage = images/noCover2.gif
 ; recommendation module in searches.ini for more information)
 ;europeanaAPI = INSERTKEY
 
-; If this is set, a new map tab will show on the record page for records which
-; have long_lat data (see import/marc_local.properties for more information).
-; The setting specifies the type of map; currently, the only supported value is
-; "google"
-;recordMap = google
+; Geographic Display
+; These configuration settings have been superseded by the geofeatures.ini file.
+; See the [MapTab] section of the geofeatures.ini file for more information.
 
 ; This section controls the behavior of the cover generator when makeDynamicCovers
 ; above is non-false.
+;
+; Note that any of these settings may be filtered to be size-specific by subscripting
+; the key with a size. You can use a key of * for a default to use when a specific
+; size is not matched. This allows adjustment of certain elements for different
+; thumbnail sizes. See the "size" setting below for an example.
 [DynamicCovers]
 ; This controls the background layer of the generated image; options:
 ; - solid: display a solid color
@@ -791,7 +1019,9 @@ noCoverAvailableImage = images/noCover2.gif
 ; defines a WxH rectangle. wrapWidth constrains the text size (and must be no
 ; larger than the width of the canvas). topPadding and bottomPadding push the
 ; text away from the edges of the canvas.
-;size = 128
+;size[*] = 128
+;size[medium] = 200
+;size[large] = 500
 ;topPadding = 19
 ;bottomPadding = 3
 ;wrapWidth = 110
@@ -822,6 +1052,8 @@ url = "https://api.vlb.de/api/v1/cover/"
 ; set use_ssl to true if you serve your site over ssl and you
 ; use SyndeticsPlus to avoid insecure content browser warnings
 ; (or if you just prefer ssl)
+; NOTE: SyndeticsPlus is incompatible with the tabs/accordion [List] views in
+;       searches.ini. Do not turn it on if you are using these optional features.
 [Syndetics]
 use_ssl = false
 plus = false
@@ -834,12 +1066,12 @@ timeout = 10
 url = "https://api.booksite.com"
 ;key = "Key"
 
-; You can change the base Content Cafe URL used by the content services here.  Most
-; users will not need to change this setting.  You also need to set your password,
-; "pw".  Note that Content Cafe is a subscription service from Baker & Taylor.
+; Content Cafe is a subscription service from Baker & Taylor. If you are using this
+; service (see the [Content] section above for details), you MUST uncomment and set
+; the password (pw) setting. You may also change the API base URL (url) if needed.
 [Contentcafe]
-url              = "http://contentcafe2.btol.com"
-pw               = "Password"
+;url              = "http://contentcafe2.btol.com"
+;pw               = "Password"
 
 ; Summon is optional; this section is used for your API credentials. apiId is the
 ; short, human-readable identifier for your Summon account; apiKey is the longer,
@@ -852,24 +1084,78 @@ pw               = "Password"
 ; search module. Otherwise, it may be ignored.
 ;[WorldCat]
 ;Your WorldCat search API key
-;apiKey          = ApiKey
+;apiKey          = "long-search-api-key-goes-here"
 ;Your holdings symbol (usually a three-letter code) - used for excluding your
 ; institution's holdings from the search results.
 ;OCLCCode        = MYCODE
 
+; This section must be filled in to use Relais (E-ZBorrow) functionality. When
+; activated, this function will allow users to place ILL requests on unavailable
+; items through the record holdings tab.
+;
+; If you set apikey below, requests may be made from within VuFind through a
+; pop-up; if you omit apikey but set loginUrl and symbol, links will be provided
+; to Relais. Setting loginUrl and symbol is strongly recommended in all cases,
+; since links will be used as a fallback if the API fails.
+;[Relais]
+; Your library's holdings symbol (e.g. PVU for Villanova)
+;symbol="XYZ"
+; The pickup location to use for your institution (currently multiple pickup
+; locations are not supported here).
+;pickupLocation = "DEFAULT"
+; Barcode number (or other user ID) to use for lookups when none is provided
+;patronForLookup="99999999"
+; API key (may vary for testing vs. production)
+;apikey="your-relais-api-key-goes-here"
+; Timeout for HTTP requests (in seconds; set high, as Relais can be slow)
+;timeout = 500
+; Your institution's login URL for the remote Relais system (used to provide
+; a link when the API fails)
+;loginUrl = https://e-zborrow.relais-host.com/user/login.html
+
+; TEST VALUES (uncomment for testing)
+;group="DEMO"
+;authenticateurl="https://demo.relais-host.com/portal-service/user/authentication"
+;availableurl="https://demo.relais-host.com/dws/item/available"
+;addurl="https://demo.relais-host.com/dws/item/add"
+
+; PRODUCTION VALUES (uncomment for live use)
+;group="EZB"
+;authenticateurl="https://e-zborrow.relais-host.com/portal-service/user/authentication"
+;availableurl="https://e-zborrow.relais-host.com/dws/item/available"
+;addurl="https://e-zborrow.relais-host.com/dws/item/add"
+
 ; DPLA key -- uncomment and fill in to use DPLATerms recommendations (see also
 ; searches.ini).
 ;[DPLA]
 ;apiKey = http://dp.la/info/developers/codex/policies/#get-a-key
 
+; These settings affect dynamic DOI-based link inclusion; this can provide links
+; to full text or contextual information.
+[DOI]
+; This setting controls whether or not DOI-based links are enabled, and which
+; API is used to fetch the data. Currently supported options: BrowZine (requires
+; credentials to be configured in BrowZine.ini), Unpaywall or false (to disable). Disabled
+; by default.
+;resolver = BrowZine
+
+;unpaywall_api_url = "https://api.unpaywall.org/v2"
+; Unpaywall needs an email adress, see https://unpaywall.org/products/api
+;unpaywall_email = "your@email.org"
+
+; The following settings control where DOI-based links are displayed:
+show_in_results = true      ; include in search results
+show_in_record = false      ; include in core record metadata
+show_in_holdings = false    ; include in holdings tab of record view
+
 ; These settings affect OpenURL generation and presentation; OpenURLs are used to
 ; help users find resources through your link resolver and to manage citations in
 ; Zotero.
 [OpenURL]
-; If a resolver base URL is enabled, it will be used to link ISSNs to your link
-; resolver and to access articles in Summon if that module is enabled.  Earlier
-; versions of VuFind included some parameters as part of the URL; at this point,
-; any extra parameters will be ignored -- please provide only the base URL.
+; If a resolver base URL is enabled, it will be used to link from records to your
+; OpenURL resolver. An OpenURL resolver is typically used to e.g. link to full text
+; from article metadata, but it may provide other services too. Extra parameters may
+; be added if necessary.
 ;url             = "http://openurl.myuniversity.edu/sfx_local"
 
 ; This string will be included as part of your OpenURL referer ID (the full string
@@ -881,8 +1167,8 @@ rfr_id          = vufind.svn.sourceforge.net
 
 ; By specifying your link resolver type, you can allow VuFind to optimize its
 ; OpenURLs for a particular platform.  Current legal values: "sfx", "360link",
-; "EZB", "Redi," "demo" or "other" (default is "other" if commented out; "demo"
-; generates fake values for use in testing the embed setting below).
+; "EZB", "Redi", "Alma", "demo" or "generic" (default is "generic" if commented out;
+; "demo" generates fake values for use in testing the embed setting below).
 ;resolver        = sfx
 
 ; If you want OpenURL links to open in a new window, set this setting to the
@@ -944,10 +1230,42 @@ replace_other_urls = true
 ;[EZproxy]
 ;host            = http://proxy.myuniversity.edu
 
+; By default, when the 'host' setting above is active, VuFind will prefix links in
+; records using EZproxy's "?qurl=" mechanism. If you need to set a host for ticket
+; authentication (below) but you want to disable the prefixing behavior, set this
+; to false.
+;prefixLinks = true
+
+; Uncomment the following line and change the password to something secret to enable
+; EZproxy ticket authentication.
+;secret = "verysecretpassword"
+;
+; To enable ticket authentication in EZproxy, you will also need the following in
+; EZproxy's user.txt or ezproxy.usr for older versions (without the leading
+; semicolons and spaces):
+;
+; ::CGI=https://vufind-server/ExternalAuth/EzproxyLogin?url=^R
+; ::Ticket
+; TimeValid 10
+; SHA512 verysecretpassword
+;
+; Uncomment and modify the following line to use another hashing algorithm with the
+; EZproxy authentication if necessary. SHA512 is the default, but it requires at
+; least EZproxy version 6.1. Use "SHA1" for older EZproxy versions, and remember to
+; replace SHA512 with SHA1 also in EZproxy's configuration file.
+;secret_hash_method = "SHA512"
+
+; Uncomment the following line to disable relaying of user name to EZproxy on ticket
+; authentication:
+;anonymous_ticket = true
+; Uncomment the following line to disable logging of successful ticket
+; authentication requests in VuFind:
+;disable_ticket_auth_logging = true
+
 ; These settings affect RefWorks record exports.  They rarely need to be changed.
 [RefWorks]
 vendor          = VuFind
-url             = http://www.refworks.com
+url             = https://www.refworks.com
 
 ; These settings affect EndNote Web record exports.  They rarely need to be changed.
 [EndNoteWeb]
@@ -962,6 +1280,10 @@ url             = https://www.myendnoteweb.com/EndNoteWeb.html
 ;
 ; If admin_email is not set, the main email under [Site] will be used instead.
 ;
+; page_size may be used to specify the number of records returned per request.
+; Default is 100. A higher number may improve overall harvesting performance, but
+; will also make a single response page larger and slower to produce.
+;
 ; If set_field is set, the named Solr field will be used to generate sets on
 ; your OAI-PMH server.  If it is not set, sets will not be supported.
 ;
@@ -970,13 +1292,35 @@ url             = https://www.myendnoteweb.com/EndNoteWeb.html
 ; you use both set_field and set_query, be careful about the names you choose
 ; for your set queries. set_query names will trump set_field values when
 ; there are collisions.
+;
+; default_query may be used to specify a filter for the default set, i.e. records
+; returned when a set is not specified.
+;
+; If vufind_api_format_fields is set, the listed fields (as defined in
+; SearchApiRecordFields.yaml) are returned when metadata prefix
+; "oai_vufind_json" is used.
+;
+; record_format_filters allows mapping from requested OAI metadataPrefix to query
+; filters. They can be used e.g. to limit results to records that can be returned in
+; the requested format.
+;
+; delete_lifetime controls how many days' worth of deleted records to include in
+; responses. Records deleted before the cut-off will not be included in responses.
+; Omit this setting to return all deleted records. This can be useful for long-lived
+; systems with many deleted records, to prevent full harvests from becoming unwieldy.
+;
 ;[OAI]
 ;identifier       = myuniversity.edu
 ;repository_name  = "MyUniversity Catalog"
 ;admin_email      = oai@myuniversity.edu
+;page_size        = 1000
 ;set_field        = "format"
 ;set_query['eod_books'] = "institution:kfu AND publishDate:[1911 TO 1911]"
 ;set_query['eod_ebooks'] = "format:eBook"
+;default_query = "institution:kfu"
+;vufind_api_format_fields = "id,authors,cleanIsbn,cleanIssn,formats,title"
+;record_format_filters[marc21] = "record_format:marc"
+;delete_lifetime = 365
 
 ; Proxy Server is Optional.
 [Proxy]
@@ -994,7 +1338,8 @@ url             = https://www.myendnoteweb.com/EndNoteWeb.html
 
 ;timeout = 30 ; default timeout if not overridden by more specific code/settings
 
-; Using a curl Adapter instead of the the defaultAdapter (Socket)
+; Example: Using a CURL Adapter instead of the the defaultAdapter (Socket); note
+; that you may also need to install CURL and PHP/CURL packages on your server.
 ; adapter = 'Zend\Http\Client\Adapter\Curl'
 
 ; Spelling Suggestions
@@ -1060,6 +1405,15 @@ skip_numeric = true
 ;file           = /var/log/vufind.log:alert,error,notice,debug
 ;email          = alerts@myuniversity.edu:alert-5,error-5
 
+; Get URL from https://YOURSLACK.slack.com/apps/manage/custom-integrations
+;slack = #channel_name:alert,error
+;slackurl = https://hooks.slack.com/services/your-private-details
+;slackname = "VuFind Log" ; username messages are posted under
+; You can also use the Slack settings to hook into Discord:
+; - Get your url from Server Settings > Webhooks
+; - Add /slack to the end of your url for Slack-compatible messages
+; https://discordapp.com/developers/docs/resources/webhook#execute-slackcompatible-webhook
+
 ; This section can be used to specify a "parent configuration" from which
 ; the current configuration file will inherit.  You can chain multiple
 ; configurations together if you wish.
@@ -1074,6 +1428,12 @@ skip_numeric = true
 ; any sections not listed here will be merged on a section-by-section basis.
 ;override_full_sections = "Languages,AlphaBrowse_Types"
 
+; This setting is for allowing arrays to be merged with the values of their parents
+; arrays. If override_full_sections is set for a section the arrays will always be
+; overridden.
+; For legacy reasons merging of arrays is disabled by default.
+;merge_array_settings = false
+
 ; This section controls which language options are available to your users.
 ; If you offer more than one option, a control will appear in the user
 ; interface to allow user selection.  If you only activate one language,
@@ -1098,6 +1458,7 @@ de          = "German"
 ;it          = "Italian"
 ;ja          = "Japanese"
 ;nl          = "Dutch"
+;nl-be       = "Flemish Dutch"
 ;pt          = "Portuguese"
 ;pt-br       = "Brazilian Portugese"
 ;zh-cn       = "Simplified Chinese"
@@ -1117,6 +1478,11 @@ de          = "German"
 ;da          = "Danish"
 ;sl          = "Slovene"
 ;ar          = "Arabic"
+;bn          = "Bengali"
+;gl          = "Galician"
+;vi          = "Vietnamese"
+;hr          = "Croatian"
+;hi          = "Hindi"
 
 ; This section contains special cases for languages such as right-to-left support
 [LanguageSettings]
@@ -1210,12 +1576,24 @@ preferred_service = "loan"
 ; preferred_service settings to be ignored.
 show_full_status = false
 
+; You can set this to the name of an alphabetic browse handler (see the
+; [AlphaBrowse_Types] section) in order to link call numbers displayed on the
+; holdings tab and in status messages to a specific browse list. Set to false
+; to disable call number linking.
+callnumber_handler = false
+
 ; This section controls the behavior of the Record module.
 [Record]
 ; Set this to true in order to enable "next" and "previous" links to navigate
 ; through the current result set from within the record view.
 next_prev_navigation = true
 
+; Set this to true in order to enable "first" and "last" links to navigate
+; through the content result set from within the record view. Note, this
+; may cause slow behavior with some installations. The option will only work
+; when next_prev_navigation is also set to true.
+first_last_navigation = false
+
 ; Setting this to true will cause VuFind to skip the results page and
 ; proceed directly to the record page when a search has only one hit.
 jump_to_single_search_result = false
@@ -1250,7 +1628,7 @@ jump_to_single_search_result = false
 ; Set the URI-pattern of the server which serves the raw Marc-data. (see
 ; https://vufind.org/wiki/configuration:remote_marc_records for more information
 ; on how to set up a remote service for raw Marc-data)
-;remote_marc_url = http://localhost/%s
+;remote_marc_url = http://127.0.0.1/%s
 
 ; You can use this setting to hide holdings information for particular named locations
 ; as returned by the catalog.
@@ -1260,6 +1638,7 @@ hide_holdings[] = "World Wide Web"
 ; record view page.
 ;
 ; Available options:
+;    Channels - Display links to channels of content related to record
 ;    Similar - Similarity based on Solr lookup
 ;    WorldCatSimilar - Similarity based on WorldCat lookup
 ;related[] = "Similar"
@@ -1279,6 +1658,8 @@ page_size = 20
 rows_before      = 0
 ; highlight the match row (or spot where match would have been)? default false
 highlighting     = false
+; SEE ALSO: the General/includeAlphaBrowse setting in searchbox.ini, for including
+; alphabrowse options in the main search drop-down options.
 
 ; This section controls the order and content of the browse type menu in the
 ; Alphabetic Browse module.  The key is the browse index to use, the value is the
@@ -1310,7 +1691,7 @@ HMACkey = mySuperSecretValue
 ; A custom directory for caching can be defined by the environment variable
 ; VUFIND_CACHE_DIR (see httpd-vufind.conf). The default location is inside the
 ; local settings directory.
-;[Cache]
+[Cache]
 ; Set time to live value for Zend caches (in seconds), 0 means maximum possible.
 ;ttl = 0
 ; Override umask for cache directories and files.
@@ -1323,13 +1704,14 @@ HMACkey = mySuperSecretValue
 
 ; This section controls the "Collections" module -- the special view for records
 ; that represent collections, and the mechanism for browsing these records.
-;[Collections]
+[Collections]
 ; Control whether or not the collections module is enabled in search results.
 ; If set to true any search results which are collection level items will
 ; link to the respective collections page rather than the record page
 ; (default = false).
 ;collections = true
-; Control default tab of Collection view (default = CollectionList)
+; Control default tab of Collection view (default = CollectionList); see also
+; CollectionTabs.ini.
 ;defaultTab = CollectionList
 ; This controls where data is retrieved from to build the Collections/Home page.
 ; It can be set to Index (use the Solr index) or Alphabetic (use the AlphaBrowse
@@ -1344,6 +1726,11 @@ HMACkey = mySuperSecretValue
 ;browseDelimiter = "{{{_ID_}}}"
 ; This controls the page size within the Collections/Home page (default = 20).
 ;browseLimit = 20
+; List of record routes that are converted to collection routes (used to map
+; route names when a record identifies itself as a collection and the collections
+; setting above is true).
+route[record] = collection
+route[search2record] = search2collection
 
 ; This section addresses hierarchical records in the Solr index
 [Hierarchy]
@@ -1362,7 +1749,8 @@ treeSearchLimit = 100
 ; Whether hierarchy fields are used for linking between container records and their
 ; children (default = false). This is an alternative to the full collections support
 ; (see the [Collections] section), so only one of them should be enabled
-; at a time e.g. unless custom record drivers are used.
+; at a time e.g. unless custom record drivers are used. When using this setting,
+; you may also wish to enable the ComponentParts tab in RecordTabs.ini.
 simpleContainerLinks = true
 ; Whether the link to the search for children shall apply default filters or not. It
 ; dissolves unintuitive behaviour between sum of child titles at detail view and followed
@@ -1377,15 +1765,24 @@ omitDefaultFiltersInChildSearch = true
 
 ; This section will be used to configure the feedback module.
 ; Set "tab_enabled" to true in order to enable the feedback module.
+; Forms are configured in FeedbackForms.yaml
 [Feedback]
 ;tab_enabled       = true
+
+; Default values for form recipient and email subject, if not overridden for a
+; specific form in FeedbackForms.yaml
 ;recipient_email   = "feedback@myuniversity.edu"
 ;recipient_name    = "Your Library"
 ;email_subject     = "VuFind Feedback"
+
 ; This is the information for where feedback emails are sent from.
 ;sender_email      = "noreply@vufind.org"
 ;sender_name       = "VuFind Feedback"
 
+; Note: for additional details about stats (including additional notes on Google
+; Analytics and Piwik), look at the wiki page:
+;     https://vufind.org/wiki/configuration:usage_stats
+
 ; Uncomment this section and provide your API key to enable Google Analytics. Be
 ; sure to set the "universal" setting to true once your account is upgraded to
 ; Universal Analytics; see:
@@ -1405,6 +1802,15 @@ omitDefaultFiltersInChildSearch = true
 ; Uncomment the following setting to track additional information about searches
 ; and displayed records with Piwik's custom variables
 ;custom_variables = true
+; By default, Piwik searches are tracked using the format "Backend|Search Terms."
+; If you need to differentiate searches coming from multiple VuFind instances using
+; a shared site_id, you can set the searchPrefix to add an additional prefix to
+; the string, for example "SiteA|Backend|Search Terms." Most users will want to
+; leave this disabled.
+;searchPrefix = "SiteA|"
+; Uncomment the following setting to disable cookies for privacy reasons.
+; see https://matomo.org/faq/general/faq_157/ for more information.
+;disableCookies = true
 
 ; Uncomment portions of this section to activate tabs in the search box for switching
 ; between search modules. Keys are search backend names, values are labels for use in
@@ -1417,12 +1823,26 @@ omitDefaultFiltersInChildSearch = true
 ;WorldCat = WorldCat
 ;Solr:filtered = "Catalog (Main Building Books)"
 ;EDS = "EBSCO Discovery Service"
+;EIT = "EBSCO Integration Toolkit"
+;Primo = "Primo Central"
 
 ; Add any hidden filters in this section for search tab specific filtering
 [SearchTabsFilters]
 ;Solr:filtered[] = 'building:"main library"'
 ;Solr:filtered[] = "format:book"
 
+; You can bind a permission to a search tab in this section.
+; This controls to whom the tab should be displayed.
+; Use the format tabName = permission. The permission should be configured
+; in permissions.ini (who should see the tab)
+; and permissionBehavior.ini (what should be displayed instead of the tab).
+; Note that this ONLY controls whether or not the tab is displayed; if you wish to
+; restrict actual searching, you will also need to make sure that the relevant
+; controller(s) are blocking access using the same named permission.
+[SearchTabsPermissions]
+;EIT = access.EITModule
+;Primo = access.PrimoModule
+
 ; Uncomment portions of this section to label searches from particular sources in the
 ; search history display.  Keys are search backend names, values are labels for use in
 ; the user interface (subject to translation).
@@ -1443,9 +1863,28 @@ omitDefaultFiltersInChildSearch = true
 ;secretKey = "https://www.google.com/recaptcha/admin/create"
 ; Valid theme values: dark, light
 ;theme      = light
-; Valid forms values: changePassword, email, newAccount, passwordRecovery, sms
+; Valid forms values: changePassword, email, feedback, newAccount, passwordRecovery,
+;                     sms, userComments
 ; Use * for all supported forms
-;forms = changePassword, email, newAccount, passwordRecovery, sms
+; Note: when "feedback" is active, Captcha can be conditionally disabled on a
+;       form-by-form basis with the useCaptcha setting in FeedbackForms.yaml.
+;forms = changeEmail, changePassword, email, newAccount, passwordRecovery, sms
+
+
+; This section can be used to display default text inside the search boxes, useful
+; for instructions. Format:
+;
+; backend = Placeholder text
+;
+; You can use a "default" setting if you want a standard string displayed across
+; all backends not otherwise specified. You can qualify backend names with a
+; colon-delimited suffix if you wish to use special placeholders in combination
+; with filtered search tabs (see [SearchTabsFilters] above).
+[SearchPlaceholder]
+;default = "Enter search terms here..."
+;Solr = "Search the catalog"
+;Solr:filtered = "Search the filtered catalog"
+;Summon = "Search Summon"
 
 ; This section controls VuFind's social features.
 [Social]
@@ -1457,12 +1896,30 @@ comments = disabled
 ; create. If you change this to a more restrictive option, it is your responsibility
 ; to update the user_list database table to update the status of existing lists.
 lists = enabled
+; The following two settings are equivalent to default_limit / limit_options in
+; searches.ini, but used to control the page sizes of lists of favorites:
+lists_default_limit   = 20
+;lists_limit_options   = 10,20,40,60,80,100
+; This section controls what happens when a record title in a favorites list
+; is clicked. VuFind can either embed the full result directly in the list using
+; AJAX or can display it at its own separate URL as a full HTML page.
+; See the [List] section of searches.ini for all available options.
+lists_view=full
 ; Tags may be "enabled" or "disabled" (default = "enabled")
 ; When disabling tags, don't forget to also turn off tag search in searches.ini.
 tags = disabled
 ; This controls the maximum length of a single tag; it should correspond with the
 ; field size in the tags database table.
 max_tag_length = 64
+; This controls whether tags are case-sensitive (true) or always forced to be
+; represented as lowercase strings (false -- the default).
+case_sensitive_tags = false
+; If this setting is set to false, users will not be presented with a search
+; drop-down or advanced search link when searching/viewing tags. This is recommended
+; when using a multi-backend system (e.g. Solr + Summon + WorldCat). If set to
+; true, the standard Solr search options and advanced search link will be shown
+; in the tag screens; this is recommended when using a Solr-only configuration.
+show_solr_options_in_tag_search = false
 
 ; *****************
 ; * BOF finc
diff --git a/local/config/vufind/export.ini b/local/config/vufind/export.ini
index 5c5729f8387cc54ea2cc3d455b5fb9f1335a18b1..8a0c6e74ad8fff0f5b88ac7a5ecdfe8894de9943 100644
--- a/local/config/vufind/export.ini
+++ b/local/config/vufind/export.ini
@@ -25,11 +25,19 @@
 ;             {config...} setting above, except result will be URL-encoded.
 ; requiredMethods[] - a repeatable field indicating methods which must be available
 ;     on the record driver object in order to allow export in this format.
-; bulkExportType - [ "link" | "download" ] - link renders a download link in the UI,
-;     download offers to save the export-file directly; overrides the defaultType
-;     setting found in the [BulkExport] section of config.ini. This distinction
-;     currently only affects users with Javascript enabled; the 'download' option
-;     cannot be implemented in a user-friendly way when Javascript is disabled.
+; bulkExportType - [ "link" | "download" | "post" ] - link renders a download link in
+;     the UI, download offers to save the export-file directly, post sends the
+;     metadata using the POST method in a form field named by the postField
+;     parameter; overrides the defaultType setting found in the [BulkExport] section
+;     of config.ini. This distinction currently only affects users with Javascript
+;     enabled; the 'download' option cannot be implemented in a user-friendly way
+;     when Javascript is disabled.
+; postField
+;     Name of the POST field to use when sending records with the POST method.
+; targetWindow
+;     Name of the window where the export is opened in the browser. Default is
+;     "{format}Main" (e.g. "RefWorksMain"), but could be set to e.g. "_blank" to
+;     make the export always open a new window.
 
 [EndNote]
 label = "EndNote"
@@ -61,8 +69,9 @@ headers[] = "Content-type: application/x-research-info-systems; charset=utf-8"
 
 ;[RefWorks]
 ;requiredMethods[] = getTitle
-;redirectUrl = "{config|RefWorks|url|http://www.refworks.com}/express/expressimport.asp?vendor={encodedConfig|RefWorks|vendor|VuFind}&filter=RefWorks%20Tagged%20Format&url={encodedCallback}"
-;headers[] = "Content-type: text/plain; charset=utf-8"
+;redirectUrl = "{config|RefWorks|url|https://www.refworks.com}/express/expressimport.asp?vendor={encodedConfig|RefWorks|vendor|VuFind}&filter=RefWorks%20Tagged%20Format&encoding=65001"
+;bulkExportType = post
+;postField = ImportData
 
 ;[EndNoteWeb]
 ;requiredMethods[] = getTitle
diff --git a/local/config/vufind/facets.ini b/local/config/vufind/facets.ini
index fa1d561991f2009e3415d5c5385fc723d8768a43..f13fa9bd50dc06e39dcdb7cded6c5405aa3994c2 100644
--- a/local/config/vufind/facets.ini
+++ b/local/config/vufind/facets.ini
@@ -30,7 +30,34 @@ publishDateSort    = "adv_search_year"
 ; recommendations module is used.  See the [TopRecommendations] section of
 ; searches.ini for more details.
 [ResultsTop]
-; topic_facet        = "Suggested Topics"
+;topic_facet        = "Suggested Topics"
+
+; This section controls where facet labels are retrieved from when facets are not
+; explicitly configured.
+[FacetLabels]
+; This setting lists configuration sections containing facet field => label
+; mappings. Later values will override earlier values. These mappings will be used
+; only when a label is not explicitly configured (i.e. through SideFacets settings).
+; If you customize your facet display, be sure to add any new facet configuration
+; sections to this list to ensure proper display in search history, etc.
+labelSections[] = Advanced
+labelSections[] = HomePage
+labelSections[] = ResultsTop
+labelSections[] = Results
+labelSections[] = ExtraFacetLabels
+
+; This setting lists configuration settings defining checkbox facets. If you use
+; a custom section to configure additional facets, be sure to add it to this list
+; so labels display correctly in history, the advanced search editor, etc. If you
+; are using the reverse label => filter format rather than filter => label, you
+; should prefix the section name with a ~ character to ensure proper loading.
+checkboxSections[] = CheckboxFacets
+
+; This section is used to specify labels for facets that may be applied by parts
+; of VuFind other than the facet lists defined in this file (for example, the
+; hierarchical browse of the BrowseController, or the Geographic Search).
+[ExtraFacetLabels]
+long_lat = "Geographic Search"
 
 ; This section is used to identify facets for special treatment by the SideFacets
 ; recommendations module.
@@ -50,14 +77,29 @@ dateRange[] = publishDateSort
 ; (see https://wiki.apache.org/solr/HierarchicalFaceting but note that we always
 ; use a trailing slash to avoid ambiguities)
 ;hierarchical[] = building
-; Sort options for hierarchical facets:
-; How hierarchical facets are sorted. Default is result count, but alternative ways
-; can be specified:
+
+; General sort options for hierarchical facets (Home page, Advanced Search and
+; SideFacets).
+;
+; You can set a general default setting with * and set field-specific overrides
+; using field names (see example below).
+;
+; Available options:
 ; top = Sort the top level list alphabetically, others by result count (useful e.g.
 ;       for a large number of building facets where top level is organization and
 ;       second level the library branch)
 ; all = Sort all levels alphabetically
+; count = Sort all levels by count
+;
+; Note: this section may be overridden for HomePage and Advanced search facets (see
+; hierarchicalFacetSortOptions in HomePage_Settings and Advanced_Settings below).
+;
+; By default, if no settings are configured in this file, the default sort will be
+; 'count' for SideFacets values, 'all' for HomePage values, and 'top' for Advanced
+; values.
+;hierarchicalFacetSortOptions[*] = all
 ;hierarchicalFacetSortOptions[building] = top
+
 ; How hierarchical facet values are displayed in the records:
 ; single = Display only the deepest level (default)
 ; full   = Display full hierarchy for each entry
@@ -75,8 +117,22 @@ dateRange[] = publishDateSort
 ; Leave the section empty if you do not need checkbox facets.
 [CheckboxFacets]
 ;edition:1st* = "First Edition"     ; Contrived hypothetical example
-;access_facet:Local Holdings = "Local Holdings"
-;access_facet:Electronic Resources = "Electronic Resources"
+
+; Available sort options when listing all facets from Sidefacets.
+;
+; Each configuration option targets a search class and a facet field.
+; All facet fields for a search class can be targeted using the wildcard '*'.
+; Sort options are given as a comma-separated list of "<sort-field>=<label>" entries,
+; where <sort-field> is either 'count' or 'index' and <label> the translation
+; key for the option.
+[AvailableFacetSortOptions]
+; By default all Solr facets can be sorted by count and alphabetically.
+
+; Example: sort Solr author_facet by count only.
+; Solr[author_facet] = "count=sort_count"
+
+; Example: sort Solr author_facet only alphabetically
+; Solr[author_facet] = "index=sort_alphabetic"
 
 ; These settings affect the way the [Results] facets are displayed
 ; If using facets at the top of search results you have more room for text.
@@ -85,18 +141,21 @@ dateRange[] = publishDateSort
 facet_limit = 30
 ; Override facet_limit on a per-field basis using this array:
 ;facet_limit_by_field[format] = 50
+
 ; By default, the side facets will only show 6 facets and then the "show more"
 ; button. This can get configured with the showMore settings.
 ; You can use the * to set a new default setting.
 showMore[*] = 6
 ; Or you can set a facet specific value by using the facet name as index.
 ;showMore['format'] = 10
+
 ; Show more facets in a lightbox (paginated, no limit)
 ; If false, facets expand in side bar to show facets up to the above limit
 ; If "more", facets expand and offer an option at the bottom to open the lightbox
 ; If true, facets immediately open in the lightbox
 showMoreInLightbox[*] = false
 ;lightboxLimit = 50 ; page size for the lightbox
+
 ; Rows and columns for table used by top facets
 ;top_rows = 2
 ;top_cols = 3
@@ -170,8 +229,8 @@ special_facets   = "daterange"
 ; translated facets, be sure that all of the necessary strings are included in the
 ; language files found in the languages directory. You may add a colon and the
 ; name of a text domain after the field name to specify translations in a specific
-; text domain (subdirectory of the languages folder). By default, no facets are
-; translated -- uncomment or add lines below to turn on this feature.
+; text domain (subdirectory of the languages folder). If you comment out the lines
+; below, no facets will be translated.
 ;translated_facets[] = institution
 ;translated_facets[] = building
 translated_facets[] = format
@@ -192,15 +251,21 @@ translated_facets[] = mega_collection
 ;delimited_facets[] = author_id_str
 ;delimited_facets[] = "author_id_str|:::"
 
-; These facets will be displayed on the Home Page.  If this section is omitted,
-; the [Advanced] section will be used instead.
+; Sort overrides for Advanced search hierarchical facets. See the comments
+; above the SpecialFacets > hierarchicalFacetSortOptions setting for details.
+;hierarchicalFacetSortOptions[*] = all
+;hierarchicalFacetSortOptions[building] = top
+
+; These facets will be displayed on the Home Page when FacetList is turned on in
+; the content setting of the [HomePage] section of searches.ini. If this section
+; is omitted, the [Advanced] section will be used instead.
 [HomePage]
 ;callnumber-first = "Call Number"
 language         = Language
 format           = Format
 ;hierarchy_top_title   = Collections
 
-; These settings affect the way the [HomePage] facets are displayed
+; These settings affect the way the [HomePage] facets are displayed.
 ; NOTE: To make changes take effect immediately, you may need to clear VuFind's
 ; cache after changing this section.
 [HomePage_Settings]
@@ -208,6 +273,11 @@ format           = Format
 ; of the homepage facet lists, we may not display all loaded values for every facet
 facet_limit      = 20
 
+; Sort overrides for HomePage search hierarchical facets. See the comments
+; above the SpecialFacets > hierarchicalFacetSortOptions setting for details.
+;hierarchicalFacetSortOptions[*] = all
+;hierarchicalFacetSortOptions[building] = top
+
 [Visual_Settings]
 ; Which two facetable fields should be used for creating the visual results?
 ; See VisualFacets recommendation module in searches.ini for more details.
diff --git a/local/config/vufind/permissionBehavior.ini b/local/config/vufind/permissionBehavior.ini
index 7297e4a66f87957bd24de31e21e4cab604d83c4f..08042db7052a18718217c4fc26c096c8dded0195 100644
--- a/local/config/vufind/permissionBehavior.ini
+++ b/local/config/vufind/permissionBehavior.ini
@@ -1,25 +1,88 @@
-;####################################################################
-;##################### DO NOT DELETE THIS HEADER ####################
-;################### Leipzig University Library © 2019 ##############
+; This file controls how denied permissions are treated within VuFind.
 ;
-; This is the ISIL-instance-specific default INI-file and inherits
-; all the settings from the INI-file defined in [Parent_Config] which
-; points to the default INI-file located in the folder vufind2/local
+; The permissions need to be set in permissions.ini.
+; In this file you can configure what should happen if a permission is denied.
+; Please use the permission names from permissions.ini as section names here.
 ;
-
-[Parent_Config]
-relative_path = ../../../config/vufind/permissionBehavior.ini
-
-; A comma-separated list of config sections from the parent which should be
-; completely overwritten by the equivalent sections in this configuration;
-; any sections not listed here will be merged on a section-by-section basis.
-;override_full_sections = ""
-
+; Example:
+;
+; This role from permissions.ini:
+;
+; [default.EITModule]
+; role = loggedin
+; permission = access.EITModule
+;
+; should be configured here in section:
+;
+; [access.EITModule]
+;
+; See permissions.ini for more permissions that you may also wish to configure here.
+;
+; Within each section, there are two options which can be configured:
 ;
-;       Add instance-specific customization after this header.
+; deniedTemplateBehavior: The behavior to apply when a permission is denied
+; dynamically within a template; i.e. the user has access to a page but is blocked
+; from a particular feature of that page. If undefined, the default behavior is
+; to hide the affected functionality and display no special message.
 ;
-;##################### DO NOT DELETE THIS HEADER ####################
-;####################################################################
+; deniedControllerBehavior: The behavior to apply when a permission is denied at the
+; controller level; i.e. the user is totally blocked from accessing something. If
+; undefined, the default behavior defined by the controller (usually promptLogin)
+; will be applied.
+;
+; Each of these options may be set to one of the following options; most options
+; also receive a colon-delimited list of parameters.
+;
+; exception - Throw the specified exception class (param 1) with the specified
+;     exception message (param 2).
+;     This option is ONLY supported by deniedControllerBehavior.
+;     example: deniedControllerBehavior = exception:MyExceptionClass:Access Denied.
+;
+; promptLogin - Redirect the user to the login page. You can optionally set the
+;     first parameter to a message to display on the login page (omit for default).
+;     This option is ONLY supported by deniedControllerBehavior.
+;     example: deniedControllerBehavior = promptLogin
+;
+; showMessage - Display the message (the first parameter) to the user; this text
+;     will be run through the translator. When used as the deniedControllerBehavior,
+;     the message will be displayed in the form of a flash message on the
+;     "permission denied" screen. When used as the deniedTemplateBehavior, the text
+;     will be displayed in place of the blocked markup.
+;     example: deniedControllerBehavior = showMessage:Blocked!
+;
+; showTemplate - Render a specific template, specified as the first parameter.
+;     This option is ONLY supported by deniedTemplateBehavior.
+;     example: deniedTemplateBehavior = showTemplate:error/denied
 
+; Section for global parameters
 [global]
-defaultDeniedTemplateBehavior = true
\ No newline at end of file
+; The default behavior will get used if a permission is denied, but the controller
+; in question defines no default behavior and no permission denied behavior has been
+; configured in this file for the relevant permission.
+defaultDeniedControllerBehavior = "promptLogin"
+
+; The default behavior will get used if a permission is denied, but no permission
+; denied behavior has been configured in this file for the relevant permission.
+; (False means "use the default behavior defined by the template").
+defaultDeniedTemplateBehavior = true
+
+; This setting can be used to override access permissions for controllers. You can
+; set a controller class name inside the brackets to explicitly override that
+; controller's access permission (and that of any of its children, unless more
+; specific permissions are set for those subclasses), whether or not it has a
+; default defined in the class. You can use * inside the brackets to set a default
+; access permission that is applied to all controllers that do not have an
+; internally-defined default (the MyResearchController is also excluded from
+; this setting to avoid infinite login redirects). This can be useful if you
+; wish to password-protect your entire site.
+;controllerAccess[*] = access.VuFindInterface
+;controllerAccess[VuFind\Controller\SearchController] = access.SearchResults
+
+; Example configuration for non-standard favorites permission behavior:
+;[feature.Favorites]
+;deniedTemplateBehavior = "showMessage:Login for Favorites"
+; Note that VuFind loads the MyResearch/Favorites action by default, so be
+; careful about blocking this at the controller level. If you conditionally
+; block this for some users, you should change the defaultAccountPage in
+; config.ini to avoid causing login problems.
+;deniedControllerBehavior = "exception::You are not logged in!"
diff --git a/local/config/vufind/permissions.ini b/local/config/vufind/permissions.ini
index 1b6447ee0a3d12320103976fb88cd2138640a6f0..4e21bed744bb5433bd7cb67295f17fded62fe07c 100644
--- a/local/config/vufind/permissions.ini
+++ b/local/config/vufind/permissions.ini
@@ -45,6 +45,9 @@
 ;               rule that checks an attribute.
 ; username    - Grant the permission to logged-in users whose usernames match the
 ;               specified value(s). Accepts a string or an array.
+; user        - Grant the permissions to logged in users whose user attribute match
+;               the given regular expression pattern. For valid pattern syntax see
+;               http://php.net/manual/de/reference.pcre.pattern.syntax.php.
 ;
 ; Example configuration (grants the "sample.permission" permission to users named
 ; admin1 or admin2, or anyone coming from the IP addresses 1.2.3.4 or 1.2.3.5):
@@ -57,15 +60,22 @@
 ; ipRange[] = "1.2.3.4"
 ; ipRange[] = "1.2.3.7-1.2.5.254"
 ; permission = sample.permission
-;
+
+; Example configuration (grants the "sample.permission" permission to users
+; who are from myCollege or who is a studentmajor (.*studentmajor.*):
+; user[] = "college myCollege"
+; user[] = "major .*studentmajor.*"
+
 ; List of permissions that you may wish to configure:
 ;
 ; access.AdminModule - Controls access to the admin panel (if enabled in config.ini)
 ; access.DebugMode - Allows ?debug=true GET parameter to turn on debug mode
 ; access.EDSExtendedResults - Controls visibility of protected EDS results
 ; access.EITModule - Controls access to the EBSCO EIT module (if active)
+; access.PrimoModule - Controls access to ALL Primo content
 ; access.StaffViewTab - Controls access to the staff view tab in record mode
 ; access.SummonExtendedResults - Controls visibility of protected Summon results
+; feature.Favorites - Controls access to the "save favorites" feature
 
 ; Configuration for permitting EBL/Schweitzer link resolving
 ;[default.EBL]
@@ -97,6 +107,11 @@ role[] = guest
 role[] = loggedin
 permission = access.StaffViewTab
 
+[feature.Favorites]
+role[] = loggedin
+role[] = guest
+permission = feature.Favorites
+
 ; Example for dynamic debug mode
 ;[default.DebugMode]
 ;username[] = admin
@@ -143,7 +158,31 @@ permission = access.StaffViewTab
 ;role = loggedin ; if you want to allow authenticated users to use Primo module
 ;permission = primoOnCampus.MYINSTITUTION
 
-[feature.Favorites]
-role[] = loggedin
-role[] = guest
-permission = feature.Favorites
\ No newline at end of file
+; Example Shibboleth logout API access permission.
+; See https://vufind.org/wiki/configuration:shibboleth for more information.
+;[api.ShibbolethLogoutNotification]
+;permission = access.api.ShibbolethLogoutNotification
+;require = ANY
+;ipRange[] = '127.0.0.1'
+;ipRange[] = '::1'
+
+; Example EZproxy authorization permission.
+; See https://vufind.org/wiki/configuration:ezproxy for more information.
+[ezproxy.authorized]
+permission = ezproxy.authorized
+role = loggedin
+
+; Search and Record API permissions.
+;[api.SearchAndRecord]
+;permission[] = access.api.Search
+;permission[] = access.api.Record
+;require = ANY
+;ipRange[] = '127.0.0.1'
+;ipRange[] = '::1'
+
+; Example permission for Alma webbooks
+;[alma.Webhooks]
+;permission[] = "access.alma.webhook.user"
+;permission[] = "access.alma.webhook.challenge"
+;require = ALL
+;ipRange[] = "127.0.0.1"
diff --git a/local/config/vufind/searches.ini b/local/config/vufind/searches.ini
index b46a0108273171f8bd52b31b9042b6ab25bd9bc8..faefd48a06ef7a2a662f06343aa9927fb846146b 100644
--- a/local/config/vufind/searches.ini
+++ b/local/config/vufind/searches.ini
@@ -21,8 +21,10 @@ default_view         = list
 ; sets the default number of results per page. limit_options is a comma-separated
 ; list of numbers to be presented to the end-user. If only one limit is required,
 ; set default_limit and leave limit_options commented out.
-; WARNING: using large limits may require you to raise your PHP memory limits to
-; avoid errors.
+; WARNING: using large limits may cause problems due to a variety of limitations,
+; especially if you support bulk operations (which can cause large URLs/requests).
+; If you must support large page sizes, you may need to raise the PHP memory_limit
+; and max_input_vars settings and/or adjust the Apache LimitRequestLine setting.
 default_limit        = 20
 limit_options        = 10,20,40,60
 
@@ -51,10 +53,15 @@ case_sensitive_ranges = true
 ; [NoResultsRecommendations] sections below.
 ; See the comments above those sections for details on legal settings.  You may
 ; repeat these lines to load multiple recommendations.
+;default_top_recommend[] = MapSelection ; see [MapSelection] in geofeatures.ini.
 default_top_recommend[] = TopFacets:ResultsTop
 ;default_top_recommend[] = SpellingSuggestions
 ;default_top_recommend[] = VisualFacets:Visual_Settings
 default_side_recommend[] = SideFacets:Results:CheckboxFacets
+; SideFacetsDeferred is an alternative to SideFacets. Using it will defer loading of
+; any facet until it's actually displayed. This can improve search performance and
+; decrease server load especially with larger indexes.
+;default_side_recommend[] = SideFacetsDeferred:Results:CheckboxFacets
 ;default_side_recommend[] = EbscoResults:[namespace]:[url]
 ;default_noresults_recommend[] = SwitchTab
 default_noresults_recommend[] = SwitchType
@@ -81,9 +88,9 @@ highlighting = false
 ; For control over snippet captions, see the [Snippet_Captions] section below.
 snippets = true
 
-; When you filter a search using facets, VuFind will present a checkbox that can
-; be used to apply those filters to the next search you perform.  This setting
-; controls its default state: on (true) or off (false).
+; When you filter a search using facets, should VuFind retain your current filters
+; on the next search and provide a reset button to clear them (true), or should it
+; always perform new searches unfiltered (false)?
 retain_filters_by_default = true
 
 ; The filters listed below will be applied to all new searches by default. Omit
@@ -153,6 +160,8 @@ ISN                 = adv_search_isn
 Signatur            = "Call Number"
 Barcode             = Barcode
 toc                 = adv_search_toc
+;Coordinate        = Coordinates
+
 
 ; This section defines the sort options available on standard search results.
 ; Values on the left of the equal sign are either the reserved term "relevance"
@@ -337,35 +346,36 @@ CallNumber = callnumber-sort
 ;       Displays see and see also results to user based on search of Authority Index.
 ;       Any number of filter queries may be specified as parameters to limit which
 ;       set of authority records is used for recommendations; for example:
-;           AuthorityRecommend:record_type:Heading* OR Topical*:source:LCNAF
+;           AuthorityRecommend:record_type:Heading* OR Topical*:source:FAST
 ;       limits record_type to strings starting with "Heading" or "Topical" and
-;       limits source to LCNAF.  A special field name of "__resultlimit__" may be
+;       limits source to FAST. A special field name of "__resultlimit__" may be
 ;       used to suppress authority results when the result set contains more items
 ;       than the number specified as the corresponding value (e.g. if you configure
 ;       AuthorityRecommend:__resultlimit__:50 then authority recommendations will
 ;       only display on result screens displaying fewer than 50 hits; by default,
-;       recommendations will always display). Filtering is optional.
-; MapSelection:[ini section]:[ini name]
-;       Enable geographic searching capability via OpenLayers3 API by activating
-;       this module. Records must be indexed using the geographic search and display
-;       fields. See the marc_local.properties file for more information on indexing.
-;       Default settings and more comments may be found in the  [MapSelection]
-;       section in this file. The section name and ini file name loaded by the
-;       module may be overridden through the [ini section]/[ini name] parameters.
+;       recommendations will always display). A special field name of "__mode__"
+;       may be used to control what type of suggestions are presented (default is
+;       both seealso and usefor results, but you can turn on just one of these
+;       options if desired; for example "__mode__:seealso" would only show "see
+;       also" results from records whose main headings match the current search
+;       terms while "__mode__:usefor" would show only main headings from records
+;       whose "use for" headings match the current search. You can use "__mode__:*"
+;       to turn on all options (but this is default behavior if no __mode__ is
+;       set). Filtering is optional. A special field name of "__header__" may be
+;       used to customize the header text above the results (default = "See also").
+; Channels
+;       Display a link to the Channeled Browse functionality leading to channels of
+;       records related to the current search.
+; MapSelection
+;       Enable geographic searching capability by activating this module.
+;       Records must be indexed using the geographic search and display fields.
+;       See the marc_local.properties file for more information on indexing.
+;       See the [MapSelection] section of the geofeatures.ini file for more information.
 ; PubDateVisAjax:[zooming]:[facet field 1]:[facet field 2]:...:[facet field n]
 ;       Display a visualization of publication dates for each of the specified facet
 ;       fields.  This is designed for a field containing four-digit years.  Zooming
 ;       is set to either true or false and controls whether or not selecting part of
 ;       the graph zooms in to greater detail.
-; ResultGoogleMapAjax:[facets]
-;       Show a Google Map with markers for all result items which have long/latitude
-;       data (be sure to turn on location indexing in import/marc_local.properties).
-;       Each marker will show the number of items which are in the long_lat
-;       facet. A separate call is made when a marker is clicked to retrieve the
-;       first 5 records on that location facet. The map uses clustering to
-;       combine markers where there are more than one marker close together into
-;       clusters. The facets parameter is the name of the extra config file which
-;       holds the facet information(default "facets.ini").
 ; TopFacets:[ini section]:[ini name]
 ;       Display facets listed in the specified section of the specified ini file;
 ;       if [ini name] is left out, it defaults to "facets."
@@ -383,10 +393,26 @@ CallNumber = callnumber-sort
 ;
 ; AlphaBrowseLink:index
 ;       Use the query to generate a link to the specified alphabrowse index
+; DOI:[prefix]
+;       Detect DOIs in the user search query. If a DOI makes up part of the search,
+;       display a link to resolve it. If it makes up the entire query, redirect to
+;       the resolver automatically. [prefix] is the URL of the resolver to which
+;       the DOI itself will be appended.
+; ExternalSearch:[link label]:[url template]
+;       Display a link to an external search system. The contents of the <a> tag
+;       will be [link label] (which will be run through the translator -- use a
+;       translation string if you need to display a string containing a colon).
+;       The href will be [url template] with %%lookfor%% replaced with the current
+;       search's lookfor parameter. If you omit the %%lookfor%% placeholder, the
+;       search terms will simply be appended to the end of the URL template.
 ; Libraryh3lp:[type]:[id]:[skin]
 ;       Display a chat box for the Libraryh3lp service. [type] indicats the type
 ;       of chat being used (either "queue" or "user"). [id] is the name of the
 ;       queue or user. [skin] is optional and specifies a skin number to use.
+; RecommendLinks:[ini section]:[ini name]
+;       Display a list of recommended links, taken from [ini section] in
+;       [ini name], where the section is a mapping of label => URL. [ini name]
+;       defaults to searches.ini, and [ini section] defaults to RecommendLinks.
 ; RemoveFilters
 ;       Suggests removing facet filters to retrieve more results.
 ; SwitchQuery:[backend]:[opt-out checks to skip]:[opt-in checks to add]
@@ -447,6 +473,11 @@ Author[]            = AuthorFacets
 top[] = AuthorInfo
 side[] = "ExpandFacets:Author"
 
+; This is the default section used for setting up links for the RecommendLinks
+; recommendation module (see above for details).
+;[RecommendLinks]
+;Library of Congress Online Catalog = http://catalog.loc.gov/
+
 ; This section controls the "New Items" search.
 [NewItem]
 ; New item information can be retrieved from Solr or from the ILS; this setting
@@ -493,6 +524,11 @@ sort = "last_indexed desc"
 ;
 ; The available autocomplete handlers are:
 ;
+; Eds:[Mode]
+;       Use the EBSCO Discovery Service autocomplete handler (only intended to be
+;       used in the context of the EDS backend). [Mode] can be either "holdings" for
+;       title completion in PubFinder or "rawqueries" for completion of basic textual
+;       queries.
 ; None
 ;       Do not provide any suggestions.  You should use this handler if you want to
 ;       disable suggestions for one search type while still providing suggestions
@@ -526,6 +562,8 @@ sort = "last_indexed desc"
 enabled = false
 ; This handler will be used for all search types not covered by [Autocomplete_Types]
 default_handler = Solr
+; Auto-submit autocomplete on click or enter
+auto_submit = true
 
 ; In this section, set the key equal to a search handler from searchspecs.yaml and
 ; the value equal to an autocomplete handler in order to customize autocompletion
@@ -537,6 +575,7 @@ Author           = "Solr:Author:author,author2"
 Subject          = "Solr:Subject:topic,genre,geographic,era"
 CallNumber       = "SolrCN"
 ISN              = "Solr:ISN:isbn,issn"
+Coordinate = "None"
 tag              = "Tag"
 
 ; When snippets are enabled, this section can be used to display captions based on
@@ -663,21 +702,10 @@ view=full
 ; functionality found in the MapSelection recommendation module.
 ; To enable this feature, uncomment the default_top_recommend[] = MapSelection
 ; in the default recommendations section. To set the configuration settings
-; for this feature, adjust the parameters below.
+; for this feature, adjust the parameters in the geofeatures.ini file.
 [MapSelection]
-; This defines the coordinates of a search region that will be highlighted when
-; the user clicks the "Geographic Search" link next to the VuFind search box.
-; This should ideally cover a large area of the map where most/all of your
-; geographic points are located. If your dataset is not concentrated in one
-; geographic area, it is advised that you pick a default area, and do not use
-; the entire extent of the map for searching (otherwise the search may be slow).
-; The default coordinates specified below are in decimal degrees, and are
-; ordered as WENS (west, east, north, south). Ranges of valid values are:
-; -180 to 180 (longitude) and -85 to 85 (latitude). Note, to search from and to
-; the international date line, use west = -179 and east = -180.
-default_coordinates = "-95, 30, 72, 15"
-; height: Height in pixels of the map selection interface.
-height = 320
+; These configuration settings have been superseded by the geofeatures.ini file.
+; See the [MapSelection] section of the geofeatures.ini file for more information.
 
 ; This section defines settings used to fetch similar records.
 [MoreLikeThis]
@@ -694,6 +722,23 @@ height = 320
 ; This setting can be used to limit the maximum number of suggestions. Default is 5.
 ;count = 5
 
+; This section controls the behavior of the Search/Home screen.
+[HomePage]
+; Content blocks can be selected from the list below:
+;
+; Channels:[source] - Display the homepage channels for the specified [source].
+; [source] defaults to Solr.
+;
+; FacetList:[source]:[column size] - Display a list of facet values
+; drawn from the [source] backend, with a maximum of [column size] values per
+; column. [source] defaults to Solr and [column size] defaults to 10.
+;
+; IlsStatusMonitor:[target] - Performs an AJAX health check of the ILS and
+; prepends a warning message to the HTML element identified by the jQuery selector
+; provided in [target] (which defaults to .searchHomeContent.
+content[] = IlsStatusMonitor
+content[] = FacetList
+
 ; PreMunge is used by a listener on the search-pre event
 ; registered by the MungerInjectionDelegatorFactory. This listener applies
 ; the regex patterns as configured for the search handlers