From 79ea7604e2f107bfe277bf2e16cb6cad24f847f7 Mon Sep 17 00:00:00 2001
From: Demian Katz <demian.katz@villanova.edu>
Date: Tue, 3 Mar 2020 09:40:31 -0500
Subject: [PATCH] Migrate from Zend to Laminas (#1537)

---
 composer.json                                 |   75 +-
 composer.lock                                 | 5913 +++++++++--------
 config/application.config.php                 |    6 +-
 config/autoload/local.php.dist                |    2 +-
 config/vufind/DAIA.ini                        |    2 +-
 config/vufind/PAIA.ini                        |    2 +-
 config/vufind/config.ini                      |    8 +-
 config/vufind/httpd-vufind.conf               |    2 +-
 harvest/harvest_oai.php                       |    4 +-
 harvest/merge-marc.php                        |    4 +-
 install.php                                   |    4 +-
 module/VuFind/Module.php                      |    6 +-
 module/VuFind/config/module.config.php        |   58 +-
 .../AbstractIlsAndUserActionFactory.php       |    2 +-
 .../AbstractRelaisActionFactory.php           |    2 +-
 .../AjaxHandler/AbstractUserRequestAction.php |    2 +-
 .../AjaxHandler/AjaxHandlerInterface.php      |    2 +-
 .../AjaxHandler/CheckRequestIsValid.php       |    2 +-
 .../src/VuFind/AjaxHandler/CommentRecord.php  |    2 +-
 .../AjaxHandler/CommentRecordFactory.php      |    3 +-
 .../AjaxHandler/DeleteRecordComment.php       |    2 +-
 .../DeleteRecordCommentFactory.php            |    2 +-
 .../src/VuFind/AjaxHandler/DoiLookup.php      |    2 +-
 .../VuFind/AjaxHandler/DoiLookupFactory.php   |    2 +-
 .../VuFind/AjaxHandler/GetACSuggestions.php   |    4 +-
 .../AjaxHandler/GetACSuggestionsFactory.php   |    2 +-
 .../src/VuFind/AjaxHandler/GetFacetData.php   |    4 +-
 .../AjaxHandler/GetFacetDataFactory.php       |    2 +-
 .../src/VuFind/AjaxHandler/GetIlsStatus.php   |    4 +-
 .../AjaxHandler/GetIlsStatusFactory.php       |    2 +-
 .../VuFind/AjaxHandler/GetItemStatuses.php    |    6 +-
 .../AjaxHandler/GetItemStatusesFactory.php    |    3 +-
 .../AjaxHandler/GetLibraryPickupLocations.php |    2 +-
 .../AjaxHandler/GetRecordCommentsAsHTML.php   |    4 +-
 .../GetRecordCommentsAsHTMLFactory.php        |    2 +-
 .../VuFind/AjaxHandler/GetRecordDetails.php   |   10 +-
 .../AjaxHandler/GetRecordDetailsFactory.php   |    2 +-
 .../src/VuFind/AjaxHandler/GetRecordTags.php  |    4 +-
 .../AjaxHandler/GetRecordTagsFactory.php      |    3 +-
 .../GetRequestGroupPickupLocations.php        |    2 +-
 .../VuFind/AjaxHandler/GetResolverLinks.php   |    6 +-
 .../AjaxHandler/GetResolverLinksFactory.php   |    2 +-
 .../VuFind/AjaxHandler/GetSaveStatuses.php    |    4 +-
 .../AjaxHandler/GetSaveStatusesFactory.php    |    3 +-
 .../src/VuFind/AjaxHandler/GetSideFacets.php  |   10 +-
 .../AjaxHandler/GetSideFacetsFactory.php      |    3 +-
 .../src/VuFind/AjaxHandler/GetUserFines.php   |    2 +-
 .../AjaxHandler/GetUserFinesFactory.php       |    2 +-
 .../AjaxHandler/GetUserTransactions.php       |    2 +-
 .../src/VuFind/AjaxHandler/GetVisData.php     |    4 +-
 .../VuFind/AjaxHandler/GetVisDataFactory.php  |    2 +-
 .../src/VuFind/AjaxHandler/KeepAlive.php      |    4 +-
 .../VuFind/AjaxHandler/KeepAliveFactory.php   |    4 +-
 .../src/VuFind/AjaxHandler/Recommend.php      |    6 +-
 .../VuFind/AjaxHandler/RecommendFactory.php   |    2 +-
 .../VuFind/AjaxHandler/RelaisAvailability.php |    2 +-
 .../src/VuFind/AjaxHandler/RelaisInfo.php     |    2 +-
 .../src/VuFind/AjaxHandler/RelaisOrder.php    |    2 +-
 .../src/VuFind/AjaxHandler/SystemStatus.php   |    6 +-
 .../AjaxHandler/SystemStatusFactory.php       |    4 +-
 .../src/VuFind/AjaxHandler/TagRecord.php      |    2 +-
 .../VuFind/AjaxHandler/TagRecordFactory.php   |    2 +-
 .../VuFind/src/VuFind/Auth/AbstractBase.php   |   30 +-
 .../VuFind/src/VuFind/Auth/AlmaDatabase.php   |    2 +-
 module/VuFind/src/VuFind/Auth/CAS.php         |    2 +-
 module/VuFind/src/VuFind/Auth/ChoiceAuth.php  |   21 +-
 .../src/VuFind/Auth/ChoiceAuthFactory.php     |    6 +-
 module/VuFind/src/VuFind/Auth/Database.php    |    6 +-
 module/VuFind/src/VuFind/Auth/Email.php       |    4 +-
 .../src/VuFind/Auth/EmailAuthenticator.php    |   33 +-
 .../VuFind/Auth/EmailAuthenticatorFactory.php |    6 +-
 .../VuFind/src/VuFind/Auth/EmailFactory.php   |    2 +-
 module/VuFind/src/VuFind/Auth/Facebook.php    |    8 +-
 .../src/VuFind/Auth/FacebookFactory.php       |    6 +-
 module/VuFind/src/VuFind/Auth/ILS.php         |   11 +-
 .../VuFind/Auth/ILSAuthenticatorFactory.php   |    2 +-
 module/VuFind/src/VuFind/Auth/ILSFactory.php  |    2 +-
 module/VuFind/src/VuFind/Auth/LDAP.php        |    2 +-
 module/VuFind/src/VuFind/Auth/Manager.php     |   18 +-
 .../VuFind/src/VuFind/Auth/ManagerFactory.php |    6 +-
 module/VuFind/src/VuFind/Auth/MultiAuth.php   |    8 +-
 .../src/VuFind/Auth/MultiAuthFactory.php      |    2 +-
 module/VuFind/src/VuFind/Auth/MultiILS.php    |    2 +-
 .../VuFind/src/VuFind/Auth/PasswordAccess.php |    4 +-
 .../VuFind/src/VuFind/Auth/PluginManager.php  |    2 +-
 module/VuFind/src/VuFind/Auth/SIP2.php        |    2 +-
 module/VuFind/src/VuFind/Auth/Shibboleth.php  |   10 +-
 .../src/VuFind/Auth/ShibbolethFactory.php     |    4 +-
 .../src/VuFind/Autocomplete/EdsFactory.php    |    2 +-
 .../src/VuFind/Autocomplete/PluginManager.php |    2 +-
 .../src/VuFind/Autocomplete/SolrFactory.php   |    2 +-
 .../src/VuFind/Autocomplete/Suggester.php     |    9 +-
 .../VuFind/Autocomplete/SuggesterFactory.php  |    2 +-
 module/VuFind/src/VuFind/Bootstrapper.php     |   20 +-
 .../src/VuFind/Cache/KeyGeneratorTrait.php    |    2 +-
 module/VuFind/src/VuFind/Cache/Manager.php    |   10 +-
 .../src/VuFind/Cache/ManagerFactory.php       |    2 +-
 .../Cache/Storage/Adapter/NoCacheAdapter.php  |    2 +-
 module/VuFind/src/VuFind/CartFactory.php      |    2 +-
 .../AbstractILSChannelProviderFactory.php     |    2 +-
 .../VuFind/ChannelProvider/AlphaBrowse.php    |    2 +-
 .../ChannelProvider/AlphaBrowseFactory.php    |    2 +-
 .../VuFind/ChannelProvider/ChannelLoader.php  |    2 +-
 .../ChannelProvider/ChannelLoaderFactory.php  |    2 +-
 .../src/VuFind/ChannelProvider/Facets.php     |    2 +-
 .../VuFind/ChannelProvider/FacetsFactory.php  |    2 +-
 .../src/VuFind/ChannelProvider/ListItems.php  |    4 +-
 .../ChannelProvider/ListItemsFactory.php      |    2 +-
 .../VuFind/ChannelProvider/RandomFactory.php  |    2 +-
 .../ChannelProvider/RouterInitializer.php     |    2 +-
 .../VuFind/ChannelProvider/SimilarItems.php   |    2 +-
 .../ChannelProvider/SimilarItemsFactory.php   |    2 +-
 .../src/VuFind/Config/AccountCapabilities.php |    2 +-
 .../Config/AccountCapabilitiesFactory.php     |    2 +-
 .../src/VuFind/Config/PluginFactory.php       |    8 +-
 .../src/VuFind/Config/PluginManager.php       |    4 +-
 .../VuFind/Config/PluginManagerFactory.php    |    2 +-
 .../VuFind/Config/Reader/CacheDecorator.php   |    4 +-
 .../src/VuFind/Config/YamlReaderFactory.php   |    2 +-
 .../src/VuFind/Connection/OpenLibrary.php     |    6 +-
 .../VuFind/src/VuFind/Connection/Relais.php   |    6 +-
 .../src/VuFind/Connection/RelaisFactory.php   |    2 +-
 .../src/VuFind/Connection/Wikipedia.php       |    6 +-
 .../src/VuFind/Connection/WorldCatUtils.php   |   22 +-
 .../Connection/WorldCatUtilsFactory.php       |    2 +-
 .../VuFind/Content/AbstractAmazonFactory.php  |    5 +-
 .../src/VuFind/Content/AbstractBase.php       |    4 +-
 .../src/VuFind/Content/AbstractSyndetics.php  |    2 +-
 .../Content/AbstractSyndeticsFactory.php      |    2 +-
 .../Content/AuthorNotes/PluginManager.php     |    2 +-
 .../src/VuFind/Content/Covers/Amazon.php      |    2 +-
 .../VuFind/Content/Covers/AmazonFactory.php   |    2 +-
 .../VuFind/Content/Covers/BooksiteFactory.php |    2 +-
 .../VuFind/Content/Covers/BrowZineFactory.php |    2 +-
 .../Content/Covers/BuchhandelFactory.php      |    2 +-
 .../src/VuFind/Content/Covers/ContentCafe.php |    4 +-
 .../Content/Covers/ContentCafeFactory.php     |    4 +-
 .../src/VuFind/Content/Covers/Google.php      |    2 +-
 .../VuFind/Content/Covers/PluginManager.php   |    2 +-
 .../Content/Covers/SyndeticsFactory.php       |    2 +-
 .../VuFind/Content/Excerpts/PluginManager.php |    2 +-
 module/VuFind/src/VuFind/Content/Factory.php  |    2 +-
 .../Content/Reviews/BooksiteFactory.php       |    2 +-
 .../VuFind/Content/Reviews/PluginManager.php  |    4 +-
 .../Content/Summaries/PluginManager.php       |    2 +-
 .../src/VuFind/Content/TOC/PluginManager.php  |    2 +-
 .../src/VuFind/ContentBlock/BlockLoader.php   |    2 +-
 .../ContentBlock/BlockLoaderFactory.php       |    2 +-
 .../src/VuFind/ContentBlock/Channels.php      |    2 +-
 .../VuFind/ContentBlock/ChannelsFactory.php   |    2 +-
 .../src/VuFind/ContentBlock/FacetList.php     |    2 +-
 .../VuFind/ContentBlock/FacetListFactory.php  |    2 +-
 .../src/VuFind/ContentBlock/PluginManager.php |    2 +-
 .../src/VuFind/Controller/AbstractBase.php    |   12 +-
 .../VuFind/Controller/AbstractBaseFactory.php |    2 +-
 .../src/VuFind/Controller/AbstractRecord.php  |    8 +-
 .../src/VuFind/Controller/AbstractSearch.php  |   12 +-
 .../src/VuFind/Controller/AjaxController.php  |    8 +-
 .../Controller/AjaxControllerFactory.php      |    2 +-
 .../VuFind/Controller/AjaxResponseTrait.php   |    6 +-
 .../src/VuFind/Controller/AlmaController.php  |   36 +-
 .../Controller/AlphabrowseController.php      |    2 +-
 .../VuFind/Controller/AuthorityController.php |    6 +-
 .../VuFind/Controller/BrowZineController.php  |    2 +-
 .../VuFind/Controller/BrowseController.php    |   32 +-
 .../src/VuFind/Controller/CartController.php  |    6 +-
 .../Controller/CartControllerFactory.php      |    4 +-
 .../VuFind/Controller/ChannelsController.php  |    6 +-
 .../Controller/CollectionController.php       |    6 +-
 .../Controller/CollectionsController.php      |    6 +-
 .../VuFind/Controller/CombinedController.php  |    2 +-
 .../VuFind/Controller/ContentController.php   |    6 +-
 .../src/VuFind/Controller/CoverController.php |    8 +-
 .../Controller/CoverControllerFactory.php     |    2 +-
 .../src/VuFind/Controller/EITController.php   |    2 +-
 .../VuFind/Controller/EITrecordController.php |    2 +-
 .../src/VuFind/Controller/EdsController.php   |    2 +-
 .../VuFind/Controller/EdsrecordController.php |    2 +-
 .../src/VuFind/Controller/ErrorController.php |    6 +-
 .../Controller/ExternalAuthController.php     |    6 +-
 .../VuFind/Controller/FeedbackController.php  |    4 +-
 .../VuFind/Controller/HierarchyController.php |    6 +-
 .../src/VuFind/Controller/IndexController.php |    4 +-
 .../Controller/IndexControllerFactory.php     |    2 +-
 .../VuFind/Controller/InstallController.php   |   14 +-
 .../VuFind/Controller/LibGuidesController.php |    2 +-
 .../Controller/LibraryCardsController.php     |    4 +-
 .../Controller/MyResearchController.php       |   20 +-
 .../src/VuFind/Controller/OaiController.php   |    8 +-
 .../VuFind/Controller/OverdriveController.php |   10 +-
 .../VuFind/Controller/Pazpar2Controller.php   |    2 +-
 .../Controller/Pazpar2recordController.php    |    2 +-
 .../Controller/Plugin/AbstractRequestBase.php |    8 +-
 .../Plugin/AbstractRequestBaseFactory.php     |    4 +-
 .../VuFind/Controller/Plugin/DbUpgrade.php    |   12 +-
 .../VuFind/Controller/Plugin/Favorites.php    |    4 +-
 .../Controller/Plugin/FavoritesFactory.php    |    2 +-
 .../Plugin/FlashMessengerFactory.php          |    4 +-
 .../src/VuFind/Controller/Plugin/Followup.php |    8 +-
 .../Controller/Plugin/FollowupFactory.php     |    6 +-
 .../src/VuFind/Controller/Plugin/Holds.php    |    2 +-
 .../VuFind/Controller/Plugin/ILLRequests.php  |    2 +-
 .../src/VuFind/Controller/Plugin/NewItems.php |    8 +-
 .../Controller/Plugin/NewItemsFactory.php     |    4 +-
 .../VuFind/Controller/Plugin/Permission.php   |    4 +-
 .../Controller/Plugin/PermissionFactory.php   |    2 +-
 .../VuFind/Controller/Plugin/Recaptcha.php    |   12 +-
 .../Controller/Plugin/RecaptchaFactory.php    |    2 +-
 .../src/VuFind/Controller/Plugin/Renewals.php |   10 +-
 .../src/VuFind/Controller/Plugin/Reserves.php |    4 +-
 .../Controller/Plugin/ReservesFactory.php     |    2 +-
 .../Controller/Plugin/ResultScroller.php      |    4 +-
 .../Plugin/ResultScrollerFactory.php          |    6 +-
 .../Plugin/StorageRetrievalRequests.php       |    2 +-
 .../src/VuFind/Controller/PrimoController.php |    2 +-
 .../Controller/PrimorecordController.php      |    2 +-
 .../VuFind/Controller/QRCodeController.php    |    8 +-
 .../Controller/QRCodeControllerFactory.php    |    2 +-
 .../VuFind/Controller/RecordController.php    |    4 +-
 .../VuFind/Controller/RecordsController.php   |    2 +-
 .../VuFind/Controller/Search2Controller.php   |    2 +-
 .../Controller/Search2recordController.php    |    2 +-
 .../VuFind/Controller/SearchController.php    |    6 +-
 ...ShibbolethLogoutNotificationController.php |    8 +-
 .../VuFind/Controller/ShortlinkController.php |    4 +-
 .../VuFind/Controller/SummonController.php    |    4 +-
 .../Controller/SummonrecordController.php     |    4 +-
 .../src/VuFind/Controller/TagController.php   |    2 +-
 .../VuFind/Controller/UpgradeController.php   |   12 +-
 .../Controller/UpgradeControllerFactory.php   |    4 +-
 .../src/VuFind/Controller/WebController.php   |    2 +-
 .../Controller/Widget/WidgetInterface.php     |    2 +-
 .../VuFind/Controller/WorldcatController.php  |    2 +-
 .../Controller/WorldcatrecordController.php   |    2 +-
 module/VuFind/src/VuFind/Cookie/Container.php |    4 +-
 .../VuFind/Cookie/CookieManagerFactory.php    |    4 +-
 .../VuFind/src/VuFind/Cover/CachingProxy.php  |    4 +-
 .../src/VuFind/Cover/CachingProxyFactory.php  |    2 +-
 .../src/VuFind/Cover/GeneratorFactory.php     |    2 +-
 .../src/VuFind/Cover/Layer/PluginManager.php  |    2 +-
 module/VuFind/src/VuFind/Cover/Loader.php     |    4 +-
 .../VuFind/src/VuFind/Cover/LoaderFactory.php |    2 +-
 .../VuFind/src/VuFind/Cover/RouterFactory.php |    2 +-
 .../VuFind/src/VuFind/Crypt/HMACFactory.php   |    2 +-
 .../VuFind/src/VuFind/Db/AdapterFactory.php   |   16 +-
 module/VuFind/src/VuFind/Db/Row/AuthHash.php  |    2 +-
 .../src/VuFind/Db/Row/ChangeTracker.php       |    2 +-
 module/VuFind/src/VuFind/Db/Row/Comments.php  |    2 +-
 .../src/VuFind/Db/Row/ExternalSession.php     |    2 +-
 .../src/VuFind/Db/Row/OaiResumption.php       |    2 +-
 .../VuFind/src/VuFind/Db/Row/PrivateUser.php  |    6 +-
 module/VuFind/src/VuFind/Db/Row/Record.php    |    2 +-
 module/VuFind/src/VuFind/Db/Row/Resource.php  |    2 +-
 .../VuFind/src/VuFind/Db/Row/ResourceTags.php |    2 +-
 .../VuFind/src/VuFind/Db/Row/RowGateway.php   |    2 +-
 .../src/VuFind/Db/Row/RowGatewayFactory.php   |    4 +-
 module/VuFind/src/VuFind/Db/Row/Search.php    |    2 +-
 module/VuFind/src/VuFind/Db/Row/Session.php   |    2 +-
 .../VuFind/src/VuFind/Db/Row/Shortlinks.php   |    2 +-
 module/VuFind/src/VuFind/Db/Row/Tags.php      |    4 +-
 module/VuFind/src/VuFind/Db/Row/User.php      |   22 +-
 module/VuFind/src/VuFind/Db/Row/UserCard.php  |    2 +-
 .../VuFind/src/VuFind/Db/Row/UserFactory.php  |    5 +-
 module/VuFind/src/VuFind/Db/Row/UserList.php  |   10 +-
 .../src/VuFind/Db/Row/UserListFactory.php     |    4 +-
 .../VuFind/src/VuFind/Db/Row/UserResource.php |    2 +-
 .../VuFind/src/VuFind/Db/Table/AuthHash.php   |    4 +-
 .../src/VuFind/Db/Table/ChangeTracker.php     |   10 +-
 .../VuFind/src/VuFind/Db/Table/Comments.php   |    8 +-
 .../src/VuFind/Db/Table/ExpirationTrait.php   |    4 +-
 .../src/VuFind/Db/Table/ExternalSession.php   |    4 +-
 module/VuFind/src/VuFind/Db/Table/Gateway.php |   12 +-
 .../src/VuFind/Db/Table/GatewayFactory.php    |    4 +-
 .../src/VuFind/Db/Table/OaiResumption.php     |    4 +-
 module/VuFind/src/VuFind/Db/Table/Record.php  |    8 +-
 .../VuFind/src/VuFind/Db/Table/Resource.php   |   23 +-
 .../src/VuFind/Db/Table/ResourceTags.php      |   20 +-
 module/VuFind/src/VuFind/Db/Table/Search.php  |   10 +-
 module/VuFind/src/VuFind/Db/Table/Session.php |    4 +-
 .../VuFind/src/VuFind/Db/Table/Shortlinks.php |    4 +-
 module/VuFind/src/VuFind/Db/Table/Tags.php    |   12 +-
 module/VuFind/src/VuFind/Db/Table/User.php    |   10 +-
 .../VuFind/src/VuFind/Db/Table/UserCard.php   |    4 +-
 .../src/VuFind/Db/Table/UserFactory.php       |    5 +-
 .../VuFind/src/VuFind/Db/Table/UserList.php   |    8 +-
 .../src/VuFind/Db/Table/UserListFactory.php   |    4 +-
 .../src/VuFind/Db/Table/UserResource.php      |    8 +-
 .../DigitalContent/OverdriveConnector.php     |   14 +-
 .../OverdriveConnectorFactory.php             |    6 +-
 .../src/VuFind/DoiLinker/BrowZineFactory.php  |    2 +-
 .../VuFind/src/VuFind/DoiLinker/Unpaywall.php |    2 +-
 .../src/VuFind/DoiLinker/UnpaywallFactory.php |    2 +-
 module/VuFind/src/VuFind/Export.php           |   11 +-
 module/VuFind/src/VuFind/ExportFactory.php    |    2 +-
 .../Favorites/FavoritesServiceFactory.php     |    2 +-
 .../Writer/Extension/DublinCore/Entry.php     |    6 +-
 .../Extension/DublinCore/Renderer/Entry.php   |    6 +-
 .../Feed/Writer/Extension/OpenSearch/Feed.php |   10 +-
 .../Extension/OpenSearch/Renderer/Feed.php    |    6 +-
 module/VuFind/src/VuFind/Form/Form.php        |   28 +-
 module/VuFind/src/VuFind/Form/FormFactory.php |    2 +-
 .../src/VuFind/GeoFeatures/AbstractConfig.php |    2 +-
 .../GeoFeatures/AbstractConfigFactory.php     |    2 +-
 .../VuFind/Hierarchy/Driver/AbstractBase.php  |   12 +-
 .../Driver/ConfigurationBasedFactory.php      |    8 +-
 .../TreeDataFormatter/PluginManager.php       |    2 +-
 .../Hierarchy/TreeDataSource/AbstractBase.php |    2 +-
 .../TreeDataSource/PluginManager.php          |    2 +-
 .../Hierarchy/TreeDataSource/SolrFactory.php  |    2 +-
 .../VuFind/Hierarchy/TreeRenderer/JSTree.php  |   19 +-
 .../Hierarchy/TreeRenderer/JSTreeFactory.php  |    2 +-
 .../PhpEnvironment/RemoteAddressFactory.php   |    4 +-
 .../VuFind/Http/PhpEnvironment/Request.php    |   16 +-
 .../src/VuFind/I18n/ExtendedIniNormalizer.php |    2 +-
 .../Translator/LanguageInitializerTrait.php   |    4 +-
 .../I18n/Translator/Loader/ExtendedIni.php    |    6 +-
 .../Translator/Loader/ExtendedIniReader.php   |    6 +-
 .../Translator/TranslatorAwareInterface.php   |    4 +-
 .../I18n/Translator/TranslatorAwareTrait.php  |   10 +-
 .../I18n/Translator/TranslatorFactory.php     |    4 +-
 module/VuFind/src/VuFind/ILS/Connection.php   |   14 +-
 .../src/VuFind/ILS/ConnectionFactory.php      |    4 +-
 .../src/VuFind/ILS/Driver/AbstractAPI.php     |   19 +-
 module/VuFind/src/VuFind/ILS/Driver/Aleph.php |    2 +-
 module/VuFind/src/VuFind/ILS/Driver/Alma.php  |    6 +-
 .../src/VuFind/ILS/Driver/AlmaFactory.php     |    6 +-
 .../src/VuFind/ILS/Driver/CacheTrait.php      |    2 +-
 module/VuFind/src/VuFind/ILS/Driver/DAIA.php  |    2 +-
 module/VuFind/src/VuFind/ILS/Driver/Demo.php  |    2 +-
 .../src/VuFind/ILS/Driver/DemoFactory.php     |    4 +-
 .../Driver/DriverWithDateConverterFactory.php |    2 +-
 module/VuFind/src/VuFind/ILS/Driver/Folio.php |   17 +-
 .../src/VuFind/ILS/Driver/FolioFactory.php    |    4 +-
 .../VuFind/src/VuFind/ILS/Driver/Horizon.php  |    2 +-
 .../src/VuFind/ILS/Driver/KohaILSDI.php       |    2 +-
 .../src/VuFind/ILS/Driver/MultiBackend.php    |    4 +-
 .../VuFind/ILS/Driver/MultiBackendFactory.php |    2 +-
 .../src/VuFind/ILS/Driver/NoILSFactory.php    |    2 +-
 module/VuFind/src/VuFind/ILS/Driver/PAIA.php  |   14 +-
 .../src/VuFind/ILS/Driver/PAIAFactory.php     |    2 +-
 .../src/VuFind/ILS/Driver/PluginManager.php   |    2 +-
 .../src/VuFind/ILS/Driver/SierraRest.php      |    6 +-
 .../VuFind/ILS/Driver/SierraRestFactory.php   |    4 +-
 .../VuFind/src/VuFind/ILS/Driver/Symphony.php |    2 +-
 .../src/VuFind/ILS/Driver/SymphonyFactory.php |    2 +-
 .../VuFind/src/VuFind/ILS/Driver/Voyager.php  |    4 +-
 .../src/VuFind/ILS/Driver/VoyagerRestful.php  |    2 +-
 module/VuFind/src/VuFind/ILS/HoldSettings.php |    6 +-
 .../src/VuFind/ILS/HoldSettingsFactory.php    |    2 +-
 module/VuFind/src/VuFind/ILS/Logic/Holds.php  |    6 +-
 .../src/VuFind/ILS/Logic/LogicFactory.php     |    2 +-
 .../src/VuFind/ILS/Logic/TitleHolds.php       |    6 +-
 .../src/VuFind/ILS/PaginationHelper.php       |    8 +-
 module/VuFind/src/VuFind/ImageLoader.php      |    2 +-
 module/VuFind/src/VuFind/Log/Logger.php       |    6 +-
 .../src/VuFind/Log/LoggerAwareTrait.php       |    6 +-
 .../VuFind/src/VuFind/Log/LoggerFactory.php   |   22 +-
 module/VuFind/src/VuFind/Log/Writer/Db.php    |    6 +-
 module/VuFind/src/VuFind/Log/Writer/Mail.php  |    6 +-
 module/VuFind/src/VuFind/Log/Writer/Post.php  |   10 +-
 module/VuFind/src/VuFind/Log/Writer/Slack.php |    4 +-
 .../VuFind/src/VuFind/Log/Writer/Stream.php   |    6 +-
 module/VuFind/src/VuFind/Mailer/Factory.php   |   10 +-
 module/VuFind/src/VuFind/Mailer/Mailer.php    |   61 +-
 module/VuFind/src/VuFind/OAI/Server.php       |   14 +-
 module/VuFind/src/VuFind/OAI/Server/Auth.php  |    4 +-
 .../VuFind/src/VuFind/OAI/ServerFactory.php   |    2 +-
 module/VuFind/src/VuFind/QRCode/Loader.php    |    2 +-
 .../src/VuFind/QRCode/LoaderFactory.php       |    2 +-
 .../src/VuFind/Recommend/AbstractFacets.php   |    2 +-
 .../Recommend/AbstractResultsPassthrough.php  |    2 +-
 .../Recommend/AbstractSummonRecommend.php     |    2 +-
 .../AbstractSummonRecommendDeferred.php       |    2 +-
 .../src/VuFind/Recommend/AlphaBrowseLink.php  |    2 +-
 .../src/VuFind/Recommend/AuthorFacets.php     |    6 +-
 .../src/VuFind/Recommend/AuthorInfo.php       |   10 +-
 .../VuFind/Recommend/AuthorInfoFactory.php    |    2 +-
 .../VuFind/Recommend/AuthorityRecommend.php   |    4 +-
 .../Recommend/CollectionSideFacetsFactory.php |    2 +-
 module/VuFind/src/VuFind/Recommend/DOI.php    |    2 +-
 .../VuFind/src/VuFind/Recommend/DPLATerms.php |    6 +-
 .../src/VuFind/Recommend/DPLATermsFactory.php |    2 +-
 .../src/VuFind/Recommend/Deprecated.php       |    2 +-
 .../src/VuFind/Recommend/EuropeanaResults.php |    6 +-
 .../Recommend/EuropeanaResultsDeferred.php    |    2 +-
 .../Recommend/EuropeanaResultsFactory.php     |    2 +-
 .../src/VuFind/Recommend/ExpandFacets.php     |    2 +-
 .../VuFind/Recommend/ExpandFacetsFactory.php  |    2 +-
 .../src/VuFind/Recommend/ExternalSearch.php   |    2 +-
 .../Recommend/FavoriteFacetsFactory.php       |    3 +-
 .../Recommend/InjectConfigManagerFactory.php  |    2 +-
 .../Recommend/InjectResultsManagerFactory.php |    2 +-
 .../Recommend/InjectSearchRunnerFactory.php   |    2 +-
 .../src/VuFind/Recommend/Libraryh3lp.php      |    2 +-
 .../src/VuFind/Recommend/MapSelection.php     |    2 +-
 .../VuFind/Recommend/MapSelectionFactory.php  |    2 +-
 .../VuFind/Recommend/OpenLibrarySubjects.php  |    6 +-
 .../Recommend/OpenLibrarySubjectsDeferred.php |    2 +-
 .../src/VuFind/Recommend/PluginManager.php    |    2 +-
 .../src/VuFind/Recommend/PubDateVisAjax.php   |    2 +-
 .../src/VuFind/Recommend/RandomRecommend.php  |    2 +-
 .../Recommend/RandomRecommendFactory.php      |    3 +-
 .../VuFind/Recommend/RecommendInterface.php   |    2 +-
 .../src/VuFind/Recommend/RecommendLinks.php   |    2 +-
 .../src/VuFind/Recommend/RemoveFilters.php    |    2 +-
 .../src/VuFind/Recommend/SearchObject.php     |    2 +-
 .../src/VuFind/Recommend/SideFacets.php       |    2 +-
 .../VuFind/Recommend/SideFacetsDeferred.php   |    4 +-
 .../VuFind/Recommend/SideFacetsFactory.php    |    2 +-
 .../Recommend/SummonResultsDeferred.php       |    2 +-
 .../src/VuFind/Recommend/SummonTopics.php     |    2 +-
 .../src/VuFind/Recommend/SwitchQuery.php      |    2 +-
 .../VuFind/Recommend/SwitchQueryFactory.php   |    2 +-
 .../VuFind/src/VuFind/Recommend/SwitchTab.php |    2 +-
 .../src/VuFind/Recommend/SwitchType.php       |    2 +-
 .../VuFind/src/VuFind/Recommend/TopFacets.php |    2 +-
 .../src/VuFind/Recommend/VisualFacets.php     |    2 +-
 .../VuFind/Recommend/WorldCatIdentities.php   |    2 +-
 .../Recommend/WorldCatIdentitiesFactory.php   |    2 +-
 module/VuFind/src/VuFind/Record/Cache.php     |    4 +-
 .../VuFind/src/VuFind/Record/CacheFactory.php |    2 +-
 .../VuFind/Record/FallbackLoader/Summon.php   |    2 +-
 .../Record/FallbackLoader/SummonFactory.php   |    2 +-
 module/VuFind/src/VuFind/Record/Loader.php    |    2 +-
 .../src/VuFind/Record/LoaderFactory.php       |    2 +-
 module/VuFind/src/VuFind/Record/Router.php    |    6 +-
 .../src/VuFind/RecordDriver/AbstractBase.php  |   10 +-
 .../RecordDriver/AbstractBaseFactory.php      |    2 +-
 .../src/VuFind/RecordDriver/DefaultRecord.php |   11 +-
 .../RecordDriver/IlsAwareDelegatorFactory.php |    2 +-
 .../src/VuFind/RecordDriver/Missing.php       |    6 +-
 .../src/VuFind/RecordDriver/PluginManager.php |    4 +-
 .../src/VuFind/RecordDriver/SolrDefault.php   |   11 +-
 .../VuFind/RecordDriver/SolrMarcRemote.php    |   13 +-
 .../src/VuFind/RecordDriver/SolrOverdrive.php |    4 +-
 .../src/VuFind/RecordDriver/SolrWeb.php       |   11 +-
 .../src/VuFind/RecordTab/AbstractBase.php     |    8 +-
 .../RecordTab/AbstractContentFactory.php      |    6 +-
 .../RecordTab/CollectionHierarchyTree.php     |    6 +-
 .../CollectionHierarchyTreeFactory.php        |    2 +-
 .../RecordTab/CollectionListFactory.php       |    3 +-
 .../RecordTab/ComponentPartsFactory.php       |    3 +-
 .../src/VuFind/RecordTab/HierarchyTree.php    |    8 +-
 .../VuFind/RecordTab/HierarchyTreeFactory.php |    3 +-
 .../src/VuFind/RecordTab/HoldingsILS.php      |    6 +-
 .../VuFind/RecordTab/HoldingsILSFactory.php   |    2 +-
 .../RecordTab/HoldingsWorldCatFactory.php     |    2 +-
 .../src/VuFind/RecordTab/MapFactory.php       |    2 +-
 .../src/VuFind/RecordTab/PluginManager.php    |    2 +-
 .../VuFind/src/VuFind/RecordTab/Preview.php   |    2 +-
 .../src/VuFind/RecordTab/PreviewFactory.php   |    2 +-
 .../RecordTab/SimilarItemsCarouselFactory.php |    2 +-
 .../src/VuFind/RecordTab/TabManager.php       |   12 +-
 .../VuFind/RecordTab/TabManagerFactory.php    |    2 +-
 .../VuFind/RecordTab/UserCommentsFactory.php  |    2 +-
 .../src/VuFind/Related/PluginManager.php      |    2 +-
 .../src/VuFind/Related/SimilarFactory.php     |    2 +-
 .../Resolver/Driver/AbstractBaseFactory.php   |    2 +-
 .../src/VuFind/Resolver/Driver/Alma.php       |    8 +-
 .../VuFind/src/VuFind/Resolver/Driver/Ezb.php |    8 +-
 .../VuFind/Resolver/Driver/PluginManager.php  |    2 +-
 .../src/VuFind/Resolver/Driver/Redi.php       |   10 +-
 .../VuFind/src/VuFind/Resolver/Driver/Sfx.php |    8 +-
 .../VuFind/Resolver/Driver/Threesixtylink.php |    8 +-
 .../Role/DynamicRoleProviderFactory.php       |    4 +-
 .../Role/PermissionDeniedManagerFactory.php   |    2 +-
 .../VuFind/Role/PermissionManagerFactory.php  |    2 +-
 .../InjectAuthorizationServiceFactory.php     |    2 +-
 .../InjectRequestFactory.php                  |    3 +-
 .../Role/PermissionProvider/IpRange.php       |    4 +-
 .../PermissionProvider/IpRangeFactory.php     |    2 +-
 .../Role/PermissionProvider/IpRegEx.php       |    2 +-
 .../Role/PermissionProvider/PluginManager.php |    2 +-
 .../Role/PermissionProvider/ServerParam.php   |    4 +-
 .../Role/PermissionProvider/Shibboleth.php    |    6 +-
 .../PermissionProvider/ShibbolethFactory.php  |    2 +-
 .../VuFind/Role/PermissionProvider/User.php   |    2 +-
 .../src/VuFind/Route/RouteGenerator.php       |    8 +-
 module/VuFind/src/VuFind/SMS/AbstractBase.php |    8 +-
 module/VuFind/src/VuFind/SMS/Clickatell.php   |   12 +-
 module/VuFind/src/VuFind/SMS/Factory.php      |    2 +-
 module/VuFind/src/VuFind/SMS/Mailer.php       |    8 +-
 .../src/VuFind/Search/BackendManager.php      |   10 +-
 .../VuFind/Search/BackendManagerFactory.php   |    2 +-
 .../VuFind/Search/Base/FacetCacheFactory.php  |    5 +-
 .../VuFind/src/VuFind/Search/Base/Options.php |    2 +-
 .../VuFind/src/VuFind/Search/Base/Params.php  |   44 +-
 .../VuFind/src/VuFind/Search/Base/Results.php |    4 +-
 .../VuFind/src/VuFind/Search/EDS/Options.php  |   18 +-
 .../src/VuFind/Search/EDS/OptionsFactory.php  |    4 +-
 .../VuFind/src/VuFind/Search/EDS/Params.php   |    2 +-
 .../src/VuFind/Search/EDS/QueryAdapter.php    |    2 +-
 .../Factory/AbstractSolrBackendFactory.php    |   12 +-
 .../Search/Factory/BrowZineBackendFactory.php |    8 +-
 .../Search/Factory/EITBackendFactory.php      |    8 +-
 .../Search/Factory/EdsBackendFactory.php      |   12 +-
 .../Factory/LibGuidesBackendFactory.php       |    8 +-
 .../Search/Factory/Pazpar2BackendFactory.php  |   10 +-
 .../Search/Factory/PrimoBackendFactory.php    |   10 +-
 .../Search/Factory/SummonBackendFactory.php   |   12 +-
 .../Search/Factory/WorldCatBackendFactory.php |   10 +-
 .../src/VuFind/Search/Favorites/Params.php    |    2 +-
 module/VuFind/src/VuFind/Search/History.php   |    6 +-
 .../src/VuFind/Search/HistoryFactory.php      |    5 +-
 module/VuFind/src/VuFind/Search/Memory.php    |    2 +-
 .../src/VuFind/Search/MemoryFactory.php       |    6 +-
 .../src/VuFind/Search/MixedList/Params.php    |    2 +-
 .../VuFind/Search/Options/OptionsFactory.php  |    2 +-
 .../Search/Options/ViewOptionsTrait.php       |    4 +-
 .../VuFind/Search/Params/FacetLimitTrait.php  |    2 +-
 .../VuFind/Search/Params/ParamsFactory.php    |    2 +-
 .../Search/Primo/InjectOnCampusListener.php   |    4 +-
 .../Search/Primo/PrimoPermissionHandler.php   |    4 +-
 .../VuFind/src/VuFind/Search/QueryAdapter.php |    2 +-
 .../src/VuFind/Search/RecommendListener.php   |    4 +-
 .../VuFind/Search/Results/ResultsFactory.php  |    2 +-
 .../VuFind/src/VuFind/Search/SearchRunner.php |    6 +-
 .../src/VuFind/Search/SearchRunnerFactory.php |    4 +-
 .../src/VuFind/Search/SearchTabsHelper.php    |    4 +-
 .../VuFind/Search/SearchTabsHelperFactory.php |    2 +-
 .../Search/Solr/AbstractErrorListener.php     |    6 +-
 .../Search/Solr/DeduplicationListener.php     |    8 +-
 .../Solr/FilterFieldConversionListener.php    |    4 +-
 .../Search/Solr/HideFacetValueListener.php    |    4 +-
 .../Search/Solr/HierarchicalFacetListener.php |    8 +-
 .../Solr/InjectConditionalFilterListener.php  |    4 +-
 .../Solr/InjectHighlightingListener.php       |    6 +-
 .../Search/Solr/InjectSpellingListener.php    |    6 +-
 .../VuFind/Search/Solr/MultiIndexListener.php |    6 +-
 .../VuFind/src/VuFind/Search/Solr/Params.php  |    4 +-
 .../VuFind/Search/Solr/SpellingProcessor.php  |    2 +-
 .../VuFind/Search/Solr/V3/ErrorListener.php   |    4 +-
 .../VuFind/Search/Solr/V4/ErrorListener.php   |    6 +-
 .../src/VuFind/Search/SolrAuthor/Params.php   |    2 +-
 .../VuFind/Search/SolrAuthorFacets/Params.php |    6 +-
 .../VuFind/src/VuFind/Search/Tags/Params.php  |    2 +-
 .../src/VuFind/Search/UrlQueryHelper.php      |    2 +-
 .../VuFind/Service/DateConverterFactory.php   |    2 +-
 .../src/VuFind/Service/HttpServiceFactory.php |    2 +-
 .../src/VuFind/Service/MarkdownFactory.php    |    6 +-
 .../src/VuFind/Service/ProxyConfigFactory.php |    2 +-
 .../VuFind/src/VuFind/Service/ReCaptcha.php   |    4 +-
 .../src/VuFind/Service/ReCaptchaFactory.php   |    4 +-
 .../VuFind/Service/SearchServiceFactory.php   |    4 +-
 .../Service/ServiceWithConfigIniFactory.php   |    2 +-
 .../ServiceManager/AbstractPluginFactory.php  |    2 +-
 .../ServiceManager/AbstractPluginManager.php  |    4 +-
 .../AbstractPluginManagerFactory.php          |    2 +-
 .../ServiceManager/ServiceInitializer.php     |    6 +-
 .../src/VuFind/Session/AbstractBase.php       |    2 +-
 .../VuFind/Session/AbstractBaseFactory.php    |    2 +-
 module/VuFind/src/VuFind/Session/File.php     |    2 +-
 .../src/VuFind/Session/HandlerInterface.php   |    2 +-
 .../src/VuFind/Session/ManagerFactory.php     |    8 +-
 module/VuFind/src/VuFind/Session/Memcache.php |    2 +-
 .../src/VuFind/Session/PluginManager.php      |    2 +-
 module/VuFind/src/VuFind/Session/Redis.php    |    2 +-
 .../src/VuFind/Session/RedisFactory.php       |    6 +-
 .../src/VuFind/Session/SecureDelegator.php    |    4 +-
 .../VuFind/Session/SecureDelegatorFactory.php |    2 +-
 module/VuFind/src/VuFind/Session/Settings.php |    2 +-
 .../VuFind/src/VuFind/Sitemap/Generator.php   |    4 +-
 .../src/VuFind/Sitemap/GeneratorFactory.php   |    2 +-
 .../VuFind/src/VuFind/Solr/WriterFactory.php  |    2 +-
 module/VuFind/src/VuFind/TagsFactory.php      |    2 +-
 .../src/VuFind/UrlShortener/PluginManager.php |    2 +-
 module/VuFind/src/VuFind/Validator/Csrf.php   |    6 +-
 .../src/VuFind/Validator/CsrfFactory.php      |    6 +-
 .../View/Helper/AbstractLayoutClass.php       |    2 +-
 .../src/VuFind/View/Helper/AbstractSearch.php |   14 +-
 .../Helper/Bootstrap3/LayoutClassFactory.php  |    2 +-
 .../View/Helper/Bootstrap3/Recaptcha.php      |    4 +-
 .../VuFind/View/Helper/Bootstrap3/Search.php  |    4 +-
 .../AbstractClassBasedTemplateRenderer.php    |    4 +-
 .../View/Helper/Root/AccountCapabilities.php  |    2 +-
 .../Root/AccountCapabilitiesFactory.php       |    2 +-
 .../VuFind/View/Helper/Root/AddEllipsis.php   |    2 +-
 .../src/VuFind/View/Helper/Root/AddThis.php   |    2 +-
 .../View/Helper/Root/AddThisFactory.php       |    2 +-
 .../VuFind/View/Helper/Root/AlphaBrowse.php   |    4 +-
 .../View/Helper/Root/AlphaBrowseFactory.php   |    2 +-
 .../VuFind/View/Helper/Root/AuthFactory.php   |    2 +-
 .../View/Helper/Root/AuthorNotesFactory.php   |    2 +-
 .../src/VuFind/View/Helper/Root/Browse.php    |    2 +-
 .../src/VuFind/View/Helper/Root/Cart.php      |    2 +-
 .../VuFind/View/Helper/Root/CartFactory.php   |    2 +-
 .../src/VuFind/View/Helper/Root/Citation.php  |    2 +-
 .../View/Helper/Root/CitationFactory.php      |    2 +-
 .../src/VuFind/View/Helper/Root/Config.php    |    4 +-
 .../VuFind/View/Helper/Root/ConfigFactory.php |    2 +-
 .../VuFind/View/Helper/Root/ContentLoader.php |    2 +-
 .../View/Helper/Root/ContentLoaderFactory.php |    2 +-
 .../src/VuFind/View/Helper/Root/Context.php   |    4 +-
 .../VuFind/View/Helper/Root/CurrentPath.php   |    2 +-
 .../src/VuFind/View/Helper/Root/DateTime.php  |    2 +-
 .../View/Helper/Root/DateTimeFactory.php      |    2 +-
 .../Helper/Root/DisplayLanguageOption.php     |    6 +-
 .../Root/DisplayLanguageOptionFactory.php     |    4 +-
 .../src/VuFind/View/Helper/Root/Doi.php       |    8 +-
 .../VuFind/View/Helper/Root/DoiFactory.php    |    2 +-
 .../src/VuFind/View/Helper/Root/Export.php    |    2 +-
 .../VuFind/View/Helper/Root/ExportFactory.php |    2 +-
 .../src/VuFind/View/Helper/Root/Feedback.php  |    2 +-
 .../View/Helper/Root/FeedbackFactory.php      |    2 +-
 .../VuFind/View/Helper/Root/Flashmessages.php |    4 +-
 .../View/Helper/Root/FlashmessagesFactory.php |    4 +-
 .../src/VuFind/View/Helper/Root/GeoCoords.php |    2 +-
 .../View/Helper/Root/GeoCoordsFactory.php     |    2 +-
 .../View/Helper/Root/GoogleAnalytics.php      |    4 +-
 .../Helper/Root/GoogleAnalyticsFactory.php    |    2 +-
 .../src/VuFind/View/Helper/Root/HelpText.php  |    2 +-
 .../View/Helper/Root/HelpTextFactory.php      |    6 +-
 .../src/VuFind/View/Helper/Root/Highlight.php |    2 +-
 .../VuFind/View/Helper/Root/HistoryLabel.php  |    2 +-
 .../View/Helper/Root/HistoryLabelFactory.php  |    2 +-
 .../src/VuFind/View/Helper/Root/Ils.php       |    2 +-
 .../VuFind/View/Helper/Root/IlsFactory.php    |    2 +-
 .../View/Helper/Root/JsTranslations.php       |    2 +-
 .../Helper/Root/JsTranslationsFactory.php     |    2 +-
 .../src/VuFind/View/Helper/Root/KeepAlive.php |    2 +-
 .../View/Helper/Root/KeepAliveFactory.php     |    2 +-
 .../src/VuFind/View/Helper/Root/Linkify.php   |    2 +-
 .../View/Helper/Root/LocalizedNumber.php      |    2 +-
 .../src/VuFind/View/Helper/Root/Markdown.php  |    2 +-
 .../View/Helper/Root/MarkdownFactory.php      |    5 +-
 .../src/VuFind/View/Helper/Root/Metadata.php  |   16 +-
 .../View/Helper/Root/MetadataFactory.php      |    2 +-
 .../src/VuFind/View/Helper/Root/OpenUrl.php   |   12 +-
 .../View/Helper/Root/OpenUrlFactory.php       |    2 +-
 .../src/VuFind/View/Helper/Root/Overdrive.php |    2 +-
 .../View/Helper/Root/OverdriveFactory.php     |    2 +-
 .../VuFind/View/Helper/Root/Permission.php    |    2 +-
 .../View/Helper/Root/PermissionFactory.php    |    2 +-
 .../src/VuFind/View/Helper/Root/Piwik.php     |   18 +-
 .../VuFind/View/Helper/Root/PiwikFactory.php  |    2 +-
 .../src/VuFind/View/Helper/Root/Printms.php   |    2 +-
 .../src/VuFind/View/Helper/Root/ProxyUrl.php  |    6 +-
 .../View/Helper/Root/ProxyUrlFactory.php      |    2 +-
 .../src/VuFind/View/Helper/Root/Recaptcha.php |    6 +-
 .../View/Helper/Root/RecaptchaFactory.php     |    2 +-
 .../src/VuFind/View/Helper/Root/Record.php    |    4 +-
 .../View/Helper/Root/RecordDataFormatter.php  |    2 +-
 .../Root/RecordDataFormatterFactory.php       |    2 +-
 .../VuFind/View/Helper/Root/RecordFactory.php |    2 +-
 .../VuFind/View/Helper/Root/RecordLink.php    |    2 +-
 .../View/Helper/Root/RecordLinkFactory.php    |    2 +-
 .../src/VuFind/View/Helper/Root/Relais.php    |    4 +-
 .../VuFind/View/Helper/Root/RelaisFactory.php |    2 +-
 .../View/Helper/Root/RelatedFactory.php       |    2 +-
 .../VuFind/View/Helper/Root/RenderArray.php   |    2 +-
 .../VuFind/View/Helper/Root/ResultFeed.php    |   12 +-
 .../View/Helper/Root/ResultFeedFactory.php    |    2 +-
 .../View/Helper/Root/SafeMoneyFormat.php      |    2 +-
 .../Helper/Root/SafeMoneyFormatFactory.php    |    2 +-
 .../src/VuFind/View/Helper/Root/SearchBox.php |    2 +-
 .../View/Helper/Root/SearchBoxFactory.php     |    2 +-
 .../VuFind/View/Helper/Root/SearchMemory.php  |    4 +-
 .../View/Helper/Root/SearchMemoryFactory.php  |    2 +-
 .../VuFind/View/Helper/Root/SearchOptions.php |    2 +-
 .../View/Helper/Root/SearchOptionsFactory.php |    2 +-
 .../VuFind/View/Helper/Root/SearchParams.php  |    2 +-
 .../View/Helper/Root/SearchParamsFactory.php  |    2 +-
 .../VuFind/View/Helper/Root/SearchTabs.php    |    6 +-
 .../View/Helper/Root/SearchTabsFactory.php    |    2 +-
 .../View/Helper/Root/ServerUrlFactory.php     |    4 +-
 .../VuFind/View/Helper/Root/ShortenUrl.php    |    2 +-
 .../View/Helper/Root/ShortenUrlFactory.php    |    2 +-
 .../VuFind/View/Helper/Root/SortFacetList.php |    2 +-
 .../src/VuFind/View/Helper/Root/Summon.php    |    2 +-
 .../VuFind/View/Helper/Root/SyndeticsPlus.php |    6 +-
 .../View/Helper/Root/SyndeticsPlusFactory.php |    2 +-
 .../VuFind/View/Helper/Root/SystemEmail.php   |    2 +-
 .../View/Helper/Root/SystemEmailFactory.php   |    2 +-
 .../src/VuFind/View/Helper/Root/TransEsc.php  |    2 +-
 .../View/Helper/Root/TransEscWithPrefix.php   |    2 +-
 .../src/VuFind/View/Helper/Root/Translate.php |    2 +-
 .../src/VuFind/View/Helper/Root/Truncate.php  |    2 +-
 .../src/VuFind/View/Helper/Root/Url.php       |   12 +-
 .../VuFind/View/Helper/Root/UrlFactory.php    |   10 +-
 .../src/VuFind/View/Helper/Root/UserList.php  |   13 +-
 .../View/Helper/Root/UserListFactory.php      |    6 +-
 .../src/VuFind/View/Helper/Root/UserTags.php  |    2 +-
 .../View/Helper/Root/UserTagsFactory.php      |    2 +-
 .../VuFind/src/VuFind/XSLT/Import/VuFind.php  |    2 +-
 module/VuFind/src/VuFind/XSLT/Importer.php    |    4 +-
 .../src/VuFindTest/Unit/AjaxHandlerTest.php   |    8 +-
 .../VuFind/src/VuFindTest/Unit/DbTestCase.php |   10 +-
 .../Unit/RecommendDeferredTestCase.php        |    4 +-
 .../VuFind/src/VuFindTest/Unit/TestCase.php   |   12 +-
 .../VuFindTest/Unit/ViewHelperTestCase.php    |    6 +-
 .../tests/fixtures/content/amazon-cover       |  Bin 1521 -> 1530 bytes
 .../tests/fixtures/paia/response/fees.json    |    2 +-
 .../tests/fixtures/searches/advanced/request  |    2 +-
 .../src/VuFindTest/Auth/DatabaseTest.php      |   10 +-
 .../src/VuFindTest/Auth/ILSTest.php           |   16 +-
 .../src/VuFindTest/Auth/ShibbolethTest.php    |   10 +-
 .../src/VuFindTest/Mink/RecordTest.php        |    2 +-
 .../View/Helper/Root/ResultFeedTest.php       |   12 +-
 .../AjaxHandler/CommentRecordTest.php         |    2 +-
 .../VuFindTest/AjaxHandler/DoiLookupTest.php  |    2 +-
 .../VuFindTest/AjaxHandler/KeepAliveTest.php  |    4 +-
 .../VuFindTest/AjaxHandler/RecommendTest.php  |    2 +-
 .../src/VuFindTest/Auth/ChoiceAuthTest.php    |   14 +-
 .../src/VuFindTest/Auth/DatabaseUnitTest.php  |    8 +-
 .../src/VuFindTest/Auth/LDAPTest.php          |    8 +-
 .../src/VuFindTest/Auth/ManagerTest.php       |   18 +-
 .../src/VuFindTest/Auth/MultiAuthTest.php     |   12 +-
 .../src/VuFindTest/Auth/PluginManagerTest.php |    2 +-
 .../src/VuFindTest/Auth/SIP2Test.php          |    8 +-
 .../Autocomplete/PluginManagerTest.php        |    2 +-
 .../VuFindTest/Config/PluginFactoryTest.php   |    4 +-
 .../Config/Reader/CacheDecoratorTest.php      |    8 +-
 .../VuFindTest/Connection/WikipediaTest.php   |    6 +-
 .../Connection/WorldCatUtilsTest.php          |    6 +-
 .../Content/AuthorNotes/PluginManagerTest.php |    2 +-
 .../Content/Covers/ContentCafeTest.php        |    2 +-
 .../Content/Covers/PluginManagerTest.php      |    2 +-
 .../Content/Excerpts/PluginManagerTest.php    |    2 +-
 .../VuFindTest/Content/PluginManagerTest.php  |    2 +-
 .../Content/Reviews/PluginManagerTest.php     |    2 +-
 .../Controller/Plugin/FollowupTest.php        |    4 +-
 .../Controller/Plugin/NewItemsTest.php        |    6 +-
 .../Controller/Plugin/ResultScrollerTest.php  |    4 +-
 .../src/VuFindTest/Cover/LoaderTest.php       |    2 +-
 .../VuFindTest/Db/Table/PluginManagerTest.php |    2 +-
 .../VuFindTest/DoiLinker/UnpaywallTest.php    |    8 +-
 .../unit-tests/src/VuFindTest/ExportTest.php  |    2 +-
 .../src/VuFindTest/Form/FormTest.php          |   12 +-
 .../Hierarchy/Driver/PluginManagerTest.php    |    2 +-
 .../TreeDataSource/PluginManagerTest.php      |    2 +-
 .../TreeRenderer/PluginManagerTest.php        |    2 +-
 .../Translator/Loader/ExtendedIniTest.php     |    2 +-
 .../src/VuFindTest/ILS/Driver/DAIATest.php    |    6 +-
 .../src/VuFindTest/ILS/Driver/DemoTest.php    |    2 +-
 .../src/VuFindTest/ILS/Driver/FolioTest.php   |   10 +-
 .../ILS/Driver/MultiBackendTest.php           |   16 +-
 .../src/VuFindTest/ILS/Driver/PAIATest.php    |   14 +-
 .../ILS/Driver/PluginManagerTest.php          |    2 +-
 .../VuFindTest/ILS/Driver/SierraRestTest.php  |    2 +-
 .../src/VuFindTest/Log/LoggerTest.php         |    2 +-
 .../src/VuFindTest/Mailer/MailerTest.php      |   42 +-
 .../src/VuFindTest/OAI/ServerTest.php         |    2 +-
 .../src/VuFindTest/QRCode/LoaderTest.php      |    2 +-
 .../Recommend/CollectionSideFacetsTest.php    |    6 +-
 .../Recommend/EuropeanaResultsTest.php        |    6 +-
 .../VuFindTest/Recommend/ExpandFacetsTest.php |    6 +-
 .../Recommend/ExternalSearchTest.php          |    2 +-
 .../VuFindTest/Recommend/FacetCloudTest.php   |    6 +-
 .../Recommend/FavoriteFacetsTest.php          |    6 +-
 .../Recommend/PluginManagerTest.php           |    2 +-
 .../Recommend/RandomRecommendTest.php         |    8 +-
 .../Recommend/RecommendLinksTest.php          |    4 +-
 .../VuFindTest/Recommend/SideFacetsTest.php   |    6 +-
 .../VuFindTest/Recommend/SwitchQueryTest.php  |    2 +-
 .../src/VuFindTest/Record/CacheTest.php       |    4 +-
 .../src/VuFindTest/Record/RouterTest.php      |    2 +-
 .../RecordDriver/DefaultRecordTest.php        |    2 +-
 .../RecordDriver/PluginManagerTest.php        |    2 +-
 .../RecordDriver/SolrDefaultTest.php          |    2 +-
 .../VuFindTest/RecordDriver/SolrMarcTest.php  |    4 +-
 .../RecordTab/PluginManagerTest.php           |    2 +-
 .../VuFindTest/RecordTab/TabManagerTest.php   |    2 +-
 .../VuFindTest/Related/PluginManagerTest.php  |    2 +-
 .../VuFindTest/Resolver/Driver/AlmaTest.php   |    8 +-
 .../VuFindTest/Resolver/Driver/EzbTest.php    |    8 +-
 .../Resolver/Driver/PluginManagerTest.php     |    2 +-
 .../VuFindTest/Resolver/Driver/RediTest.php   |    8 +-
 .../PermissionProvider/PluginManagerTest.php  |    2 +-
 .../PermissionProvider/ServerParamTest.php    |    4 +-
 .../PermissionProvider/ShibbolethTest.php     |    6 +-
 .../src/VuFindTest/SMS/ClickatellTest.php     |   14 +-
 .../VuFindTest/Search/BackendManagerTest.php  |   10 +-
 .../src/VuFindTest/Search/HistoryTest.php     |    8 +-
 .../src/VuFindTest/Search/MemoryTest.php      |    2 +-
 .../Search/Options/PluginManagerTest.php      |    2 +-
 .../Search/Params/PluginManagerTest.php       |    2 +-
 .../Search/Primo/OnCampusListenerTest.php     |    8 +-
 .../Primo/PrimoPermissionHandlerTest.php      |    4 +-
 .../VuFindTest/Search/QueryAdapterTest.php    |    2 +-
 .../Search/Results/PluginManagerTest.php      |    2 +-
 .../Search/SearchTabsHelperTest.php           |    2 +-
 .../Solr/ConditionalFilterListenerTest.php    |    6 +-
 .../FilterFieldConversionListenerTest.php     |    6 +-
 .../Solr/HideFacetValueListenerTest.php       |    4 +-
 .../Search/Solr/MultiIndexListenerTest.php    |    6 +-
 .../Search/Solr/SpellingProcessorTest.php     |    2 +-
 .../Search/Solr/V3/ErrorListenerTest.php      |   10 +-
 .../Search/Solr/V4/ErrorListenerTest.php      |   10 +-
 .../src/VuFindTest/Session/DatabaseTest.php   |    4 +-
 .../src/VuFindTest/Session/FileTest.php       |    4 +-
 .../src/VuFindTest/Session/MemcacheTest.php   |    6 +-
 .../VuFindTest/Session/PluginManagerTest.php  |    2 +-
 .../src/VuFindTest/Session/RedisTest.php      |    6 +-
 .../src/VuFindTest/Solr/WriterTest.php        |    2 +-
 .../VuFindTest/UrlShortener/DatabaseTest.php  |    8 +-
 .../src/VuFindTest/Validator/CsrfTest.php     |    2 +-
 .../View/Helper/Root/LinkifyTest.php          |    4 +-
 .../View/Helper/Root/MetadataTest.php         |    4 +-
 .../View/Helper/Root/OpenUrlTest.php          |    2 +-
 .../View/Helper/Root/PermissionTest.php       |    6 +-
 .../Helper/Root/RecordDataFormatterTest.php   |    4 +-
 .../View/Helper/Root/RecordLinkTest.php       |   14 +-
 .../View/Helper/Root/RecordTest.php           |   20 +-
 .../View/Helper/Root/SafeMoneyFormatTest.php  |    4 +-
 .../View/Helper/Root/TranslateTest.php        |    8 +-
 .../src/VuFindTest/XSLT/Import/VuFindTest.php |    2 +-
 module/VuFindAdmin/Module.php                 |    2 +-
 module/VuFindAdmin/config/module.config.php   |   14 +-
 .../VuFindAdmin/Controller/AbstractAdmin.php  |    8 +-
 .../Controller/AdminController.php            |    4 +-
 .../Controller/ConfigController.php           |    2 +-
 .../Controller/MaintenanceController.php      |    2 +-
 .../Controller/OverdriveController.php        |    2 +-
 .../Controller/SocialstatsController.php      |    2 +-
 .../VuFindAdmin/Controller/TagsController.php |   16 +-
 module/VuFindApi/Module.php                   |    2 +-
 module/VuFindApi/config/module.config.php     |    8 +-
 .../VuFindApi/Controller/ApiController.php    |    5 +-
 .../Controller/ApiControllerFactory.php       |    2 +-
 .../src/VuFindApi/Controller/ApiTrait.php     |    8 +-
 .../Controller/SearchApiController.php        |   10 +-
 .../Controller/SearchApiControllerFactory.php |    2 +-
 .../VuFindApi/Formatter/RecordFormatter.php   |    2 +-
 .../Formatter/RecordFormatterFactory.php      |    2 +-
 .../Formatter/FacetFormatterTest.php          |    4 +-
 .../Formatter/RecordFormatterTest.php         |    4 +-
 module/VuFindConsole/Module.php               |   10 +-
 .../VuFindConsole/Controller/AbstractBase.php |   12 +-
 .../Controller/CompileController.php          |    2 +-
 .../Controller/GenerateController.php         |   20 +-
 .../Controller/HarvestController.php          |    6 +-
 .../Controller/ImportController.php           |    6 +-
 .../Controller/LanguageController.php         |   10 +-
 .../Controller/RedirectController.php         |   10 +-
 .../Controller/ScheduledSearchController.php  |   12 +-
 .../Controller/UtilController.php             |   42 +-
 .../Generator/GeneratorTools.php              |   22 +-
 .../Generator/GeneratorToolsFactory.php       |    2 +-
 module/VuFindDevTools/Module.php              |    2 +-
 .../VuFindDevTools/config/module.config.php   |    6 +-
 .../Controller/DevtoolsController.php         |    4 +-
 .../src/VuFindDevTools/LanguageHelper.php     |    4 +-
 .../Controller/DevtoolsControllerTest.php     |    6 +-
 .../src/VuFindTest/LanguageHelperTest.php     |    2 +-
 module/VuFindLocalTemplate/Module.php         |    6 +-
 module/VuFindSearch/Module.php                |    2 +-
 .../VuFindSearch/Backend/AbstractBackend.php  |    4 +-
 .../Backend/BrowZine/Connector.php            |    4 +-
 .../src/VuFindSearch/Backend/EDS/Backend.php  |    6 +-
 .../VuFindSearch/Backend/EDS/Connector.php    |    6 +-
 .../VuFindSearch/Backend/EIT/Connector.php    |   23 +-
 .../Backend/Exception/HttpErrorException.php  |    2 +-
 .../Backend/LibGuides/Connector.php           |    4 +-
 .../Backend/Pazpar2/Connector.php             |   22 +-
 .../VuFindSearch/Backend/Primo/Connector.php  |    4 +-
 .../VuFindSearch/Backend/SRU/Connector.php    |   12 +-
 .../VuFindSearch/Backend/Solr/Connector.php   |   18 +-
 .../Backend/Solr/SimilarBuilder.php           |    6 +-
 .../VuFindSearch/Backend/Summon/Backend.php   |    2 +-
 .../Backend/WorldCat/Connector.php            |    8 +-
 .../VuFindSearch/src/VuFindSearch/Service.php |    6 +-
 .../Backend/BrowZine/BackendTest.php          |    6 +-
 .../VuFindTest/Backend/EDS/BackendTest.php    |   14 +-
 .../VuFindTest/Backend/EIT/BackendTest.php    |    2 +-
 .../Backend/LibGuides/BackendTest.php         |    6 +-
 .../Backend/Pazpar2/BackendTest.php           |    4 +-
 .../VuFindTest/Backend/Primo/BackendTest.php  |    2 +-
 .../Backend/Primo/ConnectorTest.php           |    6 +-
 .../VuFindTest/Backend/Solr/BackendTest.php   |    7 +-
 .../VuFindTest/Backend/Solr/ConnectorTest.php |    6 +-
 .../Backend/Solr/SimilarBuilderTest.php       |    6 +-
 .../VuFindTest/Backend/Summon/BackendTest.php |    2 +-
 .../Backend/WorldCat/BackendTest.php          |    2 +-
 .../Backend/WorldCat/ConnectorTest.php        |   20 +-
 .../src/VuFindTest/SearchServiceTest.php      |    6 +-
 module/VuFindTheme/Module.php                 |   15 +-
 .../src/VuFindTheme/Initializer.php           |   22 +-
 .../VuFindTheme/InjectTemplateListener.php    |    2 +-
 .../src/VuFindTheme/LessCompiler.php          |    2 +-
 .../src/VuFindTheme/MixinGenerator.php        |    2 +-
 .../src/VuFindTheme/ThemeGenerator.php        |    4 +-
 .../src/VuFindTheme/ThemeInfoFactory.php      |    2 +-
 .../VuFindTheme/ThemeInfoInjectorFactory.php  |    2 +-
 .../src/VuFindTheme/View/Helper/HeadLink.php  |    4 +-
 .../VuFindTheme/View/Helper/HeadScript.php    |    4 +-
 .../View/Helper/HeadThemeResources.php        |    2 +-
 .../View/Helper/HeadThemeResourcesFactory.php |    2 +-
 .../src/VuFindTheme/View/Helper/ImageLink.php |    2 +-
 .../View/Helper/ImageLinkFactory.php          |    2 +-
 .../VuFindTheme/View/Helper/InlineScript.php  |    7 -
 .../View/Helper/ParentTemplate.php            |    4 +-
 .../View/Helper/ParentTemplateFactory.php     |    4 +-
 .../View/Helper/PipelineInjectorFactory.php   |    4 +-
 .../VuFindTheme/View/Helper/TemplatePath.php  |    4 +-
 .../View/Helper/TemplatePathFactory.php       |    4 +-
 .../View/Helper/HeadThemeResourcesTest.php    |   10 +-
 .../View/Helper/ParentTemplateTest.php        |    2 +-
 .../View/Helper/TemplatePathTest.php          |    2 +-
 module/finc/src/finc/Exception/DDS.php        |   30 +-
 module/finc/src/finc/ILS/InitException.php    |   29 +-
 public/index.php                              |    6 +-
 .../templates/Auth/MultiILS/loginfields.phtml |    2 +-
 .../templates/ContentBlock/FacetList.phtml    |    2 +-
 .../ContentBlock/IlsStatusMonitor.phtml       |    2 +-
 themes/bootstrap3/templates/Helpers/doi.phtml |    2 +-
 .../templates/Helpers/openurl.phtml           |    2 +-
 .../bootstrap3/templates/Recommend/DOI.phtml  |    2 +-
 .../Recommend/EuropeanaResultsDeferred.phtml  |    2 +-
 .../templates/Recommend/MapSelection.phtml    |    4 +-
 .../OpenLibrarySubjectsDeferred.phtml         |    2 +-
 .../templates/Recommend/PubDateVisAjax.phtml  |    2 +-
 .../SideFacets/hierarchical-facet.phtml       |    4 +-
 .../Recommend/SideFacets/range-slider.phtml   |    2 +-
 .../Recommend/SummonBestBetsDeferred.phtml    |    2 +-
 .../Recommend/SummonDatabasesDeferred.phtml   |    2 +-
 .../Recommend/SummonResultsDeferred.phtml     |    2 +-
 .../templates/Recommend/TopFacets.phtml       |    2 +-
 .../templates/RecordTab/hierarchytree.phtml   |    6 +-
 .../bootstrap3/templates/RecordTab/map.phtml  |    2 +-
 .../RecordTab/similaritemscarousel.phtml      |    2 +-
 themes/bootstrap3/templates/cart/cart.phtml   |    2 +-
 themes/bootstrap3/templates/cart/email.phtml  |    2 +-
 themes/bootstrap3/templates/cart/export.phtml |    2 +-
 themes/bootstrap3/templates/cart/save.phtml   |    2 +-
 .../templates/collection/view.phtml           |    2 +-
 .../templates/combined/results-ajax.phtml     |    2 +-
 .../templates/devtools/language.phtml         |    2 +-
 .../bootstrap3/templates/layout/layout.phtml  |    2 +-
 .../templates/librarycards/editcard.phtml     |    2 +-
 .../templates/myresearch/cataloglogin.phtml   |    2 +-
 .../templates/myresearch/deleteaccount.phtml  |    2 +-
 themes/bootstrap3/templates/record/sms.phtml  |    4 +-
 themes/bootstrap3/templates/record/view.phtml |    2 +-
 .../bootstrap3/templates/relais/button.phtml  |    2 +-
 .../bootstrap3/templates/relais/request.phtml |    2 +-
 .../templates/search/advanced/eds.phtml       |    2 +-
 .../templates/search/advanced/ranges.phtml    |    2 +-
 .../templates/search/facet-list.phtml         |    2 +-
 .../bootstrap3/templates/search/history.phtml |    2 +-
 themes/bootstrap3/templates/search/home.phtml |    2 +-
 themes/bootstrap3/theme.config.php            |    4 +-
 themes/root/theme.config.php                  |   38 +-
 util/commit.php                               |    2 +-
 util/createHierarchyTrees.php                 |    2 +-
 util/cssBuilder.php                           |    2 +-
 util/deletes.php                              |    2 +-
 util/expire_searches.php                      |    2 +-
 util/expire_sessions.php                      |    2 +-
 util/index_reserves.php                       |    2 +-
 util/optimize.php                             |    2 +-
 util/sitemap.php                              |    2 +-
 util/suppressed.php                           |    2 +-
 952 files changed, 5459 insertions(+), 5239 deletions(-)

diff --git a/composer.json b/composer.json
index 2a24f0a047d..d5bf6cb00e0 100644
--- a/composer.json
+++ b/composer.json
@@ -19,8 +19,41 @@
         "cap60552/php-sip2": "1.0.0",
         "colinmollenhour/credis": "1.11.1",
         "endroid/qr-code": "3.5.9",
-        "ghislainf/zf2-whoops": "dev-master#2649cf7caf400409942ddc3f8fe15b89381fc74e",
         "jasig/phpcas": "1.3.8",
+        "laminas/laminas-cache": "2.9.0",
+        "laminas/laminas-captcha": "2.9.0",
+        "laminas/laminas-code": "3.4.1",
+        "laminas/laminas-config": "3.3.0",
+        "laminas/laminas-console": "2.8.0",
+        "laminas/laminas-crypt": "3.3.1",
+        "laminas/laminas-db": "2.11.2",
+        "laminas/laminas-dependency-plugin": "^1.0",
+        "laminas/laminas-dom": "2.7.2",
+        "laminas/laminas-escaper": "2.6.1",
+        "laminas/laminas-eventmanager": "3.2.1",
+        "laminas/laminas-feed": "2.12.0",
+        "laminas/laminas-filter": "2.9.2",
+        "laminas/laminas-form": "2.14.3",
+        "laminas/laminas-http": "2.11.2",
+        "laminas/laminas-i18n": "2.10.1",
+        "laminas/laminas-loader": "2.6.0",
+        "laminas/laminas-log": "2.10.0",
+        "laminas/laminas-mail": "2.10.0",
+        "laminas/laminas-modulemanager": "2.8.4",
+        "laminas/laminas-mvc": "3.1.1",
+        "laminas/laminas-mvc-console": "1.2.0",
+        "laminas/laminas-mvc-i18n": "1.1.1",
+        "laminas/laminas-mvc-plugin-flashmessenger": "1.2.0",
+        "laminas/laminas-paginator": "2.8.2",
+        "laminas/laminas-recaptcha": "3.2.0",
+        "laminas/laminas-serializer": "2.9.1",
+        "laminas/laminas-servicemanager": "3.4.0",
+        "laminas/laminas-session": "2.9.1",
+        "laminas/laminas-soap": "2.8.0",
+        "laminas/laminas-stdlib": "3.2.1",
+        "laminas/laminas-text": "2.7.1",
+        "laminas/laminas-validator": "2.13.0",
+        "laminas/laminas-view": "2.11.2",
         "matthiasmullie/minify": "1.3.62",
         "misd/linkify": "1.1.4",
         "ocramius/proxy-manager": "2.1.1",
@@ -30,50 +63,18 @@
         "pear/http_request2": "2.3.0",
         "pear/validate_ispn": "dev-master",
         "phing/phing": "2.16.2",
-        "serialssolutions/summon": "1.2.0",
+        "ppito/laminas-whoops": "2.0.0",
+        "serialssolutions/summon": "1.3.0",
         "symfony/yaml": "3.4.36",
         "swagger-api/swagger-ui": "2.2.10",
         "vufind-org/vufindcode": "1.2",
         "vufind-org/vufinddate": "1.0.0",
-        "vufind-org/vufindharvest": "2.4.1",
-        "vufind-org/vufindhttp": "2.3.0",
+        "vufind-org/vufindharvest": "3.0.0",
+        "vufind-org/vufindhttp": "3.0.0",
         "wikimedia/composer-merge-plugin": "1.4.1",
         "yajra/laravel-pdo-via-oci8": "2.1.1",
-        "zendframework/zend-cache": "2.9.0",
-        "zendframework/zend-captcha": "2.9.0",
-        "zendframework/zend-code": "3.4.1",
-        "zendframework/zend-config": "3.3.0",
-        "zendframework/zend-console": "2.8.0",
-        "zendframework/zend-crypt": "3.3.1",
-        "zendframework/zend-db": "2.10.1",
-        "zendframework/zend-dom": "2.7.2",
-        "zendframework/zend-escaper": "2.6.1",
-        "zendframework/zend-eventmanager": "3.2.1",
-        "zendframework/zend-feed": "2.12.0",
-        "zendframework/zend-filter": "2.9.2",
-        "zendframework/zend-form": "2.14.3",
-        "zendframework/zend-http": "2.11.2",
-        "zendframework/zend-i18n": "2.10.1",
-        "zendframework/zend-loader": "2.6.0",
-        "zendframework/zend-log": "2.10.0",
-        "zendframework/zend-mail": "2.10.0",
-        "zendframework/zend-modulemanager": "2.8.4",
-        "zendframework/zend-mvc": "3.1.1",
-        "zendframework/zend-mvc-console": "1.2.0",
-        "zendframework/zend-mvc-i18n": "1.1.1",
-        "zendframework/zend-mvc-plugin-flashmessenger": "1.2.0",
-        "zendframework/zend-paginator": "2.8.2",
-        "zendframework/zend-serializer": "2.9.1",
-        "zendframework/zend-servicemanager": "3.4.0",
-        "zendframework/zend-session": "2.9.1",
-        "zendframework/zend-soap": "2.8.0",
-        "zendframework/zend-stdlib": "3.2.1",
-        "zendframework/zend-text": "2.7.1",
-        "zendframework/zend-validator": "2.13.0",
-        "zendframework/zend-view": "2.11.2",
         "zendframework/zendrest": "2.0.2",
         "zendframework/zendservice-amazon": "2.3.1",
-        "zendframework/zendservice-recaptcha": "3.2.0",
         "zf-commons/zfc-rbac": "2.6.3",
         "league/commonmark": "^1.3"
     },
diff --git a/composer.lock b/composer.lock
index 504a4e8b0a8..6ad0ca2ff11 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1,10 +1,10 @@
 {
     "_readme": [
         "This file locks the dependencies of your project to a known state",
-        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "7b24bb187a5e9bd66dbc90fd10b0566e",
+    "content-hash": "e45a52c145f8a91b4da0ae4437c58d6f",
     "packages": [
         {
             "name": "ahand/mobileesp",
@@ -381,64 +381,6 @@
             ],
             "time": "2020-01-15T10:00:00+00:00"
         },
-        {
-            "name": "ghislainf/zf2-whoops",
-            "version": "dev-master",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/ghislainf/zf2-whoops.git",
-                "reference": "2649cf7caf400409942ddc3f8fe15b89381fc74e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/ghislainf/zf2-whoops/zipball/2649cf7caf400409942ddc3f8fe15b89381fc74e",
-                "reference": "2649cf7caf400409942ddc3f8fe15b89381fc74e",
-                "shasum": ""
-            },
-            "require": {
-                "filp/whoops": "2.*",
-                "php": ">=5.3.3",
-                "zendframework/zend-config": "*",
-                "zendframework/zend-console": "*",
-                "zendframework/zend-eventmanager": "*",
-                "zendframework/zend-mvc": "*"
-            },
-            "type": "module",
-            "autoload": {
-                "psr-0": {
-                    "zf2-whoops": "src/"
-                },
-                "classmap": [
-                    "./Module.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Balázs Németh",
-                    "email": "zsilbi@zsilbi.hu"
-                },
-                {
-                    "name": "Ghislain de Fontenay",
-                    "homepage": "http://www.ghislainf.me/",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Filipe Dobreira",
-                    "homepage": "https://github.com/filp"
-                },
-                {
-                    "name": "Andreas Frömer",
-                    "homepage": "https://github.com/icanhazstring"
-                }
-            ],
-            "description": "PHP whoops error on ZF2 framework",
-            "homepage": "https://github.com/ghislainf/zf2-whoops",
-            "time": "2016-06-06T08:41:08+00:00"
-        },
         {
             "name": "jasig/phpcas",
             "version": "1.3.8",
@@ -545,4482 +487,4852 @@
             "time": "2018-04-26T11:41:33+00:00"
         },
         {
-            "name": "league/commonmark",
-            "version": "1.3.0",
+            "name": "laminas/laminas-cache",
+            "version": "2.9.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/thephpleague/commonmark.git",
-                "reference": "4f30be7a2cbf3bfa5788abab71384713e48f451f"
+                "url": "https://github.com/laminas/laminas-cache.git",
+                "reference": "f4746a868c3e2f2da63c19d23efac12b9d1bb554"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/4f30be7a2cbf3bfa5788abab71384713e48f451f",
-                "reference": "4f30be7a2cbf3bfa5788abab71384713e48f451f",
+                "url": "https://api.github.com/repos/laminas/laminas-cache/zipball/f4746a868c3e2f2da63c19d23efac12b9d1bb554",
+                "reference": "f4746a868c3e2f2da63c19d23efac12b9d1bb554",
                 "shasum": ""
             },
             "require": {
-                "ext-mbstring": "*",
-                "php": "^7.1"
+                "laminas/laminas-eventmanager": "^2.6.3 || ^3.2",
+                "laminas/laminas-servicemanager": "^2.7.8 || ^3.3",
+                "laminas/laminas-stdlib": "^3.2.1",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0",
+                "psr/cache": "^1.0",
+                "psr/simple-cache": "^1.0"
             },
-            "conflict": {
-                "scrutinizer/ocular": "1.7.*"
+            "provide": {
+                "psr/cache-implementation": "1.0",
+                "psr/simple-cache-implementation": "1.0"
+            },
+            "replace": {
+                "zendframework/zend-cache": "self.version"
             },
             "require-dev": {
-                "cebe/markdown": "~1.0",
-                "commonmark/commonmark.js": "0.29.1",
-                "erusev/parsedown": "~1.0",
-                "ext-json": "*",
-                "github/gfm": "0.29.0",
-                "michelf/php-markdown": "~1.4",
-                "mikehaertl/php-shellcommand": "^1.4",
-                "phpstan/phpstan-shim": "^0.11.5",
-                "phpunit/phpunit": "^7.5",
-                "scrutinizer/ocular": "^1.5",
-                "symfony/finder": "^4.2"
+                "cache/integration-tests": "^0.16",
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-serializer": "^2.6",
+                "laminas/laminas-session": "^2.7.4",
+                "phpbench/phpbench": "^0.13",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2"
+            },
+            "suggest": {
+                "ext-apc": "APC or compatible extension, to use the APC storage adapter",
+                "ext-apcu": "APCU >= 5.1.0, to use the APCu storage adapter",
+                "ext-dba": "DBA, to use the DBA storage adapter",
+                "ext-memcache": "Memcache >= 2.0.0 to use the Memcache storage adapter",
+                "ext-memcached": "Memcached >= 1.0.0 to use the Memcached storage adapter",
+                "ext-mongo": "Mongo, to use MongoDb storage adapter",
+                "ext-mongodb": "MongoDB, to use the ExtMongoDb storage adapter",
+                "ext-redis": "Redis, to use Redis storage adapter",
+                "ext-wincache": "WinCache, to use the WinCache storage adapter",
+                "ext-xcache": "XCache, to use the XCache storage adapter",
+                "laminas/laminas-serializer": "Laminas\\Serializer component",
+                "laminas/laminas-session": "Laminas\\Session component",
+                "mongodb/mongodb": "Required for use with the ext-mongodb adapter",
+                "mongofill/mongofill": "Alternative to ext-mongo - a pure PHP implementation designed as a drop in replacement"
             },
-            "bin": [
-                "bin/commonmark"
-            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.4-dev"
+                    "dev-master": "2.9.x-dev",
+                    "dev-develop": "2.10.x-dev"
+                },
+                "laminas": {
+                    "component": "Laminas\\Cache",
+                    "config-provider": "Laminas\\Cache\\ConfigProvider"
                 }
             },
             "autoload": {
+                "files": [
+                    "autoload/patternPluginManagerPolyfill.php"
+                ],
                 "psr-4": {
-                    "League\\CommonMark\\": "src"
+                    "Laminas\\Cache\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Colin O'Dell",
-                    "email": "colinodell@gmail.com",
-                    "homepage": "https://www.colinodell.com",
-                    "role": "Lead Developer"
-                }
-            ],
-            "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)",
-            "homepage": "https://commonmark.thephpleague.com",
+            "description": "Caching implementation with a variety of storage options, as well as codified caching strategies for callbacks, classes, and output",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "commonmark",
-                "flavored",
-                "gfm",
-                "github",
-                "github-flavored",
-                "markdown",
-                "md",
-                "parser"
+                "cache",
+                "laminas",
+                "psr-16",
+                "psr-6"
             ],
-            "time": "2020-02-08T23:42:03+00:00"
+            "time": "2019-12-31T16:23:18+00:00"
         },
         {
-            "name": "matthiasmullie/minify",
-            "version": "1.3.62",
+            "name": "laminas/laminas-captcha",
+            "version": "2.9.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/matthiasmullie/minify.git",
-                "reference": "47a53716f94139aff22922ffd73283ff04f23cdf"
+                "url": "https://github.com/laminas/laminas-captcha.git",
+                "reference": "b88f650f3adf2d902ef56f6377cceb5cd87b9876"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/47a53716f94139aff22922ffd73283ff04f23cdf",
-                "reference": "47a53716f94139aff22922ffd73283ff04f23cdf",
+                "url": "https://api.github.com/repos/laminas/laminas-captcha/zipball/b88f650f3adf2d902ef56f6377cceb5cd87b9876",
+                "reference": "b88f650f3adf2d902ef56f6377cceb5cd87b9876",
                 "shasum": ""
             },
             "require": {
-                "ext-pcre": "*",
-                "matthiasmullie/path-converter": "~1.1",
-                "php": ">=5.3.0"
+                "laminas/laminas-math": "^2.7 || ^3.0",
+                "laminas/laminas-stdlib": "^3.2.1",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-captcha": "self.version"
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "~2.0",
-                "matthiasmullie/scrapbook": "~1.0",
-                "phpunit/phpunit": "~4.8"
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-recaptcha": "^3.0",
+                "laminas/laminas-session": "^2.8",
+                "laminas/laminas-text": "^2.6",
+                "laminas/laminas-validator": "^2.10.1",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2"
             },
             "suggest": {
-                "psr/cache-implementation": "Cache implementation to use with Minify::cache"
+                "laminas/laminas-i18n-resources": "Translations of captcha messages",
+                "laminas/laminas-recaptcha": "Laminas\\ReCaptcha component",
+                "laminas/laminas-session": "Laminas\\Session component",
+                "laminas/laminas-text": "Laminas\\Text component",
+                "laminas/laminas-validator": "Laminas\\Validator component"
             },
-            "bin": [
-                "bin/minifycss",
-                "bin/minifyjs"
-            ],
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.9.x-dev",
+                    "dev-develop": "2.10.x-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "MatthiasMullie\\Minify\\": "src/"
+                    "Laminas\\Captcha\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Matthias Mullie",
-                    "email": "minify@mullie.eu",
-                    "homepage": "http://www.mullie.eu",
-                    "role": "Developer"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.",
-            "homepage": "http://www.minifier.org",
+            "description": "Generate and validate CAPTCHAs using Figlets, images, ReCaptcha, and more",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "JS",
-                "css",
-                "javascript",
-                "minifier",
-                "minify"
+                "captcha",
+                "laminas"
             ],
-            "time": "2019-12-19T07:54:47+00:00"
+            "time": "2019-12-31T16:24:14+00:00"
         },
         {
-            "name": "matthiasmullie/path-converter",
-            "version": "1.1.3",
+            "name": "laminas/laminas-code",
+            "version": "3.4.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/matthiasmullie/path-converter.git",
-                "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9"
+                "url": "https://github.com/laminas/laminas-code.git",
+                "reference": "1cb8f203389ab1482bf89c0e70a04849bacd7766"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/matthiasmullie/path-converter/zipball/e7d13b2c7e2f2268e1424aaed02085518afa02d9",
-                "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9",
+                "url": "https://api.github.com/repos/laminas/laminas-code/zipball/1cb8f203389ab1482bf89c0e70a04849bacd7766",
+                "reference": "1cb8f203389ab1482bf89c0e70a04849bacd7766",
                 "shasum": ""
             },
             "require": {
-                "ext-pcre": "*",
-                "php": ">=5.3.0"
+                "laminas/laminas-eventmanager": "^2.6 || ^3.0",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^7.1"
+            },
+            "conflict": {
+                "phpspec/prophecy": "<1.9.0"
+            },
+            "replace": {
+                "zendframework/zend-code": "self.version"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.8"
+                "doctrine/annotations": "^1.7",
+                "ext-phar": "*",
+                "laminas/laminas-coding-standard": "^1.0",
+                "laminas/laminas-stdlib": "^2.7 || ^3.0",
+                "phpunit/phpunit": "^7.5.16 || ^8.4"
+            },
+            "suggest": {
+                "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features",
+                "laminas/laminas-stdlib": "Laminas\\Stdlib component"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4.x-dev",
+                    "dev-develop": "3.5.x-dev",
+                    "dev-dev-4.0": "4.0.x-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "MatthiasMullie\\PathConverter\\": "src/"
+                    "Laminas\\Code\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Matthias Mullie",
-                    "email": "pathconverter@mullie.eu",
-                    "homepage": "http://www.mullie.eu",
-                    "role": "Developer"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "Relative path converter",
-            "homepage": "http://github.com/matthiasmullie/path-converter",
+            "description": "Extensions to the PHP Reflection API, static code scanning, and code generation",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "converter",
-                "path",
-                "paths",
-                "relative"
+                "code",
+                "laminas"
             ],
-            "time": "2019-02-05T23:41:09+00:00"
+            "time": "2019-12-31T16:28:24+00:00"
         },
         {
-            "name": "misd/linkify",
-            "version": "v1.1.4",
+            "name": "laminas/laminas-config",
+            "version": "3.3.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/misd-service-development/php-linkify.git",
-                "reference": "3481b148806a23b4001712de645247a1a4dcc10a"
+                "url": "https://github.com/laminas/laminas-config.git",
+                "reference": "b8fe057f55e69a0e7a2e4ced79218a43f58606a8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/misd-service-development/php-linkify/zipball/3481b148806a23b4001712de645247a1a4dcc10a",
-                "reference": "3481b148806a23b4001712de645247a1a4dcc10a",
+                "url": "https://api.github.com/repos/laminas/laminas-config/zipball/b8fe057f55e69a0e7a2e4ced79218a43f58606a8",
+                "reference": "b8fe057f55e69a0e7a2e4ced79218a43f58606a8",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "ext-json": "*",
+                "laminas/laminas-stdlib": "^2.7.7 || ^3.1",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0",
+                "psr/container": "^1.0"
+            },
+            "conflict": {
+                "container-interop/container-interop": "<1.2.0"
+            },
+            "replace": {
+                "zendframework/zend-config": "self.version"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.0 || ^5.0"
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-filter": "^2.7.2",
+                "laminas/laminas-i18n": "^2.7.4",
+                "laminas/laminas-servicemanager": "^2.7.8 || ^3.3",
+                "malukenho/docheader": "^0.1.6",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2"
+            },
+            "suggest": {
+                "laminas/laminas-filter": "^2.7.2; install if you want to use the Filter processor",
+                "laminas/laminas-i18n": "^2.7.4; install if you want to use the Translator processor",
+                "laminas/laminas-servicemanager": "^2.7.8 || ^3.3; if you need an extensible plugin manager for use with the Config Factory"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.1.x-dev"
+                    "dev-master": "3.3.x-dev",
+                    "dev-develop": "3.4.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Misd\\Linkify\\": "src/Misd/Linkify"
+                    "Laminas\\Config\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
-            "description": "Converts URLs and email addresses in text into HTML links",
-            "homepage": "https://github.com/misd-service-development/php-linkify",
+            "description": "provides a nested object property based user interface for accessing this configuration data within application code",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "convert",
-                "email address",
-                "link",
-                "url"
+                "config",
+                "laminas"
             ],
-            "time": "2017-08-17T08:33:35+00:00"
+            "time": "2019-12-31T16:30:11+00:00"
         },
         {
-            "name": "myclabs/php-enum",
-            "version": "1.7.6",
+            "name": "laminas/laminas-console",
+            "version": "2.8.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/myclabs/php-enum.git",
-                "reference": "5f36467c7a87e20fbdc51e524fd8f9d1de80187c"
+                "url": "https://github.com/laminas/laminas-console.git",
+                "reference": "478a6ceac3e31fb38d6314088abda8b239ee23a5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/php-enum/zipball/5f36467c7a87e20fbdc51e524fd8f9d1de80187c",
-                "reference": "5f36467c7a87e20fbdc51e524fd8f9d1de80187c",
+                "url": "https://api.github.com/repos/laminas/laminas-console/zipball/478a6ceac3e31fb38d6314088abda8b239ee23a5",
+                "reference": "478a6ceac3e31fb38d6314088abda8b239ee23a5",
                 "shasum": ""
             },
             "require": {
-                "ext-json": "*",
-                "php": ">=7.1"
+                "laminas/laminas-stdlib": "^3.2.1",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-console": "self.version"
             },
             "require-dev": {
-                "phpunit/phpunit": "^7",
-                "squizlabs/php_codesniffer": "1.*",
-                "vimeo/psalm": "^3.8"
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-filter": "^2.7.2",
+                "laminas/laminas-json": "^2.6 || ^3.0",
+                "laminas/laminas-validator": "^2.10.1",
+                "phpunit/phpunit": "^5.7.23 || ^6.4.3"
+            },
+            "suggest": {
+                "laminas/laminas-filter": "To support DefaultRouteMatcher usage",
+                "laminas/laminas-validator": "To support DefaultRouteMatcher usage"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.8.x-dev",
+                    "dev-develop": "2.9.x-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "MyCLabs\\Enum\\": "src/"
+                    "Laminas\\Console\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP Enum contributors",
-                    "homepage": "https://github.com/myclabs/php-enum/graphs/contributors"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "PHP Enum implementation",
-            "homepage": "http://github.com/myclabs/php-enum",
+            "description": "Build console applications using getopt syntax or routing, complete with prompts",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "enum"
+                "console",
+                "laminas"
             ],
-            "time": "2020-02-14T08:15:52+00:00"
+            "time": "2019-12-31T16:31:45+00:00"
         },
         {
-            "name": "ocramius/package-versions",
-            "version": "1.4.2",
+            "name": "laminas/laminas-crypt",
+            "version": "3.3.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Ocramius/PackageVersions.git",
-                "reference": "44af6f3a2e2e04f2af46bcb302ad9600cba41c7d"
+                "url": "https://github.com/laminas/laminas-crypt.git",
+                "reference": "5f5dfe3ca08c965cc1f44f95831a83a81a93bf78"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/44af6f3a2e2e04f2af46bcb302ad9600cba41c7d",
-                "reference": "44af6f3a2e2e04f2af46bcb302ad9600cba41c7d",
+                "url": "https://api.github.com/repos/laminas/laminas-crypt/zipball/5f5dfe3ca08c965cc1f44f95831a83a81a93bf78",
+                "reference": "5f5dfe3ca08c965cc1f44f95831a83a81a93bf78",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0.0",
-                "php": "^7.1.0"
+                "container-interop/container-interop": "^1.2",
+                "ext-mbstring": "*",
+                "laminas/laminas-math": "^3.0",
+                "laminas/laminas-stdlib": "^2.7.7 || ^3.1",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-crypt": "self.version"
             },
             "require-dev": {
-                "composer/composer": "^1.6.3",
-                "doctrine/coding-standard": "^5.0.1",
-                "ext-zip": "*",
-                "infection/infection": "^0.7.1",
-                "phpunit/phpunit": "^7.5.17"
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2"
             },
-            "type": "composer-plugin",
+            "suggest": {
+                "ext-openssl": "Required for most features of Laminas\\Crypt"
+            },
+            "type": "library",
             "extra": {
-                "class": "PackageVersions\\Installer",
                 "branch-alias": {
-                    "dev-master": "2.0.x-dev"
+                    "dev-master": "3.3.x-dev",
+                    "dev-develop": "3.4.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "PackageVersions\\": "src/PackageVersions"
+                    "Laminas\\Crypt\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com"
-                }
+            "description": "Strong cryptography tools and password hashing",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "crypt",
+                "laminas"
             ],
-            "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
-            "time": "2019-11-15T16:17:10+00:00"
+            "time": "2019-12-31T16:33:24+00:00"
         },
         {
-            "name": "ocramius/proxy-manager",
-            "version": "2.1.1",
+            "name": "laminas/laminas-db",
+            "version": "2.11.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Ocramius/ProxyManager.git",
-                "reference": "e18ac876b2e4819c76349de8f78ccc8ef1554cd7"
+                "url": "https://github.com/laminas/laminas-db.git",
+                "reference": "76f9527da996c2fef32ef1f3a939e18ca5e9d962"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/e18ac876b2e4819c76349de8f78ccc8ef1554cd7",
-                "reference": "e18ac876b2e4819c76349de8f78ccc8ef1554cd7",
+                "url": "https://api.github.com/repos/laminas/laminas-db/zipball/76f9527da996c2fef32ef1f3a939e18ca5e9d962",
+                "reference": "76f9527da996c2fef32ef1f3a939e18ca5e9d962",
                 "shasum": ""
             },
             "require": {
-                "ocramius/package-versions": "^1.1.1",
-                "php": "^7.1.0",
-                "zendframework/zend-code": "^3.1.0"
+                "laminas/laminas-stdlib": "^2.7 || ^3.0",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-db": "self.version"
             },
             "require-dev": {
-                "couscous/couscous": "^1.5.2",
-                "ext-phar": "*",
-                "humbug/humbug": "dev-master@DEV",
-                "nikic/php-parser": "^3.0.4",
-                "phpbench/phpbench": "^0.12.2",
-                "phpstan/phpstan": "^0.6.4",
-                "phpunit/phpunit": "^5.6.4",
-                "phpunit/phpunit-mock-objects": "^3.4.1",
-                "squizlabs/php_codesniffer": "^2.7.0"
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-eventmanager": "^2.6.2 || ^3.0",
+                "laminas/laminas-hydrator": "^1.1 || ^2.1 || ^3.0",
+                "laminas/laminas-servicemanager": "^2.7.5 || ^3.0.3",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.14"
             },
             "suggest": {
-                "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects",
-                "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)",
-                "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)",
-                "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)"
+                "laminas/laminas-eventmanager": "Laminas\\EventManager component",
+                "laminas/laminas-hydrator": "Laminas\\Hydrator component for using HydratingResultSets",
+                "laminas/laminas-servicemanager": "Laminas\\ServiceManager component"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.0.x-dev"
+                    "dev-master": "2.11.x-dev",
+                    "dev-develop": "2.12.x-dev"
+                },
+                "laminas": {
+                    "component": "Laminas\\Db",
+                    "config-provider": "Laminas\\Db\\ConfigProvider"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "ProxyManager\\": "src"
+                "psr-4": {
+                    "Laminas\\Db\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "homepage": "http://ocramius.github.io/"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies",
-            "homepage": "https://github.com/Ocramius/ProxyManager",
+            "description": "Database abstraction layer, SQL abstraction, result set abstraction, and RowDataGateway and TableDataGateway implementations",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "aop",
-                "lazy loading",
-                "proxy",
-                "proxy pattern",
-                "service proxies"
+                "db",
+                "laminas"
             ],
-            "time": "2017-05-04T11:12:50+00:00"
+            "time": "2020-01-14T13:07:26+00:00"
         },
         {
-            "name": "oyejorge/less.php",
-            "version": "v1.7.0.14",
+            "name": "laminas/laminas-dependency-plugin",
+            "version": "1.0.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/oyejorge/less.php.git",
-                "reference": "42925c5a01a07d67ca7e82dfc8fb31814d557bc9"
+                "url": "https://github.com/laminas/laminas-dependency-plugin.git",
+                "reference": "f269716dc584cd7b69e7f6e8ac1092d645ab56d5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/oyejorge/less.php/zipball/42925c5a01a07d67ca7e82dfc8fb31814d557bc9",
-                "reference": "42925c5a01a07d67ca7e82dfc8fb31814d557bc9",
+                "url": "https://api.github.com/repos/laminas/laminas-dependency-plugin/zipball/f269716dc584cd7b69e7f6e8ac1092d645ab56d5",
+                "reference": "f269716dc584cd7b69e7f6e8ac1092d645ab56d5",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3"
+                "composer-plugin-api": "^1.1",
+                "php": "^5.6 || ^7.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.8.24"
+                "composer/composer": "^1.9",
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0",
+                "phpcompatibility/php-compatibility": "^9.3",
+                "phpunit/phpunit": "^8.4",
+                "roave/security-advisories": "dev-master",
+                "webimpress/coding-standard": "^1.0"
             },
-            "bin": [
-                "bin/lessc"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "Less": "lib/"
+            "type": "composer-plugin",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev",
+                    "dev-develop": "1.1.x-dev"
                 },
-                "classmap": [
-                    "lessc.inc.php"
-                ]
+                "class": "Laminas\\DependencyPlugin\\DependencyRewriterPlugin"
+            },
+            "autoload": {
+                "psr-4": {
+                    "Laminas\\DependencyPlugin\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "Matt Agar",
-                    "homepage": "https://github.com/agar"
-                },
-                {
-                    "name": "Martin Jantošovič",
-                    "homepage": "https://github.com/Mordred"
-                },
-                {
-                    "name": "Josh Schmidt",
-                    "homepage": "https://github.com/oyejorge"
-                }
-            ],
-            "description": "PHP port of the Javascript version of LESS http://lesscss.org (Originally maintained by Josh Schmidt)",
-            "homepage": "http://lessphp.gpeasy.com",
-            "keywords": [
-                "css",
-                "less",
-                "less.js",
-                "lesscss",
-                "php",
-                "stylesheet"
+                "BSD-3-Clause"
             ],
-            "abandoned": true,
-            "time": "2017-03-28T22:19:25+00:00"
+            "description": "Replace zendframework and zfcampus packages with their Laminas Project equivalents.",
+            "time": "2020-01-14T19:36:52+00:00"
         },
         {
-            "name": "paragonie/random_compat",
-            "version": "v9.99.99",
+            "name": "laminas/laminas-dom",
+            "version": "2.7.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/paragonie/random_compat.git",
-                "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
+                "url": "https://github.com/laminas/laminas-dom.git",
+                "reference": "631fa74ae6f68e9019b73512f1b3b139d43f3572"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
-                "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+                "url": "https://api.github.com/repos/laminas/laminas-dom/zipball/631fa74ae6f68e9019b73512f1b3b139d43f3572",
+                "reference": "631fa74ae6f68e9019b73512f1b3b139d43f3572",
                 "shasum": ""
             },
             "require": {
-                "php": "^7"
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
             },
-            "require-dev": {
-                "phpunit/phpunit": "4.*|5.*",
-                "vimeo/psalm": "^1"
+            "replace": {
+                "zendframework/zend-dom": "self.version"
             },
-            "suggest": {
-                "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "phpunit/phpunit": "^5.7.23 || ^6.4.3"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.7.x-dev",
+                    "dev-develop": "2.8.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Laminas\\Dom\\": "src/"
+                }
+            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Paragon Initiative Enterprises",
-                    "email": "security@paragonie.com",
-                    "homepage": "https://paragonie.com"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+            "description": "provides tools for working with DOM documents and structures",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "csprng",
-                "polyfill",
-                "pseudorandom",
-                "random"
+                "dom",
+                "laminas"
             ],
-            "time": "2018-07-02T15:55:56+00:00"
+            "time": "2019-12-31T16:43:02+00:00"
         },
         {
-            "name": "pear/archive_tar",
-            "version": "1.4.9",
+            "name": "laminas/laminas-escaper",
+            "version": "2.6.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/pear/Archive_Tar.git",
-                "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0"
+                "url": "https://github.com/laminas/laminas-escaper.git",
+                "reference": "25f2a053eadfa92ddacb609dcbbc39362610da70"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/c5b00053770e1d72128252c62c2c1a12c26639f0",
-                "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0",
+                "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/25f2a053eadfa92ddacb609dcbbc39362610da70",
+                "reference": "25f2a053eadfa92ddacb609dcbbc39362610da70",
                 "shasum": ""
             },
             "require": {
-                "pear/pear-core-minimal": "^1.10.0alpha2",
-                "php": ">=5.2.0"
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
             },
-            "require-dev": {
-                "phpunit/phpunit": "*"
+            "replace": {
+                "zendframework/zend-escaper": "self.version"
             },
-            "suggest": {
-                "ext-bz2": "Bz2 compression support.",
-                "ext-xz": "Lzma2 compression support.",
-                "ext-zlib": "Gzip compression support."
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.4.x-dev"
+                    "dev-master": "2.6.x-dev",
+                    "dev-develop": "2.7.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Archive_Tar": ""
+                "psr-4": {
+                    "Laminas\\Escaper\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": [
-                "./"
-            ],
             "license": [
                 "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Vincent Blavet",
-                    "email": "vincent@phpconcept.net"
-                },
-                {
-                    "name": "Greg Beaver",
-                    "email": "greg@chiaraquartet.net"
-                },
-                {
-                    "name": "Michiel Rook",
-                    "email": "mrook@php.net"
-                }
+            "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "escaper",
+                "laminas"
             ],
-            "description": "Tar file management class with compression support (gzip, bzip2, lzma2)",
-            "homepage": "https://github.com/pear/Archive_Tar",
-            "keywords": [
-                "archive",
-                "tar"
-            ],
-            "time": "2019-12-04T10:17:28+00:00"
+            "time": "2019-12-31T16:43:30+00:00"
         },
         {
-            "name": "pear/console_getopt",
-            "version": "v1.4.3",
+            "name": "laminas/laminas-eventmanager",
+            "version": "3.2.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/pear/Console_Getopt.git",
-                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0"
+                "url": "https://github.com/laminas/laminas-eventmanager.git",
+                "reference": "ce4dc0bdf3b14b7f9815775af9dfee80a63b4748"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0",
-                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0",
+                "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/ce4dc0bdf3b14b7f9815775af9dfee80a63b4748",
+                "reference": "ce4dc0bdf3b14b7f9815775af9dfee80a63b4748",
                 "shasum": ""
             },
+            "require": {
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-eventmanager": "self.version"
+            },
+            "require-dev": {
+                "athletic/athletic": "^0.1",
+                "container-interop/container-interop": "^1.1.0",
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-stdlib": "^2.7.3 || ^3.0",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2"
+            },
+            "suggest": {
+                "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature",
+                "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature"
+            },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.2-dev",
+                    "dev-develop": "3.3-dev"
+                }
+            },
             "autoload": {
-                "psr-0": {
-                    "Console": "./"
+                "psr-4": {
+                    "Laminas\\EventManager\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": [
-                "./"
-            ],
             "license": [
-                "BSD-2-Clause"
+                "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Andrei Zmievski",
-                    "email": "andrei@php.net",
-                    "role": "Lead"
-                },
-                {
-                    "name": "Stig Bakken",
-                    "email": "stig@php.net",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Greg Beaver",
-                    "email": "cellog@php.net",
-                    "role": "Helper"
-                }
+            "description": "Trigger and listen to events within a PHP application",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "event",
+                "eventmanager",
+                "events",
+                "laminas"
             ],
-            "description": "More info available on: http://pear.php.net/package/Console_Getopt",
-            "time": "2019-11-20T18:27:48+00:00"
+            "time": "2019-12-31T16:44:52+00:00"
         },
         {
-            "name": "pear/file_marc",
-            "version": "1.4.1",
+            "name": "laminas/laminas-feed",
+            "version": "2.12.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/pear/File_MARC.git",
-                "reference": "a4997f93d13933ad478cd8b6f43c6345d7388a70"
+                "url": "https://github.com/laminas/laminas-feed.git",
+                "reference": "64d25e18a6ea3db90c27fe2d6b95630daa1bf602"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/File_MARC/zipball/a4997f93d13933ad478cd8b6f43c6345d7388a70",
-                "reference": "a4997f93d13933ad478cd8b6f43c6345d7388a70",
+                "url": "https://api.github.com/repos/laminas/laminas-feed/zipball/64d25e18a6ea3db90c27fe2d6b95630daa1bf602",
+                "reference": "64d25e18a6ea3db90c27fe2d6b95630daa1bf602",
                 "shasum": ""
             },
             "require": {
-                "pear/pear_exception": "1.*"
+                "ext-dom": "*",
+                "ext-libxml": "*",
+                "laminas/laminas-escaper": "^2.5.2",
+                "laminas/laminas-stdlib": "^3.2.1",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-feed": "self.version"
             },
             "require-dev": {
-                "phpunit/phpunit": "*",
-                "squizlabs/php_codesniffer": "*"
+                "laminas/laminas-cache": "^2.7.2",
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-db": "^2.8.2",
+                "laminas/laminas-http": "^2.7",
+                "laminas/laminas-servicemanager": "^2.7.8 || ^3.3",
+                "laminas/laminas-validator": "^2.10.1",
+                "phpunit/phpunit": "^5.7.23 || ^6.4.3",
+                "psr/http-message": "^1.0.1"
             },
             "suggest": {
-                "pear/validate_ispn": "Install optionally via your project's composer.json"
+                "laminas/laminas-cache": "Laminas\\Cache component, for optionally caching feeds between requests",
+                "laminas/laminas-db": "Laminas\\Db component, for use with PubSubHubbub",
+                "laminas/laminas-http": "Laminas\\Http for PubSubHubbub, and optionally for use with Laminas\\Feed\\Reader",
+                "laminas/laminas-servicemanager": "Laminas\\ServiceManager component, for easily extending ExtensionManager implementations",
+                "laminas/laminas-validator": "Laminas\\Validator component, for validating email addresses used in Atom feeds and entries when using the Writer subcomponent",
+                "psr/http-message": "PSR-7 ^1.0.1, if you wish to use Laminas\\Feed\\Reader\\Http\\Psr7ResponseDecorator"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.12.x-dev",
+                    "dev-develop": "2.13.x-dev"
+                }
+            },
             "autoload": {
-                "psr-0": {
-                    "File": "./"
-                },
-                "classmap": [
-                    "./File/MARC/Data_Field.php",
-                    "./File/MARC/Control_Field.php"
-                ]
+                "psr-4": {
+                    "Laminas\\Feed\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": [
-                "./"
-            ],
             "license": [
-                "LGPL-2.1"
+                "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Dan Scott",
-                    "email": "dbs@php.net",
-                    "homepage": "https://coffeecode.net",
-                    "role": "Lead"
-                }
+            "description": "provides functionality for consuming RSS and Atom feeds",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "feed",
+                "laminas"
             ],
-            "description": "Supports the MAchine Readable Cataloging (MARC) file format documented at http://loc.gov/marc/",
-            "time": "2019-11-13T17:33:56+00:00"
+            "time": "2019-12-31T16:46:54+00:00"
         },
         {
-            "name": "pear/http_request2",
-            "version": "v2.3.0",
+            "name": "laminas/laminas-filter",
+            "version": "2.9.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/pear/HTTP_Request2.git",
-                "reference": "3599cf0fe455a4e281da464f6510bfc5c2ce54c4"
+                "url": "https://github.com/laminas/laminas-filter.git",
+                "reference": "4d8c0c25e40836bd617335e744009c2c950c4ad5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/HTTP_Request2/zipball/3599cf0fe455a4e281da464f6510bfc5c2ce54c4",
-                "reference": "3599cf0fe455a4e281da464f6510bfc5c2ce54c4",
+                "url": "https://api.github.com/repos/laminas/laminas-filter/zipball/4d8c0c25e40836bd617335e744009c2c950c4ad5",
+                "reference": "4d8c0c25e40836bd617335e744009c2c950c4ad5",
                 "shasum": ""
             },
             "require": {
-                "pear/net_url2": "^2.2.0",
-                "pear/pear_exception": "^1.0.0",
-                "php": ">=5.2.0"
+                "laminas/laminas-stdlib": "^2.7.7 || ^3.1",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "conflict": {
+                "laminas/laminas-validator": "<2.10.1"
+            },
+            "replace": {
+                "zendframework/zend-filter": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-crypt": "^3.2.1",
+                "laminas/laminas-servicemanager": "^2.7.8 || ^3.3",
+                "laminas/laminas-uri": "^2.6",
+                "pear/archive_tar": "^1.4.3",
+                "phpunit/phpunit": "^5.7.23 || ^6.4.3",
+                "psr/http-factory": "^1.0"
             },
             "suggest": {
-                "ext-fileinfo": "Adds support for looking up mime-types using finfo.",
-                "ext-zlib": "Allows handling gzip compressed responses.",
-                "lib-curl": "Allows using cURL as a request backend.",
-                "lib-openssl": "Allows handling SSL requests when not using cURL."
+                "laminas/laminas-crypt": "Laminas\\Crypt component, for encryption filters",
+                "laminas/laminas-i18n": "Laminas\\I18n component for filters depending on i18n functionality",
+                "laminas/laminas-servicemanager": "Laminas\\ServiceManager component, for using the filter chain functionality",
+                "laminas/laminas-uri": "Laminas\\Uri component, for the UriNormalize filter",
+                "psr/http-factory-implementation": "psr/http-factory-implementation, for creating file upload instances when consuming PSR-7 in file upload filters"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-trunk": "2.2-dev"
+                    "dev-master": "2.9.x-dev",
+                    "dev-develop": "2.10.x-dev"
+                },
+                "laminas": {
+                    "component": "Laminas\\Filter",
+                    "config-provider": "Laminas\\Filter\\ConfigProvider"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "HTTP_Request2": ""
+                "psr-4": {
+                    "Laminas\\Filter\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": [
-                "./"
-            ],
             "license": [
                 "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Alexey Borzov",
-                    "email": "avb@php.net"
-                }
-            ],
-            "description": "Provides an easy way to perform HTTP requests.",
-            "homepage": "http://pear.php.net/package/HTTP_Request2",
+            "description": "Programmatically filter and normalize data and files",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "PEAR",
-                "curl",
-                "http",
-                "request"
+                "filter",
+                "laminas"
             ],
-            "time": "2016-02-13T20:20:39+00:00"
+            "time": "2019-12-31T16:54:29+00:00"
         },
         {
-            "name": "pear/net_url2",
-            "version": "v2.2.2",
+            "name": "laminas/laminas-form",
+            "version": "2.14.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/pear/Net_URL2.git",
-                "reference": "07fd055820dbf466ee3990abe96d0e40a8791f9d"
+                "url": "https://github.com/laminas/laminas-form.git",
+                "reference": "012aae01366cb8c8fb64e39a887363ef82f388dd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Net_URL2/zipball/07fd055820dbf466ee3990abe96d0e40a8791f9d",
-                "reference": "07fd055820dbf466ee3990abe96d0e40a8791f9d",
+                "url": "https://api.github.com/repos/laminas/laminas-form/zipball/012aae01366cb8c8fb64e39a887363ef82f388dd",
+                "reference": "012aae01366cb8c8fb64e39a887363ef82f388dd",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.1.4"
+                "laminas/laminas-hydrator": "^1.1 || ^2.1 || ^3.0",
+                "laminas/laminas-inputfilter": "^2.8",
+                "laminas/laminas-stdlib": "^3.2.1",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-form": "self.version"
             },
             "require-dev": {
-                "phpunit/phpunit": ">=3.3.0"
+                "doctrine/annotations": "~1.0",
+                "laminas/laminas-cache": "^2.6.1",
+                "laminas/laminas-captcha": "^2.7.1",
+                "laminas/laminas-code": "^2.6 || ^3.0",
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-escaper": "^2.5",
+                "laminas/laminas-eventmanager": "^2.6.2 || ^3.0",
+                "laminas/laminas-filter": "^2.6",
+                "laminas/laminas-i18n": "^2.6",
+                "laminas/laminas-recaptcha": "^3.0.0",
+                "laminas/laminas-servicemanager": "^2.7.5 || ^3.0.3",
+                "laminas/laminas-session": "^2.8.1",
+                "laminas/laminas-text": "^2.6",
+                "laminas/laminas-validator": "^2.6",
+                "laminas/laminas-view": "^2.6.2",
+                "phpunit/phpunit": "^5.7.23 || ^6.5.3"
+            },
+            "suggest": {
+                "laminas/laminas-captcha": "^2.7.1, required for using CAPTCHA form elements",
+                "laminas/laminas-code": "^2.6 || ^3.0, required to use laminas-form annotations support",
+                "laminas/laminas-eventmanager": "^2.6.2 || ^3.0, reuired for laminas-form annotations support",
+                "laminas/laminas-i18n": "^2.6, required when using laminas-form view helpers",
+                "laminas/laminas-recaptcha": "in order to use the ReCaptcha form element",
+                "laminas/laminas-servicemanager": "^2.7.5 || ^3.0.3, required to use the form factories or provide services",
+                "laminas/laminas-view": "^2.6.2, required for using the laminas-form view helpers"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.2.x-dev"
+                    "dev-master": "2.14.x-dev",
+                    "dev-develop": "2.15.x-dev"
+                },
+                "laminas": {
+                    "component": "Laminas\\Form",
+                    "config-provider": "Laminas\\Form\\ConfigProvider"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "Net/URL2.php"
+                "psr-4": {
+                    "Laminas\\Form\\": "src/"
+                },
+                "files": [
+                    "autoload/formElementManagerPolyfill.php"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": [
-                "./"
-            ],
             "license": [
                 "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "David Coallier",
-                    "email": "davidc@php.net"
-                },
-                {
-                    "name": "Tom Klingenberg",
-                    "email": "tkli@php.net"
-                },
-                {
-                    "name": "Christian Schmidt",
-                    "email": "chmidt@php.net"
-                }
-            ],
-            "description": "Class for parsing and handling URL. Provides parsing of URLs into their constituent parts (scheme, host, path etc.), URL generation, and resolving of relative URLs.",
-            "homepage": "https://github.com/pear/Net_URL2",
+            "description": "Validate and display simple and complex forms, casting forms to business objects and vice versa",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "PEAR",
-                "net",
-                "networking",
-                "rfc3986",
-                "uri",
-                "url"
+                "form",
+                "laminas"
             ],
-            "time": "2017-08-25T06:16:11+00:00"
+            "time": "2019-12-31T16:56:34+00:00"
         },
         {
-            "name": "pear/pear-core-minimal",
-            "version": "v1.10.10",
+            "name": "laminas/laminas-http",
+            "version": "2.11.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/pear/pear-core-minimal.git",
-                "reference": "625a3c429d9b2c1546438679074cac1b089116a7"
+                "url": "https://github.com/laminas/laminas-http.git",
+                "reference": "8c66963b933c80da59433da56a44dfa979f3ec88"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7",
-                "reference": "625a3c429d9b2c1546438679074cac1b089116a7",
+                "url": "https://api.github.com/repos/laminas/laminas-http/zipball/8c66963b933c80da59433da56a44dfa979f3ec88",
+                "reference": "8c66963b933c80da59433da56a44dfa979f3ec88",
                 "shasum": ""
             },
             "require": {
-                "pear/console_getopt": "~1.4",
-                "pear/pear_exception": "~1.0"
+                "laminas/laminas-loader": "^2.5.1",
+                "laminas/laminas-stdlib": "^3.2.1",
+                "laminas/laminas-uri": "^2.5.2",
+                "laminas/laminas-validator": "^2.10.1",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
             },
             "replace": {
-                "rsky/pear-core-min": "self.version"
+                "zendframework/zend-http": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-config": "^3.1 || ^2.6",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.3"
+            },
+            "suggest": {
+                "paragonie/certainty": "For automated management of cacert.pem"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.11.x-dev",
+                    "dev-develop": "2.12.x-dev"
+                }
+            },
             "autoload": {
-                "psr-0": {
-                    "": "src/"
+                "psr-4": {
+                    "Laminas\\Http\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": [
-                "src/"
-            ],
             "license": [
                 "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Christian Weiske",
-                    "email": "cweiske@php.net",
-                    "role": "Lead"
-                }
+            "description": "Provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "http",
+                "http client",
+                "laminas"
             ],
-            "description": "Minimal set of PEAR core files to be used as composer dependency",
-            "time": "2019-11-19T19:00:24+00:00"
+            "time": "2019-12-31T17:02:36+00:00"
         },
         {
-            "name": "pear/pear_exception",
-            "version": "v1.0.1",
+            "name": "laminas/laminas-hydrator",
+            "version": "3.0.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/pear/PEAR_Exception.git",
-                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7"
+                "url": "https://github.com/laminas/laminas-hydrator.git",
+                "reference": "5c418d6e37ad363bef5ce1c8a72388243d6c7950"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
-                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
+                "url": "https://api.github.com/repos/laminas/laminas-hydrator/zipball/5c418d6e37ad363bef5ce1c8a72388243d6c7950",
+                "reference": "5c418d6e37ad363bef5ce1c8a72388243d6c7950",
                 "shasum": ""
             },
             "require": {
-                "php": ">=4.4.0"
+                "laminas/laminas-stdlib": "^3.2.1",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^7.2"
+            },
+            "replace": {
+                "zendframework/zend-hydrator": "self.version"
             },
             "require-dev": {
-                "phpunit/phpunit": "*"
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-eventmanager": "^3.2.1",
+                "laminas/laminas-modulemanager": "^2.8",
+                "laminas/laminas-serializer": "^2.9",
+                "laminas/laminas-servicemanager": "^3.3.2",
+                "phpspec/prophecy": "^1.7.5",
+                "phpstan/phpstan": "^0.10.5",
+                "phpunit/phpunit": "^7.5"
             },
-            "type": "class",
+            "suggest": {
+                "laminas/laminas-eventmanager": "^3.2, to support aggregate hydrator usage",
+                "laminas/laminas-serializer": "^2.9, to use the SerializableStrategy",
+                "laminas/laminas-servicemanager": "^3.3, to support hydrator plugin manager usage"
+            },
+            "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-release-2.4": "2.4.x-dev",
+                    "dev-master": "3.0.x-dev",
+                    "dev-develop": "3.1.x-dev"
+                },
+                "laminas": {
+                    "component": "Laminas\\Hydrator",
+                    "config-provider": "Laminas\\Hydrator\\ConfigProvider"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "PEAR/"
-                ]
+                "psr-4": {
+                    "Laminas\\Hydrator\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": [
-                "."
+            "license": [
+                "BSD-3-Clause"
             ],
+            "description": "Serialize objects to arrays, and vice versa",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "hydrator",
+                "laminas"
+            ],
+            "time": "2019-12-31T17:06:44+00:00"
+        },
+        {
+            "name": "laminas/laminas-i18n",
+            "version": "2.10.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laminas/laminas-i18n.git",
+                "reference": "815be447f1c77f70a86bf24d00087fcb975b39ff"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laminas/laminas-i18n/zipball/815be447f1c77f70a86bf24d00087fcb975b39ff",
+                "reference": "815be447f1c77f70a86bf24d00087fcb975b39ff",
+                "shasum": ""
+            },
+            "require": {
+                "ext-intl": "*",
+                "laminas/laminas-stdlib": "^2.7 || ^3.0",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "conflict": {
+                "phpspec/prophecy": "<1.9.0"
+            },
+            "replace": {
+                "zendframework/zend-i18n": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-cache": "^2.6.1",
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-config": "^2.6",
+                "laminas/laminas-eventmanager": "^2.6.2 || ^3.0",
+                "laminas/laminas-filter": "^2.6.1",
+                "laminas/laminas-servicemanager": "^2.7.5 || ^3.0.3",
+                "laminas/laminas-validator": "^2.6",
+                "laminas/laminas-view": "^2.6.3",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.16"
+            },
+            "suggest": {
+                "laminas/laminas-cache": "Laminas\\Cache component",
+                "laminas/laminas-config": "Laminas\\Config component",
+                "laminas/laminas-eventmanager": "You should install this package to use the events in the translator",
+                "laminas/laminas-filter": "You should install this package to use the provided filters",
+                "laminas/laminas-i18n-resources": "Translation resources",
+                "laminas/laminas-servicemanager": "Laminas\\ServiceManager component",
+                "laminas/laminas-validator": "You should install this package to use the provided validators",
+                "laminas/laminas-view": "You should install this package to use the provided view helpers"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.10.x-dev",
+                    "dev-develop": "2.11.x-dev"
+                },
+                "laminas": {
+                    "component": "Laminas\\I18n",
+                    "config-provider": "Laminas\\I18n\\ConfigProvider"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Laminas\\I18n\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-2-Clause"
+                "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Helgi Thormar",
-                    "email": "dufuz@php.net"
+            "description": "Provide translations for your application, and filter and validate internationalized values",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "i18n",
+                "laminas"
+            ],
+            "time": "2019-12-31T17:07:17+00:00"
+        },
+        {
+            "name": "laminas/laminas-inputfilter",
+            "version": "2.10.1",
+            "source": {
+                "type": "git",
+                "url": "git@github.com:laminas/laminas-inputfilter.git",
+                "reference": "b29ce8f512c966468eee37ea4873ae5fb545d00a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laminas/laminas-inputfilter/zipball/b29ce8f512c966468eee37ea4873ae5fb545d00a",
+                "reference": "b29ce8f512c966468eee37ea4873ae5fb545d00a",
+                "shasum": ""
+            },
+            "require": {
+                "laminas/laminas-filter": "^2.9.1",
+                "laminas/laminas-servicemanager": "^2.7.10 || ^3.3.1",
+                "laminas/laminas-stdlib": "^2.7 || ^3.0",
+                "laminas/laminas-validator": "^2.11",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-inputfilter": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.15",
+                "psr/http-message": "^1.0"
+            },
+            "suggest": {
+                "psr/http-message-implementation": "PSR-7 is required if you wish to validate PSR-7 UploadedFileInterface payloads"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.10.x-dev",
+                    "dev-develop": "2.11.x-dev"
                 },
-                {
-                    "name": "Greg Beaver",
-                    "email": "cellog@php.net"
+                "laminas": {
+                    "component": "Laminas\\InputFilter",
+                    "config-provider": "Laminas\\InputFilter\\ConfigProvider"
                 }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Laminas\\InputFilter\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
             ],
-            "description": "The PEAR Exception base class.",
-            "homepage": "https://github.com/pear/PEAR_Exception",
+            "description": "Normalize and validate input sets from the web, APIs, the CLI, and more, including files",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "exception"
+                "inputfilter",
+                "laminas"
             ],
-            "time": "2019-12-10T10:24:42+00:00"
+            "time": "2019-12-31T17:11:54+00:00"
         },
         {
-            "name": "pear/validate",
-            "version": "v0.8.5",
+            "name": "laminas/laminas-json",
+            "version": "3.1.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/pear/Validate.git",
-                "reference": "d055541ee2d7165329d5e5b8e91907d7fae1cff2"
+                "url": "https://github.com/laminas/laminas-json.git",
+                "reference": "00dc0da7b5e5018904c5c4a8e80a5faa16c2c1c6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Validate/zipball/d055541ee2d7165329d5e5b8e91907d7fae1cff2",
-                "reference": "d055541ee2d7165329d5e5b8e91907d7fae1cff2",
+                "url": "https://api.github.com/repos/laminas/laminas-json/zipball/00dc0da7b5e5018904c5c4a8e80a5faa16c2c1c6",
+                "reference": "00dc0da7b5e5018904c5c4a8e80a5faa16c2c1c6",
                 "shasum": ""
             },
+            "require": {
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-json": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-stdlib": "^2.7.7 || ^3.1",
+                "phpunit/phpunit": "^5.7.23 || ^6.4.3"
+            },
             "suggest": {
-                "pear/date": "Install optionally via your project's composer.json"
+                "laminas/laminas-json-server": "For implementing JSON-RPC servers",
+                "laminas/laminas-xml2json": "For converting XML documents to JSON"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1.x-dev",
+                    "dev-develop": "3.2.x-dev"
+                }
+            },
             "autoload": {
-                "psr-0": {
-                    "Validate": "./"
+                "psr-4": {
+                    "Laminas\\Json\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": [
-                "./"
+            "license": [
+                "BSD-3-Clause"
             ],
+            "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "json",
+                "laminas"
+            ],
+            "time": "2019-12-31T17:15:04+00:00"
+        },
+        {
+            "name": "laminas/laminas-loader",
+            "version": "2.6.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laminas/laminas-loader.git",
+                "reference": "7e13c7987a736b62beae79eb57746037e057a79d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laminas/laminas-loader/zipball/7e13c7987a736b62beae79eb57746037e057a79d",
+                "reference": "7e13c7987a736b62beae79eb57746037e057a79d",
+                "shasum": ""
+            },
+            "require": {
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-loader": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.6.x-dev",
+                    "dev-develop": "2.7.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Laminas\\Loader\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "New BSD"
+                "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Pierre-Alain Joye",
-                    "email": "pierre.php@gmail.com",
-                    "role": "Lead"
-                },
-                {
-                    "name": "Thomas V.V.Cox",
-                    "email": "cox@php.net",
-                    "role": "Lead"
-                },
-                {
-                    "name": "Helgi Þormar Þorbjörnsson",
-                    "email": "dufuz@php.net",
-                    "role": "Lead"
-                },
-                {
-                    "name": "Amir Mohammad Saied",
-                    "email": "amirsaied@gmail.com",
-                    "role": "Lead"
-                },
-                {
-                    "name": "David Coallier",
-                    "email": "david@echolibre.com",
-                    "role": "Lead"
+            "description": "Autoloading and plugin loading strategies",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "laminas",
+                "loader"
+            ],
+            "time": "2019-12-31T17:18:26+00:00"
+        },
+        {
+            "name": "laminas/laminas-log",
+            "version": "2.10.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laminas/laminas-log.git",
+                "reference": "79bbc24e0b2aa4894249ff52dfd78c91292c4db2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laminas/laminas-log/zipball/79bbc24e0b2aa4894249ff52dfd78c91292c4db2",
+                "reference": "79bbc24e0b2aa4894249ff52dfd78c91292c4db2",
+                "shasum": ""
+            },
+            "require": {
+                "laminas/laminas-servicemanager": "^2.7.5 || ^3.0.3",
+                "laminas/laminas-stdlib": "^2.7 || ^3.0",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0",
+                "psr/log": "^1.0"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0.0"
+            },
+            "replace": {
+                "zendframework/zend-log": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-db": "^2.6",
+                "laminas/laminas-escaper": "^2.5",
+                "laminas/laminas-filter": "^2.5",
+                "laminas/laminas-mail": "^2.6.1",
+                "laminas/laminas-validator": "^2.10.1",
+                "mikey179/vfsstream": "^1.6",
+                "phpunit/phpunit": "^5.7.15 || ^6.0.8"
+            },
+            "suggest": {
+                "ext-mongo": "mongo extension to use Mongo writer",
+                "ext-mongodb": "mongodb extension to use MongoDB writer",
+                "laminas/laminas-console": "Laminas\\Console component to use the RequestID log processor",
+                "laminas/laminas-db": "Laminas\\Db component to use the database log writer",
+                "laminas/laminas-escaper": "Laminas\\Escaper component, for use in the XML log formatter",
+                "laminas/laminas-mail": "Laminas\\Mail component to use the email log writer",
+                "laminas/laminas-validator": "Laminas\\Validator component to block invalid log messages"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.10.x-dev",
+                    "dev-develop": "2.11.x-dev"
                 },
-                {
-                    "name": "bertrand Gugger",
-                    "email": "bertrand@toggg.com",
-                    "role": "Lead"
+                "laminas": {
+                    "component": "Laminas\\Log",
+                    "config-provider": "Laminas\\Log\\ConfigProvider"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Laminas\\Log\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "description": "component for general purpose logging",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "laminas",
+                "log",
+                "logging"
+            ],
+            "time": "2019-12-31T17:18:55+00:00"
+        },
+        {
+            "name": "laminas/laminas-mail",
+            "version": "2.10.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laminas/laminas-mail.git",
+                "reference": "019fb670c1dff6be7fc91d3b88942bd0a5f68792"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laminas/laminas-mail/zipball/019fb670c1dff6be7fc91d3b88942bd0a5f68792",
+                "reference": "019fb670c1dff6be7fc91d3b88942bd0a5f68792",
+                "shasum": ""
+            },
+            "require": {
+                "ext-iconv": "*",
+                "laminas/laminas-loader": "^2.5",
+                "laminas/laminas-mime": "^2.5",
+                "laminas/laminas-stdlib": "^2.7 || ^3.0",
+                "laminas/laminas-validator": "^2.10.2",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0",
+                "true/punycode": "^2.1"
+            },
+            "replace": {
+                "zendframework/zend-mail": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-config": "^2.6",
+                "laminas/laminas-crypt": "^2.6 || ^3.0",
+                "laminas/laminas-servicemanager": "^2.7.10 || ^3.3.1",
+                "phpunit/phpunit": "^5.7.25 || ^6.4.4 || ^7.1.4"
+            },
+            "suggest": {
+                "laminas/laminas-crypt": "Crammd5 support in SMTP Auth",
+                "laminas/laminas-servicemanager": "^2.7.10 || ^3.3.1 when using SMTP to deliver messages"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.10.x-dev",
+                    "dev-develop": "2.11.x-dev"
                 },
-                {
-                    "name": "Stefan Neufeind",
-                    "email": "pear.neufeind@speedpartner.de",
-                    "role": "Developer"
+                "laminas": {
+                    "component": "Laminas\\Mail",
+                    "config-provider": "Laminas\\Mail\\ConfigProvider"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Laminas\\Mail\\": "src/"
                 }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
             ],
-            "description": "Validate numbers, email, strings, dates, URIs and more",
-            "homepage": "http://pear.php.net/package/Validate",
-            "time": "2015-02-20T09:16:13+00:00"
+            "description": "Provides generalized functionality to compose and send both text and MIME-compliant multipart e-mail messages",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "laminas",
+                "mail"
+            ],
+            "time": "2019-12-31T17:21:22+00:00"
         },
         {
-            "name": "pear/validate_ispn",
-            "version": "dev-master",
+            "name": "laminas/laminas-math",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/pear/Validate_ISPN.git",
-                "reference": "9ea9312a0841b5d745742c737772aeffa6d06e96"
+                "url": "https://github.com/laminas/laminas-math.git",
+                "reference": "dd603c7d151d46eafd243a405d5b7eefa4222d74"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Validate_ISPN/zipball/9ea9312a0841b5d745742c737772aeffa6d06e96",
-                "reference": "9ea9312a0841b5d745742c737772aeffa6d06e96",
+                "url": "https://api.github.com/repos/laminas/laminas-math/zipball/dd603c7d151d46eafd243a405d5b7eefa4222d74",
+                "reference": "dd603c7d151d46eafd243a405d5b7eefa4222d74",
                 "shasum": ""
             },
             "require": {
-                "pear/validate": "*"
+                "ext-mbstring": "*",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "paragonie/random_compat": "^2.0.11 || 9.99.99",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-math": "self.version"
             },
             "require-dev": {
-                "phpunit/phpunit": "*"
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2"
+            },
+            "suggest": {
+                "ext-bcmath": "If using the bcmath functionality",
+                "ext-gmp": "If using the gmp functionality"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.2.x-dev",
+                    "dev-develop": "3.3.x-dev"
+                }
             },
-            "type": "library",
             "autoload": {
-                "psr-0": {
-                    "Validate": "./"
+                "psr-4": {
+                    "Laminas\\Math\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": [
-                "./"
-            ],
             "license": [
-                "BSD-2-Clause"
+                "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Helgi Þormar",
-                    "email": "dufuz@php.net",
-                    "role": "Lead"
-                },
-                {
-                    "name": "Piotr Klaban",
-                    "email": "makler@man.torun.pl",
-                    "role": "Lead"
-                }
+            "description": "Create cryptographically secure pseudo-random numbers, and manage big integers",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "laminas",
+                "math"
             ],
-            "description": "More info available on: http://pear.php.net/package/Validate_ISPN",
-            "time": "2015-04-14T04:17:31+00:00"
+            "time": "2019-12-31T17:24:18+00:00"
         },
         {
-            "name": "phing/phing",
-            "version": "2.16.2",
+            "name": "laminas/laminas-mime",
+            "version": "2.7.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/phingofficial/phing.git",
-                "reference": "d11c6328c450cb3cda4ffa6548aa9cd60f30dd17"
+                "url": "https://github.com/laminas/laminas-mime.git",
+                "reference": "2dbace2c69542e5a251af3becb6d7209ac9fb42b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phingofficial/phing/zipball/d11c6328c450cb3cda4ffa6548aa9cd60f30dd17",
-                "reference": "d11c6328c450cb3cda4ffa6548aa9cd60f30dd17",
+                "url": "https://api.github.com/repos/laminas/laminas-mime/zipball/2dbace2c69542e5a251af3becb6d7209ac9fb42b",
+                "reference": "2dbace2c69542e5a251af3becb6d7209ac9fb42b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.2.0"
+                "laminas/laminas-stdlib": "^2.7 || ^3.0",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-mime": "self.version"
             },
             "require-dev": {
-                "ext-pdo_sqlite": "*",
-                "mikey179/vfsstream": "^1.6",
-                "pdepend/pdepend": "2.x",
-                "pear/archive_tar": "1.4.x",
-                "pear/http_request2": "dev-trunk",
-                "pear/net_growl": "dev-trunk",
-                "pear/pear-core-minimal": "1.10.1",
-                "pear/versioncontrol_git": "@dev",
-                "pear/versioncontrol_svn": "~0.5",
-                "phpdocumentor/phpdocumentor": "2.x",
-                "phploc/phploc": "~2.0.6",
-                "phpmd/phpmd": "~2.2",
-                "phpunit/phpunit": ">=3.7",
-                "sebastian/git": "~1.0",
-                "sebastian/phpcpd": "2.x",
-                "siad007/versioncontrol_hg": "^1.0",
-                "simpletest/simpletest": "^1.1",
-                "squizlabs/php_codesniffer": "~2.2",
-                "symfony/yaml": "^2.8 || ^3.1 || ^4.0"
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-mail": "^2.6",
+                "phpunit/phpunit": "^5.7.21 || ^6.3"
             },
             "suggest": {
-                "pdepend/pdepend": "PHP version of JDepend",
-                "pear/archive_tar": "Tar file management class",
-                "pear/versioncontrol_git": "A library that provides OO interface to handle Git repository",
-                "pear/versioncontrol_svn": "A simple OO-style interface for Subversion, the free/open-source version control system",
-                "phpdocumentor/phpdocumentor": "Documentation Generator for PHP",
-                "phploc/phploc": "A tool for quickly measuring the size of a PHP project",
-                "phpmd/phpmd": "PHP version of PMD tool",
-                "phpunit/php-code-coverage": "Library that provides collection, processing, and rendering functionality for PHP code coverage information",
-                "phpunit/phpunit": "The PHP Unit Testing Framework",
-                "sebastian/phpcpd": "Copy/Paste Detector (CPD) for PHP code",
-                "siad007/versioncontrol_hg": "A library for interfacing with Mercurial repositories.",
-                "tedivm/jshrink": "Javascript Minifier built in PHP"
+                "laminas/laminas-mail": "Laminas\\Mail component"
             },
-            "bin": [
-                "bin/phing"
-            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.16.x-dev"
+                    "dev-master": "2.7.x-dev",
+                    "dev-develop": "2.8.x-dev"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "classes/phing/"
-                ]
+                "psr-4": {
+                    "Laminas\\Mime\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": [
-                "classes"
-            ],
             "license": [
-                "LGPL-3.0-only"
-            ],
-            "authors": [
-                {
-                    "name": "Michiel Rook",
-                    "email": "mrook@php.net"
-                },
-                {
-                    "name": "Phing Community",
-                    "homepage": "https://www.phing.info/trac/wiki/Development/Contributors"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "PHing Is Not GNU make; it's a PHP project build system or build tool based on Apache Ant.",
-            "homepage": "https://www.phing.info/",
+            "description": "Create and parse MIME messages and parts",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "build",
-                "phing",
-                "task",
-                "tool"
+                "laminas",
+                "mime"
             ],
-            "time": "2020-01-03T10:18:48+00:00"
+            "time": "2019-12-31T17:25:27+00:00"
         },
         {
-            "name": "psr/cache",
-            "version": "1.0.1",
+            "name": "laminas/laminas-modulemanager",
+            "version": "2.8.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/cache.git",
-                "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
+                "url": "https://github.com/laminas/laminas-modulemanager.git",
+                "reference": "92b1cde1aab5aef687b863face6dd5d9c6751c78"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
-                "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
+                "url": "https://api.github.com/repos/laminas/laminas-modulemanager/zipball/92b1cde1aab5aef687b863face6dd5d9c6751c78",
+                "reference": "92b1cde1aab5aef687b863face6dd5d9c6751c78",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "laminas/laminas-config": "^3.1 || ^2.6",
+                "laminas/laminas-eventmanager": "^3.2 || ^2.6.3",
+                "laminas/laminas-stdlib": "^3.1 || ^2.7",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-modulemanager": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-console": "^2.6",
+                "laminas/laminas-di": "^2.6",
+                "laminas/laminas-loader": "^2.5",
+                "laminas/laminas-mvc": "^3.0 || ^2.7",
+                "laminas/laminas-servicemanager": "^3.0.3 || ^2.7.5",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.16"
+            },
+            "suggest": {
+                "laminas/laminas-console": "Laminas\\Console component",
+                "laminas/laminas-loader": "Laminas\\Loader component if you are not using Composer autoloading for your modules",
+                "laminas/laminas-mvc": "Laminas\\Mvc component",
+                "laminas/laminas-servicemanager": "Laminas\\ServiceManager component"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "2.8.x-dev",
+                    "dev-develop": "2.9.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Cache\\": "src/"
+                    "Laminas\\ModuleManager\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "Common interface for caching libraries",
+            "description": "Modular application system for laminas-mvc applications",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "cache",
-                "psr",
-                "psr-6"
+                "laminas",
+                "modulemanager"
             ],
-            "time": "2016-08-06T20:24:11+00:00"
+            "time": "2019-12-31T17:26:56+00:00"
         },
         {
-            "name": "psr/container",
-            "version": "1.0.0",
+            "name": "laminas/laminas-mvc",
+            "version": "3.1.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/container.git",
-                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+                "url": "https://github.com/laminas/laminas-mvc.git",
+                "reference": "ead09f8ab5ff0e562dbd0198c7f67523c2f61980"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
-                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "url": "https://api.github.com/repos/laminas/laminas-mvc/zipball/ead09f8ab5ff0e562dbd0198c7f67523c2f61980",
+                "reference": "ead09f8ab5ff0e562dbd0198c7f67523c2f61980",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "container-interop/container-interop": "^1.2",
+                "laminas/laminas-eventmanager": "^3.2",
+                "laminas/laminas-http": "^2.7",
+                "laminas/laminas-modulemanager": "^2.8",
+                "laminas/laminas-router": "^3.0.2",
+                "laminas/laminas-servicemanager": "^3.3",
+                "laminas/laminas-stdlib": "^3.1",
+                "laminas/laminas-view": "^2.9",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-mvc": "self.version"
+            },
+            "require-dev": {
+                "http-interop/http-middleware": "^0.4.1",
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-json": "^2.6.1 || ^3.0",
+                "laminas/laminas-psr7bridge": "^1.0",
+                "laminas/laminas-stratigility": "^2.0.1",
+                "phpunit/phpunit": "^6.4.4 || ^5.7.14"
+            },
+            "suggest": {
+                "http-interop/http-middleware": "^0.4.1 to be used together with laminas-stratigility",
+                "laminas/laminas-json": "(^2.6.1 || ^3.0) To auto-deserialize JSON body content in AbstractRestfulController extensions, when json_decode is unavailable",
+                "laminas/laminas-log": "^2.9.1  To provide log functionality via LogFilterManager, LogFormatterManager, and LogProcessorManager",
+                "laminas/laminas-mvc-console": "laminas-mvc-console provides the ability to expose laminas-mvc as a console application",
+                "laminas/laminas-mvc-i18n": "laminas-mvc-i18n provides integration with laminas-i18n, including a translation bridge and translatable route segments",
+                "laminas/laminas-mvc-plugin-fileprg": "To provide Post/Redirect/Get functionality around forms that container file uploads",
+                "laminas/laminas-mvc-plugin-flashmessenger": "To provide flash messaging capabilities between requests",
+                "laminas/laminas-mvc-plugin-identity": "To access the authenticated identity (per laminas-authentication) in controllers",
+                "laminas/laminas-mvc-plugin-prg": "To provide Post/Redirect/Get functionality within controllers",
+                "laminas/laminas-paginator": "^2.7 To provide pagination functionality via PaginatorPluginManager",
+                "laminas/laminas-psr7bridge": "(^0.2) To consume PSR-7 middleware within the MVC workflow",
+                "laminas/laminas-servicemanager-di": "laminas-servicemanager-di provides utilities for integrating laminas-di and laminas-servicemanager in your laminas-mvc application",
+                "laminas/laminas-stratigility": "laminas-stratigility is required to use middleware pipes in the MiddlewareListener"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "3.1-dev",
+                    "dev-develop": "3.2-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Container\\": "src/"
+                    "Laminas\\Mvc\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "Common Container Interface (PHP FIG PSR-11)",
-            "homepage": "https://github.com/php-fig/container",
+            "description": "Laminas's event-driven MVC layer, including MVC Applications, Controllers, and Plugins",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "PSR-11",
-                "container",
-                "container-interface",
-                "container-interop",
-                "psr"
+                "laminas",
+                "mvc"
             ],
-            "time": "2017-02-14T16:28:37+00:00"
+            "time": "2019-12-31T17:33:14+00:00"
         },
         {
-            "name": "psr/log",
-            "version": "1.1.2",
+            "name": "laminas/laminas-mvc-console",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
+                "url": "https://github.com/laminas/laminas-mvc-console.git",
+                "reference": "0c16223557fdb9bba853f6de22e1040824c1c966"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
-                "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
+                "url": "https://api.github.com/repos/laminas/laminas-mvc-console/zipball/0c16223557fdb9bba853f6de22e1040824c1c966",
+                "reference": "0c16223557fdb9bba853f6de22e1040824c1c966",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "container-interop/container-interop": "^1.1",
+                "laminas/laminas-console": "^2.6",
+                "laminas/laminas-eventmanager": "^2.6.2 || ^3.0",
+                "laminas/laminas-modulemanager": "^2.7.1",
+                "laminas/laminas-mvc": "^3.0.3",
+                "laminas/laminas-router": "^3.0",
+                "laminas/laminas-servicemanager": "^2.7.5 || ^3.0.3",
+                "laminas/laminas-stdlib": "^2.7.5 || ^3.0",
+                "laminas/laminas-text": "^2.6",
+                "laminas/laminas-view": "^2.6.3",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "conflict": {
+                "laminas/laminas-mvc": "<3.0.0"
+            },
+            "replace": {
+                "zendframework/zend-mvc-console": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-filter": "^2.6.1",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4"
+            },
+            "suggest": {
+                "laminas/laminas-filter": "^2.6.1, to filter rendered results"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.1.x-dev"
+                    "dev-master": "1.2.x-dev",
+                    "dev-develop": "1.3.x-dev"
+                },
+                "laminas": {
+                    "component": "Laminas\\Mvc\\Console"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Log\\": "Psr/Log/"
+                    "Laminas\\Mvc\\Console\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "Common interface for logging libraries",
-            "homepage": "https://github.com/php-fig/log",
+            "description": "Integration between laminas-mvc and laminas-console",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "log",
-                "psr",
-                "psr-3"
+                "console",
+                "laminas",
+                "mvc"
             ],
-            "time": "2019-11-01T11:05:21+00:00"
+            "time": "2019-12-31T17:33:37+00:00"
         },
         {
-            "name": "psr/simple-cache",
-            "version": "1.0.1",
+            "name": "laminas/laminas-mvc-i18n",
+            "version": "1.1.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/simple-cache.git",
-                "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
+                "url": "https://github.com/laminas/laminas-mvc-i18n.git",
+                "reference": "4184f6572b5244a5f5781604f1e03d7955e304a0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
-                "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+                "url": "https://api.github.com/repos/laminas/laminas-mvc-i18n/zipball/4184f6572b5244a5f5781604f1e03d7955e304a0",
+                "reference": "4184f6572b5244a5f5781604f1e03d7955e304a0",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "container-interop/container-interop": "^1.1",
+                "laminas/laminas-i18n": "^2.7",
+                "laminas/laminas-router": "^3.0",
+                "laminas/laminas-servicemanager": "^2.7.10 || ^3.0.3",
+                "laminas/laminas-stdlib": "^2.7.6 || ^3.0",
+                "laminas/laminas-validator": "^2.6",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "conflict": {
+                "laminas/laminas-mvc": "<3.0.0",
+                "phpspec/prophecy": "<1.8.0"
+            },
+            "replace": {
+                "zendframework/zend-mvc-i18n": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-cache": "^2.6.1",
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.5"
+            },
+            "suggest": {
+                "laminas/laminas-cache": "To enable caching of translation strings"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev",
+                    "dev-develop": "1.2.x-dev"
+                },
+                "laminas": {
+                    "component": "Laminas\\Mvc\\I18n",
+                    "config-provider": "Laminas\\Mvc\\I18n\\ConfigProvider"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\SimpleCache\\": "src/"
+                    "Laminas\\Mvc\\I18n\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "Common interfaces for simple caching",
+            "description": "Integration between laminas-mvc and laminas-i18n",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "cache",
-                "caching",
-                "psr",
-                "psr-16",
-                "simple-cache"
+                "i18n",
+                "laminas",
+                "mvc"
             ],
-            "time": "2017-10-23T01:57:42+00:00"
+            "time": "2019-12-31T17:33:41+00:00"
         },
         {
-            "name": "serialssolutions/summon",
-            "version": "v1.2.0",
+            "name": "laminas/laminas-mvc-plugin-flashmessenger",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/summon/Summon.php.git",
-                "reference": "d12150c53585e9b4275888754846da81c12acd71"
+                "url": "https://github.com/laminas/laminas-mvc-plugin-flashmessenger.git",
+                "reference": "f5a522c3aab215a9b89a0630beb91582f4a3f202"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laminas/laminas-mvc-plugin-flashmessenger/zipball/f5a522c3aab215a9b89a0630beb91582f4a3f202",
+                "reference": "f5a522c3aab215a9b89a0630beb91582f4a3f202",
+                "shasum": ""
+            },
+            "require": {
+                "laminas/laminas-mvc": "^3.0",
+                "laminas/laminas-session": "^2.8.5",
+                "laminas/laminas-stdlib": "^3.2.1",
+                "laminas/laminas-view": "^2.10",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
             },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/summon/Summon.php/zipball/d12150c53585e9b4275888754846da81c12acd71",
-                "reference": "d12150c53585e9b4275888754846da81c12acd71",
-                "shasum": ""
+            "conflict": {
+                "laminas/laminas-mvc": "<3.0.0"
+            },
+            "replace": {
+                "zendframework/zend-mvc-plugin-flashmessenger": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-i18n": "^2.8",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2.x-dev",
+                    "dev-develop": "1.3.x-dev"
+                },
+                "laminas": {
+                    "component": "Laminas\\Mvc\\Plugin\\FlashMessenger"
+                }
+            },
             "autoload": {
-                "psr-0": {
-                    "SerialsSolutions": ""
+                "psr-4": {
+                    "Laminas\\Mvc\\Plugin\\FlashMessenger\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "GPL-2.0"
+                "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Demian Katz",
-                    "email": "demian.katz@villanova.edu"
-                }
+            "description": "Plugin for creating and exposing flash messages via laminas-mvc controllers",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "laminas",
+                "mvc"
             ],
-            "description": "Library for interacting with Serials Solutions' Summon API.",
-            "time": "2018-07-18T14:28:58+00:00"
+            "time": "2019-12-31T17:33:46+00:00"
         },
         {
-            "name": "swagger-api/swagger-ui",
-            "version": "v2.2.10",
+            "name": "laminas/laminas-paginator",
+            "version": "2.8.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/swagger-api/swagger-ui.git",
-                "reference": "64dc3060b3700b12e466f8d67b7d7ec3574b015f"
+                "url": "https://github.com/laminas/laminas-paginator.git",
+                "reference": "5e53d927776b2d20e420bc2b289fa0c364a6b0bd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/64dc3060b3700b12e466f8d67b7d7ec3574b015f",
-                "reference": "64dc3060b3700b12e466f8d67b7d7ec3574b015f",
+                "url": "https://api.github.com/repos/laminas/laminas-paginator/zipball/5e53d927776b2d20e420bc2b289fa0c364a6b0bd",
+                "reference": "5e53d927776b2d20e420bc2b289fa0c364a6b0bd",
                 "shasum": ""
             },
+            "require": {
+                "laminas/laminas-stdlib": "^2.7 || ^3.0",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^7.0 || ^5.6"
+            },
+            "replace": {
+                "zendframework/zend-paginator": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-cache": "^2.6.1",
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-config": "^2.6.0",
+                "laminas/laminas-db": "^2.9.2",
+                "laminas/laminas-filter": "^2.6.1",
+                "laminas/laminas-json": "^2.6.1",
+                "laminas/laminas-servicemanager": "^2.7.5 || ^3.0.3",
+                "laminas/laminas-view": "^2.6.3",
+                "phpunit/phpunit": "^6.2.1 || ^5.7.15"
+            },
+            "suggest": {
+                "laminas/laminas-cache": "Laminas\\Cache component to support cache features",
+                "laminas/laminas-db": "Laminas\\Db component",
+                "laminas/laminas-filter": "Laminas\\Filter component",
+                "laminas/laminas-json": "Laminas\\Json component",
+                "laminas/laminas-servicemanager": "Laminas\\ServiceManager component",
+                "laminas/laminas-view": "Laminas\\View component"
+            },
             "type": "library",
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "Tony Tam",
-                    "email": "fehguy@gmail.com"
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.8.x-dev",
+                    "dev-develop": "2.9.x-dev"
                 },
-                {
-                    "name": "Mohsen Azimi",
-                    "email": "me@azimi.me"
+                "laminas": {
+                    "component": "Laminas\\Paginator",
+                    "config-provider": "Laminas\\Paginator\\ConfigProvider"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Laminas\\Paginator\\": "src/"
                 }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
             ],
-            "description": "Swagger UI is a dependency-free collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API",
-            "homepage": "http://swagger.io",
+            "description": "Paginate collections of data from arbitrary sources",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "api",
-                "documentation",
-                "openapi",
-                "specification",
-                "swagger",
-                "ui"
+                "laminas",
+                "paginator"
             ],
-            "time": "2017-01-05T08:57:09+00:00"
+            "time": "2019-12-31T17:36:22+00:00"
         },
         {
-            "name": "symfony/inflector",
-            "version": "v4.4.4",
+            "name": "laminas/laminas-recaptcha",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/inflector.git",
-                "reference": "f419ab2853cc00471ffd7fc18e544b5f5a90adb1"
+                "url": "https://github.com/laminas/laminas-recaptcha.git",
+                "reference": "f84222c958c9784db8bcc5b37a8021e5ffcb9557"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/inflector/zipball/f419ab2853cc00471ffd7fc18e544b5f5a90adb1",
-                "reference": "f419ab2853cc00471ffd7fc18e544b5f5a90adb1",
+                "url": "https://api.github.com/repos/laminas/laminas-recaptcha/zipball/f84222c958c9784db8bcc5b37a8021e5ffcb9557",
+                "reference": "f84222c958c9784db8bcc5b37a8021e5ffcb9557",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/polyfill-ctype": "~1.8"
+                "laminas/laminas-http": "^2.5.4",
+                "laminas/laminas-json": "^2.6.1 || ^3.0",
+                "laminas/laminas-stdlib": "^3.2.1",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zendservice-recaptcha": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-config": "^2.0",
+                "laminas/laminas-validator": "^2.8.2",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.5"
+            },
+            "suggest": {
+                "laminas/laminas-validator": "~2.0, if using ReCaptcha's Mailhide API"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.4-dev"
+                    "dev-master": "3.2.x-dev",
+                    "dev-develop": "3.3.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Inflector\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Laminas\\ReCaptcha\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@gmail.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "Symfony Inflector Component",
-            "homepage": "https://symfony.com",
+            "description": "OOP wrapper for the ReCaptcha web service",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "inflection",
-                "pluralize",
-                "singularize",
-                "string",
-                "symfony",
-                "words"
+                "laminas",
+                "recaptcha"
             ],
-            "time": "2020-01-04T13:00:46+00:00"
+            "time": "2019-12-31T17:38:56+00:00"
         },
         {
-            "name": "symfony/options-resolver",
-            "version": "v4.4.4",
+            "name": "laminas/laminas-router",
+            "version": "3.3.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/options-resolver.git",
-                "reference": "9a02d6662660fe7bfadad63b5f0b0718d4c8b6b0"
+                "url": "https://github.com/laminas/laminas-router.git",
+                "reference": "c94f13f39dfbc4313efdbfcd9772487b4b009026"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/options-resolver/zipball/9a02d6662660fe7bfadad63b5f0b0718d4c8b6b0",
-                "reference": "9a02d6662660fe7bfadad63b5f0b0718d4c8b6b0",
+                "url": "https://api.github.com/repos/laminas/laminas-router/zipball/c94f13f39dfbc4313efdbfcd9772487b4b009026",
+                "reference": "c94f13f39dfbc4313efdbfcd9772487b4b009026",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3"
+                "container-interop/container-interop": "^1.2",
+                "laminas/laminas-http": "^2.8.1",
+                "laminas/laminas-servicemanager": "^2.7.8 || ^3.3",
+                "laminas/laminas-stdlib": "^3.2.1",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "conflict": {
+                "laminas/laminas-mvc": "<3.0.0"
+            },
+            "replace": {
+                "zendframework/zend-router": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-i18n": "^2.7.4",
+                "phpunit/phpunit": "^5.7.22 || ^6.4.1 || ^7.5.18"
+            },
+            "suggest": {
+                "laminas/laminas-i18n": "^2.7.4, if defining translatable HTTP path segments"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.4-dev"
+                    "dev-master": "3.3.x-dev",
+                    "dev-develop": "4.0.x-dev"
+                },
+                "laminas": {
+                    "component": "Laminas\\Router",
+                    "config-provider": "Laminas\\Router\\ConfigProvider"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\OptionsResolver\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Laminas\\Router\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "Symfony OptionsResolver Component",
-            "homepage": "https://symfony.com",
+            "description": "Flexible routing system for HTTP and console applications",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "config",
-                "configuration",
-                "options"
+                "laminas",
+                "mvc",
+                "routing"
             ],
-            "time": "2020-01-04T13:00:46+00:00"
+            "time": "2020-01-03T17:19:34+00:00"
         },
         {
-            "name": "symfony/polyfill-ctype",
-            "version": "v1.14.0",
+            "name": "laminas/laminas-serializer",
+            "version": "2.9.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38"
+                "url": "https://github.com/laminas/laminas-serializer.git",
+                "reference": "c1c9361f114271b0736db74e0083a919081af5e0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
-                "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
+                "url": "https://api.github.com/repos/laminas/laminas-serializer/zipball/c1c9361f114271b0736db74e0083a919081af5e0",
+                "reference": "c1c9361f114271b0736db74e0083a919081af5e0",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "laminas/laminas-json": "^2.5 || ^3.0",
+                "laminas/laminas-stdlib": "^2.7 || ^3.0",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-serializer": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-math": "^2.6 || ^3.0",
+                "laminas/laminas-servicemanager": "^2.7.5 || ^3.0.3",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.16"
             },
             "suggest": {
-                "ext-ctype": "For best performance"
+                "laminas/laminas-math": "(^2.6 || ^3.0) To support Python Pickle serialization",
+                "laminas/laminas-servicemanager": "(^2.7.5 || ^3.0.3) To support plugin manager support"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.14-dev"
+                    "dev-master": "2.9.x-dev",
+                    "dev-develop": "2.10.x-dev"
+                },
+                "laminas": {
+                    "component": "Laminas\\Serializer",
+                    "config-provider": "Laminas\\Serializer\\ConfigProvider"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Polyfill\\Ctype\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
+                    "Laminas\\Serializer\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Gert de Pagter",
-                    "email": "BackEndTea@gmail.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "Symfony polyfill for ctype functions",
-            "homepage": "https://symfony.com",
+            "description": "Serialize and deserialize PHP structures to a variety of representations",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "compatibility",
-                "ctype",
-                "polyfill",
-                "portable"
+                "laminas",
+                "serializer"
             ],
-            "time": "2020-01-13T11:15:53+00:00"
+            "time": "2019-12-31T17:42:11+00:00"
         },
         {
-            "name": "symfony/polyfill-mbstring",
-            "version": "v1.14.0",
+            "name": "laminas/laminas-server",
+            "version": "2.8.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2"
+                "url": "https://github.com/laminas/laminas-server.git",
+                "reference": "4aaca9174c40a2fab2e2aa77999da99f71bdd88e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2",
-                "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2",
+                "url": "https://api.github.com/repos/laminas/laminas-server/zipball/4aaca9174c40a2fab2e2aa77999da99f71bdd88e",
+                "reference": "4aaca9174c40a2fab2e2aa77999da99f71bdd88e",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "laminas/laminas-code": "^2.5 || ^3.0",
+                "laminas/laminas-stdlib": "^2.5 || ^3.0",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
             },
-            "suggest": {
-                "ext-mbstring": "For best performance"
+            "replace": {
+                "zendframework/zend-server": "self.version"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.14-dev"
+                    "dev-master": "2.8.x-dev",
+                    "dev-develop": "2.9.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
+                    "Laminas\\Server\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "Symfony polyfill for the Mbstring extension",
-            "homepage": "https://symfony.com",
+            "description": "Create Reflection-based RPC servers",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "compatibility",
-                "mbstring",
-                "polyfill",
-                "portable",
-                "shim"
+                "laminas",
+                "server"
             ],
-            "time": "2020-01-13T11:15:53+00:00"
+            "time": "2019-12-31T17:43:03+00:00"
         },
         {
-            "name": "symfony/property-access",
-            "version": "v4.4.4",
+            "name": "laminas/laminas-servicemanager",
+            "version": "3.4.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/property-access.git",
-                "reference": "090b4bc92ded1ec512f7e2ed1691210769dffdb3"
+                "url": "https://github.com/laminas/laminas-servicemanager.git",
+                "reference": "044cb8e380682563fb277ed5f6de4f690e4e6239"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/property-access/zipball/090b4bc92ded1ec512f7e2ed1691210769dffdb3",
-                "reference": "090b4bc92ded1ec512f7e2ed1691210769dffdb3",
+                "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/044cb8e380682563fb277ed5f6de4f690e4e6239",
+                "reference": "044cb8e380682563fb277ed5f6de4f690e4e6239",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/inflector": "^3.4|^4.0|^5.0"
+                "container-interop/container-interop": "^1.2",
+                "laminas/laminas-stdlib": "^3.2.1",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0",
+                "psr/container": "^1.0"
+            },
+            "provide": {
+                "container-interop/container-interop-implementation": "^1.2",
+                "psr/container-implementation": "^1.0"
+            },
+            "replace": {
+                "zendframework/zend-servicemanager": "self.version"
             },
             "require-dev": {
-                "symfony/cache": "^3.4|^4.0|^5.0"
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "mikey179/vfsstream": "^1.6.5",
+                "ocramius/proxy-manager": "^1.0 || ^2.0",
+                "phpbench/phpbench": "^0.13.0",
+                "phpunit/phpunit": "^5.7.25 || ^6.4.4"
             },
             "suggest": {
-                "psr/cache-implementation": "To cache access methods."
+                "laminas/laminas-stdlib": "laminas-stdlib ^2.5 if you wish to use the MergeReplaceKey or MergeRemoveKey features in Config instances",
+                "ocramius/proxy-manager": "ProxyManager 1.* to handle lazy initialization of services"
             },
+            "bin": [
+                "bin/generate-deps-for-config-factory",
+                "bin/generate-factory-for-class"
+            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.4-dev"
+                    "dev-master": "3.3-dev",
+                    "dev-develop": "4.0-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\PropertyAccess\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Laminas\\ServiceManager\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "Symfony PropertyAccess Component",
-            "homepage": "https://symfony.com",
+            "description": "Factory-Driven Dependency Injection Container",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "access",
-                "array",
-                "extraction",
-                "index",
-                "injection",
-                "object",
-                "property",
-                "property path",
-                "reflection"
+                "PSR-11",
+                "dependency-injection",
+                "di",
+                "dic",
+                "laminas",
+                "service-manager",
+                "servicemanager"
             ],
-            "time": "2020-01-04T13:00:46+00:00"
+            "time": "2019-12-31T17:44:47+00:00"
         },
         {
-            "name": "symfony/yaml",
-            "version": "v3.4.36",
+            "name": "laminas/laminas-session",
+            "version": "2.9.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/yaml.git",
-                "reference": "dab657db15207879217fc81df4f875947bf68804"
+                "url": "https://github.com/laminas/laminas-session.git",
+                "reference": "60b5cc844e09627d4f1a2a547e13268f376ccb3d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/dab657db15207879217fc81df4f875947bf68804",
-                "reference": "dab657db15207879217fc81df4f875947bf68804",
+                "url": "https://api.github.com/repos/laminas/laminas-session/zipball/60b5cc844e09627d4f1a2a547e13268f376ccb3d",
+                "reference": "60b5cc844e09627d4f1a2a547e13268f376ccb3d",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-ctype": "~1.8"
+                "laminas/laminas-eventmanager": "^2.6.2 || ^3.0",
+                "laminas/laminas-stdlib": "^3.2.1",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
             },
-            "conflict": {
-                "symfony/console": "<3.4"
+            "replace": {
+                "zendframework/zend-session": "self.version"
             },
             "require-dev": {
-                "symfony/console": "~3.4|~4.0"
+                "container-interop/container-interop": "^1.1",
+                "laminas/laminas-cache": "^2.6.1",
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-db": "^2.7",
+                "laminas/laminas-http": "^2.5.4",
+                "laminas/laminas-servicemanager": "^2.7.5 || ^3.0.3",
+                "laminas/laminas-validator": "^2.6",
+                "mongodb/mongodb": "^1.0.1",
+                "php-mock/php-mock-phpunit": "^1.1.2 || ^2.0",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.16"
             },
             "suggest": {
-                "symfony/console": "For validating YAML files using the lint command"
+                "laminas/laminas-cache": "Laminas\\Cache component",
+                "laminas/laminas-db": "Laminas\\Db component",
+                "laminas/laminas-http": "Laminas\\Http component",
+                "laminas/laminas-servicemanager": "Laminas\\ServiceManager component",
+                "laminas/laminas-validator": "Laminas\\Validator component",
+                "mongodb/mongodb": "If you want to use the MongoDB session save handler"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "2.9.x-dev",
+                    "dev-develop": "2.10.x-dev"
+                },
+                "laminas": {
+                    "component": "Laminas\\Session",
+                    "config-provider": "Laminas\\Session\\ConfigProvider"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Yaml\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Laminas\\Session\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
+            "description": "Object-oriented interface to PHP sessions and storage",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "laminas",
+                "session"
             ],
-            "description": "Symfony Yaml Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-10-24T15:33:53+00:00"
+            "time": "2019-12-31T17:46:59+00:00"
         },
         {
-            "name": "true/punycode",
-            "version": "v2.1.1",
+            "name": "laminas/laminas-soap",
+            "version": "2.8.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/true/php-punycode.git",
-                "reference": "a4d0c11a36dd7f4e7cd7096076cab6d3378a071e"
+                "url": "https://github.com/laminas/laminas-soap.git",
+                "reference": "34f91d5c4c0a78bc5689cca2d1eaf829b27edd72"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/true/php-punycode/zipball/a4d0c11a36dd7f4e7cd7096076cab6d3378a071e",
-                "reference": "a4d0c11a36dd7f4e7cd7096076cab6d3378a071e",
+                "url": "https://api.github.com/repos/laminas/laminas-soap/zipball/34f91d5c4c0a78bc5689cca2d1eaf829b27edd72",
+                "reference": "34f91d5c4c0a78bc5689cca2d1eaf829b27edd72",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0",
-                "symfony/polyfill-mbstring": "^1.3"
+                "ext-soap": "*",
+                "laminas/laminas-server": "^2.6.1",
+                "laminas/laminas-stdlib": "^2.7 || ^3.0",
+                "laminas/laminas-uri": "^2.5.2",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-soap": "self.version"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.7",
-                "squizlabs/php_codesniffer": "~2.0"
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-config": "^2.6",
+                "laminas/laminas-http": "^2.5.4",
+                "phpunit/phpunit": "^5.7.21 || ^6.3"
+            },
+            "suggest": {
+                "laminas/laminas-http": "Laminas\\Http component"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.7.x-dev",
+                    "dev-develop": "2.8.x-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "TrueBV\\": "src/"
+                    "Laminas\\Soap\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Renan Gonçalves",
-                    "email": "renan.saddam@gmail.com"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)",
-            "homepage": "https://github.com/true/php-punycode",
+            "homepage": "https://laminas.dev",
             "keywords": [
-                "idna",
-                "punycode"
+                "laminas",
+                "soap"
             ],
-            "time": "2016-11-16T10:37:54+00:00"
+            "time": "2019-12-31T17:48:49+00:00"
         },
         {
-            "name": "vufind-org/vufindcode",
-            "version": "v1.2",
+            "name": "laminas/laminas-stdlib",
+            "version": "3.2.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/vufind-org/vufindcode.git",
-                "reference": "df7f4d2188c9f2c654dfee69774b80b9d03b1ab4"
+                "url": "https://github.com/laminas/laminas-stdlib.git",
+                "reference": "2b18347625a2f06a1a485acfbc870f699dbe51c6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/vufind-org/vufindcode/zipball/df7f4d2188c9f2c654dfee69774b80b9d03b1ab4",
-                "reference": "df7f4d2188c9f2c654dfee69774b80b9d03b1ab4",
+                "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/2b18347625a2f06a1a485acfbc870f699dbe51c6",
+                "reference": "2b18347625a2f06a1a485acfbc870f699dbe51c6",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.0.8"
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "2.11.1",
-                "pear/http_request2": "2.3.0",
-                "phing/phing": "2.16.1",
-                "phploc/phploc": "4.0.1",
-                "phpmd/phpmd": "2.6.0",
-                "phpunit/phpunit": "6.5.8",
-                "sebastian/phpcpd": "3.0.1",
-                "squizlabs/php_codesniffer": "3.2.3"
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "phpbench/phpbench": "^0.13",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.2.x-dev",
+                    "dev-develop": "3.3.x-dev"
+                }
+            },
             "autoload": {
-                "psr-0": {
-                    "VuFindCode\\": "src/"
+                "psr-4": {
+                    "Laminas\\Stdlib\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "GPL-2.0"
+                "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Demian Katz",
-                    "email": "demian.katz@villanova.edu"
-                }
+            "description": "SPL extensions, array utilities, error handlers, and more",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "laminas",
+                "stdlib"
             ],
-            "description": "Classes for working with EANs, ISBNs and ISMNs (a VuFind support library)",
-            "homepage": "https://vufind.org/",
-            "time": "2019-11-07T14:29:07+00:00"
+            "time": "2019-12-31T17:51:15+00:00"
         },
         {
-            "name": "vufind-org/vufinddate",
-            "version": "v1.0.0",
+            "name": "laminas/laminas-text",
+            "version": "2.7.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/vufind-org/vufinddate.git",
-                "reference": "1bec5458b48d96fa8ff87123584042780f4c3c24"
+                "url": "https://github.com/laminas/laminas-text.git",
+                "reference": "3601b5eacb06ed0a12f658df860cc0f9613cf4db"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/vufind-org/vufinddate/zipball/1bec5458b48d96fa8ff87123584042780f4c3c24",
-                "reference": "1bec5458b48d96fa8ff87123584042780f4c3c24",
+                "url": "https://api.github.com/repos/laminas/laminas-text/zipball/3601b5eacb06ed0a12f658df860cc0f9613cf4db",
+                "reference": "3601b5eacb06ed0a12f658df860cc0f9613cf4db",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.0.8"
+                "laminas/laminas-servicemanager": "^2.7.5 || ^3.0.3",
+                "laminas/laminas-stdlib": "^2.7 || ^3.0",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-text": "self.version"
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "2.11.1",
-                "pear/http_request2": "2.3.0",
-                "phing/phing": "2.16.1",
-                "phploc/phploc": "4.0.1",
-                "phpmd/phpmd": "2.6.0",
-                "phpunit/phpunit": "6.5.8",
-                "sebastian/phpcpd": "3.0.1",
-                "squizlabs/php_codesniffer": "3.2.3"
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-config": "^2.6",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.7.x-dev",
+                    "dev-develop": "2.8.x-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "VuFind\\Date\\": "src/"
+                    "Laminas\\Text\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "GPL-2.0"
+                "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Demian Katz",
-                    "email": "demian.katz@villanova.edu"
-                }
+            "description": "Create FIGlets and text-based tables",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "laminas",
+                "text"
             ],
-            "description": "Date formatting tools for the VuFind project",
-            "homepage": "https://vufind.org/",
-            "time": "2018-05-23T19:59:10+00:00"
+            "time": "2019-12-31T17:54:52+00:00"
         },
         {
-            "name": "vufind-org/vufindharvest",
-            "version": "v2.4.1",
+            "name": "laminas/laminas-uri",
+            "version": "2.7.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/vufind-org/vufindharvest.git",
-                "reference": "6f914f42428ebd20b9132d21ff16d3bb5e6c128a"
+                "url": "https://github.com/laminas/laminas-uri.git",
+                "reference": "6be8ce19622f359b048ce4faebf1aa1bca73a7ff"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/vufind-org/vufindharvest/zipball/6f914f42428ebd20b9132d21ff16d3bb5e6c128a",
-                "reference": "6f914f42428ebd20b9132d21ff16d3bb5e6c128a",
+                "url": "https://api.github.com/repos/laminas/laminas-uri/zipball/6be8ce19622f359b048ce4faebf1aa1bca73a7ff",
+                "reference": "6be8ce19622f359b048ce4faebf1aa1bca73a7ff",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.0.8",
-                "zendframework/zend-console": ">=2.2",
-                "zendframework/zend-http": ">=2.2"
+                "laminas/laminas-escaper": "^2.5",
+                "laminas/laminas-validator": "^2.10",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-uri": "self.version"
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "2.11.1",
-                "pear/http_request2": "2.3.0",
-                "phing/phing": "2.16.1",
-                "phploc/phploc": "4.0.1",
-                "phpmd/phpmd": "2.6.0",
-                "phpunit/phpunit": "6.5.8",
-                "sebastian/phpcpd": "3.0.1",
-                "squizlabs/php_codesniffer": "3.2.3"
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.7.x-dev",
+                    "dev-develop": "2.8.x-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "VuFindHarvest\\": "src/"
+                    "Laminas\\Uri\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "GPL-2.0"
+                "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Demian Katz",
-                    "email": "demian.katz@villanova.edu",
-                    "role": "Maintainer"
-                }
+            "description": "A component that aids in manipulating and validating » Uniform Resource Identifiers (URIs)",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "laminas",
+                "uri"
             ],
-            "description": "VuFind Harvest Tools",
-            "homepage": "https://vufind.org/",
-            "time": "2019-09-13T12:56:58+00:00"
+            "time": "2019-12-31T17:56:00+00:00"
         },
         {
-            "name": "vufind-org/vufindhttp",
-            "version": "v2.3.0",
+            "name": "laminas/laminas-validator",
+            "version": "2.13.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/vufind-org/vufindhttp.git",
-                "reference": "f6516ae29ef60d6e99aaa53bd375fb894915ab2c"
+                "url": "https://github.com/laminas/laminas-validator.git",
+                "reference": "2a03c207d5ae038259f0abb588f64851cebdcb1a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/vufind-org/vufindhttp/zipball/f6516ae29ef60d6e99aaa53bd375fb894915ab2c",
-                "reference": "f6516ae29ef60d6e99aaa53bd375fb894915ab2c",
+                "url": "https://api.github.com/repos/laminas/laminas-validator/zipball/2a03c207d5ae038259f0abb588f64851cebdcb1a",
+                "reference": "2a03c207d5ae038259f0abb588f64851cebdcb1a",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.0.8",
-                "zendframework/zend-http": ">=2.2"
+                "container-interop/container-interop": "^1.1",
+                "laminas/laminas-stdlib": "^3.2.1",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^7.1"
+            },
+            "replace": {
+                "zendframework/zend-validator": "self.version"
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "2.11.1",
-                "pear/http_request2": "2.3.0",
-                "phing/phing": "2.16.1",
-                "phploc/phploc": "4.0.1",
-                "phpmd/phpmd": "2.6.0",
-                "phpunit/phpunit": "6.5.8",
-                "sebastian/phpcpd": "3.0.1",
-                "squizlabs/php_codesniffer": "3.2.3",
-                "zendframework/zend-uri": ">=2.2"
+                "laminas/laminas-cache": "^2.6.1",
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-config": "^2.6",
+                "laminas/laminas-db": "^2.7",
+                "laminas/laminas-filter": "^2.6",
+                "laminas/laminas-http": "^2.5.4",
+                "laminas/laminas-i18n": "^2.6",
+                "laminas/laminas-math": "^2.6",
+                "laminas/laminas-servicemanager": "^2.7.5 || ^3.0.3",
+                "laminas/laminas-session": "^2.8",
+                "laminas/laminas-uri": "^2.5",
+                "phpunit/phpunit": "^6.0.8 || ^5.7.15",
+                "psr/http-client": "^1.0",
+                "psr/http-factory": "^1.0",
+                "psr/http-message": "^1.0"
+            },
+            "suggest": {
+                "laminas/laminas-db": "Laminas\\Db component, required by the (No)RecordExists validator",
+                "laminas/laminas-filter": "Laminas\\Filter component, required by the Digits validator",
+                "laminas/laminas-i18n": "Laminas\\I18n component to allow translation of validation error messages",
+                "laminas/laminas-i18n-resources": "Translations of validator messages",
+                "laminas/laminas-math": "Laminas\\Math component, required by the Csrf validator",
+                "laminas/laminas-servicemanager": "Laminas\\ServiceManager component to allow using the ValidatorPluginManager and validator chains",
+                "laminas/laminas-session": "Laminas\\Session component, ^2.8; required by the Csrf validator",
+                "laminas/laminas-uri": "Laminas\\Uri component, required by the Uri and Sitemap\\Loc validators",
+                "psr/http-message": "psr/http-message, required when validating PSR-7 UploadedFileInterface instances via the Upload and UploadFile validators"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.13.x-dev",
+                    "dev-develop": "2.14.x-dev"
+                },
+                "laminas": {
+                    "component": "Laminas\\Validator",
+                    "config-provider": "Laminas\\Validator\\ConfigProvider"
+                }
+            },
             "autoload": {
-                "psr-0": {
-                    "VuFindHttp\\": "src/"
+                "psr-4": {
+                    "Laminas\\Validator\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "GPL-2.0"
+                "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "David Maus",
-                    "email": "maus@hab.de",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Demian Katz",
-                    "email": "demian.katz@villanova.edu",
-                    "role": "Maintainer"
-                }
+            "description": "Validation classes for a wide range of domains, and the ability to chain validators to create complex validation criteria",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "laminas",
+                "validator"
             ],
-            "description": "VuFind HTTP service library",
-            "homepage": "https://vufind.org/",
-            "time": "2019-10-23T13:22:49+00:00"
+            "time": "2019-12-31T17:57:49+00:00"
         },
         {
-            "name": "wikimedia/composer-merge-plugin",
-            "version": "v1.4.1",
+            "name": "laminas/laminas-view",
+            "version": "2.11.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/wikimedia/composer-merge-plugin.git",
-                "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100"
+                "url": "https://github.com/laminas/laminas-view.git",
+                "reference": "d41a02f8e210b966fdb5351441344bed29e1989f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/81c6ac72a24a67383419c7eb9aa2b3437f2ab100",
-                "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100",
+                "url": "https://api.github.com/repos/laminas/laminas-view/zipball/d41a02f8e210b966fdb5351441344bed29e1989f",
+                "reference": "d41a02f8e210b966fdb5351441344bed29e1989f",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0",
-                "php": ">=5.3.2"
+                "laminas/laminas-eventmanager": "^2.6.2 || ^3.0",
+                "laminas/laminas-json": "^2.6.1 || ^3.0",
+                "laminas/laminas-loader": "^2.5",
+                "laminas/laminas-stdlib": "^2.7 || ^3.0",
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zend-view": "self.version"
             },
             "require-dev": {
-                "composer/composer": "~1.0.0",
-                "jakub-onderka/php-parallel-lint": "~0.8",
-                "phpunit/phpunit": "~4.8|~5.0",
-                "squizlabs/php_codesniffer": "~2.1.0"
+                "laminas/laminas-authentication": "^2.5",
+                "laminas/laminas-cache": "^2.6.1",
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "laminas/laminas-config": "^2.6",
+                "laminas/laminas-console": "^2.6",
+                "laminas/laminas-escaper": "^2.5",
+                "laminas/laminas-feed": "^2.7",
+                "laminas/laminas-filter": "^2.6.1",
+                "laminas/laminas-http": "^2.5.4",
+                "laminas/laminas-i18n": "^2.6",
+                "laminas/laminas-log": "^2.7",
+                "laminas/laminas-modulemanager": "^2.7.1",
+                "laminas/laminas-mvc": "^2.7.14 || ^3.0",
+                "laminas/laminas-navigation": "^2.5",
+                "laminas/laminas-paginator": "^2.5",
+                "laminas/laminas-permissions-acl": "^2.6",
+                "laminas/laminas-router": "^3.0.1",
+                "laminas/laminas-serializer": "^2.6.1",
+                "laminas/laminas-servicemanager": "^2.7.5 || ^3.0.3",
+                "laminas/laminas-session": "^2.8.1",
+                "laminas/laminas-uri": "^2.5",
+                "phpunit/phpunit": "^5.7.15 || ^6.0.8"
             },
-            "type": "composer-plugin",
+            "suggest": {
+                "laminas/laminas-authentication": "Laminas\\Authentication component",
+                "laminas/laminas-escaper": "Laminas\\Escaper component",
+                "laminas/laminas-feed": "Laminas\\Feed component",
+                "laminas/laminas-filter": "Laminas\\Filter component",
+                "laminas/laminas-http": "Laminas\\Http component",
+                "laminas/laminas-i18n": "Laminas\\I18n component",
+                "laminas/laminas-mvc": "Laminas\\Mvc component",
+                "laminas/laminas-mvc-plugin-flashmessenger": "laminas-mvc-plugin-flashmessenger component, if you want to use the FlashMessenger view helper with laminas-mvc versions 3 and up",
+                "laminas/laminas-navigation": "Laminas\\Navigation component",
+                "laminas/laminas-paginator": "Laminas\\Paginator component",
+                "laminas/laminas-permissions-acl": "Laminas\\Permissions\\Acl component",
+                "laminas/laminas-servicemanager": "Laminas\\ServiceManager component",
+                "laminas/laminas-uri": "Laminas\\Uri component"
+            },
+            "bin": [
+                "bin/templatemap_generator.php"
+            ],
+            "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.3.x-dev"
-                },
-                "class": "Wikimedia\\Composer\\MergePlugin"
+                    "dev-master": "2.11.x-dev",
+                    "dev-develop": "2.12.x-dev"
+                }
             },
             "autoload": {
                 "psr-4": {
-                    "Wikimedia\\Composer\\": "src/"
+                    "Laminas\\View\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Bryan Davis",
-                    "email": "bd808@wikimedia.org"
-                }
+            "description": "provides a system of helpers, output filters, and variable escaping",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "laminas",
+                "view"
             ],
-            "description": "Composer plugin to merge multiple composer.json files",
-            "time": "2017-04-25T02:31:25+00:00"
+            "time": "2019-12-31T18:03:19+00:00"
         },
         {
-            "name": "yajra/laravel-pdo-via-oci8",
-            "version": "v2.1.1",
+            "name": "laminas/laminas-xml",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/yajra/pdo-via-oci8.git",
-                "reference": "7295ed52a724887f66d01180a500ecdb76a22f4c"
+                "url": "https://github.com/laminas/laminas-xml.git",
+                "reference": "879cc66d1bba6a37705e98074f52a6960c220020"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/yajra/pdo-via-oci8/zipball/7295ed52a724887f66d01180a500ecdb76a22f4c",
-                "reference": "7295ed52a724887f66d01180a500ecdb76a22f4c",
+                "url": "https://api.github.com/repos/laminas/laminas-xml/zipball/879cc66d1bba6a37705e98074f52a6960c220020",
+                "reference": "879cc66d1bba6a37705e98074f52a6960c220020",
                 "shasum": ""
             },
+            "require": {
+                "laminas/laminas-zendframework-bridge": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "replace": {
+                "zendframework/zendxml": "self.version"
+            },
             "require-dev": {
-                "phpunit/phpunit": "^6.4"
+                "laminas/laminas-coding-standard": "~1.0.0",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0-dev"
+                    "dev-master": "1.2.x-dev",
+                    "dev-develop": "1.3.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Yajra\\": "src/"
+                    "Laminas\\Xml\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Arjay Angeles",
-                    "email": "aqangeles@gmail.com"
-                }
+            "description": "Utility library for XML usage, best practices, and security in PHP",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "laminas",
+                "security",
+                "xml"
             ],
-            "description": "PDO userspace driver proxying calls to PHP OCI8 driver",
-            "time": "2019-12-05T06:00:56+00:00"
+            "time": "2019-12-31T18:05:42+00:00"
         },
         {
-            "name": "zendframework/zend-cache",
-            "version": "2.9.0",
+            "name": "laminas/laminas-zendframework-bridge",
+            "version": "1.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-cache.git",
-                "reference": "cffd54a2dc4db094976d3b3f05e418a047cc9110"
+                "url": "https://github.com/laminas/laminas-zendframework-bridge.git",
+                "reference": "0fb9675b84a1666ab45182b6c5b29956921e818d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-cache/zipball/cffd54a2dc4db094976d3b3f05e418a047cc9110",
-                "reference": "cffd54a2dc4db094976d3b3f05e418a047cc9110",
+                "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/0fb9675b84a1666ab45182b6c5b29956921e818d",
+                "reference": "0fb9675b84a1666ab45182b6c5b29956921e818d",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "psr/cache": "^1.0",
-                "psr/simple-cache": "^1.0",
-                "zendframework/zend-eventmanager": "^2.6.3 || ^3.2",
-                "zendframework/zend-servicemanager": "^2.7.8 || ^3.3",
-                "zendframework/zend-stdlib": "^3.2.1"
-            },
-            "provide": {
-                "psr/cache-implementation": "1.0",
-                "psr/simple-cache-implementation": "1.0"
+                "php": "^5.6 || ^7.0"
             },
             "require-dev": {
-                "cache/integration-tests": "^0.16",
-                "phpbench/phpbench": "^0.13",
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-serializer": "^2.6",
-                "zendframework/zend-session": "^2.7.4"
-            },
-            "suggest": {
-                "ext-apc": "APC or compatible extension, to use the APC storage adapter",
-                "ext-apcu": "APCU >= 5.1.0, to use the APCu storage adapter",
-                "ext-dba": "DBA, to use the DBA storage adapter",
-                "ext-memcache": "Memcache >= 2.0.0 to use the Memcache storage adapter",
-                "ext-memcached": "Memcached >= 1.0.0 to use the Memcached storage adapter",
-                "ext-mongo": "Mongo, to use MongoDb storage adapter",
-                "ext-mongodb": "MongoDB, to use the ExtMongoDb storage adapter",
-                "ext-redis": "Redis, to use Redis storage adapter",
-                "ext-wincache": "WinCache, to use the WinCache storage adapter",
-                "ext-xcache": "XCache, to use the XCache storage adapter",
-                "mongodb/mongodb": "Required for use with the ext-mongodb adapter",
-                "mongofill/mongofill": "Alternative to ext-mongo - a pure PHP implementation designed as a drop in replacement",
-                "zendframework/zend-serializer": "Zend\\Serializer component",
-                "zendframework/zend-session": "Zend\\Session component"
+                "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1",
+                "squizlabs/php_codesniffer": "^3.5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.9.x-dev",
-                    "dev-develop": "2.10.x-dev"
+                    "dev-master": "1.0.x-dev",
+                    "dev-develop": "1.1.x-dev"
                 },
-                "zf": {
-                    "component": "Zend\\Cache",
-                    "config-provider": "Zend\\Cache\\ConfigProvider"
+                "laminas": {
+                    "module": "Laminas\\ZendFrameworkBridge"
                 }
             },
             "autoload": {
                 "files": [
-                    "autoload/patternPluginManagerPolyfill.php"
+                    "src/autoload.php"
                 ],
                 "psr-4": {
-                    "Zend\\Cache\\": "src/"
+                    "Laminas\\ZendFrameworkBridge\\": "src//"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "description": "Caching implementation with a variety of storage options, as well as codified caching strategies for callbacks, classes, and output",
+            "description": "Alias legacy ZF class names to Laminas Project equivalents.",
             "keywords": [
                 "ZendFramework",
-                "cache",
-                "psr-16",
-                "psr-6",
+                "autoloading",
+                "laminas",
                 "zf"
             ],
-            "abandoned": "laminas/laminas-cache",
-            "time": "2019-08-29T18:30:41+00:00"
+            "time": "2020-01-07T22:58:31+00:00"
         },
         {
-            "name": "zendframework/zend-captcha",
-            "version": "2.9.0",
+            "name": "league/commonmark",
+            "version": "1.3.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-captcha.git",
-                "reference": "4272f3d0cde0a1fa9135d0cbc4a629fb655391d3"
+                "url": "https://github.com/thephpleague/commonmark.git",
+                "reference": "8015f806173c6ee54de25a87c2d69736696e88db"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-captcha/zipball/4272f3d0cde0a1fa9135d0cbc4a629fb655391d3",
-                "reference": "4272f3d0cde0a1fa9135d0cbc4a629fb655391d3",
+                "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/8015f806173c6ee54de25a87c2d69736696e88db",
+                "reference": "8015f806173c6ee54de25a87c2d69736696e88db",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-math": "^2.7 || ^3.0",
-                "zendframework/zend-stdlib": "^3.2.1"
+                "ext-mbstring": "*",
+                "php": "^7.1"
             },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-session": "^2.8",
-                "zendframework/zend-text": "^2.6",
-                "zendframework/zend-validator": "^2.10.1",
-                "zendframework/zendservice-recaptcha": "^3.0"
+            "conflict": {
+                "scrutinizer/ocular": "1.7.*"
             },
-            "suggest": {
-                "zendframework/zend-i18n-resources": "Translations of captcha messages",
-                "zendframework/zend-session": "Zend\\Session component",
-                "zendframework/zend-text": "Zend\\Text component",
-                "zendframework/zend-validator": "Zend\\Validator component",
-                "zendframework/zendservice-recaptcha": "ZendService\\ReCaptcha component"
+            "require-dev": {
+                "cebe/markdown": "~1.0",
+                "commonmark/commonmark.js": "0.29.1",
+                "erusev/parsedown": "~1.0",
+                "ext-json": "*",
+                "github/gfm": "0.29.0",
+                "michelf/php-markdown": "~1.4",
+                "mikehaertl/php-shellcommand": "^1.4",
+                "phpstan/phpstan-shim": "^0.11.5",
+                "phpunit/phpunit": "^7.5",
+                "scrutinizer/ocular": "^1.5",
+                "symfony/finder": "^4.2"
             },
+            "bin": [
+                "bin/commonmark"
+            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.9.x-dev",
-                    "dev-develop": "2.10.x-dev"
+                    "dev-master": "1.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Captcha\\": "src/"
+                    "League\\CommonMark\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "description": "Generate and validate CAPTCHAs using Figlets, images, ReCaptcha, and more",
+            "authors": [
+                {
+                    "name": "Colin O'Dell",
+                    "email": "colinodell@gmail.com",
+                    "homepage": "https://www.colinodell.com",
+                    "role": "Lead Developer"
+                }
+            ],
+            "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)",
+            "homepage": "https://commonmark.thephpleague.com",
             "keywords": [
-                "ZendFramework",
-                "captcha",
-                "zf"
+                "commonmark",
+                "flavored",
+                "gfm",
+                "github",
+                "github-flavored",
+                "markdown",
+                "md",
+                "parser"
             ],
-            "abandoned": "laminas/laminas-captcha",
-            "time": "2019-06-18T09:32:52+00:00"
+            "time": "2020-02-28T18:53:50+00:00"
         },
         {
-            "name": "zendframework/zend-code",
-            "version": "3.4.1",
+            "name": "matthiasmullie/minify",
+            "version": "1.3.62",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-code.git",
-                "reference": "268040548f92c2bfcba164421c1add2ba43abaaa"
+                "url": "https://github.com/matthiasmullie/minify.git",
+                "reference": "47a53716f94139aff22922ffd73283ff04f23cdf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-code/zipball/268040548f92c2bfcba164421c1add2ba43abaaa",
-                "reference": "268040548f92c2bfcba164421c1add2ba43abaaa",
+                "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/47a53716f94139aff22922ffd73283ff04f23cdf",
+                "reference": "47a53716f94139aff22922ffd73283ff04f23cdf",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1",
-                "zendframework/zend-eventmanager": "^2.6 || ^3.0"
-            },
-            "conflict": {
-                "phpspec/prophecy": "<1.9.0"
+                "ext-pcre": "*",
+                "matthiasmullie/path-converter": "~1.1",
+                "php": ">=5.3.0"
             },
             "require-dev": {
-                "doctrine/annotations": "^1.7",
-                "ext-phar": "*",
-                "phpunit/phpunit": "^7.5.16 || ^8.4",
-                "zendframework/zend-coding-standard": "^1.0",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0"
+                "friendsofphp/php-cs-fixer": "~2.0",
+                "matthiasmullie/scrapbook": "~1.0",
+                "phpunit/phpunit": "~4.8"
             },
             "suggest": {
-                "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features",
-                "zendframework/zend-stdlib": "Zend\\Stdlib component"
+                "psr/cache-implementation": "Cache implementation to use with Minify::cache"
             },
+            "bin": [
+                "bin/minifycss",
+                "bin/minifyjs"
+            ],
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4.x-dev",
-                    "dev-develop": "3.5.x-dev",
-                    "dev-dev-4.0": "4.0.x-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Code\\": "src/"
+                    "MatthiasMullie\\Minify\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "Extensions to the PHP Reflection API, static code scanning, and code generation",
+            "authors": [
+                {
+                    "name": "Matthias Mullie",
+                    "email": "minify@mullie.eu",
+                    "homepage": "http://www.mullie.eu",
+                    "role": "Developer"
+                }
+            ],
+            "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.",
+            "homepage": "http://www.minifier.org",
             "keywords": [
-                "ZendFramework",
-                "code",
-                "zf"
+                "JS",
+                "css",
+                "javascript",
+                "minifier",
+                "minify"
             ],
-            "abandoned": "laminas/laminas-code",
-            "time": "2019-12-10T19:21:15+00:00"
+            "time": "2019-12-19T07:54:47+00:00"
         },
         {
-            "name": "zendframework/zend-config",
-            "version": "3.3.0",
+            "name": "matthiasmullie/path-converter",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-config.git",
-                "reference": "012341361ae3cc97a99959e7cb7c9ebd04d49572"
+                "url": "https://github.com/matthiasmullie/path-converter.git",
+                "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-config/zipball/012341361ae3cc97a99959e7cb7c9ebd04d49572",
-                "reference": "012341361ae3cc97a99959e7cb7c9ebd04d49572",
+                "url": "https://api.github.com/repos/matthiasmullie/path-converter/zipball/e7d13b2c7e2f2268e1424aaed02085518afa02d9",
+                "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9",
                 "shasum": ""
             },
             "require": {
-                "ext-json": "*",
-                "php": "^5.6 || ^7.0",
-                "psr/container": "^1.0",
-                "zendframework/zend-stdlib": "^2.7.7 || ^3.1"
-            },
-            "conflict": {
-                "container-interop/container-interop": "<1.2.0"
+                "ext-pcre": "*",
+                "php": ">=5.3.0"
             },
             "require-dev": {
-                "malukenho/docheader": "^0.1.6",
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-filter": "^2.7.2",
-                "zendframework/zend-i18n": "^2.7.4",
-                "zendframework/zend-servicemanager": "^2.7.8 || ^3.3"
-            },
-            "suggest": {
-                "zendframework/zend-filter": "^2.7.2; install if you want to use the Filter processor",
-                "zendframework/zend-i18n": "^2.7.4; install if you want to use the Translator processor",
-                "zendframework/zend-servicemanager": "^2.7.8 || ^3.3; if you need an extensible plugin manager for use with the Config Factory"
+                "phpunit/phpunit": "~4.8"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.3.x-dev",
-                    "dev-develop": "3.4.x-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Config\\": "src/"
+                    "MatthiasMullie\\PathConverter\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "provides a nested object property based user interface for accessing this configuration data within application code",
+            "authors": [
+                {
+                    "name": "Matthias Mullie",
+                    "email": "pathconverter@mullie.eu",
+                    "homepage": "http://www.mullie.eu",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Relative path converter",
+            "homepage": "http://github.com/matthiasmullie/path-converter",
             "keywords": [
-                "ZendFramework",
-                "config",
-                "zf"
+                "converter",
+                "path",
+                "paths",
+                "relative"
             ],
-            "abandoned": "laminas/laminas-config",
-            "time": "2019-06-08T18:58:54+00:00"
+            "time": "2019-02-05T23:41:09+00:00"
         },
         {
-            "name": "zendframework/zend-console",
-            "version": "2.8.0",
+            "name": "misd/linkify",
+            "version": "v1.1.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-console.git",
-                "reference": "95817ae78f73c48026972e350a2ecc31c6d9f9ae"
+                "url": "https://github.com/misd-service-development/php-linkify.git",
+                "reference": "3481b148806a23b4001712de645247a1a4dcc10a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-console/zipball/95817ae78f73c48026972e350a2ecc31c6d9f9ae",
-                "reference": "95817ae78f73c48026972e350a2ecc31c6d9f9ae",
+                "url": "https://api.github.com/repos/misd-service-development/php-linkify/zipball/3481b148806a23b4001712de645247a1a4dcc10a",
+                "reference": "3481b148806a23b4001712de645247a1a4dcc10a",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-stdlib": "^3.2.1"
+                "php": ">=5.3.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^5.7.23 || ^6.4.3",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-filter": "^2.7.2",
-                "zendframework/zend-json": "^2.6 || ^3.0",
-                "zendframework/zend-validator": "^2.10.1"
-            },
-            "suggest": {
-                "zendframework/zend-filter": "To support DefaultRouteMatcher usage",
-                "zendframework/zend-validator": "To support DefaultRouteMatcher usage"
+                "phpunit/phpunit": "^4.0 || ^5.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.8.x-dev",
-                    "dev-develop": "2.9.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Console\\": "src/"
+                    "Misd\\Linkify\\": "src/Misd/Linkify"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "Build console applications using getopt syntax or routing, complete with prompts",
+            "description": "Converts URLs and email addresses in text into HTML links",
+            "homepage": "https://github.com/misd-service-development/php-linkify",
             "keywords": [
-                "ZendFramework",
-                "console",
-                "zf"
+                "convert",
+                "email address",
+                "link",
+                "url"
             ],
-            "abandoned": "laminas/laminas-console",
-            "time": "2019-02-04T19:48:22+00:00"
+            "time": "2017-08-17T08:33:35+00:00"
         },
         {
-            "name": "zendframework/zend-crypt",
-            "version": "3.3.1",
+            "name": "myclabs/php-enum",
+            "version": "1.7.6",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-crypt.git",
-                "reference": "cf23da2731dabdbb916cf888f611fc0f123bd36b"
+                "url": "https://github.com/myclabs/php-enum.git",
+                "reference": "5f36467c7a87e20fbdc51e524fd8f9d1de80187c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-crypt/zipball/cf23da2731dabdbb916cf888f611fc0f123bd36b",
-                "reference": "cf23da2731dabdbb916cf888f611fc0f123bd36b",
+                "url": "https://api.github.com/repos/myclabs/php-enum/zipball/5f36467c7a87e20fbdc51e524fd8f9d1de80187c",
+                "reference": "5f36467c7a87e20fbdc51e524fd8f9d1de80187c",
                 "shasum": ""
             },
             "require": {
-                "container-interop/container-interop": "^1.2",
-                "ext-mbstring": "*",
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-math": "^3.0",
-                "zendframework/zend-stdlib": "^2.7.7 || ^3.1"
+                "ext-json": "*",
+                "php": ">=7.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2",
-                "zendframework/zend-coding-standard": "~1.0.0"
-            },
-            "suggest": {
-                "ext-openssl": "Required for most features of Zend\\Crypt"
+                "phpunit/phpunit": "^7",
+                "squizlabs/php_codesniffer": "1.*",
+                "vimeo/psalm": "^3.8"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.3.x-dev",
-                    "dev-develop": "3.4.x-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Crypt\\": "src/"
+                    "MyCLabs\\Enum\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "Strong cryptography tools and password hashing",
+            "authors": [
+                {
+                    "name": "PHP Enum contributors",
+                    "homepage": "https://github.com/myclabs/php-enum/graphs/contributors"
+                }
+            ],
+            "description": "PHP Enum implementation",
+            "homepage": "http://github.com/myclabs/php-enum",
             "keywords": [
-                "ZendFramework",
-                "crypt",
-                "zf"
+                "enum"
             ],
-            "abandoned": "laminas/laminas-crypt",
-            "time": "2019-05-14T20:19:53+00:00"
+            "time": "2020-02-14T08:15:52+00:00"
         },
         {
-            "name": "zendframework/zend-db",
-            "version": "2.10.1",
+            "name": "ocramius/package-versions",
+            "version": "1.4.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-db.git",
-                "reference": "312a6efdb6fd28acf9551cac977803407116bf06"
+                "url": "https://github.com/Ocramius/PackageVersions.git",
+                "reference": "44af6f3a2e2e04f2af46bcb302ad9600cba41c7d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-db/zipball/312a6efdb6fd28acf9551cac977803407116bf06",
-                "reference": "312a6efdb6fd28acf9551cac977803407116bf06",
+                "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/44af6f3a2e2e04f2af46bcb302ad9600cba41c7d",
+                "reference": "44af6f3a2e2e04f2af46bcb302ad9600cba41c7d",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0"
+                "composer-plugin-api": "^1.0.0",
+                "php": "^7.1.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^5.7.25 || ^6.4.4",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-eventmanager": "^2.6.2 || ^3.0",
-                "zendframework/zend-hydrator": "^1.1 || ^2.1 || ^3.0",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3"
-            },
-            "suggest": {
-                "zendframework/zend-eventmanager": "Zend\\EventManager component",
-                "zendframework/zend-hydrator": "Zend\\Hydrator component for using HydratingResultSets",
-                "zendframework/zend-servicemanager": "Zend\\ServiceManager component"
+                "composer/composer": "^1.6.3",
+                "doctrine/coding-standard": "^5.0.1",
+                "ext-zip": "*",
+                "infection/infection": "^0.7.1",
+                "phpunit/phpunit": "^7.5.17"
             },
-            "type": "library",
+            "type": "composer-plugin",
             "extra": {
+                "class": "PackageVersions\\Installer",
                 "branch-alias": {
-                    "dev-master": "2.10.x-dev",
-                    "dev-develop": "2.11.x-dev"
-                },
-                "zf": {
-                    "component": "Zend\\Db",
-                    "config-provider": "Zend\\Db\\ConfigProvider"
+                    "dev-master": "2.0.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Db\\": "src/"
+                    "PackageVersions\\": "src/PackageVersions"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "Database abstraction layer, SQL abstraction, result set abstraction, and RowDataGateway and TableDataGateway implementations",
-            "keywords": [
-                "ZendFramework",
-                "db",
-                "zf"
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com"
+                }
             ],
-            "abandoned": "laminas/laminas-db",
-            "time": "2019-12-31T17:54:17+00:00"
+            "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
+            "time": "2019-11-15T16:17:10+00:00"
         },
         {
-            "name": "zendframework/zend-dom",
-            "version": "2.7.2",
+            "name": "ocramius/proxy-manager",
+            "version": "2.1.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-dom.git",
-                "reference": "66b8459e6f2c0d62ff4f4b16f2b44afdfd466aa0"
+                "url": "https://github.com/Ocramius/ProxyManager.git",
+                "reference": "e18ac876b2e4819c76349de8f78ccc8ef1554cd7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-dom/zipball/66b8459e6f2c0d62ff4f4b16f2b44afdfd466aa0",
-                "reference": "66b8459e6f2c0d62ff4f4b16f2b44afdfd466aa0",
+                "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/e18ac876b2e4819c76349de8f78ccc8ef1554cd7",
+                "reference": "e18ac876b2e4819c76349de8f78ccc8ef1554cd7",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0"
+                "ocramius/package-versions": "^1.1.1",
+                "php": "^7.1.0",
+                "zendframework/zend-code": "^3.1.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^5.7.23 || ^6.4.3",
-                "zendframework/zend-coding-standard": "~1.0.0"
+                "couscous/couscous": "^1.5.2",
+                "ext-phar": "*",
+                "humbug/humbug": "dev-master@DEV",
+                "nikic/php-parser": "^3.0.4",
+                "phpbench/phpbench": "^0.12.2",
+                "phpstan/phpstan": "^0.6.4",
+                "phpunit/phpunit": "^5.6.4",
+                "phpunit/phpunit-mock-objects": "^3.4.1",
+                "squizlabs/php_codesniffer": "^2.7.0"
+            },
+            "suggest": {
+                "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects",
+                "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)",
+                "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)",
+                "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.7.x-dev",
-                    "dev-develop": "2.8.x-dev"
+                    "dev-master": "3.0.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Zend\\Dom\\": "src/"
+                "psr-0": {
+                    "ProxyManager\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "provides tools for working with DOM documents and structures",
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "http://ocramius.github.io/"
+                }
+            ],
+            "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies",
+            "homepage": "https://github.com/Ocramius/ProxyManager",
             "keywords": [
-                "ZendFramework",
-                "dom",
-                "zf"
+                "aop",
+                "lazy loading",
+                "proxy",
+                "proxy pattern",
+                "service proxies"
             ],
-            "abandoned": "laminas/laminas-dom",
-            "time": "2019-06-18T10:36:49+00:00"
+            "time": "2017-05-04T11:12:50+00:00"
         },
         {
-            "name": "zendframework/zend-escaper",
-            "version": "2.6.1",
+            "name": "oyejorge/less.php",
+            "version": "v1.7.0.14",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-escaper.git",
-                "reference": "3801caa21b0ca6aca57fa1c42b08d35c395ebd5f"
+                "url": "https://github.com/oyejorge/less.php.git",
+                "reference": "42925c5a01a07d67ca7e82dfc8fb31814d557bc9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/3801caa21b0ca6aca57fa1c42b08d35c395ebd5f",
-                "reference": "3801caa21b0ca6aca57fa1c42b08d35c395ebd5f",
+                "url": "https://api.github.com/repos/oyejorge/less.php/zipball/42925c5a01a07d67ca7e82dfc8fb31814d557bc9",
+                "reference": "42925c5a01a07d67ca7e82dfc8fb31814d557bc9",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0"
+                "php": ">=5.3"
             },
             "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2",
-                "zendframework/zend-coding-standard": "~1.0.0"
+                "phpunit/phpunit": "~4.8.24"
             },
+            "bin": [
+                "bin/lessc"
+            ],
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.6.x-dev",
-                    "dev-develop": "2.7.x-dev"
-                }
-            },
             "autoload": {
-                "psr-4": {
-                    "Zend\\Escaper\\": "src/"
-                }
+                "psr-0": {
+                    "Less": "lib/"
+                },
+                "classmap": [
+                    "lessc.inc.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Matt Agar",
+                    "homepage": "https://github.com/agar"
+                },
+                {
+                    "name": "Martin Jantošovič",
+                    "homepage": "https://github.com/Mordred"
+                },
+                {
+                    "name": "Josh Schmidt",
+                    "homepage": "https://github.com/oyejorge"
+                }
             ],
-            "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs",
+            "description": "PHP port of the Javascript version of LESS http://lesscss.org (Originally maintained by Josh Schmidt)",
+            "homepage": "http://lessphp.gpeasy.com",
             "keywords": [
-                "ZendFramework",
-                "escaper",
-                "zf"
+                "css",
+                "less",
+                "less.js",
+                "lesscss",
+                "php",
+                "stylesheet"
             ],
-            "abandoned": "laminas/laminas-escaper",
-            "time": "2019-09-05T20:03:20+00:00"
+            "abandoned": true,
+            "time": "2017-03-28T22:19:25+00:00"
         },
         {
-            "name": "zendframework/zend-eventmanager",
-            "version": "3.2.1",
+            "name": "paragonie/random_compat",
+            "version": "v9.99.99",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-eventmanager.git",
-                "reference": "a5e2583a211f73604691586b8406ff7296a946dd"
+                "url": "https://github.com/paragonie/random_compat.git",
+                "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/a5e2583a211f73604691586b8406ff7296a946dd",
-                "reference": "a5e2583a211f73604691586b8406ff7296a946dd",
+                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+                "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0"
+                "php": "^7"
             },
             "require-dev": {
-                "athletic/athletic": "^0.1",
-                "container-interop/container-interop": "^1.1.0",
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-stdlib": "^2.7.3 || ^3.0"
+                "phpunit/phpunit": "4.*|5.*",
+                "vimeo/psalm": "^1"
             },
             "suggest": {
-                "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature",
-                "zendframework/zend-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature"
+                "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.2-dev",
-                    "dev-develop": "3.3-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Zend\\EventManager\\": "src/"
-                }
-            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "Trigger and listen to events within a PHP application",
-            "homepage": "https://github.com/zendframework/zend-eventmanager",
+            "authors": [
+                {
+                    "name": "Paragon Initiative Enterprises",
+                    "email": "security@paragonie.com",
+                    "homepage": "https://paragonie.com"
+                }
+            ],
+            "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
             "keywords": [
-                "event",
-                "eventmanager",
-                "events",
-                "zf2"
+                "csprng",
+                "polyfill",
+                "pseudorandom",
+                "random"
             ],
-            "abandoned": "laminas/laminas-eventmanager",
-            "time": "2018-04-25T15:33:34+00:00"
+            "time": "2018-07-02T15:55:56+00:00"
         },
         {
-            "name": "zendframework/zend-feed",
-            "version": "2.12.0",
+            "name": "pear/archive_tar",
+            "version": "1.4.9",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-feed.git",
-                "reference": "d926c5af34b93a0121d5e2641af34ddb1533d733"
+                "url": "https://github.com/pear/Archive_Tar.git",
+                "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-feed/zipball/d926c5af34b93a0121d5e2641af34ddb1533d733",
-                "reference": "d926c5af34b93a0121d5e2641af34ddb1533d733",
+                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/c5b00053770e1d72128252c62c2c1a12c26639f0",
+                "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0",
                 "shasum": ""
             },
             "require": {
-                "ext-dom": "*",
-                "ext-libxml": "*",
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-escaper": "^2.5.2",
-                "zendframework/zend-stdlib": "^3.2.1"
+                "pear/pear-core-minimal": "^1.10.0alpha2",
+                "php": ">=5.2.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^5.7.23 || ^6.4.3",
-                "psr/http-message": "^1.0.1",
-                "zendframework/zend-cache": "^2.7.2",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-db": "^2.8.2",
-                "zendframework/zend-http": "^2.7",
-                "zendframework/zend-servicemanager": "^2.7.8 || ^3.3",
-                "zendframework/zend-validator": "^2.10.1"
+                "phpunit/phpunit": "*"
             },
             "suggest": {
-                "psr/http-message": "PSR-7 ^1.0.1, if you wish to use Zend\\Feed\\Reader\\Http\\Psr7ResponseDecorator",
-                "zendframework/zend-cache": "Zend\\Cache component, for optionally caching feeds between requests",
-                "zendframework/zend-db": "Zend\\Db component, for use with PubSubHubbub",
-                "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader",
-                "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for easily extending ExtensionManager implementations",
-                "zendframework/zend-validator": "Zend\\Validator component, for validating email addresses used in Atom feeds and entries when using the Writer subcomponent"
+                "ext-bz2": "Bz2 compression support.",
+                "ext-xz": "Lzma2 compression support.",
+                "ext-zlib": "Gzip compression support."
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.12.x-dev",
-                    "dev-develop": "2.13.x-dev"
+                    "dev-master": "1.4.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Zend\\Feed\\": "src/"
+                "psr-0": {
+                    "Archive_Tar": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
             "license": [
                 "BSD-3-Clause"
             ],
-            "description": "provides functionality for consuming RSS and Atom feeds",
+            "authors": [
+                {
+                    "name": "Vincent Blavet",
+                    "email": "vincent@phpconcept.net"
+                },
+                {
+                    "name": "Greg Beaver",
+                    "email": "greg@chiaraquartet.net"
+                },
+                {
+                    "name": "Michiel Rook",
+                    "email": "mrook@php.net"
+                }
+            ],
+            "description": "Tar file management class with compression support (gzip, bzip2, lzma2)",
+            "homepage": "https://github.com/pear/Archive_Tar",
             "keywords": [
-                "ZendFramework",
-                "feed",
-                "zf"
+                "archive",
+                "tar"
             ],
-            "abandoned": "laminas/laminas-feed",
-            "time": "2019-03-05T20:08:49+00:00"
+            "time": "2019-12-04T10:17:28+00:00"
         },
         {
-            "name": "zendframework/zend-filter",
-            "version": "2.9.2",
+            "name": "pear/console_getopt",
+            "version": "v1.4.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-filter.git",
-                "reference": "d78f2cdde1c31975e18b2a0753381ed7b61118ef"
+                "url": "https://github.com/pear/Console_Getopt.git",
+                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-filter/zipball/d78f2cdde1c31975e18b2a0753381ed7b61118ef",
-                "reference": "d78f2cdde1c31975e18b2a0753381ed7b61118ef",
+                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0",
+                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0",
                 "shasum": ""
             },
-            "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-stdlib": "^2.7.7 || ^3.1"
-            },
-            "conflict": {
-                "zendframework/zend-validator": "<2.10.1"
-            },
-            "require-dev": {
-                "pear/archive_tar": "^1.4.3",
-                "phpunit/phpunit": "^5.7.23 || ^6.4.3",
-                "psr/http-factory": "^1.0",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-crypt": "^3.2.1",
-                "zendframework/zend-servicemanager": "^2.7.8 || ^3.3",
-                "zendframework/zend-uri": "^2.6"
-            },
-            "suggest": {
-                "psr/http-factory-implementation": "psr/http-factory-implementation, for creating file upload instances when consuming PSR-7 in file upload filters",
-                "zendframework/zend-crypt": "Zend\\Crypt component, for encryption filters",
-                "zendframework/zend-i18n": "Zend\\I18n component for filters depending on i18n functionality",
-                "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for using the filter chain functionality",
-                "zendframework/zend-uri": "Zend\\Uri component, for the UriNormalize filter"
-            },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.9.x-dev",
-                    "dev-develop": "2.10.x-dev"
-                },
-                "zf": {
-                    "component": "Zend\\Filter",
-                    "config-provider": "Zend\\Filter\\ConfigProvider"
-                }
-            },
             "autoload": {
-                "psr-4": {
-                    "Zend\\Filter\\": "src/"
+                "psr-0": {
+                    "Console": "./"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
             "license": [
-                "BSD-3-Clause"
+                "BSD-2-Clause"
             ],
-            "description": "Programmatically filter and normalize data and files",
-            "keywords": [
-                "ZendFramework",
-                "filter",
-                "zf"
+            "authors": [
+                {
+                    "name": "Andrei Zmievski",
+                    "email": "andrei@php.net",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Stig Bakken",
+                    "email": "stig@php.net",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Greg Beaver",
+                    "email": "cellog@php.net",
+                    "role": "Helper"
+                }
             ],
-            "abandoned": "laminas/laminas-filter",
-            "time": "2019-08-19T07:08:04+00:00"
+            "description": "More info available on: http://pear.php.net/package/Console_Getopt",
+            "time": "2019-11-20T18:27:48+00:00"
         },
         {
-            "name": "zendframework/zend-form",
-            "version": "2.14.3",
+            "name": "pear/file_marc",
+            "version": "1.4.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-form.git",
-                "reference": "0b1616c59b1f3df194284e26f98c81ad0c377871"
+                "url": "https://github.com/pear/File_MARC.git",
+                "reference": "a4997f93d13933ad478cd8b6f43c6345d7388a70"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-form/zipball/0b1616c59b1f3df194284e26f98c81ad0c377871",
-                "reference": "0b1616c59b1f3df194284e26f98c81ad0c377871",
+                "url": "https://api.github.com/repos/pear/File_MARC/zipball/a4997f93d13933ad478cd8b6f43c6345d7388a70",
+                "reference": "a4997f93d13933ad478cd8b6f43c6345d7388a70",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-hydrator": "^1.1 || ^2.1 || ^3.0",
-                "zendframework/zend-inputfilter": "^2.8",
-                "zendframework/zend-stdlib": "^3.2.1"
+                "pear/pear_exception": "1.*"
             },
             "require-dev": {
-                "doctrine/annotations": "~1.0",
-                "phpunit/phpunit": "^5.7.23 || ^6.5.3",
-                "zendframework/zend-cache": "^2.6.1",
-                "zendframework/zend-captcha": "^2.7.1",
-                "zendframework/zend-code": "^2.6 || ^3.0",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-escaper": "^2.5",
-                "zendframework/zend-eventmanager": "^2.6.2 || ^3.0",
-                "zendframework/zend-filter": "^2.6",
-                "zendframework/zend-i18n": "^2.6",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3",
-                "zendframework/zend-session": "^2.8.1",
-                "zendframework/zend-text": "^2.6",
-                "zendframework/zend-validator": "^2.6",
-                "zendframework/zend-view": "^2.6.2",
-                "zendframework/zendservice-recaptcha": "^3.0.0"
+                "phpunit/phpunit": "*",
+                "squizlabs/php_codesniffer": "*"
             },
             "suggest": {
-                "zendframework/zend-captcha": "^2.7.1, required for using CAPTCHA form elements",
-                "zendframework/zend-code": "^2.6 || ^3.0, required to use zend-form annotations support",
-                "zendframework/zend-eventmanager": "^2.6.2 || ^3.0, reuired for zend-form annotations support",
-                "zendframework/zend-i18n": "^2.6, required when using zend-form view helpers",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3, required to use the form factories or provide services",
-                "zendframework/zend-view": "^2.6.2, required for using the zend-form view helpers",
-                "zendframework/zendservice-recaptcha": "in order to use the ReCaptcha form element"
+                "pear/validate_ispn": "Install optionally via your project's composer.json"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.14.x-dev",
-                    "dev-develop": "2.15.x-dev"
-                },
-                "zf": {
-                    "component": "Zend\\Form",
-                    "config-provider": "Zend\\Form\\ConfigProvider"
-                }
-            },
             "autoload": {
-                "psr-4": {
-                    "Zend\\Form\\": "src/"
+                "psr-0": {
+                    "File": "./"
                 },
-                "files": [
-                    "autoload/formElementManagerPolyfill.php"
+                "classmap": [
+                    "./File/MARC/Data_Field.php",
+                    "./File/MARC/Control_Field.php"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
             "license": [
-                "BSD-3-Clause"
+                "LGPL-2.1"
             ],
-            "description": "Validate and display simple and complex forms, casting forms to business objects and vice versa",
-            "keywords": [
-                "ZendFramework",
-                "form",
-                "zf"
+            "authors": [
+                {
+                    "name": "Dan Scott",
+                    "email": "dbs@php.net",
+                    "homepage": "https://coffeecode.net",
+                    "role": "Lead"
+                }
             ],
-            "abandoned": "laminas/laminas-form",
-            "time": "2019-10-04T10:46:36+00:00"
+            "description": "Supports the MAchine Readable Cataloging (MARC) file format documented at http://loc.gov/marc/",
+            "time": "2019-11-13T17:33:56+00:00"
         },
         {
-            "name": "zendframework/zend-http",
-            "version": "2.11.2",
+            "name": "pear/http_request2",
+            "version": "v2.3.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-http.git",
-                "reference": "e15e0ce45a2a4f642cd0b7b4f4d4d0366b729a1a"
+                "url": "https://github.com/pear/HTTP_Request2.git",
+                "reference": "3599cf0fe455a4e281da464f6510bfc5c2ce54c4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-http/zipball/e15e0ce45a2a4f642cd0b7b4f4d4d0366b729a1a",
-                "reference": "e15e0ce45a2a4f642cd0b7b4f4d4d0366b729a1a",
+                "url": "https://api.github.com/repos/pear/HTTP_Request2/zipball/3599cf0fe455a4e281da464f6510bfc5c2ce54c4",
+                "reference": "3599cf0fe455a4e281da464f6510bfc5c2ce54c4",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-loader": "^2.5.1",
-                "zendframework/zend-stdlib": "^3.2.1",
-                "zendframework/zend-uri": "^2.5.2",
-                "zendframework/zend-validator": "^2.10.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.3",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-config": "^3.1 || ^2.6"
+                "pear/net_url2": "^2.2.0",
+                "pear/pear_exception": "^1.0.0",
+                "php": ">=5.2.0"
             },
             "suggest": {
-                "paragonie/certainty": "For automated management of cacert.pem"
+                "ext-fileinfo": "Adds support for looking up mime-types using finfo.",
+                "ext-zlib": "Allows handling gzip compressed responses.",
+                "lib-curl": "Allows using cURL as a request backend.",
+                "lib-openssl": "Allows handling SSL requests when not using cURL."
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.11.x-dev",
-                    "dev-develop": "2.12.x-dev"
+                    "dev-trunk": "2.2-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Zend\\Http\\": "src/"
+                "psr-0": {
+                    "HTTP_Request2": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Alexey Borzov",
+                    "email": "avb@php.net"
                 }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
             ],
-            "description": "Provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests",
+            "description": "Provides an easy way to perform HTTP requests.",
+            "homepage": "http://pear.php.net/package/HTTP_Request2",
             "keywords": [
-                "ZendFramework",
+                "PEAR",
+                "curl",
                 "http",
-                "http client",
-                "zend",
-                "zf"
+                "request"
             ],
-            "abandoned": "laminas/laminas-http",
-            "time": "2019-12-30T20:47:33+00:00"
+            "time": "2016-02-13T20:20:39+00:00"
         },
         {
-            "name": "zendframework/zend-hydrator",
-            "version": "3.0.2",
+            "name": "pear/net_url2",
+            "version": "v2.2.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-hydrator.git",
-                "reference": "f9987bfa25a89d6191e1dbb0413b3c35613f0271"
+                "url": "https://github.com/pear/Net_URL2.git",
+                "reference": "07fd055820dbf466ee3990abe96d0e40a8791f9d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-hydrator/zipball/f9987bfa25a89d6191e1dbb0413b3c35613f0271",
-                "reference": "f9987bfa25a89d6191e1dbb0413b3c35613f0271",
+                "url": "https://api.github.com/repos/pear/Net_URL2/zipball/07fd055820dbf466ee3990abe96d0e40a8791f9d",
+                "reference": "07fd055820dbf466ee3990abe96d0e40a8791f9d",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.2",
-                "zendframework/zend-stdlib": "^3.2.1"
+                "php": ">=5.1.4"
             },
             "require-dev": {
-                "phpspec/prophecy": "^1.7.5",
-                "phpstan/phpstan": "^0.10.5",
-                "phpunit/phpunit": "^7.5",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-eventmanager": "^3.2.1",
-                "zendframework/zend-modulemanager": "^2.8",
-                "zendframework/zend-serializer": "^2.9",
-                "zendframework/zend-servicemanager": "^3.3.2"
-            },
-            "suggest": {
-                "zendframework/zend-eventmanager": "^3.2, to support aggregate hydrator usage",
-                "zendframework/zend-serializer": "^2.9, to use the SerializableStrategy",
-                "zendframework/zend-servicemanager": "^3.3, to support hydrator plugin manager usage"
+                "phpunit/phpunit": ">=3.3.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-release-2.4": "2.4.x-dev",
-                    "dev-master": "3.0.x-dev",
-                    "dev-develop": "3.1.x-dev"
-                },
-                "zf": {
-                    "component": "Zend\\Hydrator",
-                    "config-provider": "Zend\\Hydrator\\ConfigProvider"
+                    "dev-master": "2.2.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Zend\\Hydrator\\": "src/"
-                }
+                "classmap": [
+                    "Net/URL2.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
             "license": [
                 "BSD-3-Clause"
             ],
-            "description": "Serialize objects to arrays, and vice versa",
+            "authors": [
+                {
+                    "name": "David Coallier",
+                    "email": "davidc@php.net"
+                },
+                {
+                    "name": "Tom Klingenberg",
+                    "email": "tkli@php.net"
+                },
+                {
+                    "name": "Christian Schmidt",
+                    "email": "chmidt@php.net"
+                }
+            ],
+            "description": "Class for parsing and handling URL. Provides parsing of URLs into their constituent parts (scheme, host, path etc.), URL generation, and resolving of relative URLs.",
+            "homepage": "https://github.com/pear/Net_URL2",
             "keywords": [
-                "ZendFramework",
-                "hydrator",
-                "zf"
+                "PEAR",
+                "net",
+                "networking",
+                "rfc3986",
+                "uri",
+                "url"
             ],
-            "abandoned": "laminas/laminas-hydrator",
-            "time": "2019-03-15T14:12:03+00:00"
+            "time": "2017-08-25T06:16:11+00:00"
         },
         {
-            "name": "zendframework/zend-i18n",
-            "version": "2.10.1",
+            "name": "pear/pear-core-minimal",
+            "version": "v1.10.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-i18n.git",
-                "reference": "84038e6a1838b611dcc491b1c40321fa4c3a123c"
+                "url": "https://github.com/pear/pear-core-minimal.git",
+                "reference": "625a3c429d9b2c1546438679074cac1b089116a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-i18n/zipball/84038e6a1838b611dcc491b1c40321fa4c3a123c",
-                "reference": "84038e6a1838b611dcc491b1c40321fa4c3a123c",
+                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7",
+                "reference": "625a3c429d9b2c1546438679074cac1b089116a7",
                 "shasum": ""
             },
             "require": {
-                "ext-intl": "*",
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0"
-            },
-            "conflict": {
-                "phpspec/prophecy": "<1.9.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.16",
-                "zendframework/zend-cache": "^2.6.1",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-config": "^2.6",
-                "zendframework/zend-eventmanager": "^2.6.2 || ^3.0",
-                "zendframework/zend-filter": "^2.6.1",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3",
-                "zendframework/zend-validator": "^2.6",
-                "zendframework/zend-view": "^2.6.3"
+                "pear/console_getopt": "~1.4",
+                "pear/pear_exception": "~1.0"
             },
-            "suggest": {
-                "zendframework/zend-cache": "Zend\\Cache component",
-                "zendframework/zend-config": "Zend\\Config component",
-                "zendframework/zend-eventmanager": "You should install this package to use the events in the translator",
-                "zendframework/zend-filter": "You should install this package to use the provided filters",
-                "zendframework/zend-i18n-resources": "Translation resources",
-                "zendframework/zend-servicemanager": "Zend\\ServiceManager component",
-                "zendframework/zend-validator": "You should install this package to use the provided validators",
-                "zendframework/zend-view": "You should install this package to use the provided view helpers"
+            "replace": {
+                "rsky/pear-core-min": "self.version"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.10.x-dev",
-                    "dev-develop": "2.11.x-dev"
-                },
-                "zf": {
-                    "component": "Zend\\I18n",
-                    "config-provider": "Zend\\I18n\\ConfigProvider"
-                }
-            },
             "autoload": {
-                "psr-4": {
-                    "Zend\\I18n\\": "src/"
+                "psr-0": {
+                    "": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "src/"
+            ],
             "license": [
                 "BSD-3-Clause"
             ],
-            "description": "Provide translations for your application, and filter and validate internationalized values",
-            "keywords": [
-                "ZendFramework",
-                "i18n",
-                "zf"
+            "authors": [
+                {
+                    "name": "Christian Weiske",
+                    "email": "cweiske@php.net",
+                    "role": "Lead"
+                }
             ],
-            "abandoned": "laminas/laminas-i18n",
-            "time": "2019-12-12T14:08:22+00:00"
+            "description": "Minimal set of PEAR core files to be used as composer dependency",
+            "time": "2019-11-19T19:00:24+00:00"
         },
         {
-            "name": "zendframework/zend-inputfilter",
-            "version": "2.10.1",
+            "name": "pear/pear_exception",
+            "version": "v1.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-inputfilter.git",
-                "reference": "1f44a2e9bc394a71638b43bc7024b572fa65410e"
+                "url": "https://github.com/pear/PEAR_Exception.git",
+                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/1f44a2e9bc394a71638b43bc7024b572fa65410e",
-                "reference": "1f44a2e9bc394a71638b43bc7024b572fa65410e",
+                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
+                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-filter": "^2.9.1",
-                "zendframework/zend-servicemanager": "^2.7.10 || ^3.3.1",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0",
-                "zendframework/zend-validator": "^2.11"
+                "php": ">=4.4.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.15",
-                "psr/http-message": "^1.0",
-                "zendframework/zend-coding-standard": "~1.0.0"
-            },
-            "suggest": {
-                "psr/http-message-implementation": "PSR-7 is required if you wish to validate PSR-7 UploadedFileInterface payloads"
+                "phpunit/phpunit": "*"
             },
-            "type": "library",
+            "type": "class",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.10.x-dev",
-                    "dev-develop": "2.11.x-dev"
-                },
-                "zf": {
-                    "component": "Zend\\InputFilter",
-                    "config-provider": "Zend\\InputFilter\\ConfigProvider"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Zend\\InputFilter\\": "src/"
-                }
+                "classmap": [
+                    "PEAR/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "."
+            ],
             "license": [
-                "BSD-3-Clause"
+                "BSD-2-Clause"
             ],
-            "description": "Normalize and validate input sets from the web, APIs, the CLI, and more, including files",
+            "authors": [
+                {
+                    "name": "Helgi Thormar",
+                    "email": "dufuz@php.net"
+                },
+                {
+                    "name": "Greg Beaver",
+                    "email": "cellog@php.net"
+                }
+            ],
+            "description": "The PEAR Exception base class.",
+            "homepage": "https://github.com/pear/PEAR_Exception",
             "keywords": [
-                "ZendFramework",
-                "inputfilter",
-                "zf"
+                "exception"
             ],
-            "abandoned": "laminas/laminas-inputfilter",
-            "time": "2019-08-28T19:45:32+00:00"
+            "time": "2019-12-10T10:24:42+00:00"
         },
         {
-            "name": "zendframework/zend-json",
-            "version": "3.1.2",
+            "name": "pear/validate",
+            "version": "v0.8.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-json.git",
-                "reference": "e9ddb1192d93fe7fff846ac895249c39db75132b"
+                "url": "https://github.com/pear/Validate.git",
+                "reference": "d055541ee2d7165329d5e5b8e91907d7fae1cff2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-json/zipball/e9ddb1192d93fe7fff846ac895249c39db75132b",
-                "reference": "e9ddb1192d93fe7fff846ac895249c39db75132b",
+                "url": "https://api.github.com/repos/pear/Validate/zipball/d055541ee2d7165329d5e5b8e91907d7fae1cff2",
+                "reference": "d055541ee2d7165329d5e5b8e91907d7fae1cff2",
                 "shasum": ""
             },
-            "require": {
-                "php": "^5.6 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.23 || ^6.4.3",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-stdlib": "^2.7.7 || ^3.1"
-            },
             "suggest": {
-                "zendframework/zend-json-server": "For implementing JSON-RPC servers",
-                "zendframework/zend-xml2json": "For converting XML documents to JSON"
+                "pear/date": "Install optionally via your project's composer.json"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.1.x-dev",
-                    "dev-develop": "3.2.x-dev"
-                }
-            },
             "autoload": {
-                "psr-4": {
-                    "Zend\\Json\\": "src/"
+                "psr-0": {
+                    "Validate": "./"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
             "license": [
-                "BSD-3-Clause"
+                "New BSD"
             ],
-            "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP",
-            "keywords": [
-                "ZendFramework",
-                "json",
-                "zf"
+            "authors": [
+                {
+                    "name": "Pierre-Alain Joye",
+                    "email": "pierre.php@gmail.com",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Thomas V.V.Cox",
+                    "email": "cox@php.net",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Helgi Þormar Þorbjörnsson",
+                    "email": "dufuz@php.net",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Amir Mohammad Saied",
+                    "email": "amirsaied@gmail.com",
+                    "role": "Lead"
+                },
+                {
+                    "name": "David Coallier",
+                    "email": "david@echolibre.com",
+                    "role": "Lead"
+                },
+                {
+                    "name": "bertrand Gugger",
+                    "email": "bertrand@toggg.com",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Stefan Neufeind",
+                    "email": "pear.neufeind@speedpartner.de",
+                    "role": "Developer"
+                }
             ],
-            "abandoned": "laminas/laminas-json",
-            "time": "2019-10-09T13:56:13+00:00"
+            "description": "Validate numbers, email, strings, dates, URIs and more",
+            "homepage": "http://pear.php.net/package/Validate",
+            "time": "2015-02-20T09:16:13+00:00"
         },
         {
-            "name": "zendframework/zend-loader",
-            "version": "2.6.0",
+            "name": "pear/validate_ispn",
+            "version": "dev-master",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-loader.git",
-                "reference": "78f11749ea340f6ca316bca5958eef80b38f9b6c"
+                "url": "https://github.com/pear/Validate_ISPN.git",
+                "reference": "9ea9312a0841b5d745742c737772aeffa6d06e96"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-loader/zipball/78f11749ea340f6ca316bca5958eef80b38f9b6c",
-                "reference": "78f11749ea340f6ca316bca5958eef80b38f9b6c",
+                "url": "https://api.github.com/repos/pear/Validate_ISPN/zipball/9ea9312a0841b5d745742c737772aeffa6d06e96",
+                "reference": "9ea9312a0841b5d745742c737772aeffa6d06e96",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4",
-                "zendframework/zend-coding-standard": "~1.0.0"
+                "pear/validate": "*"
             },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.6.x-dev",
-                    "dev-develop": "2.7.x-dev"
-                }
+            "require-dev": {
+                "phpunit/phpunit": "*"
             },
+            "type": "library",
             "autoload": {
-                "psr-4": {
-                    "Zend\\Loader\\": "src/"
+                "psr-0": {
+                    "Validate": "./"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
             "license": [
-                "BSD-3-Clause"
+                "BSD-2-Clause"
             ],
-            "description": "Autoloading and plugin loading strategies",
-            "keywords": [
-                "ZendFramework",
-                "loader",
-                "zf"
+            "authors": [
+                {
+                    "name": "Helgi Þormar",
+                    "email": "dufuz@php.net",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Piotr Klaban",
+                    "email": "makler@man.torun.pl",
+                    "role": "Lead"
+                }
             ],
-            "abandoned": "laminas/laminas-loader",
-            "time": "2018-04-30T15:20:54+00:00"
+            "description": "More info available on: http://pear.php.net/package/Validate_ISPN",
+            "time": "2015-04-14T04:17:31+00:00"
         },
         {
-            "name": "zendframework/zend-log",
-            "version": "2.10.0",
+            "name": "phing/phing",
+            "version": "2.16.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-log.git",
-                "reference": "9cec3b092acb39963659c2f32441cccc56b3f430"
+                "url": "https://github.com/phingofficial/phing.git",
+                "reference": "d11c6328c450cb3cda4ffa6548aa9cd60f30dd17"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-log/zipball/9cec3b092acb39963659c2f32441cccc56b3f430",
-                "reference": "9cec3b092acb39963659c2f32441cccc56b3f430",
+                "url": "https://api.github.com/repos/phingofficial/phing/zipball/d11c6328c450cb3cda4ffa6548aa9cd60f30dd17",
+                "reference": "d11c6328c450cb3cda4ffa6548aa9cd60f30dd17",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "psr/log": "^1.0",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0"
-            },
-            "provide": {
-                "psr/log-implementation": "1.0.0"
+                "php": ">=5.2.0"
             },
             "require-dev": {
+                "ext-pdo_sqlite": "*",
                 "mikey179/vfsstream": "^1.6",
-                "phpunit/phpunit": "^5.7.15 || ^6.0.8",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-db": "^2.6",
-                "zendframework/zend-escaper": "^2.5",
-                "zendframework/zend-filter": "^2.5",
-                "zendframework/zend-mail": "^2.6.1",
-                "zendframework/zend-validator": "^2.10.1"
+                "pdepend/pdepend": "2.x",
+                "pear/archive_tar": "1.4.x",
+                "pear/http_request2": "dev-trunk",
+                "pear/net_growl": "dev-trunk",
+                "pear/pear-core-minimal": "1.10.1",
+                "pear/versioncontrol_git": "@dev",
+                "pear/versioncontrol_svn": "~0.5",
+                "phpdocumentor/phpdocumentor": "2.x",
+                "phploc/phploc": "~2.0.6",
+                "phpmd/phpmd": "~2.2",
+                "phpunit/phpunit": ">=3.7",
+                "sebastian/git": "~1.0",
+                "sebastian/phpcpd": "2.x",
+                "siad007/versioncontrol_hg": "^1.0",
+                "simpletest/simpletest": "^1.1",
+                "squizlabs/php_codesniffer": "~2.2",
+                "symfony/yaml": "^2.8 || ^3.1 || ^4.0"
             },
             "suggest": {
-                "ext-mongo": "mongo extension to use Mongo writer",
-                "ext-mongodb": "mongodb extension to use MongoDB writer",
-                "zendframework/zend-console": "Zend\\Console component to use the RequestID log processor",
-                "zendframework/zend-db": "Zend\\Db component to use the database log writer",
-                "zendframework/zend-escaper": "Zend\\Escaper component, for use in the XML log formatter",
-                "zendframework/zend-mail": "Zend\\Mail component to use the email log writer",
-                "zendframework/zend-validator": "Zend\\Validator component to block invalid log messages"
+                "pdepend/pdepend": "PHP version of JDepend",
+                "pear/archive_tar": "Tar file management class",
+                "pear/versioncontrol_git": "A library that provides OO interface to handle Git repository",
+                "pear/versioncontrol_svn": "A simple OO-style interface for Subversion, the free/open-source version control system",
+                "phpdocumentor/phpdocumentor": "Documentation Generator for PHP",
+                "phploc/phploc": "A tool for quickly measuring the size of a PHP project",
+                "phpmd/phpmd": "PHP version of PMD tool",
+                "phpunit/php-code-coverage": "Library that provides collection, processing, and rendering functionality for PHP code coverage information",
+                "phpunit/phpunit": "The PHP Unit Testing Framework",
+                "sebastian/phpcpd": "Copy/Paste Detector (CPD) for PHP code",
+                "siad007/versioncontrol_hg": "A library for interfacing with Mercurial repositories.",
+                "tedivm/jshrink": "Javascript Minifier built in PHP"
             },
+            "bin": [
+                "bin/phing"
+            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.10.x-dev",
-                    "dev-develop": "2.11.x-dev"
-                },
-                "zf": {
-                    "component": "Zend\\Log",
-                    "config-provider": "Zend\\Log\\ConfigProvider"
+                    "dev-master": "2.16.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Zend\\Log\\": "src/"
-                }
+                "classmap": [
+                    "classes/phing/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "classes"
+            ],
             "license": [
-                "BSD-3-Clause"
+                "LGPL-3.0-only"
             ],
-            "description": "component for general purpose logging",
-            "homepage": "https://github.com/zendframework/zend-log",
+            "authors": [
+                {
+                    "name": "Michiel Rook",
+                    "email": "mrook@php.net"
+                },
+                {
+                    "name": "Phing Community",
+                    "homepage": "https://www.phing.info/trac/wiki/Development/Contributors"
+                }
+            ],
+            "description": "PHing Is Not GNU make; it's a PHP project build system or build tool based on Apache Ant.",
+            "homepage": "https://www.phing.info/",
             "keywords": [
-                "log",
-                "logging",
-                "zf2"
+                "build",
+                "phing",
+                "task",
+                "tool"
             ],
-            "abandoned": "laminas/laminas-log",
-            "time": "2018-04-09T21:59:51+00:00"
+            "time": "2020-01-03T10:18:48+00:00"
         },
         {
-            "name": "zendframework/zend-mail",
-            "version": "2.10.0",
+            "name": "ppito/laminas-whoops",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-mail.git",
-                "reference": "d7beb63d5f7144a21ac100072c453e63860cdab8"
+                "url": "https://github.com/Ppito/laminas-whoops.git",
+                "reference": "3276d736f50ccd2be6b79999e985207b7d546c5d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-mail/zipball/d7beb63d5f7144a21ac100072c453e63860cdab8",
-                "reference": "d7beb63d5f7144a21ac100072c453e63860cdab8",
+                "url": "https://api.github.com/repos/Ppito/laminas-whoops/zipball/3276d736f50ccd2be6b79999e985207b7d546c5d",
+                "reference": "3276d736f50ccd2be6b79999e985207b7d546c5d",
                 "shasum": ""
             },
             "require": {
-                "ext-iconv": "*",
-                "php": "^5.6 || ^7.0",
-                "true/punycode": "^2.1",
-                "zendframework/zend-loader": "^2.5",
-                "zendframework/zend-mime": "^2.5",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0",
-                "zendframework/zend-validator": "^2.10.2"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.25 || ^6.4.4 || ^7.1.4",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-config": "^2.6",
-                "zendframework/zend-crypt": "^2.6 || ^3.0",
-                "zendframework/zend-servicemanager": "^2.7.10 || ^3.3.1"
-            },
-            "suggest": {
-                "zendframework/zend-crypt": "Crammd5 support in SMTP Auth",
-                "zendframework/zend-servicemanager": "^2.7.10 || ^3.3.1 when using SMTP to deliver messages"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.10.x-dev",
-                    "dev-develop": "2.11.x-dev"
-                },
-                "zf": {
-                    "component": "Zend\\Mail",
-                    "config-provider": "Zend\\Mail\\ConfigProvider"
-                }
+                "filp/whoops": "^2.7",
+                "laminas/laminas-console": "^2.8",
+                "laminas/laminas-eventmanager": "^3.2",
+                "laminas/laminas-mvc": "^3.1",
+                "laminas/laminas-servicemanager": "^3.4",
+                "php": "^7.2"
             },
+            "type": "module",
             "autoload": {
                 "psr-4": {
-                    "Zend\\Mail\\": "src/"
+                    "WhoopsErrorHandler\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "Provides generalized functionality to compose and send both text and MIME-compliant multipart e-mail messages",
+            "authors": [
+                {
+                    "name": "Mickael TONNELIER",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Laminas-Whoops, integrated whoops in Laminas Framework",
+            "homepage": "https://github.com/ppito/laminas-whoops",
             "keywords": [
-                "ZendFramework",
-                "mail",
-                "zf"
+                "laminas",
+                "php error",
+                "whoops"
             ],
-            "abandoned": "laminas/laminas-mail",
-            "time": "2018-06-07T13:37:07+00:00"
+            "time": "2020-01-14T18:57:23+00:00"
         },
         {
-            "name": "zendframework/zend-math",
-            "version": "3.2.0",
+            "name": "psr/cache",
+            "version": "1.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-math.git",
-                "reference": "07e43d87fd5c7edc4f54121b9a4625eb10e4b726"
+                "url": "https://github.com/php-fig/cache.git",
+                "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-math/zipball/07e43d87fd5c7edc4f54121b9a4625eb10e4b726",
-                "reference": "07e43d87fd5c7edc4f54121b9a4625eb10e4b726",
+                "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
+                "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
                 "shasum": ""
             },
             "require": {
-                "ext-mbstring": "*",
-                "paragonie/random_compat": "^2.0.11 || 9.99.99",
-                "php": "^5.6 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2",
-                "zendframework/zend-coding-standard": "~1.0.0"
-            },
-            "suggest": {
-                "ext-bcmath": "If using the bcmath functionality",
-                "ext-gmp": "If using the gmp functionality"
+                "php": ">=5.3.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.2.x-dev",
-                    "dev-develop": "3.3.x-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Math\\": "src/"
+                    "Psr\\Cache\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "Create cryptographically secure pseudo-random numbers, and manage big integers",
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for caching libraries",
             "keywords": [
-                "ZendFramework",
-                "math",
-                "zf"
+                "cache",
+                "psr",
+                "psr-6"
             ],
-            "abandoned": "laminas/laminas-math",
-            "time": "2018-12-04T15:45:09+00:00"
+            "time": "2016-08-06T20:24:11+00:00"
         },
         {
-            "name": "zendframework/zend-mime",
-            "version": "2.7.2",
+            "name": "psr/container",
+            "version": "1.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-mime.git",
-                "reference": "c91e0350be53cc9d29be15563445eec3b269d7c1"
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-mime/zipball/c91e0350be53cc9d29be15563445eec3b269d7c1",
-                "reference": "c91e0350be53cc9d29be15563445eec3b269d7c1",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.21 || ^6.3",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-mail": "^2.6"
-            },
-            "suggest": {
-                "zendframework/zend-mail": "Zend\\Mail component"
+                "php": ">=5.3.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.7.x-dev",
-                    "dev-develop": "2.8.x-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Mime\\": "src/"
+                    "Psr\\Container\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "Create and parse MIME messages and parts",
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
             "keywords": [
-                "ZendFramework",
-                "mime",
-                "zf"
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
             ],
-            "abandoned": "laminas/laminas-mime",
-            "time": "2019-10-16T19:30:37+00:00"
+            "time": "2017-02-14T16:28:37+00:00"
         },
         {
-            "name": "zendframework/zend-modulemanager",
-            "version": "2.8.4",
+            "name": "psr/log",
+            "version": "1.1.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-modulemanager.git",
-                "reference": "b2596d24b9a4e36a3cd114d35d3ad0918db9a243"
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-modulemanager/zipball/b2596d24b9a4e36a3cd114d35d3ad0918db9a243",
-                "reference": "b2596d24b9a4e36a3cd114d35d3ad0918db9a243",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
+                "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-config": "^3.1 || ^2.6",
-                "zendframework/zend-eventmanager": "^3.2 || ^2.6.3",
-                "zendframework/zend-stdlib": "^3.1 || ^2.7"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.16",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-console": "^2.6",
-                "zendframework/zend-di": "^2.6",
-                "zendframework/zend-loader": "^2.5",
-                "zendframework/zend-mvc": "^3.0 || ^2.7",
-                "zendframework/zend-servicemanager": "^3.0.3 || ^2.7.5"
-            },
-            "suggest": {
-                "zendframework/zend-console": "Zend\\Console component",
-                "zendframework/zend-loader": "Zend\\Loader component if you are not using Composer autoloading for your modules",
-                "zendframework/zend-mvc": "Zend\\Mvc component",
-                "zendframework/zend-servicemanager": "Zend\\ServiceManager component"
+                "php": ">=5.3.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.8.x-dev",
-                    "dev-develop": "2.9.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\ModuleManager\\": "src/"
+                    "Psr\\Log\\": "Psr/Log/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
             ],
-            "description": "Modular application system for zend-mvc applications",
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
             "keywords": [
-                "ZendFramework",
-                "modulemanager",
-                "zf"
+                "log",
+                "psr",
+                "psr-3"
             ],
-            "abandoned": "laminas/laminas-modulemanager",
-            "time": "2019-10-28T13:29:38+00:00"
+            "time": "2019-11-01T11:05:21+00:00"
         },
         {
-            "name": "zendframework/zend-mvc",
-            "version": "3.1.1",
+            "name": "psr/simple-cache",
+            "version": "1.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-mvc.git",
-                "reference": "236e7e1e3757e988fa06530c0a3f96a148858ae8"
+                "url": "https://github.com/php-fig/simple-cache.git",
+                "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-mvc/zipball/236e7e1e3757e988fa06530c0a3f96a148858ae8",
-                "reference": "236e7e1e3757e988fa06530c0a3f96a148858ae8",
+                "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+                "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
                 "shasum": ""
             },
             "require": {
-                "container-interop/container-interop": "^1.2",
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-eventmanager": "^3.2",
-                "zendframework/zend-http": "^2.7",
-                "zendframework/zend-modulemanager": "^2.8",
-                "zendframework/zend-router": "^3.0.2",
-                "zendframework/zend-servicemanager": "^3.3",
-                "zendframework/zend-stdlib": "^3.1",
-                "zendframework/zend-view": "^2.9"
-            },
-            "require-dev": {
-                "http-interop/http-middleware": "^0.4.1",
-                "phpunit/phpunit": "^6.4.4 || ^5.7.14",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-json": "^2.6.1 || ^3.0",
-                "zendframework/zend-psr7bridge": "^1.0",
-                "zendframework/zend-stratigility": "^2.0.1"
-            },
-            "suggest": {
-                "http-interop/http-middleware": "^0.4.1 to be used together with zend-stratigility",
-                "zendframework/zend-json": "(^2.6.1 || ^3.0) To auto-deserialize JSON body content in AbstractRestfulController extensions, when json_decode is unavailable",
-                "zendframework/zend-log": "^2.9.1  To provide log functionality via LogFilterManager, LogFormatterManager, and LogProcessorManager",
-                "zendframework/zend-mvc-console": "zend-mvc-console provides the ability to expose zend-mvc as a console application",
-                "zendframework/zend-mvc-i18n": "zend-mvc-i18n provides integration with zend-i18n, including a translation bridge and translatable route segments",
-                "zendframework/zend-mvc-plugin-fileprg": "To provide Post/Redirect/Get functionality around forms that container file uploads",
-                "zendframework/zend-mvc-plugin-flashmessenger": "To provide flash messaging capabilities between requests",
-                "zendframework/zend-mvc-plugin-identity": "To access the authenticated identity (per zend-authentication) in controllers",
-                "zendframework/zend-mvc-plugin-prg": "To provide Post/Redirect/Get functionality within controllers",
-                "zendframework/zend-paginator": "^2.7 To provide pagination functionality via PaginatorPluginManager",
-                "zendframework/zend-psr7bridge": "(^0.2) To consume PSR-7 middleware within the MVC workflow",
-                "zendframework/zend-servicemanager-di": "zend-servicemanager-di provides utilities for integrating zend-di and zend-servicemanager in your zend-mvc application",
-                "zendframework/zend-stratigility": "zend-stratigility is required to use middleware pipes in the MiddlewareListener"
+                "php": ">=5.3.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.1-dev",
-                    "dev-develop": "3.2-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Mvc\\": "src/"
+                    "Psr\\SimpleCache\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
             ],
-            "description": "Zend Framework's event-driven MVC layer, including MVC Applications, Controllers, and Plugins",
+            "description": "Common interfaces for simple caching",
             "keywords": [
-                "ZendFramework",
-                "mvc",
-                "zf"
+                "cache",
+                "caching",
+                "psr",
+                "psr-16",
+                "simple-cache"
             ],
-            "abandoned": "laminas/laminas-mvc",
-            "time": "2017-11-24T06:32:07+00:00"
+            "time": "2017-10-23T01:57:42+00:00"
         },
         {
-            "name": "zendframework/zend-mvc-console",
-            "version": "1.2.0",
+            "name": "serialssolutions/summon",
+            "version": "v1.3.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-mvc-console.git",
-                "reference": "821c18e0d57e71b370166bd2f35623befddaf2ee"
+                "url": "https://github.com/summon/Summon.php.git",
+                "reference": "e3c042813a887fd18044058ee0b039a6a0f8ab21"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-mvc-console/zipball/821c18e0d57e71b370166bd2f35623befddaf2ee",
-                "reference": "821c18e0d57e71b370166bd2f35623befddaf2ee",
+                "url": "https://api.github.com/repos/summon/Summon.php/zipball/e3c042813a887fd18044058ee0b039a6a0f8ab21",
+                "reference": "e3c042813a887fd18044058ee0b039a6a0f8ab21",
                 "shasum": ""
             },
-            "require": {
-                "container-interop/container-interop": "^1.1",
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-console": "^2.6",
-                "zendframework/zend-eventmanager": "^2.6.2 || ^3.0",
-                "zendframework/zend-modulemanager": "^2.7.1",
-                "zendframework/zend-mvc": "^3.0.3",
-                "zendframework/zend-router": "^3.0",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3",
-                "zendframework/zend-stdlib": "^2.7.5 || ^3.0",
-                "zendframework/zend-text": "^2.6",
-                "zendframework/zend-view": "^2.6.3"
-            },
-            "conflict": {
-                "zendframework/zend-mvc": "<3.0.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-filter": "^2.6.1"
-            },
-            "suggest": {
-                "zendframework/zend-filter": "^2.6.1, to filter rendered results"
-            },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.2.x-dev",
-                    "dev-develop": "1.3.x-dev"
-                },
-                "zf": {
-                    "component": "Zend\\Mvc\\Console"
-                }
-            },
             "autoload": {
-                "psr-4": {
-                    "Zend\\Mvc\\Console\\": "src/"
+                "psr-0": {
+                    "SerialsSolutions": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "GPL-2.0"
             ],
-            "description": "Integration between zend-mvc and zend-console",
-            "keywords": [
-                "ZendFramework",
-                "console",
-                "mvc",
-                "zf"
+            "authors": [
+                {
+                    "name": "Demian Katz",
+                    "email": "demian.katz@villanova.edu"
+                }
             ],
-            "abandoned": "laminas/laminas-mvc-console",
-            "time": "2018-04-30T19:10:26+00:00"
+            "description": "Library for interacting with Serials Solutions' Summon API.",
+            "time": "2020-01-13T21:36:48+00:00"
         },
         {
-            "name": "zendframework/zend-mvc-i18n",
-            "version": "1.1.1",
+            "name": "swagger-api/swagger-ui",
+            "version": "v2.2.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-mvc-i18n.git",
-                "reference": "7a1b3aca3a8874adb32390d34794cdc525c1c909"
+                "url": "https://github.com/swagger-api/swagger-ui.git",
+                "reference": "64dc3060b3700b12e466f8d67b7d7ec3574b015f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-mvc-i18n/zipball/7a1b3aca3a8874adb32390d34794cdc525c1c909",
-                "reference": "7a1b3aca3a8874adb32390d34794cdc525c1c909",
+                "url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/64dc3060b3700b12e466f8d67b7d7ec3574b015f",
+                "reference": "64dc3060b3700b12e466f8d67b7d7ec3574b015f",
                 "shasum": ""
             },
-            "require": {
-                "container-interop/container-interop": "^1.1",
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-i18n": "^2.7",
-                "zendframework/zend-router": "^3.0",
-                "zendframework/zend-servicemanager": "^2.7.10 || ^3.0.3",
-                "zendframework/zend-stdlib": "^2.7.6 || ^3.0",
-                "zendframework/zend-validator": "^2.6"
-            },
-            "conflict": {
-                "phpspec/prophecy": "<1.8.0",
-                "zendframework/zend-mvc": "<3.0.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.5",
-                "zendframework/zend-cache": "^2.6.1",
-                "zendframework/zend-coding-standard": "~1.0.0"
-            },
-            "suggest": {
-                "zendframework/zend-cache": "To enable caching of translation strings"
-            },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.1.x-dev",
-                    "dev-develop": "1.2.x-dev"
-                },
-                "zf": {
-                    "component": "Zend\\Mvc\\I18n",
-                    "config-provider": "Zend\\Mvc\\I18n\\ConfigProvider"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Zend\\Mvc\\I18n\\": "src/"
-                }
-            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Tony Tam",
+                    "email": "fehguy@gmail.com"
+                },
+                {
+                    "name": "Mohsen Azimi",
+                    "email": "me@azimi.me"
+                }
             ],
-            "description": "Integration between zend-mvc and zend-i18n",
+            "description": "Swagger UI is a dependency-free collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API",
+            "homepage": "http://swagger.io",
             "keywords": [
-                "ZendFramework",
-                "i18n",
-                "mvc",
-                "zf"
+                "api",
+                "documentation",
+                "openapi",
+                "specification",
+                "swagger",
+                "ui"
             ],
-            "abandoned": "laminas/laminas-mvc-i18n",
-            "time": "2019-09-03T20:50:53+00:00"
+            "time": "2017-01-05T08:57:09+00:00"
         },
         {
-            "name": "zendframework/zend-mvc-plugin-flashmessenger",
-            "version": "1.2.0",
+            "name": "symfony/inflector",
+            "version": "v4.4.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-mvc-plugin-flashmessenger.git",
-                "reference": "b66064eb59d3b124a133d259aac3d9dd7cb81706"
+                "url": "https://github.com/symfony/inflector.git",
+                "reference": "f419ab2853cc00471ffd7fc18e544b5f5a90adb1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-mvc-plugin-flashmessenger/zipball/b66064eb59d3b124a133d259aac3d9dd7cb81706",
-                "reference": "b66064eb59d3b124a133d259aac3d9dd7cb81706",
+                "url": "https://api.github.com/repos/symfony/inflector/zipball/f419ab2853cc00471ffd7fc18e544b5f5a90adb1",
+                "reference": "f419ab2853cc00471ffd7fc18e544b5f5a90adb1",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-mvc": "^3.0",
-                "zendframework/zend-session": "^2.8.5",
-                "zendframework/zend-stdlib": "^3.2.1",
-                "zendframework/zend-view": "^2.10"
-            },
-            "conflict": {
-                "zendframework/zend-mvc": "<3.0.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-i18n": "^2.8"
+                "php": "^7.1.3",
+                "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.2.x-dev",
-                    "dev-develop": "1.3.x-dev"
-                },
-                "zf": {
-                    "component": "Zend\\Mvc\\Plugin\\FlashMessenger"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Mvc\\Plugin\\FlashMessenger\\": "src/"
-                }
+                    "Symfony\\Component\\Inflector\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
             ],
-            "description": "Plugin for creating and exposing flash messages via zend-mvc controllers",
+            "description": "Symfony Inflector Component",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "ZendFramework",
-                "mvc",
-                "zf"
+                "inflection",
+                "pluralize",
+                "singularize",
+                "string",
+                "symfony",
+                "words"
             ],
-            "abandoned": "laminas/laminas-mvc-plugin-flashmessenger",
-            "time": "2019-10-19T22:24:02+00:00"
+            "time": "2020-01-04T13:00:46+00:00"
         },
         {
-            "name": "zendframework/zend-paginator",
-            "version": "2.8.2",
+            "name": "symfony/options-resolver",
+            "version": "v4.4.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-paginator.git",
-                "reference": "2b4d07d9475ed581278a28d065b238a0941402e2"
+                "url": "https://github.com/symfony/options-resolver.git",
+                "reference": "9a02d6662660fe7bfadad63b5f0b0718d4c8b6b0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-paginator/zipball/2b4d07d9475ed581278a28d065b238a0941402e2",
-                "reference": "2b4d07d9475ed581278a28d065b238a0941402e2",
+                "url": "https://api.github.com/repos/symfony/options-resolver/zipball/9a02d6662660fe7bfadad63b5f0b0718d4c8b6b0",
+                "reference": "9a02d6662660fe7bfadad63b5f0b0718d4c8b6b0",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.0 || ^5.6",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^6.2.1 || ^5.7.15",
-                "zendframework/zend-cache": "^2.6.1",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-config": "^2.6.0",
-                "zendframework/zend-db": "^2.9.2",
-                "zendframework/zend-filter": "^2.6.1",
-                "zendframework/zend-json": "^2.6.1",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3",
-                "zendframework/zend-view": "^2.6.3"
-            },
-            "suggest": {
-                "zendframework/zend-cache": "Zend\\Cache component to support cache features",
-                "zendframework/zend-db": "Zend\\Db component",
-                "zendframework/zend-filter": "Zend\\Filter component",
-                "zendframework/zend-json": "Zend\\Json component",
-                "zendframework/zend-servicemanager": "Zend\\ServiceManager component",
-                "zendframework/zend-view": "Zend\\View component"
+                "php": "^7.1.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.8.x-dev",
-                    "dev-develop": "2.9.x-dev"
-                },
-                "zf": {
-                    "component": "Zend\\Paginator",
-                    "config-provider": "Zend\\Paginator\\ConfigProvider"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Paginator\\": "src/"
-                }
+                    "Symfony\\Component\\OptionsResolver\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "Paginate collections of data from arbitrary sources",
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony OptionsResolver Component",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "ZendFramework",
-                "paginator",
-                "zf"
+                "config",
+                "configuration",
+                "options"
             ],
-            "abandoned": "laminas/laminas-paginator",
-            "time": "2019-08-21T13:31:03+00:00"
+            "time": "2020-01-04T13:00:46+00:00"
         },
         {
-            "name": "zendframework/zend-router",
-            "version": "3.3.0",
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.14.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-router.git",
-                "reference": "b113a4cfd910ee4723079fa58a9bcf3198631620"
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-router/zipball/b113a4cfd910ee4723079fa58a9bcf3198631620",
-                "reference": "b113a4cfd910ee4723079fa58a9bcf3198631620",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
+                "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
                 "shasum": ""
             },
             "require": {
-                "container-interop/container-interop": "^1.2",
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-http": "^2.8.1",
-                "zendframework/zend-servicemanager": "^2.7.8 || ^3.3",
-                "zendframework/zend-stdlib": "^3.2.1"
-            },
-            "conflict": {
-                "zendframework/zend-mvc": "<3.0.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.22 || ^6.4.1",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-i18n": "^2.7.4"
+                "php": ">=5.3.3"
             },
             "suggest": {
-                "zendframework/zend-i18n": "^2.7.4, if defining translatable HTTP path segments"
+                "ext-ctype": "For best performance"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.3.x-dev",
-                    "dev-develop": "4.0.x-dev"
-                },
-                "zf": {
-                    "component": "Zend\\Router",
-                    "config-provider": "Zend\\Router\\ConfigProvider"
+                    "dev-master": "1.14-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Router\\": "src/"
-                }
+                    "Symfony\\Polyfill\\Ctype\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "Flexible routing system for HTTP and console applications",
+            "authors": [
+                {
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for ctype functions",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "ZendFramework",
-                "mvc",
-                "routing",
-                "zend",
-                "zf"
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
             ],
-            "abandoned": "laminas/laminas-router",
-            "time": "2019-02-26T20:24:12+00:00"
+            "time": "2020-01-13T11:15:53+00:00"
         },
         {
-            "name": "zendframework/zend-serializer",
-            "version": "2.9.1",
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.14.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-serializer.git",
-                "reference": "6fb7ae016cfdf0cfcdfa2b989e6a65f351170e21"
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-serializer/zipball/6fb7ae016cfdf0cfcdfa2b989e6a65f351170e21",
-                "reference": "6fb7ae016cfdf0cfcdfa2b989e6a65f351170e21",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2",
+                "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-json": "^2.5 || ^3.0",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.16",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-math": "^2.6 || ^3.0",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3"
+                "php": ">=5.3.3"
             },
             "suggest": {
-                "zendframework/zend-math": "(^2.6 || ^3.0) To support Python Pickle serialization",
-                "zendframework/zend-servicemanager": "(^2.7.5 || ^3.0.3) To support plugin manager support"
+                "ext-mbstring": "For best performance"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.9.x-dev",
-                    "dev-develop": "2.10.x-dev"
-                },
-                "zf": {
-                    "component": "Zend\\Serializer",
-                    "config-provider": "Zend\\Serializer\\ConfigProvider"
+                    "dev-master": "1.14-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Serializer\\": "src/"
-                }
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "Serialize and deserialize PHP structures to a variety of representations",
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "ZendFramework",
-                "serializer",
-                "zf"
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
             ],
-            "abandoned": "laminas/laminas-serializer",
-            "time": "2019-10-19T08:06:30+00:00"
+            "time": "2020-01-13T11:15:53+00:00"
         },
         {
-            "name": "zendframework/zend-server",
-            "version": "2.8.1",
+            "name": "symfony/property-access",
+            "version": "v4.4.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-server.git",
-                "reference": "d80c44700ebb92191dd9a3005316a6ab6637c0d1"
+                "url": "https://github.com/symfony/property-access.git",
+                "reference": "090b4bc92ded1ec512f7e2ed1691210769dffdb3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-server/zipball/d80c44700ebb92191dd9a3005316a6ab6637c0d1",
-                "reference": "d80c44700ebb92191dd9a3005316a6ab6637c0d1",
+                "url": "https://api.github.com/repos/symfony/property-access/zipball/090b4bc92ded1ec512f7e2ed1691210769dffdb3",
+                "reference": "090b4bc92ded1ec512f7e2ed1691210769dffdb3",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-code": "^2.5 || ^3.0",
-                "zendframework/zend-stdlib": "^2.5 || ^3.0"
+                "php": "^7.1.3",
+                "symfony/inflector": "^3.4|^4.0|^5.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4",
-                "zendframework/zend-coding-standard": "~1.0.0"
+                "symfony/cache": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "psr/cache-implementation": "To cache access methods."
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.8.x-dev",
-                    "dev-develop": "2.9.x-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Server\\": "src/"
-                }
+                    "Symfony\\Component\\PropertyAccess\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "Create Reflection-based RPC servers",
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony PropertyAccess Component",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "ZendFramework",
-                "server",
-                "zf"
+                "access",
+                "array",
+                "extraction",
+                "index",
+                "injection",
+                "object",
+                "property",
+                "property path",
+                "reflection"
             ],
-            "abandoned": "laminas/laminas-server",
-            "time": "2019-10-16T18:27:05+00:00"
+            "time": "2020-01-04T13:00:46+00:00"
         },
         {
-            "name": "zendframework/zend-servicemanager",
-            "version": "3.4.0",
+            "name": "symfony/yaml",
+            "version": "v3.4.36",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-servicemanager.git",
-                "reference": "a1ed6140d0d3ee803fec96582593ed024950067b"
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "dab657db15207879217fc81df4f875947bf68804"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/a1ed6140d0d3ee803fec96582593ed024950067b",
-                "reference": "a1ed6140d0d3ee803fec96582593ed024950067b",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/dab657db15207879217fc81df4f875947bf68804",
+                "reference": "dab657db15207879217fc81df4f875947bf68804",
                 "shasum": ""
             },
             "require": {
-                "container-interop/container-interop": "^1.2",
-                "php": "^5.6 || ^7.0",
-                "psr/container": "^1.0",
-                "zendframework/zend-stdlib": "^3.2.1"
+                "php": "^5.5.9|>=7.0.8",
+                "symfony/polyfill-ctype": "~1.8"
             },
-            "provide": {
-                "container-interop/container-interop-implementation": "^1.2",
-                "psr/container-implementation": "^1.0"
+            "conflict": {
+                "symfony/console": "<3.4"
             },
             "require-dev": {
-                "mikey179/vfsstream": "^1.6.5",
-                "ocramius/proxy-manager": "^1.0 || ^2.0",
-                "phpbench/phpbench": "^0.13.0",
-                "phpunit/phpunit": "^5.7.25 || ^6.4.4",
-                "zendframework/zend-coding-standard": "~1.0.0"
+                "symfony/console": "~3.4|~4.0"
             },
             "suggest": {
-                "ocramius/proxy-manager": "ProxyManager 1.* to handle lazy initialization of services",
-                "zendframework/zend-stdlib": "zend-stdlib ^2.5 if you wish to use the MergeReplaceKey or MergeRemoveKey features in Config instances"
+                "symfony/console": "For validating YAML files using the lint command"
             },
-            "bin": [
-                "bin/generate-deps-for-config-factory",
-                "bin/generate-factory-for-class"
-            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.3-dev",
-                    "dev-develop": "4.0-dev"
+                    "dev-master": "3.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\ServiceManager\\": "src/"
-                }
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "Factory-Driven Dependency Injection Container",
-            "keywords": [
-                "PSR-11",
-                "ZendFramework",
-                "dependency-injection",
-                "di",
-                "dic",
-                "service-manager",
-                "servicemanager",
-                "zf"
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
             ],
-            "abandoned": "laminas/laminas-servicemanager",
-            "time": "2018-12-22T06:05:09+00:00"
+            "description": "Symfony Yaml Component",
+            "homepage": "https://symfony.com",
+            "time": "2019-10-24T15:33:53+00:00"
         },
         {
-            "name": "zendframework/zend-session",
-            "version": "2.9.1",
+            "name": "true/punycode",
+            "version": "v2.1.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-session.git",
-                "reference": "c289c4d733ec23a389e25c7c451f4d062088511f"
+                "url": "https://github.com/true/php-punycode.git",
+                "reference": "a4d0c11a36dd7f4e7cd7096076cab6d3378a071e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-session/zipball/c289c4d733ec23a389e25c7c451f4d062088511f",
-                "reference": "c289c4d733ec23a389e25c7c451f4d062088511f",
+                "url": "https://api.github.com/repos/true/php-punycode/zipball/a4d0c11a36dd7f4e7cd7096076cab6d3378a071e",
+                "reference": "a4d0c11a36dd7f4e7cd7096076cab6d3378a071e",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-eventmanager": "^2.6.2 || ^3.0",
-                "zendframework/zend-stdlib": "^3.2.1"
+                "php": ">=5.3.0",
+                "symfony/polyfill-mbstring": "^1.3"
             },
             "require-dev": {
-                "container-interop/container-interop": "^1.1",
-                "mongodb/mongodb": "^1.0.1",
-                "php-mock/php-mock-phpunit": "^1.1.2 || ^2.0",
-                "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.16",
-                "zendframework/zend-cache": "^2.6.1",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-db": "^2.7",
-                "zendframework/zend-http": "^2.5.4",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3",
-                "zendframework/zend-validator": "^2.6"
-            },
-            "suggest": {
-                "mongodb/mongodb": "If you want to use the MongoDB session save handler",
-                "zendframework/zend-cache": "Zend\\Cache component",
-                "zendframework/zend-db": "Zend\\Db component",
-                "zendframework/zend-http": "Zend\\Http component",
-                "zendframework/zend-servicemanager": "Zend\\ServiceManager component",
-                "zendframework/zend-validator": "Zend\\Validator component"
+                "phpunit/phpunit": "~4.7",
+                "squizlabs/php_codesniffer": "~2.0"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.9.x-dev",
-                    "dev-develop": "2.10.x-dev"
-                },
-                "zf": {
-                    "component": "Zend\\Session",
-                    "config-provider": "Zend\\Session\\ConfigProvider"
-                }
-            },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Session\\": "src/"
+                    "TrueBV\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "Object-oriented interface to PHP sessions and storage",
+            "authors": [
+                {
+                    "name": "Renan Gonçalves",
+                    "email": "renan.saddam@gmail.com"
+                }
+            ],
+            "description": "A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)",
+            "homepage": "https://github.com/true/php-punycode",
             "keywords": [
-                "ZendFramework",
-                "session",
-                "zf"
+                "idna",
+                "punycode"
             ],
-            "abandoned": "laminas/laminas-session",
-            "time": "2019-10-28T19:40:43+00:00"
+            "time": "2016-11-16T10:37:54+00:00"
         },
         {
-            "name": "zendframework/zend-soap",
-            "version": "2.8.0",
+            "name": "vufind-org/vufindcode",
+            "version": "v1.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-soap.git",
-                "reference": "8762d79efa220d82529c43ce08d70554146be645"
+                "url": "https://github.com/vufind-org/vufindcode.git",
+                "reference": "df7f4d2188c9f2c654dfee69774b80b9d03b1ab4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-soap/zipball/8762d79efa220d82529c43ce08d70554146be645",
-                "reference": "8762d79efa220d82529c43ce08d70554146be645",
+                "url": "https://api.github.com/repos/vufind-org/vufindcode/zipball/df7f4d2188c9f2c654dfee69774b80b9d03b1ab4",
+                "reference": "df7f4d2188c9f2c654dfee69774b80b9d03b1ab4",
                 "shasum": ""
             },
             "require": {
-                "ext-soap": "*",
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-server": "^2.6.1",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0",
-                "zendframework/zend-uri": "^2.5.2"
+                "php": ">=7.0.8"
             },
             "require-dev": {
-                "phpunit/phpunit": "^5.7.21 || ^6.3",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-config": "^2.6",
-                "zendframework/zend-http": "^2.5.4"
-            },
-            "suggest": {
-                "zendframework/zend-http": "Zend\\Http component"
+                "friendsofphp/php-cs-fixer": "2.11.1",
+                "pear/http_request2": "2.3.0",
+                "phing/phing": "2.16.1",
+                "phploc/phploc": "4.0.1",
+                "phpmd/phpmd": "2.6.0",
+                "phpunit/phpunit": "6.5.8",
+                "sebastian/phpcpd": "3.0.1",
+                "squizlabs/php_codesniffer": "3.2.3"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7.x-dev",
-                    "dev-develop": "2.8.x-dev"
-                }
-            },
             "autoload": {
-                "psr-4": {
-                    "Zend\\Soap\\": "src/"
+                "psr-0": {
+                    "VuFindCode\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "GPL-2.0"
             ],
-            "homepage": "https://github.com/zendframework/zend-soap",
-            "keywords": [
-                "soap",
-                "zf2"
+            "authors": [
+                {
+                    "name": "Demian Katz",
+                    "email": "demian.katz@villanova.edu"
+                }
             ],
-            "abandoned": "laminas/laminas-soap",
-            "time": "2019-04-30T16:45:35+00:00"
+            "description": "Classes for working with EANs, ISBNs and ISMNs (a VuFind support library)",
+            "homepage": "https://vufind.org/",
+            "time": "2019-11-07T14:29:07+00:00"
         },
         {
-            "name": "zendframework/zend-stdlib",
-            "version": "3.2.1",
+            "name": "vufind-org/vufinddate",
+            "version": "v1.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-stdlib.git",
-                "reference": "66536006722aff9e62d1b331025089b7ec71c065"
+                "url": "https://github.com/vufind-org/vufinddate.git",
+                "reference": "1bec5458b48d96fa8ff87123584042780f4c3c24"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/66536006722aff9e62d1b331025089b7ec71c065",
-                "reference": "66536006722aff9e62d1b331025089b7ec71c065",
+                "url": "https://api.github.com/repos/vufind-org/vufinddate/zipball/1bec5458b48d96fa8ff87123584042780f4c3c24",
+                "reference": "1bec5458b48d96fa8ff87123584042780f4c3c24",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0"
+                "php": ">=7.0.8"
             },
             "require-dev": {
-                "phpbench/phpbench": "^0.13",
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2",
-                "zendframework/zend-coding-standard": "~1.0.0"
+                "friendsofphp/php-cs-fixer": "2.11.1",
+                "pear/http_request2": "2.3.0",
+                "phing/phing": "2.16.1",
+                "phploc/phploc": "4.0.1",
+                "phpmd/phpmd": "2.6.0",
+                "phpunit/phpunit": "6.5.8",
+                "sebastian/phpcpd": "3.0.1",
+                "squizlabs/php_codesniffer": "3.2.3"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.2.x-dev",
-                    "dev-develop": "3.3.x-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Stdlib\\": "src/"
+                    "VuFind\\Date\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "GPL-2.0"
             ],
-            "description": "SPL extensions, array utilities, error handlers, and more",
-            "keywords": [
-                "ZendFramework",
-                "stdlib",
-                "zf"
+            "authors": [
+                {
+                    "name": "Demian Katz",
+                    "email": "demian.katz@villanova.edu"
+                }
             ],
-            "abandoned": "laminas/laminas-stdlib",
-            "time": "2018-08-28T21:34:05+00:00"
+            "description": "Date formatting tools for the VuFind project",
+            "homepage": "https://vufind.org/",
+            "time": "2018-05-23T19:59:10+00:00"
         },
         {
-            "name": "zendframework/zend-text",
-            "version": "2.7.1",
+            "name": "vufind-org/vufindharvest",
+            "version": "v3.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-text.git",
-                "reference": "41e32dafa4015e160e2f95a7039554385c71624d"
+                "url": "https://github.com/vufind-org/vufindharvest.git",
+                "reference": "f0cb7188be3f6edd68f89962d7d3d771b2108775"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-text/zipball/41e32dafa4015e160e2f95a7039554385c71624d",
-                "reference": "41e32dafa4015e160e2f95a7039554385c71624d",
+                "url": "https://api.github.com/repos/vufind-org/vufindharvest/zipball/f0cb7188be3f6edd68f89962d7d3d771b2108775",
+                "reference": "f0cb7188be3f6edd68f89962d7d3d771b2108775",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0"
+                "laminas/laminas-console": ">=2.2",
+                "laminas/laminas-http": ">=2.2",
+                "php": ">=7.0.8"
             },
             "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-config": "^2.6"
+                "friendsofphp/php-cs-fixer": "2.16.1",
+                "pear/http_request2": "2.3.0",
+                "phing/phing": "2.16.2",
+                "phploc/phploc": "4.0.1",
+                "phpmd/phpmd": "2.8.1",
+                "phpunit/phpunit": "6.5.14",
+                "sebastian/phpcpd": "3.0.1",
+                "squizlabs/php_codesniffer": "3.5.3"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7.x-dev",
-                    "dev-develop": "2.8.x-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Text\\": "src/"
+                    "VuFindHarvest\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "GPL-2.0"
             ],
-            "description": "Create FIGlets and text-based tables",
-            "keywords": [
-                "ZendFramework",
-                "text",
-                "zf"
+            "authors": [
+                {
+                    "name": "Demian Katz",
+                    "email": "demian.katz@villanova.edu",
+                    "role": "Maintainer"
+                }
             ],
-            "abandoned": "laminas/laminas-text",
-            "time": "2019-10-16T20:36:27+00:00"
+            "description": "VuFind Harvest Tools",
+            "homepage": "https://vufind.org/",
+            "time": "2020-01-27T21:06:16+00:00"
         },
         {
-            "name": "zendframework/zend-uri",
-            "version": "2.7.1",
+            "name": "vufind-org/vufindhttp",
+            "version": "v3.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-uri.git",
-                "reference": "bfc4a5b9a309711e968d7c72afae4ac50c650083"
+                "url": "https://github.com/vufind-org/vufindhttp.git",
+                "reference": "26558d9b830bf5cdd5e9a5fbab06df649a5525e7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-uri/zipball/bfc4a5b9a309711e968d7c72afae4ac50c650083",
-                "reference": "bfc4a5b9a309711e968d7c72afae4ac50c650083",
+                "url": "https://api.github.com/repos/vufind-org/vufindhttp/zipball/26558d9b830bf5cdd5e9a5fbab06df649a5525e7",
+                "reference": "26558d9b830bf5cdd5e9a5fbab06df649a5525e7",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-escaper": "^2.5",
-                "zendframework/zend-validator": "^2.10"
+                "laminas/laminas-http": ">=2.2",
+                "php": ">=7.0.8"
             },
             "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4",
-                "zendframework/zend-coding-standard": "~1.0.0"
+                "friendsofphp/php-cs-fixer": "2.16.1",
+                "laminas/laminas-uri": ">=2.2",
+                "pear/http_request2": "2.3.0",
+                "phing/phing": "2.16.2",
+                "phploc/phploc": "4.0.1",
+                "phpmd/phpmd": "2.8.1",
+                "phpunit/phpunit": "6.5.14",
+                "sebastian/phpcpd": "3.0.1",
+                "squizlabs/php_codesniffer": "3.5.3"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7.x-dev",
-                    "dev-develop": "2.8.x-dev"
-                }
-            },
             "autoload": {
-                "psr-4": {
-                    "Zend\\Uri\\": "src/"
+                "psr-0": {
+                    "VuFindHttp\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "GPL-2.0"
             ],
-            "description": "A component that aids in manipulating and validating » Uniform Resource Identifiers (URIs)",
-            "keywords": [
-                "ZendFramework",
-                "uri",
-                "zf"
+            "authors": [
+                {
+                    "name": "David Maus",
+                    "email": "maus@hab.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Demian Katz",
+                    "email": "demian.katz@villanova.edu",
+                    "role": "Maintainer"
+                }
             ],
-            "abandoned": "laminas/laminas-uri",
-            "time": "2019-10-07T13:35:33+00:00"
+            "description": "VuFind HTTP service library",
+            "homepage": "https://vufind.org/",
+            "time": "2020-01-27T20:45:14+00:00"
         },
         {
-            "name": "zendframework/zend-validator",
-            "version": "2.13.0",
+            "name": "wikimedia/composer-merge-plugin",
+            "version": "v1.4.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-validator.git",
-                "reference": "b54acef1f407741c5347f2a97f899ab21f2229ef"
+                "url": "https://github.com/wikimedia/composer-merge-plugin.git",
+                "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/b54acef1f407741c5347f2a97f899ab21f2229ef",
-                "reference": "b54acef1f407741c5347f2a97f899ab21f2229ef",
+                "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/81c6ac72a24a67383419c7eb9aa2b3437f2ab100",
+                "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100",
                 "shasum": ""
             },
             "require": {
-                "container-interop/container-interop": "^1.1",
-                "php": "^7.1",
-                "zendframework/zend-stdlib": "^3.2.1"
+                "composer-plugin-api": "^1.0",
+                "php": ">=5.3.2"
             },
             "require-dev": {
-                "phpunit/phpunit": "^6.0.8 || ^5.7.15",
-                "psr/http-client": "^1.0",
-                "psr/http-factory": "^1.0",
-                "psr/http-message": "^1.0",
-                "zendframework/zend-cache": "^2.6.1",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-config": "^2.6",
-                "zendframework/zend-db": "^2.7",
-                "zendframework/zend-filter": "^2.6",
-                "zendframework/zend-http": "^2.5.4",
-                "zendframework/zend-i18n": "^2.6",
-                "zendframework/zend-math": "^2.6",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3",
-                "zendframework/zend-session": "^2.8",
-                "zendframework/zend-uri": "^2.5"
-            },
-            "suggest": {
-                "psr/http-message": "psr/http-message, required when validating PSR-7 UploadedFileInterface instances via the Upload and UploadFile validators",
-                "zendframework/zend-db": "Zend\\Db component, required by the (No)RecordExists validator",
-                "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator",
-                "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages",
-                "zendframework/zend-i18n-resources": "Translations of validator messages",
-                "zendframework/zend-math": "Zend\\Math component, required by the Csrf validator",
-                "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains",
-                "zendframework/zend-session": "Zend\\Session component, ^2.8; required by the Csrf validator",
-                "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators"
+                "composer/composer": "~1.0.0",
+                "jakub-onderka/php-parallel-lint": "~0.8",
+                "phpunit/phpunit": "~4.8|~5.0",
+                "squizlabs/php_codesniffer": "~2.1.0"
             },
-            "type": "library",
+            "type": "composer-plugin",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.13.x-dev",
-                    "dev-develop": "2.14.x-dev"
+                    "dev-master": "1.3.x-dev"
                 },
-                "zf": {
-                    "component": "Zend\\Validator",
-                    "config-provider": "Zend\\Validator\\ConfigProvider"
-                }
+                "class": "Wikimedia\\Composer\\MergePlugin"
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Validator\\": "src/"
+                    "Wikimedia\\Composer\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "Validation classes for a wide range of domains, and the ability to chain validators to create complex validation criteria",
-            "keywords": [
-                "ZendFramework",
-                "validator",
-                "zf"
+            "authors": [
+                {
+                    "name": "Bryan Davis",
+                    "email": "bd808@wikimedia.org"
+                }
             ],
-            "abandoned": "laminas/laminas-validator",
-            "time": "2019-12-28T04:07:18+00:00"
+            "description": "Composer plugin to merge multiple composer.json files",
+            "time": "2017-04-25T02:31:25+00:00"
         },
         {
-            "name": "zendframework/zend-view",
-            "version": "2.11.2",
+            "name": "yajra/laravel-pdo-via-oci8",
+            "version": "v2.1.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-view.git",
-                "reference": "4f5cb653ed4c64bb8d9bf05b294300feb00c67f2"
+                "url": "https://github.com/yajra/pdo-via-oci8.git",
+                "reference": "7295ed52a724887f66d01180a500ecdb76a22f4c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-view/zipball/4f5cb653ed4c64bb8d9bf05b294300feb00c67f2",
-                "reference": "4f5cb653ed4c64bb8d9bf05b294300feb00c67f2",
+                "url": "https://api.github.com/repos/yajra/pdo-via-oci8/zipball/7295ed52a724887f66d01180a500ecdb76a22f4c",
+                "reference": "7295ed52a724887f66d01180a500ecdb76a22f4c",
                 "shasum": ""
             },
-            "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-eventmanager": "^2.6.2 || ^3.0",
-                "zendframework/zend-json": "^2.6.1 || ^3.0",
-                "zendframework/zend-loader": "^2.5",
-                "zendframework/zend-stdlib": "^2.7 || ^3.0"
-            },
             "require-dev": {
-                "phpunit/phpunit": "^5.7.15 || ^6.0.8",
-                "zendframework/zend-authentication": "^2.5",
-                "zendframework/zend-cache": "^2.6.1",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-config": "^2.6",
-                "zendframework/zend-console": "^2.6",
-                "zendframework/zend-escaper": "^2.5",
-                "zendframework/zend-feed": "^2.7",
-                "zendframework/zend-filter": "^2.6.1",
-                "zendframework/zend-http": "^2.5.4",
-                "zendframework/zend-i18n": "^2.6",
-                "zendframework/zend-log": "^2.7",
-                "zendframework/zend-modulemanager": "^2.7.1",
-                "zendframework/zend-mvc": "^2.7.14 || ^3.0",
-                "zendframework/zend-navigation": "^2.5",
-                "zendframework/zend-paginator": "^2.5",
-                "zendframework/zend-permissions-acl": "^2.6",
-                "zendframework/zend-router": "^3.0.1",
-                "zendframework/zend-serializer": "^2.6.1",
-                "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3",
-                "zendframework/zend-session": "^2.8.1",
-                "zendframework/zend-uri": "^2.5"
-            },
-            "suggest": {
-                "zendframework/zend-authentication": "Zend\\Authentication component",
-                "zendframework/zend-escaper": "Zend\\Escaper component",
-                "zendframework/zend-feed": "Zend\\Feed component",
-                "zendframework/zend-filter": "Zend\\Filter component",
-                "zendframework/zend-http": "Zend\\Http component",
-                "zendframework/zend-i18n": "Zend\\I18n component",
-                "zendframework/zend-mvc": "Zend\\Mvc component",
-                "zendframework/zend-mvc-plugin-flashmessenger": "zend-mvc-plugin-flashmessenger component, if you want to use the FlashMessenger view helper with zend-mvc versions 3 and up",
-                "zendframework/zend-navigation": "Zend\\Navigation component",
-                "zendframework/zend-paginator": "Zend\\Paginator component",
-                "zendframework/zend-permissions-acl": "Zend\\Permissions\\Acl component",
-                "zendframework/zend-servicemanager": "Zend\\ServiceManager component",
-                "zendframework/zend-uri": "Zend\\Uri component"
+                "phpunit/phpunit": "^6.4"
             },
-            "bin": [
-                "bin/templatemap_generator.php"
-            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.11.x-dev",
-                    "dev-develop": "2.12.x-dev"
+                    "dev-master": "2.0-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\View\\": "src/"
+                    "Yajra\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "provides a system of helpers, output filters, and variable escaping",
-            "homepage": "https://github.com/zendframework/zend-view",
-            "keywords": [
-                "view",
-                "zf2"
+            "authors": [
+                {
+                    "name": "Arjay Angeles",
+                    "email": "aqangeles@gmail.com"
+                }
             ],
-            "abandoned": "laminas/laminas-view",
-            "time": "2019-02-19T17:40:15+00:00"
+            "description": "PDO userspace driver proxying calls to PHP OCI8 driver",
+            "time": "2019-12-05T06:00:56+00:00"
         },
         {
             "name": "zendframework/zendrest",
@@ -5120,107 +5432,6 @@
             "abandoned": "aws/aws-sdk-php",
             "time": "2019-02-07T18:15:54+00:00"
         },
-        {
-            "name": "zendframework/zendservice-recaptcha",
-            "version": "3.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zendframework/ZendService_ReCaptcha.git",
-                "reference": "b21625c54f19ba5be5c90ab9fa167ca075cd1594"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/ZendService_ReCaptcha/zipball/b21625c54f19ba5be5c90ab9fa167ca075cd1594",
-                "reference": "b21625c54f19ba5be5c90ab9fa167ca075cd1594",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-http": "^2.5.4",
-                "zendframework/zend-json": "^2.6.1 || ^3.0",
-                "zendframework/zend-stdlib": "^3.2.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.5",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-config": "^2.0",
-                "zendframework/zend-validator": "^2.8.2"
-            },
-            "suggest": {
-                "zendframework/zend-validator": "~2.0, if using ReCaptcha's Mailhide API"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.2.x-dev",
-                    "dev-develop": "3.3.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "ZendService\\ReCaptcha\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "description": "OOP wrapper for the ReCaptcha web service",
-            "keywords": [
-                "ZendFramework",
-                "recaptcha",
-                "zf"
-            ],
-            "abandoned": "laminas/laminas-recaptcha",
-            "time": "2019-02-07T17:41:56+00:00"
-        },
-        {
-            "name": "zendframework/zendxml",
-            "version": "1.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zendframework/ZendXml.git",
-                "reference": "eceab37a591c9e140772a1470338258857339e00"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/ZendXml/zipball/eceab37a591c9e140772a1470338258857339e00",
-                "reference": "eceab37a591c9e140772a1470338258857339e00",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.6 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4",
-                "zendframework/zend-coding-standard": "~1.0.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.2.x-dev",
-                    "dev-develop": "1.3.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "ZendXml\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "description": "Utility library for XML usage, best practices, and security in PHP",
-            "keywords": [
-                "ZendFramework",
-                "security",
-                "xml",
-                "zf"
-            ],
-            "abandoned": "laminas/laminas-xml",
-            "time": "2019-01-22T19:42:14+00:00"
-        },
         {
             "name": "zf-commons/zfc-rbac",
             "version": "v2.6.3",
@@ -5538,16 +5749,16 @@
         },
         {
             "name": "composer/xdebug-handler",
-            "version": "1.4.0",
+            "version": "1.4.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/xdebug-handler.git",
-                "reference": "cbe23383749496fe0f373345208b79568e4bc248"
+                "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/cbe23383749496fe0f373345208b79568e4bc248",
-                "reference": "cbe23383749496fe0f373345208b79568e4bc248",
+                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/1ab9842d69e64fb3a01be6b656501032d1b78cb7",
+                "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7",
                 "shasum": ""
             },
             "require": {
@@ -5578,7 +5789,7 @@
                 "Xdebug",
                 "performance"
             ],
-            "time": "2019-11-06T16:40:04+00:00"
+            "time": "2020-03-01T12:26:26+00:00"
         },
         {
             "name": "dmore/chrome-mink-driver",
@@ -6264,16 +6475,16 @@
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "5.0.0",
+            "version": "5.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "a48807183a4b819072f26e347bbd0b5199a9d15f"
+                "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/a48807183a4b819072f26e347bbd0b5199a9d15f",
-                "reference": "a48807183a4b819072f26e347bbd0b5199a9d15f",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
+                "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
                 "shasum": ""
             },
             "require": {
@@ -6313,30 +6524,29 @@
                 }
             ],
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2020-02-09T09:16:15+00:00"
+            "time": "2020-02-22T12:28:44+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",
-            "version": "1.0.1",
+            "version": "1.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
+                "reference": "7462d5f123dfc080dfdf26897032a6513644fc95"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
-                "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95",
+                "reference": "7462d5f123dfc080dfdf26897032a6513644fc95",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1",
+                "php": "^7.2",
                 "phpdocumentor/reflection-common": "^2.0"
             },
             "require-dev": {
-                "ext-tokenizer": "^7.1",
-                "mockery/mockery": "~1",
-                "phpunit/phpunit": "^7.0"
+                "ext-tokenizer": "^7.2",
+                "mockery/mockery": "~1"
             },
             "type": "library",
             "extra": {
@@ -6360,7 +6570,7 @@
                 }
             ],
             "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
-            "time": "2019-08-22T18:11:29+00:00"
+            "time": "2020-02-18T18:59:58+00:00"
         },
         {
             "name": "phploc/phploc",
@@ -7641,16 +7851,16 @@
         },
         {
             "name": "symfony/config",
-            "version": "v4.4.4",
+            "version": "v4.4.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "4d3979f54472637169080f802dc82197e21fdcce"
+                "reference": "cbfef5ae91ccd3b06621c18d58cd355c68c87ae9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/4d3979f54472637169080f802dc82197e21fdcce",
-                "reference": "4d3979f54472637169080f802dc82197e21fdcce",
+                "url": "https://api.github.com/repos/symfony/config/zipball/cbfef5ae91ccd3b06621c18d58cd355c68c87ae9",
+                "reference": "cbfef5ae91ccd3b06621c18d58cd355c68c87ae9",
                 "shasum": ""
             },
             "require": {
@@ -7701,20 +7911,20 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2020-01-04T13:00:46+00:00"
+            "time": "2020-02-04T09:32:40+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v4.4.4",
+            "version": "v4.4.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "f512001679f37e6a042b51897ed24a2f05eba656"
+                "reference": "4fa15ae7be74e53f6ec8c83ed403b97e23b665e9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/f512001679f37e6a042b51897ed24a2f05eba656",
-                "reference": "f512001679f37e6a042b51897ed24a2f05eba656",
+                "url": "https://api.github.com/repos/symfony/console/zipball/4fa15ae7be74e53f6ec8c83ed403b97e23b665e9",
+                "reference": "4fa15ae7be74e53f6ec8c83ed403b97e23b665e9",
                 "shasum": ""
             },
             "require": {
@@ -7777,20 +7987,20 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2020-01-25T12:44:29+00:00"
+            "time": "2020-02-24T13:10:00+00:00"
         },
         {
             "name": "symfony/css-selector",
-            "version": "v3.4.37",
+            "version": "v3.4.38",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/css-selector.git",
-                "reference": "e1b3e1a0621d6e48ee46092b4c7d8280f746b3c5"
+                "reference": "ee9b946e7223b11257329a054c64396b19d619e1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/css-selector/zipball/e1b3e1a0621d6e48ee46092b4c7d8280f746b3c5",
-                "reference": "e1b3e1a0621d6e48ee46092b4c7d8280f746b3c5",
+                "url": "https://api.github.com/repos/symfony/css-selector/zipball/ee9b946e7223b11257329a054c64396b19d619e1",
+                "reference": "ee9b946e7223b11257329a054c64396b19d619e1",
                 "shasum": ""
             },
             "require": {
@@ -7830,20 +8040,20 @@
             ],
             "description": "Symfony CssSelector Component",
             "homepage": "https://symfony.com",
-            "time": "2020-01-01T11:03:25+00:00"
+            "time": "2020-02-04T08:04:52+00:00"
         },
         {
             "name": "symfony/dependency-injection",
-            "version": "v4.4.4",
+            "version": "v4.4.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/dependency-injection.git",
-                "reference": "ec60a7d12f5e8ab0f99456adce724717d9c1784a"
+                "reference": "ebb2e882e8c9e2eb990aa61ddcd389848466e342"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ec60a7d12f5e8ab0f99456adce724717d9c1784a",
-                "reference": "ec60a7d12f5e8ab0f99456adce724717d9c1784a",
+                "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ebb2e882e8c9e2eb990aa61ddcd389848466e342",
+                "reference": "ebb2e882e8c9e2eb990aa61ddcd389848466e342",
                 "shasum": ""
             },
             "require": {
@@ -7903,20 +8113,20 @@
             ],
             "description": "Symfony DependencyInjection Component",
             "homepage": "https://symfony.com",
-            "time": "2020-01-31T09:49:27+00:00"
+            "time": "2020-02-29T09:50:10+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v4.4.4",
+            "version": "v4.4.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "9e3de195e5bc301704dd6915df55892f6dfc208b"
+                "reference": "4ad8e149799d3128621a3a1f70e92b9897a8930d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9e3de195e5bc301704dd6915df55892f6dfc208b",
-                "reference": "9e3de195e5bc301704dd6915df55892f6dfc208b",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4ad8e149799d3128621a3a1f70e92b9897a8930d",
+                "reference": "4ad8e149799d3128621a3a1f70e92b9897a8930d",
                 "shasum": ""
             },
             "require": {
@@ -7973,7 +8183,7 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2020-01-10T21:54:01+00:00"
+            "time": "2020-02-04T09:32:40+00:00"
         },
         {
             "name": "symfony/event-dispatcher-contracts",
@@ -8035,7 +8245,7 @@
         },
         {
             "name": "symfony/filesystem",
-            "version": "v4.4.4",
+            "version": "v4.4.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
@@ -8085,16 +8295,16 @@
         },
         {
             "name": "symfony/finder",
-            "version": "v4.4.4",
+            "version": "v4.4.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "3a50be43515590faf812fbd7708200aabc327ec3"
+                "reference": "ea69c129aed9fdeca781d4b77eb20b62cf5d5357"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/3a50be43515590faf812fbd7708200aabc327ec3",
-                "reference": "3a50be43515590faf812fbd7708200aabc327ec3",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/ea69c129aed9fdeca781d4b77eb20b62cf5d5357",
+                "reference": "ea69c129aed9fdeca781d4b77eb20b62cf5d5357",
                 "shasum": ""
             },
             "require": {
@@ -8130,7 +8340,7 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2020-01-04T13:00:46+00:00"
+            "time": "2020-02-14T07:42:58+00:00"
         },
         {
             "name": "symfony/polyfill-php70",
@@ -8306,16 +8516,16 @@
         },
         {
             "name": "symfony/process",
-            "version": "v4.4.4",
+            "version": "v4.4.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "f5697ab4cb14a5deed7473819e63141bf5352c36"
+                "reference": "bf9166bac906c9e69fb7a11d94875e7ced97bcd7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/f5697ab4cb14a5deed7473819e63141bf5352c36",
-                "reference": "f5697ab4cb14a5deed7473819e63141bf5352c36",
+                "url": "https://api.github.com/repos/symfony/process/zipball/bf9166bac906c9e69fb7a11d94875e7ced97bcd7",
+                "reference": "bf9166bac906c9e69fb7a11d94875e7ced97bcd7",
                 "shasum": ""
             },
             "require": {
@@ -8351,7 +8561,7 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com",
-            "time": "2020-01-09T09:50:08+00:00"
+            "time": "2020-02-07T20:06:44+00:00"
         },
         {
             "name": "symfony/service-contracts",
@@ -8413,7 +8623,7 @@
         },
         {
             "name": "symfony/stopwatch",
-            "version": "v4.4.4",
+            "version": "v4.4.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/stopwatch.git",
@@ -8633,7 +8843,6 @@
     "minimum-stability": "stable",
     "stability-flags": {
         "ahand/mobileesp": 20,
-        "ghislainf/zf2-whoops": 20,
         "pear/validate_ispn": 20
     },
     "prefer-stable": false,
diff --git a/config/application.config.php b/config/application.config.php
index 204091ce3d1..04d3e88b76d 100644
--- a/config/application.config.php
+++ b/config/application.config.php
@@ -4,15 +4,15 @@ use ComposerEventHandlers\Modules;
 
 // Set up modules:
 $modules = [
-    'Zend\Form', 'Zend\Router', 'ZfcRbac',
+    'Laminas\Form', 'Laminas\Router', 'ZfcRbac',
     'VuFindTheme', 'VuFindSearch', 'VuFind', 'VuFindAdmin', 'VuFindApi'
 ];
 if (PHP_SAPI == 'cli' && APPLICATION_ENV !== 'testing') {
-    $modules[] = 'Zend\Mvc\Console';
+    $modules[] = 'Laminas\Mvc\Console';
     $modules[] = 'VuFindConsole';
 }
 if (APPLICATION_ENV == 'development') {
-    array_push($modules, 'Zf2Whoops');
+    array_push($modules, 'WhoopsErrorHandler');
     $modules[] = 'VuFindDevTools';
 }
 if ($localModules = getenv('VUFIND_LOCAL_MODULES')) {
diff --git a/config/autoload/local.php.dist b/config/autoload/local.php.dist
index 33fb6963485..fdb63171035 100644
--- a/config/autoload/local.php.dist
+++ b/config/autoload/local.php.dist
@@ -7,7 +7,7 @@
  * .dist extension at the end and populate values as needed.
  *
  * @NOTE: This file is ignored from Git by default with the .gitignore included
- * in ZendSkeletonApplication. This is a good practice, as it prevents sensitive
+ * in this directory. This is a good practice, as it prevents sensitive
  * credentials from accidentally being committed into version control.
  */
 
diff --git a/config/vufind/DAIA.ini b/config/vufind/DAIA.ini
index 97b0cfe2e0c..122e6644614 100644
--- a/config/vufind/DAIA.ini
+++ b/config/vufind/DAIA.ini
@@ -25,7 +25,7 @@
 baseUrl = [your DAIA server base url]
 
 ; Set a DAIA specific timeout in seconds to be used for DAIA http requests (defaults
-; to Zend defaults or as defined in
+; to client defaults or as defined in
 ; vendor/vufind-org/vufindhttp/src/VuFindHttp/HttpService.php)
 ;timeout = 30
 
diff --git a/config/vufind/PAIA.ini b/config/vufind/PAIA.ini
index bb45d469ca9..7863e4cffd5 100644
--- a/config/vufind/PAIA.ini
+++ b/config/vufind/PAIA.ini
@@ -10,7 +10,7 @@
 baseUrl = ""
 
 ; Set a PAIA specific timeout in seconds to be used for PAIA http requests (defaults
-; to Zend defaults or as defined in
+; to client defaults or as defined in
 ; vendor/vufind-org/vufindhttp/src/VuFindHttp/HttpService.php)
 ;timeout = 30
 
diff --git a/config/vufind/config.ini b/config/vufind/config.ini
index f85c46fcaeb..e5cd9e8d92a 100644
--- a/config/vufind/config.ini
+++ b/config/vufind/config.ini
@@ -1331,7 +1331,7 @@ url             = https://www.myendnoteweb.com/EndNoteWeb.html
 ;type = socks5
 
 ; Default HTTP settings can be loaded here. These values will be passed to
-; the \Zend\Http\Client's setOptions method.
+; the \Laminas\Http\Client's setOptions method.
 [Http]
 ;sslcapath = "/etc/ssl/certs" ; e.g. for Debian systems
 ;sslcafile = "/etc/pki/tls/cert.pem" ; e.g. for CentOS systems
@@ -1340,7 +1340,7 @@ url             = https://www.myendnoteweb.com/EndNoteWeb.html
 
 ; 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'
+;adapter = 'Laminas\Http\Client\Adapter\Curl'
 
 ; Spelling Suggestions
 ;
@@ -1690,11 +1690,11 @@ HMACkey = mySuperSecretValue
 ; VUFIND_CACHE_DIR (see httpd-vufind.conf). The default location is inside the
 ; local settings directory.
 [Cache]
-; Set time to live value for Zend caches (in seconds), 0 means maximum possible.
+; Set time to live value for caches (in seconds), 0 means maximum possible.
 ;ttl = 0
 ; Override umask for cache directories and files.
 ;umask = 022
-; Permissions for Zend-created cache directories and files, subject to umask
+; Permissions for framework-created cache directories and files, subject to umask
 ; Default dir_permission seems to be 0700.
 ;dir_permission = 0700
 ; Default file_permission seems to be 0600.
diff --git a/config/vufind/httpd-vufind.conf b/config/vufind/httpd-vufind.conf
index ae94f69f351..1f7669302c1 100644
--- a/config/vufind/httpd-vufind.conf
+++ b/config/vufind/httpd-vufind.conf
@@ -76,7 +76,7 @@ Alias /vufind /usr/local/vufind/public
   # If you adjust this, be sure to change the public cache AliasMatch above to match.
   #SetEnv VUFIND_CACHE_DIR /usr/local/vufind/local/cache
 
-  # This line specifies additional Zend Framework 2 modules to load after the standard VuFind module.
+  # This line specifies additional code modules to load after the standard VuFind module.
   # Multiple modules may be specified separated by commas.  This mechanism can be used to override
   # core VuFind functionality without modifying core code.
   #SetEnv VUFIND_LOCAL_MODULES VuFindLocalTemplate
diff --git a/harvest/harvest_oai.php b/harvest/harvest_oai.php
index 52c111b9c54..9ab81d48ae7 100644
--- a/harvest/harvest_oai.php
+++ b/harvest/harvest_oai.php
@@ -26,7 +26,7 @@
  * @link     https://vufind.org/wiki/indexing:oai-pmh Wiki
  */
 
-// Manipulate command line to load correct route, then load Zend Framework:
+// Manipulate command line to load correct route, then run the main index page:
 array_unshift($_SERVER['argv'], array_shift($_SERVER['argv']), 'harvest', 'harvest_oai');
 $_SERVER['argc'] += 2;
-require_once __DIR__ . '/../public/index.php';
\ No newline at end of file
+require_once __DIR__ . '/../public/index.php';
diff --git a/harvest/merge-marc.php b/harvest/merge-marc.php
index 2c2a1929786..58580244d45 100644
--- a/harvest/merge-marc.php
+++ b/harvest/merge-marc.php
@@ -27,7 +27,7 @@
  * @link     https://vufind.org/wiki/development:architecture:authority_control Wiki
  */
 
-// Manipulate command line to load correct route, then load Zend Framework:
+// Manipulate command line to load correct route, then run the main index page:
 array_unshift($_SERVER['argv'], array_shift($_SERVER['argv']), 'harvest', 'merge-marc');
 $_SERVER['argc'] += 2;
-require_once __DIR__ . '/../public/index.php';
\ No newline at end of file
+require_once __DIR__ . '/../public/index.php';
diff --git a/install.php b/install.php
index 7cb9b514050..d4c05aa88c0 100644
--- a/install.php
+++ b/install.php
@@ -28,7 +28,7 @@
 
 require_once __DIR__ . '/vendor/autoload.php';
 
-use Zend\Console\Getopt;
+use Laminas\Console\Getopt;
 
 define('MULTISITE_NONE', 0);
 define('MULTISITE_DIR_BASED', 1);
@@ -479,7 +479,7 @@ function getHost()
  */
 function getInput($prompt)
 {
-    return \Zend\Console\Prompt\Line::prompt($prompt, true);
+    return \Laminas\Console\Prompt\Line::prompt($prompt, true);
 }
 
 /**
diff --git a/module/VuFind/Module.php b/module/VuFind/Module.php
index 32e9bad7a5b..796499b4674 100644
--- a/module/VuFind/Module.php
+++ b/module/VuFind/Module.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind;
 
-use Zend\Mvc\MvcEvent;
+use Laminas\Mvc\MvcEvent;
 
 /**
  * Code module for the core of the VuFind application
@@ -58,12 +58,12 @@ class Module
     public function getAutoloaderConfig()
     {
         return [
-            'Zend\Loader\ClassMapAutoloader' => [
+            'Laminas\Loader\ClassMapAutoloader' => [
                 'classes' => [
                     'minSO' => __DIR__ . '/src/VuFind/Search/minSO.php'
                 ]
             ],
-            'Zend\Loader\StandardAutoloader' => [
+            'Laminas\Loader\StandardAutoloader' => [
                 'namespaces' => [
                     __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                 ],
diff --git a/module/VuFind/config/module.config.php b/module/VuFind/config/module.config.php
index cf95eee6eca..af0aeb3be68 100644
--- a/module/VuFind/config/module.config.php
+++ b/module/VuFind/config/module.config.php
@@ -5,7 +5,7 @@ $config = [
     'router' => [
         'routes' => [
             'default' => [
-                'type'    => 'Zend\Router\Http\Segment',
+                'type'    => 'Laminas\Router\Http\Segment',
                 'options' => [
                     'route'    => '/[:controller[/[:action]]]',
                     'constraints' => [
@@ -19,7 +19,7 @@ $config = [
                 ],
             ],
             'alma-webhook' => [
-                'type'    => 'Zend\Router\Http\Segment',
+                'type'    => 'Laminas\Router\Http\Segment',
                 'options' => [
                     'route'    => '/Alma/Webhook/[:almaWebhookAction]',
                     'constraints' => [
@@ -33,7 +33,7 @@ $config = [
                 ],
             ],
             'content-page' => [
-                'type'    => 'Zend\Router\Http\Segment',
+                'type'    => 'Laminas\Router\Http\Segment',
                 'options' => [
                     'route'    => '/Content/[:page]',
                     'constraints' => [
@@ -46,7 +46,7 @@ $config = [
                 ],
             ],
             'shortlink' => [
-                'type'    => 'Zend\Router\Http\Segment',
+                'type'    => 'Laminas\Router\Http\Segment',
                 'options' => [
                     'route'    => '/short/[:id]',
                     'constraints' => [
@@ -59,7 +59,7 @@ $config = [
                 ],
             ],
             'legacy-alphabrowse-results' => [
-                'type' => 'Zend\Router\Http\Literal',
+                'type' => 'Laminas\Router\Http\Literal',
                 'options' => [
                     'route'    => '/AlphaBrowse/Results',
                     'defaults' => [
@@ -69,7 +69,7 @@ $config = [
                 ]
             ],
             'legacy-bookcover' => [
-                'type' => 'Zend\Router\Http\Literal',
+                'type' => 'Laminas\Router\Http\Literal',
                 'options' => [
                     'route'    => '/bookcover.php',
                     'defaults' => [
@@ -79,7 +79,7 @@ $config = [
                 ]
             ],
             'legacy-summonrecord' => [
-                'type' => 'Zend\Router\Http\Literal',
+                'type' => 'Laminas\Router\Http\Literal',
                 'options' => [
                     'route'    => '/Summon/Record',
                     'defaults' => [
@@ -89,7 +89,7 @@ $config = [
                 ]
             ],
             'legacy-worldcatrecord' => [
-                'type' => 'Zend\Router\Http\Literal',
+                'type' => 'Laminas\Router\Http\Literal',
                 'options' => [
                     'route'    => '/WorldCat/Record',
                     'defaults' => [
@@ -99,7 +99,7 @@ $config = [
                 ]
             ],
             'soap-shibboleth-logout-notification-handler' => [
-                'type' => 'Zend\Router\Http\Literal',
+                'type' => 'Laminas\Router\Http\Literal',
                 'options' => [
                     'route' => '/soap/shiblogout',
                     'defaults' => [
@@ -297,7 +297,7 @@ $config = [
     ],
     'controller_plugins' => [
         'factories' => [
-            'VuFind\Controller\Plugin\DbUpgrade' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\Controller\Plugin\DbUpgrade' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\Controller\Plugin\Favorites' => 'VuFind\Controller\Plugin\FavoritesFactory',
             'VuFind\Controller\Plugin\Followup' => 'VuFind\Controller\Plugin\FollowupFactory',
             'VuFind\Controller\Plugin\Holds' => 'VuFind\Controller\Plugin\AbstractRequestBaseFactory',
@@ -305,11 +305,11 @@ $config = [
             'VuFind\Controller\Plugin\NewItems' => 'VuFind\Controller\Plugin\NewItemsFactory',
             'VuFind\Controller\Plugin\Permission' => 'VuFind\Controller\Plugin\PermissionFactory',
             'VuFind\Controller\Plugin\Recaptcha' => 'VuFind\Controller\Plugin\RecaptchaFactory',
-            'VuFind\Controller\Plugin\Renewals' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\Controller\Plugin\Renewals' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\Controller\Plugin\Reserves' => 'VuFind\Controller\Plugin\ReservesFactory',
             'VuFind\Controller\Plugin\ResultScroller' => 'VuFind\Controller\Plugin\ResultScrollerFactory',
             'VuFind\Controller\Plugin\StorageRetrievalRequests' => 'VuFind\Controller\Plugin\AbstractRequestBaseFactory',
-            'Zend\Mvc\Plugin\FlashMessenger\FlashMessenger' => 'VuFind\Controller\Plugin\FlashMessengerFactory',
+            'Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger' => 'VuFind\Controller\Plugin\FlashMessengerFactory',
         ],
         'initializers' => [
             'VuFind\ServiceManager\ServiceInitializer',
@@ -317,7 +317,7 @@ $config = [
         'aliases' => [
             'dbUpgrade' => 'VuFind\Controller\Plugin\DbUpgrade',
             'favorites' => 'VuFind\Controller\Plugin\Favorites',
-            'flashMessenger' => 'Zend\Mvc\Plugin\FlashMessenger\FlashMessenger',
+            'flashMessenger' => 'Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger',
             'followup' => 'VuFind\Controller\Plugin\Followup',
             'holds' => 'VuFind\Controller\Plugin\Holds',
             'ILLRequests' => 'VuFind\Controller\Plugin\ILLRequests',
@@ -384,7 +384,7 @@ $config = [
             'VuFind\Hierarchy\TreeDataFormatter\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
             'VuFind\Hierarchy\TreeDataSource\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
             'VuFind\Hierarchy\TreeRenderer\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
-            'VuFind\Http\PhpEnvironment\Request' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\Http\PhpEnvironment\Request' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\ILS\Connection' => 'VuFind\ILS\ConnectionFactory',
             'VuFind\ILS\Driver\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
             'VuFind\ILS\Logic\Holds' => 'VuFind\ILS\Logic\LogicFactory',
@@ -393,7 +393,7 @@ $config = [
             'VuFind\Log\Logger' => 'VuFind\Log\LoggerFactory',
             'VuFind\Mailer\Mailer' => 'VuFind\Mailer\Factory',
             'VuFind\MetadataVocabulary\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
-            'VuFind\Net\IpAddressUtils' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\Net\IpAddressUtils' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\OAI\Server' => 'VuFind\OAI\ServerFactory',
             'VuFind\OAI\Server\Auth' => 'VuFind\OAI\ServerFactory',
             'VuFind\QRCode\Loader' => 'VuFind\QRCode\LoaderFactory',
@@ -413,16 +413,16 @@ $config = [
             'VuFind\Search\History' => 'VuFind\Search\HistoryFactory',
             'VuFind\Search\Memory' => 'VuFind\Search\MemoryFactory',
             'VuFind\Search\FacetCache\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
-            'VuFind\Search\Factory\UrlQueryHelperFactory' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\Search\Factory\UrlQueryHelperFactory' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\Search\Options\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
             'VuFind\Search\Params\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
             'VuFind\Search\Results\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
-            'VuFind\Search\Solr\HierarchicalFacetHelper' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\Search\Solr\HierarchicalFacetHelper' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\Search\SearchRunner' => 'VuFind\Search\SearchRunnerFactory',
             'VuFind\Search\SearchTabsHelper' => 'VuFind\Search\SearchTabsHelperFactory',
             'VuFind\Service\ReCaptcha' => 'VuFind\Service\ReCaptchaFactory',
             'VuFind\Session\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
-            'VuFind\Session\Settings' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\Session\Settings' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\SMS\SMSInterface' => 'VuFind\SMS\Factory',
             'VuFind\Solr\Writer' => 'VuFind\Solr\WriterFactory',
             'VuFind\Tags' => 'VuFind\TagsFactory',
@@ -431,13 +431,13 @@ $config = [
             'VuFind\Validator\Csrf' => 'VuFind\Validator\CsrfFactory',
             'VuFindHttp\HttpService' => 'VuFind\Service\HttpServiceFactory',
             'VuFindSearch\Service' => 'VuFind\Service\SearchServiceFactory',
-            'Zend\Db\Adapter\Adapter' => 'VuFind\Db\AdapterFactory',
-            'Zend\Http\PhpEnvironment\RemoteAddress' => 'VuFind\Http\PhpEnvironment\RemoteAddressFactory',
-            'Zend\Mvc\I18n\Translator' => 'VuFind\I18n\Translator\TranslatorFactory',
-            'Zend\Session\SessionManager' => 'VuFind\Session\ManagerFactory',
+            'Laminas\Db\Adapter\Adapter' => 'VuFind\Db\AdapterFactory',
+            'Laminas\Http\PhpEnvironment\RemoteAddress' => 'VuFind\Http\PhpEnvironment\RemoteAddressFactory',
+            'Laminas\Mvc\I18n\Translator' => 'VuFind\I18n\Translator\TranslatorFactory',
+            'Laminas\Session\SessionManager' => 'VuFind\Session\ManagerFactory',
         ],
         'delegators' => [
-            'VuFind\Http\PhpEnvironment\Request' => [ \Zend\Mvc\Console\Service\ConsoleRequestDelegatorFactory::class ],
+            'VuFind\Http\PhpEnvironment\Request' => [ \Laminas\Mvc\Console\Service\ConsoleRequestDelegatorFactory::class ],
         ],
         'initializers' => [
             'VuFind\ServiceManager\ServiceInitializer',
@@ -460,7 +460,7 @@ $config = [
             'VuFind\ContentTOCPluginManager' => 'VuFind\Content\TOC\PluginManager',
             'VuFind\CookieManager' => 'VuFind\Cookie\CookieManager',
             'VuFind\DateConverter' => 'VuFind\Date\Converter',
-            'VuFind\DbAdapter' => 'Zend\Db\Adapter\Adapter',
+            'VuFind\DbAdapter' => 'Laminas\Db\Adapter\Adapter',
             'VuFind\DbAdapterFactory' => 'VuFind\Db\AdapterFactory',
             'VuFind\DbRowPluginManager' => 'VuFind\Db\Row\PluginManager',
             'VuFind\DbTablePluginManager' => 'VuFind\Db\Table\PluginManager',
@@ -497,13 +497,13 @@ $config = [
             'VuFind\SearchRunner' => 'VuFind\Search\SearchRunner',
             'VuFind\SearchSpecsReader' => 'VuFind\Config\SearchSpecsReader',
             'VuFind\SearchTabsHelper' => 'VuFind\Search\SearchTabsHelper',
-            'VuFind\SessionManager' => 'Zend\Session\SessionManager',
+            'VuFind\SessionManager' => 'Laminas\Session\SessionManager',
             'VuFind\SessionPluginManager' => 'VuFind\Session\PluginManager',
             'VuFind\SMS' => 'VuFind\SMS\SMSInterface',
-            'VuFind\Translator' => 'Zend\Mvc\I18n\Translator',
+            'VuFind\Translator' => 'Laminas\Mvc\I18n\Translator',
             'VuFind\WorldCatUtils' => 'VuFind\Connection\WorldCatUtils',
             'VuFind\YamlReader' => 'VuFind\Config\YamlReader',
-            'Zend\Validator\Csrf' => 'VuFind\Validator\Csrf',
+            'Laminas\Validator\Csrf' => 'VuFind\Validator\Csrf',
         ],
     ],
     'translator' => [],
@@ -523,7 +523,7 @@ $config = [
         ],
     ],
     // This section contains all VuFind-specific settings (i.e. configurations
-    // unrelated to specific Zend Framework 2 components).
+    // unrelated to specific Laminas components).
     'vufind' => [
         // The config reader is a special service manager for loading .ini files:
         'config_reader' => [ /* see VuFind\Config\PluginManager for defaults */ ],
@@ -690,7 +690,7 @@ $routeGenerator->addStaticRoutes($config, $staticRoutes);
 
 // Add the home route last
 $config['router']['routes']['home'] = [
-    'type' => 'Zend\Router\Http\Literal',
+    'type' => 'Laminas\Router\Http\Literal',
     'options' => [
         'route'    => '/',
         'defaults' => [
diff --git a/module/VuFind/src/VuFind/AjaxHandler/AbstractIlsAndUserActionFactory.php b/module/VuFind/src/VuFind/AjaxHandler/AbstractIlsAndUserActionFactory.php
index c3f04c2ff31..4e4539d4cd8 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/AbstractIlsAndUserActionFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/AbstractIlsAndUserActionFactory.php
@@ -39,7 +39,7 @@ use Interop\Container\ContainerInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class AbstractIlsAndUserActionFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/AbstractRelaisActionFactory.php b/module/VuFind/src/VuFind/AjaxHandler/AbstractRelaisActionFactory.php
index b4b7d987edd..176377510a7 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/AbstractRelaisActionFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/AbstractRelaisActionFactory.php
@@ -39,7 +39,7 @@ use Interop\Container\ContainerInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class AbstractRelaisActionFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/AbstractUserRequestAction.php b/module/VuFind/src/VuFind/AjaxHandler/AbstractUserRequestAction.php
index bbeec5783b7..71cac3eabc3 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/AbstractUserRequestAction.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/AbstractUserRequestAction.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\AjaxHandler;
 
-use Zend\Mvc\Controller\Plugin\Params;
+use Laminas\Mvc\Controller\Plugin\Params;
 
 /**
  * Abstract base class for fetching information about user requests.
diff --git a/module/VuFind/src/VuFind/AjaxHandler/AjaxHandlerInterface.php b/module/VuFind/src/VuFind/AjaxHandler/AjaxHandlerInterface.php
index 041b3e308d5..13ae91a6f5b 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/AjaxHandlerInterface.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/AjaxHandlerInterface.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\AjaxHandler;
 
-use Zend\Mvc\Controller\Plugin\Params;
+use Laminas\Mvc\Controller\Plugin\Params;
 
 /**
  * AJAX handler interface
diff --git a/module/VuFind/src/VuFind/AjaxHandler/CheckRequestIsValid.php b/module/VuFind/src/VuFind/AjaxHandler/CheckRequestIsValid.php
index df2b2c4efe2..e30d067cbe5 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/CheckRequestIsValid.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/CheckRequestIsValid.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\AjaxHandler;
 
-use Zend\Mvc\Controller\Plugin\Params;
+use Laminas\Mvc\Controller\Plugin\Params;
 
 /**
  * "Check Request is Valid" AJAX handler
diff --git a/module/VuFind/src/VuFind/AjaxHandler/CommentRecord.php b/module/VuFind/src/VuFind/AjaxHandler/CommentRecord.php
index 7cb271109c4..2ebf3b751a3 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/CommentRecord.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/CommentRecord.php
@@ -27,11 +27,11 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Mvc\Controller\Plugin\Params;
 use VuFind\Controller\Plugin\Recaptcha;
 use VuFind\Db\Row\User;
 use VuFind\Db\Table\Resource;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
-use Zend\Mvc\Controller\Plugin\Params;
 
 /**
  * AJAX handler to comment on a record.
diff --git a/module/VuFind/src/VuFind/AjaxHandler/CommentRecordFactory.php b/module/VuFind/src/VuFind/AjaxHandler/CommentRecordFactory.php
index 3eb2ebca3ed..b93db0c70a2 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/CommentRecordFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/CommentRecordFactory.php
@@ -38,7 +38,8 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class CommentRecordFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class CommentRecordFactory
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/DeleteRecordComment.php b/module/VuFind/src/VuFind/AjaxHandler/DeleteRecordComment.php
index 8bb5bc9604e..ac5eede88ea 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/DeleteRecordComment.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/DeleteRecordComment.php
@@ -27,10 +27,10 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Mvc\Controller\Plugin\Params;
 use VuFind\Db\Row\User;
 use VuFind\Db\Table\Comments;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
-use Zend\Mvc\Controller\Plugin\Params;
 
 /**
  * AJAX handler to delete a comment on a record.
diff --git a/module/VuFind/src/VuFind/AjaxHandler/DeleteRecordCommentFactory.php b/module/VuFind/src/VuFind/AjaxHandler/DeleteRecordCommentFactory.php
index 3ec532e9246..b0c57220e75 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/DeleteRecordCommentFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/DeleteRecordCommentFactory.php
@@ -39,7 +39,7 @@ use Interop\Container\ContainerInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class DeleteRecordCommentFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/DoiLookup.php b/module/VuFind/src/VuFind/AjaxHandler/DoiLookup.php
index deb055ba809..c908be0f664 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/DoiLookup.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/DoiLookup.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Mvc\Controller\Plugin\Params;
 use VuFind\DoiLinker\PluginManager;
-use Zend\Mvc\Controller\Plugin\Params;
 
 /**
  * AJAX handler to look up DOI data.
diff --git a/module/VuFind/src/VuFind/AjaxHandler/DoiLookupFactory.php b/module/VuFind/src/VuFind/AjaxHandler/DoiLookupFactory.php
index d7a1b30c812..f9261996c95 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/DoiLookupFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/DoiLookupFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class DoiLookupFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class DoiLookupFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetACSuggestions.php b/module/VuFind/src/VuFind/AjaxHandler/GetACSuggestions.php
index 50ab877b489..36bb442c548 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetACSuggestions.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetACSuggestions.php
@@ -27,10 +27,10 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Mvc\Controller\Plugin\Params;
+use Laminas\Stdlib\Parameters;
 use VuFind\Autocomplete\Suggester;
 use VuFind\Session\Settings as SessionSettings;
-use Zend\Mvc\Controller\Plugin\Params;
-use Zend\Stdlib\Parameters;
 
 /**
  * "Get Autocomplete Suggestions" AJAX handler
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetACSuggestionsFactory.php b/module/VuFind/src/VuFind/AjaxHandler/GetACSuggestionsFactory.php
index 6006304bbbf..307751d1705 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetACSuggestionsFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetACSuggestionsFactory.php
@@ -39,7 +39,7 @@ use Interop\Container\ContainerInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class GetACSuggestionsFactory implements
-    \Zend\ServiceManager\Factory\FactoryInterface
+    \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetFacetData.php b/module/VuFind/src/VuFind/AjaxHandler/GetFacetData.php
index 69d57c6223b..1bad9033de9 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetFacetData.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetFacetData.php
@@ -27,11 +27,11 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Mvc\Controller\Plugin\Params;
+use Laminas\Stdlib\Parameters;
 use VuFind\Search\Results\PluginManager as ResultsManager;
 use VuFind\Search\Solr\HierarchicalFacetHelper;
 use VuFind\Session\Settings as SessionSettings;
-use Zend\Mvc\Controller\Plugin\Params;
-use Zend\Stdlib\Parameters;
 
 /**
  * "Get Facet Data" AJAX handler
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetFacetDataFactory.php b/module/VuFind/src/VuFind/AjaxHandler/GetFacetDataFactory.php
index 63fabc1d84b..52f04d2d9d6 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetFacetDataFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetFacetDataFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class GetFacetDataFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class GetFacetDataFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetIlsStatus.php b/module/VuFind/src/VuFind/AjaxHandler/GetIlsStatus.php
index 58116debd3d..3ac2e0a70e5 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetIlsStatus.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetIlsStatus.php
@@ -28,10 +28,10 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Mvc\Controller\Plugin\Params;
+use Laminas\View\Renderer\RendererInterface;
 use VuFind\ILS\Connection;
 use VuFind\Session\Settings as SessionSettings;
-use Zend\Mvc\Controller\Plugin\Params;
-use Zend\View\Renderer\RendererInterface;
 
 /**
  * "Get ILS Status" AJAX handler
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetIlsStatusFactory.php b/module/VuFind/src/VuFind/AjaxHandler/GetIlsStatusFactory.php
index 8409ebec5a7..2c71439062a 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetIlsStatusFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetIlsStatusFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class GetIlsStatusFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class GetIlsStatusFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetItemStatuses.php b/module/VuFind/src/VuFind/AjaxHandler/GetItemStatuses.php
index b08728276fb..92d2d0f6566 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetItemStatuses.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetItemStatuses.php
@@ -29,14 +29,14 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Config\Config;
+use Laminas\Mvc\Controller\Plugin\Params;
+use Laminas\View\Renderer\RendererInterface;
 use VuFind\Exception\ILS as ILSException;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
 use VuFind\ILS\Connection;
 use VuFind\ILS\Logic\Holds;
 use VuFind\Session\Settings as SessionSettings;
-use Zend\Config\Config;
-use Zend\Mvc\Controller\Plugin\Params;
-use Zend\View\Renderer\RendererInterface;
 
 /**
  * "Get Item Status" AJAX handler
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetItemStatusesFactory.php b/module/VuFind/src/VuFind/AjaxHandler/GetItemStatusesFactory.php
index ceb821a0d9a..fa19b88b571 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetItemStatusesFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetItemStatusesFactory.php
@@ -38,7 +38,8 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class GetItemStatusesFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class GetItemStatusesFactory
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetLibraryPickupLocations.php b/module/VuFind/src/VuFind/AjaxHandler/GetLibraryPickupLocations.php
index 670f8285f9d..3bca5fd7003 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetLibraryPickupLocations.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetLibraryPickupLocations.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\AjaxHandler;
 
-use Zend\Mvc\Controller\Plugin\Params;
+use Laminas\Mvc\Controller\Plugin\Params;
 
 /**
  * "Get Library Pickup Locations" AJAX handler
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetRecordCommentsAsHTML.php b/module/VuFind/src/VuFind/AjaxHandler/GetRecordCommentsAsHTML.php
index 1b41047796b..162f11c8d8d 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetRecordCommentsAsHTML.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetRecordCommentsAsHTML.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Mvc\Controller\Plugin\Params;
+use Laminas\View\Renderer\RendererInterface;
 use VuFind\Record\Loader;
-use Zend\Mvc\Controller\Plugin\Params;
-use Zend\View\Renderer\RendererInterface;
 
 /**
  * AJAX handler to get list of comments for a record as HTML.
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetRecordCommentsAsHTMLFactory.php b/module/VuFind/src/VuFind/AjaxHandler/GetRecordCommentsAsHTMLFactory.php
index 2d59fa021fa..e49227b1866 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetRecordCommentsAsHTMLFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetRecordCommentsAsHTMLFactory.php
@@ -39,7 +39,7 @@ use Interop\Container\ContainerInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class GetRecordCommentsAsHTMLFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetRecordDetails.php b/module/VuFind/src/VuFind/AjaxHandler/GetRecordDetails.php
index f30d23363b6..ec6eee3f1f3 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetRecordDetails.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetRecordDetails.php
@@ -27,11 +27,11 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Http\PhpEnvironment\Request;
+use Laminas\Mvc\Controller\Plugin\Params;
+use Laminas\View\Renderer\RendererInterface;
 use VuFind\Record\Loader;
 use VuFind\RecordTab\TabManager;
-use Zend\Http\PhpEnvironment\Request;
-use Zend\Mvc\Controller\Plugin\Params;
-use Zend\View\Renderer\RendererInterface;
 
 /**
  * "Get Record Details" AJAX handler
@@ -47,7 +47,7 @@ use Zend\View\Renderer\RendererInterface;
 class GetRecordDetails extends AbstractBase
 {
     /**
-     * ZF configuration
+     * Framework configuration
      *
      * @var array
      */
@@ -84,7 +84,7 @@ class GetRecordDetails extends AbstractBase
     /**
      * Constructor
      *
-     * @param array             $config   ZF configuration
+     * @param array             $config   Framework configuration
      * @param Request           $request  HTTP request
      * @param Loader            $loader   Record loader
      * @param TabManager        $tm       Record Tab manager
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetRecordDetailsFactory.php b/module/VuFind/src/VuFind/AjaxHandler/GetRecordDetailsFactory.php
index 8730340ed54..ef623b14165 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetRecordDetailsFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetRecordDetailsFactory.php
@@ -39,7 +39,7 @@ use Interop\Container\ContainerInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class GetRecordDetailsFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetRecordTags.php b/module/VuFind/src/VuFind/AjaxHandler/GetRecordTags.php
index 23444f21123..fb269051f86 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetRecordTags.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetRecordTags.php
@@ -27,10 +27,10 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Mvc\Controller\Plugin\Params;
+use Laminas\View\Renderer\RendererInterface;
 use VuFind\Db\Row\User;
 use VuFind\Db\Table\Tags;
-use Zend\Mvc\Controller\Plugin\Params;
-use Zend\View\Renderer\RendererInterface;
 
 /**
  * AJAX handler to get all tags for a record as HTML.
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetRecordTagsFactory.php b/module/VuFind/src/VuFind/AjaxHandler/GetRecordTagsFactory.php
index b643a7596ff..0347dbdc06e 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetRecordTagsFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetRecordTagsFactory.php
@@ -38,7 +38,8 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class GetRecordTagsFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class GetRecordTagsFactory
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetRequestGroupPickupLocations.php b/module/VuFind/src/VuFind/AjaxHandler/GetRequestGroupPickupLocations.php
index 73ab22d9cfa..8ac97468d1f 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetRequestGroupPickupLocations.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetRequestGroupPickupLocations.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\AjaxHandler;
 
-use Zend\Mvc\Controller\Plugin\Params;
+use Laminas\Mvc\Controller\Plugin\Params;
 
 /**
  * "Get Request Group Pickup Locations" AJAX handler
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetResolverLinks.php b/module/VuFind/src/VuFind/AjaxHandler/GetResolverLinks.php
index 8e24b129313..cb11a0fb157 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetResolverLinks.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetResolverLinks.php
@@ -28,13 +28,13 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Config\Config;
+use Laminas\Mvc\Controller\Plugin\Params;
+use Laminas\View\Renderer\RendererInterface;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
 use VuFind\Resolver\Connection;
 use VuFind\Resolver\Driver\PluginManager as ResolverManager;
 use VuFind\Session\Settings as SessionSettings;
-use Zend\Config\Config;
-use Zend\Mvc\Controller\Plugin\Params;
-use Zend\View\Renderer\RendererInterface;
 
 /**
  * "Get Resolver Links" AJAX handler
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetResolverLinksFactory.php b/module/VuFind/src/VuFind/AjaxHandler/GetResolverLinksFactory.php
index 55d1f52103b..4cc1312970c 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetResolverLinksFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetResolverLinksFactory.php
@@ -39,7 +39,7 @@ use Interop\Container\ContainerInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class GetResolverLinksFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetSaveStatuses.php b/module/VuFind/src/VuFind/AjaxHandler/GetSaveStatuses.php
index 8f8dd2cf7d0..08010009013 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetSaveStatuses.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetSaveStatuses.php
@@ -27,11 +27,11 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Mvc\Controller\Plugin\Params;
+use Laminas\Mvc\Controller\Plugin\Url;
 use VuFind\Db\Row\User;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
 use VuFind\Session\Settings as SessionSettings;
-use Zend\Mvc\Controller\Plugin\Params;
-use Zend\Mvc\Controller\Plugin\Url;
 
 /**
  * "Get Save Statuses" AJAX handler
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetSaveStatusesFactory.php b/module/VuFind/src/VuFind/AjaxHandler/GetSaveStatusesFactory.php
index cdad3bdcff3..13bd2053523 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetSaveStatusesFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetSaveStatusesFactory.php
@@ -38,7 +38,8 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class GetSaveStatusesFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class GetSaveStatusesFactory
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetSideFacets.php b/module/VuFind/src/VuFind/AjaxHandler/GetSideFacets.php
index 237b28cb781..eee1cf677c4 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetSideFacets.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetSideFacets.php
@@ -27,6 +27,8 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Mvc\Controller\Plugin\Params;
+use Laminas\View\Renderer\RendererInterface;
 use VuFind\Recommend\PluginManager as RecommendPluginManager;
 use VuFind\Recommend\SideFacets;
 use VuFind\Search\Base\Results;
@@ -35,8 +37,6 @@ use VuFind\Search\SearchRunner;
 use VuFind\Search\Solr\HierarchicalFacetHelper;
 use VuFind\Search\UrlQueryHelper;
 use VuFind\Session\Settings as SessionSettings;
-use Zend\Mvc\Controller\Plugin\Params;
-use Zend\View\Renderer\RendererInterface;
 
 /**
  * "Get Side Facets" AJAX handler
@@ -48,7 +48,7 @@ use Zend\View\Renderer\RendererInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class GetSideFacets extends \VuFind\AjaxHandler\AbstractBase
-    implements \Zend\Log\LoggerAwareInterface
+    implements \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
 
@@ -94,13 +94,13 @@ class GetSideFacets extends \VuFind\AjaxHandler\AbstractBase
      * @param RecommendPluginManager  $rpm      Recommend plugin manager
      * @param SearchRunner            $sr       Search runner
      * @param HierarchicalFacetHelper $fh       Facet helper
-     * @param \Zend\Config\Config     $fc       Facet config
+     * @param \Laminas\Config\Config  $fc       Facet config
      * @param RendererInterface       $renderer View renderer
      */
     public function __construct(SessionSettings $ss,
         \VuFind\Recommend\PluginManager $rpm,
         SearchRunner $sr, HierarchicalFacetHelper $fh,
-        \Zend\Config\Config $fc, RendererInterface $renderer
+        \Laminas\Config\Config $fc, RendererInterface $renderer
     ) {
         $this->sessionSettings = $ss;
         $this->recommendPluginManager = $rpm;
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetSideFacetsFactory.php b/module/VuFind/src/VuFind/AjaxHandler/GetSideFacetsFactory.php
index 420747730f5..bdaccbacf5f 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetSideFacetsFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetSideFacetsFactory.php
@@ -38,7 +38,8 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class GetSideFacetsFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class GetSideFacetsFactory
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetUserFines.php b/module/VuFind/src/VuFind/AjaxHandler/GetUserFines.php
index 8355f978cef..78faec110cf 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetUserFines.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetUserFines.php
@@ -27,12 +27,12 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Mvc\Controller\Plugin\Params;
 use VuFind\Auth\ILSAuthenticator;
 use VuFind\Db\Row\User;
 use VuFind\ILS\Connection;
 use VuFind\Session\Settings as SessionSettings;
 use VuFind\View\Helper\Root\SafeMoneyFormat;
-use Zend\Mvc\Controller\Plugin\Params;
 
 /**
  * "Get User Fines" AJAX handler
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetUserFinesFactory.php b/module/VuFind/src/VuFind/AjaxHandler/GetUserFinesFactory.php
index de13fa22efe..18b917f6caa 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetUserFinesFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetUserFinesFactory.php
@@ -39,7 +39,7 @@ use Interop\Container\ContainerInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class GetUserFinesFactory extends AbstractIlsAndUserActionFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetUserTransactions.php b/module/VuFind/src/VuFind/AjaxHandler/GetUserTransactions.php
index 181d2e8c3c3..6126c7409de 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetUserTransactions.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetUserTransactions.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\AjaxHandler;
 
-use Zend\Mvc\Controller\Plugin\Params;
+use Laminas\Mvc\Controller\Plugin\Params;
 
 /**
  * "Get User Transactions" AJAX handler
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetVisData.php b/module/VuFind/src/VuFind/AjaxHandler/GetVisData.php
index 410a44ad803..2a461275843 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetVisData.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetVisData.php
@@ -29,10 +29,10 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Mvc\Controller\Plugin\Params;
+use Laminas\Stdlib\Parameters;
 use VuFind\Search\Solr\Results;
 use VuFind\Session\Settings as SessionSettings;
-use Zend\Mvc\Controller\Plugin\Params;
-use Zend\Stdlib\Parameters;
 
 /**
  * "Get Visualization Data" AJAX handler
diff --git a/module/VuFind/src/VuFind/AjaxHandler/GetVisDataFactory.php b/module/VuFind/src/VuFind/AjaxHandler/GetVisDataFactory.php
index ab528e3c55a..0e7ab803366 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/GetVisDataFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/GetVisDataFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class GetVisDataFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class GetVisDataFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/KeepAlive.php b/module/VuFind/src/VuFind/AjaxHandler/KeepAlive.php
index 1bb71cd1f7d..b55e152583a 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/KeepAlive.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/KeepAlive.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\AjaxHandler;
 
-use Zend\Mvc\Controller\Plugin\Params;
-use Zend\Session\SessionManager;
+use Laminas\Mvc\Controller\Plugin\Params;
+use Laminas\Session\SessionManager;
 
 /**
  * "Keep Alive" AJAX handler
diff --git a/module/VuFind/src/VuFind/AjaxHandler/KeepAliveFactory.php b/module/VuFind/src/VuFind/AjaxHandler/KeepAliveFactory.php
index 824a091815d..81a7d9dcaf3 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/KeepAliveFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/KeepAliveFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class KeepAliveFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class KeepAliveFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
@@ -63,7 +63,7 @@ class KeepAliveFactory implements \Zend\ServiceManager\Factory\FactoryInterface
             throw new \Exception('Unexpected options passed to factory.');
         }
         return new $requestedName(
-            $container->get(\Zend\Session\SessionManager::class)
+            $container->get(\Laminas\Session\SessionManager::class)
         );
     }
 }
diff --git a/module/VuFind/src/VuFind/AjaxHandler/Recommend.php b/module/VuFind/src/VuFind/AjaxHandler/Recommend.php
index df4105b89e0..d43fb3374ed 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/Recommend.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/Recommend.php
@@ -27,12 +27,12 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Mvc\Controller\Plugin\Params;
+use Laminas\Stdlib\Parameters;
+use Laminas\View\Renderer\RendererInterface;
 use VuFind\Recommend\PluginManager as RecommendManager;
 use VuFind\Search\Solr\Results;
 use VuFind\Session\Settings as SessionSettings;
-use Zend\Mvc\Controller\Plugin\Params;
-use Zend\Stdlib\Parameters;
-use Zend\View\Renderer\RendererInterface;
 
 /**
  * Load a recommendation module via AJAX.
diff --git a/module/VuFind/src/VuFind/AjaxHandler/RecommendFactory.php b/module/VuFind/src/VuFind/AjaxHandler/RecommendFactory.php
index 06a0de3a6b0..cc4f7eebdd2 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/RecommendFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/RecommendFactory.php
@@ -39,7 +39,7 @@ use VuFind\Search\Results\PluginManager as ResultsManager;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class RecommendFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class RecommendFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/AjaxHandler/RelaisAvailability.php b/module/VuFind/src/VuFind/AjaxHandler/RelaisAvailability.php
index 17299a7f714..d7d1e004ed9 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/RelaisAvailability.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/RelaisAvailability.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\AjaxHandler;
 
-use Zend\Mvc\Controller\Plugin\Params;
+use Laminas\Mvc\Controller\Plugin\Params;
 
 /**
  * Relais: Check item availability using a generic patron ID
diff --git a/module/VuFind/src/VuFind/AjaxHandler/RelaisInfo.php b/module/VuFind/src/VuFind/AjaxHandler/RelaisInfo.php
index c4ca1c5fa5c..d1e8f5ff8c7 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/RelaisInfo.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/RelaisInfo.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\AjaxHandler;
 
-use Zend\Mvc\Controller\Plugin\Params;
+use Laminas\Mvc\Controller\Plugin\Params;
 
 /**
  * Relais: Check if logged-in patron can order an item.
diff --git a/module/VuFind/src/VuFind/AjaxHandler/RelaisOrder.php b/module/VuFind/src/VuFind/AjaxHandler/RelaisOrder.php
index 689d8edcf1d..412b202590f 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/RelaisOrder.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/RelaisOrder.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\AjaxHandler;
 
-use Zend\Mvc\Controller\Plugin\Params;
+use Laminas\Mvc\Controller\Plugin\Params;
 
 /**
  * Relais: Order an item.
diff --git a/module/VuFind/src/VuFind/AjaxHandler/SystemStatus.php b/module/VuFind/src/VuFind/AjaxHandler/SystemStatus.php
index 771014dd86a..2dfca565aec 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/SystemStatus.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/SystemStatus.php
@@ -27,11 +27,11 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Config\Config;
+use Laminas\Mvc\Controller\Plugin\Params;
+use Laminas\Session\SessionManager;
 use VuFind\Db\Table\Session;
 use VuFind\Search\Results\PluginManager as ResultsManager;
-use Zend\Config\Config;
-use Zend\Mvc\Controller\Plugin\Params;
-use Zend\Session\SessionManager;
 
 /**
  * "Keep Alive" AJAX handler
diff --git a/module/VuFind/src/VuFind/AjaxHandler/SystemStatusFactory.php b/module/VuFind/src/VuFind/AjaxHandler/SystemStatusFactory.php
index fbe8e953a5e..4d0a11dee7e 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/SystemStatusFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/SystemStatusFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class SystemStatusFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class SystemStatusFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
@@ -64,7 +64,7 @@ class SystemStatusFactory implements \Zend\ServiceManager\Factory\FactoryInterfa
         }
         $tablePluginManager = $container->get(\VuFind\Db\Table\PluginManager::class);
         return new $requestedName(
-            $container->get(\Zend\Session\SessionManager::class),
+            $container->get(\Laminas\Session\SessionManager::class),
             $container->get(\VuFind\Search\Results\PluginManager::class),
             $container->get(\VuFind\Config\PluginManager::class)->get('config'),
             $tablePluginManager->get(\VuFind\Db\Table\Session::class)
diff --git a/module/VuFind/src/VuFind/AjaxHandler/TagRecord.php b/module/VuFind/src/VuFind/AjaxHandler/TagRecord.php
index d4a68dcb49a..53d80ebc744 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/TagRecord.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/TagRecord.php
@@ -27,11 +27,11 @@
  */
 namespace VuFind\AjaxHandler;
 
+use Laminas\Mvc\Controller\Plugin\Params;
 use VuFind\Db\Row\User;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
 use VuFind\Record\Loader;
 use VuFind\Tags;
-use Zend\Mvc\Controller\Plugin\Params;
 
 /**
  * AJAX handler to tag/untag a record.
diff --git a/module/VuFind/src/VuFind/AjaxHandler/TagRecordFactory.php b/module/VuFind/src/VuFind/AjaxHandler/TagRecordFactory.php
index 8f75dddafb5..2d7e97c1edd 100644
--- a/module/VuFind/src/VuFind/AjaxHandler/TagRecordFactory.php
+++ b/module/VuFind/src/VuFind/AjaxHandler/TagRecordFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class TagRecordFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class TagRecordFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Auth/AbstractBase.php b/module/VuFind/src/VuFind/Auth/AbstractBase.php
index e01ecb93d2e..232e3bebd7c 100644
--- a/module/VuFind/src/VuFind/Auth/AbstractBase.php
+++ b/module/VuFind/src/VuFind/Auth/AbstractBase.php
@@ -28,6 +28,7 @@
  */
 namespace VuFind\Auth;
 
+use Laminas\Http\PhpEnvironment\Request;
 use VuFind\Db\Row\User;
 use VuFind\Exception\Auth as AuthException;
 
@@ -42,7 +43,8 @@ use VuFind\Exception\Auth as AuthException;
  * @link     https://vufind.org Main Page
  */
 abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
-    \VuFind\I18n\Translator\TranslatorAwareInterface, \Zend\Log\LoggerAwareInterface
+    \VuFind\I18n\Translator\TranslatorAwareInterface,
+    \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Db\Table\DbTableAwareTrait;
     use \VuFind\I18n\Translator\TranslatorAwareTrait;
@@ -58,7 +60,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
     /**
      * Configuration settings
      *
-     * @param \Zend\Config\Config
+     * @param \Laminas\Config\Config
      */
     protected $config = null;
 
@@ -67,7 +69,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
      * exception if the configuration is invalid.
      *
      * @throws AuthException
-     * @return \Zend\Config\Config
+     * @return \Laminas\Config\Config
      */
     public function getConfig()
     {
@@ -85,7 +87,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
      * essentially an event hook which most auth modules can ignore. See
      * ChoiceAuth for a use case example.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object.
+     * @param Request $request Request object.
      *
      * @throws AuthException
      * @return void
@@ -111,7 +113,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
     /**
      * Set configuration.
      *
-     * @param \Zend\Config\Config $config Configuration to set
+     * @param \Laminas\Config\Config $config Configuration to set
      *
      * @return void
      */
@@ -124,7 +126,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
     /**
      * Whether this authentication method needs CSRF checking for the request.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object.
+     * @param Request $request Request object.
      *
      * @return bool
      *
@@ -139,13 +141,13 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
     /**
      * Returns any authentication method this request should be delegated to.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object.
+     * @param Request $request Request object.
      *
      * @return string|bool
      *
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function getDelegateAuthMethod(\Zend\Http\PhpEnvironment\Request $request)
+    public function getDelegateAuthMethod(Request $request)
     {
         // No delegate by default
         return false;
@@ -167,8 +169,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
     /**
      * Attempt to authenticate the current user.  Throws exception if login fails.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
-     * account credentials.
+     * @param Request $request Request object containing account credentials.
      *
      * @throws AuthException
      * @return User Object representing logged-in user.
@@ -180,8 +181,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
      * of the current logged-in user. Return true for valid credentials, false
      * otherwise.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
-     * account credentials.
+     * @param Request $request Request object containing account credentials.
      *
      * @throws AuthException
      * @return bool
@@ -210,8 +210,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
     /**
      * Create a new user account from the request.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
-     * new account details.
+     * @param Request $request Request object containing new account details.
      *
      * @throws AuthException
      * @return User New user row.
@@ -228,8 +227,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
     /**
      * Update a user's password from the request.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
-     * new account details.
+     * @param Request $request Request object containing new account details.
      *
      * @throws AuthException
      * @return User New user row.
diff --git a/module/VuFind/src/VuFind/Auth/AlmaDatabase.php b/module/VuFind/src/VuFind/Auth/AlmaDatabase.php
index 0e609f493f9..983e8d432a5 100644
--- a/module/VuFind/src/VuFind/Auth/AlmaDatabase.php
+++ b/module/VuFind/src/VuFind/Auth/AlmaDatabase.php
@@ -88,7 +88,7 @@ class AlmaDatabase extends Database
     /**
      * Create a new user account in Alma AND in the VuFind Database.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object containing
      *                                                   new account details.
      *
      * @return NULL|\VuFind\Db\Row\User New user row.
diff --git a/module/VuFind/src/VuFind/Auth/CAS.php b/module/VuFind/src/VuFind/Auth/CAS.php
index 341ea989e42..489812cf711 100644
--- a/module/VuFind/src/VuFind/Auth/CAS.php
+++ b/module/VuFind/src/VuFind/Auth/CAS.php
@@ -107,7 +107,7 @@ class CAS extends AbstractBase
     /**
      * Attempt to authenticate the current user.  Throws exception if login fails.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object containing
      * account credentials.
      *
      * @throws AuthException
diff --git a/module/VuFind/src/VuFind/Auth/ChoiceAuth.php b/module/VuFind/src/VuFind/Auth/ChoiceAuth.php
index adbbeb42d4a..3a0b1e5606d 100644
--- a/module/VuFind/src/VuFind/Auth/ChoiceAuth.php
+++ b/module/VuFind/src/VuFind/Auth/ChoiceAuth.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\Auth;
 
+use Laminas\Http\PhpEnvironment\Request;
 use VuFind\Db\Row\User;
 use VuFind\Exception\Auth as AuthException;
-use Zend\Http\PhpEnvironment\Request;
 
 /**
  * ChoiceAuth Authentication plugin
@@ -71,17 +71,17 @@ class ChoiceAuth extends AbstractBase
     /**
      * Session container
      *
-     * @var \Zend\Session\Container
+     * @var \Laminas\Session\Container
      */
     protected $session;
 
     /**
      * Constructor
      *
-     * @param \Zend\Session\Container $container Session container for retaining
+     * @param \Laminas\Session\Container $container Session container for retaining
      * user choices.
      */
-    public function __construct(\Zend\Session\Container $container)
+    public function __construct(\Laminas\Session\Container $container)
     {
         // Set up session container and load cached strategy (if found):
         $this->session = $container;
@@ -112,7 +112,7 @@ class ChoiceAuth extends AbstractBase
     /**
      * Set configuration; throw an exception if it is invalid.
      *
-     * @param \Zend\Config\Config $config Configuration to set
+     * @param \Laminas\Config\Config $config Configuration to set
      *
      * @throws AuthException
      * @return void
@@ -130,7 +130,7 @@ class ChoiceAuth extends AbstractBase
      * essentially an event hook which most auth modules can ignore. See
      * ChoiceAuth for a use case example.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object.
+     * @param Request $request Request object.
      *
      * @throws AuthException
      * @return void
@@ -326,13 +326,13 @@ class ChoiceAuth extends AbstractBase
     /**
      * Returns any authentication method this request should be delegated to.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object.
+     * @param Request $request Request object.
      *
      * @return string|bool
      *
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function getDelegateAuthMethod(\Zend\Http\PhpEnvironment\Request $request)
+    public function getDelegateAuthMethod(Request $request)
     {
         return $this->proxyAuthMethod('getDelegateAuthMethod', func_get_args());
     }
@@ -430,8 +430,7 @@ class ChoiceAuth extends AbstractBase
      * of the current logged-in user. Return true for valid credentials, false
      * otherwise.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
-     * account credentials.
+     * @param Request $request Request object containing account credentials.
      *
      * @throws AuthException
      * @return bool
@@ -452,7 +451,7 @@ class ChoiceAuth extends AbstractBase
     /**
      * Whether this authentication method needs CSRF checking for the request.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object.
+     * @param Request $request Request object.
      *
      * @return bool
      *
diff --git a/module/VuFind/src/VuFind/Auth/ChoiceAuthFactory.php b/module/VuFind/src/VuFind/Auth/ChoiceAuthFactory.php
index 4a298a13e6e..d9bcd004ccd 100644
--- a/module/VuFind/src/VuFind/Auth/ChoiceAuthFactory.php
+++ b/module/VuFind/src/VuFind/Auth/ChoiceAuthFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class ChoiceAuthFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class ChoiceAuthFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
@@ -60,8 +60,8 @@ class ChoiceAuthFactory implements \Zend\ServiceManager\Factory\FactoryInterface
         if (!empty($options)) {
             throw new \Exception('Unexpected options sent to factory.');
         }
-        $session = new \Zend\Session\Container(
-            'ChoiceAuth', $container->get(\Zend\Session\SessionManager::class)
+        $session = new \Laminas\Session\Container(
+            'ChoiceAuth', $container->get(\Laminas\Session\SessionManager::class)
         );
         $auth = new $requestedName($session);
         $auth->setPluginManager($container->get(PluginManager::class));
diff --git a/module/VuFind/src/VuFind/Auth/Database.php b/module/VuFind/src/VuFind/Auth/Database.php
index f81a82eae61..4c4f3a0f5fe 100644
--- a/module/VuFind/src/VuFind/Auth/Database.php
+++ b/module/VuFind/src/VuFind/Auth/Database.php
@@ -29,12 +29,12 @@
  */
 namespace VuFind\Auth;
 
+use Laminas\Crypt\Password\Bcrypt;
+use Laminas\Http\PhpEnvironment\Request;
 use VuFind\Db\Row\User;
 use VuFind\Db\Table\User as UserTable;
 use VuFind\Exception\Auth as AuthException;
 use VuFind\Exception\AuthEmailNotVerified as AuthEmailNotVerifiedException;
-use Zend\Crypt\Password\Bcrypt;
-use Zend\Http\PhpEnvironment\Request;
 
 /**
  * Database authentication class
@@ -361,7 +361,7 @@ class Database extends AbstractBase
     protected function validateParams($params, $table)
     {
         // Invalid Email Check
-        $validator = new \Zend\Validator\EmailAddress();
+        $validator = new \Laminas\Validator\EmailAddress();
         if (!$validator->isValid($params['email'])) {
             throw new AuthException('Email address is invalid');
         }
diff --git a/module/VuFind/src/VuFind/Auth/Email.php b/module/VuFind/src/VuFind/Auth/Email.php
index 9c9e9a0ee7d..f29ecadeb68 100644
--- a/module/VuFind/src/VuFind/Auth/Email.php
+++ b/module/VuFind/src/VuFind/Auth/Email.php
@@ -60,7 +60,7 @@ class Email extends AbstractBase
     /**
      * Attempt to authenticate the current user.  Throws exception if login fails.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object containing
      * account credentials.
      *
      * @throws AuthException
@@ -110,7 +110,7 @@ class Email extends AbstractBase
     /**
      * Whether this authentication method needs CSRF checking for the request.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object.
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object.
      *
      * @return bool
      */
diff --git a/module/VuFind/src/VuFind/Auth/EmailAuthenticator.php b/module/VuFind/src/VuFind/Auth/EmailAuthenticator.php
index 57c2d6c2aa3..6c0dbe15ad5 100644
--- a/module/VuFind/src/VuFind/Auth/EmailAuthenticator.php
+++ b/module/VuFind/src/VuFind/Auth/EmailAuthenticator.php
@@ -27,9 +27,10 @@
  */
 namespace VuFind\Auth;
 
+use Laminas\Http\PhpEnvironment\RemoteAddress;
+use Laminas\Http\PhpEnvironment\Request;
 use VuFind\DB\Table\AuthHash as AuthHashTable;
 use VuFind\Exception\Auth as AuthException;
-use Zend\Http\PhpEnvironment\RemoteAddress;
 
 /**
  * Class for managing email-based authentication.
@@ -50,7 +51,7 @@ class EmailAuthenticator implements \VuFind\I18n\Translator\TranslatorAwareInter
     /**
      * Session Manager
      *
-     * @var \Zend\Session\SessionManager
+     * @var \Laminas\Session\SessionManager
      */
     protected $sessionManager = null;
 
@@ -71,7 +72,7 @@ class EmailAuthenticator implements \VuFind\I18n\Translator\TranslatorAwareInter
     /**
      * View Renderer
      *
-     * @var \Zend\View\Renderer\RendererInterface
+     * @var \Laminas\View\Renderer\RendererInterface
      */
     protected $viewRenderer = null;
 
@@ -85,7 +86,7 @@ class EmailAuthenticator implements \VuFind\I18n\Translator\TranslatorAwareInter
     /**
      * Configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
@@ -106,19 +107,19 @@ class EmailAuthenticator implements \VuFind\I18n\Translator\TranslatorAwareInter
     /**
      * Constructor
      *
-     * @param \Zend\Session\SessionManager          $session      Session Manager
-     * @param \VuFind\Validator\Csrf                $csrf         CSRF Validator
-     * @param \VuFind\Mailer\Mailer                 $mailer       Mailer
-     * @param \Zend\View\Renderer\RendererInterface $viewRenderer View Renderer
-     * @param RemoteAddress                         $remoteAddr   Remote address
-     * @param \Zend\Config\Config                   $config       Configuration
-     * @param AuthHashTable                         $authHash     AuthHash Table
+     * @param \Laminas\Session\SessionManager          $session      Session Manager
+     * @param \VuFind\Validator\Csrf                   $csrf         CSRF Validator
+     * @param \VuFind\Mailer\Mailer                    $mailer       Mailer
+     * @param \Laminas\View\Renderer\RendererInterface $viewRenderer View Renderer
+     * @param RemoteAddress                            $remoteAddr   Remote address
+     * @param \Laminas\Config\Config                   $config       Configuration
+     * @param AuthHashTable                            $authHash     AuthHash Table
      */
-    public function __construct(\Zend\Session\SessionManager $session,
+    public function __construct(\Laminas\Session\SessionManager $session,
         \VuFind\Validator\Csrf $csrf, \VuFind\Mailer\Mailer $mailer,
-        \Zend\View\Renderer\RendererInterface $viewRenderer,
+        \Laminas\View\Renderer\RendererInterface $viewRenderer,
         RemoteAddress $remoteAddr,
-        \Zend\Config\Config $config, AuthHashTable $authHash
+        \Laminas\Config\Config $config, AuthHashTable $authHash
     ) {
         $this->sessionManager = $session;
         $this->csrf = $csrf;
@@ -233,11 +234,11 @@ class EmailAuthenticator implements \VuFind\I18n\Translator\TranslatorAwareInter
     /**
      * Check if the given request is a valid login request
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object.
+     * @param Request $request Request object.
      *
      * @return bool
      */
-    public function isValidLoginRequest(\Zend\Http\PhpEnvironment\Request $request)
+    public function isValidLoginRequest(Request $request)
     {
         $hash = $request->getPost()->get(
             'hash',
diff --git a/module/VuFind/src/VuFind/Auth/EmailAuthenticatorFactory.php b/module/VuFind/src/VuFind/Auth/EmailAuthenticatorFactory.php
index 2cfa4abb879..9ca16a6def3 100644
--- a/module/VuFind/src/VuFind/Auth/EmailAuthenticatorFactory.php
+++ b/module/VuFind/src/VuFind/Auth/EmailAuthenticatorFactory.php
@@ -39,7 +39,7 @@ use Interop\Container\ContainerInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class EmailAuthenticatorFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
@@ -62,11 +62,11 @@ class EmailAuthenticatorFactory
             throw new \Exception('Unexpected options sent to factory.');
         }
         return new $requestedName(
-            $container->get(\Zend\Session\SessionManager::class),
+            $container->get(\Laminas\Session\SessionManager::class),
             $container->get(\VuFind\Validator\Csrf::class),
             $container->get(\VuFind\Mailer\Mailer::class),
             $container->get('ViewRenderer'),
-            $container->get(\Zend\Http\PhpEnvironment\RemoteAddress::class),
+            $container->get(\Laminas\Http\PhpEnvironment\RemoteAddress::class),
             $container->get(\VuFind\Config\PluginManager::class)->get('config'),
             $container->get(\VuFind\Db\Table\PluginManager::class)
                 ->get(\VuFind\Db\Table\AuthHash::class)
diff --git a/module/VuFind/src/VuFind/Auth/EmailFactory.php b/module/VuFind/src/VuFind/Auth/EmailFactory.php
index 60dc9055212..96551a32057 100644
--- a/module/VuFind/src/VuFind/Auth/EmailFactory.php
+++ b/module/VuFind/src/VuFind/Auth/EmailFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class EmailFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class EmailFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Auth/Facebook.php b/module/VuFind/src/VuFind/Auth/Facebook.php
index c63b2bef1ca..02f2bbc3b0f 100644
--- a/module/VuFind/src/VuFind/Auth/Facebook.php
+++ b/module/VuFind/src/VuFind/Auth/Facebook.php
@@ -48,17 +48,17 @@ class Facebook extends AbstractBase implements
     /**
      * Session container
      *
-     * @var \Zend\Session\Container
+     * @var \Laminas\Session\Container
      */
     protected $session;
 
     /**
      * Constructor
      *
-     * @param \Zend\Session\Container $container Session container for persisting
+     * @param \Laminas\Session\Container $container Session container for persisting
      * state information.
      */
-    public function __construct(\Zend\Session\Container $container)
+    public function __construct(\Laminas\Session\Container $container)
     {
         $this->session = $container;
     }
@@ -91,7 +91,7 @@ class Facebook extends AbstractBase implements
     /**
      * Attempt to authenticate the current user.  Throws exception if login fails.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object containing
      * account credentials.
      *
      * @throws AuthException
diff --git a/module/VuFind/src/VuFind/Auth/FacebookFactory.php b/module/VuFind/src/VuFind/Auth/FacebookFactory.php
index 29426d0226c..6aaec75e733 100644
--- a/module/VuFind/src/VuFind/Auth/FacebookFactory.php
+++ b/module/VuFind/src/VuFind/Auth/FacebookFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class FacebookFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class FacebookFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
@@ -60,8 +60,8 @@ class FacebookFactory implements \Zend\ServiceManager\Factory\FactoryInterface
         if (!empty($options)) {
             throw new \Exception('Unexpected options sent to factory.');
         }
-        $session = new \Zend\Session\Container(
-            'Facebook', $container->get(\Zend\Session\SessionManager::class)
+        $session = new \Laminas\Session\Container(
+            'Facebook', $container->get(\Laminas\Session\SessionManager::class)
         );
         return new $requestedName($session);
     }
diff --git a/module/VuFind/src/VuFind/Auth/ILS.php b/module/VuFind/src/VuFind/Auth/ILS.php
index 8923d7aa042..b20b21f78e9 100644
--- a/module/VuFind/src/VuFind/Auth/ILS.php
+++ b/module/VuFind/src/VuFind/Auth/ILS.php
@@ -28,6 +28,7 @@
  */
 namespace VuFind\Auth;
 
+use Laminas\Http\PhpEnvironment\Request;
 use VuFind\Exception\Auth as AuthException;
 use VuFind\Exception\ILS as ILSException;
 
@@ -107,8 +108,7 @@ class ILS extends AbstractBase
     /**
      * Attempt to authenticate the current user.  Throws exception if login fails.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
-     * account credentials.
+     * @param Request $request Request object containing account credentials.
      *
      * @throws AuthException
      * @return \VuFind\Db\Row\User Object representing logged-in user.
@@ -159,8 +159,7 @@ class ILS extends AbstractBase
     /**
      * Update a user's password from the request.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
-     * new account details.
+     * @param Request $request Request object containing new account details.
      *
      * @throws AuthException
      * @return \VuFind\Db\Row\User New user row.
@@ -218,11 +217,11 @@ class ILS extends AbstractBase
     /**
      * Returns any authentication method this request should be delegated to.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object.
+     * @param Request $request Request object.
      *
      * @return string|bool
      */
-    public function getDelegateAuthMethod(\Zend\Http\PhpEnvironment\Request $request)
+    public function getDelegateAuthMethod(Request $request)
     {
         return (null !== $this->emailAuthenticator
             && $this->emailAuthenticator->isValidLoginRequest($request))
diff --git a/module/VuFind/src/VuFind/Auth/ILSAuthenticatorFactory.php b/module/VuFind/src/VuFind/Auth/ILSAuthenticatorFactory.php
index 92cbaddd7f4..725f363ef4a 100644
--- a/module/VuFind/src/VuFind/Auth/ILSAuthenticatorFactory.php
+++ b/module/VuFind/src/VuFind/Auth/ILSAuthenticatorFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Auth;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * ILS Authenticator factory.
diff --git a/module/VuFind/src/VuFind/Auth/ILSFactory.php b/module/VuFind/src/VuFind/Auth/ILSFactory.php
index 2d1d59469f5..72d1643c7cd 100644
--- a/module/VuFind/src/VuFind/Auth/ILSFactory.php
+++ b/module/VuFind/src/VuFind/Auth/ILSFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class IlsFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class IlsFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Auth/LDAP.php b/module/VuFind/src/VuFind/Auth/LDAP.php
index 5927eb61b37..52621c212f1 100644
--- a/module/VuFind/src/VuFind/Auth/LDAP.php
+++ b/module/VuFind/src/VuFind/Auth/LDAP.php
@@ -86,7 +86,7 @@ class LDAP extends AbstractBase
     /**
      * Attempt to authenticate the current user.  Throws exception if login fails.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object containing
      * account credentials.
      *
      * @throws AuthException
diff --git a/module/VuFind/src/VuFind/Auth/Manager.php b/module/VuFind/src/VuFind/Auth/Manager.php
index c5e97b6c72f..ba784230ebc 100644
--- a/module/VuFind/src/VuFind/Auth/Manager.php
+++ b/module/VuFind/src/VuFind/Auth/Manager.php
@@ -27,13 +27,13 @@
  */
 namespace VuFind\Auth;
 
+use Laminas\Config\Config;
+use Laminas\Session\SessionManager;
 use VuFind\Cookie\CookieManager;
 use VuFind\Db\Row\User as UserRow;
 use VuFind\Db\Table\User as UserTable;
 use VuFind\Exception\Auth as AuthException;
 use VuFind\Validator\Csrf;
-use Zend\Config\Config;
-use Zend\Session\SessionManager;
 
 /**
  * Wrapper class for handling logged-in user in session.
@@ -77,7 +77,7 @@ class Manager implements \ZfcRbac\Identity\IdentityProviderInterface
     /**
      * Session container
      *
-     * @var \Zend\Session\Container
+     * @var \Laminas\Session\Container
      */
     protected $session;
 
@@ -139,7 +139,7 @@ class Manager implements \ZfcRbac\Identity\IdentityProviderInterface
         $this->csrf = $csrf;
 
         // Set up session:
-        $this->session = new \Zend\Session\Container('Account', $sessionManager);
+        $this->session = new \Laminas\Session\Container('Account', $sessionManager);
 
         // Initialize active authentication setting (defaulting to Database
         // if no setting passed in):
@@ -414,7 +414,7 @@ class Manager implements \ZfcRbac\Identity\IdentityProviderInterface
             $this->sessionManager->destroy();
         } else {
             // If we don't want to destroy the session, we still need to empty it.
-            // There should be a way to do this through Zend\Session, but there
+            // There should be a way to do this through Laminas\Session, but there
             // apparently isn't (TODO -- do this better):
             $_SESSION = [];
         }
@@ -534,7 +534,7 @@ class Manager implements \ZfcRbac\Identity\IdentityProviderInterface
     /**
      * Create a new user account from the request.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object containing
      * new account details.
      *
      * @throws AuthException
@@ -551,7 +551,7 @@ class Manager implements \ZfcRbac\Identity\IdentityProviderInterface
     /**
      * Update a user's password from the request.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object containing
      * password change details.
      *
      * @throws AuthException
@@ -592,7 +592,7 @@ class Manager implements \ZfcRbac\Identity\IdentityProviderInterface
      * Try to log in the user using current query parameters; return User object
      * on success, throws exception on failure.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object containing
      * account credentials.
      *
      * @throws AuthException
@@ -693,7 +693,7 @@ class Manager implements \ZfcRbac\Identity\IdentityProviderInterface
      * of the current logged-in user. Return true for valid credentials, false
      * otherwise.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object containing
      * account credentials.
      *
      * @throws AuthException
diff --git a/module/VuFind/src/VuFind/Auth/ManagerFactory.php b/module/VuFind/src/VuFind/Auth/ManagerFactory.php
index 6e6f90a09f3..50f824e954d 100644
--- a/module/VuFind/src/VuFind/Auth/ManagerFactory.php
+++ b/module/VuFind/src/VuFind/Auth/ManagerFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Auth;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Authentication Manager factory.
@@ -69,7 +69,7 @@ class ManagerFactory implements FactoryInterface
             // the configuration if necessary.
             $catalog = $container->get(\VuFind\ILS\Connection::class);
             if ($catalog->loginIsHidden()) {
-                $config = new \Zend\Config\Config($config->toArray(), true);
+                $config = new \Laminas\Config\Config($config->toArray(), true);
                 $config->Authentication->hideLogin = true;
                 $config->setReadOnly();
             }
@@ -83,7 +83,7 @@ class ManagerFactory implements FactoryInterface
         // Load remaining dependencies:
         $userTable = $container->get(\VuFind\Db\Table\PluginManager::class)
             ->get('user');
-        $sessionManager = $container->get(\Zend\Session\SessionManager::class);
+        $sessionManager = $container->get(\Laminas\Session\SessionManager::class);
         $pm = $container->get(\VuFind\Auth\PluginManager::class);
         $cookies = $container->get(\VuFind\Cookie\CookieManager::class);
         $csrf = $container->get(\VuFind\Validator\Csrf::class);
diff --git a/module/VuFind/src/VuFind/Auth/MultiAuth.php b/module/VuFind/src/VuFind/Auth/MultiAuth.php
index 3d4eb19cc4c..854d1d5b990 100644
--- a/module/VuFind/src/VuFind/Auth/MultiAuth.php
+++ b/module/VuFind/src/VuFind/Auth/MultiAuth.php
@@ -123,7 +123,7 @@ class MultiAuth extends AbstractBase
     /**
      * Set configuration; throw an exception if it is invalid.
      *
-     * @param \Zend\Config\Config $config Configuration to set
+     * @param \Laminas\Config\Config $config Configuration to set
      *
      * @throws AuthException
      * @return void
@@ -148,7 +148,7 @@ class MultiAuth extends AbstractBase
     /**
      * Attempt to authenticate the current user.  Throws exception if login fails.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object containing
      * account credentials.
      *
      * @throws AuthException
@@ -174,7 +174,7 @@ class MultiAuth extends AbstractBase
     /**
      * Load credentials into the object and apply internal filter settings to them.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object containing
      * account credentials.
      *
      * @return void
@@ -197,7 +197,7 @@ class MultiAuth extends AbstractBase
      * Do the actual work of authenticating the user (support method for
      * authenticate()).
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object containing
      * account credentials.
      *
      * @throws AuthException
diff --git a/module/VuFind/src/VuFind/Auth/MultiAuthFactory.php b/module/VuFind/src/VuFind/Auth/MultiAuthFactory.php
index 45886fe4994..d3367b3738a 100644
--- a/module/VuFind/src/VuFind/Auth/MultiAuthFactory.php
+++ b/module/VuFind/src/VuFind/Auth/MultiAuthFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class MultiAuthFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class MultiAuthFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Auth/MultiILS.php b/module/VuFind/src/VuFind/Auth/MultiILS.php
index 73bc43dfa14..e5e3f67d5c4 100644
--- a/module/VuFind/src/VuFind/Auth/MultiILS.php
+++ b/module/VuFind/src/VuFind/Auth/MultiILS.php
@@ -49,7 +49,7 @@ class MultiILS extends ILS
     /**
      * Attempt to authenticate the current user.  Throws exception if login fails.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object containing
      * account credentials.
      *
      * @throws AuthException
diff --git a/module/VuFind/src/VuFind/Auth/PasswordAccess.php b/module/VuFind/src/VuFind/Auth/PasswordAccess.php
index 4b54f02f124..3e1bf9cbc41 100644
--- a/module/VuFind/src/VuFind/Auth/PasswordAccess.php
+++ b/module/VuFind/src/VuFind/Auth/PasswordAccess.php
@@ -48,7 +48,7 @@ class PasswordAccess extends AbstractBase
      * exception if the configuration is invalid.
      *
      * @throws AuthException
-     * @return \Zend\Config\Config
+     * @return \Laminas\Config\Config
      */
     public function getConfig()
     {
@@ -64,7 +64,7 @@ class PasswordAccess extends AbstractBase
     /**
      * Attempt to authenticate the current user.  Throws exception if login fails.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object containing
      * account credentials.
      *
      * @throws AuthException
diff --git a/module/VuFind/src/VuFind/Auth/PluginManager.php b/module/VuFind/src/VuFind/Auth/PluginManager.php
index 4d29dc5346e..3b503195012 100644
--- a/module/VuFind/src/VuFind/Auth/PluginManager.php
+++ b/module/VuFind/src/VuFind/Auth/PluginManager.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Auth;
 
-use Zend\ServiceManager\Factory\InvokableFactory;
+use Laminas\ServiceManager\Factory\InvokableFactory;
 
 /**
  * Auth handler plugin manager
diff --git a/module/VuFind/src/VuFind/Auth/SIP2.php b/module/VuFind/src/VuFind/Auth/SIP2.php
index ec6fd0b6bfc..9380cc5e440 100644
--- a/module/VuFind/src/VuFind/Auth/SIP2.php
+++ b/module/VuFind/src/VuFind/Auth/SIP2.php
@@ -45,7 +45,7 @@ class SIP2 extends AbstractBase
     /**
      * Attempt to authenticate the current user.  Throws exception if login fails.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object containing
      * account credentials.
      *
      * @throws AuthException
diff --git a/module/VuFind/src/VuFind/Auth/Shibboleth.php b/module/VuFind/src/VuFind/Auth/Shibboleth.php
index 63d5f33e607..fd31e7da376 100644
--- a/module/VuFind/src/VuFind/Auth/Shibboleth.php
+++ b/module/VuFind/src/VuFind/Auth/Shibboleth.php
@@ -54,16 +54,16 @@ class Shibboleth extends AbstractBase
     /**
      * Session manager
      *
-     * @var \Zend\Session\ManagerInterface
+     * @var \Laminas\Session\ManagerInterface
      */
     protected $sessionManager;
 
     /**
      * Constructor
      *
-     * @param \Zend\Session\ManagerInterface $sessionManager Session manager
+     * @param \Laminas\Session\ManagerInterface $sessionManager Session manager
      */
-    public function __construct(\Zend\Session\ManagerInterface $sessionManager)
+    public function __construct(\Laminas\Session\ManagerInterface $sessionManager)
     {
         $this->sessionManager = $sessionManager;
     }
@@ -97,7 +97,7 @@ class Shibboleth extends AbstractBase
     /**
      * Attempt to authenticate the current user.  Throws exception if login fails.
      *
-     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * @param \Laminas\Http\PhpEnvironment\Request $request Request object containing
      * account credentials.
      *
      * @throws AuthException
@@ -232,7 +232,7 @@ class Shibboleth extends AbstractBase
         if (isset($config->Shibboleth->username)
             && isset($config->Shibboleth->logout)
         ) {
-            // It would be more proper to call getServer on a Zend request
+            // It would be more proper to call getServer on a Laminas request
             // object... except that the request object doesn't exist yet when
             // this routine gets called.
             $username = isset($_SERVER[$config->Shibboleth->username])
diff --git a/module/VuFind/src/VuFind/Auth/ShibbolethFactory.php b/module/VuFind/src/VuFind/Auth/ShibbolethFactory.php
index 60b4d412a69..d6aec465c68 100644
--- a/module/VuFind/src/VuFind/Auth/ShibbolethFactory.php
+++ b/module/VuFind/src/VuFind/Auth/ShibbolethFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class ShibbolethFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class ShibbolethFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
@@ -61,7 +61,7 @@ class ShibbolethFactory implements \Zend\ServiceManager\Factory\FactoryInterface
             throw new \Exception('Unexpected options sent to factory.');
         }
         return new $requestedName(
-            $container->get(\Zend\Session\SessionManager::class)
+            $container->get(\Laminas\Session\SessionManager::class)
         );
     }
 }
diff --git a/module/VuFind/src/VuFind/Autocomplete/EdsFactory.php b/module/VuFind/src/VuFind/Autocomplete/EdsFactory.php
index bbc6f65c413..3011ecc4b1f 100644
--- a/module/VuFind/src/VuFind/Autocomplete/EdsFactory.php
+++ b/module/VuFind/src/VuFind/Autocomplete/EdsFactory.php
@@ -40,7 +40,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class EdsFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class EdsFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Autocomplete/PluginManager.php b/module/VuFind/src/VuFind/Autocomplete/PluginManager.php
index 7b991ee0b24..b7a7d8e2a50 100644
--- a/module/VuFind/src/VuFind/Autocomplete/PluginManager.php
+++ b/module/VuFind/src/VuFind/Autocomplete/PluginManager.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Autocomplete;
 
-use Zend\ServiceManager\Factory\InvokableFactory;
+use Laminas\ServiceManager\Factory\InvokableFactory;
 
 /**
  * Autocomplete handler plugin manager
diff --git a/module/VuFind/src/VuFind/Autocomplete/SolrFactory.php b/module/VuFind/src/VuFind/Autocomplete/SolrFactory.php
index fea358c9fd7..5c83ec661a7 100644
--- a/module/VuFind/src/VuFind/Autocomplete/SolrFactory.php
+++ b/module/VuFind/src/VuFind/Autocomplete/SolrFactory.php
@@ -40,7 +40,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class SolrFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class SolrFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Autocomplete/Suggester.php b/module/VuFind/src/VuFind/Autocomplete/Suggester.php
index eb3ea0dbff2..28f6507f18f 100644
--- a/module/VuFind/src/VuFind/Autocomplete/Suggester.php
+++ b/module/VuFind/src/VuFind/Autocomplete/Suggester.php
@@ -27,6 +27,7 @@
  */
 namespace VuFind\Autocomplete;
 
+use Laminas\Stdlib\Parameters;
 use VuFind\Config\PluginManager as ConfigManager;
 use VuFind\Search\Options\PluginManager as OptionsManager;
 
@@ -82,11 +83,9 @@ class Suggester
      * This logic is present in the factory class so that it can be easily shared
      * by multiple AJAX handlers.
      *
-     * @param \Zend\Stdlib\Parameters $request    The user request
-     * @param string                  $typeParam  Request parameter containing search
-     * type
-     * @param string                  $queryParam Request parameter containing query
-     * string
+     * @param Parameters $request    The user request
+     * @param string     $typeParam  Request parameter containing search type
+     * @param string     $queryParam Request parameter containing query string
      *
      * @return array
      */
diff --git a/module/VuFind/src/VuFind/Autocomplete/SuggesterFactory.php b/module/VuFind/src/VuFind/Autocomplete/SuggesterFactory.php
index 8c467489a7d..c9a1e37659e 100644
--- a/module/VuFind/src/VuFind/Autocomplete/SuggesterFactory.php
+++ b/module/VuFind/src/VuFind/Autocomplete/SuggesterFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class SuggesterFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class SuggesterFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Bootstrapper.php b/module/VuFind/src/VuFind/Bootstrapper.php
index d2fb48d7497..60cef717526 100644
--- a/module/VuFind/src/VuFind/Bootstrapper.php
+++ b/module/VuFind/src/VuFind/Bootstrapper.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind;
 
-use Zend\Console\Console;
-use Zend\Mvc\MvcEvent;
-use Zend\Router\Http\RouteMatch;
+use Laminas\Console\Console;
+use Laminas\Mvc\MvcEvent;
+use Laminas\Router\Http\RouteMatch;
 
 /**
  * VuFind Bootstrapper
@@ -47,7 +47,7 @@ class Bootstrapper
     /**
      * Main VuFind configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config = null;
 
@@ -61,14 +61,14 @@ class Bootstrapper
     /**
      * Event manager
      *
-     * @var \Zend\EventManager\EventManagerInterface
+     * @var \Laminas\EventManager\EventManagerInterface
      */
     protected $events;
 
     /**
      * Constructor
      *
-     * @param MvcEvent $event Zend MVC Event object
+     * @param MvcEvent $event Laminas MVC Event object
      */
     public function __construct(MvcEvent $event)
     {
@@ -206,7 +206,7 @@ class Bootstrapper
             $helperManager = $serviceManager->get('ViewHelperManager');
             $headTitle = $helperManager->get('headtitle');
             $headTitle->setDefaultAttachOrder(
-                \Zend\View\Helper\Placeholder\Container\AbstractContainer::SET
+                \Laminas\View\Helper\Placeholder\Container\AbstractContainer::SET
             );
         };
         $this->events->attach('dispatch', $callback);
@@ -307,10 +307,10 @@ class Bootstrapper
                 $language = $config->Site->language;
             }
             try {
-                $translator = $sm->get(\Zend\Mvc\I18n\Translator::class);
+                $translator = $sm->get(\Laminas\Mvc\I18n\Translator::class);
                 $translator->setLocale($language);
                 $this->addLanguageToTranslator($translator, $language);
-            } catch (\Zend\Mvc\I18n\Exception\BadMethodCallException $e) {
+            } catch (\Laminas\Mvc\I18n\Exception\BadMethodCallException $e) {
                 if (!extension_loaded('intl')) {
                     throw new \Exception(
                         'Translation broken due to missing PHP intl extension.'
@@ -413,7 +413,7 @@ class Bootstrapper
                     // Console request does not include server,
                     // so use a dummy in that case.
                     $server = Console::isConsole()
-                        ? new \Zend\Stdlib\Parameters(['env' => 'console'])
+                        ? new \Laminas\Stdlib\Parameters(['env' => 'console'])
                         : $event->getRequest()->getServer();
                     if (!empty($exception)) {
                         $log->logException($exception, $server);
diff --git a/module/VuFind/src/VuFind/Cache/KeyGeneratorTrait.php b/module/VuFind/src/VuFind/Cache/KeyGeneratorTrait.php
index 14c070b3a03..1abb7920fcb 100644
--- a/module/VuFind/src/VuFind/Cache/KeyGeneratorTrait.php
+++ b/module/VuFind/src/VuFind/Cache/KeyGeneratorTrait.php
@@ -59,7 +59,7 @@ trait KeyGeneratorTrait
         ) {
             // The key violates the currently set StorageAdapter key_pattern. Our
             // best guess is to remove any characters that do not match the only
-            // default key_pattern for Zend\Cache\StorageAdapters: the filesystem
+            // default key_pattern for Laminas\Cache\StorageAdapters: the filesystem
             // adapter (default key_pattern "/^[a-z0-9_\+\-]*$/Di").
             // Any other custom pattern is assumed as less restrictive, thus the
             // transformed key should match the custom pattern.
diff --git a/module/VuFind/src/VuFind/Cache/Manager.php b/module/VuFind/src/VuFind/Cache/Manager.php
index e455992190e..ed540fd1759 100644
--- a/module/VuFind/src/VuFind/Cache/Manager.php
+++ b/module/VuFind/src/VuFind/Cache/Manager.php
@@ -29,9 +29,9 @@
  */
 namespace VuFind\Cache;
 
-use Zend\Cache\Storage\StorageInterface;
-use Zend\Cache\StorageFactory;
-use Zend\Config\Config;
+use Laminas\Cache\Storage\StorageInterface;
+use Laminas\Cache\StorageFactory;
+use Laminas\Config\Config;
 
 /**
  * VuFind Cache Manager
@@ -83,10 +83,10 @@ class Manager
      */
     public function __construct(Config $config, Config $searchConfig)
     {
-        // $config and $config->Cache are Zend\Config\Config objects
+        // $config and $config->Cache are Laminas\Config\Config objects
         // $cache is created immutable, so get the array, it will be modified
         // downstream.
-        // Zend\Config\Config can be created mutable or cloned and merged, useful
+        // Laminas\Config\Config can be created mutable or cloned and merged, useful
         // for future cache-specific overrides.
         $cacheConfig = isset($config->Cache) ? $config->Cache : false;
         $this->defaults = $cacheConfig ? $cacheConfig->toArray() : false;
diff --git a/module/VuFind/src/VuFind/Cache/ManagerFactory.php b/module/VuFind/src/VuFind/Cache/ManagerFactory.php
index b1c384bcb8a..3869171353b 100644
--- a/module/VuFind/src/VuFind/Cache/ManagerFactory.php
+++ b/module/VuFind/src/VuFind/Cache/ManagerFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Cache;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Cache Manager factory.
diff --git a/module/VuFind/src/VuFind/Cache/Storage/Adapter/NoCacheAdapter.php b/module/VuFind/src/VuFind/Cache/Storage/Adapter/NoCacheAdapter.php
index ab5143e6961..6d84bfeffd2 100644
--- a/module/VuFind/src/VuFind/Cache/Storage/Adapter/NoCacheAdapter.php
+++ b/module/VuFind/src/VuFind/Cache/Storage/Adapter/NoCacheAdapter.php
@@ -28,7 +28,7 @@
  */
 namespace VuFind\Cache\Storage\Adapter;
 
-use Zend\Cache\Storage\Adapter\AbstractAdapter;
+use Laminas\Cache\Storage\Adapter\AbstractAdapter;
 
 /**
  * VuFind NoCacheAdapter.
diff --git a/module/VuFind/src/VuFind/CartFactory.php b/module/VuFind/src/VuFind/CartFactory.php
index a686cb8ce55..048418433c4 100644
--- a/module/VuFind/src/VuFind/CartFactory.php
+++ b/module/VuFind/src/VuFind/CartFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Cart factory.
diff --git a/module/VuFind/src/VuFind/ChannelProvider/AbstractILSChannelProviderFactory.php b/module/VuFind/src/VuFind/ChannelProvider/AbstractILSChannelProviderFactory.php
index 9920417b5c1..8925c9fabf5 100644
--- a/module/VuFind/src/VuFind/ChannelProvider/AbstractILSChannelProviderFactory.php
+++ b/module/VuFind/src/VuFind/ChannelProvider/AbstractILSChannelProviderFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ChannelProvider;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for channel providers relying on the ILS.
diff --git a/module/VuFind/src/VuFind/ChannelProvider/AlphaBrowse.php b/module/VuFind/src/VuFind/ChannelProvider/AlphaBrowse.php
index 91d25c794ba..29f1d478237 100644
--- a/module/VuFind/src/VuFind/ChannelProvider/AlphaBrowse.php
+++ b/module/VuFind/src/VuFind/ChannelProvider/AlphaBrowse.php
@@ -27,13 +27,13 @@
  */
 namespace VuFind\ChannelProvider;
 
+use Laminas\Mvc\Controller\Plugin\Url;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
 use VuFind\Record\Router as RecordRouter;
 use VuFind\RecordDriver\AbstractBase as RecordDriver;
 use VuFind\Search\Base\Results;
 use VuFindSearch\Backend\Solr\Backend;
 use VuFindSearch\ParamBag;
-use Zend\Mvc\Controller\Plugin\Url;
 
 /**
  * Alphabrowse channel provider.
diff --git a/module/VuFind/src/VuFind/ChannelProvider/AlphaBrowseFactory.php b/module/VuFind/src/VuFind/ChannelProvider/AlphaBrowseFactory.php
index 7963010591c..a0dc6251c78 100644
--- a/module/VuFind/src/VuFind/ChannelProvider/AlphaBrowseFactory.php
+++ b/module/VuFind/src/VuFind/ChannelProvider/AlphaBrowseFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ChannelProvider;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for AlphaBrowse channel provider.
diff --git a/module/VuFind/src/VuFind/ChannelProvider/ChannelLoader.php b/module/VuFind/src/VuFind/ChannelProvider/ChannelLoader.php
index df9f225d300..a16fa1f5a38 100644
--- a/module/VuFind/src/VuFind/ChannelProvider/ChannelLoader.php
+++ b/module/VuFind/src/VuFind/ChannelProvider/ChannelLoader.php
@@ -27,12 +27,12 @@
  */
 namespace VuFind\ChannelProvider;
 
+use Laminas\Config\Config;
 use VuFind\Cache\Manager as CacheManager;
 use VuFind\ChannelProvider\PluginManager as ChannelManager;
 use VuFind\Record\Loader as RecordLoader;
 use VuFind\Search\Base\Results;
 use VuFind\Search\SearchRunner;
-use Zend\Config\Config;
 
 /**
  * Channel loader
diff --git a/module/VuFind/src/VuFind/ChannelProvider/ChannelLoaderFactory.php b/module/VuFind/src/VuFind/ChannelProvider/ChannelLoaderFactory.php
index d471c905f5c..b15c9a106ad 100644
--- a/module/VuFind/src/VuFind/ChannelProvider/ChannelLoaderFactory.php
+++ b/module/VuFind/src/VuFind/ChannelProvider/ChannelLoaderFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ChannelProvider;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for channel loader.
diff --git a/module/VuFind/src/VuFind/ChannelProvider/Facets.php b/module/VuFind/src/VuFind/ChannelProvider/Facets.php
index 30301132877..26ee89bb989 100644
--- a/module/VuFind/src/VuFind/ChannelProvider/Facets.php
+++ b/module/VuFind/src/VuFind/ChannelProvider/Facets.php
@@ -27,12 +27,12 @@
  */
 namespace VuFind\ChannelProvider;
 
+use Laminas\Mvc\Controller\Plugin\Url;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
 use VuFind\RecordDriver\AbstractBase as RecordDriver;
 use VuFind\Search\Base\Params;
 use VuFind\Search\Base\Results;
 use VuFind\Search\Results\PluginManager as ResultsManager;
-use Zend\Mvc\Controller\Plugin\Url;
 
 /**
  * Facet-driven channel provider.
diff --git a/module/VuFind/src/VuFind/ChannelProvider/FacetsFactory.php b/module/VuFind/src/VuFind/ChannelProvider/FacetsFactory.php
index d3a9acb58b8..d582ad2685d 100644
--- a/module/VuFind/src/VuFind/ChannelProvider/FacetsFactory.php
+++ b/module/VuFind/src/VuFind/ChannelProvider/FacetsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ChannelProvider;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for Facets channel provider.
diff --git a/module/VuFind/src/VuFind/ChannelProvider/ListItems.php b/module/VuFind/src/VuFind/ChannelProvider/ListItems.php
index 576690a5da0..4dea0dd541f 100644
--- a/module/VuFind/src/VuFind/ChannelProvider/ListItems.php
+++ b/module/VuFind/src/VuFind/ChannelProvider/ListItems.php
@@ -27,11 +27,11 @@
  */
 namespace VuFind\ChannelProvider;
 
+use Laminas\Mvc\Controller\Plugin\Url;
+use Laminas\Stdlib\Parameters;
 use VuFind\RecordDriver\AbstractBase as RecordDriver;
 use VuFind\Search\Base\Params;
 use VuFind\Search\Base\Results;
-use Zend\Mvc\Controller\Plugin\Url;
-use Zend\Stdlib\Parameters;
 
 /**
  * "List items" channel provider.
diff --git a/module/VuFind/src/VuFind/ChannelProvider/ListItemsFactory.php b/module/VuFind/src/VuFind/ChannelProvider/ListItemsFactory.php
index 31484b6352a..bf243968c62 100644
--- a/module/VuFind/src/VuFind/ChannelProvider/ListItemsFactory.php
+++ b/module/VuFind/src/VuFind/ChannelProvider/ListItemsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ChannelProvider;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for ListItems channel provider.
diff --git a/module/VuFind/src/VuFind/ChannelProvider/RandomFactory.php b/module/VuFind/src/VuFind/ChannelProvider/RandomFactory.php
index 00e6e73d226..1cd81bbf75a 100644
--- a/module/VuFind/src/VuFind/ChannelProvider/RandomFactory.php
+++ b/module/VuFind/src/VuFind/ChannelProvider/RandomFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ChannelProvider;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for Random channel provider.
diff --git a/module/VuFind/src/VuFind/ChannelProvider/RouterInitializer.php b/module/VuFind/src/VuFind/ChannelProvider/RouterInitializer.php
index 5c1704a1663..f56bdaf5aec 100644
--- a/module/VuFind/src/VuFind/ChannelProvider/RouterInitializer.php
+++ b/module/VuFind/src/VuFind/ChannelProvider/RouterInitializer.php
@@ -28,7 +28,7 @@
 namespace VuFind\ChannelProvider;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Initializer\InitializerInterface;
+use Laminas\ServiceManager\Initializer\InitializerInterface;
 
 /**
  * Channel Provider Router Initializer
diff --git a/module/VuFind/src/VuFind/ChannelProvider/SimilarItems.php b/module/VuFind/src/VuFind/ChannelProvider/SimilarItems.php
index a69a6126615..d84784beb47 100644
--- a/module/VuFind/src/VuFind/ChannelProvider/SimilarItems.php
+++ b/module/VuFind/src/VuFind/ChannelProvider/SimilarItems.php
@@ -27,11 +27,11 @@
  */
 namespace VuFind\ChannelProvider;
 
+use Laminas\Mvc\Controller\Plugin\Url;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
 use VuFind\Record\Router as RecordRouter;
 use VuFind\RecordDriver\AbstractBase as RecordDriver;
 use VuFind\Search\Base\Results;
-use Zend\Mvc\Controller\Plugin\Url;
 
 /**
  * "Similar items" channel provider.
diff --git a/module/VuFind/src/VuFind/ChannelProvider/SimilarItemsFactory.php b/module/VuFind/src/VuFind/ChannelProvider/SimilarItemsFactory.php
index af6017de187..823cbb9b49f 100644
--- a/module/VuFind/src/VuFind/ChannelProvider/SimilarItemsFactory.php
+++ b/module/VuFind/src/VuFind/ChannelProvider/SimilarItemsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ChannelProvider;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for SimilarItems channel provider.
diff --git a/module/VuFind/src/VuFind/Config/AccountCapabilities.php b/module/VuFind/src/VuFind/Config/AccountCapabilities.php
index f1b066d4fc4..a29c4cf73a9 100644
--- a/module/VuFind/src/VuFind/Config/AccountCapabilities.php
+++ b/module/VuFind/src/VuFind/Config/AccountCapabilities.php
@@ -28,8 +28,8 @@
  */
 namespace VuFind\Config;
 
+use Laminas\Config\Config;
 use VuFind\Auth\Manager as AuthManager;
-use Zend\Config\Config;
 
 /**
  * Class to determine which account capabilities are available, based on
diff --git a/module/VuFind/src/VuFind/Config/AccountCapabilitiesFactory.php b/module/VuFind/src/VuFind/Config/AccountCapabilitiesFactory.php
index a32ca572092..1cfe8e89d54 100644
--- a/module/VuFind/src/VuFind/Config/AccountCapabilitiesFactory.php
+++ b/module/VuFind/src/VuFind/Config/AccountCapabilitiesFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Config;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Account capabilities factory.
diff --git a/module/VuFind/src/VuFind/Config/PluginFactory.php b/module/VuFind/src/VuFind/Config/PluginFactory.php
index 347173e5f7d..6abaa1b93d1 100644
--- a/module/VuFind/src/VuFind/Config/PluginFactory.php
+++ b/module/VuFind/src/VuFind/Config/PluginFactory.php
@@ -28,9 +28,9 @@
 namespace VuFind\Config;
 
 use Interop\Container\ContainerInterface;
-use Zend\Config\Config;
-use Zend\Config\Reader\Ini as IniReader;
-use Zend\ServiceManager\Factory\AbstractFactoryInterface;
+use Laminas\Config\Config;
+use Laminas\Config\Reader\Ini as IniReader;
+use Laminas\ServiceManager\Factory\AbstractFactoryInterface;
 
 /**
  * VuFind Config Plugin Factory
@@ -134,7 +134,7 @@ class PluginFactory implements AbstractFactoryInterface
                 } else {
                     foreach (array_keys($contents->toArray()) as $key) {
                         // If a key is defined as key[] in the config file the key
-                        // remains a Zend\Config\Config object. If the current
+                        // remains a Laminas\Config\Config object. If the current
                         // section is not configured as an override section we try to
                         // merge the key[] values instead of overwriting them.
                         if (is_object($config->$section->$key)
diff --git a/module/VuFind/src/VuFind/Config/PluginManager.php b/module/VuFind/src/VuFind/Config/PluginManager.php
index 6ade9cacce8..578b1d3c6d1 100644
--- a/module/VuFind/src/VuFind/Config/PluginManager.php
+++ b/module/VuFind/src/VuFind/Config/PluginManager.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Config;
 
-use Zend\ServiceManager\AbstractPluginManager as Base;
+use Laminas\ServiceManager\AbstractPluginManager as Base;
 
 /**
  * VuFind Config Manager
@@ -79,7 +79,7 @@ class PluginManager extends Base
      *
      * @param string $id Service identifier
      *
-     * @return \Zend\Config\Config
+     * @return \Laminas\Config\Config
      */
     public function reload($id)
     {
diff --git a/module/VuFind/src/VuFind/Config/PluginManagerFactory.php b/module/VuFind/src/VuFind/Config/PluginManagerFactory.php
index 8f7bb858017..d16213c3dbe 100644
--- a/module/VuFind/src/VuFind/Config/PluginManagerFactory.php
+++ b/module/VuFind/src/VuFind/Config/PluginManagerFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Config;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Plugin Manager factory.
diff --git a/module/VuFind/src/VuFind/Config/Reader/CacheDecorator.php b/module/VuFind/src/VuFind/Config/Reader/CacheDecorator.php
index 943e819a50b..a528f527514 100644
--- a/module/VuFind/src/VuFind/Config/Reader/CacheDecorator.php
+++ b/module/VuFind/src/VuFind/Config/Reader/CacheDecorator.php
@@ -28,8 +28,8 @@
  */
 namespace VuFind\Config\Reader;
 
-use Zend\Cache\Storage\StorageInterface;
-use Zend\Config\Reader\ReaderInterface;
+use Laminas\Cache\Storage\StorageInterface;
+use Laminas\Config\Reader\ReaderInterface;
 
 /**
  * This class decorates a configuration file reader with caching support.
diff --git a/module/VuFind/src/VuFind/Config/YamlReaderFactory.php b/module/VuFind/src/VuFind/Config/YamlReaderFactory.php
index 0e60f795be9..e81032fa7e0 100644
--- a/module/VuFind/src/VuFind/Config/YamlReaderFactory.php
+++ b/module/VuFind/src/VuFind/Config/YamlReaderFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Config;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for YamlReader (and subclasses).
diff --git a/module/VuFind/src/VuFind/Connection/OpenLibrary.php b/module/VuFind/src/VuFind/Connection/OpenLibrary.php
index 65c93a57784..60a504b6a41 100644
--- a/module/VuFind/src/VuFind/Connection/OpenLibrary.php
+++ b/module/VuFind/src/VuFind/Connection/OpenLibrary.php
@@ -43,16 +43,16 @@ class OpenLibrary
     /**
      * HTTP client
      *
-     * @var \Zend\Http\Client
+     * @var \Laminas\Http\Client
      */
     protected $client;
 
     /**
      * Constructor
      *
-     * @param \Zend\Http\Client $client HTTP client
+     * @param \Laminas\Http\Client $client HTTP client
      */
-    public function __construct(\Zend\Http\Client $client)
+    public function __construct(\Laminas\Http\Client $client)
     {
         $this->client = $client;
     }
diff --git a/module/VuFind/src/VuFind/Connection/Relais.php b/module/VuFind/src/VuFind/Connection/Relais.php
index 7e11291f9ee..dc50b156137 100644
--- a/module/VuFind/src/VuFind/Connection/Relais.php
+++ b/module/VuFind/src/VuFind/Connection/Relais.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Connection;
 
-use Zend\Config\Config;
-use Zend\Http\Client;
+use Laminas\Config\Config;
+use Laminas\Http\Client;
 
 /**
  * Relais connection class.
@@ -39,7 +39,7 @@ use Zend\Http\Client;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class Relais implements \Zend\Log\LoggerAwareInterface
+class Relais implements \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
 
diff --git a/module/VuFind/src/VuFind/Connection/RelaisFactory.php b/module/VuFind/src/VuFind/Connection/RelaisFactory.php
index 03633ac9d93..d0baa4da6ca 100644
--- a/module/VuFind/src/VuFind/Connection/RelaisFactory.php
+++ b/module/VuFind/src/VuFind/Connection/RelaisFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Connection;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Relais factory.
diff --git a/module/VuFind/src/VuFind/Connection/Wikipedia.php b/module/VuFind/src/VuFind/Connection/Wikipedia.php
index 88b2f5e8d74..f77e2307d28 100644
--- a/module/VuFind/src/VuFind/Connection/Wikipedia.php
+++ b/module/VuFind/src/VuFind/Connection/Wikipedia.php
@@ -45,7 +45,7 @@ class Wikipedia implements TranslatorAwareInterface
     /**
      * HTTP client
      *
-     * @var \Zend\Http\Client
+     * @var \Laminas\Http\Client
      */
     protected $client;
 
@@ -66,9 +66,9 @@ class Wikipedia implements TranslatorAwareInterface
     /**
      * Constructor
      *
-     * @param \Zend\Http\Client $client HTTP client
+     * @param \Laminas\Http\Client $client HTTP client
      */
-    public function __construct(\Zend\Http\Client $client)
+    public function __construct(\Laminas\Http\Client $client)
     {
         $this->client = $client;
     }
diff --git a/module/VuFind/src/VuFind/Connection/WorldCatUtils.php b/module/VuFind/src/VuFind/Connection/WorldCatUtils.php
index a5390a20707..ded9fcd3e64 100644
--- a/module/VuFind/src/VuFind/Connection/WorldCatUtils.php
+++ b/module/VuFind/src/VuFind/Connection/WorldCatUtils.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Connection;
 
-use Zend\Config\Config;
+use Laminas\Config\Config;
 
 /**
  * World Cat Utilities
@@ -40,21 +40,21 @@ use Zend\Config\Config;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class WorldCatUtils implements \Zend\Log\LoggerAwareInterface
+class WorldCatUtils implements \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
 
     /**
      * WorldCat configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
     /**
      * HTTP client
      *
-     * @var \Zend\Http\Client
+     * @var \Laminas\Http\Client
      */
     protected $client;
 
@@ -75,15 +75,15 @@ class WorldCatUtils implements \Zend\Log\LoggerAwareInterface
     /**
      * Constructor
      *
-     * @param Config|string     $config WorldCat configuration (either a full Config
-     * object, or a string containing the id setting).
-     * @param \Zend\Http\Client $client HTTP client
-     * @param bool              $silent Should we silently ignore HTTP failures?
-     * @param string            $ip     Current server IP address (optional, but
+     * @param Config|string        $config WorldCat configuration (either a full
+     * Config object, or a string containing the id setting).
+     * @param \Laminas\Http\Client $client HTTP client
+     * @param bool                 $silent Should we silently ignore HTTP failures?
+     * @param string               $ip     Current server IP address (optional, but
      * needed for xID token hashing
      */
-    public function __construct($config, \Zend\Http\Client $client, $silent = true,
-        $ip = null
+    public function __construct($config, \Laminas\Http\Client $client,
+        $silent = true, $ip = null
     ) {
         // Legacy compatibility -- prior to VuFind 2.4, this parameter was a string.
         if (!($config instanceof Config)) {
diff --git a/module/VuFind/src/VuFind/Connection/WorldCatUtilsFactory.php b/module/VuFind/src/VuFind/Connection/WorldCatUtilsFactory.php
index dab9367fa5a..d2e16fef140 100644
--- a/module/VuFind/src/VuFind/Connection/WorldCatUtilsFactory.php
+++ b/module/VuFind/src/VuFind/Connection/WorldCatUtilsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Connection;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * WorldCat utils factory.
diff --git a/module/VuFind/src/VuFind/Content/AbstractAmazonFactory.php b/module/VuFind/src/VuFind/Content/AbstractAmazonFactory.php
index ef30257554b..4c595dbcc31 100644
--- a/module/VuFind/src/VuFind/Content/AbstractAmazonFactory.php
+++ b/module/VuFind/src/VuFind/Content/AbstractAmazonFactory.php
@@ -38,7 +38,8 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class AbstractAmazonFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class AbstractAmazonFactory
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
@@ -66,7 +67,7 @@ class AbstractAmazonFactory implements \Zend\ServiceManager\Factory\FactoryInter
             ? $config->Content->amazonassociate : null;
         $secret = isset($config->Content->amazonsecret)
             ? $config->Content->amazonsecret : null;
-        $label = $container->get(\Zend\Mvc\I18n\Translator::class)->translate(
+        $label = $container->get(\Laminas\Mvc\I18n\Translator::class)->translate(
             'Supplied by Amazon'
         );
         return new $requestedName($associate, $secret, $label);
diff --git a/module/VuFind/src/VuFind/Content/AbstractBase.php b/module/VuFind/src/VuFind/Content/AbstractBase.php
index cc2fb4de81c..3be5193ba57 100644
--- a/module/VuFind/src/VuFind/Content/AbstractBase.php
+++ b/module/VuFind/src/VuFind/Content/AbstractBase.php
@@ -39,7 +39,7 @@ use VuFindCode\ISBN;
  * @link     https://vufind.org/wiki/development Wiki
  */
 abstract class AbstractBase implements \VuFindHttp\HttpServiceAwareInterface,
-    \Zend\Log\LoggerAwareInterface
+    \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
     use \VuFindHttp\HttpServiceAwareTrait;
@@ -63,7 +63,7 @@ abstract class AbstractBase implements \VuFindHttp\HttpServiceAwareInterface,
      *
      * @param string $url URL for client to use
      *
-     * @return \Zend\Http\Client
+     * @return \Laminas\Http\Client
      * @throws \Exception
      */
     protected function getHttpClient($url = null)
diff --git a/module/VuFind/src/VuFind/Content/AbstractSyndetics.php b/module/VuFind/src/VuFind/Content/AbstractSyndetics.php
index 522459e3324..ca8a1131a01 100644
--- a/module/VuFind/src/VuFind/Content/AbstractSyndetics.php
+++ b/module/VuFind/src/VuFind/Content/AbstractSyndetics.php
@@ -80,7 +80,7 @@ abstract class AbstractSyndetics extends AbstractBase
      *
      * @param string $url URL for client to use
      *
-     * @return \Zend\Http\Client
+     * @return \Laminas\Http\Client
      * @throws \Exception
      */
     protected function getHttpClient($url = null)
diff --git a/module/VuFind/src/VuFind/Content/AbstractSyndeticsFactory.php b/module/VuFind/src/VuFind/Content/AbstractSyndeticsFactory.php
index d90b6857a1e..95bb81a5040 100644
--- a/module/VuFind/src/VuFind/Content/AbstractSyndeticsFactory.php
+++ b/module/VuFind/src/VuFind/Content/AbstractSyndeticsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Content;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Generic Syndetics content plugin factory.
diff --git a/module/VuFind/src/VuFind/Content/AuthorNotes/PluginManager.php b/module/VuFind/src/VuFind/Content/AuthorNotes/PluginManager.php
index cb6177fdc6a..490745055da 100644
--- a/module/VuFind/src/VuFind/Content/AuthorNotes/PluginManager.php
+++ b/module/VuFind/src/VuFind/Content/AuthorNotes/PluginManager.php
@@ -55,7 +55,7 @@ class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager
      * @var array
      */
     protected $factories = [
-        Demo::class => \Zend\ServiceManager\Factory\InvokableFactory::class,
+        Demo::class => \Laminas\ServiceManager\Factory\InvokableFactory::class,
         Syndetics::class => \VuFind\Content\AbstractSyndeticsFactory::class,
         SyndeticsPlus::class => \VuFind\Content\AbstractSyndeticsFactory::class,
     ];
diff --git a/module/VuFind/src/VuFind/Content/Covers/Amazon.php b/module/VuFind/src/VuFind/Content/Covers/Amazon.php
index e85d1cafa4d..2ba71c6e663 100644
--- a/module/VuFind/src/VuFind/Content/Covers/Amazon.php
+++ b/module/VuFind/src/VuFind/Content/Covers/Amazon.php
@@ -75,7 +75,7 @@ class Amazon extends \VuFind\Content\AbstractCover
      *
      * @param string $url URL for client to use
      *
-     * @return \Zend\Http\Client
+     * @return \Laminas\Http\Client
      */
     protected function getHttpClient($url = null)
     {
diff --git a/module/VuFind/src/VuFind/Content/Covers/AmazonFactory.php b/module/VuFind/src/VuFind/Content/Covers/AmazonFactory.php
index 0e5d44d081d..f2243074a7e 100644
--- a/module/VuFind/src/VuFind/Content/Covers/AmazonFactory.php
+++ b/module/VuFind/src/VuFind/Content/Covers/AmazonFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development:plugins:record_drivers Wiki
  */
-class AmazonFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class AmazonFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Content/Covers/BooksiteFactory.php b/module/VuFind/src/VuFind/Content/Covers/BooksiteFactory.php
index 50a63e93fb4..e3db3fbdc76 100644
--- a/module/VuFind/src/VuFind/Content/Covers/BooksiteFactory.php
+++ b/module/VuFind/src/VuFind/Content/Covers/BooksiteFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development:plugins:record_drivers Wiki
  */
-class BooksiteFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class BooksiteFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Content/Covers/BrowZineFactory.php b/module/VuFind/src/VuFind/Content/Covers/BrowZineFactory.php
index fb96b4c3d2e..9c2646be14b 100644
--- a/module/VuFind/src/VuFind/Content/Covers/BrowZineFactory.php
+++ b/module/VuFind/src/VuFind/Content/Covers/BrowZineFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development:plugins:record_drivers Wiki
  */
-class BrowZineFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class BrowZineFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Content/Covers/BuchhandelFactory.php b/module/VuFind/src/VuFind/Content/Covers/BuchhandelFactory.php
index 4ff8a6c6ef4..37293aa6b92 100644
--- a/module/VuFind/src/VuFind/Content/Covers/BuchhandelFactory.php
+++ b/module/VuFind/src/VuFind/Content/Covers/BuchhandelFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development:plugins:record_drivers Wiki
  */
-class BuchhandelFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class BuchhandelFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Content/Covers/ContentCafe.php b/module/VuFind/src/VuFind/Content/Covers/ContentCafe.php
index 8af568a0031..eb3c3d0d570 100644
--- a/module/VuFind/src/VuFind/Content/Covers/ContentCafe.php
+++ b/module/VuFind/src/VuFind/Content/Covers/ContentCafe.php
@@ -55,9 +55,9 @@ class ContentCafe extends \VuFind\Content\AbstractCover
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $config Configuration
+     * @param \Laminas\Config\Config $config Configuration
      */
-    public function __construct(\Zend\Config\Config $config)
+    public function __construct(\Laminas\Config\Config $config)
     {
         $this->password = $config->pw;
         $this->baseURL = $config->url ?? 'http://contentcafe2.btol.com';
diff --git a/module/VuFind/src/VuFind/Content/Covers/ContentCafeFactory.php b/module/VuFind/src/VuFind/Content/Covers/ContentCafeFactory.php
index 381c60ee77f..7d4221fbe24 100644
--- a/module/VuFind/src/VuFind/Content/Covers/ContentCafeFactory.php
+++ b/module/VuFind/src/VuFind/Content/Covers/ContentCafeFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development:plugins:record_drivers Wiki
  */
-class ContentCafeFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class ContentCafeFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
@@ -64,7 +64,7 @@ class ContentCafeFactory implements \Zend\ServiceManager\Factory\FactoryInterfac
         }
         $config = $container->get(\VuFind\Config\PluginManager::class)
             ->get('config');
-        $finalConfig = $config->Contentcafe ?? new \Zend\Config\Config([]);
+        $finalConfig = $config->Contentcafe ?? new \Laminas\Config\Config([]);
         return new $requestedName($finalConfig);
     }
 }
diff --git a/module/VuFind/src/VuFind/Content/Covers/Google.php b/module/VuFind/src/VuFind/Content/Covers/Google.php
index 2267f00000d..300c157a5f3 100644
--- a/module/VuFind/src/VuFind/Content/Covers/Google.php
+++ b/module/VuFind/src/VuFind/Content/Covers/Google.php
@@ -54,7 +54,7 @@ class Google extends \VuFind\Content\AbstractCover
      *
      * @param string $url URL for client to use
      *
-     * @return \Zend\Http\Client
+     * @return \Laminas\Http\Client
      */
     protected function getHttpClient($url = null)
     {
diff --git a/module/VuFind/src/VuFind/Content/Covers/PluginManager.php b/module/VuFind/src/VuFind/Content/Covers/PluginManager.php
index 48dd561da51..8c47623fb5c 100644
--- a/module/VuFind/src/VuFind/Content/Covers/PluginManager.php
+++ b/module/VuFind/src/VuFind/Content/Covers/PluginManager.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Content\Covers;
 
-use Zend\ServiceManager\Factory\InvokableFactory;
+use Laminas\ServiceManager\Factory\InvokableFactory;
 
 /**
  * Covers content loader plugin manager
diff --git a/module/VuFind/src/VuFind/Content/Covers/SyndeticsFactory.php b/module/VuFind/src/VuFind/Content/Covers/SyndeticsFactory.php
index 13f9a996667..bf381b2375e 100644
--- a/module/VuFind/src/VuFind/Content/Covers/SyndeticsFactory.php
+++ b/module/VuFind/src/VuFind/Content/Covers/SyndeticsFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development:plugins:record_drivers Wiki
  */
-class SyndeticsFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class SyndeticsFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Content/Excerpts/PluginManager.php b/module/VuFind/src/VuFind/Content/Excerpts/PluginManager.php
index e88e85dfc62..d3df84cb593 100644
--- a/module/VuFind/src/VuFind/Content/Excerpts/PluginManager.php
+++ b/module/VuFind/src/VuFind/Content/Excerpts/PluginManager.php
@@ -55,7 +55,7 @@ class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager
      * @var array
      */
     protected $factories = [
-        Demo::class => \Zend\ServiceManager\Factory\InvokableFactory::class,
+        Demo::class => \Laminas\ServiceManager\Factory\InvokableFactory::class,
         Syndetics::class => \VuFind\Content\AbstractSyndeticsFactory::class,
         SyndeticsPlus::class => \VuFind\Content\AbstractSyndeticsFactory::class,
     ];
diff --git a/module/VuFind/src/VuFind/Content/Factory.php b/module/VuFind/src/VuFind/Content/Factory.php
index 05b5502e07e..0095e39e9ad 100644
--- a/module/VuFind/src/VuFind/Content/Factory.php
+++ b/module/VuFind/src/VuFind/Content/Factory.php
@@ -40,7 +40,7 @@ use Interop\Container\ContainerInterface;
  *
  * @codeCoverageIgnore
  */
-class Factory implements \Zend\ServiceManager\Factory\FactoryInterface
+class Factory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Get the configuration setting name to get content provider settings.
diff --git a/module/VuFind/src/VuFind/Content/Reviews/BooksiteFactory.php b/module/VuFind/src/VuFind/Content/Reviews/BooksiteFactory.php
index 237c100dee4..77e5876ca33 100644
--- a/module/VuFind/src/VuFind/Content/Reviews/BooksiteFactory.php
+++ b/module/VuFind/src/VuFind/Content/Reviews/BooksiteFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class BooksiteFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class BooksiteFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Content/Reviews/PluginManager.php b/module/VuFind/src/VuFind/Content/Reviews/PluginManager.php
index bf7d5a2f22f..4b7b678eebd 100644
--- a/module/VuFind/src/VuFind/Content/Reviews/PluginManager.php
+++ b/module/VuFind/src/VuFind/Content/Reviews/PluginManager.php
@@ -62,8 +62,8 @@ class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager
         Amazon::class => \VuFind\Content\AbstractAmazonFactory::class,
         AmazonEditorial::class => \VuFind\Content\AbstractAmazonFactory::class,
         Booksite::class => BooksiteFactory::class,
-        Demo::class => \Zend\ServiceManager\Factory\InvokableFactory::class,
-        Guardian::class => \Zend\ServiceManager\Factory\InvokableFactory::class,
+        Demo::class => \Laminas\ServiceManager\Factory\InvokableFactory::class,
+        Guardian::class => \Laminas\ServiceManager\Factory\InvokableFactory::class,
         Syndetics::class => \VuFind\Content\AbstractSyndeticsFactory::class,
         SyndeticsPlus::class => \VuFind\Content\AbstractSyndeticsFactory::class,
     ];
diff --git a/module/VuFind/src/VuFind/Content/Summaries/PluginManager.php b/module/VuFind/src/VuFind/Content/Summaries/PluginManager.php
index 2950becdcb4..34cbab3d247 100644
--- a/module/VuFind/src/VuFind/Content/Summaries/PluginManager.php
+++ b/module/VuFind/src/VuFind/Content/Summaries/PluginManager.php
@@ -55,7 +55,7 @@ class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager
      * @var array
      */
     protected $factories = [
-        Demo::class => \Zend\ServiceManager\Factory\InvokableFactory::class,
+        Demo::class => \Laminas\ServiceManager\Factory\InvokableFactory::class,
         Syndetics::class => \VuFind\Content\AbstractSyndeticsFactory::class,
         SyndeticsPlus::class => \VuFind\Content\AbstractSyndeticsFactory::class,
     ];
diff --git a/module/VuFind/src/VuFind/Content/TOC/PluginManager.php b/module/VuFind/src/VuFind/Content/TOC/PluginManager.php
index 636c98ee783..20f2102977c 100644
--- a/module/VuFind/src/VuFind/Content/TOC/PluginManager.php
+++ b/module/VuFind/src/VuFind/Content/TOC/PluginManager.php
@@ -55,7 +55,7 @@ class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager
      * @var array
      */
     protected $factories = [
-        Demo::class => \Zend\ServiceManager\Factory\InvokableFactory::class,
+        Demo::class => \Laminas\ServiceManager\Factory\InvokableFactory::class,
         Syndetics::class => \VuFind\Content\AbstractSyndeticsFactory::class,
         SyndeticsPlus::class => \VuFind\Content\AbstractSyndeticsFactory::class,
     ];
diff --git a/module/VuFind/src/VuFind/ContentBlock/BlockLoader.php b/module/VuFind/src/VuFind/ContentBlock/BlockLoader.php
index 2491d91e3e5..b4ced79b3db 100644
--- a/module/VuFind/src/VuFind/ContentBlock/BlockLoader.php
+++ b/module/VuFind/src/VuFind/ContentBlock/BlockLoader.php
@@ -27,11 +27,11 @@
  */
 namespace VuFind\ContentBlock;
 
+use Laminas\Config\Config;
 use VuFind\Config\PluginManager as ConfigManager;
 use VuFind\ContentBlock\PluginManager as BlockManager;
 use VuFind\Search\Base\Options;
 use VuFind\Search\Options\PluginManager as OptionsManager;
-use Zend\Config\Config;
 
 /**
  * Content block plugin manager
diff --git a/module/VuFind/src/VuFind/ContentBlock/BlockLoaderFactory.php b/module/VuFind/src/VuFind/ContentBlock/BlockLoaderFactory.php
index 9ce5f51b0f0..da6077699d1 100644
--- a/module/VuFind/src/VuFind/ContentBlock/BlockLoaderFactory.php
+++ b/module/VuFind/src/VuFind/ContentBlock/BlockLoaderFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ContentBlock;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * BlockLoader factory.
diff --git a/module/VuFind/src/VuFind/ContentBlock/Channels.php b/module/VuFind/src/VuFind/ContentBlock/Channels.php
index b258db76d30..e7e1b869fe9 100644
--- a/module/VuFind/src/VuFind/ContentBlock/Channels.php
+++ b/module/VuFind/src/VuFind/ContentBlock/Channels.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\ContentBlock;
 
+use Laminas\Http\PhpEnvironment\Request;
 use VuFind\ChannelProvider\ChannelLoader;
-use Zend\Http\PhpEnvironment\Request;
 
 /**
  * Channels content block.
diff --git a/module/VuFind/src/VuFind/ContentBlock/ChannelsFactory.php b/module/VuFind/src/VuFind/ContentBlock/ChannelsFactory.php
index 2d102fd85bd..aa9c2d82285 100644
--- a/module/VuFind/src/VuFind/ContentBlock/ChannelsFactory.php
+++ b/module/VuFind/src/VuFind/ContentBlock/ChannelsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ContentBlock;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Channels factory.
diff --git a/module/VuFind/src/VuFind/ContentBlock/FacetList.php b/module/VuFind/src/VuFind/ContentBlock/FacetList.php
index a691c9512c3..18c39974ebd 100644
--- a/module/VuFind/src/VuFind/ContentBlock/FacetList.php
+++ b/module/VuFind/src/VuFind/ContentBlock/FacetList.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\ContentBlock;
 
+use Laminas\Config\Config;
 use VuFind\Config\PluginManager as ConfigManager;
 use VuFind\Search\FacetCache\PluginManager as FacetCacheManager;
-use Zend\Config\Config;
 
 /**
  * FacetList content block.
diff --git a/module/VuFind/src/VuFind/ContentBlock/FacetListFactory.php b/module/VuFind/src/VuFind/ContentBlock/FacetListFactory.php
index 1fa54226fe0..f02d2f012be 100644
--- a/module/VuFind/src/VuFind/ContentBlock/FacetListFactory.php
+++ b/module/VuFind/src/VuFind/ContentBlock/FacetListFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ContentBlock;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * FacetList content block factory.
diff --git a/module/VuFind/src/VuFind/ContentBlock/PluginManager.php b/module/VuFind/src/VuFind/ContentBlock/PluginManager.php
index 4d16ea5a6b9..1ef94d4f5cc 100644
--- a/module/VuFind/src/VuFind/ContentBlock/PluginManager.php
+++ b/module/VuFind/src/VuFind/ContentBlock/PluginManager.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\ContentBlock;
 
-use Zend\ServiceManager\Factory\InvokableFactory;
+use Laminas\ServiceManager\Factory\InvokableFactory;
 
 /**
  * Content block plugin manager
diff --git a/module/VuFind/src/VuFind/Controller/AbstractBase.php b/module/VuFind/src/VuFind/Controller/AbstractBase.php
index fb3d74fa1df..a2897ab8d32 100644
--- a/module/VuFind/src/VuFind/Controller/AbstractBase.php
+++ b/module/VuFind/src/VuFind/Controller/AbstractBase.php
@@ -28,13 +28,13 @@
  */
 namespace VuFind\Controller;
 
+use Laminas\Mvc\Controller\AbstractActionController;
+use Laminas\Mvc\MvcEvent;
+use Laminas\ServiceManager\ServiceLocatorInterface;
+use Laminas\View\Model\ViewModel;
 use VuFind\Exception\Auth as AuthException;
 use VuFind\Exception\ILS as ILSException;
 use VuFind\Http\PhpEnvironment\Request as HttpRequest;
-use Zend\Mvc\Controller\AbstractActionController;
-use Zend\Mvc\MvcEvent;
-use Zend\ServiceManager\ServiceLocatorInterface;
-use Zend\View\Model\ViewModel;
 use ZfcRbac\Service\AuthorizationServiceAwareInterface;
 
 /**
@@ -296,7 +296,7 @@ class AbstractBase extends AbstractActionController
     /**
      * Get the view renderer
      *
-     * @return \Zend\View\Renderer\RendererInterface
+     * @return \Laminas\View\Renderer\RendererInterface
      */
     protected function getViewRenderer()
     {
@@ -427,7 +427,7 @@ class AbstractBase extends AbstractActionController
      *
      * @param string $id Configuration identifier (default = main VuFind config)
      *
-     * @return \Zend\Config\Config
+     * @return \Laminas\Config\Config
      */
     public function getConfig($id = 'config')
     {
diff --git a/module/VuFind/src/VuFind/Controller/AbstractBaseFactory.php b/module/VuFind/src/VuFind/Controller/AbstractBaseFactory.php
index f16c84b5708..fe30fac7f67 100644
--- a/module/VuFind/src/VuFind/Controller/AbstractBaseFactory.php
+++ b/module/VuFind/src/VuFind/Controller/AbstractBaseFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Controller;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Generic controller factory.
diff --git a/module/VuFind/src/VuFind/Controller/AbstractRecord.php b/module/VuFind/src/VuFind/Controller/AbstractRecord.php
index 13fb8e1e33e..6a476478e1d 100644
--- a/module/VuFind/src/VuFind/Controller/AbstractRecord.php
+++ b/module/VuFind/src/VuFind/Controller/AbstractRecord.php
@@ -82,7 +82,7 @@ class AbstractRecord extends AbstractBase
      *
      * @param array $params Parameters to pass to ViewModel constructor.
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     protected function createViewModel($params = null)
     {
@@ -423,7 +423,7 @@ class AbstractRecord extends AbstractBase
     /**
      * Email action - Allows the email form to appear.
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function emailAction()
     {
@@ -484,7 +484,7 @@ class AbstractRecord extends AbstractBase
     /**
      * SMS action - Allows the SMS form to appear.
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function smsAction()
     {
@@ -531,7 +531,7 @@ class AbstractRecord extends AbstractBase
     /**
      * Show citations for the current record.
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function citeAction()
     {
diff --git a/module/VuFind/src/VuFind/Controller/AbstractSearch.php b/module/VuFind/src/VuFind/Controller/AbstractSearch.php
index 0c3348d9f03..a834d614633 100644
--- a/module/VuFind/src/VuFind/Controller/AbstractSearch.php
+++ b/module/VuFind/src/VuFind/Controller/AbstractSearch.php
@@ -27,10 +27,10 @@
  */
 namespace VuFind\Controller;
 
+use Laminas\Session\SessionManager;
+use Laminas\Stdlib\Parameters;
 use VuFind\Search\RecommendListener;
 use VuFind\Solr\Utils as SolrUtils;
-use Zend\Session\SessionManager;
-use Zend\Stdlib\Parameters;
 
 /**
  * VuFind Search Controller
@@ -81,7 +81,7 @@ class AbstractSearch extends AbstractBase
     /**
      * Handle an advanced search
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function advancedAction()
     {
@@ -107,7 +107,7 @@ class AbstractSearch extends AbstractBase
                 ->get(\VuFind\Search\Results\PluginManager::class)
                 ->get($this->searchClassId);
             $view->saved->getParams()->initFromRequest(
-                new \Zend\StdLib\Parameters([])
+                new \Laminas\Stdlib\Parameters([])
             );
         }
 
@@ -260,7 +260,7 @@ class AbstractSearch extends AbstractBase
     /**
      * Send search results to results view
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function resultsAction()
     {
@@ -340,7 +340,7 @@ class AbstractSearch extends AbstractBase
      *
      * @param \VuFind\Search\Base\Results $results Search results object.
      *
-     * @return bool|\Zend\View\Model\ViewModel
+     * @return bool|\Laminas\View\Model\ViewModel
      */
     protected function processJumpTo($results)
     {
diff --git a/module/VuFind/src/VuFind/Controller/AjaxController.php b/module/VuFind/src/VuFind/Controller/AjaxController.php
index a664271db62..c4b0a879ff1 100644
--- a/module/VuFind/src/VuFind/Controller/AjaxController.php
+++ b/module/VuFind/src/VuFind/Controller/AjaxController.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\Controller;
 
+use Laminas\Mvc\Controller\AbstractActionController;
 use VuFind\AjaxHandler\PluginManager;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
-use Zend\Mvc\Controller\AbstractActionController;
 
 /**
  * This controller handles global AJAX functionality
@@ -61,7 +61,7 @@ class AjaxController extends AbstractActionController
     /**
      * Make an AJAX call with a JSON-formatted response.
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function jsonAction()
     {
@@ -71,7 +71,7 @@ class AjaxController extends AbstractActionController
     /**
      * Load a recommendation module via AJAX.
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function recommendAction()
     {
@@ -83,7 +83,7 @@ class AjaxController extends AbstractActionController
      *
      * A simple OK as text/plain is returned if everything works properly.
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function systemStatusAction()
     {
diff --git a/module/VuFind/src/VuFind/Controller/AjaxControllerFactory.php b/module/VuFind/src/VuFind/Controller/AjaxControllerFactory.php
index ab0daac6bcc..a0119ad60a7 100644
--- a/module/VuFind/src/VuFind/Controller/AjaxControllerFactory.php
+++ b/module/VuFind/src/VuFind/Controller/AjaxControllerFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Controller;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Ajax controller factory.
diff --git a/module/VuFind/src/VuFind/Controller/AjaxResponseTrait.php b/module/VuFind/src/VuFind/Controller/AjaxResponseTrait.php
index e7d2ef4431a..f243a9a289e 100644
--- a/module/VuFind/src/VuFind/Controller/AjaxResponseTrait.php
+++ b/module/VuFind/src/VuFind/Controller/AjaxResponseTrait.php
@@ -97,7 +97,7 @@ trait AjaxResponseTrait
      * @param mixed  $data     The response data
      * @param int    $httpCode A custom HTTP Status Code
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      * @throws \Exception
      */
     protected function getAjaxResponse($type, $data, $httpCode = null)
@@ -120,7 +120,7 @@ trait AjaxResponseTrait
      * @param string     $type Content type to output
      * @param \Exception $e    Exception to output.
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     protected function getExceptionResponse($type, \Exception $e)
     {
@@ -139,7 +139,7 @@ trait AjaxResponseTrait
      * @param string $method AJAX method to call
      * @param string $type   Content type to output
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     protected function callAjaxMethod($method, $type = 'application/javascript')
     {
diff --git a/module/VuFind/src/VuFind/Controller/AlmaController.php b/module/VuFind/src/VuFind/Controller/AlmaController.php
index af2770ec560..e4843c1077f 100644
--- a/module/VuFind/src/VuFind/Controller/AlmaController.php
+++ b/module/VuFind/src/VuFind/Controller/AlmaController.php
@@ -27,7 +27,8 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
+use Laminas\Stdlib\RequestInterface;
 
 /**
  * Alma controller, mainly for webhooks.
@@ -50,28 +51,28 @@ class AlmaController extends AbstractBase
     /**
      * Http response
      *
-     * @var \Zend\Http\PhpEnvironment\Response
+     * @var \Laminas\Http\PhpEnvironment\Response
      */
     protected $httpResponse;
 
     /**
      * Http headers
      *
-     * @var \Zend\Http\Headers
+     * @var \Laminas\Http\Headers
      */
     protected $httpHeaders;
 
     /**
      * Configuration from config.ini
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
     /**
      * Alma.ini config
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $configAlma;
 
@@ -100,7 +101,7 @@ class AlmaController extends AbstractBase
     /**
      * Action that is executed when the webhook page is called.
      *
-     * @return \Zend\Http\Response|NULL
+     * @return \Laminas\Http\Response|NULL
      */
     public function webhookAction()
     {
@@ -175,7 +176,7 @@ class AlmaController extends AbstractBase
      *
      * @param mixed $requestBodyJson A JSON string decode with json_decode()
      *
-     * @return NULL|\Zend\Http\Response
+     * @return NULL|\Laminas\Http\Response
      */
     protected function webhookUser($requestBodyJson)
     {
@@ -302,7 +303,7 @@ class AlmaController extends AbstractBase
      * The webhook challenge. This is used to activate the webhook in Alma. Without
      * activating it, Alma will not send its webhook messages to VuFind.
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     protected function webhookChallenge()
     {
@@ -337,9 +338,9 @@ class AlmaController extends AbstractBase
      * Send the "set password email" to a new user that was created in Alma and sent
      * to VuFind via webhook.
      *
-     * @param \VuFind\Db\Row\User $user   A user row object from the VuFind
-     *                                    user table.
-     * @param \Zend\Config\Config $config A config object of config.ini
+     * @param \VuFind\Db\Row\User    $user   A user row object from the VuFind
+     * user table.
+     * @param \Laminas\Config\Config $config A config object of config.ini
      *
      * @return void
      */
@@ -398,7 +399,7 @@ class AlmaController extends AbstractBase
      * @param int    $httpStatusCode The HTTP status code that should be sent back
      *                               to Alma
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     protected function createJsonResponse($text, $httpStatusCode)
     {
@@ -417,7 +418,7 @@ class AlmaController extends AbstractBase
      *
      * @param string $webhookType The type of the webhook
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     protected function webhookNotImplemented($webhookType)
     {
@@ -449,15 +450,14 @@ class AlmaController extends AbstractBase
      * the 'X-Exl-Signature' in the request header. This is a security measure to
      * be sure that the request comes from Alma.
      *
-     * @param \Zend\Stdlib\RequestInterface $request The request from Alma.
+     * @param RequestInterface $request The request from Alma.
      *
-     * @throws \VuFind\Exception\Forbidden                Throws forbidden exception
-     *                                                     if hash values are not the
-     *                                                     same.
+     * @throws \VuFind\Exception\Forbidden Throws forbidden exception if hash values
+     * are not the same.
      *
      * @return void
      */
-    protected function checkMessageSignature(\Zend\Stdlib\RequestInterface $request)
+    protected function checkMessageSignature(RequestInterface $request)
     {
         // Get request content
         $requestBodyString = $request->getContent();
diff --git a/module/VuFind/src/VuFind/Controller/AlphabrowseController.php b/module/VuFind/src/VuFind/Controller/AlphabrowseController.php
index b408b516623..edd34e17fc4 100644
--- a/module/VuFind/src/VuFind/Controller/AlphabrowseController.php
+++ b/module/VuFind/src/VuFind/Controller/AlphabrowseController.php
@@ -47,7 +47,7 @@ class AlphabrowseController extends AbstractBase
     /**
      * Gathers data for the view of the AlphaBrowser and does some initialization
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function homeAction()
     {
diff --git a/module/VuFind/src/VuFind/Controller/AuthorityController.php b/module/VuFind/src/VuFind/Controller/AuthorityController.php
index d803f88fbfa..08578b4ddc9 100644
--- a/module/VuFind/src/VuFind/Controller/AuthorityController.php
+++ b/module/VuFind/src/VuFind/Controller/AuthorityController.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Authority Controller
@@ -54,7 +54,7 @@ class AuthorityController extends AbstractSearch
     /**
      * Home action
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function homeAction()
     {
@@ -71,7 +71,7 @@ class AuthorityController extends AbstractSearch
     /**
      * Record action -- display a record
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function recordAction()
     {
diff --git a/module/VuFind/src/VuFind/Controller/BrowZineController.php b/module/VuFind/src/VuFind/Controller/BrowZineController.php
index 0bfe9da11cf..c8aa57c7956 100644
--- a/module/VuFind/src/VuFind/Controller/BrowZineController.php
+++ b/module/VuFind/src/VuFind/Controller/BrowZineController.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * BrowZine Controller
diff --git a/module/VuFind/src/VuFind/Controller/BrowseController.php b/module/VuFind/src/VuFind/Controller/BrowseController.php
index 84b5cab233b..c32ca4fda1b 100644
--- a/module/VuFind/src/VuFind/Controller/BrowseController.php
+++ b/module/VuFind/src/VuFind/Controller/BrowseController.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\Controller;
 
+use Laminas\Config\Config;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 use VuFind\Exception\Forbidden as ForbiddenException;
-use Zend\Config\Config;
-use Zend\ServiceManager\ServiceLocatorInterface;
 
 /**
  * BrowseController Class
@@ -47,7 +47,7 @@ class BrowseController extends AbstractBase
     /**
      * VuFind configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
@@ -111,7 +111,7 @@ class BrowseController extends AbstractBase
      *
      * @param array $params Parameters to pass to ViewModel constructor.
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     protected function createViewModel($params = null)
     {
@@ -212,7 +212,7 @@ class BrowseController extends AbstractBase
     /**
      * Gathers data for the view of the AlphaBrowser and does some initialization
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function homeAction()
     {
@@ -223,9 +223,9 @@ class BrowseController extends AbstractBase
     /**
      * Perform the search
      *
-     * @param \Zend\View\Model\ViewModel $view View model to modify
+     * @param \Laminas\View\Model\ViewModel $view View model to modify
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     protected function performSearch($view)
     {
@@ -284,7 +284,7 @@ class BrowseController extends AbstractBase
     /**
      * Browse tags
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function tagAction()
     {
@@ -354,7 +354,7 @@ class BrowseController extends AbstractBase
     /**
      * Browse LCC
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function lccAction()
     {
@@ -372,7 +372,7 @@ class BrowseController extends AbstractBase
     /**
      * Browse Dewey
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function deweyAction()
     {
@@ -420,7 +420,7 @@ class BrowseController extends AbstractBase
      * @param string $facetPrefix   if this is true and we're looking
      * alphabetically, add a facet_prefix to the URL
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     protected function performBrowse($currentAction, $categoryList, $facetPrefix)
     {
@@ -445,7 +445,7 @@ class BrowseController extends AbstractBase
     /**
      * Browse Author
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function authorAction()
     {
@@ -464,7 +464,7 @@ class BrowseController extends AbstractBase
     /**
      * Browse Topic
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function topicAction()
     {
@@ -481,7 +481,7 @@ class BrowseController extends AbstractBase
     /**
      * Browse Genre
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function genreAction()
     {
@@ -498,7 +498,7 @@ class BrowseController extends AbstractBase
     /**
      * Browse Region
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function regionAction()
     {
@@ -515,7 +515,7 @@ class BrowseController extends AbstractBase
     /**
      * Browse Era
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function eraAction()
     {
diff --git a/module/VuFind/src/VuFind/Controller/CartController.php b/module/VuFind/src/VuFind/Controller/CartController.php
index ba1ee787d90..d018a3fb2fc 100644
--- a/module/VuFind/src/VuFind/Controller/CartController.php
+++ b/module/VuFind/src/VuFind/Controller/CartController.php
@@ -27,10 +27,10 @@
  */
 namespace VuFind\Controller;
 
+use Laminas\ServiceManager\ServiceLocatorInterface;
+use Laminas\Session\Container;
 use VuFind\Exception\Forbidden as ForbiddenException;
 use VuFind\Exception\Mail as MailException;
-use Zend\ServiceManager\ServiceLocatorInterface;
-use Zend\Session\Container;
 
 /**
  * Book Bag / Bulk Action Controller
@@ -46,7 +46,7 @@ class CartController extends AbstractBase
     /**
      * Session container
      *
-     * @var \Zend\Session\Container
+     * @var \Laminas\Session\Container
      */
     protected $session;
 
diff --git a/module/VuFind/src/VuFind/Controller/CartControllerFactory.php b/module/VuFind/src/VuFind/Controller/CartControllerFactory.php
index 5e5a908056d..51a0700efc4 100644
--- a/module/VuFind/src/VuFind/Controller/CartControllerFactory.php
+++ b/module/VuFind/src/VuFind/Controller/CartControllerFactory.php
@@ -60,8 +60,8 @@ class CartControllerFactory extends AbstractBaseFactory
         if (!empty($options)) {
             throw new \Exception('Unexpected options sent to factory.');
         }
-        $session = new \Zend\Session\Container(
-            'cart_followup', $container->get(\Zend\Session\SessionManager::class)
+        $session = new \Laminas\Session\Container(
+            'cart_followup', $container->get(\Laminas\Session\SessionManager::class)
         );
         return $this->applyPermissions(
             $container,
diff --git a/module/VuFind/src/VuFind/Controller/ChannelsController.php b/module/VuFind/src/VuFind/Controller/ChannelsController.php
index d60077c81cd..2f532245e8f 100644
--- a/module/VuFind/src/VuFind/Controller/ChannelsController.php
+++ b/module/VuFind/src/VuFind/Controller/ChannelsController.php
@@ -62,7 +62,7 @@ class ChannelsController extends AbstractBase
     /**
      * Generates static front page of channels.
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function homeAction()
     {
@@ -76,7 +76,7 @@ class ChannelsController extends AbstractBase
     /**
      * Generates channels for a record.
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function recordAction()
     {
@@ -92,7 +92,7 @@ class ChannelsController extends AbstractBase
     /**
      * Generates channels for a search.
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function searchAction()
     {
diff --git a/module/VuFind/src/VuFind/Controller/CollectionController.php b/module/VuFind/src/VuFind/Controller/CollectionController.php
index 39b32670b69..926be715546 100644
--- a/module/VuFind/src/VuFind/Controller/CollectionController.php
+++ b/module/VuFind/src/VuFind/Controller/CollectionController.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Controller;
 
-use Zend\Config\Config;
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\Config\Config;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Collection Controller
@@ -87,7 +87,7 @@ class CollectionController extends AbstractRecord
         }
 
         $result = parent::showTab($tab, $ajax);
-        if (!$ajax && $result instanceof \Zend\View\Model\ViewModel) {
+        if (!$ajax && $result instanceof \Laminas\View\Model\ViewModel) {
             $result->setTemplate('collection/view');
         }
         return $result;
diff --git a/module/VuFind/src/VuFind/Controller/CollectionsController.php b/module/VuFind/src/VuFind/Controller/CollectionsController.php
index 244604bdd0a..6e8686063ca 100644
--- a/module/VuFind/src/VuFind/Controller/CollectionsController.php
+++ b/module/VuFind/src/VuFind/Controller/CollectionsController.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\Controller;
 
+use Laminas\Config\Config;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 use VuFindSearch\Query\Query;
-use Zend\Config\Config;
-use Zend\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Collections Controller
@@ -45,7 +45,7 @@ class CollectionsController extends AbstractBase
     /**
      * VuFind configuration
      *
-     * @param \Zend\Config\Config
+     * @param \Laminas\Config\Config
      */
     protected $config;
 
diff --git a/module/VuFind/src/VuFind/Controller/CombinedController.php b/module/VuFind/src/VuFind/Controller/CombinedController.php
index 74bd57eb06c..2e6b6dbfca5 100644
--- a/module/VuFind/src/VuFind/Controller/CombinedController.php
+++ b/module/VuFind/src/VuFind/Controller/CombinedController.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Controller;
 
+use Laminas\ServiceManager\ServiceLocatorInterface;
 use VuFind\Search\SearchRunner;
-use Zend\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Redirects the user to the appropriate default VuFind action.
diff --git a/module/VuFind/src/VuFind/Controller/ContentController.php b/module/VuFind/src/VuFind/Controller/ContentController.php
index 26b54e056df..1efbd564104 100644
--- a/module/VuFind/src/VuFind/Controller/ContentController.php
+++ b/module/VuFind/src/VuFind/Controller/ContentController.php
@@ -29,7 +29,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\View\Model\ViewModel;
+use Laminas\View\Model\ViewModel;
 
 /**
  * Controller for mostly static pages that doesn't fall under any particular
@@ -63,7 +63,7 @@ class ContentController extends AbstractBase
     {
         $page = $this->params()->fromRoute('page');
         $themeInfo = $this->serviceLocator->get(\VuFindTheme\ThemeInfo::class);
-        $language = $this->serviceLocator->get(\Zend\Mvc\I18n\Translator::class)
+        $language = $this->serviceLocator->get(\Laminas\Mvc\I18n\Translator::class)
             ->getLocale();
         $defaultLanguage = $this->getConfig()->Site->language;
 
@@ -107,7 +107,7 @@ class ContentController extends AbstractBase
     {
         $response   = $this->response;
 
-        if ($response instanceof \Zend\Http\Response) {
+        if ($response instanceof \Laminas\Http\Response) {
             return $this->createHttpNotFoundModel($response);
         }
         return $this->createConsoleNotFoundModel($response);
diff --git a/module/VuFind/src/VuFind/Controller/CoverController.php b/module/VuFind/src/VuFind/Controller/CoverController.php
index 6e8e0aa7f90..7330fd65276 100644
--- a/module/VuFind/src/VuFind/Controller/CoverController.php
+++ b/module/VuFind/src/VuFind/Controller/CoverController.php
@@ -40,7 +40,7 @@ use VuFind\Session\Settings as SessionSettings;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Page
  */
-class CoverController extends \Zend\Mvc\Controller\AbstractActionController
+class CoverController extends \Laminas\Mvc\Controller\AbstractActionController
 {
     /**
      * Cover loader
@@ -107,7 +107,7 @@ class CoverController extends \Zend\Mvc\Controller\AbstractActionController
     /**
      * Send image data for display in the view
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function showAction()
     {
@@ -136,7 +136,7 @@ class CoverController extends \Zend\Mvc\Controller\AbstractActionController
     /**
      * Return the default 'image not found' information
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function unavailableAction()
     {
@@ -152,7 +152,7 @@ class CoverController extends \Zend\Mvc\Controller\AbstractActionController
      * @param string $type  Content type of image (null to access loader)
      * @param string $image Image data (null to access loader)
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     protected function displayImage($type = null, $image = null)
     {
diff --git a/module/VuFind/src/VuFind/Controller/CoverControllerFactory.php b/module/VuFind/src/VuFind/Controller/CoverControllerFactory.php
index 6ae4ab36cbc..cbb1ecb3889 100644
--- a/module/VuFind/src/VuFind/Controller/CoverControllerFactory.php
+++ b/module/VuFind/src/VuFind/Controller/CoverControllerFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Controller;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Cover controller factory.
diff --git a/module/VuFind/src/VuFind/Controller/EITController.php b/module/VuFind/src/VuFind/Controller/EITController.php
index b083bf6133d..8db567eefe8 100644
--- a/module/VuFind/src/VuFind/Controller/EITController.php
+++ b/module/VuFind/src/VuFind/Controller/EITController.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * EIT Controller
diff --git a/module/VuFind/src/VuFind/Controller/EITrecordController.php b/module/VuFind/src/VuFind/Controller/EITrecordController.php
index 902d58919df..2d9fd47d8d7 100644
--- a/module/VuFind/src/VuFind/Controller/EITrecordController.php
+++ b/module/VuFind/src/VuFind/Controller/EITrecordController.php
@@ -28,7 +28,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * EIT Record Controller
diff --git a/module/VuFind/src/VuFind/Controller/EdsController.php b/module/VuFind/src/VuFind/Controller/EdsController.php
index f8fbbfee14e..b10d43bccbc 100644
--- a/module/VuFind/src/VuFind/Controller/EdsController.php
+++ b/module/VuFind/src/VuFind/Controller/EdsController.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Controller;
 
+use Laminas\ServiceManager\ServiceLocatorInterface;
 use VuFind\Solr\Utils as SolrUtils;
-use Zend\ServiceManager\ServiceLocatorInterface;
 
 /**
  * EDS Controller
diff --git a/module/VuFind/src/VuFind/Controller/EdsrecordController.php b/module/VuFind/src/VuFind/Controller/EdsrecordController.php
index f78ba6c2d18..564b238887f 100644
--- a/module/VuFind/src/VuFind/Controller/EdsrecordController.php
+++ b/module/VuFind/src/VuFind/Controller/EdsrecordController.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Controller;
 
+use Laminas\ServiceManager\ServiceLocatorInterface;
 use VuFind\Exception\Forbidden as ForbiddenException;
-use Zend\ServiceManager\ServiceLocatorInterface;
 
 /**
  * EDS Record Controller
diff --git a/module/VuFind/src/VuFind/Controller/ErrorController.php b/module/VuFind/src/VuFind/Controller/ErrorController.php
index fcd92d1c508..fae464da83c 100644
--- a/module/VuFind/src/VuFind/Controller/ErrorController.php
+++ b/module/VuFind/src/VuFind/Controller/ErrorController.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\Mvc\Controller\AbstractActionController;
+use Laminas\Mvc\Controller\AbstractActionController;
 
 /**
  * Error Controller
@@ -48,7 +48,7 @@ class ErrorController extends AbstractActionController
     public function unavailableAction()
     {
         $this->getResponse()->setStatusCode(503);
-        return new \Zend\View\Model\ViewModel();
+        return new \Laminas\View\Model\ViewModel();
     }
 
     /**
@@ -59,7 +59,7 @@ class ErrorController extends AbstractActionController
     public function permissionDeniedAction()
     {
         $this->getResponse()->setStatusCode(403);
-        return new \Zend\View\Model\ViewModel(
+        return new \Laminas\View\Model\ViewModel(
             ['msg' => $this->params()->fromQuery('msg')]
         );
     }
diff --git a/module/VuFind/src/VuFind/Controller/ExternalAuthController.php b/module/VuFind/src/VuFind/Controller/ExternalAuthController.php
index 0de5b2046ed..53963575e67 100644
--- a/module/VuFind/src/VuFind/Controller/ExternalAuthController.php
+++ b/module/VuFind/src/VuFind/Controller/ExternalAuthController.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\Log\LoggerAwareInterface;
+use Laminas\Log\LoggerAwareInterface;
 
 /**
  * External Authentication/Authorization Controller
@@ -74,7 +74,7 @@ class ExternalAuthController extends AbstractBase implements LoggerAwareInterfac
             if (empty($config->EZproxy->disable_ticket_auth_logging)) {
                 $logger = $this->serviceLocator->get(\VuFind\Logger::class);
                 $logger->log(
-                    \Zend\Log\Logger::INFO,
+                    \Laminas\Log\Logger::INFO,
                     "EZproxy login to '" . $config->EZproxy->host
                     . "' for '" . ($user ? $user->username : 'anonymous')
                     . "' from IP address "
@@ -124,7 +124,7 @@ class ExternalAuthController extends AbstractBase implements LoggerAwareInterfac
         }
 
         $packet = '$u' . time() . '$e';
-        $hash = new \Zend\Crypt\Hash();
+        $hash = new \Laminas\Crypt\Hash();
         $algorithm = !empty($config->EZproxy->secret_hash_method)
             ? $config->EZproxy->secret_hash_method : 'SHA512';
         $ticket = $config->EZproxy->secret . $user . $packet;
diff --git a/module/VuFind/src/VuFind/Controller/FeedbackController.php b/module/VuFind/src/VuFind/Controller/FeedbackController.php
index 21880527c2e..7f9cdd5afe6 100644
--- a/module/VuFind/src/VuFind/Controller/FeedbackController.php
+++ b/module/VuFind/src/VuFind/Controller/FeedbackController.php
@@ -13,9 +13,9 @@
  */
 namespace VuFind\Controller;
 
+use Laminas\Mail\Address;
 use VuFind\Exception\Mail as MailException;
 use VuFind\Form\Form;
-use Zend\Mail\Address;
 
 /**
  * Controller for configurable forms (feedback etc).
@@ -32,7 +32,7 @@ class FeedbackController extends AbstractBase
     /**
      * Display Feedback home form.
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function homeAction()
     {
diff --git a/module/VuFind/src/VuFind/Controller/HierarchyController.php b/module/VuFind/src/VuFind/Controller/HierarchyController.php
index 5aa8822f01f..8fa28546d36 100644
--- a/module/VuFind/src/VuFind/Controller/HierarchyController.php
+++ b/module/VuFind/src/VuFind/Controller/HierarchyController.php
@@ -43,7 +43,7 @@ class HierarchyController extends AbstractBase
      *
      * @param string $xml XML to output
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     protected function output($xml)
     {
@@ -60,7 +60,7 @@ class HierarchyController extends AbstractBase
      * @param string $json   A JSON string
      * @param int    $status Response status code
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     protected function outputJSON($json, $status = 200)
     {
@@ -76,7 +76,7 @@ class HierarchyController extends AbstractBase
      * Search the tree and echo a json result of items that
      * matched the keywords.
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function searchtreeAction()
     {
diff --git a/module/VuFind/src/VuFind/Controller/IndexController.php b/module/VuFind/src/VuFind/Controller/IndexController.php
index 2b5dfaa0fff..ad97396c80d 100644
--- a/module/VuFind/src/VuFind/Controller/IndexController.php
+++ b/module/VuFind/src/VuFind/Controller/IndexController.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Controller;
 
+use Laminas\Config\Config;
 use VuFind\Auth\Manager as AuthManager;
-use Zend\Config\Config;
 
 /**
  * Redirects the user to the appropriate default VuFind action.
@@ -39,7 +39,7 @@ use Zend\Config\Config;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Site
  */
-class IndexController extends \Zend\Mvc\Controller\AbstractActionController
+class IndexController extends \Laminas\Mvc\Controller\AbstractActionController
 {
     /**
      * VuFind configuration
diff --git a/module/VuFind/src/VuFind/Controller/IndexControllerFactory.php b/module/VuFind/src/VuFind/Controller/IndexControllerFactory.php
index 96f80558c56..b0bea25ae14 100644
--- a/module/VuFind/src/VuFind/Controller/IndexControllerFactory.php
+++ b/module/VuFind/src/VuFind/Controller/IndexControllerFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Controller;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Index controller factory.
diff --git a/module/VuFind/src/VuFind/Controller/InstallController.php b/module/VuFind/src/VuFind/Controller/InstallController.php
index d45cb21701f..82404f9e687 100644
--- a/module/VuFind/src/VuFind/Controller/InstallController.php
+++ b/module/VuFind/src/VuFind/Controller/InstallController.php
@@ -27,10 +27,10 @@
  */
 namespace VuFind\Controller;
 
+use Laminas\Crypt\Password\Bcrypt;
+use Laminas\Mvc\MvcEvent;
 use VuFind\Config\Locator as ConfigLocator;
 use VuFind\Config\Writer as ConfigWriter;
-use Zend\Crypt\Password\Bcrypt;
-use Zend\Mvc\MvcEvent;
 
 /**
  * Class controls VuFind auto-configuration.
@@ -434,8 +434,8 @@ class InstallController extends AbstractBase
      * Get SQL commands needed to set up a particular database before
      * loading the main SQL file of table definitions.
      *
-     * @param \Zend\View\Model $view        View object containing DB settings.
-     * @param string           $escapedPass Password to set for new DB (escaped
+     * @param \Laminas\View\Model $view        View object containing DB settings.
+     * @param string              $escapedPass Password to set for new DB (escaped
      * appropriately for target database).
      *
      * @return array
@@ -467,7 +467,7 @@ class InstallController extends AbstractBase
      * Get SQL commands needed to set up a particular database after
      * loading the main SQL file of table definitions.
      *
-     * @param \Zend\View\Model $view View object containing DB settings.
+     * @param \Laminas\View\Model $view View object containing DB settings.
      *
      * @return array
      */
@@ -690,8 +690,8 @@ class InstallController extends AbstractBase
      * Support method for fixsecurityAction().  Returns true if the configuration
      * was modified, false otherwise.
      *
-     * @param \Zend\Config\Config $config Existing VuFind configuration
-     * @param ConfigWriter        $writer Config writer
+     * @param \Laminas\Config\Config $config Existing VuFind configuration
+     * @param ConfigWriter           $writer Config writer
      *
      * @return bool
      */
diff --git a/module/VuFind/src/VuFind/Controller/LibGuidesController.php b/module/VuFind/src/VuFind/Controller/LibGuidesController.php
index 9230d58ca49..09a49379520 100644
--- a/module/VuFind/src/VuFind/Controller/LibGuidesController.php
+++ b/module/VuFind/src/VuFind/Controller/LibGuidesController.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * LibGuides Controller
diff --git a/module/VuFind/src/VuFind/Controller/LibraryCardsController.php b/module/VuFind/src/VuFind/Controller/LibraryCardsController.php
index 4d249b208a5..4e592de45df 100644
--- a/module/VuFind/src/VuFind/Controller/LibraryCardsController.php
+++ b/module/VuFind/src/VuFind/Controller/LibraryCardsController.php
@@ -201,7 +201,7 @@ class LibraryCardsController extends AbstractBase
     /**
      * Activates a library card
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function selectCardAction()
     {
@@ -317,7 +317,7 @@ class LibraryCardsController extends AbstractBase
      * @param User   $user User object
      * @param string $hash Hash
      *
-     * @return \Zend\Http\Response Response object
+     * @return \Laminas\Http\Response Response object
      */
     protected function processEmailLink($user, $hash)
     {
diff --git a/module/VuFind/src/VuFind/Controller/MyResearchController.php b/module/VuFind/src/VuFind/Controller/MyResearchController.php
index 3599d2e6b5a..ac3ef7063fc 100644
--- a/module/VuFind/src/VuFind/Controller/MyResearchController.php
+++ b/module/VuFind/src/VuFind/Controller/MyResearchController.php
@@ -27,6 +27,8 @@
  */
 namespace VuFind\Controller;
 
+use Laminas\Stdlib\Parameters;
+use Laminas\View\Model\ViewModel;
 use VuFind\Exception\Auth as AuthException;
 use VuFind\Exception\AuthEmailNotVerified as AuthEmailNotVerifiedException;
 use VuFind\Exception\AuthInProgress as AuthInProgressException;
@@ -36,8 +38,6 @@ use VuFind\Exception\ListPermission as ListPermissionException;
 use VuFind\Exception\Mail as MailException;
 use VuFind\ILS\PaginationHelper;
 use VuFind\Search\RecommendListener;
-use Zend\Stdlib\Parameters;
-use Zend\View\Model\ViewModel;
 
 /**
  * Controller for the user account area.
@@ -74,7 +74,7 @@ class MyResearchController extends AbstractBase
      * Construct an HTTP 205 (refresh) response. Useful for reporting success
      * in the lightbox without actually rendering content.
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     protected function getRefreshResponse()
     {
@@ -136,12 +136,12 @@ class MyResearchController extends AbstractBase
     /**
      * Execute the request
      *
-     * @param \Zend\Mvc\MvcEvent $event Event
+     * @param \Laminas\Mvc\MvcEvent $event Event
      *
      * @return mixed
      * @throws Exception\DomainException
      */
-    public function onDispatch(\Zend\Mvc\MvcEvent $event)
+    public function onDispatch(\Laminas\Mvc\MvcEvent $event)
     {
         // Catch any ILSExceptions thrown during processing and display a generic
         // failure message to the user (instead of going to the fatal exception
@@ -392,7 +392,7 @@ class MyResearchController extends AbstractBase
     {
         $searchTable = $this->getTable('Search');
         $sessId = $this->serviceLocator
-            ->get(\Zend\Session\SessionManager::class)->getId();
+            ->get(\Laminas\Session\SessionManager::class)->getId();
         $row = $searchTable->getOwnedRowById($searchId, $sessId, $userId);
         if (empty($row)) {
             throw new ForbiddenException('Access denied.');
@@ -408,13 +408,13 @@ class MyResearchController extends AbstractBase
     /**
      * Return a session container for use in user email verification.
      *
-     * @return \Zend\Session\Container
+     * @return \Laminas\Session\Container
      */
     protected function getUserVerificationContainer()
     {
-        return new \Zend\Session\Container(
+        return new \Laminas\Session\Container(
             'user_verification',
-            $this->serviceLocator->get(\Zend\Session\SessionManager::class)
+            $this->serviceLocator->get(\Laminas\Session\SessionManager::class)
         );
     }
 
@@ -1935,7 +1935,7 @@ class MyResearchController extends AbstractBase
                 );
             }
             // Update email
-            $validator = new \Zend\Validator\EmailAddress();
+            $validator = new \Laminas\Validator\EmailAddress();
             $email = $this->params()->fromPost('email', '');
             try {
                 if (!$validator->isValid($email)) {
diff --git a/module/VuFind/src/VuFind/Controller/OaiController.php b/module/VuFind/src/VuFind/Controller/OaiController.php
index 50d1873fb0e..c88ee8047b8 100644
--- a/module/VuFind/src/VuFind/Controller/OaiController.php
+++ b/module/VuFind/src/VuFind/Controller/OaiController.php
@@ -45,7 +45,7 @@ class OaiController extends AbstractBase
     /**
      * Display OAI server form.
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function homeAction()
     {
@@ -56,7 +56,7 @@ class OaiController extends AbstractBase
     /**
      * Standard OAI server.
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function authserverAction()
     {
@@ -66,7 +66,7 @@ class OaiController extends AbstractBase
     /**
      * Standard OAI server.
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function serverAction()
     {
@@ -78,7 +78,7 @@ class OaiController extends AbstractBase
      *
      * @param string $serverClass Class to load for handling OAI requests.
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     protected function handleOAI($serverClass)
     {
diff --git a/module/VuFind/src/VuFind/Controller/OverdriveController.php b/module/VuFind/src/VuFind/Controller/OverdriveController.php
index edeb4fba990..0a15eeca4a2 100644
--- a/module/VuFind/src/VuFind/Controller/OverdriveController.php
+++ b/module/VuFind/src/VuFind/Controller/OverdriveController.php
@@ -12,9 +12,9 @@
  */
 namespace VuFind\Controller;
 
+use Laminas\Log\LoggerAwareInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 use VuFind\DigitalContent\OverdriveConnector;
-use Zend\Log\LoggerAwareInterface;
-use Zend\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Overdrive Controller supports actions for Overdrive Integration
@@ -55,7 +55,7 @@ class OverdriveController extends AbstractBase implements LoggerAwareInterface
      * My Content Action
      * Prepares the view for the Overdrive MyContent template.
      *
-     * @return array|bool|\Zend\View\Model\ViewModel
+     * @return array|bool|\Laminas\View\Model\ViewModel
      */
     public function mycontentAction()
     {
@@ -140,7 +140,7 @@ class OverdriveController extends AbstractBase implements LoggerAwareInterface
      * Get Status Action
      * Supports the ajax getStatus calls
      *
-     * @return array|bool|\Zend\View\Model\ViewModel
+     * @return array|bool|\Laminas\View\Model\ViewModel
      */
     public function getStatusAction()
     {
@@ -162,7 +162,7 @@ class OverdriveController extends AbstractBase implements LoggerAwareInterface
      * Hold Action handles all of the actions involving
      * Overdrive content including checkout, hold, cancel hold etc.
      *
-     * @return array|bool|\Zend\View\Model\ViewModel
+     * @return array|bool|\Laminas\View\Model\ViewModel
      * @todo   Deal with situation that an unlogged in user requests
      *     an action but the action is no longer valid since they
      *     already have the content on hold/checked out or do not have acceess
diff --git a/module/VuFind/src/VuFind/Controller/Pazpar2Controller.php b/module/VuFind/src/VuFind/Controller/Pazpar2Controller.php
index d49a9c6af5c..de987835058 100644
--- a/module/VuFind/src/VuFind/Controller/Pazpar2Controller.php
+++ b/module/VuFind/src/VuFind/Controller/Pazpar2Controller.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Pazpar2 Controller
diff --git a/module/VuFind/src/VuFind/Controller/Pazpar2recordController.php b/module/VuFind/src/VuFind/Controller/Pazpar2recordController.php
index 63805efdfd5..27ef1a48e66 100644
--- a/module/VuFind/src/VuFind/Controller/Pazpar2recordController.php
+++ b/module/VuFind/src/VuFind/Controller/Pazpar2recordController.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Pazpar2 Record Controller
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/AbstractRequestBase.php b/module/VuFind/src/VuFind/Controller/Plugin/AbstractRequestBase.php
index 2dcc349d6d4..f8a6505f05b 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/AbstractRequestBase.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/AbstractRequestBase.php
@@ -27,14 +27,14 @@
  */
 namespace VuFind\Controller\Plugin;
 
+use Laminas\Mvc\Controller\Plugin\AbstractPlugin;
+use Laminas\Session\Container;
+use Laminas\Session\SessionManager;
 use VuFind\Crypt\HMAC;
 use VuFind\ILS\Connection;
-use Zend\Mvc\Controller\Plugin\AbstractPlugin;
-use Zend\Session\Container;
-use Zend\Session\SessionManager;
 
 /**
- * Zend action helper base class to perform request-related actions
+ * Action helper base class to perform request-related actions
  *
  * @category VuFind
  * @package  Controller_Plugins
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/AbstractRequestBaseFactory.php b/module/VuFind/src/VuFind/Controller/Plugin/AbstractRequestBaseFactory.php
index 3d17d0e844b..a6bccfe71b8 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/AbstractRequestBaseFactory.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/AbstractRequestBaseFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Controller\Plugin;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for controller plugins extending AbstractRequestBase.
@@ -63,7 +63,7 @@ class AbstractRequestBaseFactory implements FactoryInterface
         }
         return new $requestedName(
             $container->get(\VuFind\Crypt\HMAC::class),
-            $container->get(\Zend\Session\SessionManager::class)
+            $container->get(\Laminas\Session\SessionManager::class)
         );
     }
 }
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/DbUpgrade.php b/module/VuFind/src/VuFind/Controller/Plugin/DbUpgrade.php
index 34610c99911..7ea64c39d28 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/DbUpgrade.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/DbUpgrade.php
@@ -28,12 +28,12 @@
  */
 namespace VuFind\Controller\Plugin;
 
-use Zend\Db\Adapter\Adapter as DbAdapter;
-use Zend\Db\Metadata\Metadata as DbMetadata;
-use Zend\Mvc\Controller\Plugin\AbstractPlugin;
+use Laminas\Db\Adapter\Adapter as DbAdapter;
+use Laminas\Db\Metadata\Metadata as DbMetadata;
+use Laminas\Mvc\Controller\Plugin\AbstractPlugin;
 
 /**
- * Zend action helper to perform database upgrades
+ * Action helper to perform database upgrades
  *
  * @category VuFind
  * @package  Controller_Plugins
@@ -799,8 +799,8 @@ class DbUpgrade extends AbstractPlugin
      * specified $type parameter.  Return false if there is a mismatch that will
      * require table structure updates.
      *
-     * @param \Zend\Db\Metadata\Object\ColumnObject $column       Object to check
-     * @param string                                $expectedType Type to compare
+     * @param \Laminas\Db\Metadata\Object\ColumnObject $column       Object to check
+     * @param string                                   $expectedType Type to compare
      *
      * @return bool
      */
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/Favorites.php b/module/VuFind/src/VuFind/Controller/Plugin/Favorites.php
index 49a9373e113..edd17f8a851 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/Favorites.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/Favorites.php
@@ -34,7 +34,7 @@ use VuFind\Record\Loader;
 use VuFind\Tags;
 
 /**
- * Zend action helper to perform favorites-related actions
+ * Action helper to perform favorites-related actions
  *
  * @category VuFind
  * @package  Controller_Plugins
@@ -42,7 +42,7 @@ use VuFind\Tags;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Page
  */
-class Favorites extends \Zend\Mvc\Controller\Plugin\AbstractPlugin
+class Favorites extends \Laminas\Mvc\Controller\Plugin\AbstractPlugin
 {
     /**
      * Record cache
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/FavoritesFactory.php b/module/VuFind/src/VuFind/Controller/Plugin/FavoritesFactory.php
index 7152a337182..094998d241c 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/FavoritesFactory.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/FavoritesFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Controller\Plugin;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for Favorites controller plugin.
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/FlashMessengerFactory.php b/module/VuFind/src/VuFind/Controller/Plugin/FlashMessengerFactory.php
index 8d2a2d7a8c5..a4d7a0c5f9b 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/FlashMessengerFactory.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/FlashMessengerFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Controller\Plugin;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for FlashMessenger controller plugin.
@@ -62,7 +62,7 @@ class FlashMessengerFactory implements FactoryInterface
             throw new \Exception('Unexpected options sent to factory.');
         }
         $plugin = new $requestedName();
-        $sessionManager = $container->get(\Zend\Session\SessionManager::class);
+        $sessionManager = $container->get(\Laminas\Session\SessionManager::class);
         $plugin->setSessionManager($sessionManager);
         return $plugin;
     }
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/Followup.php b/module/VuFind/src/VuFind/Controller/Plugin/Followup.php
index ce7bd23b807..0884d82c982 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/Followup.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/Followup.php
@@ -27,11 +27,11 @@
  */
 namespace VuFind\Controller\Plugin;
 
-use Zend\Mvc\Controller\Plugin\AbstractPlugin;
-use Zend\Session\Container;
+use Laminas\Mvc\Controller\Plugin\AbstractPlugin;
+use Laminas\Session\Container;
 
 /**
- * Zend action helper to deal with login followup; responsible for remembering URLs
+ * Action helper to deal with login followup; responsible for remembering URLs
  * before login and then redirecting the user to the appropriate place afterwards.
  *
  * @category VuFind
@@ -79,7 +79,7 @@ class Followup extends AbstractPlugin
      * Retrieve the stored followup information.
      *
      * @param string $key     Element to retrieve and clear (null for entire
-     * \Zend\Session\Container object)
+     * \Laminas\Session\Container object)
      * @param mixed  $default Default value to return if no stored value found
      * (ignored when $key is null)
      *
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/FollowupFactory.php b/module/VuFind/src/VuFind/Controller/Plugin/FollowupFactory.php
index ebb43f525a3..8bb5079bf9d 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/FollowupFactory.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/FollowupFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Controller\Plugin;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for Followup controller plugin.
@@ -62,8 +62,8 @@ class FollowupFactory implements FactoryInterface
             throw new \Exception('Unexpected options sent to factory.');
         }
         return new $requestedName(
-            new \Zend\Session\Container(
-                'Followup', $container->get(\Zend\Session\SessionManager::class)
+            new \Laminas\Session\Container(
+                'Followup', $container->get(\Laminas\Session\SessionManager::class)
             )
         );
     }
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/Holds.php b/module/VuFind/src/VuFind/Controller/Plugin/Holds.php
index 68bcbae7e45..413bbbd6173 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/Holds.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/Holds.php
@@ -28,7 +28,7 @@
 namespace VuFind\Controller\Plugin;
 
 /**
- * Zend action helper to perform holds-related actions
+ * Action helper to perform holds-related actions
  *
  * @category VuFind
  * @package  Controller_Plugins
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/ILLRequests.php b/module/VuFind/src/VuFind/Controller/Plugin/ILLRequests.php
index 6c5537d7b5a..e907aeeb77e 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/ILLRequests.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/ILLRequests.php
@@ -30,7 +30,7 @@
 namespace VuFind\Controller\Plugin;
 
 /**
- * Zend action helper to perform ILL request related actions
+ * Action helper to perform ILL request related actions
  *
  * @category VuFind
  * @package  Controller_Plugins
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/NewItems.php b/module/VuFind/src/VuFind/Controller/Plugin/NewItems.php
index c18a4195be6..2fbff4bc528 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/NewItems.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/NewItems.php
@@ -27,12 +27,12 @@
  */
 namespace VuFind\Controller\Plugin;
 
-use Zend\Config\Config;
-use Zend\Mvc\Controller\Plugin\AbstractPlugin;
-use Zend\Mvc\Plugin\FlashMessenger\FlashMessenger;
+use Laminas\Config\Config;
+use Laminas\Mvc\Controller\Plugin\AbstractPlugin;
+use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger;
 
 /**
- * Zend action helper to perform new items-related actions
+ * Action helper to perform new items-related actions
  *
  * @category VuFind
  * @package  Controller_Plugins
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/NewItemsFactory.php b/module/VuFind/src/VuFind/Controller/Plugin/NewItemsFactory.php
index b99ba6afba3..91c50490750 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/NewItemsFactory.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/NewItemsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Controller\Plugin;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for NewItems controller plugin.
@@ -63,7 +63,7 @@ class NewItemsFactory implements FactoryInterface
         }
         $search
             = $container->get(\VuFind\Config\PluginManager::class)->get('searches');
-        $config = $search->NewItem ?? new \Zend\Config\Config([]);
+        $config = $search->NewItem ?? new \Laminas\Config\Config([]);
         return new $requestedName($config);
     }
 }
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/Permission.php b/module/VuFind/src/VuFind/Controller/Plugin/Permission.php
index 26acd4afad5..746f1802b4e 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/Permission.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/Permission.php
@@ -27,12 +27,12 @@
  */
 namespace VuFind\Controller\Plugin;
 
+use Laminas\Log\LoggerAwareInterface;
+use Laminas\Mvc\Controller\Plugin\AbstractPlugin;
 use VuFind\Exception\Forbidden as ForbiddenException;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
 use VuFind\Role\PermissionDeniedManager;
 use VuFind\Role\PermissionManager;
-use Zend\Log\LoggerAwareInterface;
-use Zend\Mvc\Controller\Plugin\AbstractPlugin;
 
 /**
  * VuFind Action Helper - Permission Checker
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/PermissionFactory.php b/module/VuFind/src/VuFind/Controller/Plugin/PermissionFactory.php
index 262376a8386..b873d493a7e 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/PermissionFactory.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/PermissionFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Controller\Plugin;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for Permission controller plugin.
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/Recaptcha.php b/module/VuFind/src/VuFind/Controller/Plugin/Recaptcha.php
index 2142f863510..60e49528765 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/Recaptcha.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/Recaptcha.php
@@ -27,10 +27,10 @@
  */
 namespace VuFind\Controller\Plugin;
 
-use Zend\Mvc\Controller\Plugin\AbstractPlugin;
+use Laminas\Mvc\Controller\Plugin\AbstractPlugin;
 
 /**
- * Zend action helper to manage Recaptcha fields
+ * Action helper to manage Recaptcha fields
  *
  * @category VuFind
  * @package  Controller_Plugins
@@ -41,7 +41,7 @@ use Zend\Mvc\Controller\Plugin\AbstractPlugin;
 class Recaptcha extends AbstractPlugin
 {
     /**
-     * \ZendService\ReCaptcha\ReCaptcha
+     * \Laminas\ReCaptcha\ReCaptcha
      */
     protected $recaptcha;
 
@@ -63,8 +63,8 @@ class Recaptcha extends AbstractPlugin
     /**
      * Constructor
      *
-     * @param \ZendService\ReCaptcha\ReCaptcha $r      Customed reCAPTCHA object
-     * @param \VuFind\Config                   $config Config file
+     * @param \Laminas\ReCaptcha\ReCaptcha $r      Customed reCAPTCHA object
+     * @param \VuFind\Config               $config Config file
      *
      * @return void
      */
@@ -122,7 +122,7 @@ class Recaptcha extends AbstractPlugin
             ->fromPost('g-recaptcha-response');
         try {
             $response = $this->recaptcha->verify($responseField);
-        } catch (\ZendService\ReCaptcha\Exception $e) {
+        } catch (\Laminas\ReCaptcha\Exception $e) {
             $response = false;
         }
         $captchaPassed = $response && $response->isValid();
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/RecaptchaFactory.php b/module/VuFind/src/VuFind/Controller/Plugin/RecaptchaFactory.php
index aed80367678..ef3d3f61be7 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/RecaptchaFactory.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/RecaptchaFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Controller\Plugin;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for Recaptcha controller plugin.
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/Renewals.php b/module/VuFind/src/VuFind/Controller/Plugin/Renewals.php
index 9767d9ed20b..79fea0eb85d 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/Renewals.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/Renewals.php
@@ -27,10 +27,10 @@
  */
 namespace VuFind\Controller\Plugin;
 
-use Zend\Mvc\Controller\Plugin\AbstractPlugin;
+use Laminas\Mvc\Controller\Plugin\AbstractPlugin;
 
 /**
- * Zend action helper to perform renewal-related actions
+ * Action helper to perform renewal-related actions
  *
  * @category VuFind
  * @package  Controller_Plugins
@@ -72,9 +72,9 @@ class Renewals extends AbstractPlugin
     /**
      * Process renewal requests.
      *
-     * @param \Zend\Stdlib\Parameters $request Request object
-     * @param \VuFind\ILS\Connection  $catalog ILS connection object
-     * @param array                   $patron  Current logged in patron
+     * @param \Laminas\Stdlib\Parameters $request Request object
+     * @param \VuFind\ILS\Connection     $catalog ILS connection object
+     * @param array                      $patron  Current logged in patron
      *
      * @return array                  The result of the renewal, an
      * associative array keyed by item ID (empty if no renewals performed)
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/Reserves.php b/module/VuFind/src/VuFind/Controller/Plugin/Reserves.php
index 801cc28de34..454eed39f74 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/Reserves.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/Reserves.php
@@ -27,11 +27,11 @@
  */
 namespace VuFind\Controller\Plugin;
 
+use Laminas\Mvc\Controller\Plugin\AbstractPlugin;
 use VuFindSearch\Service;
-use Zend\Mvc\Controller\Plugin\AbstractPlugin;
 
 /**
- * Zend action helper to perform reserves-related actions
+ * Action helper to perform reserves-related actions
  *
  * @category VuFind
  * @package  Controller_Plugins
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/ReservesFactory.php b/module/VuFind/src/VuFind/Controller/Plugin/ReservesFactory.php
index abdd41daf8a..5c9fee9bb64 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/ReservesFactory.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/ReservesFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Controller\Plugin;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for Reserves controller plugin.
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/ResultScroller.php b/module/VuFind/src/VuFind/Controller/Plugin/ResultScroller.php
index 02390cde766..4674b0a5381 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/ResultScroller.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/ResultScroller.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\Controller\Plugin;
 
+use Laminas\Mvc\Controller\Plugin\AbstractPlugin;
+use Laminas\Session\Container as SessionContainer;
 use VuFind\Search\Results\PluginManager as ResultsManager;
-use Zend\Mvc\Controller\Plugin\AbstractPlugin;
-use Zend\Session\Container as SessionContainer;
 
 /**
  * Class for managing "next" and "previous" navigation within result sets.
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/ResultScrollerFactory.php b/module/VuFind/src/VuFind/Controller/Plugin/ResultScrollerFactory.php
index 417d4bfc8ae..2efe4f9f9c1 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/ResultScrollerFactory.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/ResultScrollerFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Controller\Plugin;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for ResultScroller controller plugin.
@@ -62,9 +62,9 @@ class ResultScrollerFactory implements FactoryInterface
             throw new \Exception('Unexpected options sent to factory.');
         }
         return new $requestedName(
-            new \Zend\Session\Container(
+            new \Laminas\Session\Container(
                 'ResultScroller',
-                $container->get(\Zend\Session\SessionManager::class)
+                $container->get(\Laminas\Session\SessionManager::class)
             ),
             $container->get(\VuFind\Search\Results\PluginManager::class)
         );
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/StorageRetrievalRequests.php b/module/VuFind/src/VuFind/Controller/Plugin/StorageRetrievalRequests.php
index 11bc1817730..a852dd01546 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/StorageRetrievalRequests.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/StorageRetrievalRequests.php
@@ -30,7 +30,7 @@
 namespace VuFind\Controller\Plugin;
 
 /**
- * Zend action helper to perform storage retrieval request related actions
+ * Action helper to perform storage retrieval request related actions
  *
  * @category VuFind
  * @package  Controller_Plugins
diff --git a/module/VuFind/src/VuFind/Controller/PrimoController.php b/module/VuFind/src/VuFind/Controller/PrimoController.php
index af967111e14..fef72e92e34 100644
--- a/module/VuFind/src/VuFind/Controller/PrimoController.php
+++ b/module/VuFind/src/VuFind/Controller/PrimoController.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Primo Central Controller
diff --git a/module/VuFind/src/VuFind/Controller/PrimorecordController.php b/module/VuFind/src/VuFind/Controller/PrimorecordController.php
index b4ed476697e..98c80f5b0c9 100644
--- a/module/VuFind/src/VuFind/Controller/PrimorecordController.php
+++ b/module/VuFind/src/VuFind/Controller/PrimorecordController.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Primo Central Record Controller
diff --git a/module/VuFind/src/VuFind/Controller/QRCodeController.php b/module/VuFind/src/VuFind/Controller/QRCodeController.php
index 81766dab4e9..f6255e679d8 100644
--- a/module/VuFind/src/VuFind/Controller/QRCodeController.php
+++ b/module/VuFind/src/VuFind/Controller/QRCodeController.php
@@ -41,7 +41,7 @@ use VuFind\Session\Settings as SessionSettings;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Page
  */
-class QRCodeController extends \Zend\Mvc\Controller\AbstractActionController
+class QRCodeController extends \Laminas\Mvc\Controller\AbstractActionController
 {
     /**
      * QR Code loader
@@ -72,7 +72,7 @@ class QRCodeController extends \Zend\Mvc\Controller\AbstractActionController
     /**
      * Send QRCode data for display in the view
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function showAction()
     {
@@ -89,7 +89,7 @@ class QRCodeController extends \Zend\Mvc\Controller\AbstractActionController
     /**
      * Return the default 'qrcode not found' information
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function unavailableAction()
     {
@@ -102,7 +102,7 @@ class QRCodeController extends \Zend\Mvc\Controller\AbstractActionController
      * Support method -- update the view to display the qrcode currently found in the
      * \VuFind\QRCode\Loader.
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     protected function displayQRCode()
     {
diff --git a/module/VuFind/src/VuFind/Controller/QRCodeControllerFactory.php b/module/VuFind/src/VuFind/Controller/QRCodeControllerFactory.php
index 16a196dd642..f65935f05e9 100644
--- a/module/VuFind/src/VuFind/Controller/QRCodeControllerFactory.php
+++ b/module/VuFind/src/VuFind/Controller/QRCodeControllerFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Controller;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * QRCode controller factory.
diff --git a/module/VuFind/src/VuFind/Controller/RecordController.php b/module/VuFind/src/VuFind/Controller/RecordController.php
index f7c7ffa5a08..0c3f650d4cf 100644
--- a/module/VuFind/src/VuFind/Controller/RecordController.php
+++ b/module/VuFind/src/VuFind/Controller/RecordController.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Controller;
 
-use Zend\Config\Config;
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\Config\Config;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Record Controller
diff --git a/module/VuFind/src/VuFind/Controller/RecordsController.php b/module/VuFind/src/VuFind/Controller/RecordsController.php
index 7f6b09114cf..56f411d3d0c 100644
--- a/module/VuFind/src/VuFind/Controller/RecordsController.php
+++ b/module/VuFind/src/VuFind/Controller/RecordsController.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Records Controller
diff --git a/module/VuFind/src/VuFind/Controller/Search2Controller.php b/module/VuFind/src/VuFind/Controller/Search2Controller.php
index 00a3d40935d..91d1ec54ffb 100644
--- a/module/VuFind/src/VuFind/Controller/Search2Controller.php
+++ b/module/VuFind/src/VuFind/Controller/Search2Controller.php
@@ -28,7 +28,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Search2 Controller
diff --git a/module/VuFind/src/VuFind/Controller/Search2recordController.php b/module/VuFind/src/VuFind/Controller/Search2recordController.php
index d6198b5f55f..ef0bd34aa30 100644
--- a/module/VuFind/src/VuFind/Controller/Search2recordController.php
+++ b/module/VuFind/src/VuFind/Controller/Search2recordController.php
@@ -28,7 +28,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Search2 Record Controller
diff --git a/module/VuFind/src/VuFind/Controller/SearchController.php b/module/VuFind/src/VuFind/Controller/SearchController.php
index b3cf701f282..cfb09f7c3b5 100644
--- a/module/VuFind/src/VuFind/Controller/SearchController.php
+++ b/module/VuFind/src/VuFind/Controller/SearchController.php
@@ -341,7 +341,7 @@ class SearchController extends AbstractSolrSearch
      */
     public function reservessearchAction()
     {
-        $request = new \Zend\Stdlib\Parameters(
+        $request = new \Laminas\Stdlib\Parameters(
             $this->getRequest()->getQuery()->toArray()
             + $this->getRequest()->getPost()->toArray()
         );
@@ -444,7 +444,7 @@ class SearchController extends AbstractSolrSearch
     /**
      * Handle OpenSearch.
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function opensearchAction()
     {
@@ -471,7 +471,7 @@ class SearchController extends AbstractSolrSearch
      * Provide OpenSearch suggestions as specified at
      * http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions/1.0
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function suggestAction()
     {
diff --git a/module/VuFind/src/VuFind/Controller/ShibbolethLogoutNotificationController.php b/module/VuFind/src/VuFind/Controller/ShibbolethLogoutNotificationController.php
index d244ad85450..e45b142c2f6 100644
--- a/module/VuFind/src/VuFind/Controller/ShibbolethLogoutNotificationController.php
+++ b/module/VuFind/src/VuFind/Controller/ShibbolethLogoutNotificationController.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
-use Zend\Stdlib\ResponseInterface as Response;
+use Laminas\ServiceManager\ServiceLocatorInterface;
+use Laminas\Stdlib\ResponseInterface as Response;
 
 /**
  * Handles Shibboleth back-channel logout notifications.
@@ -77,7 +77,7 @@ class ShibbolethLogoutNotificationController extends AbstractBase
     public function postAction()
     {
         $this->disableSessionWrites();
-        $soapServer = new \Zend\Soap\Server(
+        $soapServer = new \Laminas\Soap\Server(
             'data://text/plain;base64,' . base64_encode($this->getWsdl())
         );
         $soapServer->setReturnResponse(true);
@@ -107,7 +107,7 @@ class ShibbolethLogoutNotificationController extends AbstractBase
             return;
         }
         $sessionManager = $this->serviceLocator
-            ->get(\Zend\Session\SessionManager::class);
+            ->get(\Laminas\Session\SessionManager::class);
         $handler = $sessionManager->getSaveHandler();
         $handler->destroy($row['session_id']);
     }
diff --git a/module/VuFind/src/VuFind/Controller/ShortlinkController.php b/module/VuFind/src/VuFind/Controller/ShortlinkController.php
index ef062c27e51..ac9fa6f33d1 100644
--- a/module/VuFind/src/VuFind/Controller/ShortlinkController.php
+++ b/module/VuFind/src/VuFind/Controller/ShortlinkController.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\Controller;
 
+use Laminas\Config\Config;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 use VuFind\UrlShortener\UrlShortenerInterface;
-use Zend\Config\Config;
-use Zend\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Short link controller
diff --git a/module/VuFind/src/VuFind/Controller/SummonController.php b/module/VuFind/src/VuFind/Controller/SummonController.php
index 8bb41797e2b..f32e7a2dffa 100644
--- a/module/VuFind/src/VuFind/Controller/SummonController.php
+++ b/module/VuFind/src/VuFind/Controller/SummonController.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Controller;
 
-use Zend\Mvc\MvcEvent;
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\Mvc\MvcEvent;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Summon Controller
diff --git a/module/VuFind/src/VuFind/Controller/SummonrecordController.php b/module/VuFind/src/VuFind/Controller/SummonrecordController.php
index 47b3f339c54..a311e57bc04 100644
--- a/module/VuFind/src/VuFind/Controller/SummonrecordController.php
+++ b/module/VuFind/src/VuFind/Controller/SummonrecordController.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Controller;
 
-use Zend\Mvc\MvcEvent;
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\Mvc\MvcEvent;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Summon Record Controller
diff --git a/module/VuFind/src/VuFind/Controller/TagController.php b/module/VuFind/src/VuFind/Controller/TagController.php
index e23e0b9390b..ba5318679a9 100644
--- a/module/VuFind/src/VuFind/Controller/TagController.php
+++ b/module/VuFind/src/VuFind/Controller/TagController.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Controller;
 
+use Laminas\ServiceManager\ServiceLocatorInterface;
 use VuFind\Exception\Forbidden as ForbiddenException;
-use Zend\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Tag Controller
diff --git a/module/VuFind/src/VuFind/Controller/UpgradeController.php b/module/VuFind/src/VuFind/Controller/UpgradeController.php
index 22b47e58433..56a8682f0cc 100644
--- a/module/VuFind/src/VuFind/Controller/UpgradeController.php
+++ b/module/VuFind/src/VuFind/Controller/UpgradeController.php
@@ -31,6 +31,10 @@ namespace VuFind\Controller;
 
 use ArrayObject;
 use Exception;
+use Laminas\Db\Adapter\Adapter;
+use Laminas\Mvc\MvcEvent;
+use Laminas\ServiceManager\ServiceLocatorInterface;
+use Laminas\Session\Container;
 use VuFind\Cache\Manager as CacheManager;
 use VuFind\Config\Locator as ConfigLocator;
 use VuFind\Config\Upgrade;
@@ -43,10 +47,6 @@ use VuFind\Date\Converter;
 use VuFind\Db\AdapterFactory;
 use VuFind\Exception\RecordMissing as RecordMissingException;
 use VuFind\Search\Results\PluginManager as ResultsManager;
-use Zend\Db\Adapter\Adapter;
-use Zend\Mvc\MvcEvent;
-use Zend\ServiceManager\ServiceLocatorInterface;
-use Zend\Session\Container;
 
 /**
  * Class controls VuFind upgrading.
@@ -342,8 +342,8 @@ class UpgradeController extends AbstractBase
     /**
      * Attempt to perform a MySQL upgrade; return either a string containing SQL
      * (if we are in "log SQL" mode), an empty string (if we are successful but
-     * not logging SQL) or a Zend Framework object representing forward/redirect
-     * (if we need to obtain user input).
+     * not logging SQL) or a Laminas object representing forward/redirect (if we
+     * need to obtain user input).
      *
      * @param Adapter $adapter Database adapter
      *
diff --git a/module/VuFind/src/VuFind/Controller/UpgradeControllerFactory.php b/module/VuFind/src/VuFind/Controller/UpgradeControllerFactory.php
index 572b9d0c345..ce1a3bb258e 100644
--- a/module/VuFind/src/VuFind/Controller/UpgradeControllerFactory.php
+++ b/module/VuFind/src/VuFind/Controller/UpgradeControllerFactory.php
@@ -61,8 +61,8 @@ class UpgradeControllerFactory extends AbstractBaseFactory
             throw new \Exception('Unexpected options sent to factory.');
         }
         $cookieManager = $container->get(\VuFind\Cookie\CookieManager::class);
-        $session = new \Zend\Session\Container(
-            'upgrade', $container->get(\Zend\Session\SessionManager::class)
+        $session = new \Laminas\Session\Container(
+            'upgrade', $container->get(\Laminas\Session\SessionManager::class)
         );
         return $this->applyPermissions(
             $container,
diff --git a/module/VuFind/src/VuFind/Controller/WebController.php b/module/VuFind/src/VuFind/Controller/WebController.php
index 59f5228f96a..8f7e634eded 100644
--- a/module/VuFind/src/VuFind/Controller/WebController.php
+++ b/module/VuFind/src/VuFind/Controller/WebController.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Web Controller
diff --git a/module/VuFind/src/VuFind/Controller/Widget/WidgetInterface.php b/module/VuFind/src/VuFind/Controller/Widget/WidgetInterface.php
index 0cf28d6e1fe..5083b2d8f02 100644
--- a/module/VuFind/src/VuFind/Controller/Widget/WidgetInterface.php
+++ b/module/VuFind/src/VuFind/Controller/Widget/WidgetInterface.php
@@ -28,7 +28,7 @@
  */
 namespace VuFind\Controller\Widget;
 
-use Zend\Stdlib\Parameters;
+use Laminas\Stdlib\Parameters;
 
 /**
  * Widget interface definition.
diff --git a/module/VuFind/src/VuFind/Controller/WorldcatController.php b/module/VuFind/src/VuFind/Controller/WorldcatController.php
index 9325bf7a510..0596b4598e7 100644
--- a/module/VuFind/src/VuFind/Controller/WorldcatController.php
+++ b/module/VuFind/src/VuFind/Controller/WorldcatController.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * WorldCat Controller
diff --git a/module/VuFind/src/VuFind/Controller/WorldcatrecordController.php b/module/VuFind/src/VuFind/Controller/WorldcatrecordController.php
index 2d20805a897..67a6d3ece01 100644
--- a/module/VuFind/src/VuFind/Controller/WorldcatrecordController.php
+++ b/module/VuFind/src/VuFind/Controller/WorldcatrecordController.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Controller;
 
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * WorldCat Record Controller
diff --git a/module/VuFind/src/VuFind/Cookie/Container.php b/module/VuFind/src/VuFind/Cookie/Container.php
index 2b5014e8513..be4b5c4be38 100644
--- a/module/VuFind/src/VuFind/Cookie/Container.php
+++ b/module/VuFind/src/VuFind/Cookie/Container.php
@@ -1,7 +1,7 @@
 <?php
 /**
  * Class for treating a set of cookies as an object (inspired by
- * \Zend\Session\Container).
+ * \Laminas\Session\Container).
  *
  * PHP version 7
  *
@@ -30,7 +30,7 @@ namespace VuFind\Cookie;
 
 /**
  * Class for treating a set of cookies as an object (inspired by
- * \Zend\Session\Container).
+ * \Laminas\Session\Container).
  *
  * @category VuFind
  * @package  Cookie
diff --git a/module/VuFind/src/VuFind/Cookie/CookieManagerFactory.php b/module/VuFind/src/VuFind/Cookie/CookieManagerFactory.php
index b3911fe8df7..08fe2cba934 100644
--- a/module/VuFind/src/VuFind/Cookie/CookieManagerFactory.php
+++ b/module/VuFind/src/VuFind/Cookie/CookieManagerFactory.php
@@ -28,8 +28,8 @@
 namespace VuFind\Cookie;
 
 use Interop\Container\ContainerInterface;
-use Zend\Console\Console;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\Console\Console;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Cookie Manager factory.
diff --git a/module/VuFind/src/VuFind/Cover/CachingProxy.php b/module/VuFind/src/VuFind/Cover/CachingProxy.php
index 403b55dd076..93bb2a7e86e 100644
--- a/module/VuFind/src/VuFind/Cover/CachingProxy.php
+++ b/module/VuFind/src/VuFind/Cover/CachingProxy.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Cover;
 
-use Zend\Http\Client;
-use Zend\Http\Response;
+use Laminas\Http\Client;
+use Laminas\Http\Response;
 
 /**
  * Caching Proxy for Cover Images
diff --git a/module/VuFind/src/VuFind/Cover/CachingProxyFactory.php b/module/VuFind/src/VuFind/Cover/CachingProxyFactory.php
index 49518c6c052..c21bed334e1 100644
--- a/module/VuFind/src/VuFind/Cover/CachingProxyFactory.php
+++ b/module/VuFind/src/VuFind/Cover/CachingProxyFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Cover;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Cover caching proxy factory.
diff --git a/module/VuFind/src/VuFind/Cover/GeneratorFactory.php b/module/VuFind/src/VuFind/Cover/GeneratorFactory.php
index 8bc3547c655..c89e0764cf5 100644
--- a/module/VuFind/src/VuFind/Cover/GeneratorFactory.php
+++ b/module/VuFind/src/VuFind/Cover/GeneratorFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Cover;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Cover generator factory.
diff --git a/module/VuFind/src/VuFind/Cover/Layer/PluginManager.php b/module/VuFind/src/VuFind/Cover/Layer/PluginManager.php
index 3500bec35b9..ae69c74443f 100644
--- a/module/VuFind/src/VuFind/Cover/Layer/PluginManager.php
+++ b/module/VuFind/src/VuFind/Cover/Layer/PluginManager.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Cover\Layer;
 
-use Zend\ServiceManager\Factory\InvokableFactory;
+use Laminas\ServiceManager\Factory\InvokableFactory;
 
 /**
  * Cover layer plugin manager
diff --git a/module/VuFind/src/VuFind/Cover/Loader.php b/module/VuFind/src/VuFind/Cover/Loader.php
index 1f195356cdd..2fcd9bc5630 100644
--- a/module/VuFind/src/VuFind/Cover/Loader.php
+++ b/module/VuFind/src/VuFind/Cover/Loader.php
@@ -69,7 +69,7 @@ class Loader extends \VuFind\ImageLoader
     /**
      * VuFind configuration settings
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
@@ -167,7 +167,7 @@ class Loader extends \VuFind\ImageLoader
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config     $config      VuFind configuration
+     * @param \Laminas\Config\Config  $config      VuFind configuration
      * @param ApiManager              $manager     Plugin manager for API handlers
      * @param \VuFindTheme\ThemeInfo  $theme       VuFind theme tools
      * @param \VuFindHttp\HttpService $httpService HTTP client factory
diff --git a/module/VuFind/src/VuFind/Cover/LoaderFactory.php b/module/VuFind/src/VuFind/Cover/LoaderFactory.php
index 8629f054486..902d087a7ca 100644
--- a/module/VuFind/src/VuFind/Cover/LoaderFactory.php
+++ b/module/VuFind/src/VuFind/Cover/LoaderFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Cover;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Cover loader factory.
diff --git a/module/VuFind/src/VuFind/Cover/RouterFactory.php b/module/VuFind/src/VuFind/Cover/RouterFactory.php
index 431a226cc6e..6b1ae96b81c 100644
--- a/module/VuFind/src/VuFind/Cover/RouterFactory.php
+++ b/module/VuFind/src/VuFind/Cover/RouterFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Cover;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Cover router factory.
diff --git a/module/VuFind/src/VuFind/Crypt/HMACFactory.php b/module/VuFind/src/VuFind/Crypt/HMACFactory.php
index 198ce0fd7f6..2c5d61a03be 100644
--- a/module/VuFind/src/VuFind/Crypt/HMACFactory.php
+++ b/module/VuFind/src/VuFind/Crypt/HMACFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Crypt;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Plugin Manager factory.
diff --git a/module/VuFind/src/VuFind/Db/AdapterFactory.php b/module/VuFind/src/VuFind/Db/AdapterFactory.php
index 79b7393706a..a90f1981882 100644
--- a/module/VuFind/src/VuFind/Db/AdapterFactory.php
+++ b/module/VuFind/src/VuFind/Db/AdapterFactory.php
@@ -1,7 +1,7 @@
 <?php
 /**
  * Database utility class. May be used as a service or as a standard
- * Zend Framework factory.
+ * Laminas factory.
  *
  * PHP version 7
  *
@@ -29,12 +29,12 @@
 namespace VuFind\Db;
 
 use Interop\Container\ContainerInterface;
-use Zend\Config\Config;
-use Zend\Db\Adapter\Adapter;
+use Laminas\Config\Config;
+use Laminas\Db\Adapter\Adapter;
 
 /**
  * Database utility class. May be used as a service or as a standard
- * Zend Framework factory.
+ * Laminas factory.
  *
  * @category VuFind
  * @package  Db
@@ -42,7 +42,7 @@ use Zend\Db\Adapter\Adapter;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Site
  */
-class AdapterFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class AdapterFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * VuFind configuration
@@ -88,7 +88,7 @@ class AdapterFactory implements \Zend\ServiceManager\Factory\FactoryInterface
     }
 
     /**
-     * Obtain a Zend\DB connection using standard VuFind configuration.
+     * Obtain a Laminas\DB connection using standard VuFind configuration.
      *
      * @param string $overrideUser Username override (leave null to use username
      * from config.ini)
@@ -129,7 +129,7 @@ class AdapterFactory implements \Zend\ServiceManager\Factory\FactoryInterface
     }
 
     /**
-     * Obtain a Zend\DB connection using an option array.
+     * Obtain a Laminas\DB connection using an option array.
      *
      * @param array $options Options for building adapter
      *
@@ -163,7 +163,7 @@ class AdapterFactory implements \Zend\ServiceManager\Factory\FactoryInterface
     }
 
     /**
-     * Obtain a Zend\DB connection using a connection string.
+     * Obtain a Laminas\DB connection using a connection string.
      *
      * @param string $connectionString Connection string of the form
      * [db_type]://[username]:[password]@[host]/[db_name]
diff --git a/module/VuFind/src/VuFind/Db/Row/AuthHash.php b/module/VuFind/src/VuFind/Db/Row/AuthHash.php
index 265338271e7..1a5c0e94906 100644
--- a/module/VuFind/src/VuFind/Db/Row/AuthHash.php
+++ b/module/VuFind/src/VuFind/Db/Row/AuthHash.php
@@ -44,7 +44,7 @@ class AuthHash extends RowGateway
     /**
      * Constructor
      *
-     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
+     * @param \Laminas\Db\Adapter\Adapter $adapter Database adapter
      */
     public function __construct($adapter)
     {
diff --git a/module/VuFind/src/VuFind/Db/Row/ChangeTracker.php b/module/VuFind/src/VuFind/Db/Row/ChangeTracker.php
index 06d08874197..6a164e1c260 100644
--- a/module/VuFind/src/VuFind/Db/Row/ChangeTracker.php
+++ b/module/VuFind/src/VuFind/Db/Row/ChangeTracker.php
@@ -41,7 +41,7 @@ class ChangeTracker extends RowGateway
     /**
      * Constructor
      *
-     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
+     * @param \Laminas\Db\Adapter\Adapter $adapter Database adapter
      */
     public function __construct($adapter)
     {
diff --git a/module/VuFind/src/VuFind/Db/Row/Comments.php b/module/VuFind/src/VuFind/Db/Row/Comments.php
index fb21cfc7f7d..725c587d97e 100644
--- a/module/VuFind/src/VuFind/Db/Row/Comments.php
+++ b/module/VuFind/src/VuFind/Db/Row/Comments.php
@@ -41,7 +41,7 @@ class Comments extends RowGateway
     /**
      * Constructor
      *
-     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
+     * @param \Laminas\Db\Adapter\Adapter $adapter Database adapter
      */
     public function __construct($adapter)
     {
diff --git a/module/VuFind/src/VuFind/Db/Row/ExternalSession.php b/module/VuFind/src/VuFind/Db/Row/ExternalSession.php
index 41cf4e613e2..7520d2ad28a 100644
--- a/module/VuFind/src/VuFind/Db/Row/ExternalSession.php
+++ b/module/VuFind/src/VuFind/Db/Row/ExternalSession.php
@@ -44,7 +44,7 @@ class ExternalSession extends RowGateway
     /**
      * Constructor
      *
-     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
+     * @param \Laminas\Db\Adapter\Adapter $adapter Database adapter
      */
     public function __construct($adapter)
     {
diff --git a/module/VuFind/src/VuFind/Db/Row/OaiResumption.php b/module/VuFind/src/VuFind/Db/Row/OaiResumption.php
index 95513e51607..557df4eed96 100644
--- a/module/VuFind/src/VuFind/Db/Row/OaiResumption.php
+++ b/module/VuFind/src/VuFind/Db/Row/OaiResumption.php
@@ -41,7 +41,7 @@ class OaiResumption extends RowGateway
     /**
      * Constructor
      *
-     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
+     * @param \Laminas\Db\Adapter\Adapter $adapter Database adapter
      */
     public function __construct($adapter)
     {
diff --git a/module/VuFind/src/VuFind/Db/Row/PrivateUser.php b/module/VuFind/src/VuFind/Db/Row/PrivateUser.php
index 6fe181ff199..fabbca44ec6 100644
--- a/module/VuFind/src/VuFind/Db/Row/PrivateUser.php
+++ b/module/VuFind/src/VuFind/Db/Row/PrivateUser.php
@@ -41,7 +41,7 @@ class PrivateUser extends User
     /**
      * Session container for account information.
      *
-     * @var \Zend\Session\Container
+     * @var \Laminas\Session\Container
      */
     protected $session = null;
 
@@ -87,11 +87,11 @@ class PrivateUser extends User
     /**
      * Set session container
      *
-     * @param \Zend\Session\Container $session Session container
+     * @param \Laminas\Session\Container $session Session container
      *
      * @return void
      */
-    public function setSession(\Zend\Session\Container $session)
+    public function setSession(\Laminas\Session\Container $session)
     {
         $this->session = $session;
     }
diff --git a/module/VuFind/src/VuFind/Db/Row/Record.php b/module/VuFind/src/VuFind/Db/Row/Record.php
index 813723a60fc..1be05661dd7 100644
--- a/module/VuFind/src/VuFind/Db/Row/Record.php
+++ b/module/VuFind/src/VuFind/Db/Row/Record.php
@@ -41,7 +41,7 @@ class Record extends RowGateway
     /**
      * Constructor
      *
-     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
+     * @param \Laminas\Db\Adapter\Adapter $adapter Database adapter
      */
     public function __construct($adapter)
     {
diff --git a/module/VuFind/src/VuFind/Db/Row/Resource.php b/module/VuFind/src/VuFind/Db/Row/Resource.php
index d0f14a80da8..86824d23040 100644
--- a/module/VuFind/src/VuFind/Db/Row/Resource.php
+++ b/module/VuFind/src/VuFind/Db/Row/Resource.php
@@ -46,7 +46,7 @@ class Resource extends RowGateway implements \VuFind\Db\Table\DbTableAwareInterf
     /**
      * Constructor
      *
-     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
+     * @param \Laminas\Db\Adapter\Adapter $adapter Database adapter
      */
     public function __construct($adapter)
     {
diff --git a/module/VuFind/src/VuFind/Db/Row/ResourceTags.php b/module/VuFind/src/VuFind/Db/Row/ResourceTags.php
index 8e7599ec43b..2d44de7bdf8 100644
--- a/module/VuFind/src/VuFind/Db/Row/ResourceTags.php
+++ b/module/VuFind/src/VuFind/Db/Row/ResourceTags.php
@@ -41,7 +41,7 @@ class ResourceTags extends RowGateway
     /**
      * Constructor
      *
-     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
+     * @param \Laminas\Db\Adapter\Adapter $adapter Database adapter
      */
     public function __construct($adapter)
     {
diff --git a/module/VuFind/src/VuFind/Db/Row/RowGateway.php b/module/VuFind/src/VuFind/Db/Row/RowGateway.php
index 5dfb63b3d92..a2ab4149e1b 100644
--- a/module/VuFind/src/VuFind/Db/Row/RowGateway.php
+++ b/module/VuFind/src/VuFind/Db/Row/RowGateway.php
@@ -36,7 +36,7 @@ namespace VuFind\Db\Row;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Site
  */
-class RowGateway extends \Zend\Db\RowGateway\RowGateway
+class RowGateway extends \Laminas\Db\RowGateway\RowGateway
 {
     /**
      * Retrieve primary key information.
diff --git a/module/VuFind/src/VuFind/Db/Row/RowGatewayFactory.php b/module/VuFind/src/VuFind/Db/Row/RowGatewayFactory.php
index 17054918635..ea7fb2fd075 100644
--- a/module/VuFind/src/VuFind/Db/Row/RowGatewayFactory.php
+++ b/module/VuFind/src/VuFind/Db/Row/RowGatewayFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class RowGatewayFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class RowGatewayFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
@@ -57,7 +57,7 @@ class RowGatewayFactory implements \Zend\ServiceManager\Factory\FactoryInterface
     public function __invoke(ContainerInterface $container, $requestedName,
         array $options = null
     ) {
-        $adapter = $container->get(\Zend\Db\Adapter\Adapter::class);
+        $adapter = $container->get(\Laminas\Db\Adapter\Adapter::class);
         return new $requestedName($adapter, ...($options !== null ? $options : []));
     }
 }
diff --git a/module/VuFind/src/VuFind/Db/Row/Search.php b/module/VuFind/src/VuFind/Db/Row/Search.php
index f5d92c40d34..c2ba77273e5 100644
--- a/module/VuFind/src/VuFind/Db/Row/Search.php
+++ b/module/VuFind/src/VuFind/Db/Row/Search.php
@@ -43,7 +43,7 @@ class Search extends RowGateway
     /**
      * Constructor
      *
-     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
+     * @param \Laminas\Db\Adapter\Adapter $adapter Database adapter
      */
     public function __construct($adapter)
     {
diff --git a/module/VuFind/src/VuFind/Db/Row/Session.php b/module/VuFind/src/VuFind/Db/Row/Session.php
index 6fac690f2f9..10b2b48e460 100644
--- a/module/VuFind/src/VuFind/Db/Row/Session.php
+++ b/module/VuFind/src/VuFind/Db/Row/Session.php
@@ -41,7 +41,7 @@ class Session extends RowGateway
     /**
      * Constructor
      *
-     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
+     * @param \Laminas\Db\Adapter\Adapter $adapter Database adapter
      */
     public function __construct($adapter)
     {
diff --git a/module/VuFind/src/VuFind/Db/Row/Shortlinks.php b/module/VuFind/src/VuFind/Db/Row/Shortlinks.php
index 36345f9876b..849d8b699b5 100644
--- a/module/VuFind/src/VuFind/Db/Row/Shortlinks.php
+++ b/module/VuFind/src/VuFind/Db/Row/Shortlinks.php
@@ -41,7 +41,7 @@ class Shortlinks extends RowGateway
     /**
      * Constructor
      *
-     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
+     * @param \Laminas\Db\Adapter\Adapter $adapter Database adapter
      */
     public function __construct($adapter)
     {
diff --git a/module/VuFind/src/VuFind/Db/Row/Tags.php b/module/VuFind/src/VuFind/Db/Row/Tags.php
index 34151fc9e91..897653c9787 100644
--- a/module/VuFind/src/VuFind/Db/Row/Tags.php
+++ b/module/VuFind/src/VuFind/Db/Row/Tags.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Db\Row;
 
+use Laminas\Db\Sql\Expression;
 use VuFind\Db\Table\Resource as ResourceTable;
-use Zend\Db\Sql\Expression;
 
 /**
  * Row Definition for tags
@@ -46,7 +46,7 @@ class Tags extends RowGateway implements \VuFind\Db\Table\DbTableAwareInterface
     /**
      * Constructor
      *
-     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
+     * @param \Laminas\Db\Adapter\Adapter $adapter Database adapter
      */
     public function __construct($adapter)
     {
diff --git a/module/VuFind/src/VuFind/Db/Row/User.php b/module/VuFind/src/VuFind/Db/Row/User.php
index d9bd42085f4..f1898a49514 100644
--- a/module/VuFind/src/VuFind/Db/Row/User.php
+++ b/module/VuFind/src/VuFind/Db/Row/User.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\Db\Row;
 
-use Zend\Crypt\BlockCipher as BlockCipher;
-use Zend\Crypt\Symmetric\Openssl;
-use Zend\Db\Sql\Expression;
+use Laminas\Crypt\BlockCipher as BlockCipher;
+use Laminas\Crypt\Symmetric\Openssl;
+use Laminas\Db\Sql\Expression;
 
 /**
  * Row Definition for user
@@ -62,14 +62,14 @@ class User extends RowGateway implements \VuFind\Db\Table\DbTableAwareInterface,
     /**
      * VuFind configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config = null;
 
     /**
      * Constructor
      *
-     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
+     * @param \Laminas\Db\Adapter\Adapter $adapter Database adapter
      */
     public function __construct($adapter)
     {
@@ -79,11 +79,11 @@ class User extends RowGateway implements \VuFind\Db\Table\DbTableAwareInterface,
     /**
      * Configuration setter
      *
-     * @param \Zend\Config\Config $config VuFind configuration
+     * @param \Laminas\Config\Config $config VuFind configuration
      *
      * @return void
      */
-    public function setConfig(\Zend\Config\Config $config)
+    public function setConfig(\Laminas\Config\Config $config)
     {
         $this->config = $config;
     }
@@ -266,7 +266,7 @@ class User extends RowGateway implements \VuFind\Db\Table\DbTableAwareInterface,
      * @param string $source     Filter for tags tied to a specific record source.
      * (null for no filter).
      *
-     * @return \Zend\Db\ResultSet\AbstractResultSet
+     * @return \Laminas\Db\ResultSet\AbstractResultSet
      */
     public function getTags($resourceId = null, $listId = null, $source = null)
     {
@@ -306,7 +306,7 @@ class User extends RowGateway implements \VuFind\Db\Table\DbTableAwareInterface,
     /**
      * Get all of the lists associated with this user.
      *
-     * @return \Zend\Db\ResultSet\AbstractResultSet
+     * @return \Laminas\Db\ResultSet\AbstractResultSet
      */
     public function getLists()
     {
@@ -429,13 +429,13 @@ class User extends RowGateway implements \VuFind\Db\Table\DbTableAwareInterface,
     /**
      * Get all library cards associated with the user.
      *
-     * @return \Zend\Db\ResultSet\AbstractResultSet
+     * @return \Laminas\Db\ResultSet\AbstractResultSet
      * @throws \VuFind\Exception\LibraryCard
      */
     public function getLibraryCards()
     {
         if (!$this->libraryCardsEnabled()) {
-            return new \Zend\Db\ResultSet\ResultSet();
+            return new \Laminas\Db\ResultSet\ResultSet();
         }
         $userCard = $this->getDbTable('UserCard');
         return $userCard->select(['user_id' => $this->id]);
diff --git a/module/VuFind/src/VuFind/Db/Row/UserCard.php b/module/VuFind/src/VuFind/Db/Row/UserCard.php
index bbdff2cfeb2..a89fe804a5f 100644
--- a/module/VuFind/src/VuFind/Db/Row/UserCard.php
+++ b/module/VuFind/src/VuFind/Db/Row/UserCard.php
@@ -41,7 +41,7 @@ class UserCard extends RowGateway
     /**
      * Constructor
      *
-     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
+     * @param \Laminas\Db\Adapter\Adapter $adapter Database adapter
      */
     public function __construct($adapter)
     {
diff --git a/module/VuFind/src/VuFind/Db/Row/UserFactory.php b/module/VuFind/src/VuFind/Db/Row/UserFactory.php
index 4ebcf82037a..6c9523ec4aa 100644
--- a/module/VuFind/src/VuFind/Db/Row/UserFactory.php
+++ b/module/VuFind/src/VuFind/Db/Row/UserFactory.php
@@ -75,8 +75,9 @@ class UserFactory extends RowGatewayFactory
         $prototype = parent::__invoke($container, $rowClass, $options);
         $prototype->setConfig($config);
         if ($privacy) {
-            $sessionManager = $container->get(\Zend\Session\SessionManager::class);
-            $session = new \Zend\Session\Container('Account', $sessionManager);
+            $sessionManager = $container
+                ->get(\Laminas\Session\SessionManager::class);
+            $session = new \Laminas\Session\Container('Account', $sessionManager);
             $prototype->setSession($session);
         }
         return $prototype;
diff --git a/module/VuFind/src/VuFind/Db/Row/UserList.php b/module/VuFind/src/VuFind/Db/Row/UserList.php
index 0f94a88f19b..508ef3b2669 100644
--- a/module/VuFind/src/VuFind/Db/Row/UserList.php
+++ b/module/VuFind/src/VuFind/Db/Row/UserList.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\Db\Row;
 
+use Laminas\Session\Container;
 use VuFind\Exception\ListPermission as ListPermissionException;
 use VuFind\Exception\MissingField as MissingFieldException;
-use Zend\Session\Container;
 
 /**
  * Row Definition for user_list
@@ -54,8 +54,8 @@ class UserList extends RowGateway implements \VuFind\Db\Table\DbTableAwareInterf
     /**
      * Constructor
      *
-     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
-     * @param Container                $session Session container
+     * @param \Laminas\Db\Adapter\Adapter $adapter Database adapter
+     * @param Container                   $session Session container
      */
     public function __construct($adapter, Container $session = null)
     {
@@ -97,8 +97,8 @@ class UserList extends RowGateway implements \VuFind\Db\Table\DbTableAwareInterf
      * Update and save the list object using a request object -- useful for
      * sharing form processing between multiple actions.
      *
-     * @param \VuFind\Db\Row\User|bool $user    Logged-in user (false if none)
-     * @param \Zend\Stdlib\Parameters  $request Request to process
+     * @param \VuFind\Db\Row\User|bool   $user    Logged-in user (false if none)
+     * @param \Laminas\Stdlib\Parameters $request Request to process
      *
      * @return int ID of newly created row
      * @throws ListPermissionException
diff --git a/module/VuFind/src/VuFind/Db/Row/UserListFactory.php b/module/VuFind/src/VuFind/Db/Row/UserListFactory.php
index 6965f6c7f10..949287cce08 100644
--- a/module/VuFind/src/VuFind/Db/Row/UserListFactory.php
+++ b/module/VuFind/src/VuFind/Db/Row/UserListFactory.php
@@ -60,8 +60,8 @@ class UserListFactory extends RowGatewayFactory
         if (!empty($options)) {
             throw new \Exception('Unexpected options sent to factory!');
         }
-        $sessionManager = $container->get(\Zend\Session\SessionManager::class);
-        $session = new \Zend\Session\Container('List', $sessionManager);
+        $sessionManager = $container->get(\Laminas\Session\SessionManager::class);
+        $session = new \Laminas\Session\Container('List', $sessionManager);
         return parent::__invoke($container, $requestedName, [$session]);
     }
 }
diff --git a/module/VuFind/src/VuFind/Db/Row/UserResource.php b/module/VuFind/src/VuFind/Db/Row/UserResource.php
index 0a2916a1a44..01879c2f8fc 100644
--- a/module/VuFind/src/VuFind/Db/Row/UserResource.php
+++ b/module/VuFind/src/VuFind/Db/Row/UserResource.php
@@ -41,7 +41,7 @@ class UserResource extends RowGateway
     /**
      * Constructor
      *
-     * @param \Zend\Db\Adapter\Adapter $adapter Database adapter
+     * @param \Laminas\Db\Adapter\Adapter $adapter Database adapter
      */
     public function __construct($adapter)
     {
diff --git a/module/VuFind/src/VuFind/Db/Table/AuthHash.php b/module/VuFind/src/VuFind/Db/Table/AuthHash.php
index 0918b0aa60a..a8c7935b007 100644
--- a/module/VuFind/src/VuFind/Db/Table/AuthHash.php
+++ b/module/VuFind/src/VuFind/Db/Table/AuthHash.php
@@ -29,8 +29,8 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Db\Adapter\Adapter;
 use VuFind\Db\Row\RowGateway;
-use Zend\Db\Adapter\Adapter;
 
 /**
  * Table Definition for auth_hash
@@ -53,7 +53,7 @@ class AuthHash extends Gateway
      *
      * @param Adapter       $adapter Database adapter
      * @param PluginManager $tm      Table manager
-     * @param array         $cfg     Zend Framework configuration
+     * @param array         $cfg     Laminas configuration
      * @param RowGateway    $rowObj  Row prototype object (null for default)
      * @param string        $table   Name of database table to interface with
      */
diff --git a/module/VuFind/src/VuFind/Db/Table/ChangeTracker.php b/module/VuFind/src/VuFind/Db/Table/ChangeTracker.php
index dc36e2fedb6..8b7caeba274 100644
--- a/module/VuFind/src/VuFind/Db/Table/ChangeTracker.php
+++ b/module/VuFind/src/VuFind/Db/Table/ChangeTracker.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Db\Adapter\Adapter;
+use Laminas\Db\Sql\Expression;
 use VuFind\Db\Row\RowGateway;
-use Zend\Db\Adapter\Adapter;
-use Zend\Db\Sql\Expression;
 
 /**
  * Table Definition for change_tracker
@@ -54,7 +54,7 @@ class ChangeTracker extends Gateway
      *
      * @param Adapter       $adapter Database adapter
      * @param PluginManager $tm      Table manager
-     * @param array         $cfg     Zend Framework configuration
+     * @param array         $cfg     Laminas configuration
      * @param RowGateway    $rowObj  Row prototype object (null for default)
      * @param string        $table   Name of database table to interface with
      */
@@ -120,7 +120,7 @@ class ChangeTracker extends Gateway
      * @param string $from  The beginning date of the range to search.
      * @param string $until The end date of the range to search.
      *
-     * @return \Zend\Db\ResultSet\AbstractResultSet
+     * @return \Laminas\Db\ResultSet\AbstractResultSet
      */
     public function retrieveDeletedCount($core, $from, $until)
     {
@@ -143,7 +143,7 @@ class ChangeTracker extends Gateway
      * @param int    $offset Record number to retrieve first.
      * @param int    $limit  Retrieval limit (null for no limit)
      *
-     * @return \Zend\Db\ResultSet\AbstractResultSet
+     * @return \Laminas\Db\ResultSet\AbstractResultSet
      */
     public function retrieveDeleted($core, $from, $until, $offset = 0,
         $limit = null
diff --git a/module/VuFind/src/VuFind/Db/Table/Comments.php b/module/VuFind/src/VuFind/Db/Table/Comments.php
index d3fea98739b..c1f17454cb7 100644
--- a/module/VuFind/src/VuFind/Db/Table/Comments.php
+++ b/module/VuFind/src/VuFind/Db/Table/Comments.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Db\Adapter\Adapter;
+use Laminas\Db\Sql\Expression;
 use VuFind\Db\Row\RowGateway;
-use Zend\Db\Adapter\Adapter;
-use Zend\Db\Sql\Expression;
 
 /**
  * Table Definition for comments
@@ -47,7 +47,7 @@ class Comments extends Gateway
      *
      * @param Adapter       $adapter Database adapter
      * @param PluginManager $tm      Table manager
-     * @param array         $cfg     Zend Framework configuration
+     * @param array         $cfg     Laminas configuration
      * @param RowGateway    $rowObj  Row prototype object (null for default)
      * @param string        $table   Name of database table to interface with
      */
@@ -63,7 +63,7 @@ class Comments extends Gateway
      * @param string $id     Record ID to look up
      * @param string $source Source of record to look up
      *
-     * @return array|\Zend\Db\ResultSet\AbstractResultSet
+     * @return array|\Laminas\Db\ResultSet\AbstractResultSet
      */
     public function getForResource($id, $source = DEFAULT_SEARCH_BACKEND)
     {
diff --git a/module/VuFind/src/VuFind/Db/Table/ExpirationTrait.php b/module/VuFind/src/VuFind/Db/Table/ExpirationTrait.php
index 45d6d38c468..f5d4a42bbdb 100644
--- a/module/VuFind/src/VuFind/Db/Table/ExpirationTrait.php
+++ b/module/VuFind/src/VuFind/Db/Table/ExpirationTrait.php
@@ -29,8 +29,8 @@
  */
 namespace VuFind\Db\Table;
 
-use Zend\Db\Sql\Expression;
-use Zend\Db\Sql\Select;
+use Laminas\Db\Sql\Expression;
+use Laminas\Db\Sql\Select;
 
 /**
  * Trait for tables that support expiration
diff --git a/module/VuFind/src/VuFind/Db/Table/ExternalSession.php b/module/VuFind/src/VuFind/Db/Table/ExternalSession.php
index 74ad485f677..da5d09aa909 100644
--- a/module/VuFind/src/VuFind/Db/Table/ExternalSession.php
+++ b/module/VuFind/src/VuFind/Db/Table/ExternalSession.php
@@ -29,8 +29,8 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Db\Adapter\Adapter;
 use VuFind\Db\Row\RowGateway;
-use Zend\Db\Adapter\Adapter;
 
 /**
  * Table Definition for external_session
@@ -51,7 +51,7 @@ class ExternalSession extends Gateway
      *
      * @param Adapter       $adapter Database adapter
      * @param PluginManager $tm      Table manager
-     * @param array         $cfg     Zend Framework configuration
+     * @param array         $cfg     Laminas configuration
      * @param RowGateway    $rowObj  Row prototype object (null for default)
      * @param string        $table   Name of database table to interface with
      */
diff --git a/module/VuFind/src/VuFind/Db/Table/Gateway.php b/module/VuFind/src/VuFind/Db/Table/Gateway.php
index 402327cf718..fafe2852672 100644
--- a/module/VuFind/src/VuFind/Db/Table/Gateway.php
+++ b/module/VuFind/src/VuFind/Db/Table/Gateway.php
@@ -27,10 +27,10 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Db\Adapter\Adapter;
+use Laminas\Db\TableGateway\AbstractTableGateway;
+use Laminas\Db\TableGateway\Feature;
 use VuFind\Db\Row\RowGateway;
-use Zend\Db\Adapter\Adapter;
-use Zend\Db\TableGateway\AbstractTableGateway;
-use Zend\Db\TableGateway\Feature;
 
 /**
  * Generic VuFind table gateway.
@@ -55,7 +55,7 @@ class Gateway extends AbstractTableGateway
      *
      * @param Adapter       $adapter Database adapter
      * @param PluginManager $tm      Table manager
-     * @param array         $cfg     Zend Framework configuration
+     * @param array         $cfg     Laminas configuration
      * @param RowGateway    $rowObj  Row prototype object (null for default)
      * @param string        $table   Name of database table to interface with
      */
@@ -78,7 +78,7 @@ class Gateway extends AbstractTableGateway
     /**
      * Initialize features
      *
-     * @param array $cfg Zend Framework configuration
+     * @param array $cfg Laminas configuration
      *
      * @return void
      */
@@ -117,7 +117,7 @@ class Gateway extends AbstractTableGateway
         ) {
             // Do we have a sequence feature?
             $feature = $this->featureSet->getFeatureByClassName(
-                'Zend\Db\TableGateway\Feature\SequenceFeature'
+                'Laminas\Db\TableGateway\Feature\SequenceFeature'
             );
             if ($feature) {
                 $key = $obj->getPrimaryKeyColumn();
diff --git a/module/VuFind/src/VuFind/Db/Table/GatewayFactory.php b/module/VuFind/src/VuFind/Db/Table/GatewayFactory.php
index a483b2ca3e2..f49773130e1 100644
--- a/module/VuFind/src/VuFind/Db/Table/GatewayFactory.php
+++ b/module/VuFind/src/VuFind/Db/Table/GatewayFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class GatewayFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class GatewayFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Return row prototype object (null if unavailable)
@@ -73,7 +73,7 @@ class GatewayFactory implements \Zend\ServiceManager\Factory\FactoryInterface
     public function __invoke(ContainerInterface $container, $requestedName,
         array $options = null
     ) {
-        $adapter = $container->get(\Zend\Db\Adapter\Adapter::class);
+        $adapter = $container->get(\Laminas\Db\Adapter\Adapter::class);
         $tm = $container->get(\VuFind\Db\Table\PluginManager::class);
         $config = $container->get('config');
         $rowPrototype = $this->getRowPrototype($container, $requestedName);
diff --git a/module/VuFind/src/VuFind/Db/Table/OaiResumption.php b/module/VuFind/src/VuFind/Db/Table/OaiResumption.php
index e8a962a7362..cc995a2014c 100644
--- a/module/VuFind/src/VuFind/Db/Table/OaiResumption.php
+++ b/module/VuFind/src/VuFind/Db/Table/OaiResumption.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Db\Adapter\Adapter;
 use VuFind\Db\Row\RowGateway;
-use Zend\Db\Adapter\Adapter;
 
 /**
  * Table Definition for oai_resumption
@@ -46,7 +46,7 @@ class OaiResumption extends Gateway
      *
      * @param Adapter       $adapter Database adapter
      * @param PluginManager $tm      Table manager
-     * @param array         $cfg     Zend Framework configuration
+     * @param array         $cfg     Laminas configuration
      * @param RowGateway    $rowObj  Row prototype object (null for default)
      * @param string        $table   Name of database table to interface with
      */
diff --git a/module/VuFind/src/VuFind/Db/Table/Record.php b/module/VuFind/src/VuFind/Db/Table/Record.php
index 67f91cd0885..68badcf9bcc 100644
--- a/module/VuFind/src/VuFind/Db/Table/Record.php
+++ b/module/VuFind/src/VuFind/Db/Table/Record.php
@@ -30,10 +30,10 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Db\Adapter\Adapter;
+use Laminas\Db\Sql\Predicate\Expression;
+use Laminas\Db\Sql\Where;
 use VuFind\Db\Row\RowGateway;
-use Zend\Db\Adapter\Adapter;
-use Zend\Db\Sql\Predicate\Expression;
-use Zend\Db\Sql\Where;
 
 /**
  * Table Definition for record
@@ -52,7 +52,7 @@ class Record extends Gateway
      *
      * @param Adapter       $adapter Database adapter
      * @param PluginManager $tm      Table manager
-     * @param array         $cfg     Zend Framework configuration
+     * @param array         $cfg     Laminas configuration
      * @param RowGateway    $rowObj  Row prototype object (null for default)
      * @param string        $table   Name of database table to interface with
      */
diff --git a/module/VuFind/src/VuFind/Db/Table/Resource.php b/module/VuFind/src/VuFind/Db/Table/Resource.php
index fd28573bd33..219938b0ece 100644
--- a/module/VuFind/src/VuFind/Db/Table/Resource.php
+++ b/module/VuFind/src/VuFind/Db/Table/Resource.php
@@ -27,11 +27,11 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Db\Adapter\Adapter;
+use Laminas\Db\Sql\Expression;
 use VuFind\Date\Converter as DateConverter;
 use VuFind\Db\Row\RowGateway;
 use VuFind\Record\Loader;
-use Zend\Db\Adapter\Adapter;
-use Zend\Db\Sql\Expression;
 
 /**
  * Table Definition for resource
@@ -63,7 +63,7 @@ class Resource extends Gateway
      *
      * @param Adapter       $adapter   Database adapter
      * @param PluginManager $tm        Table manager
-     * @param array         $cfg       Zend Framework configuration
+     * @param array         $cfg       Laminas configuration
      * @param RowGateway    $rowObj    Row prototype object (null for default)
      * @param DateConverter $converter Date converter
      * @param Loader        $loader    Record loader
@@ -84,8 +84,7 @@ class Resource extends Gateway
      * @param string                            $id     Record ID to look up
      * @param string                            $source Source of record to look up
      * @param bool                              $create If true, create the row if it
-     * does not
-     * yet exist.
+     * does not yet exist.
      * @param \VuFind\RecordDriver\AbstractBase $driver A record driver for the
      * resource being created (optional -- improves efficiency if provided, but will
      * be auto-loaded as needed if left null).
@@ -128,7 +127,7 @@ class Resource extends Gateway
      * @param array  $ids    Array of IDs
      * @param string $source Source of records to look up
      *
-     * @return \Zend\Db\ResultSet\AbstractResultSet
+     * @return \Laminas\Db\ResultSet\AbstractResultSet
      */
     public function findResources($ids, $source = DEFAULT_SEARCH_BACKEND)
     {
@@ -150,7 +149,7 @@ class Resource extends Gateway
      * @param int    $offset Offset for results
      * @param int    $limit  Limit for results (null for none)
      *
-     * @return \Zend\Db\ResultSet\AbstractResultSet
+     * @return \Laminas\Db\ResultSet\AbstractResultSet
      */
     public function getFavorites($user, $list = null, $tags = [],
         $sort = null, $offset = 0, $limit = null
@@ -210,7 +209,7 @@ class Resource extends Gateway
      * Get a set of records that do not have metadata stored in the resource
      * table.
      *
-     * @return \Zend\Db\ResultSet\AbstractResultSet
+     * @return \Laminas\Db\ResultSet\AbstractResultSet
      */
     public function findMissingMetadata()
     {
@@ -273,10 +272,10 @@ class Resource extends Gateway
     /**
      * Apply a sort parameter to a query on the resource table.
      *
-     * @param \Zend\Db\Sql\Select $query Query to modify
-     * @param string              $sort  Field to use for sorting (may include 'desc'
-     * qualifier)
-     * @param string              $alias Alias to the resource table (defaults to
+     * @param \Laminas\Db\Sql\Select $query Query to modify
+     * @param string                 $sort  Field to use for sorting (may include
+     * 'desc' qualifier)
+     * @param string                 $alias Alias to the resource table (defaults to
      * 'resource')
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Db/Table/ResourceTags.php b/module/VuFind/src/VuFind/Db/Table/ResourceTags.php
index 21b8883402f..8d73baaa507 100644
--- a/module/VuFind/src/VuFind/Db/Table/ResourceTags.php
+++ b/module/VuFind/src/VuFind/Db/Table/ResourceTags.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Db\Adapter\Adapter;
+use Laminas\Db\Sql\Expression;
 use VuFind\Db\Row\RowGateway;
-use Zend\Db\Adapter\Adapter;
-use Zend\Db\Sql\Expression;
 
 /**
  * Table Definition for resource_tags
@@ -54,7 +54,7 @@ class ResourceTags extends Gateway
      *
      * @param Adapter       $adapter       Database adapter
      * @param PluginManager $tm            Table manager
-     * @param array         $cfg           Zend Framework configuration
+     * @param array         $cfg           Laminas configuration
      * @param RowGateway    $rowObj        Row prototype object (null for default)
      * @param bool          $caseSensitive Are tags case sensitive?
      * @param string        $table         Name of database table to interface with
@@ -156,7 +156,7 @@ class ResourceTags extends Gateway
      * @param string $userId ID of user owning favorite list
      * @param string $listId ID of list to retrieve (null for all favorites)
      *
-     * @return \Zend\Db\ResultSet\AbstractResultSet
+     * @return \Laminas\Db\ResultSet\AbstractResultSet
      */
     public function getResourcesForTag($tag, $userId, $listId = null)
     {
@@ -320,7 +320,7 @@ class ResourceTags extends Gateway
      * @param string $resourceId ID of the resource
      * @param string $tagId      ID of the tag
      *
-     * @return \Zend\Db\ResultSet\AbstractResultSet
+     * @return \Laminas\Db\ResultSet\AbstractResultSet
      */
     public function getUniqueResources(
         $userId = null, $resourceId = null, $tagId = null
@@ -377,7 +377,7 @@ class ResourceTags extends Gateway
      * @param string $resourceId ID of the resource
      * @param string $tagId      ID of the tag
      *
-     * @return \Zend\Db\ResultSet\AbstractResultSet
+     * @return \Laminas\Db\ResultSet\AbstractResultSet
      */
     public function getUniqueTags($userId = null, $resourceId = null, $tagId = null)
     {
@@ -436,7 +436,7 @@ class ResourceTags extends Gateway
      * @param string $resourceId ID of the resource
      * @param string $tagId      ID of the tag
      *
-     * @return \Zend\Db\ResultSet\AbstractResultSet
+     * @return \Laminas\Db\ResultSet\AbstractResultSet
      */
     public function getUniqueUsers($userId = null, $resourceId = null, $tagId = null)
     {
@@ -516,7 +516,7 @@ class ResourceTags extends Gateway
      * @param string $page       The page number to select
      * @param string $limit      The number of items to fetch
      *
-     * @return \Zend\Paginator\Paginator
+     * @return \Laminas\Paginator\Paginator
      */
     public function getResourceTags(
         $userId = null, $resourceId = null, $tagId = null,
@@ -562,8 +562,8 @@ class ResourceTags extends Gateway
             $select->offset($limit * ($page - 1));
         }
 
-        $adapter = new \Zend\Paginator\Adapter\DbSelect($select, $sql);
-        $paginator = new \Zend\Paginator\Paginator($adapter);
+        $adapter = new \Laminas\Paginator\Adapter\DbSelect($select, $sql);
+        $paginator = new \Laminas\Paginator\Paginator($adapter);
         $paginator->setItemCountPerPage($limit);
         if (null !== $page) {
             $paginator->setCurrentPageNumber($page);
diff --git a/module/VuFind/src/VuFind/Db/Table/Search.php b/module/VuFind/src/VuFind/Db/Table/Search.php
index 8fc21a40816..508b52eb9eb 100644
--- a/module/VuFind/src/VuFind/Db/Table/Search.php
+++ b/module/VuFind/src/VuFind/Db/Table/Search.php
@@ -29,11 +29,11 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Db\Adapter\Adapter;
+use Laminas\Db\Adapter\ParameterContainer;
+use Laminas\Db\TableGateway\Feature;
 use minSO;
 use VuFind\Db\Row\RowGateway;
-use Zend\Db\Adapter\Adapter;
-use Zend\Db\Adapter\ParameterContainer;
-use Zend\Db\TableGateway\Feature;
 
 /**
  * Table Definition for search
@@ -54,7 +54,7 @@ class Search extends Gateway
      *
      * @param Adapter       $adapter Database adapter
      * @param PluginManager $tm      Table manager
-     * @param array         $cfg     Zend Framework configuration
+     * @param array         $cfg     Laminas configuration
      * @param RowGateway    $rowObj  Row prototype object (null for default)
      * @param string        $table   Name of database table to interface with
      */
@@ -67,7 +67,7 @@ class Search extends Gateway
     /**
      * Initialize features
      *
-     * @param array $cfg Zend Framework configuration
+     * @param array $cfg Laminas configuration
      *
      * @return void
      */
diff --git a/module/VuFind/src/VuFind/Db/Table/Session.php b/module/VuFind/src/VuFind/Db/Table/Session.php
index 73973e37da5..8ca42c1366c 100644
--- a/module/VuFind/src/VuFind/Db/Table/Session.php
+++ b/module/VuFind/src/VuFind/Db/Table/Session.php
@@ -29,9 +29,9 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Db\Adapter\Adapter;
 use VuFind\Db\Row\RowGateway;
 use VuFind\Exception\SessionExpired as SessionExpiredException;
-use Zend\Db\Adapter\Adapter;
 
 /**
  * Table Definition for session
@@ -52,7 +52,7 @@ class Session extends Gateway
      *
      * @param Adapter       $adapter Database adapter
      * @param PluginManager $tm      Table manager
-     * @param array         $cfg     Zend Framework configuration
+     * @param array         $cfg     Laminas configuration
      * @param RowGateway    $rowObj  Row prototype object (null for default)
      * @param string        $table   Name of database table to interface with
      */
diff --git a/module/VuFind/src/VuFind/Db/Table/Shortlinks.php b/module/VuFind/src/VuFind/Db/Table/Shortlinks.php
index e241ad8a8ec..1d61448d634 100644
--- a/module/VuFind/src/VuFind/Db/Table/Shortlinks.php
+++ b/module/VuFind/src/VuFind/Db/Table/Shortlinks.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Db\Adapter\Adapter;
 use VuFind\Db\Row\RowGateway;
-use Zend\Db\Adapter\Adapter;
 
 /**
  * Table Definition for shortlinks
@@ -46,7 +46,7 @@ class Shortlinks extends Gateway
      *
      * @param Adapter       $adapter Database adapter
      * @param PluginManager $tm      Table manager
-     * @param array         $cfg     Zend Framework configuration
+     * @param array         $cfg     Laminas configuration
      * @param RowGateway    $rowObj  Row prototype object (null for default)
      * @param string        $table   Name of database table to interface with
      */
diff --git a/module/VuFind/src/VuFind/Db/Table/Tags.php b/module/VuFind/src/VuFind/Db/Table/Tags.php
index a7fb22ccf77..28b90770ca2 100644
--- a/module/VuFind/src/VuFind/Db/Table/Tags.php
+++ b/module/VuFind/src/VuFind/Db/Table/Tags.php
@@ -27,11 +27,11 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Db\Adapter\Adapter;
+use Laminas\Db\Sql\Expression;
+use Laminas\Db\Sql\Predicate\Predicate;
+use Laminas\Db\Sql\Select;
 use VuFind\Db\Row\RowGateway;
-use Zend\Db\Adapter\Adapter;
-use Zend\Db\Sql\Expression;
-use Zend\Db\Sql\Predicate\Predicate;
-use Zend\Db\Sql\Select;
 
 /**
  * Table Definition for tags
@@ -56,7 +56,7 @@ class Tags extends Gateway
      *
      * @param Adapter       $adapter       Database adapter
      * @param PluginManager $tm            Table manager
-     * @param array         $cfg           Zend Framework configuration
+     * @param array         $cfg           Laminas configuration
      * @param RowGateway    $rowObj        Row prototype object (null for default)
      * @param bool          $caseSensitive Are tags case sensitive?
      * @param string        $table         Name of database table to interface with
@@ -275,7 +275,7 @@ class Tags extends Gateway
      * @param string $source     Filter for tags tied to a specific record source
      * (null for no filter).
      *
-     * @return \Zend\Db\ResultSet\AbstractResultSet
+     * @return \Laminas\Db\ResultSet\AbstractResultSet
      */
     public function getForUser($userId, $resourceId = null, $listId = null,
         $source = null
diff --git a/module/VuFind/src/VuFind/Db/Table/User.php b/module/VuFind/src/VuFind/Db/Table/User.php
index c5dae8da258..d1e00609d25 100644
--- a/module/VuFind/src/VuFind/Db/Table/User.php
+++ b/module/VuFind/src/VuFind/Db/Table/User.php
@@ -27,10 +27,10 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Config\Config;
+use Laminas\Db\Adapter\Adapter;
+use Laminas\Session\Container;
 use VuFind\Db\Row\RowGateway;
-use Zend\Config\Config;
-use Zend\Db\Adapter\Adapter;
-use Zend\Session\Container;
 
 /**
  * Table Definition for user
@@ -62,7 +62,7 @@ class User extends Gateway
      *
      * @param Adapter       $adapter Database adapter
      * @param PluginManager $tm      Table manager
-     * @param array         $cfg     Zend Framework configuration
+     * @param array         $cfg     Laminas configuration
      * @param RowGateway    $rowObj  Row prototype object (null for default)
      * @param Config        $config  VuFind configuration
      * @param Container     $session Session container to inject into rows
@@ -90,7 +90,7 @@ class User extends Gateway
         $row = $this->createRow();
         $row->username = $username;
         $row->created = date('Y-m-d H:i:s');
-        // Failing to initialize this here can cause Zend\Db errors in
+        // Failing to initialize this here can cause Laminas\Db errors in
         // the VuFind\Auth\Shibboleth and VuFind\Auth\ILS integration tests.
         $row->user_provided_email = 0;
         return $row;
diff --git a/module/VuFind/src/VuFind/Db/Table/UserCard.php b/module/VuFind/src/VuFind/Db/Table/UserCard.php
index ac157baaf34..996f87f10fa 100644
--- a/module/VuFind/src/VuFind/Db/Table/UserCard.php
+++ b/module/VuFind/src/VuFind/Db/Table/UserCard.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Db\Adapter\Adapter;
 use VuFind\Db\Row\RowGateway;
-use Zend\Db\Adapter\Adapter;
 
 /**
  * Table Definition for user_card
@@ -46,7 +46,7 @@ class UserCard extends Gateway
      *
      * @param Adapter       $adapter Database adapter
      * @param PluginManager $tm      Table manager
-     * @param array         $cfg     Zend Framework configuration
+     * @param array         $cfg     Laminas configuration
      * @param RowGateway    $rowObj  Row prototype object (null for default)
      * @param string        $table   Name of database table to interface with
      */
diff --git a/module/VuFind/src/VuFind/Db/Table/UserFactory.php b/module/VuFind/src/VuFind/Db/Table/UserFactory.php
index 9ce70b8f683..d6784b65ac1 100644
--- a/module/VuFind/src/VuFind/Db/Table/UserFactory.php
+++ b/module/VuFind/src/VuFind/Db/Table/UserFactory.php
@@ -63,8 +63,9 @@ class UserFactory extends GatewayFactory
         if (isset($config->Authentication->privacy)
             && $config->Authentication->privacy
         ) {
-            $sessionManager = $container->get(\Zend\Session\SessionManager::class);
-            $session = new \Zend\Session\Container('Account', $sessionManager);
+            $sessionManager = $container
+                ->get(\Laminas\Session\SessionManager::class);
+            $session = new \Laminas\Session\Container('Account', $sessionManager);
         }
         return parent::__invoke($container, $requestedName, [$config, $session]);
     }
diff --git a/module/VuFind/src/VuFind/Db/Table/UserList.php b/module/VuFind/src/VuFind/Db/Table/UserList.php
index 882bb4a893a..454184c1788 100644
--- a/module/VuFind/src/VuFind/Db/Table/UserList.php
+++ b/module/VuFind/src/VuFind/Db/Table/UserList.php
@@ -27,12 +27,12 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Db\Adapter\Adapter;
+use Laminas\Db\Sql\Expression;
+use Laminas\Session\Container;
 use VuFind\Db\Row\RowGateway;
 use VuFind\Exception\LoginRequired as LoginRequiredException;
 use VuFind\Exception\RecordMissing as RecordMissingException;
-use Zend\Db\Adapter\Adapter;
-use Zend\Db\Sql\Expression;
-use Zend\Session\Container;
 
 /**
  * Table Definition for user_list
@@ -57,7 +57,7 @@ class UserList extends Gateway
      *
      * @param Adapter       $adapter Database adapter
      * @param PluginManager $tm      Table manager
-     * @param array         $cfg     Zend Framework configuration
+     * @param array         $cfg     Laminas configuration
      * @param RowGateway    $rowObj  Row prototype object (null for default)
      * @param Container     $session Session container (must use same
      * namespace as container provided to \VuFind\View\Helper\Root\UserList).
diff --git a/module/VuFind/src/VuFind/Db/Table/UserListFactory.php b/module/VuFind/src/VuFind/Db/Table/UserListFactory.php
index ba43dc99ea2..a4fbd9b5244 100644
--- a/module/VuFind/src/VuFind/Db/Table/UserListFactory.php
+++ b/module/VuFind/src/VuFind/Db/Table/UserListFactory.php
@@ -60,8 +60,8 @@ class UserListFactory extends GatewayFactory
         if (!empty($options)) {
             throw new \Exception('Unexpected options sent to factory!');
         }
-        $sessionManager = $container->get(\Zend\Session\SessionManager::class);
-        $session = new \Zend\Session\Container('List', $sessionManager);
+        $sessionManager = $container->get(\Laminas\Session\SessionManager::class);
+        $session = new \Laminas\Session\Container('List', $sessionManager);
         return parent::__invoke($container, $requestedName, [$session]);
     }
 }
diff --git a/module/VuFind/src/VuFind/Db/Table/UserResource.php b/module/VuFind/src/VuFind/Db/Table/UserResource.php
index a59afaa4757..0dad2c39359 100644
--- a/module/VuFind/src/VuFind/Db/Table/UserResource.php
+++ b/module/VuFind/src/VuFind/Db/Table/UserResource.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\Db\Table;
 
+use Laminas\Db\Adapter\Adapter;
+use Laminas\Db\Sql\Expression;
 use VuFind\Db\Row\RowGateway;
-use Zend\Db\Adapter\Adapter;
-use Zend\Db\Sql\Expression;
 
 /**
  * Table Definition for user_resource
@@ -47,7 +47,7 @@ class UserResource extends Gateway
      *
      * @param Adapter       $adapter Database adapter
      * @param PluginManager $tm      Table manager
-     * @param array         $cfg     Zend Framework configuration
+     * @param array         $cfg     Laminas configuration
      * @param RowGateway    $rowObj  Row prototype object (null for default)
      * @param string        $table   Name of database table to interface with
      */
@@ -67,7 +67,7 @@ class UserResource extends Gateway
      * @param int    $userId     Optional user ID (to limit results to a particular
      * user).
      *
-     * @return \Zend\Db\ResultSet\AbstractResultSet
+     * @return \Laminas\Db\ResultSet\AbstractResultSet
      */
     public function getSavedData($resourceId, $source = DEFAULT_SEARCH_BACKEND,
         $listId = null, $userId = null
diff --git a/module/VuFind/src/VuFind/DigitalContent/OverdriveConnector.php b/module/VuFind/src/VuFind/DigitalContent/OverdriveConnector.php
index 3e4ebfaf8a5..e70cd2376f0 100644
--- a/module/VuFind/src/VuFind/DigitalContent/OverdriveConnector.php
+++ b/module/VuFind/src/VuFind/DigitalContent/OverdriveConnector.php
@@ -29,13 +29,13 @@
 namespace VuFind\DigitalContent;
 
 use Exception;
+use Laminas\Cache\Storage\StorageInterface;
+use Laminas\Config\Config;
+use Laminas\Http\Client;
+use Laminas\Log\LoggerAwareInterface;
+use Laminas\Session\Container;
 use VuFind\Auth\ILSAuthenticator;
 use VuFind\Cache\KeyGeneratorTrait;
-use Zend\Cache\Storage\StorageInterface;
-use Zend\Config\Config;
-use Zend\Http\Client;
-use Zend\Log\LoggerAwareInterface;
-use Zend\Session\Container;
 use ZfcRbac\Service\AuthorizationServiceAwareInterface;
 use ZfcRbac\Service\AuthorizationServiceAwareTrait;
 
@@ -139,7 +139,7 @@ class OverdriveConnector implements LoggerAwareInterface,
     /**
      * Loads the session container
      *
-     * @return \Zend\Session\Container
+     * @return \Laminas\Session\Container
      */
     protected function getSessionContainer()
     {
@@ -1413,7 +1413,7 @@ class OverdriveConnector implements LoggerAwareInterface,
      *
      * @param string $url URL for client to use
      *
-     * @return \Zend\Http\Client
+     * @return \Laminas\Http\Client
      * @throws Exception
      */
     protected function getHttpClient($url = null)
diff --git a/module/VuFind/src/VuFind/DigitalContent/OverdriveConnectorFactory.php b/module/VuFind/src/VuFind/DigitalContent/OverdriveConnectorFactory.php
index c3501ce7100..9faa6390570 100644
--- a/module/VuFind/src/VuFind/DigitalContent/OverdriveConnectorFactory.php
+++ b/module/VuFind/src/VuFind/DigitalContent/OverdriveConnectorFactory.php
@@ -44,7 +44,7 @@ use Interop\Container\ContainerInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class OverdriveConnectorFactory implements
-    \Zend\ServiceManager\Factory\FactoryInterface
+    \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
@@ -76,9 +76,9 @@ class OverdriveConnectorFactory implements
         $sessionContainer = null;
 
         if (PHP_SAPI !== 'cli') {
-            $sessionContainer = new \Zend\Session\Container(
+            $sessionContainer = new \Laminas\Session\Container(
                 'DigitalContent\OverdriveController',
-                $container->get('Zend\Session\SessionManager')
+                $container->get('Laminas\Session\SessionManager')
             );
         }
         $connector = new $requestedName(
diff --git a/module/VuFind/src/VuFind/DoiLinker/BrowZineFactory.php b/module/VuFind/src/VuFind/DoiLinker/BrowZineFactory.php
index 42a6320c128..7ad88eac623 100644
--- a/module/VuFind/src/VuFind/DoiLinker/BrowZineFactory.php
+++ b/module/VuFind/src/VuFind/DoiLinker/BrowZineFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development:plugins:record_drivers Wiki
  */
-class BrowZineFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class BrowZineFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/DoiLinker/Unpaywall.php b/module/VuFind/src/VuFind/DoiLinker/Unpaywall.php
index f1982b0a776..009d3dd1cb4 100644
--- a/module/VuFind/src/VuFind/DoiLinker/Unpaywall.php
+++ b/module/VuFind/src/VuFind/DoiLinker/Unpaywall.php
@@ -62,7 +62,7 @@ class Unpaywall implements DoiLinkerInterface, TranslatorAwareInterface,
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $config DOI section of main VuFind config
+     * @param \Laminas\Config\Config $config DOI section of main VuFind config
      *
      * @throws \Exception
      */
diff --git a/module/VuFind/src/VuFind/DoiLinker/UnpaywallFactory.php b/module/VuFind/src/VuFind/DoiLinker/UnpaywallFactory.php
index 47fdfb81778..fe815290ebf 100644
--- a/module/VuFind/src/VuFind/DoiLinker/UnpaywallFactory.php
+++ b/module/VuFind/src/VuFind/DoiLinker/UnpaywallFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development:plugins:doi_linkers Wiki
  */
-class UnpaywallFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class UnpaywallFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Export.php b/module/VuFind/src/VuFind/Export.php
index bd95bfa6de1..614ea03f469 100644
--- a/module/VuFind/src/VuFind/Export.php
+++ b/module/VuFind/src/VuFind/Export.php
@@ -27,7 +27,8 @@
  */
 namespace VuFind;
 
-use Zend\Config\Config;
+use Laminas\Config\Config;
+use Laminas\View\Renderer\RendererInterface;
 
 /**
  * Export support class
@@ -77,11 +78,9 @@ class Export
     /**
      * Get the URL for bulk export.
      *
-     * @param \Zend\View\Renderer\RendererInterface $view   View object (needed for
-     * URL generation)
-     * @param string                                $format Export format being used
-     * @param array                                 $ids    Array of IDs to export
-     * (in source|id format)
+     * @param RendererInterface $view   View object (needed for URL generation)
+     * @param string            $format Export format being used
+     * @param array             $ids    Array of IDs to export (in source|id format)
      *
      * @return string
      */
diff --git a/module/VuFind/src/VuFind/ExportFactory.php b/module/VuFind/src/VuFind/ExportFactory.php
index 69f9b153050..4c1332b3a8e 100644
--- a/module/VuFind/src/VuFind/ExportFactory.php
+++ b/module/VuFind/src/VuFind/ExportFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Export factory.
diff --git a/module/VuFind/src/VuFind/Favorites/FavoritesServiceFactory.php b/module/VuFind/src/VuFind/Favorites/FavoritesServiceFactory.php
index 4e64951424a..5ecb6bbdecb 100644
--- a/module/VuFind/src/VuFind/Favorites/FavoritesServiceFactory.php
+++ b/module/VuFind/src/VuFind/Favorites/FavoritesServiceFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Favorites;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Favorites service
diff --git a/module/VuFind/src/VuFind/Feed/Writer/Extension/DublinCore/Entry.php b/module/VuFind/src/VuFind/Feed/Writer/Extension/DublinCore/Entry.php
index 9791ec625a9..2284e334ec2 100644
--- a/module/VuFind/src/VuFind/Feed/Writer/Extension/DublinCore/Entry.php
+++ b/module/VuFind/src/VuFind/Feed/Writer/Extension/DublinCore/Entry.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * Zend\Feed\Entry extension for Dublin Core
+ * Laminas\Feed\Entry extension for Dublin Core
  *
  * PHP version 7
  *
@@ -27,10 +27,10 @@
  */
 namespace VuFind\Feed\Writer\Extension\DublinCore;
 
-use Zend\Feed\Writer\Extension\ITunes\Entry as ParentEntry;
+use Laminas\Feed\Writer\Extension\ITunes\Entry as ParentEntry;
 
 /**
- * Zend\Feed\Entry extension for Dublin Core
+ * Laminas\Feed\Entry extension for Dublin Core
  *
  * Note: There doesn't seem to be a generic base class for this functionality,
  * and creating a class with no parent blows up due to unexpected calls to
diff --git a/module/VuFind/src/VuFind/Feed/Writer/Extension/DublinCore/Renderer/Entry.php b/module/VuFind/src/VuFind/Feed/Writer/Extension/DublinCore/Renderer/Entry.php
index 94a4b907b12..7fe5b18b725 100644
--- a/module/VuFind/src/VuFind/Feed/Writer/Extension/DublinCore/Renderer/Entry.php
+++ b/module/VuFind/src/VuFind/Feed/Writer/Extension/DublinCore/Renderer/Entry.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * Zend\Feed\Renderer\Entry extension for Dublin Core
+ * Laminas\Feed\Renderer\Entry extension for Dublin Core
  *
  * PHP version 7
  *
@@ -29,10 +29,10 @@ namespace VuFind\Feed\Writer\Extension\DublinCore\Renderer;
 
 use DOMDocument;
 use DOMElement;
-use Zend\Feed\Writer\Extension\DublinCore\Renderer\Entry as ParentEntry;
+use Laminas\Feed\Writer\Extension\DublinCore\Renderer\Entry as ParentEntry;
 
 /**
- * Zend\Feed\Renderer\Entry extension for Dublin Core
+ * Laminas\Feed\Renderer\Entry extension for Dublin Core
  *
  * @category VuFind
  * @package  Feed_Plugins
diff --git a/module/VuFind/src/VuFind/Feed/Writer/Extension/OpenSearch/Feed.php b/module/VuFind/src/VuFind/Feed/Writer/Extension/OpenSearch/Feed.php
index 6d5180d8006..0a27b210d3c 100644
--- a/module/VuFind/src/VuFind/Feed/Writer/Extension/OpenSearch/Feed.php
+++ b/module/VuFind/src/VuFind/Feed/Writer/Extension/OpenSearch/Feed.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * Zend\Feed\Feed extension for Open Search
+ * Laminas\Feed\Feed extension for Open Search
  *
  * PHP version 7
  *
@@ -27,12 +27,12 @@
  */
 namespace VuFind\Feed\Writer\Extension\OpenSearch;
 
-use Zend\Feed\Uri;
-use Zend\Feed\Writer\Extension\ITunes\Feed as ParentFeed;
-use Zend\Stdlib\StringUtils;
+use Laminas\Feed\Uri;
+use Laminas\Feed\Writer\Extension\ITunes\Feed as ParentFeed;
+use Laminas\Stdlib\StringUtils;
 
 /**
- * Zend\Feed\Feed extension for Open Search
+ * Laminas\Feed\Feed extension for Open Search
  *
  * Note: There doesn't seem to be a generic base class for this functionality,
  * and creating a class with no parent blows up due to unexpected calls to
diff --git a/module/VuFind/src/VuFind/Feed/Writer/Extension/OpenSearch/Renderer/Feed.php b/module/VuFind/src/VuFind/Feed/Writer/Extension/OpenSearch/Renderer/Feed.php
index 5cdd58b44b0..6020325e94e 100644
--- a/module/VuFind/src/VuFind/Feed/Writer/Extension/OpenSearch/Renderer/Feed.php
+++ b/module/VuFind/src/VuFind/Feed/Writer/Extension/OpenSearch/Renderer/Feed.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * Zend\Feed\Renderer\Feed extension for Open Search
+ * Laminas\Feed\Renderer\Feed extension for Open Search
  *
  * PHP version 7
  *
@@ -29,10 +29,10 @@ namespace VuFind\Feed\Writer\Extension\OpenSearch\Renderer;
 
 use DOMDocument;
 use DOMElement;
-use Zend\Feed\Writer\Extension\AbstractRenderer;
+use Laminas\Feed\Writer\Extension\AbstractRenderer;
 
 /**
- * Zend\Feed\Renderer\Feed extension for Open Search
+ * Laminas\Feed\Renderer\Feed extension for Open Search
  *
  * @category VuFind
  * @package  Feed_Plugins
diff --git a/module/VuFind/src/VuFind/Form/Form.php b/module/VuFind/src/VuFind/Form/Form.php
index e12d02aaa1b..3ff057b28ac 100644
--- a/module/VuFind/src/VuFind/Form/Form.php
+++ b/module/VuFind/src/VuFind/Form/Form.php
@@ -27,11 +27,11 @@
  */
 namespace VuFind\Form;
 
+use Laminas\InputFilter\InputFilter;
+use Laminas\Validator\EmailAddress;
+use Laminas\Validator\NotEmpty;
+use Laminas\View\HelperPluginManager;
 use VuFind\Config\YamlReader;
-use Zend\InputFilter\InputFilter;
-use Zend\Validator\EmailAddress;
-use Zend\Validator\NotEmpty;
-use Zend\View\HelperPluginManager;
 
 /**
  * Configurable form.
@@ -42,7 +42,7 @@ use Zend\View\HelperPluginManager;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development:plugins:controllers Wiki
  */
-class Form extends \Zend\Form\Form implements
+class Form extends \Laminas\Form\Form implements
     \VuFind\I18n\Translator\TranslatorAwareInterface
 {
     use \VuFind\I18n\Translator\TranslatorAwareTrait;
@@ -491,14 +491,14 @@ class Form extends \Zend\Form\Form implements
     protected function getFormElementClass($type)
     {
         $map = [
-            'checkbox' => '\Zend\Form\Element\MultiCheckbox',
-            'text' => '\Zend\Form\Element\Text',
-            'url' => '\Zend\Form\Element\Url',
-            'email' => '\Zend\Form\Element\Email',
-            'textarea' => '\Zend\Form\Element\Textarea',
-            'radio' => '\Zend\Form\Element\Radio',
-            'select' => '\Zend\Form\Element\Select',
-            'submit' => '\Zend\Form\Element\Submit'
+            'checkbox' => '\Laminas\Form\Element\MultiCheckbox',
+            'text' => '\Laminas\Form\Element\Text',
+            'url' => '\Laminas\Form\Element\Url',
+            'email' => '\Laminas\Form\Element\Email',
+            'textarea' => '\Laminas\Form\Element\Textarea',
+            'radio' => '\Laminas\Form\Element\Radio',
+            'select' => '\Laminas\Form\Element\Select',
+            'submit' => '\Laminas\Form\Element\Submit'
         ];
 
         return $map[$type] ?? null;
@@ -679,7 +679,7 @@ class Form extends \Zend\Form\Form implements
     /**
      * Retrieve input filter used by this form
      *
-     * @return \Zend\InputFilter\InputFilterInterface
+     * @return \Laminas\InputFilter\InputFilterInterface
      */
     public function getInputFilter()
     {
diff --git a/module/VuFind/src/VuFind/Form/FormFactory.php b/module/VuFind/src/VuFind/Form/FormFactory.php
index 22884a4a657..69a3eae9e2e 100644
--- a/module/VuFind/src/VuFind/Form/FormFactory.php
+++ b/module/VuFind/src/VuFind/Form/FormFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Form;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for configurable forms.
diff --git a/module/VuFind/src/VuFind/GeoFeatures/AbstractConfig.php b/module/VuFind/src/VuFind/GeoFeatures/AbstractConfig.php
index 545ba0f15d0..6e989c89649 100644
--- a/module/VuFind/src/VuFind/GeoFeatures/AbstractConfig.php
+++ b/module/VuFind/src/VuFind/GeoFeatures/AbstractConfig.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\GeoFeatures;
 
-use Zend\Config\Config;
+use Laminas\Config\Config;
 
 /**
  * MapTab Configuration Class
diff --git a/module/VuFind/src/VuFind/GeoFeatures/AbstractConfigFactory.php b/module/VuFind/src/VuFind/GeoFeatures/AbstractConfigFactory.php
index a9563aa74dd..0317407fff1 100644
--- a/module/VuFind/src/VuFind/GeoFeatures/AbstractConfigFactory.php
+++ b/module/VuFind/src/VuFind/GeoFeatures/AbstractConfigFactory.php
@@ -29,7 +29,7 @@
 namespace VuFind\GeoFeatures;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * GeoFeatures Abstract Config Factory Class
diff --git a/module/VuFind/src/VuFind/Hierarchy/Driver/AbstractBase.php b/module/VuFind/src/VuFind/Hierarchy/Driver/AbstractBase.php
index 505bdef637f..84756da413d 100644
--- a/module/VuFind/src/VuFind/Hierarchy/Driver/AbstractBase.php
+++ b/module/VuFind/src/VuFind/Hierarchy/Driver/AbstractBase.php
@@ -48,7 +48,7 @@ abstract class AbstractBase
     /**
      * Driver configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
@@ -83,12 +83,12 @@ abstract class AbstractBase
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $config          Configuration
-     * @param DataManager         $dataManager     Tree data source plugin manager
-     * @param RendererManager     $rendererManager Tree renderer plugin manager
-     * @param array               $options         Extra options (if any)
+     * @param \Laminas\Config\Config $config          Configuration
+     * @param DataManager            $dataManager     Tree data source plugin manager
+     * @param RendererManager        $rendererManager Tree renderer plugin manager
+     * @param array                  $options         Extra options (if any)
      */
-    public function __construct(\Zend\Config\Config $config,
+    public function __construct(\Laminas\Config\Config $config,
         DataManager $dataManager, RendererManager $rendererManager,
         $options = []
     ) {
diff --git a/module/VuFind/src/VuFind/Hierarchy/Driver/ConfigurationBasedFactory.php b/module/VuFind/src/VuFind/Hierarchy/Driver/ConfigurationBasedFactory.php
index 008c566f2ed..00e324d4572 100644
--- a/module/VuFind/src/VuFind/Hierarchy/Driver/ConfigurationBasedFactory.php
+++ b/module/VuFind/src/VuFind/Hierarchy/Driver/ConfigurationBasedFactory.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Hierarchy\Driver;
 
-use Zend\ServiceManager\ServiceManager;
+use Laminas\ServiceManager\ServiceManager;
 
 /**
  * Hierarchy Driver Factory Class
@@ -47,9 +47,9 @@ class ConfigurationBasedFactory
     /**
      * This constructs a hierarchy driver using VuFind's service setup.
      *
-     * @param \Zend\ServiceManager\ServiceManager $sm            Top-level service m.
-     * @param string                              $requestedName Service being built
-     * @param array|null                          $options       Name of driver class
+     * @param ServiceManager $sm            Top-level service m.
+     * @param string         $requestedName Service being built
+     * @param array|null     $options       Name of driver class
      *
      * @return object
      *
diff --git a/module/VuFind/src/VuFind/Hierarchy/TreeDataFormatter/PluginManager.php b/module/VuFind/src/VuFind/Hierarchy/TreeDataFormatter/PluginManager.php
index d253c282ce6..f7508c55344 100644
--- a/module/VuFind/src/VuFind/Hierarchy/TreeDataFormatter/PluginManager.php
+++ b/module/VuFind/src/VuFind/Hierarchy/TreeDataFormatter/PluginManager.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Hierarchy\TreeDataFormatter;
 
-use Zend\ServiceManager\Factory\InvokableFactory;
+use Laminas\ServiceManager\Factory\InvokableFactory;
 
 /**
  * Hierarchy tree data formatter plugin manager
diff --git a/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/AbstractBase.php b/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/AbstractBase.php
index 047ea3328bf..1a2799626ca 100644
--- a/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/AbstractBase.php
+++ b/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/AbstractBase.php
@@ -38,7 +38,7 @@ namespace VuFind\Hierarchy\TreeDataSource;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development:plugins:hierarchy_components Wiki
  */
-abstract class AbstractBase implements \Zend\Log\LoggerAwareInterface
+abstract class AbstractBase implements \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
 
diff --git a/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/PluginManager.php b/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/PluginManager.php
index c0926101f5f..aa60aaff616 100644
--- a/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/PluginManager.php
+++ b/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/PluginManager.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Hierarchy\TreeDataSource;
 
-use Zend\ServiceManager\Factory\InvokableFactory;
+use Laminas\ServiceManager\Factory\InvokableFactory;
 
 /**
  * Hierarchy tree data source plugin manager
diff --git a/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/SolrFactory.php b/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/SolrFactory.php
index 324e38511f8..caf975d71c8 100644
--- a/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/SolrFactory.php
+++ b/module/VuFind/src/VuFind/Hierarchy/TreeDataSource/SolrFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class SolrFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class SolrFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Search backend identifier.
diff --git a/module/VuFind/src/VuFind/Hierarchy/TreeRenderer/JSTree.php b/module/VuFind/src/VuFind/Hierarchy/TreeRenderer/JSTree.php
index 7146729f206..9303f118b6d 100644
--- a/module/VuFind/src/VuFind/Hierarchy/TreeRenderer/JSTree.php
+++ b/module/VuFind/src/VuFind/Hierarchy/TreeRenderer/JSTree.php
@@ -27,6 +27,8 @@
  */
 namespace VuFind\Hierarchy\TreeRenderer;
 
+use Laminas\Mvc\Controller\Plugin\Url as UrlPlugin;
+
 /**
  * Hierarchy Tree Renderer
  *
@@ -46,7 +48,7 @@ class JSTree extends AbstractBase
     /**
      * Router plugin
      *
-     * @var \Zend\Mvc\Controller\Plugin\Url
+     * @var UrlPlugin
      */
     protected $router = null;
 
@@ -60,14 +62,13 @@ class JSTree extends AbstractBase
     /**
      * Constructor
      *
-     * @param \Zend\Mvc\Controller\Plugin\Url $router             Router plugin for
+     * @param UrlPlugin $router             Router plugin for
      * urls
-     * @param bool                            $collectionsEnabled Whether the
-     * collections functionality is enabled
+     * @param bool      $collectionsEnabled Whether the collections functionality is
+     * enabled
      */
-    public function __construct(\Zend\Mvc\Controller\Plugin\Url $router,
-        $collectionsEnabled
-    ) {
+    public function __construct(UrlPlugin $router, $collectionsEnabled)
+    {
         $this->router = $router;
         $this->collectionsEnabled = $collectionsEnabled;
     }
@@ -179,7 +180,7 @@ class JSTree extends AbstractBase
      */
     protected function buildNodeArray($node, $context, $hierarchyID)
     {
-        $escaper = new \Zend\Escaper\Escaper('utf-8');
+        $escaper = new \Laminas\Escaper\Escaper('utf-8');
         $ret = [
             'id' => preg_replace('/\W/', '-', $node->id),
             'text' => $escaper->escapeHtml($node->title),
@@ -285,7 +286,7 @@ class JSTree extends AbstractBase
      */
     protected function jsonToHTML($node, $context, $hierarchyID, $recordID = false)
     {
-        $escaper = new \Zend\Escaper\Escaper('utf-8');
+        $escaper = new \Laminas\Escaper\Escaper('utf-8');
 
         $name = strlen($node->title) > 100
             ? substr($node->title, 0, 100) . '...'
diff --git a/module/VuFind/src/VuFind/Hierarchy/TreeRenderer/JSTreeFactory.php b/module/VuFind/src/VuFind/Hierarchy/TreeRenderer/JSTreeFactory.php
index 7f43f3a736c..d7dee60c21d 100644
--- a/module/VuFind/src/VuFind/Hierarchy/TreeRenderer/JSTreeFactory.php
+++ b/module/VuFind/src/VuFind/Hierarchy/TreeRenderer/JSTreeFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class JSTreeFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class JSTreeFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Http/PhpEnvironment/RemoteAddressFactory.php b/module/VuFind/src/VuFind/Http/PhpEnvironment/RemoteAddressFactory.php
index 8e113bf5a94..bf69e84cd86 100644
--- a/module/VuFind/src/VuFind/Http/PhpEnvironment/RemoteAddressFactory.php
+++ b/module/VuFind/src/VuFind/Http/PhpEnvironment/RemoteAddressFactory.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * RemoteAddress utility factory. This uses the core Zend RemoteAddress but
+ * RemoteAddress utility factory. This uses the core Laminas RemoteAddress but
  * configures it according to VuFind settings.
  *
  * PHP version 7
@@ -29,7 +29,7 @@
 namespace VuFind\Http\PhpEnvironment;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * RemoteAddress utility factory.
diff --git a/module/VuFind/src/VuFind/Http/PhpEnvironment/Request.php b/module/VuFind/src/VuFind/Http/PhpEnvironment/Request.php
index 752ff1fcce1..a70863bd393 100644
--- a/module/VuFind/src/VuFind/Http/PhpEnvironment/Request.php
+++ b/module/VuFind/src/VuFind/Http/PhpEnvironment/Request.php
@@ -36,7 +36,7 @@ namespace VuFind\Http\PhpEnvironment;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class Request extends \Zend\Http\PhpEnvironment\Request
+class Request extends \Laminas\Http\PhpEnvironment\Request
 {
     /**
      * Return the parameter container responsible for query parameters or a single
@@ -47,7 +47,7 @@ class Request extends \Zend\Http\PhpEnvironment\Request
      * @param mixed|null  $default Default value to use when the parameter is
      * missing.
      *
-     * @return \Zend\Stdlib\ParametersInterface|mixed
+     * @return \Laminas\Stdlib\ParametersInterface|mixed
      */
     public function getQuery($name = null, $default = null)
     {
@@ -63,7 +63,7 @@ class Request extends \Zend\Http\PhpEnvironment\Request
      * @param mixed|null  $default Default value to use when the parameter is
      * missing.
      *
-     * @return \Zend\Stdlib\ParametersInterface|mixed
+     * @return \Laminas\Stdlib\ParametersInterface|mixed
      */
     public function getPost($name = null, $default = null)
     {
@@ -80,7 +80,7 @@ class Request extends \Zend\Http\PhpEnvironment\Request
      * missing.
      *
      * @see    http://www.faqs.org/rfcs/rfc3875.html
-     * @return \Zend\Stdlib\ParametersInterface|mixed
+     * @return \Laminas\Stdlib\ParametersInterface|mixed
      */
     public function getServer($name = null, $default = null)
     {
@@ -90,13 +90,15 @@ class Request extends \Zend\Http\PhpEnvironment\Request
     /**
      * Clean up a parameter
      *
-     * @param \Zend\Stdlib\ParametersInterface|mixed $param Parameter
+     * @param \Laminas\Stdlib\ParametersInterface|mixed $param Parameter
      *
-     * @return \Zend\Stdlib\ParametersInterface|mixed
+     * @return \Laminas\Stdlib\ParametersInterface|mixed
      */
     protected function cleanup($param)
     {
-        if (is_array($param) || $param instanceof \Zend\Stdlib\ParametersInterface) {
+        if (is_array($param)
+            || $param instanceof \Laminas\Stdlib\ParametersInterface
+        ) {
             foreach ($param as $key => &$value) {
                 if (is_array($value)) {
                     $value = $this->cleanup($value);
diff --git a/module/VuFind/src/VuFind/I18n/ExtendedIniNormalizer.php b/module/VuFind/src/VuFind/I18n/ExtendedIniNormalizer.php
index e05427c2270..f73a24a8cec 100644
--- a/module/VuFind/src/VuFind/I18n/ExtendedIniNormalizer.php
+++ b/module/VuFind/src/VuFind/I18n/ExtendedIniNormalizer.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\I18n;
 
-use Zend\I18n\Translator\TextDomain;
+use Laminas\I18n\Translator\TextDomain;
 
 /**
  * Class to consistently format ExtendedIni language files.
diff --git a/module/VuFind/src/VuFind/I18n/Translator/LanguageInitializerTrait.php b/module/VuFind/src/VuFind/I18n/Translator/LanguageInitializerTrait.php
index d4404e07316..4a6e1d8131d 100644
--- a/module/VuFind/src/VuFind/I18n/Translator/LanguageInitializerTrait.php
+++ b/module/VuFind/src/VuFind/I18n/Translator/LanguageInitializerTrait.php
@@ -72,8 +72,8 @@ trait LanguageInitializerTrait
     /**
      * Configure a translator to support the requested language.
      *
-     * @param \Zend\Mvc\I18n\Translator $translator Translator
-     * @param string                    $language   Language to set up
+     * @param \Laminas\Mvc\I18n\Translator $translator Translator
+     * @param string                       $language   Language to set up
      *
      * @return void
      */
diff --git a/module/VuFind/src/VuFind/I18n/Translator/Loader/ExtendedIni.php b/module/VuFind/src/VuFind/I18n/Translator/Loader/ExtendedIni.php
index 6500db10dee..b1fd2daf969 100644
--- a/module/VuFind/src/VuFind/I18n/Translator/Loader/ExtendedIni.php
+++ b/module/VuFind/src/VuFind/I18n/Translator/Loader/ExtendedIni.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\I18n\Translator\Loader;
 
-use Zend\I18n\Exception\InvalidArgumentException;
-use Zend\I18n\Translator\Loader\FileLoaderInterface;
-use Zend\I18n\Translator\TextDomain;
+use Laminas\I18n\Exception\InvalidArgumentException;
+use Laminas\I18n\Translator\Loader\FileLoaderInterface;
+use Laminas\I18n\Translator\TextDomain;
 
 /**
  * Handles the language loading and language file parsing
diff --git a/module/VuFind/src/VuFind/I18n/Translator/Loader/ExtendedIniReader.php b/module/VuFind/src/VuFind/I18n/Translator/Loader/ExtendedIniReader.php
index c3fbc4bc772..8701aa751d1 100644
--- a/module/VuFind/src/VuFind/I18n/Translator/Loader/ExtendedIniReader.php
+++ b/module/VuFind/src/VuFind/I18n/Translator/Loader/ExtendedIniReader.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\I18n\Translator\Loader;
 
-use Zend\I18n\Translator\TextDomain;
+use Laminas\I18n\Translator\TextDomain;
 
 /**
  * Helper class to load .ini files from disk.
@@ -70,8 +70,8 @@ class ExtendedIniReader
 
                         // Store the key/value pair (allow empty values -- sometimes
                         // we want to replace a language token with a blank string,
-                        // but Zend translator doesn't support them so replace with
-                        // a zero-width non-joiner):
+                        // but Laminas translator doesn't support them so replace
+                        // with a zero-width non-joiner):
                         if ($convertBlanks && $value === '') {
                             $value = html_entity_decode(
                                 '&#x200C;', ENT_NOQUOTES, 'UTF-8'
diff --git a/module/VuFind/src/VuFind/I18n/Translator/TranslatorAwareInterface.php b/module/VuFind/src/VuFind/I18n/Translator/TranslatorAwareInterface.php
index 0c60cd93984..1c85f329f7e 100644
--- a/module/VuFind/src/VuFind/I18n/Translator/TranslatorAwareInterface.php
+++ b/module/VuFind/src/VuFind/I18n/Translator/TranslatorAwareInterface.php
@@ -27,11 +27,11 @@
  */
 namespace VuFind\I18n\Translator;
 
-use Zend\I18n\Translator\TranslatorInterface;
+use Laminas\I18n\Translator\TranslatorInterface;
 
 /**
  * Lightweight translator aware marker interface (used as an alternative to
- * \Zend\I18n\Translator\TranslatorAwareInterface, which requires an excessive
+ * \Laminas\I18n\Translator\TranslatorAwareInterface, which requires an excessive
  * number of methods to be implemented).
  *
  * @category VuFind
diff --git a/module/VuFind/src/VuFind/I18n/Translator/TranslatorAwareTrait.php b/module/VuFind/src/VuFind/I18n/Translator/TranslatorAwareTrait.php
index 92527f53ba3..87bb415a778 100644
--- a/module/VuFind/src/VuFind/I18n/Translator/TranslatorAwareTrait.php
+++ b/module/VuFind/src/VuFind/I18n/Translator/TranslatorAwareTrait.php
@@ -27,13 +27,13 @@
  */
 namespace VuFind\I18n\Translator;
 
-use Zend\I18n\Translator\TranslatorInterface;
+use Laminas\I18n\Translator\TranslatorInterface;
 
 /**
  * Lightweight translator aware marker interface (used as an alternative to
- * \Zend\I18n\Translator\TranslatorAwareInterface, which requires an excessive
+ * \Laminas\I18n\Translator\TranslatorAwareInterface, which requires an excessive
  * number of methods to be implemented).  If we switch to PHP 5.4 traits in the
- * future, we can eliminate this interface in favor of the default Zend version.
+ * future, we can eliminate this interface in favor of the default Laminas version.
  *
  * @category VuFind
  * @package  Translator
@@ -46,7 +46,7 @@ trait TranslatorAwareTrait
     /**
      * Translator
      *
-     * @var \Zend\I18n\Translator\TranslatorInterface
+     * @var \Laminas\I18n\Translator\TranslatorInterface
      */
     protected $translator = null;
 
@@ -66,7 +66,7 @@ trait TranslatorAwareTrait
     /**
      * Get translator object.
      *
-     * @return \Zend\I18n\Translator\TranslatorInterface
+     * @return \Laminas\I18n\Translator\TranslatorInterface
      */
     public function getTranslator()
     {
diff --git a/module/VuFind/src/VuFind/I18n/Translator/TranslatorFactory.php b/module/VuFind/src/VuFind/I18n/Translator/TranslatorFactory.php
index 64f495a5476..a6a7ac1ff56 100644
--- a/module/VuFind/src/VuFind/I18n/Translator/TranslatorFactory.php
+++ b/module/VuFind/src/VuFind/I18n/Translator/TranslatorFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Site
  */
-class TranslatorFactory extends \Zend\Mvc\I18n\TranslatorFactory
+class TranslatorFactory extends \Laminas\Mvc\I18n\TranslatorFactory
 {
     /**
      * Create an object
@@ -73,7 +73,7 @@ class TranslatorFactory extends \Zend\Mvc\I18n\TranslatorFactory
             : [$config->Site->language, 'en'];
         try {
             $pm = $translator->getPluginManager();
-        } catch (\Zend\Mvc\I18n\Exception\BadMethodCallException $ex) {
+        } catch (\Laminas\Mvc\I18n\Exception\BadMethodCallException $ex) {
             // If getPluginManager is missing, this means that the user has
             // disabled translation in module.config.php or PHP's intl extension
             // is missing. We can do no further configuration of the object.
diff --git a/module/VuFind/src/VuFind/ILS/Connection.php b/module/VuFind/src/VuFind/ILS/Connection.php
index cc57f909bad..c924d2bb9d4 100644
--- a/module/VuFind/src/VuFind/ILS/Connection.php
+++ b/module/VuFind/src/VuFind/ILS/Connection.php
@@ -31,11 +31,11 @@
  */
 namespace VuFind\ILS;
 
+use Laminas\Log\LoggerAwareInterface;
 use VuFind\Exception\BadConfig;
 use VuFind\Exception\ILS as ILSException;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
 use VuFind\ILS\Driver\DriverInterface;
-use Zend\Log\LoggerAwareInterface;
 
 /**
  * Catalog Connection Class
@@ -72,7 +72,7 @@ class Connection implements TranslatorAwareInterface, LoggerAwareInterface
     /**
      * ILS configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
@@ -114,23 +114,23 @@ class Connection implements TranslatorAwareInterface, LoggerAwareInterface
     /**
      * Request object
      *
-     * @var \Zend\Http\Request
+     * @var \Laminas\Http\Request
      */
     protected $request;
 
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config              $config        Configuration
+     * @param \Laminas\Config\Config           $config        Configuration
      * representing the [Catalog] section of config.ini
      * @param \VuFind\ILS\Driver\PluginManager $driverManager Driver plugin manager
      * @param \VuFind\Config\PluginManager     $configReader  Configuration loader
-     * @param \Zend\Http\Request               $request       Request object
+     * @param \Laminas\Http\Request            $request       Request object
      */
-    public function __construct(\Zend\Config\Config $config,
+    public function __construct(\Laminas\Config\Config $config,
         \VuFind\ILS\Driver\PluginManager $driverManager,
         \VuFind\Config\PluginManager $configReader,
-        \Zend\Http\Request $request = null
+        \Laminas\Http\Request $request = null
     ) {
         if (!isset($config->driver)) {
             throw new \Exception('ILS driver setting missing.');
diff --git a/module/VuFind/src/VuFind/ILS/ConnectionFactory.php b/module/VuFind/src/VuFind/ILS/ConnectionFactory.php
index ff4992b2e66..5a57abd5051 100644
--- a/module/VuFind/src/VuFind/ILS/ConnectionFactory.php
+++ b/module/VuFind/src/VuFind/ILS/ConnectionFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ILS;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * ILS connection factory
@@ -67,7 +67,7 @@ class ConnectionFactory implements FactoryInterface
             $configManager->get('config')->Catalog,
             $container->get(\VuFind\ILS\Driver\PluginManager::class),
             $container->get(\VuFind\Config\PluginManager::class),
-            $request instanceof \Zend\Http\Request ? $request : null
+            $request instanceof \Laminas\Http\Request ? $request : null
         );
         return $catalog->setHoldConfig(
             $container->get(\VuFind\ILS\HoldSettings::class)
diff --git a/module/VuFind/src/VuFind/ILS/Driver/AbstractAPI.php b/module/VuFind/src/VuFind/ILS/Driver/AbstractAPI.php
index 00031adf69c..594c2a936d0 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/AbstractAPI.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/AbstractAPI.php
@@ -27,13 +27,13 @@
  */
 namespace VuFind\ILS\Driver;
 
+use Laminas\Log\LoggerAwareInterface;
 use VuFind\Exception\BadConfig;
 use VuFind\Exception\BadRequest;
 use VuFind\Exception\Forbidden;
 use VuFind\Exception\ILS as ILSException;
 use VuFind\Exception\RecordMissing;
 use VuFindHttp\HttpServiceAwareInterface;
-use Zend\Log\LoggerAwareInterface;
 
 /**
  * Abstract Driver for API-based ILS drivers
@@ -55,12 +55,12 @@ abstract class AbstractAPI extends AbstractBase implements HttpServiceAwareInter
     /**
      * Allow default corrections to all requests
      *
-     * @param \Zend\Http\Headers $headers the request headers
-     * @param array              $params  the parameters object
+     * @param \Laminas\Http\Headers $headers the request headers
+     * @param array                 $params  the parameters object
      *
      * @return array
      */
-    protected function preRequest(\Zend\Http\Headers $headers, $params)
+    protected function preRequest(\Laminas\Http\Headers $headers, $params)
     {
         return [$headers, $params];
     }
@@ -68,10 +68,11 @@ abstract class AbstractAPI extends AbstractBase implements HttpServiceAwareInter
     /**
      * Function that obscures and logs debug data
      *
-     * @param string             $method      Request method GET/POST/PUT/DELETE/etc
-     * @param string             $path        Request URL
-     * @param array              $params      Request parameters
-     * @param \Zend\Http\Headers $req_headers Headers object
+     * @param string                $method      Request method
+     * (GET/POST/PUT/DELETE/etc.)
+     * @param string                $path        Request URL
+     * @param array                 $params      Request parameters
+     * @param \Laminas\Http\Headers $req_headers Headers object
      *
      * @return void
      */
@@ -99,7 +100,7 @@ abstract class AbstractAPI extends AbstractBase implements HttpServiceAwareInter
      * @param array  $params  Parameters object to be sent as data
      * @param array  $headers Additional headers
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function makeRequest($method = "GET", $path = "/", $params = [],
         $headers = []
diff --git a/module/VuFind/src/VuFind/ILS/Driver/Aleph.php b/module/VuFind/src/VuFind/ILS/Driver/Aleph.php
index 32b6254abdf..a61209625d3 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/Aleph.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/Aleph.php
@@ -300,7 +300,7 @@ class AlephRestfulException extends ILSException
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development:plugins:ils_drivers Wiki
  */
-class Aleph extends AbstractBase implements \Zend\Log\LoggerAwareInterface,
+class Aleph extends AbstractBase implements \Laminas\Log\LoggerAwareInterface,
     \VuFindHttp\HttpServiceAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
diff --git a/module/VuFind/src/VuFind/ILS/Driver/Alma.php b/module/VuFind/src/VuFind/ILS/Driver/Alma.php
index a90eed38b44..8de446df5ee 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/Alma.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/Alma.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\ILS\Driver;
 
+use Laminas\Http\Headers;
 use SimpleXMLElement;
 use VuFind\Exception\ILS as ILSException;
-use Zend\Http\Headers;
 
 /**
  * Alma ILS Driver
@@ -41,7 +41,7 @@ use Zend\Http\Headers;
  * @link     https://vufind.org/wiki/development:plugins:ils_drivers Wiki
  */
 class Alma extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterface,
-    \Zend\Log\LoggerAwareInterface
+    \Laminas\Log\LoggerAwareInterface
 {
     use \VuFindHttp\HttpServiceAwareTrait;
     use \VuFind\Log\LoggerAwareTrait;
@@ -1462,7 +1462,7 @@ class Alma extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterface
         );
 
         // Set HTTP method
-        $client->setMethod(\Zend\Http\Request::METHOD_POST);
+        $client->setMethod(\Laminas\Http\Request::METHOD_POST);
 
         // Set body
         $client->setRawBody(json_encode($body));
diff --git a/module/VuFind/src/VuFind/ILS/Driver/AlmaFactory.php b/module/VuFind/src/VuFind/ILS/Driver/AlmaFactory.php
index a488dae02d9..df06d978bb4 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/AlmaFactory.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/AlmaFactory.php
@@ -29,9 +29,9 @@ namespace VuFind\ILS\Driver;
 
 use Interop\Container\ContainerInterface;
 use Interop\Container\Exception\ContainerException;
-use Zend\ServiceManager\Exception\ServiceNotCreatedException;
-use Zend\ServiceManager\Exception\ServiceNotFoundException;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Exception\ServiceNotCreatedException;
+use Laminas\ServiceManager\Exception\ServiceNotFoundException;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Alma ILS driver factory.
diff --git a/module/VuFind/src/VuFind/ILS/Driver/CacheTrait.php b/module/VuFind/src/VuFind/ILS/Driver/CacheTrait.php
index df126460fa9..65f83c6ee34 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/CacheTrait.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/CacheTrait.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\ILS\Driver;
 
+use Laminas\Cache\Storage\StorageInterface;
 use VuFind\Cache\KeyGeneratorTrait;
-use Zend\Cache\Storage\StorageInterface;
 
 /**
  * Default ILS driver base class.
diff --git a/module/VuFind/src/VuFind/ILS/Driver/DAIA.php b/module/VuFind/src/VuFind/ILS/Driver/DAIA.php
index 828df269f2e..9609fe81719 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/DAIA.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/DAIA.php
@@ -33,9 +33,9 @@
 namespace VuFind\ILS\Driver;
 
 use DOMDocument;
+use Laminas\Log\LoggerAwareInterface as LoggerAwareInterface;
 use VuFind\Exception\ILS as ILSException;
 use VuFindHttp\HttpServiceAwareInterface as HttpServiceAwareInterface;
-use Zend\Log\LoggerAwareInterface as LoggerAwareInterface;
 
 /**
  * ILS Driver for VuFind to query availability information via DAIA.
diff --git a/module/VuFind/src/VuFind/ILS/Driver/Demo.php b/module/VuFind/src/VuFind/ILS/Driver/Demo.php
index 273d890c6e6..8f49eeff6f4 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/Demo.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/Demo.php
@@ -34,11 +34,11 @@
 namespace VuFind\ILS\Driver;
 
 use ArrayObject;
+use Laminas\Session\Container as SessionContainer;
 use VuFind\Date\DateException;
 use VuFind\Exception\ILS as ILSException;
 use VuFindSearch\Query\Query;
 use VuFindSearch\Service as SearchService;
-use Zend\Session\Container as SessionContainer;
 
 /**
  * Advanced Dummy ILS Driver -- Returns sample values based on Solr index.
diff --git a/module/VuFind/src/VuFind/ILS/Driver/DemoFactory.php b/module/VuFind/src/VuFind/ILS/Driver/DemoFactory.php
index f3dc65a72f4..95f3e24fa97 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/DemoFactory.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/DemoFactory.php
@@ -61,8 +61,8 @@ class DemoFactory extends DriverWithDateConverterFactory
             throw new \Exception('Unexpected options passed to factory.');
         }
         $sessionFactory = function ($ns) use ($container) {
-            $manager = $container->get(\Zend\Session\SessionManager::class);
-            return new \Zend\Session\Container('DemoDriver' . $ns, $manager);
+            $manager = $container->get(\Laminas\Session\SessionManager::class);
+            return new \Laminas\Session\Container('DemoDriver' . $ns, $manager);
         };
         return parent::__invoke(
             $container, $requestedName,
diff --git a/module/VuFind/src/VuFind/ILS/Driver/DriverWithDateConverterFactory.php b/module/VuFind/src/VuFind/ILS/Driver/DriverWithDateConverterFactory.php
index 9d87a28ddf1..9b023a762b2 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/DriverWithDateConverterFactory.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/DriverWithDateConverterFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ILS\Driver;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Generic factory suitable for most ILS drivers.
diff --git a/module/VuFind/src/VuFind/ILS/Driver/Folio.php b/module/VuFind/src/VuFind/ILS/Driver/Folio.php
index 6f56f46f2e4..118fa46f287 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/Folio.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/Folio.php
@@ -74,7 +74,7 @@ class Folio extends AbstractAPI implements
     /**
      * Session cache
      *
-     * @var \Zend\Session\Container
+     * @var \Laminas\Session\Container
      */
     protected $sessionCache;
 
@@ -121,10 +121,11 @@ class Folio extends AbstractAPI implements
     /**
      * Function that obscures and logs debug data
      *
-     * @param string             $method      Request method GET/POST/PUT/DELETE/etc
-     * @param string             $path        Request URL
-     * @param array              $params      Request parameters
-     * @param \Zend\Http\Headers $req_headers Headers object
+     * @param string                $method      Request method
+     * (GET/POST/PUT/DELETE/etc.)
+     * @param string                $path        Request URL
+     * @param array                 $params      Request parameters
+     * @param \Laminas\Http\Headers $req_headers Headers object
      *
      * @return void
      */
@@ -160,12 +161,12 @@ class Folio extends AbstractAPI implements
      *
      * Add X-Okapi headers and Content-Type to every request
      *
-     * @param \Zend\Http\Headers $headers the request headers
-     * @param object             $params  the parameters object
+     * @param \Laminas\Http\Headers $headers the request headers
+     * @param object                $params  the parameters object
      *
      * @return array
      */
-    public function preRequest(\Zend\Http\Headers $headers, $params)
+    public function preRequest(\Laminas\Http\Headers $headers, $params)
     {
         $headers->addHeaderLine('Accept', 'application/json');
         if (!$headers->has('Content-Type')) {
diff --git a/module/VuFind/src/VuFind/ILS/Driver/FolioFactory.php b/module/VuFind/src/VuFind/ILS/Driver/FolioFactory.php
index d44b0bddc5c..5e7508bf021 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/FolioFactory.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/FolioFactory.php
@@ -61,8 +61,8 @@ class FolioFactory extends DriverWithDateConverterFactory
             throw new \Exception('Unexpected options passed to factory.');
         }
         $sessionFactory = function ($namespace) use ($container) {
-            $manager = $container->get(\Zend\Session\SessionManager::class);
-            return new \Zend\Session\Container("Folio_$namespace", $manager);
+            $manager = $container->get(\Laminas\Session\SessionManager::class);
+            return new \Laminas\Session\Container("Folio_$namespace", $manager);
         };
         return parent::__invoke($container, $requestedName, [$sessionFactory]);
     }
diff --git a/module/VuFind/src/VuFind/ILS/Driver/Horizon.php b/module/VuFind/src/VuFind/ILS/Driver/Horizon.php
index 6ee8a0d3882..143efaea1f1 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/Horizon.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/Horizon.php
@@ -28,10 +28,10 @@
  */
 namespace VuFind\ILS\Driver;
 
+use Laminas\Log\LoggerAwareInterface;
 use PDO;
 use VuFind\Exception\ILS as ILSException;
 use VuFind\Log\LoggerAwareTrait;
-use Zend\Log\LoggerAwareInterface;
 
 /**
  * Horizon ILS Driver
diff --git a/module/VuFind/src/VuFind/ILS/Driver/KohaILSDI.php b/module/VuFind/src/VuFind/ILS/Driver/KohaILSDI.php
index e528c429e46..70407f92871 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/KohaILSDI.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/KohaILSDI.php
@@ -46,7 +46,7 @@ use VuFind\Exception\ILS as ILSException;
  * @link     https://vufind.org/wiki/development:plugins:ils_drivers Wiki
  */
 class KohaILSDI extends \VuFind\ILS\Driver\AbstractBase implements
-    \VuFindHttp\HttpServiceAwareInterface, \Zend\Log\LoggerAwareInterface
+    \VuFindHttp\HttpServiceAwareInterface, \Laminas\Log\LoggerAwareInterface
 {
     use CacheTrait {
         getCacheKey as protected getBaseCacheKey;
diff --git a/module/VuFind/src/VuFind/ILS/Driver/MultiBackend.php b/module/VuFind/src/VuFind/ILS/Driver/MultiBackend.php
index d1c2cb57516..4c9c455e909 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/MultiBackend.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/MultiBackend.php
@@ -42,7 +42,7 @@ use VuFind\Exception\ILS as ILSException;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development:plugins:ils_drivers Wiki
  */
-class MultiBackend extends AbstractBase implements \Zend\Log\LoggerAwareInterface
+class MultiBackend extends AbstractBase implements \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait {
         logError as error;
@@ -1517,7 +1517,7 @@ class MultiBackend extends AbstractBase implements \Zend\Log\LoggerAwareInterfac
                 : $this->driversConfigPath . '/' . $source;
 
             $config = $this->configLoader->get($path);
-        } catch (\Zend\Config\Exception\RuntimeException $e) {
+        } catch (\Laminas\Config\Exception\RuntimeException $e) {
             // Configuration loading failed; probably means file does not
             // exist -- just return an empty array in that case:
             $this->error("Could not load config for $source");
diff --git a/module/VuFind/src/VuFind/ILS/Driver/MultiBackendFactory.php b/module/VuFind/src/VuFind/ILS/Driver/MultiBackendFactory.php
index 232f916b67c..b287c775f6a 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/MultiBackendFactory.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/MultiBackendFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ILS\Driver;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for MultiBackend ILS driver.
diff --git a/module/VuFind/src/VuFind/ILS/Driver/NoILSFactory.php b/module/VuFind/src/VuFind/ILS/Driver/NoILSFactory.php
index 08654dbe280..2c4929c7954 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/NoILSFactory.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/NoILSFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ILS\Driver;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for NoILS ILS driver.
diff --git a/module/VuFind/src/VuFind/ILS/Driver/PAIA.php b/module/VuFind/src/VuFind/ILS/Driver/PAIA.php
index 12d7b9ef4d7..a3bc1971435 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/PAIA.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/PAIA.php
@@ -76,14 +76,14 @@ class PAIA extends DAIA
     /**
      * Session containing PAIA login information
      *
-     * @var \Zend\Session\Container
+     * @var \Laminas\Session\Container
      */
     protected $session;
 
     /**
      * SessionManager
      *
-     * @var \Zend\Session\SessionManager
+     * @var \Laminas\Session\SessionManager
      */
     protected $sessionManager;
 
@@ -127,11 +127,11 @@ class PAIA extends DAIA
     /**
      * Constructor
      *
-     * @param \VuFind\Date\Converter       $converter      Date converter
-     * @param \Zend\Session\SessionManager $sessionManager Session Manager
+     * @param \VuFind\Date\Converter          $converter      Date converter
+     * @param \Laminas\Session\SessionManager $sessionManager Session Manager
      */
     public function __construct(\VuFind\Date\Converter $converter,
-        \Zend\Session\SessionManager $sessionManager
+        \Laminas\Session\SessionManager $sessionManager
     ) {
         parent::__construct($converter);
         $this->sessionManager = $sessionManager;
@@ -162,7 +162,7 @@ class PAIA extends DAIA
     {
         // SessionContainer not defined yet? Build it now:
         if (null === $this->session) {
-            $this->session = new \Zend\Session\Container(
+            $this->session = new \Laminas\Session\Container(
                 'PAIA', $this->sessionManager
             );
         }
@@ -2040,7 +2040,7 @@ class PAIA extends DAIA
         try {
             $client = $this->httpService->createClient(
                 $this->paiaURL . $file,
-                \Zend\Http\Request::METHOD_DELETE,
+                \Laminas\Http\Request::METHOD_DELETE,
                 $this->paiaTimeout
             );
             $client->setHeaders($http_headers);
diff --git a/module/VuFind/src/VuFind/ILS/Driver/PAIAFactory.php b/module/VuFind/src/VuFind/ILS/Driver/PAIAFactory.php
index f7d54d8a9d3..e9e3aa0118f 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/PAIAFactory.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/PAIAFactory.php
@@ -62,7 +62,7 @@ class PAIAFactory extends DriverWithDateConverterFactory
         }
         return parent::__invoke(
             $container, $requestedName,
-            [$container->get(\Zend\Session\SessionManager::class)]
+            [$container->get(\Laminas\Session\SessionManager::class)]
         );
     }
 }
diff --git a/module/VuFind/src/VuFind/ILS/Driver/PluginManager.php b/module/VuFind/src/VuFind/ILS/Driver/PluginManager.php
index 63bda229895..6118243fa51 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/PluginManager.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/PluginManager.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\ILS\Driver;
 
-use Zend\ServiceManager\Factory\InvokableFactory;
+use Laminas\ServiceManager\Factory\InvokableFactory;
 
 /**
  * ILS driver plugin manager
diff --git a/module/VuFind/src/VuFind/ILS/Driver/SierraRest.php b/module/VuFind/src/VuFind/ILS/Driver/SierraRest.php
index 3f7420ed65a..ea4912bda7f 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/SierraRest.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/SierraRest.php
@@ -27,11 +27,11 @@
  */
 namespace VuFind\ILS\Driver;
 
+use Laminas\Log\LoggerAwareInterface;
 use VuFind\Exception\ILS as ILSException;
 use VuFind\Exception\VuFind\Exception;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
 use VuFindHttp\HttpServiceAwareInterface;
-use Zend\Log\LoggerAwareInterface;
 
 /**
  * III Sierra REST API driver
@@ -76,7 +76,7 @@ class SierraRest extends AbstractBase implements TranslatorAwareInterface,
     /**
      * Session cache
      *
-     * @var \Zend\Session\Container
+     * @var \Laminas\Session\Container
      */
     protected $sessionCache;
 
@@ -1587,7 +1587,7 @@ class SierraRest extends AbstractBase implements TranslatorAwareInterface,
      *
      * @param string $url Request URL
      *
-     * @return \Zend\Http\Client
+     * @return \Laminas\Http\Client
      */
     protected function createHttpClient($url)
     {
diff --git a/module/VuFind/src/VuFind/ILS/Driver/SierraRestFactory.php b/module/VuFind/src/VuFind/ILS/Driver/SierraRestFactory.php
index 05943e737c1..02547f52178 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/SierraRestFactory.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/SierraRestFactory.php
@@ -61,8 +61,8 @@ class SierraRestFactory extends DriverWithDateConverterFactory
             throw new \Exception('Unexpected options passed to factory.');
         }
         $sessionFactory = function ($namespace) use ($container) {
-            $manager = $container->get(\Zend\Session\SessionManager::class);
-            return new \Zend\Session\Container("SierraRest_$namespace", $manager);
+            $manager = $container->get(\Laminas\Session\SessionManager::class);
+            return new \Laminas\Session\Container("SierraRest_$namespace", $manager);
         };
         return parent::__invoke($container, $requestedName, [$sessionFactory]);
     }
diff --git a/module/VuFind/src/VuFind/ILS/Driver/Symphony.php b/module/VuFind/src/VuFind/ILS/Driver/Symphony.php
index 353ded512da..ea37d994f85 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/Symphony.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/Symphony.php
@@ -28,13 +28,13 @@
  */
 namespace VuFind\ILS\Driver;
 
+use Laminas\Log\LoggerAwareInterface;
 use SoapClient;
 use SoapFault;
 use SoapHeader;
 use VuFind\Cache\Manager as CacheManager;
 use VuFind\Exception\ILS as ILSException;
 use VuFind\Record\Loader;
-use Zend\Log\LoggerAwareInterface;
 
 /**
  * Symphony Web Services (symws) ILS Driver
diff --git a/module/VuFind/src/VuFind/ILS/Driver/SymphonyFactory.php b/module/VuFind/src/VuFind/ILS/Driver/SymphonyFactory.php
index e89fb7dace8..853cec27919 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/SymphonyFactory.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/SymphonyFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ILS\Driver;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for Symphony ILS driver.
diff --git a/module/VuFind/src/VuFind/ILS/Driver/Voyager.php b/module/VuFind/src/VuFind/ILS/Driver/Voyager.php
index 28d24d13885..296502a4b27 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/Voyager.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/Voyager.php
@@ -31,13 +31,13 @@
 namespace VuFind\ILS\Driver;
 
 use File_MARC;
+use Laminas\Validator\EmailAddress as EmailAddressValidator;
 use PDO;
 use PDOException;
 use VuFind\Date\DateException;
 use VuFind\Exception\ILS as ILSException;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
 use Yajra\Pdo\Oci8;
-use Zend\Validator\EmailAddress as EmailAddressValidator;
 
 /**
  * Voyager ILS Driver
@@ -51,7 +51,7 @@ use Zend\Validator\EmailAddress as EmailAddressValidator;
  * @link     https://vufind.org/wiki/development:plugins:ils_drivers Wiki
  */
 class Voyager extends AbstractBase
-    implements TranslatorAwareInterface, \Zend\Log\LoggerAwareInterface
+    implements TranslatorAwareInterface, \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\I18n\Translator\TranslatorAwareTrait;
     use \VuFind\Log\LoggerAwareTrait {
diff --git a/module/VuFind/src/VuFind/ILS/Driver/VoyagerRestful.php b/module/VuFind/src/VuFind/ILS/Driver/VoyagerRestful.php
index e1a7ad153cb..8f729cb44bf 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/VoyagerRestful.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/VoyagerRestful.php
@@ -136,7 +136,7 @@ class VoyagerRestful extends Voyager implements \VuFindHttp\HttpServiceAwareInte
      * Web Services cookies. Required for at least renewals (for JSESSIONID) as
      * documented at http://www.exlibrisgroup.org/display/VoyagerOI/Renew
      *
-     * @var \Zend\Http\Response\Header\SetCookie[]
+     * @var \Laminas\Http\Response\Header\SetCookie[]
      */
     protected $cookies = false;
 
diff --git a/module/VuFind/src/VuFind/ILS/HoldSettings.php b/module/VuFind/src/VuFind/ILS/HoldSettings.php
index 2ea4fa44326..67a6dfd7c1e 100644
--- a/module/VuFind/src/VuFind/ILS/HoldSettings.php
+++ b/module/VuFind/src/VuFind/ILS/HoldSettings.php
@@ -49,17 +49,17 @@ class HoldSettings
     /**
      * ILS configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $config Configuration representing the [Catalog]
+     * @param \Laminas\Config\Config $config Configuration representing the [Catalog]
      * section of config.ini
      */
-    public function __construct(\Zend\Config\Config $config)
+    public function __construct(\Laminas\Config\Config $config)
     {
         $this->config = $config;
     }
diff --git a/module/VuFind/src/VuFind/ILS/HoldSettingsFactory.php b/module/VuFind/src/VuFind/ILS/HoldSettingsFactory.php
index 810b1427b8d..2ac220849f4 100644
--- a/module/VuFind/src/VuFind/ILS/HoldSettingsFactory.php
+++ b/module/VuFind/src/VuFind/ILS/HoldSettingsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ILS;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * ILS hold settings factory
diff --git a/module/VuFind/src/VuFind/ILS/Logic/Holds.php b/module/VuFind/src/VuFind/ILS/Logic/Holds.php
index 507fd5d1256..7de0258743d 100644
--- a/module/VuFind/src/VuFind/ILS/Logic/Holds.php
+++ b/module/VuFind/src/VuFind/ILS/Logic/Holds.php
@@ -67,7 +67,7 @@ class Holds
     /**
      * VuFind configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
@@ -84,10 +84,10 @@ class Holds
      * @param \VuFind\Auth\ILSAuthenticator $ilsAuth ILS authenticator
      * @param ILSConnection                 $ils     A catalog connection
      * @param \VuFind\Crypt\HMAC            $hmac    HMAC generator
-     * @param \Zend\Config\Config           $config  VuFind configuration
+     * @param \Laminas\Config\Config        $config  VuFind configuration
      */
     public function __construct(\VuFind\Auth\ILSAuthenticator $ilsAuth,
-        ILSConnection $ils, \VuFind\Crypt\HMAC $hmac, \Zend\Config\Config $config
+        ILSConnection $ils, \VuFind\Crypt\HMAC $hmac, \Laminas\Config\Config $config
     ) {
         $this->ilsAuth = $ilsAuth;
         $this->hmac = $hmac;
diff --git a/module/VuFind/src/VuFind/ILS/Logic/LogicFactory.php b/module/VuFind/src/VuFind/ILS/Logic/LogicFactory.php
index 33c0d2ff01b..e0782b1559c 100644
--- a/module/VuFind/src/VuFind/ILS/Logic/LogicFactory.php
+++ b/module/VuFind/src/VuFind/ILS/Logic/LogicFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ILS\Logic;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Shared factory for ILS logic classes.
diff --git a/module/VuFind/src/VuFind/ILS/Logic/TitleHolds.php b/module/VuFind/src/VuFind/ILS/Logic/TitleHolds.php
index 393213a9546..68f9dc3de1a 100644
--- a/module/VuFind/src/VuFind/ILS/Logic/TitleHolds.php
+++ b/module/VuFind/src/VuFind/ILS/Logic/TitleHolds.php
@@ -67,7 +67,7 @@ class TitleHolds
     /**
      * VuFind configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
@@ -84,10 +84,10 @@ class TitleHolds
      * @param \VuFind\Auth\ILSAuthenticator $ilsAuth ILS authenticator
      * @param ILSConnection                 $ils     A catalog connection
      * @param \VuFind\Crypt\HMAC            $hmac    HMAC generator
-     * @param \Zend\Config\Config           $config  VuFind configuration
+     * @param \Laminas\Config\Config        $config  VuFind configuration
      */
     public function __construct(\VuFind\Auth\ILSAuthenticator $ilsAuth,
-        ILSConnection $ils, \VuFind\Crypt\HMAC $hmac, \Zend\Config\Config $config
+        ILSConnection $ils, \VuFind\Crypt\HMAC $hmac, \Laminas\Config\Config $config
     ) {
         $this->ilsAuth = $ilsAuth;
         $this->hmac = $hmac;
diff --git a/module/VuFind/src/VuFind/ILS/PaginationHelper.php b/module/VuFind/src/VuFind/ILS/PaginationHelper.php
index ef675efef42..1fcbdd3e563 100644
--- a/module/VuFind/src/VuFind/ILS/PaginationHelper.php
+++ b/module/VuFind/src/VuFind/ILS/PaginationHelper.php
@@ -139,7 +139,7 @@ class PaginationHelper
      * @param int   $count       Result count
      * @param array $records     Result records
      *
-     * @return false|\Zend\Paginator\Paginator
+     * @return false|\Laminas\Paginator\Paginator
      */
     public function getPaginator($pageOptions, $count, $records)
     {
@@ -149,13 +149,13 @@ class PaginationHelper
             throw new \VuFind\Exception\BadRequest('Page number out of range.');
         }
         if ($pageOptions['ilsPaging'] && $limit < $count) {
-            $adapter = new \Zend\Paginator\Adapter\NullFill($count);
+            $adapter = new \Laminas\Paginator\Adapter\NullFill($count);
         } elseif ($limit > 0 && $limit < $count) {
-            $adapter = new \Zend\Paginator\Adapter\ArrayAdapter($records);
+            $adapter = new \Laminas\Paginator\Adapter\ArrayAdapter($records);
         } else {
             return false;
         }
-        $paginator = new \Zend\Paginator\Paginator($adapter);
+        $paginator = new \Laminas\Paginator\Paginator($adapter);
         $paginator->setItemCountPerPage($limit);
         $paginator->setCurrentPageNumber($page);
         return $paginator;
diff --git a/module/VuFind/src/VuFind/ImageLoader.php b/module/VuFind/src/VuFind/ImageLoader.php
index 4746b27e350..e857f5ab888 100644
--- a/module/VuFind/src/VuFind/ImageLoader.php
+++ b/module/VuFind/src/VuFind/ImageLoader.php
@@ -38,7 +38,7 @@ namespace VuFind;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/configuration:external_content Wiki
  */
-class ImageLoader implements \Zend\Log\LoggerAwareInterface
+class ImageLoader implements \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
 
diff --git a/module/VuFind/src/VuFind/Log/Logger.php b/module/VuFind/src/VuFind/Log/Logger.php
index 3eb1c967bf3..a8ca47b2afd 100644
--- a/module/VuFind/src/VuFind/Log/Logger.php
+++ b/module/VuFind/src/VuFind/Log/Logger.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Log;
 
-use Zend\Log\Logger as BaseLogger;
+use Laminas\Log\Logger as BaseLogger;
 
 /**
  * This class wraps the BaseLogger class to allow for log verbosity
@@ -116,8 +116,8 @@ class Logger extends BaseLogger
     /**
      * Log an exception triggered by the framework for administrative purposes.
      *
-     * @param \Exception              $error  Exception to log
-     * @param \Zend\Stdlib\Parameters $server Server metadata
+     * @param \Exception                 $error  Exception to log
+     * @param \Laminas\Stdlib\Parameters $server Server metadata
      *
      * @return void
      */
diff --git a/module/VuFind/src/VuFind/Log/LoggerAwareTrait.php b/module/VuFind/src/VuFind/Log/LoggerAwareTrait.php
index c5326f297a8..1dacd2498cb 100644
--- a/module/VuFind/src/VuFind/Log/LoggerAwareTrait.php
+++ b/module/VuFind/src/VuFind/Log/LoggerAwareTrait.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * Extension of \Zend\Log\LoggerAwareTrait with some convenience methods.
+ * Extension of \Laminas\Log\LoggerAwareTrait with some convenience methods.
  *
  * PHP version 7
  *
@@ -28,7 +28,7 @@
 namespace VuFind\Log;
 
 /**
- * Extension of \Zend\Log\LoggerAwareTrait with some convenience methods.
+ * Extension of \Laminas\Log\LoggerAwareTrait with some convenience methods.
  *
  * @category VuFind
  * @package  Error_Logging
@@ -38,7 +38,7 @@ namespace VuFind\Log;
  */
 trait LoggerAwareTrait
 {
-    use \Zend\Log\LoggerAwareTrait;
+    use \Laminas\Log\LoggerAwareTrait;
 
     /**
      * Log an error message.
diff --git a/module/VuFind/src/VuFind/Log/LoggerFactory.php b/module/VuFind/src/VuFind/Log/LoggerFactory.php
index bd49125f1c8..7f74574448c 100644
--- a/module/VuFind/src/VuFind/Log/LoggerFactory.php
+++ b/module/VuFind/src/VuFind/Log/LoggerFactory.php
@@ -28,10 +28,10 @@
 namespace VuFind\Log;
 
 use Interop\Container\ContainerInterface;
-use Zend\Config\Config;
-use Zend\Console\Console;
-use Zend\Log\Writer\WriterInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\Config\Config;
+use Laminas\Console\Console;
+use Laminas\Log\Writer\WriterInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for instantiating Logger
@@ -72,7 +72,7 @@ class LoggerFactory implements FactoryInterface
         // Make Writers
         $filters = explode(',', $error_types);
         $writer = new Writer\Db(
-            $container->get(\Zend\Db\Adapter\Adapter::class),
+            $container->get(\Laminas\Db\Adapter\Adapter::class),
             $table_name, $columnMapping
         );
         $this->addWriters($logger, $writer, $filters);
@@ -169,7 +169,7 @@ class LoggerFactory implements FactoryInterface
             $options
         );
         $writer->setContentType('application/json');
-        $formatter = new \Zend\Log\Formatter\Simple(
+        $formatter = new \Laminas\Log\Formatter\Simple(
             "*%priorityName%*: %message%"
         );
         $writer->setFormatter($formatter);
@@ -244,7 +244,7 @@ class LoggerFactory implements FactoryInterface
 
         // Null (no-op) writer to avoid errors
         if (!$hasWriter) {
-            $logger->addWriter(new \Zend\Log\Writer\Noop());
+            $logger->addWriter(new \Laminas\Log\Writer\Noop());
         }
     }
 
@@ -266,7 +266,7 @@ class LoggerFactory implements FactoryInterface
 
         $hasDebugWriter = true;
         $writer = new Writer\Stream('php://output');
-        $formatter = new \Zend\Log\Formatter\Simple(
+        $formatter = new \Laminas\Log\Formatter\Simple(
             '<pre>%timestamp% %priorityName%: %message%</pre>' . PHP_EOL
         );
         $writer->setFormatter($formatter);
@@ -301,7 +301,7 @@ class LoggerFactory implements FactoryInterface
             $verbosity = $parts[1] ?? false;
 
             // VuFind's configuration provides four priority options, each
-            // combining two of the standard Zend levels.
+            // combining two of the standard Laminas levels.
             switch (trim($priority)) {
             case 'debug':
                 // Set static flag indicating that debug is turned on:
@@ -344,8 +344,8 @@ class LoggerFactory implements FactoryInterface
             }
 
             // filtering -- only log messages between the min and max priority levels
-            $filter1 = new \Zend\Log\Filter\Priority($min, '<=');
-            $filter2 = new \Zend\Log\Filter\Priority($max, '>=');
+            $filter1 = new \Laminas\Log\Filter\Priority($min, '<=');
+            $filter2 = new \Laminas\Log\Filter\Priority($max, '>=');
             $newWriter->addFilter($filter1);
             $newWriter->addFilter($filter2);
 
diff --git a/module/VuFind/src/VuFind/Log/Writer/Db.php b/module/VuFind/src/VuFind/Log/Writer/Db.php
index 06799e9e725..096ebfd482c 100644
--- a/module/VuFind/src/VuFind/Log/Writer/Db.php
+++ b/module/VuFind/src/VuFind/Log/Writer/Db.php
@@ -28,7 +28,7 @@
 namespace VuFind\Log\Writer;
 
 /**
- * This class extends the Zend Logging towards DB
+ * This class extends the Laminas Logging towards DB
  *
  * @category VuFind
  * @package  Error_Logging
@@ -36,7 +36,7 @@ namespace VuFind\Log\Writer;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Site
  */
-class Db extends \Zend\Log\Writer\Db
+class Db extends \Laminas\Log\Writer\Db
 {
     use VerbosityTrait;
 
@@ -46,7 +46,7 @@ class Db extends \Zend\Log\Writer\Db
      * @param array $event event data
      *
      * @return void
-     * @throws \Zend\Log\Exception\RuntimeException
+     * @throws \Laminas\Log\Exception\RuntimeException
      */
     protected function doWrite(array $event)
     {
diff --git a/module/VuFind/src/VuFind/Log/Writer/Mail.php b/module/VuFind/src/VuFind/Log/Writer/Mail.php
index 7df3132b303..64255cf74e9 100644
--- a/module/VuFind/src/VuFind/Log/Writer/Mail.php
+++ b/module/VuFind/src/VuFind/Log/Writer/Mail.php
@@ -28,7 +28,7 @@
 namespace VuFind\Log\Writer;
 
 /**
- * This class extends the Zend Logging towards Mail systems
+ * This class extends the Laminas Logging towards Mail systems
  *
  * @category VuFind
  * @package  Error_Logging
@@ -36,7 +36,7 @@ namespace VuFind\Log\Writer;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Site
  */
-class Mail extends \Zend\Log\Writer\Mail
+class Mail extends \Laminas\Log\Writer\Mail
 {
     use VerbosityTrait;
 
@@ -46,7 +46,7 @@ class Mail extends \Zend\Log\Writer\Mail
      * @param array $event event data
      *
      * @return void
-     * @throws \Zend\Log\Exception\RuntimeException
+     * @throws \Laminas\Log\Exception\RuntimeException
      */
     protected function doWrite(array $event)
     {
diff --git a/module/VuFind/src/VuFind/Log/Writer/Post.php b/module/VuFind/src/VuFind/Log/Writer/Post.php
index e638eadc7f9..e9733208189 100644
--- a/module/VuFind/src/VuFind/Log/Writer/Post.php
+++ b/module/VuFind/src/VuFind/Log/Writer/Post.php
@@ -27,10 +27,10 @@
  */
 namespace VuFind\Log\Writer;
 
-use Zend\Http\Client;
+use Laminas\Http\Client;
 
 /**
- * This class extends the Zend Logging to sent POST messages over HTTP
+ * This class extends the Laminas Logging to sent POST messages over HTTP
  *
  * @category VuFind
  * @package  Error_Logging
@@ -38,7 +38,7 @@ use Zend\Http\Client;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Site
  */
-class Post extends \Zend\Log\Writer\AbstractWriter
+class Post extends \Laminas\Log\Writer\AbstractWriter
 {
     use VerbosityTrait;
 
@@ -52,7 +52,7 @@ class Post extends \Zend\Log\Writer\AbstractWriter
     /**
      * Pre-configured http client
      *
-     * @var \Zend\Http\Client
+     * @var \Laminas\Http\Client
      */
     protected $client = null;
 
@@ -105,7 +105,7 @@ class Post extends \Zend\Log\Writer\AbstractWriter
      * @param array $event event data
      *
      * @return void
-     * @throws \Zend\Log\Exception\RuntimeException
+     * @throws \Laminas\Log\Exception\RuntimeException
      */
     protected function doWrite(array $event)
     {
diff --git a/module/VuFind/src/VuFind/Log/Writer/Slack.php b/module/VuFind/src/VuFind/Log/Writer/Slack.php
index f6dda44f6cf..a7d44fd37ab 100644
--- a/module/VuFind/src/VuFind/Log/Writer/Slack.php
+++ b/module/VuFind/src/VuFind/Log/Writer/Slack.php
@@ -27,10 +27,10 @@
  */
 namespace VuFind\Log\Writer;
 
-use Zend\Http\Client;
+use Laminas\Http\Client;
 
 /**
- * This class extends the Zend Logging to send errors to Slack
+ * This class extends the Laminas Logging to send errors to Slack
  *
  * @category VuFind
  * @package  Error_Logging
diff --git a/module/VuFind/src/VuFind/Log/Writer/Stream.php b/module/VuFind/src/VuFind/Log/Writer/Stream.php
index 8567fa3088f..963e42ecffc 100644
--- a/module/VuFind/src/VuFind/Log/Writer/Stream.php
+++ b/module/VuFind/src/VuFind/Log/Writer/Stream.php
@@ -28,7 +28,7 @@
 namespace VuFind\Log\Writer;
 
 /**
- * This class extends the Zend Logging towards streams
+ * This class extends the Laminas Logging towards streams
  *
  * @category VuFind
  * @package  Error_Logging
@@ -36,7 +36,7 @@ namespace VuFind\Log\Writer;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Site
  */
-class Stream extends \Zend\Log\Writer\Stream
+class Stream extends \Laminas\Log\Writer\Stream
 {
     use VerbosityTrait;
 
@@ -46,7 +46,7 @@ class Stream extends \Zend\Log\Writer\Stream
      * @param array $event event data
      *
      * @return void
-     * @throws \Zend\Log\Exception\RuntimeException
+     * @throws \Laminas\Log\Exception\RuntimeException
      */
     protected function doWrite(array $event)
     {
diff --git a/module/VuFind/src/VuFind/Mailer/Factory.php b/module/VuFind/src/VuFind/Mailer/Factory.php
index 4fcc86269fd..026365f0146 100644
--- a/module/VuFind/src/VuFind/Mailer/Factory.php
+++ b/module/VuFind/src/VuFind/Mailer/Factory.php
@@ -28,10 +28,10 @@
 namespace VuFind\Mailer;
 
 use Interop\Container\ContainerInterface;
-use Zend\Mail\Transport\InMemory;
-use Zend\Mail\Transport\Smtp;
-use Zend\Mail\Transport\SmtpOptions;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\Mail\Transport\InMemory;
+use Laminas\Mail\Transport\Smtp;
+use Laminas\Mail\Transport\SmtpOptions;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for instantiating Mailer objects
@@ -49,7 +49,7 @@ class Factory implements FactoryInterface
     /**
      * Build the mail transport object.
      *
-     * @param \Zend\Config\Config $config Configuration
+     * @param \Laminas\Config\Config $config Configuration
      *
      * @return InMemory|Smtp
      */
diff --git a/module/VuFind/src/VuFind/Mailer/Mailer.php b/module/VuFind/src/VuFind/Mailer/Mailer.php
index 98deb61a34e..dd61e501841 100644
--- a/module/VuFind/src/VuFind/Mailer/Mailer.php
+++ b/module/VuFind/src/VuFind/Mailer/Mailer.php
@@ -27,11 +27,12 @@
  */
 namespace VuFind\Mailer;
 
+use Laminas\Mail\Address;
+use Laminas\Mail\AddressList;
+use Laminas\Mail\Header\ContentType;
+use Laminas\Mail\Message;
+use Laminas\Mail\Transport\TransportInterface;
 use VuFind\Exception\Mail as MailException;
-use Zend\Mail\Address;
-use Zend\Mail\AddressList;
-use Zend\Mail\Header\ContentType;
-use Zend\Mail\Message;
 
 /**
  * VuFind Mailer Class
@@ -49,7 +50,7 @@ class Mailer implements \VuFind\I18n\Translator\TranslatorAwareInterface
     /**
      * Mail transport
      *
-     * @var \Zend\Mail\Transport\TransportInterface
+     * @var TransportInterface
      */
     protected $transport;
 
@@ -70,9 +71,9 @@ class Mailer implements \VuFind\I18n\Translator\TranslatorAwareInterface
     /**
      * Constructor
      *
-     * @param \Zend\Mail\Transport\TransportInterface $transport Mail transport
+     * @param TransportInterface $transport Mail transport
      */
-    public function __construct(\Zend\Mail\Transport\TransportInterface $transport)
+    public function __construct(TransportInterface $transport)
     {
         $this->setTransport($transport);
     }
@@ -80,7 +81,7 @@ class Mailer implements \VuFind\I18n\Translator\TranslatorAwareInterface
     /**
      * Get the mail transport object.
      *
-     * @return \Zend\Mail\Transport\TransportInterface
+     * @return TransportInterface
      */
     public function getTransport()
     {
@@ -122,8 +123,7 @@ class Mailer implements \VuFind\I18n\Translator\TranslatorAwareInterface
     /**
      * Set the mail transport object.
      *
-     * @param \Zend\Mail\Transport\TransportInterface $transport Mail transport
-     * object
+     * @param TransportInterface $transport Mail transport object
      *
      * @return void
      */
@@ -178,7 +178,7 @@ class Mailer implements \VuFind\I18n\Translator\TranslatorAwareInterface
                 throw new MailException('Too Many Email Recipients');
             }
         }
-        $validator = new \Zend\Validator\EmailAddress();
+        $validator = new \Laminas\Validator\EmailAddress();
         if (count($recipients) == 0) {
             throw new MailException('Invalid Recipient Email Address');
         }
@@ -240,17 +240,20 @@ class Mailer implements \VuFind\I18n\Translator\TranslatorAwareInterface
     /**
      * Send an email message representing a link.
      *
-     * @param string                          $to      Recipient email address
-     * @param string|\Zend\Mail\Address       $from    Sender name and email address
-     * @param string                          $msg     User notes to include in
+     * @param string                             $to      Recipient email address
+     * @param string|\Laminas\Mail\Address       $from    Sender name and email
+     * address
+     * @param string                             $msg     User notes to include in
      * message
-     * @param string                          $url     URL to share
-     * @param \Zend\View\Renderer\PhpRenderer $view    View object (used to render
+     * @param string                             $url     URL to share
+     * @param \Laminas\View\Renderer\PhpRenderer $view    View object (used to render
      * email templates)
-     * @param string                          $subject Subject for email (optional)
-     * @param string                          $cc      CC recipient (null for none)
-     * @param string|Address|AddressList      $replyTo Reply-To address (or delimited
-     * list, null for none)
+     * @param string                             $subject Subject for email
+     * (optional)
+     * @param string                             $cc      CC recipient (null for
+     * none)
+     * @param string|Address|AddressList         $replyTo Reply-To address (or
+     * delimited list, null for none)
      *
      * @throws MailException
      * @return void
@@ -283,17 +286,19 @@ class Mailer implements \VuFind\I18n\Translator\TranslatorAwareInterface
     /**
      * Send an email message representing a record.
      *
-     * @param string                            $to      Recipient email address
-     * @param string|\Zend\Mail\Address         $from    Sender name and email
+     * @param string                             $to      Recipient email address
+     * @param string|\Laminas\Mail\Address       $from    Sender name and email
      * address
-     * @param string                            $msg     User notes to include in
+     * @param string                             $msg     User notes to include in
      * message
-     * @param \VuFind\RecordDriver\AbstractBase $record  Record being emailed
-     * @param \Zend\View\Renderer\PhpRenderer   $view    View object (used to render
+     * @param \VuFind\RecordDriver\AbstractBase  $record  Record being emailed
+     * @param \Laminas\View\Renderer\PhpRenderer $view    View object (used to render
      * email templates)
-     * @param string                            $subject Subject for email (optional)
-     * @param string                            $cc      CC recipient (null for none)
-     * @param string|Address|AddressList        $replyTo Reply-To address (or
+     * @param string                             $subject Subject for email
+     * (optional)
+     * @param string                             $cc      CC recipient (null for
+     * none)
+     * @param string|Address|AddressList         $replyTo Reply-To address (or
      * delimited list, null for none)
      *
      * @throws MailException
diff --git a/module/VuFind/src/VuFind/OAI/Server.php b/module/VuFind/src/VuFind/OAI/Server.php
index 3710d07715e..56692fa34a7 100644
--- a/module/VuFind/src/VuFind/OAI/Server.php
+++ b/module/VuFind/src/VuFind/OAI/Server.php
@@ -230,14 +230,14 @@ class Server
     /**
      * Initialize settings
      *
-     * @param \Zend\Config\Config $config  VuFind configuration
-     * @param string              $baseURL The base URL for the OAI server
-     * @param array               $params  The incoming OAI-PMH parameters (i.e.
+     * @param \Laminas\Config\Config $config  VuFind configuration
+     * @param string                 $baseURL The base URL for the OAI server
+     * @param array                  $params  The incoming OAI-PMH parameters (i.e.
      * $_GET)
      *
      * @return void
      */
-    public function init(\Zend\Config\Config $config, $baseURL, $params)
+    public function init(\Laminas\Config\Config $config, $baseURL, $params)
     {
         $this->baseURL = $baseURL;
         $parts = parse_url($baseURL);
@@ -633,11 +633,11 @@ class Server
      * constructor and is only a separate method to allow easy override by child
      * classes).
      *
-     * @param \Zend\Config\Config $config VuFind configuration
+     * @param \Laminas\Config\Config $config VuFind configuration
      *
      * @return void
      */
-    protected function initializeSettings(\Zend\Config\Config $config)
+    protected function initializeSettings(\Laminas\Config\Config $config)
     {
         // Override default repository name if configured:
         if (isset($config->OAI->repository_name)) {
@@ -901,7 +901,7 @@ class Server
      * @param int $until         End date.
      * @param int $currentCursor Offset into result set
      *
-     * @return \Zend\Db\ResultSet\AbstractResultSet
+     * @return \Laminas\Db\ResultSet\AbstractResultSet
      */
     protected function listRecordsGetDeleted($from, $until, $currentCursor)
     {
diff --git a/module/VuFind/src/VuFind/OAI/Server/Auth.php b/module/VuFind/src/VuFind/OAI/Server/Auth.php
index cc2cbb6a30c..8713365ef00 100644
--- a/module/VuFind/src/VuFind/OAI/Server/Auth.php
+++ b/module/VuFind/src/VuFind/OAI/Server/Auth.php
@@ -63,11 +63,11 @@ class Auth extends Base
      * constructor and is only a separate method to allow easy override by child
      * classes).
      *
-     * @param \Zend\Config\Config $config VuFind configuration
+     * @param \Laminas\Config\Config $config VuFind configuration
      *
      * @return void
      */
-    protected function initializeSettings(\Zend\Config\Config $config)
+    protected function initializeSettings(\Laminas\Config\Config $config)
     {
         // Use some of the same settings as the regular OAI server, but override
         // others:
diff --git a/module/VuFind/src/VuFind/OAI/ServerFactory.php b/module/VuFind/src/VuFind/OAI/ServerFactory.php
index 4d04b6cfa1e..459495bec06 100644
--- a/module/VuFind/src/VuFind/OAI/ServerFactory.php
+++ b/module/VuFind/src/VuFind/OAI/ServerFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\OAI;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * OAI Server factory.
diff --git a/module/VuFind/src/VuFind/QRCode/Loader.php b/module/VuFind/src/VuFind/QRCode/Loader.php
index 6fee252f096..8c9b1d5da7e 100644
--- a/module/VuFind/src/VuFind/QRCode/Loader.php
+++ b/module/VuFind/src/VuFind/QRCode/Loader.php
@@ -55,7 +55,7 @@ class Loader extends \VuFind\ImageLoader
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config    $config VuFind configuration
+     * @param \Laminas\Config\Config $config VuFind configuration
      * @param \VuFindTheme\ThemeInfo $theme  VuFind theme tools
      */
     public function __construct($config, \VuFindTheme\ThemeInfo $theme)
diff --git a/module/VuFind/src/VuFind/QRCode/LoaderFactory.php b/module/VuFind/src/VuFind/QRCode/LoaderFactory.php
index 4155d3f58f6..680862c3a28 100644
--- a/module/VuFind/src/VuFind/QRCode/LoaderFactory.php
+++ b/module/VuFind/src/VuFind/QRCode/LoaderFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\QRCode;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for QR Code Generator
diff --git a/module/VuFind/src/VuFind/Recommend/AbstractFacets.php b/module/VuFind/src/VuFind/Recommend/AbstractFacets.php
index 403b2874d79..8404cc4b9c6 100644
--- a/module/VuFind/src/VuFind/Recommend/AbstractFacets.php
+++ b/module/VuFind/src/VuFind/Recommend/AbstractFacets.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Recommend;
 
-use Zend\Config\Config;
+use Laminas\Config\Config;
 
 /**
  * SideFacets Recommendations Module
diff --git a/module/VuFind/src/VuFind/Recommend/AbstractResultsPassthrough.php b/module/VuFind/src/VuFind/Recommend/AbstractResultsPassthrough.php
index a199edf2b06..acb2fe61192 100644
--- a/module/VuFind/src/VuFind/Recommend/AbstractResultsPassthrough.php
+++ b/module/VuFind/src/VuFind/Recommend/AbstractResultsPassthrough.php
@@ -68,7 +68,7 @@ class AbstractResultsPassthrough implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/AbstractSummonRecommend.php b/module/VuFind/src/VuFind/Recommend/AbstractSummonRecommend.php
index 28447eb245d..206ffc3f6ea 100644
--- a/module/VuFind/src/VuFind/Recommend/AbstractSummonRecommend.php
+++ b/module/VuFind/src/VuFind/Recommend/AbstractSummonRecommend.php
@@ -97,7 +97,7 @@ abstract class AbstractSummonRecommend implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/AbstractSummonRecommendDeferred.php b/module/VuFind/src/VuFind/Recommend/AbstractSummonRecommendDeferred.php
index e04a062b3a4..bf4e20410cf 100644
--- a/module/VuFind/src/VuFind/Recommend/AbstractSummonRecommendDeferred.php
+++ b/module/VuFind/src/VuFind/Recommend/AbstractSummonRecommendDeferred.php
@@ -93,7 +93,7 @@ class AbstractSummonRecommendDeferred implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/AlphaBrowseLink.php b/module/VuFind/src/VuFind/Recommend/AlphaBrowseLink.php
index 8d7278fbeaa..350c8556098 100644
--- a/module/VuFind/src/VuFind/Recommend/AlphaBrowseLink.php
+++ b/module/VuFind/src/VuFind/Recommend/AlphaBrowseLink.php
@@ -75,7 +75,7 @@ class AlphaBrowseLink implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/AuthorFacets.php b/module/VuFind/src/VuFind/Recommend/AuthorFacets.php
index ffee275ea4e..1996b60fc30 100644
--- a/module/VuFind/src/VuFind/Recommend/AuthorFacets.php
+++ b/module/VuFind/src/VuFind/Recommend/AuthorFacets.php
@@ -28,9 +28,9 @@
  */
 namespace VuFind\Recommend;
 
+use Laminas\Http\Request;
+use Laminas\Stdlib\Parameters;
 use VuFindSearch\Query\Query;
-use Zend\Http\Request;
-use Zend\StdLib\Parameters;
 
 /**
  * AuthorFacets Recommendations Module
@@ -98,7 +98,7 @@ class AuthorFacets implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param Parameters                 $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/AuthorInfo.php b/module/VuFind/src/VuFind/Recommend/AuthorInfo.php
index 779f100b84a..83b42f65bd8 100644
--- a/module/VuFind/src/VuFind/Recommend/AuthorInfo.php
+++ b/module/VuFind/src/VuFind/Recommend/AuthorInfo.php
@@ -27,10 +27,10 @@
  */
 namespace VuFind\Recommend;
 
+use Laminas\I18n\Translator\TranslatorInterface;
 use VuFind\Connection\Wikipedia;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
 use VuFindSearch\Query\Query;
-use Zend\I18n\Translator\TranslatorInterface;
 
 /**
  * AuthorInfo Recommendations Module
@@ -54,7 +54,7 @@ class AuthorInfo implements RecommendInterface, TranslatorAwareInterface
     /**
      * HTTP client
      *
-     * @var \Zend\Http\Client
+     * @var \Laminas\Http\Client
      */
     protected $client;
 
@@ -98,12 +98,12 @@ class AuthorInfo implements RecommendInterface, TranslatorAwareInterface
      * Constructor
      *
      * @param \VuFind\Search\Results\PluginManager $results Results plugin manager
-     * @param \Zend\Http\Client                    $client  HTTP client
+     * @param \Laminas\Http\Client                 $client  HTTP client
      * @param string                               $sources Source identifiers
      * (currently, only 'wikipedia' is supported)
      */
     public function __construct(\VuFind\Search\Results\PluginManager $results,
-        \Zend\Http\Client $client, $sources = 'wikipedia'
+        \Laminas\Http\Client $client, $sources = 'wikipedia'
     ) {
         $this->resultsManager = $results;
         $this->client = $client;
@@ -150,7 +150,7 @@ class AuthorInfo implements RecommendInterface, TranslatorAwareInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/AuthorInfoFactory.php b/module/VuFind/src/VuFind/Recommend/AuthorInfoFactory.php
index 831a2fd42a9..2e1c9a75541 100644
--- a/module/VuFind/src/VuFind/Recommend/AuthorInfoFactory.php
+++ b/module/VuFind/src/VuFind/Recommend/AuthorInfoFactory.php
@@ -39,7 +39,7 @@ use VuFind\Config\PluginManager as ConfigManager;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class AuthorInfoFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class AuthorInfoFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Recommend/AuthorityRecommend.php b/module/VuFind/src/VuFind/Recommend/AuthorityRecommend.php
index 08c62ef0234..cbda8eef755 100644
--- a/module/VuFind/src/VuFind/Recommend/AuthorityRecommend.php
+++ b/module/VuFind/src/VuFind/Recommend/AuthorityRecommend.php
@@ -28,8 +28,8 @@
  */
 namespace VuFind\Recommend;
 
+use Laminas\Stdlib\Parameters;
 use VuFindSearch\Backend\Exception\RequestErrorException;
-use Zend\StdLib\Parameters;
 
 /**
  * AuthorityRecommend Module
@@ -149,7 +149,7 @@ class AuthorityRecommend implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param Parameters                 $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/CollectionSideFacetsFactory.php b/module/VuFind/src/VuFind/Recommend/CollectionSideFacetsFactory.php
index 7593eee0c53..0ac22a0c8ed 100644
--- a/module/VuFind/src/VuFind/Recommend/CollectionSideFacetsFactory.php
+++ b/module/VuFind/src/VuFind/Recommend/CollectionSideFacetsFactory.php
@@ -39,7 +39,7 @@ use Interop\Container\ContainerInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class CollectionSideFacetsFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Recommend/DOI.php b/module/VuFind/src/VuFind/Recommend/DOI.php
index 4c72b06375e..19a1725d65e 100644
--- a/module/VuFind/src/VuFind/Recommend/DOI.php
+++ b/module/VuFind/src/VuFind/Recommend/DOI.php
@@ -82,7 +82,7 @@ class DOI implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/DPLATerms.php b/module/VuFind/src/VuFind/Recommend/DPLATerms.php
index 7fb045d285b..30ded740b29 100644
--- a/module/VuFind/src/VuFind/Recommend/DPLATerms.php
+++ b/module/VuFind/src/VuFind/Recommend/DPLATerms.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Recommend;
 
-use Zend\Http\Client\Adapter\Exception\TimeoutException;
-use Zend\Http\Client as HttpClient;
+use Laminas\Http\Client\Adapter\Exception\TimeoutException;
+use Laminas\Http\Client as HttpClient;
 
 /**
  * DPLATerms Recommendations Module
@@ -126,7 +126,7 @@ class DPLATerms implements RecommendInterface
      * Abstract-required method
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/DPLATermsFactory.php b/module/VuFind/src/VuFind/Recommend/DPLATermsFactory.php
index 5288c802f2e..d8adbed6349 100644
--- a/module/VuFind/src/VuFind/Recommend/DPLATermsFactory.php
+++ b/module/VuFind/src/VuFind/Recommend/DPLATermsFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class DPLATermsFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class DPLATermsFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Recommend/Deprecated.php b/module/VuFind/src/VuFind/Recommend/Deprecated.php
index e8a98a3fd4b..ca9d08e85fb 100644
--- a/module/VuFind/src/VuFind/Recommend/Deprecated.php
+++ b/module/VuFind/src/VuFind/Recommend/Deprecated.php
@@ -58,7 +58,7 @@ class Deprecated implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/EuropeanaResults.php b/module/VuFind/src/VuFind/Recommend/EuropeanaResults.php
index a8fdf54ed80..006ec5b65e1 100644
--- a/module/VuFind/src/VuFind/Recommend/EuropeanaResults.php
+++ b/module/VuFind/src/VuFind/Recommend/EuropeanaResults.php
@@ -28,7 +28,7 @@
  */
 namespace VuFind\Recommend;
 
-use Zend\Feed\Reader\Reader as FeedReader;
+use Laminas\Feed\Reader\Reader as FeedReader;
 
 /**
  * EuropeanaResults Recommendations Module
@@ -43,7 +43,7 @@ use Zend\Feed\Reader\Reader as FeedReader;
  * @link     https://vufind.org/wiki/development:plugins:recommendation_modules Wiki
  */
 class EuropeanaResults implements RecommendInterface,
-    \VuFindHttp\HttpServiceAwareInterface, \Zend\Log\LoggerAwareInterface
+    \VuFindHttp\HttpServiceAwareInterface, \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
     use \VuFindHttp\HttpServiceAwareTrait;
@@ -188,7 +188,7 @@ class EuropeanaResults implements RecommendInterface,
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/EuropeanaResultsDeferred.php b/module/VuFind/src/VuFind/Recommend/EuropeanaResultsDeferred.php
index d26cf3ce5f4..b919a4cca78 100644
--- a/module/VuFind/src/VuFind/Recommend/EuropeanaResultsDeferred.php
+++ b/module/VuFind/src/VuFind/Recommend/EuropeanaResultsDeferred.php
@@ -82,7 +82,7 @@ class EuropeanaResultsDeferred implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/EuropeanaResultsFactory.php b/module/VuFind/src/VuFind/Recommend/EuropeanaResultsFactory.php
index 982be20c17e..0c4a94f126e 100644
--- a/module/VuFind/src/VuFind/Recommend/EuropeanaResultsFactory.php
+++ b/module/VuFind/src/VuFind/Recommend/EuropeanaResultsFactory.php
@@ -39,7 +39,7 @@ use Interop\Container\ContainerInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class EuropeanaResultsFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Recommend/ExpandFacets.php b/module/VuFind/src/VuFind/Recommend/ExpandFacets.php
index aaa091ffa37..e77d4ff24a1 100644
--- a/module/VuFind/src/VuFind/Recommend/ExpandFacets.php
+++ b/module/VuFind/src/VuFind/Recommend/ExpandFacets.php
@@ -119,7 +119,7 @@ class ExpandFacets implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/ExpandFacetsFactory.php b/module/VuFind/src/VuFind/Recommend/ExpandFacetsFactory.php
index 18d461d87b2..ccf3289528f 100644
--- a/module/VuFind/src/VuFind/Recommend/ExpandFacetsFactory.php
+++ b/module/VuFind/src/VuFind/Recommend/ExpandFacetsFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class ExpandFacetsFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class ExpandFacetsFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Recommend/ExternalSearch.php b/module/VuFind/src/VuFind/Recommend/ExternalSearch.php
index 04233927846..5f08d6218b9 100644
--- a/module/VuFind/src/VuFind/Recommend/ExternalSearch.php
+++ b/module/VuFind/src/VuFind/Recommend/ExternalSearch.php
@@ -81,7 +81,7 @@ class ExternalSearch implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/FavoriteFacetsFactory.php b/module/VuFind/src/VuFind/Recommend/FavoriteFacetsFactory.php
index 6dd3b5fdf8a..4b581e4ca46 100644
--- a/module/VuFind/src/VuFind/Recommend/FavoriteFacetsFactory.php
+++ b/module/VuFind/src/VuFind/Recommend/FavoriteFacetsFactory.php
@@ -38,7 +38,8 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class FavoriteFacetsFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class FavoriteFacetsFactory
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Recommend/InjectConfigManagerFactory.php b/module/VuFind/src/VuFind/Recommend/InjectConfigManagerFactory.php
index 664628b85a2..028dff0d917 100644
--- a/module/VuFind/src/VuFind/Recommend/InjectConfigManagerFactory.php
+++ b/module/VuFind/src/VuFind/Recommend/InjectConfigManagerFactory.php
@@ -40,7 +40,7 @@ use VuFind\Config\PluginManager as ConfigManager;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class InjectConfigManagerFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Recommend/InjectResultsManagerFactory.php b/module/VuFind/src/VuFind/Recommend/InjectResultsManagerFactory.php
index 7eb3f7b38dd..233dc44e5d8 100644
--- a/module/VuFind/src/VuFind/Recommend/InjectResultsManagerFactory.php
+++ b/module/VuFind/src/VuFind/Recommend/InjectResultsManagerFactory.php
@@ -40,7 +40,7 @@ use VuFind\Search\Results\PluginManager as ResultsManager;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class InjectResultsManagerFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Recommend/InjectSearchRunnerFactory.php b/module/VuFind/src/VuFind/Recommend/InjectSearchRunnerFactory.php
index 602a1ababdc..fcca81eba1c 100644
--- a/module/VuFind/src/VuFind/Recommend/InjectSearchRunnerFactory.php
+++ b/module/VuFind/src/VuFind/Recommend/InjectSearchRunnerFactory.php
@@ -40,7 +40,7 @@ use VuFind\Search\SearchRunner;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class InjectSearchRunnerFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Recommend/Libraryh3lp.php b/module/VuFind/src/VuFind/Recommend/Libraryh3lp.php
index 9d4c1faa843..7deea0a2ce2 100644
--- a/module/VuFind/src/VuFind/Recommend/Libraryh3lp.php
+++ b/module/VuFind/src/VuFind/Recommend/Libraryh3lp.php
@@ -79,7 +79,7 @@ class Libraryh3lp implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/MapSelection.php b/module/VuFind/src/VuFind/Recommend/MapSelection.php
index e9578445b78..ebab982b4dd 100644
--- a/module/VuFind/src/VuFind/Recommend/MapSelection.php
+++ b/module/VuFind/src/VuFind/Recommend/MapSelection.php
@@ -195,7 +195,7 @@ class MapSelection implements \VuFind\Recommend\RecommendInterface,
      * be needed.
      *
      * @param \VuFind\Search\Solr\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/MapSelectionFactory.php b/module/VuFind/src/VuFind/Recommend/MapSelectionFactory.php
index 123bb91b304..4d5b304fb87 100644
--- a/module/VuFind/src/VuFind/Recommend/MapSelectionFactory.php
+++ b/module/VuFind/src/VuFind/Recommend/MapSelectionFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class MapSelectionFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class MapSelectionFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Recommend/OpenLibrarySubjects.php b/module/VuFind/src/VuFind/Recommend/OpenLibrarySubjects.php
index 7704b10ef23..064c21725dd 100644
--- a/module/VuFind/src/VuFind/Recommend/OpenLibrarySubjects.php
+++ b/module/VuFind/src/VuFind/Recommend/OpenLibrarySubjects.php
@@ -139,7 +139,7 @@ class OpenLibrarySubjects implements RecommendInterface,
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
@@ -192,8 +192,8 @@ class OpenLibrarySubjects implements RecommendInterface,
      * @param string                     $field   Name of filter field to check for
      * date limits
      * @param \VuFind\Search\Params\Base $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
-     * request.
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
+     *                                            request.
      *
      * @return string
      */
diff --git a/module/VuFind/src/VuFind/Recommend/OpenLibrarySubjectsDeferred.php b/module/VuFind/src/VuFind/Recommend/OpenLibrarySubjectsDeferred.php
index a673407cc72..acd504f0937 100644
--- a/module/VuFind/src/VuFind/Recommend/OpenLibrarySubjectsDeferred.php
+++ b/module/VuFind/src/VuFind/Recommend/OpenLibrarySubjectsDeferred.php
@@ -76,7 +76,7 @@ class OpenLibrarySubjectsDeferred extends OpenLibrarySubjects
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/PluginManager.php b/module/VuFind/src/VuFind/Recommend/PluginManager.php
index 5ec9f3aee1b..3c3762fd5ba 100644
--- a/module/VuFind/src/VuFind/Recommend/PluginManager.php
+++ b/module/VuFind/src/VuFind/Recommend/PluginManager.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Recommend;
 
-use Zend\ServiceManager\Factory\InvokableFactory;
+use Laminas\ServiceManager\Factory\InvokableFactory;
 
 /**
  * Recommendation module plugin manager
diff --git a/module/VuFind/src/VuFind/Recommend/PubDateVisAjax.php b/module/VuFind/src/VuFind/Recommend/PubDateVisAjax.php
index 894939a2e7f..0124a8d87f3 100644
--- a/module/VuFind/src/VuFind/Recommend/PubDateVisAjax.php
+++ b/module/VuFind/src/VuFind/Recommend/PubDateVisAjax.php
@@ -98,7 +98,7 @@ class PubDateVisAjax implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/RandomRecommend.php b/module/VuFind/src/VuFind/Recommend/RandomRecommend.php
index 7041b96a9a1..9cdb12da939 100644
--- a/module/VuFind/src/VuFind/Recommend/RandomRecommend.php
+++ b/module/VuFind/src/VuFind/Recommend/RandomRecommend.php
@@ -161,7 +161,7 @@ class RandomRecommend implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/RandomRecommendFactory.php b/module/VuFind/src/VuFind/Recommend/RandomRecommendFactory.php
index 4072c585429..b14865ddac3 100644
--- a/module/VuFind/src/VuFind/Recommend/RandomRecommendFactory.php
+++ b/module/VuFind/src/VuFind/Recommend/RandomRecommendFactory.php
@@ -38,7 +38,8 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class RandomRecommendFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class RandomRecommendFactory
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Recommend/RecommendInterface.php b/module/VuFind/src/VuFind/Recommend/RecommendInterface.php
index 59a0d735b0d..0add3b368be 100644
--- a/module/VuFind/src/VuFind/Recommend/RecommendInterface.php
+++ b/module/VuFind/src/VuFind/Recommend/RecommendInterface.php
@@ -64,7 +64,7 @@ interface RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/RecommendLinks.php b/module/VuFind/src/VuFind/Recommend/RecommendLinks.php
index 4e7c40a79f7..44997fc77ad 100644
--- a/module/VuFind/src/VuFind/Recommend/RecommendLinks.php
+++ b/module/VuFind/src/VuFind/Recommend/RecommendLinks.php
@@ -93,7 +93,7 @@ class RecommendLinks implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/RemoveFilters.php b/module/VuFind/src/VuFind/Recommend/RemoveFilters.php
index 6f29b61133b..9a810a3eb4c 100644
--- a/module/VuFind/src/VuFind/Recommend/RemoveFilters.php
+++ b/module/VuFind/src/VuFind/Recommend/RemoveFilters.php
@@ -74,7 +74,7 @@ class RemoveFilters implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/SearchObject.php b/module/VuFind/src/VuFind/Recommend/SearchObject.php
index 7abbd7d3149..56170fe66b8 100644
--- a/module/VuFind/src/VuFind/Recommend/SearchObject.php
+++ b/module/VuFind/src/VuFind/Recommend/SearchObject.php
@@ -103,7 +103,7 @@ abstract class SearchObject implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/SideFacets.php b/module/VuFind/src/VuFind/Recommend/SideFacets.php
index a0f63f664af..b7e0aa7564f 100644
--- a/module/VuFind/src/VuFind/Recommend/SideFacets.php
+++ b/module/VuFind/src/VuFind/Recommend/SideFacets.php
@@ -231,7 +231,7 @@ class SideFacets extends AbstractFacets
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/SideFacetsDeferred.php b/module/VuFind/src/VuFind/Recommend/SideFacetsDeferred.php
index f8eb2cd2c6c..9f9cb4bf2a0 100644
--- a/module/VuFind/src/VuFind/Recommend/SideFacetsDeferred.php
+++ b/module/VuFind/src/VuFind/Recommend/SideFacetsDeferred.php
@@ -74,8 +74,8 @@ class SideFacetsDeferred extends SideFacets
      * search is done.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
-     *                                            request.
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
+     * request.
      *
      * @return void
      */
diff --git a/module/VuFind/src/VuFind/Recommend/SideFacetsFactory.php b/module/VuFind/src/VuFind/Recommend/SideFacetsFactory.php
index dfc32c1fb9d..e1dd41e7c65 100644
--- a/module/VuFind/src/VuFind/Recommend/SideFacetsFactory.php
+++ b/module/VuFind/src/VuFind/Recommend/SideFacetsFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class SideFacetsFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class SideFacetsFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Recommend/SummonResultsDeferred.php b/module/VuFind/src/VuFind/Recommend/SummonResultsDeferred.php
index b60cabe17b7..5122b5c2328 100644
--- a/module/VuFind/src/VuFind/Recommend/SummonResultsDeferred.php
+++ b/module/VuFind/src/VuFind/Recommend/SummonResultsDeferred.php
@@ -65,7 +65,7 @@ class SummonResultsDeferred extends AbstractSummonRecommendDeferred
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/SummonTopics.php b/module/VuFind/src/VuFind/Recommend/SummonTopics.php
index e4debda91b8..7e23ea7fe86 100644
--- a/module/VuFind/src/VuFind/Recommend/SummonTopics.php
+++ b/module/VuFind/src/VuFind/Recommend/SummonTopics.php
@@ -47,7 +47,7 @@ class SummonTopics extends AbstractSummonRecommend
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/SwitchQuery.php b/module/VuFind/src/VuFind/Recommend/SwitchQuery.php
index 7630b5c09b9..7b380746c57 100644
--- a/module/VuFind/src/VuFind/Recommend/SwitchQuery.php
+++ b/module/VuFind/src/VuFind/Recommend/SwitchQuery.php
@@ -129,7 +129,7 @@ class SwitchQuery implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/SwitchQueryFactory.php b/module/VuFind/src/VuFind/Recommend/SwitchQueryFactory.php
index 8fe0d2e0bbd..154e7e860f3 100644
--- a/module/VuFind/src/VuFind/Recommend/SwitchQueryFactory.php
+++ b/module/VuFind/src/VuFind/Recommend/SwitchQueryFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class SwitchQueryFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class SwitchQueryFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Recommend/SwitchTab.php b/module/VuFind/src/VuFind/Recommend/SwitchTab.php
index 42c22b5469f..79ee80563d8 100644
--- a/module/VuFind/src/VuFind/Recommend/SwitchTab.php
+++ b/module/VuFind/src/VuFind/Recommend/SwitchTab.php
@@ -66,7 +66,7 @@ class SwitchTab implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/SwitchType.php b/module/VuFind/src/VuFind/Recommend/SwitchType.php
index dbc1fb0e2a6..a03345b3c79 100644
--- a/module/VuFind/src/VuFind/Recommend/SwitchType.php
+++ b/module/VuFind/src/VuFind/Recommend/SwitchType.php
@@ -91,7 +91,7 @@ class SwitchType implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/TopFacets.php b/module/VuFind/src/VuFind/Recommend/TopFacets.php
index 0498957e9fe..19f7e88bf44 100644
--- a/module/VuFind/src/VuFind/Recommend/TopFacets.php
+++ b/module/VuFind/src/VuFind/Recommend/TopFacets.php
@@ -95,7 +95,7 @@ class TopFacets extends AbstractFacets
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/VisualFacets.php b/module/VuFind/src/VuFind/Recommend/VisualFacets.php
index 35e44f21a18..d50c6d8d36a 100644
--- a/module/VuFind/src/VuFind/Recommend/VisualFacets.php
+++ b/module/VuFind/src/VuFind/Recommend/VisualFacets.php
@@ -81,7 +81,7 @@ class VisualFacets extends AbstractFacets
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/WorldCatIdentities.php b/module/VuFind/src/VuFind/Recommend/WorldCatIdentities.php
index 0b8dd688357..e03d15a3f5c 100644
--- a/module/VuFind/src/VuFind/Recommend/WorldCatIdentities.php
+++ b/module/VuFind/src/VuFind/Recommend/WorldCatIdentities.php
@@ -94,7 +94,7 @@ class WorldCatIdentities implements RecommendInterface
      * be needed.
      *
      * @param \VuFind\Search\Base\Params $params  Search parameter object
-     * @param \Zend\StdLib\Parameters    $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Recommend/WorldCatIdentitiesFactory.php b/module/VuFind/src/VuFind/Recommend/WorldCatIdentitiesFactory.php
index 8e660745631..56465c64995 100644
--- a/module/VuFind/src/VuFind/Recommend/WorldCatIdentitiesFactory.php
+++ b/module/VuFind/src/VuFind/Recommend/WorldCatIdentitiesFactory.php
@@ -39,7 +39,7 @@ use Interop\Container\ContainerInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class WorldCatIdentitiesFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Record/Cache.php b/module/VuFind/src/VuFind/Record/Cache.php
index 76b0ddaf24a..d2532e42b54 100644
--- a/module/VuFind/src/VuFind/Record/Cache.php
+++ b/module/VuFind/src/VuFind/Record/Cache.php
@@ -29,9 +29,9 @@
  */
 namespace VuFind\Record;
 
+use Laminas\Config\Config as Config;
 use VuFind\Db\Table\Record as Record;
 use VuFind\RecordDriver\PluginManager as RecordFactory;
-use Zend\Config\Config as Config;
 
 /**
  * Record Cache
@@ -43,7 +43,7 @@ use Zend\Config\Config as Config;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Site
  */
-class Cache implements \Zend\Log\LoggerAwareInterface
+class Cache implements \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
 
diff --git a/module/VuFind/src/VuFind/Record/CacheFactory.php b/module/VuFind/src/VuFind/Record/CacheFactory.php
index 40d3a1effcd..e5a99c37f65 100644
--- a/module/VuFind/src/VuFind/Record/CacheFactory.php
+++ b/module/VuFind/src/VuFind/Record/CacheFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Record;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Record cache factory.
diff --git a/module/VuFind/src/VuFind/Record/FallbackLoader/Summon.php b/module/VuFind/src/VuFind/Record/FallbackLoader/Summon.php
index 599a541cc0f..75c35bc7c7e 100644
--- a/module/VuFind/src/VuFind/Record/FallbackLoader/Summon.php
+++ b/module/VuFind/src/VuFind/Record/FallbackLoader/Summon.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Record\FallbackLoader;
 
-use SerialsSolutions\Summon\Zend2 as Connector;
+use SerialsSolutions\Summon\Laminas as Connector;
 use VuFind\Db\Table\Resource;
 use VuFindSearch\Backend\Summon\Backend;
 use VuFindSearch\ParamBag;
diff --git a/module/VuFind/src/VuFind/Record/FallbackLoader/SummonFactory.php b/module/VuFind/src/VuFind/Record/FallbackLoader/SummonFactory.php
index b954b68553b..e23c87baacf 100644
--- a/module/VuFind/src/VuFind/Record/FallbackLoader/SummonFactory.php
+++ b/module/VuFind/src/VuFind/Record/FallbackLoader/SummonFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Record\FallbackLoader;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Summon record fallback loader factory
diff --git a/module/VuFind/src/VuFind/Record/Loader.php b/module/VuFind/src/VuFind/Record/Loader.php
index dc752afe86c..59b84b49712 100644
--- a/module/VuFind/src/VuFind/Record/Loader.php
+++ b/module/VuFind/src/VuFind/Record/Loader.php
@@ -46,7 +46,7 @@ use VuFindSearch\Service as SearchService;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Site
  */
-class Loader implements \Zend\Log\LoggerAwareInterface
+class Loader implements \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
 
diff --git a/module/VuFind/src/VuFind/Record/LoaderFactory.php b/module/VuFind/src/VuFind/Record/LoaderFactory.php
index 3dd2c87003e..141f7d72e75 100644
--- a/module/VuFind/src/VuFind/Record/LoaderFactory.php
+++ b/module/VuFind/src/VuFind/Record/LoaderFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Record;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Record loader factory.
diff --git a/module/VuFind/src/VuFind/Record/Router.php b/module/VuFind/src/VuFind/Record/Router.php
index ecd986213db..62c110d6b67 100644
--- a/module/VuFind/src/VuFind/Record/Router.php
+++ b/module/VuFind/src/VuFind/Record/Router.php
@@ -41,16 +41,16 @@ class Router
     /**
      * VuFind configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $config VuFind configuration
+     * @param \Laminas\Config\Config $config VuFind configuration
      */
-    public function __construct(\Zend\Config\Config $config)
+    public function __construct(\Laminas\Config\Config $config)
     {
         $this->config = $config;
     }
diff --git a/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php b/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php
index c834ad362c7..2637726c96e 100644
--- a/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php
+++ b/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php
@@ -64,14 +64,14 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
     /**
      * Main VuFind configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $mainConfig;
 
     /**
      * Record-specific configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $recordConfig;
 
@@ -85,9 +85,9 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $mainConfig   VuFind main configuration (omit for
-     * built-in defaults)
-     * @param \Zend\Config\Config $recordConfig Record-specific configuration file
+     * @param \Laminas\Config\Config $mainConfig   VuFind main configuration (omit
+     * for built-in defaults)
+     * @param \Laminas\Config\Config $recordConfig Record-specific configuration file
      * (omit to use $mainConfig as $recordConfig)
      */
     public function __construct($mainConfig = null, $recordConfig = null)
diff --git a/module/VuFind/src/VuFind/RecordDriver/AbstractBaseFactory.php b/module/VuFind/src/VuFind/RecordDriver/AbstractBaseFactory.php
index 7b3fb3b8e90..a4be0dc346f 100644
--- a/module/VuFind/src/VuFind/RecordDriver/AbstractBaseFactory.php
+++ b/module/VuFind/src/VuFind/RecordDriver/AbstractBaseFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\RecordDriver;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Default factory for record drivers.
diff --git a/module/VuFind/src/VuFind/RecordDriver/DefaultRecord.php b/module/VuFind/src/VuFind/RecordDriver/DefaultRecord.php
index ddd3a3e842c..93fdba54f37 100644
--- a/module/VuFind/src/VuFind/RecordDriver/DefaultRecord.php
+++ b/module/VuFind/src/VuFind/RecordDriver/DefaultRecord.php
@@ -53,11 +53,12 @@ class DefaultRecord extends AbstractBase
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $mainConfig     VuFind main configuration (omit for
-     * built-in defaults)
-     * @param \Zend\Config\Config $recordConfig   Record-specific configuration file
-     * (omit to use $mainConfig as $recordConfig)
-     * @param \Zend\Config\Config $searchSettings Search-specific configuration file
+     * @param \Laminas\Config\Config $mainConfig     VuFind main configuration (omit
+     * for built-in defaults)
+     * @param \Laminas\Config\Config $recordConfig   Record-specific configuration
+     * file (omit to use $mainConfig as $recordConfig)
+     * @param \Laminas\Config\Config $searchSettings Search-specific configuration
+     * file
      */
     public function __construct($mainConfig = null, $recordConfig = null,
         $searchSettings = null
diff --git a/module/VuFind/src/VuFind/RecordDriver/IlsAwareDelegatorFactory.php b/module/VuFind/src/VuFind/RecordDriver/IlsAwareDelegatorFactory.php
index 32e92d25aba..515c5f7af1a 100644
--- a/module/VuFind/src/VuFind/RecordDriver/IlsAwareDelegatorFactory.php
+++ b/module/VuFind/src/VuFind/RecordDriver/IlsAwareDelegatorFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\RecordDriver;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\DelegatorFactoryInterface;
+use Laminas\ServiceManager\Factory\DelegatorFactoryInterface;
 
 /**
  * ILS aware delegator factory
diff --git a/module/VuFind/src/VuFind/RecordDriver/Missing.php b/module/VuFind/src/VuFind/RecordDriver/Missing.php
index e13102d53d4..58d222c2dd1 100644
--- a/module/VuFind/src/VuFind/RecordDriver/Missing.php
+++ b/module/VuFind/src/VuFind/RecordDriver/Missing.php
@@ -43,9 +43,9 @@ class Missing extends DefaultRecord
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $mainConfig   VuFind main configuration (omit for
-     * built-in defaults)
-     * @param \Zend\Config\Config $recordConfig Record-specific configuration file
+     * @param \Laminas\Config\Config $mainConfig   VuFind main configuration (omit
+     * for built-in defaults)
+     * @param \Laminas\Config\Config $recordConfig Record-specific configuration file
      * (omit to use $mainConfig as $recordConfig)
      */
     public function __construct($mainConfig = null, $recordConfig = null)
diff --git a/module/VuFind/src/VuFind/RecordDriver/PluginManager.php b/module/VuFind/src/VuFind/RecordDriver/PluginManager.php
index d623a7edd07..e505c64c23f 100644
--- a/module/VuFind/src/VuFind/RecordDriver/PluginManager.php
+++ b/module/VuFind/src/VuFind/RecordDriver/PluginManager.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\RecordDriver;
 
-use Zend\ServiceManager\Factory\InvokableFactory;
+use Laminas\ServiceManager\Factory\InvokableFactory;
 
 /**
  * Record driver plugin manager
@@ -70,7 +70,7 @@ class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager
     /**
      * Default delegator factories.
      *
-     * @var string[][]|\Zend\ServiceManager\Factory\DelegatorFactoryInterface[][]
+     * @var string[][]|\Laminas\ServiceManager\Factory\DelegatorFactoryInterface[][]
      */
     protected $delegators = [
         SolrMarc::class => [IlsAwareDelegatorFactory::class],
diff --git a/module/VuFind/src/VuFind/RecordDriver/SolrDefault.php b/module/VuFind/src/VuFind/RecordDriver/SolrDefault.php
index ab5c367796b..375ef1b92bf 100644
--- a/module/VuFind/src/VuFind/RecordDriver/SolrDefault.php
+++ b/module/VuFind/src/VuFind/RecordDriver/SolrDefault.php
@@ -109,11 +109,12 @@ class SolrDefault extends DefaultRecord
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $mainConfig     VuFind main configuration (omit for
-     * built-in defaults)
-     * @param \Zend\Config\Config $recordConfig   Record-specific configuration file
-     * (omit to use $mainConfig as $recordConfig)
-     * @param \Zend\Config\Config $searchSettings Search-specific configuration file
+     * @param \Laminas\Config\Config $mainConfig     VuFind main configuration (omit
+     * for built-in defaults)
+     * @param \Laminas\Config\Config $recordConfig   Record-specific configuration
+     * file (omit to use $mainConfig as $recordConfig)
+     * @param \Laminas\Config\Config $searchSettings Search-specific configuration
+     * file
      */
     public function __construct($mainConfig = null, $recordConfig = null,
         $searchSettings = null
diff --git a/module/VuFind/src/VuFind/RecordDriver/SolrMarcRemote.php b/module/VuFind/src/VuFind/RecordDriver/SolrMarcRemote.php
index 8970bb51adb..b17dc642c33 100644
--- a/module/VuFind/src/VuFind/RecordDriver/SolrMarcRemote.php
+++ b/module/VuFind/src/VuFind/RecordDriver/SolrMarcRemote.php
@@ -30,8 +30,8 @@
  */
 namespace VuFind\RecordDriver;
 
+use Laminas\Log\LoggerAwareInterface as LoggerAwareInterface;
 use VuFindHttp\HttpServiceAwareInterface as HttpServiceAwareInterface;
-use Zend\Log\LoggerAwareInterface as LoggerAwareInterface;
 
 /**
  * Model for MARC records without a fullrecord in Solr. The fullrecord is being
@@ -62,11 +62,12 @@ class SolrMarcRemote extends SolrMarc implements
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $mainConfig     VuFind main configuration (omit for
-     * built-in defaults)
-     * @param \Zend\Config\Config $recordConfig   Record-specific configuration file
-     * (omit to use $mainConfig as $recordConfig)
-     * @param \Zend\Config\Config $searchSettings Search-specific configuration file
+     * @param \Laminas\Config\Config $mainConfig     VuFind main configuration (omit
+     * for built-in defaults)
+     * @param \Laminas\Config\Config $recordConfig   Record-specific configuration
+     * file (omit to use $mainConfig as $recordConfig)
+     * @param \Laminas\Config\Config $searchSettings Search-specific configuration
+     * file
      *
      * @throws \Exception
      */
diff --git a/module/VuFind/src/VuFind/RecordDriver/SolrOverdrive.php b/module/VuFind/src/VuFind/RecordDriver/SolrOverdrive.php
index 9c5ee98345e..4b173d78ade 100644
--- a/module/VuFind/src/VuFind/RecordDriver/SolrOverdrive.php
+++ b/module/VuFind/src/VuFind/RecordDriver/SolrOverdrive.php
@@ -30,9 +30,9 @@
  */
 namespace VuFind\RecordDriver;
 
+use Laminas\Config\Config;
+use Laminas\Log\LoggerAwareInterface;
 use VuFind\DigitalContent\OverdriveConnector;
-use Zend\Config\Config;
-use Zend\Log\LoggerAwareInterface;
 
 /**
  * VuFind Record Driver for SolrOverdrive Records
diff --git a/module/VuFind/src/VuFind/RecordDriver/SolrWeb.php b/module/VuFind/src/VuFind/RecordDriver/SolrWeb.php
index 6c1bcd707fa..03e098e7477 100644
--- a/module/VuFind/src/VuFind/RecordDriver/SolrWeb.php
+++ b/module/VuFind/src/VuFind/RecordDriver/SolrWeb.php
@@ -41,11 +41,12 @@ class SolrWeb extends SolrDefault
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $mainConfig     VuFind main configuration (omit for
-     * built-in defaults)
-     * @param \Zend\Config\Config $recordConfig   Record-specific configuration file
-     * (omit to use $mainConfig as $recordConfig)
-     * @param \Zend\Config\Config $searchSettings Search-specific configuration file
+     * @param \Laminas\Config\Config $mainConfig     VuFind main configuration (omit
+     * for built-in defaults)
+     * @param \Laminas\Config\Config $recordConfig   Record-specific configuration
+     * file (omit to use $mainConfig as $recordConfig)
+     * @param \Laminas\Config\Config $searchSettings Search-specific configuration
+     * file
      */
     public function __construct($mainConfig = null, $recordConfig = null,
         $searchSettings = null
diff --git a/module/VuFind/src/VuFind/RecordTab/AbstractBase.php b/module/VuFind/src/VuFind/RecordTab/AbstractBase.php
index cf7b9edb836..2403ef44c83 100644
--- a/module/VuFind/src/VuFind/RecordTab/AbstractBase.php
+++ b/module/VuFind/src/VuFind/RecordTab/AbstractBase.php
@@ -62,7 +62,7 @@ abstract class AbstractBase implements TabInterface,
     /**
      * User request associated with the tab (false for none)
      *
-     * @var \Zend\Http\Request|bool
+     * @var \Laminas\Http\Request|bool
      */
     protected $request = false;
 
@@ -137,11 +137,11 @@ abstract class AbstractBase implements TabInterface,
     /**
      * Set the user request
      *
-     * @param \Zend\Http\Request $request Request
+     * @param \Laminas\Http\Request $request Request
      *
      * @return AbstractBase
      */
-    public function setRequest(\Zend\Http\Request $request)
+    public function setRequest(\Laminas\Http\Request $request)
     {
         $this->request = $request;
         return $this;
@@ -150,7 +150,7 @@ abstract class AbstractBase implements TabInterface,
     /**
      * Get the user request (or false if unavailable)
      *
-     * @return \Zend\Http\Request|bool
+     * @return \Laminas\Http\Request|bool
      */
     protected function getRequest()
     {
diff --git a/module/VuFind/src/VuFind/RecordTab/AbstractContentFactory.php b/module/VuFind/src/VuFind/RecordTab/AbstractContentFactory.php
index 645c2f38e23..1139d453d60 100644
--- a/module/VuFind/src/VuFind/RecordTab/AbstractContentFactory.php
+++ b/module/VuFind/src/VuFind/RecordTab/AbstractContentFactory.php
@@ -41,7 +41,7 @@ use VuFind\Content\PluginManager as ContentManager;
  * @link     https://vufind.org/wiki/development Wiki
  */
 abstract class AbstractContentFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * The name of the tab being constructed.
@@ -84,11 +84,11 @@ abstract class AbstractContentFactory
      * Support method for construction of AbstractContent objects -- should we
      * hide this tab if it is empty?
      *
-     * @param \Zend\Config\Config $config VuFind configuration
+     * @param \Laminas\Config\Config $config VuFind configuration
      *
      * @return bool
      */
-    protected function getHideSetting(\Zend\Config\Config $config)
+    protected function getHideSetting(\Laminas\Config\Config $config)
     {
         $setting = $config->Content->hide_if_empty ?? false;
         if ($setting === true || $setting === false
diff --git a/module/VuFind/src/VuFind/RecordTab/CollectionHierarchyTree.php b/module/VuFind/src/VuFind/RecordTab/CollectionHierarchyTree.php
index 1429a9699a4..aaf747ec07f 100644
--- a/module/VuFind/src/VuFind/RecordTab/CollectionHierarchyTree.php
+++ b/module/VuFind/src/VuFind/RecordTab/CollectionHierarchyTree.php
@@ -48,10 +48,10 @@ class CollectionHierarchyTree extends HierarchyTree
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config   $config Configuration
-     * @param \VuFind\Record\Loader $loader Record loader
+     * @param \Laminas\Config\Config $config Configuration
+     * @param \VuFind\Record\Loader  $loader Record loader
      */
-    public function __construct(\Zend\Config\Config $config,
+    public function __construct(\Laminas\Config\Config $config,
         \VuFind\Record\Loader $loader
     ) {
         parent::__construct($config);
diff --git a/module/VuFind/src/VuFind/RecordTab/CollectionHierarchyTreeFactory.php b/module/VuFind/src/VuFind/RecordTab/CollectionHierarchyTreeFactory.php
index 3a03cabe156..05c438650ff 100644
--- a/module/VuFind/src/VuFind/RecordTab/CollectionHierarchyTreeFactory.php
+++ b/module/VuFind/src/VuFind/RecordTab/CollectionHierarchyTreeFactory.php
@@ -39,7 +39,7 @@ use Interop\Container\ContainerInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class CollectionHierarchyTreeFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/RecordTab/CollectionListFactory.php b/module/VuFind/src/VuFind/RecordTab/CollectionListFactory.php
index a2f5df7b98a..6f6db8e1f6b 100644
--- a/module/VuFind/src/VuFind/RecordTab/CollectionListFactory.php
+++ b/module/VuFind/src/VuFind/RecordTab/CollectionListFactory.php
@@ -38,7 +38,8 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class CollectionListFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class CollectionListFactory
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/RecordTab/ComponentPartsFactory.php b/module/VuFind/src/VuFind/RecordTab/ComponentPartsFactory.php
index 5dbc08b0610..fda721503da 100644
--- a/module/VuFind/src/VuFind/RecordTab/ComponentPartsFactory.php
+++ b/module/VuFind/src/VuFind/RecordTab/ComponentPartsFactory.php
@@ -38,7 +38,8 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class ComponentPartsFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class ComponentPartsFactory
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/RecordTab/HierarchyTree.php b/module/VuFind/src/VuFind/RecordTab/HierarchyTree.php
index 453251b259d..337e776bada 100644
--- a/module/VuFind/src/VuFind/RecordTab/HierarchyTree.php
+++ b/module/VuFind/src/VuFind/RecordTab/HierarchyTree.php
@@ -48,16 +48,16 @@ class HierarchyTree extends AbstractBase
     /**
      * Configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config = null;
 
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $config Configuration
+     * @param \Laminas\Config\Config $config Configuration
      */
-    public function __construct(\Zend\Config\Config $config)
+    public function __construct(\Laminas\Config\Config $config)
     {
         $this->config = $config;
     }
@@ -65,7 +65,7 @@ class HierarchyTree extends AbstractBase
     /**
      * Get the VuFind configuration.
      *
-     * @return \Zend\Config\Config
+     * @return \Laminas\Config\Config
      */
     protected function getConfig()
     {
diff --git a/module/VuFind/src/VuFind/RecordTab/HierarchyTreeFactory.php b/module/VuFind/src/VuFind/RecordTab/HierarchyTreeFactory.php
index 998bfbac229..31934de1743 100644
--- a/module/VuFind/src/VuFind/RecordTab/HierarchyTreeFactory.php
+++ b/module/VuFind/src/VuFind/RecordTab/HierarchyTreeFactory.php
@@ -38,7 +38,8 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class HierarchyTreeFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class HierarchyTreeFactory
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/RecordTab/HoldingsILS.php b/module/VuFind/src/VuFind/RecordTab/HoldingsILS.php
index f0c6424a8a5..067de853dfc 100644
--- a/module/VuFind/src/VuFind/RecordTab/HoldingsILS.php
+++ b/module/VuFind/src/VuFind/RecordTab/HoldingsILS.php
@@ -137,7 +137,7 @@ class HoldingsILS extends AbstractBase
      * @param int $page           Currently selected page of the items paginator
      * @param int $itemLimit      Max. no of items per page
      *
-     * @return \Zend\Paginator\Paginator
+     * @return \Laminas\Paginator\Paginator
      */
     public function getPaginator($totalItemCount, $page, $itemLimit)
     {
@@ -147,8 +147,8 @@ class HoldingsILS extends AbstractBase
         }
 
         // Create the paginator
-        $nullAdapter = new \Zend\Paginator\Adapter\NullFill($totalItemCount);
-        $paginator = new \Zend\Paginator\Paginator($nullAdapter);
+        $nullAdapter = new \Laminas\Paginator\Adapter\NullFill($totalItemCount);
+        $paginator = new \Laminas\Paginator\Paginator($nullAdapter);
 
         // Some settings for the paginator
         $paginator
diff --git a/module/VuFind/src/VuFind/RecordTab/HoldingsILSFactory.php b/module/VuFind/src/VuFind/RecordTab/HoldingsILSFactory.php
index 8bee0526391..7727fd76546 100644
--- a/module/VuFind/src/VuFind/RecordTab/HoldingsILSFactory.php
+++ b/module/VuFind/src/VuFind/RecordTab/HoldingsILSFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class HoldingsILSFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class HoldingsILSFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/RecordTab/HoldingsWorldCatFactory.php b/module/VuFind/src/VuFind/RecordTab/HoldingsWorldCatFactory.php
index 2552e4bc70d..cc17adfcf20 100644
--- a/module/VuFind/src/VuFind/RecordTab/HoldingsWorldCatFactory.php
+++ b/module/VuFind/src/VuFind/RecordTab/HoldingsWorldCatFactory.php
@@ -39,7 +39,7 @@ use Interop\Container\ContainerInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class HoldingsWorldCatFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/RecordTab/MapFactory.php b/module/VuFind/src/VuFind/RecordTab/MapFactory.php
index e3b5a5175f2..ec2b12b62a6 100644
--- a/module/VuFind/src/VuFind/RecordTab/MapFactory.php
+++ b/module/VuFind/src/VuFind/RecordTab/MapFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class MapFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class MapFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/RecordTab/PluginManager.php b/module/VuFind/src/VuFind/RecordTab/PluginManager.php
index dc4e6c52f66..486db10f8c1 100644
--- a/module/VuFind/src/VuFind/RecordTab/PluginManager.php
+++ b/module/VuFind/src/VuFind/RecordTab/PluginManager.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\RecordTab;
 
-use Zend\ServiceManager\Factory\InvokableFactory;
+use Laminas\ServiceManager\Factory\InvokableFactory;
 
 /**
  * Record tab plugin manager
diff --git a/module/VuFind/src/VuFind/RecordTab/Preview.php b/module/VuFind/src/VuFind/RecordTab/Preview.php
index 476bfb94458..f3ee2a0b914 100644
--- a/module/VuFind/src/VuFind/RecordTab/Preview.php
+++ b/module/VuFind/src/VuFind/RecordTab/Preview.php
@@ -41,7 +41,7 @@ class Preview extends AbstractBase
     /**
      * Configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config = null;
 
diff --git a/module/VuFind/src/VuFind/RecordTab/PreviewFactory.php b/module/VuFind/src/VuFind/RecordTab/PreviewFactory.php
index 9e77a5bcd53..9d3d5b19cf2 100644
--- a/module/VuFind/src/VuFind/RecordTab/PreviewFactory.php
+++ b/module/VuFind/src/VuFind/RecordTab/PreviewFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class PreviewFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class PreviewFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/RecordTab/SimilarItemsCarouselFactory.php b/module/VuFind/src/VuFind/RecordTab/SimilarItemsCarouselFactory.php
index ea0e50c1fb3..f7ff5d03181 100644
--- a/module/VuFind/src/VuFind/RecordTab/SimilarItemsCarouselFactory.php
+++ b/module/VuFind/src/VuFind/RecordTab/SimilarItemsCarouselFactory.php
@@ -39,7 +39,7 @@ use Interop\Container\ContainerInterface;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class SimilarItemsCarouselFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/RecordTab/TabManager.php b/module/VuFind/src/VuFind/RecordTab/TabManager.php
index b0183502d05..e0997dd7bba 100644
--- a/module/VuFind/src/VuFind/RecordTab/TabManager.php
+++ b/module/VuFind/src/VuFind/RecordTab/TabManager.php
@@ -236,9 +236,9 @@ class TabManager
      * Convenience method to load tab information, including default, in a
      * single pass. Returns an associative array with 'tabs' and 'default' keys.
      *
-     * @param AbstractRecordDriver $driver   Record driver
-     * @param \Zend\Http\Request   $request  User request (optional)
-     * @param string               $fallback Fallback default tab to use if no
+     * @param AbstractRecordDriver  $driver   Record driver
+     * @param \Laminas\Http\Request $request  User request (optional)
+     * @param string                $fallback Fallback default tab to use if no
      * tab specified or matched.
      *
      * @return array
@@ -254,8 +254,8 @@ class TabManager
     /**
      * Get an array of valid tabs for the provided record driver.
      *
-     * @param AbstractRecordDriver $driver  Record driver
-     * @param \Zend\Http\Request   $request User request (optional)
+     * @param AbstractRecordDriver  $driver  Record driver
+     * @param \Laminas\Http\Request $request User request (optional)
      *
      * @return array               service name => tab object
      */
@@ -271,7 +271,7 @@ class TabManager
             if (method_exists($newTab, 'setRecordDriver')) {
                 $newTab->setRecordDriver($driver);
             }
-            if ($request instanceof \Zend\Http\Request
+            if ($request instanceof \Laminas\Http\Request
                 && method_exists($newTab, 'setRequest')
             ) {
                 $newTab->setRequest($request);
diff --git a/module/VuFind/src/VuFind/RecordTab/TabManagerFactory.php b/module/VuFind/src/VuFind/RecordTab/TabManagerFactory.php
index 4f352736889..79711a7b0e4 100644
--- a/module/VuFind/src/VuFind/RecordTab/TabManagerFactory.php
+++ b/module/VuFind/src/VuFind/RecordTab/TabManagerFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class TabManagerFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class TabManagerFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/RecordTab/UserCommentsFactory.php b/module/VuFind/src/VuFind/RecordTab/UserCommentsFactory.php
index 0863f8aff11..4d27472fd17 100644
--- a/module/VuFind/src/VuFind/RecordTab/UserCommentsFactory.php
+++ b/module/VuFind/src/VuFind/RecordTab/UserCommentsFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class UserCommentsFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class UserCommentsFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Related/PluginManager.php b/module/VuFind/src/VuFind/Related/PluginManager.php
index 2dfce28f279..db0a6258001 100644
--- a/module/VuFind/src/VuFind/Related/PluginManager.php
+++ b/module/VuFind/src/VuFind/Related/PluginManager.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Related;
 
-use Zend\ServiceManager\Factory\InvokableFactory;
+use Laminas\ServiceManager\Factory\InvokableFactory;
 
 /**
  * Related record plugin manager
diff --git a/module/VuFind/src/VuFind/Related/SimilarFactory.php b/module/VuFind/src/VuFind/Related/SimilarFactory.php
index d2278baf28f..a3bc32c3692 100644
--- a/module/VuFind/src/VuFind/Related/SimilarFactory.php
+++ b/module/VuFind/src/VuFind/Related/SimilarFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Related;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for Similar related record module (and subclasses).
diff --git a/module/VuFind/src/VuFind/Resolver/Driver/AbstractBaseFactory.php b/module/VuFind/src/VuFind/Resolver/Driver/AbstractBaseFactory.php
index 0b26bf7d095..db7b62cdcc7 100644
--- a/module/VuFind/src/VuFind/Resolver/Driver/AbstractBaseFactory.php
+++ b/module/VuFind/src/VuFind/Resolver/Driver/AbstractBaseFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Resolver\Driver;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Generic factory suitable for most resolver drivers.
diff --git a/module/VuFind/src/VuFind/Resolver/Driver/Alma.php b/module/VuFind/src/VuFind/Resolver/Driver/Alma.php
index e0d41cdf0d1..d0bd4c76b9b 100644
--- a/module/VuFind/src/VuFind/Resolver/Driver/Alma.php
+++ b/module/VuFind/src/VuFind/Resolver/Driver/Alma.php
@@ -41,7 +41,7 @@ class Alma extends AbstractBase
     /**
      * HTTP client
      *
-     * @var \Zend\Http\Client
+     * @var \Laminas\Http\Client
      */
     protected $httpClient;
 
@@ -55,10 +55,10 @@ class Alma extends AbstractBase
     /**
      * Constructor
      *
-     * @param string            $baseUrl    Base URL for link resolver
-     * @param \Zend\Http\Client $httpClient HTTP client
+     * @param string               $baseUrl    Base URL for link resolver
+     * @param \Laminas\Http\Client $httpClient HTTP client
      */
-    public function __construct($baseUrl, \Zend\Http\Client $httpClient)
+    public function __construct($baseUrl, \Laminas\Http\Client $httpClient)
     {
         parent::__construct($baseUrl);
         $this->httpClient = $httpClient;
diff --git a/module/VuFind/src/VuFind/Resolver/Driver/Ezb.php b/module/VuFind/src/VuFind/Resolver/Driver/Ezb.php
index 7a102637b14..9dcbe6b3be3 100644
--- a/module/VuFind/src/VuFind/Resolver/Driver/Ezb.php
+++ b/module/VuFind/src/VuFind/Resolver/Driver/Ezb.php
@@ -54,17 +54,17 @@ class Ezb extends AbstractBase
     /**
      * HTTP client
      *
-     * @var \Zend\Http\Client
+     * @var \Laminas\Http\Client
      */
     protected $httpClient;
 
     /**
      * Constructor
      *
-     * @param string            $baseUrl    Base URL for link resolver
-     * @param \Zend\Http\Client $httpClient HTTP client
+     * @param string               $baseUrl    Base URL for link resolver
+     * @param \Laminas\Http\Client $httpClient HTTP client
      */
-    public function __construct($baseUrl, \Zend\Http\Client $httpClient)
+    public function __construct($baseUrl, \Laminas\Http\Client $httpClient)
     {
         parent::__construct($baseUrl);
         $this->httpClient = $httpClient;
diff --git a/module/VuFind/src/VuFind/Resolver/Driver/PluginManager.php b/module/VuFind/src/VuFind/Resolver/Driver/PluginManager.php
index a3b3ec2277d..eb88efd26e9 100644
--- a/module/VuFind/src/VuFind/Resolver/Driver/PluginManager.php
+++ b/module/VuFind/src/VuFind/Resolver/Driver/PluginManager.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Resolver\Driver;
 
-use Zend\ServiceManager\Factory\InvokableFactory;
+use Laminas\ServiceManager\Factory\InvokableFactory;
 
 /**
  * Resolver driver plugin manager
diff --git a/module/VuFind/src/VuFind/Resolver/Driver/Redi.php b/module/VuFind/src/VuFind/Resolver/Driver/Redi.php
index d8ade3ad3bb..114f3198b22 100644
--- a/module/VuFind/src/VuFind/Resolver/Driver/Redi.php
+++ b/module/VuFind/src/VuFind/Resolver/Driver/Redi.php
@@ -30,7 +30,7 @@
 namespace VuFind\Resolver\Driver;
 
 use DOMDocument;
-use Zend\Dom\DOMXPath;
+use Laminas\Dom\DOMXPath;
 
 /**
  * ReDi Link Resolver Driver
@@ -47,7 +47,7 @@ class Redi extends AbstractBase
     /**
      * HTTP client
      *
-     * @var \Zend\Http\Client
+     * @var \Laminas\Http\Client
      */
     protected $httpClient;
 
@@ -61,10 +61,10 @@ class Redi extends AbstractBase
     /**
      * Constructor
      *
-     * @param string            $baseUrl    Base URL for link resolver
-     * @param \Zend\Http\Client $httpClient HTTP client
+     * @param string               $baseUrl    Base URL for link resolver
+     * @param \Laminas\Http\Client $httpClient HTTP client
      */
-    public function __construct($baseUrl, \Zend\Http\Client $httpClient)
+    public function __construct($baseUrl, \Laminas\Http\Client $httpClient)
     {
         parent::__construct($baseUrl);
         $this->httpClient = $httpClient;
diff --git a/module/VuFind/src/VuFind/Resolver/Driver/Sfx.php b/module/VuFind/src/VuFind/Resolver/Driver/Sfx.php
index c1995c9dd8d..6d4daf8dec8 100644
--- a/module/VuFind/src/VuFind/Resolver/Driver/Sfx.php
+++ b/module/VuFind/src/VuFind/Resolver/Driver/Sfx.php
@@ -44,17 +44,17 @@ class Sfx extends AbstractBase
     /**
      * HTTP client
      *
-     * @var \Zend\Http\Client
+     * @var \Laminas\Http\Client
      */
     protected $httpClient;
 
     /**
      * Constructor
      *
-     * @param string            $baseUrl    Base URL for link resolver
-     * @param \Zend\Http\Client $httpClient HTTP client
+     * @param string               $baseUrl    Base URL for link resolver
+     * @param \Laminas\Http\Client $httpClient HTTP client
      */
-    public function __construct($baseUrl, \Zend\Http\Client $httpClient)
+    public function __construct($baseUrl, \Laminas\Http\Client $httpClient)
     {
         parent::__construct($baseUrl);
         $this->httpClient = $httpClient;
diff --git a/module/VuFind/src/VuFind/Resolver/Driver/Threesixtylink.php b/module/VuFind/src/VuFind/Resolver/Driver/Threesixtylink.php
index 5592448056b..3797323006d 100644
--- a/module/VuFind/src/VuFind/Resolver/Driver/Threesixtylink.php
+++ b/module/VuFind/src/VuFind/Resolver/Driver/Threesixtylink.php
@@ -46,17 +46,17 @@ class Threesixtylink extends AbstractBase
     /**
      * HTTP client
      *
-     * @var \Zend\Http\Client
+     * @var \Laminas\Http\Client
      */
     protected $httpClient;
 
     /**
      * Constructor
      *
-     * @param string            $baseUrl    Base URL for link resolver
-     * @param \Zend\Http\Client $httpClient HTTP client
+     * @param string               $baseUrl    Base URL for link resolver
+     * @param \Laminas\Http\Client $httpClient HTTP client
      */
-    public function __construct($baseUrl, \Zend\Http\Client $httpClient)
+    public function __construct($baseUrl, \Laminas\Http\Client $httpClient)
     {
         parent::__construct($baseUrl);
         $this->httpClient = $httpClient;
diff --git a/module/VuFind/src/VuFind/Role/DynamicRoleProviderFactory.php b/module/VuFind/src/VuFind/Role/DynamicRoleProviderFactory.php
index 743f9c31144..bf036852523 100644
--- a/module/VuFind/src/VuFind/Role/DynamicRoleProviderFactory.php
+++ b/module/VuFind/src/VuFind/Role/DynamicRoleProviderFactory.php
@@ -28,8 +28,8 @@
 namespace VuFind\Role;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Config;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Config;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * VuFind dynamic role provider factory.
diff --git a/module/VuFind/src/VuFind/Role/PermissionDeniedManagerFactory.php b/module/VuFind/src/VuFind/Role/PermissionDeniedManagerFactory.php
index fe16edf2eeb..a4433d147f1 100644
--- a/module/VuFind/src/VuFind/Role/PermissionDeniedManagerFactory.php
+++ b/module/VuFind/src/VuFind/Role/PermissionDeniedManagerFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Role;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Permission denied manager factory.
diff --git a/module/VuFind/src/VuFind/Role/PermissionManagerFactory.php b/module/VuFind/src/VuFind/Role/PermissionManagerFactory.php
index 98689092e36..f4f18be1119 100644
--- a/module/VuFind/src/VuFind/Role/PermissionManagerFactory.php
+++ b/module/VuFind/src/VuFind/Role/PermissionManagerFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Role;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Permission manager factory.
diff --git a/module/VuFind/src/VuFind/Role/PermissionProvider/InjectAuthorizationServiceFactory.php b/module/VuFind/src/VuFind/Role/PermissionProvider/InjectAuthorizationServiceFactory.php
index ddbc8beead6..5d28dabd873 100644
--- a/module/VuFind/src/VuFind/Role/PermissionProvider/InjectAuthorizationServiceFactory.php
+++ b/module/VuFind/src/VuFind/Role/PermissionProvider/InjectAuthorizationServiceFactory.php
@@ -40,7 +40,7 @@ use ZfcRbac\Service\AuthorizationService;
  * @link     https://vufind.org/wiki/development Wiki
  */
 class InjectAuthorizationServiceFactory
-    implements \Zend\ServiceManager\Factory\FactoryInterface
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Role/PermissionProvider/InjectRequestFactory.php b/module/VuFind/src/VuFind/Role/PermissionProvider/InjectRequestFactory.php
index e290b3ceb68..353511e13a4 100644
--- a/module/VuFind/src/VuFind/Role/PermissionProvider/InjectRequestFactory.php
+++ b/module/VuFind/src/VuFind/Role/PermissionProvider/InjectRequestFactory.php
@@ -38,7 +38,8 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class InjectRequestFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class InjectRequestFactory
+    implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Role/PermissionProvider/IpRange.php b/module/VuFind/src/VuFind/Role/PermissionProvider/IpRange.php
index c656736b555..cee13c48306 100644
--- a/module/VuFind/src/VuFind/Role/PermissionProvider/IpRange.php
+++ b/module/VuFind/src/VuFind/Role/PermissionProvider/IpRange.php
@@ -30,9 +30,9 @@
  */
 namespace VuFind\Role\PermissionProvider;
 
+use Laminas\Console\Console;
+use Laminas\Stdlib\RequestInterface;
 use VuFind\Net\IpAddressUtils;
-use Zend\Console\Console;
-use Zend\Stdlib\RequestInterface;
 
 /**
  * IpRange permission provider for VuFind.
diff --git a/module/VuFind/src/VuFind/Role/PermissionProvider/IpRangeFactory.php b/module/VuFind/src/VuFind/Role/PermissionProvider/IpRangeFactory.php
index 7e681375bf8..d863110274d 100644
--- a/module/VuFind/src/VuFind/Role/PermissionProvider/IpRangeFactory.php
+++ b/module/VuFind/src/VuFind/Role/PermissionProvider/IpRangeFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class IpRangeFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class IpRangeFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Role/PermissionProvider/IpRegEx.php b/module/VuFind/src/VuFind/Role/PermissionProvider/IpRegEx.php
index 62b688675e1..eb3be1afae4 100644
--- a/module/VuFind/src/VuFind/Role/PermissionProvider/IpRegEx.php
+++ b/module/VuFind/src/VuFind/Role/PermissionProvider/IpRegEx.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Role\PermissionProvider;
 
-use Zend\Http\PhpEnvironment\Request;
+use Laminas\Http\PhpEnvironment\Request;
 
 /**
  * IpRegEx permission provider for VuFind.
diff --git a/module/VuFind/src/VuFind/Role/PermissionProvider/PluginManager.php b/module/VuFind/src/VuFind/Role/PermissionProvider/PluginManager.php
index fa0ff0cfd69..35786501578 100644
--- a/module/VuFind/src/VuFind/Role/PermissionProvider/PluginManager.php
+++ b/module/VuFind/src/VuFind/Role/PermissionProvider/PluginManager.php
@@ -61,7 +61,7 @@ class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager
     protected $factories = [
         IpRange::class => IpRangeFactory::class,
         IpRegEx::class => InjectRequestFactory::class,
-        Role::class => \Zend\ServiceManager\Factory\InvokableFactory::class,
+        Role::class => \Laminas\ServiceManager\Factory\InvokableFactory::class,
         ServerParam::class => InjectRequestFactory::class,
         Shibboleth::class => ShibbolethFactory::class,
         User::class => InjectAuthorizationServiceFactory::class,
diff --git a/module/VuFind/src/VuFind/Role/PermissionProvider/ServerParam.php b/module/VuFind/src/VuFind/Role/PermissionProvider/ServerParam.php
index 144be0dd42b..a72c7054f0a 100644
--- a/module/VuFind/src/VuFind/Role/PermissionProvider/ServerParam.php
+++ b/module/VuFind/src/VuFind/Role/PermissionProvider/ServerParam.php
@@ -29,7 +29,7 @@
  */
 namespace VuFind\Role\PermissionProvider;
 
-use Zend\Http\PhpEnvironment\Request;
+use Laminas\Http\PhpEnvironment\Request;
 
 /**
  * ServerParam permission provider for VuFind.
@@ -43,7 +43,7 @@ use Zend\Http\PhpEnvironment\Request;
  * @link     https://vufind.org Main Page
  */
 class ServerParam implements PermissionProviderInterface,
-    \Zend\Log\LoggerAwareInterface
+    \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
 
diff --git a/module/VuFind/src/VuFind/Role/PermissionProvider/Shibboleth.php b/module/VuFind/src/VuFind/Role/PermissionProvider/Shibboleth.php
index 3f34bbdd34f..814e74ed217 100644
--- a/module/VuFind/src/VuFind/Role/PermissionProvider/Shibboleth.php
+++ b/module/VuFind/src/VuFind/Role/PermissionProvider/Shibboleth.php
@@ -29,8 +29,8 @@
  */
 namespace VuFind\Role\PermissionProvider;
 
+use Laminas\Http\PhpEnvironment\Request;
 use VuFind\Auth\Shibboleth as ShibbolethAuth;
-use Zend\Http\PhpEnvironment\Request;
 
 /**
  * Shibboleth permission provider for VuFind.
@@ -62,8 +62,8 @@ class Shibboleth extends ServerParam
     /**
      * Constructor
      *
-     * @param Request             $request Request object
-     * @param \Zend\Config\Config $config  VuFind configuration
+     * @param Request                $request Request object
+     * @param \Laminas\Config\Config $config  VuFind configuration
      */
     public function __construct(Request $request, $config)
     {
diff --git a/module/VuFind/src/VuFind/Role/PermissionProvider/ShibbolethFactory.php b/module/VuFind/src/VuFind/Role/PermissionProvider/ShibbolethFactory.php
index 9c99caf7156..8961386fa5a 100644
--- a/module/VuFind/src/VuFind/Role/PermissionProvider/ShibbolethFactory.php
+++ b/module/VuFind/src/VuFind/Role/PermissionProvider/ShibbolethFactory.php
@@ -38,7 +38,7 @@ use Interop\Container\ContainerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class ShibbolethFactory implements \Zend\ServiceManager\Factory\FactoryInterface
+class ShibbolethFactory implements \Laminas\ServiceManager\Factory\FactoryInterface
 {
     /**
      * Create an object
diff --git a/module/VuFind/src/VuFind/Role/PermissionProvider/User.php b/module/VuFind/src/VuFind/Role/PermissionProvider/User.php
index ecce32c3755..0a914d41e9d 100644
--- a/module/VuFind/src/VuFind/Role/PermissionProvider/User.php
+++ b/module/VuFind/src/VuFind/Role/PermissionProvider/User.php
@@ -40,7 +40,7 @@ use ZfcRbac\Service\AuthorizationService;
  * @link     http://www.vufind.org  Main Page
  */
 class User implements PermissionProviderInterface,
-    \Zend\Log\LoggerAwareInterface
+    \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
 
diff --git a/module/VuFind/src/VuFind/Route/RouteGenerator.php b/module/VuFind/src/VuFind/Route/RouteGenerator.php
index e735b28cc4a..90dff97bca6 100644
--- a/module/VuFind/src/VuFind/Route/RouteGenerator.php
+++ b/module/VuFind/src/VuFind/Route/RouteGenerator.php
@@ -81,7 +81,7 @@ class RouteGenerator
     {
         list($actionName) = explode('/', $action, 2);
         $config['router']['routes'][$routeName] = [
-            'type'    => 'Zend\Router\Http\Segment',
+            'type'    => 'Laminas\Router\Http\Segment',
             'options' => [
                 'route'    => "/$controller/$action",
                 'constraints' => [
@@ -128,7 +128,7 @@ class RouteGenerator
     {
         // catch-all "tab" route:
         $config['router']['routes'][$routeBase] = [
-            'type'    => 'Zend\Router\Http\Segment',
+            'type'    => 'Laminas\Router\Http\Segment',
             'options' => [
                 'route'    => '/' . $controller . '/[:id[/[:tab]]]',
                 'constraints' => [
@@ -144,7 +144,7 @@ class RouteGenerator
         // special non-tab actions that each need their own route:
         foreach ($this->nonTabRecordActions as $action) {
             $config['router']['routes'][$routeBase . '-' . strtolower($action)] = [
-                'type'    => 'Zend\Router\Http\Segment',
+                'type'    => 'Laminas\Router\Http\Segment',
                 'options' => [
                     'route'    => '/' . $controller . '/[:id]/' . $action,
                     'constraints' => [
@@ -189,7 +189,7 @@ class RouteGenerator
         list($controller, $action) = explode('/', $route);
         $routeName = str_replace('/', '-', strtolower($route));
         $config['router']['routes'][$routeName] = [
-            'type' => 'Zend\Router\Http\Literal',
+            'type' => 'Laminas\Router\Http\Literal',
             'options' => [
                 'route'    => '/' . $route,
                 'defaults' => [
diff --git a/module/VuFind/src/VuFind/SMS/AbstractBase.php b/module/VuFind/src/VuFind/SMS/AbstractBase.php
index 46d4599e569..70d5e3ccdf7 100644
--- a/module/VuFind/src/VuFind/SMS/AbstractBase.php
+++ b/module/VuFind/src/VuFind/SMS/AbstractBase.php
@@ -41,19 +41,19 @@ abstract class AbstractBase implements SMSInterface
     /**
      * SMS configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $smsConfig;
 
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $config  SMS configuration
-     * @param array               $options Additional options
+     * @param \Laminas\Config\Config $config  SMS configuration
+     * @param array                  $options Additional options
      *
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function __construct(\Zend\Config\Config $config, $options = [])
+    public function __construct(\Laminas\Config\Config $config, $options = [])
     {
         $this->smsConfig = $config;
     }
diff --git a/module/VuFind/src/VuFind/SMS/Clickatell.php b/module/VuFind/src/VuFind/SMS/Clickatell.php
index f17d80d34e5..0edb8669d6b 100644
--- a/module/VuFind/src/VuFind/SMS/Clickatell.php
+++ b/module/VuFind/src/VuFind/SMS/Clickatell.php
@@ -43,21 +43,21 @@ class Clickatell extends AbstractBase
     /**
      * HTTP client
      *
-     * @var \Zend\Http\Client
+     * @var \Laminas\Http\Client
      */
     protected $client;
 
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $config  SMS configuration
-     * @param array               $options Additional options (client may be an HTTP
-     * client object)
+     * @param \Laminas\Config\Config $config  SMS configuration
+     * @param array                  $options Additional options (client may be an
+     * HTTP client object)
      */
-    public function __construct(\Zend\Config\Config $config, $options = [])
+    public function __construct(\Laminas\Config\Config $config, $options = [])
     {
         parent::__construct($config, $options);
-        $this->client = $options['client'] ?? new \Zend\Http\Client();
+        $this->client = $options['client'] ?? new \Laminas\Http\Client();
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/SMS/Factory.php b/module/VuFind/src/VuFind/SMS/Factory.php
index 8344aaed638..3bba30fa26a 100644
--- a/module/VuFind/src/VuFind/SMS/Factory.php
+++ b/module/VuFind/src/VuFind/SMS/Factory.php
@@ -28,7 +28,7 @@
 namespace VuFind\SMS;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for instantiating SMS objects
diff --git a/module/VuFind/src/VuFind/SMS/Mailer.php b/module/VuFind/src/VuFind/SMS/Mailer.php
index 4bbe5fd6200..d30bc6b2ba6 100644
--- a/module/VuFind/src/VuFind/SMS/Mailer.php
+++ b/module/VuFind/src/VuFind/SMS/Mailer.php
@@ -73,11 +73,11 @@ class Mailer extends AbstractBase
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $config  SMS configuration
-     * @param array               $options Additional options: defaultFrom (optional)
-     * and mailer (must be a \VuFind\Mailer\Mailer object)
+     * @param \Laminas\Config\Config $config  SMS configuration
+     * @param array                  $options Additional options: defaultFrom
+     * (optional) and mailer (must be a \VuFind\Mailer\Mailer object)
      */
-    public function __construct(\Zend\Config\Config $config, $options = [])
+    public function __construct(\Laminas\Config\Config $config, $options = [])
     {
         // Set up parent object first:
         parent::__construct($config, $options);
diff --git a/module/VuFind/src/VuFind/Search/BackendManager.php b/module/VuFind/src/VuFind/Search/BackendManager.php
index 89d557bce71..2e048ab3e1d 100644
--- a/module/VuFind/src/VuFind/Search/BackendManager.php
+++ b/module/VuFind/src/VuFind/Search/BackendManager.php
@@ -28,16 +28,16 @@
  */
 namespace VuFind\Search;
 
+use Laminas\EventManager\EventInterface;
+
+use Laminas\EventManager\SharedEventManagerInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
+
 use SplObjectStorage;
 
 use UnexpectedValueException;
 use VuFindSearch\Backend\BackendInterface;
 
-use Zend\EventManager\EventInterface;
-
-use Zend\EventManager\SharedEventManagerInterface;
-use Zend\ServiceManager\ServiceLocatorInterface;
-
 /**
  * Manager for search backends.
  *
diff --git a/module/VuFind/src/VuFind/Search/BackendManagerFactory.php b/module/VuFind/src/VuFind/Search/BackendManagerFactory.php
index 3d3f2d0822c..f05f56ea632 100644
--- a/module/VuFind/src/VuFind/Search/BackendManagerFactory.php
+++ b/module/VuFind/src/VuFind/Search/BackendManagerFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Search;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Search Backend Manager factory.
diff --git a/module/VuFind/src/VuFind/Search/Base/FacetCacheFactory.php b/module/VuFind/src/VuFind/Search/Base/FacetCacheFactory.php
index fcb2add4033..2f28a19d206 100644
--- a/module/VuFind/src/VuFind/Search/Base/FacetCacheFactory.php
+++ b/module/VuFind/src/VuFind/Search/Base/FacetCacheFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Search\Base;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Abstract FacetCache Factory.
@@ -80,7 +80,8 @@ class FacetCacheFactory implements FactoryInterface
         $requestedNamespace = $parts[count($parts) - 2];
         $results = $this->getResults($container, $requestedNamespace);
         $cacheManager = $container->get(\VuFind\Cache\Manager::class);
-        $language = $container->get(\Zend\Mvc\I18n\Translator::class)->getLocale();
+        $language = $container->get(\Laminas\Mvc\I18n\Translator::class)
+            ->getLocale();
         return new $requestedName($results, $cacheManager, $language);
     }
 }
diff --git a/module/VuFind/src/VuFind/Search/Base/Options.php b/module/VuFind/src/VuFind/Search/Base/Options.php
index 4fd0bdca7e6..614df29e7f0 100644
--- a/module/VuFind/src/VuFind/Search/Base/Options.php
+++ b/module/VuFind/src/VuFind/Search/Base/Options.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Search\Base;
 
+use Laminas\Config\Config;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
-use Zend\Config\Config;
 
 /**
  * Abstract options search model.
diff --git a/module/VuFind/src/VuFind/Search/Base/Params.php b/module/VuFind/src/VuFind/Search/Base/Params.php
index b1461ff607d..2e9ea6b0c96 100644
--- a/module/VuFind/src/VuFind/Search/Base/Params.php
+++ b/module/VuFind/src/VuFind/Search/Base/Params.php
@@ -284,7 +284,7 @@ class Params
     /**
      * Pull the search parameters
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
@@ -308,7 +308,7 @@ class Params
     /**
      * Pull shard parameters from the request or set defaults
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
@@ -339,7 +339,7 @@ class Params
     /**
      * Pull the page size parameter or set to default
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
@@ -376,7 +376,7 @@ class Params
     /**
      * Pull the page parameter
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
@@ -392,7 +392,7 @@ class Params
     /**
      * Initialize the object's search settings from a request object.
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
@@ -409,7 +409,7 @@ class Params
     /**
      * Support method for initSearch() -- handle basic settings.
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return bool True if search settings were found, false if not.
@@ -488,7 +488,7 @@ class Params
      * searches have numeric subscripts on the lookfor and type parameters --
      * this is how they are distinguished from basic searches.
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
@@ -519,7 +519,7 @@ class Params
     /**
      * Get the value for which type of sorting to use
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return string
@@ -548,7 +548,7 @@ class Params
     /**
      * Get the value for which results view to use
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return string
@@ -1182,7 +1182,7 @@ class Params
     /**
      * Initialize all range filters.
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
@@ -1286,13 +1286,13 @@ class Params
      * out as a separate method so that it can be more easily overridden by child
      * classes.
      *
-     * @param \Zend\StdLib\Parameters $request         Parameter object representing
-     * user request.
-     * @param string                  $requestParam    Name of parameter containing
-     * names of range filter fields.
-     * @param Callable                $valueFilter     Optional callback to process
-     * values in the range.
-     * @param Callable                $filterGenerator Optional callback to create
+     * @param \Laminas\Stdlib\Parameters $request         Parameter object
+     * representing user request.
+     * @param string                     $requestParam    Name of parameter
+     * containing names of range filter fields.
+     * @param Callable                   $valueFilter     Optional callback to
+     * process values in the range.
+     * @param Callable                   $filterGenerator Optional callback to create
      * a filter query from the range values.
      *
      * @return void
@@ -1390,7 +1390,7 @@ class Params
      * Factored out as a separate method so that it can be more easily overridden
      * by child classes.
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
@@ -1408,7 +1408,7 @@ class Params
      * filters. Factored out as a separate method so that it can be more easily
      * overridden by child classes.
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
@@ -1426,7 +1426,7 @@ class Params
      * out as a separate method so that it can be more easily overridden by child
      * classes.
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
@@ -1442,7 +1442,7 @@ class Params
     /**
      * Add filters to the object based on values found in the request object.
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
@@ -1482,7 +1482,7 @@ class Params
     /**
      * Add hidden filters to the object based on values found in the request object.
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Search/Base/Results.php b/module/VuFind/src/VuFind/Search/Base/Results.php
index 032870307d0..0145551906c 100644
--- a/module/VuFind/src/VuFind/Search/Base/Results.php
+++ b/module/VuFind/src/VuFind/Search/Base/Results.php
@@ -27,10 +27,10 @@
  */
 namespace VuFind\Search\Base;
 
+use Laminas\Paginator\Paginator;
 use VuFind\Record\Loader;
 use VuFind\Search\Factory\UrlQueryHelperFactory;
 use VuFindSearch\Service as SearchService;
-use Zend\Paginator\Paginator;
 
 /**
  * Abstract results search model.
@@ -513,7 +513,7 @@ abstract class Results
         }
 
         // Build the standard paginator control:
-        $nullAdapter = "Zend\Paginator\Adapter\NullFill";
+        $nullAdapter = "Laminas\Paginator\Adapter\NullFill";
         $paginator = new Paginator(new $nullAdapter($total));
         $paginator->setCurrentPageNumber($this->getParams()->getPage())
             ->setItemCountPerPage($this->getParams()->getLimit())
diff --git a/module/VuFind/src/VuFind/Search/EDS/Options.php b/module/VuFind/src/VuFind/Search/EDS/Options.php
index 0b8c778302a..8dfdfcc009c 100644
--- a/module/VuFind/src/VuFind/Search/EDS/Options.php
+++ b/module/VuFind/src/VuFind/Search/EDS/Options.php
@@ -252,9 +252,9 @@ class Options extends \VuFind\Search\Base\Options
      * at the time this method is called, so we just need to check if the
      * user-supplied values are valid, and if so, filter/reorder accordingly.
      *
-     * @param \Zend\Config\Config $searchSettings Configuration
-     * @param string              $section        Configuration section to read
-     * @param string              $property       Property of this object to read
+     * @param \Laminas\Config\Config $searchSettings Configuration
+     * @param string                 $section        Configuration section to read
+     * @param string                 $property       Property of this object to read
      * and/or modify.
      *
      * @return void
@@ -283,11 +283,11 @@ class Options extends \VuFind\Search\Base\Options
     /**
      * Apply user-requested "common" settings.
      *
-     * @param \Zend\Config\Config $searchSettings Configuration
-     * @param string              $setting        Name of common setting
-     * @param string              $list           Name of property containing valid
-     * values
-     * @param string              $target         Name of property to populate
+     * @param \Laminas\Config\Config $searchSettings Configuration
+     * @param string                 $setting        Name of common setting
+     * @param string                 $list           Name of property containing
+     * valid values
+     * @param string                 $target         Name of property to populate
      *
      * @return void
      */
@@ -316,7 +316,7 @@ class Options extends \VuFind\Search\Base\Options
      * from the values in the Info method. (If the values set in the config files in
      * not a 'valid' EDS API value, it will be ignored.
      *
-     * @param \Zend\Config\Config $searchSettings Configuration
+     * @param \Laminas\Config\Config $searchSettings Configuration
      *
      * @return void
      */
diff --git a/module/VuFind/src/VuFind/Search/EDS/OptionsFactory.php b/module/VuFind/src/VuFind/Search/EDS/OptionsFactory.php
index 707c53d2e39..ca246b8f3cf 100644
--- a/module/VuFind/src/VuFind/Search/EDS/OptionsFactory.php
+++ b/module/VuFind/src/VuFind/Search/EDS/OptionsFactory.php
@@ -61,8 +61,8 @@ class OptionsFactory extends \VuFind\Search\Options\OptionsFactory
         if (!empty($options)) {
             throw new \Exception('Unexpected options sent to factory.');
         }
-        $session = new \Zend\Session\Container(
-            'EBSCO', $container->get(\Zend\Session\SessionManager::class)
+        $session = new \Laminas\Session\Container(
+            'EBSCO', $container->get(\Laminas\Session\SessionManager::class)
         );
         // No API info in session? Re-establish connection:
         if (!isset($session->info)) {
diff --git a/module/VuFind/src/VuFind/Search/EDS/Params.php b/module/VuFind/src/VuFind/Search/EDS/Params.php
index 2f8e92aefb9..1da9eadc4a8 100644
--- a/module/VuFind/src/VuFind/Search/EDS/Params.php
+++ b/module/VuFind/src/VuFind/Search/EDS/Params.php
@@ -95,7 +95,7 @@ class Params extends \VuFind\Search\Base\Params
     /**
      * Pull the search parameters
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Search/EDS/QueryAdapter.php b/module/VuFind/src/VuFind/Search/EDS/QueryAdapter.php
index c6db3464732..1a8d5a136dc 100644
--- a/module/VuFind/src/VuFind/Search/EDS/QueryAdapter.php
+++ b/module/VuFind/src/VuFind/Search/EDS/QueryAdapter.php
@@ -28,10 +28,10 @@
  */
 namespace VuFind\Search\EDS;
 
+use Laminas\Stdlib\Parameters;
 use VuFindSearch\Query\AbstractQuery;
 use VuFindSearch\Query\Query;
 use VuFindSearch\Query\QueryGroup;
-use Zend\StdLib\Parameters;
 
 /**
  * EDS API Query Adapter: search query parameters to AbstractQuery object
diff --git a/module/VuFind/src/VuFind/Search/Factory/AbstractSolrBackendFactory.php b/module/VuFind/src/VuFind/Search/Factory/AbstractSolrBackendFactory.php
index 6cc7574f088..307b7aa49c7 100644
--- a/module/VuFind/src/VuFind/Search/Factory/AbstractSolrBackendFactory.php
+++ b/module/VuFind/src/VuFind/Search/Factory/AbstractSolrBackendFactory.php
@@ -30,6 +30,8 @@ namespace VuFind\Search\Factory;
 
 use Interop\Container\ContainerInterface;
 
+use Laminas\Config\Config;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 use VuFind\Search\Solr\DeduplicationListener;
 use VuFind\Search\Solr\FilterFieldConversionListener;
 use VuFind\Search\Solr\HideFacetValueListener;
@@ -38,20 +40,18 @@ use VuFind\Search\Solr\InjectConditionalFilterListener;
 use VuFind\Search\Solr\InjectHighlightingListener;
 use VuFind\Search\Solr\InjectSpellingListener;
 use VuFind\Search\Solr\MultiIndexListener;
+
 use VuFind\Search\Solr\V3\ErrorListener as LegacyErrorListener;
 use VuFind\Search\Solr\V4\ErrorListener;
-
 use VuFindSearch\Backend\BackendInterface;
 use VuFindSearch\Backend\Solr\Backend;
 use VuFindSearch\Backend\Solr\Connector;
 use VuFindSearch\Backend\Solr\HandlerMap;
 use VuFindSearch\Backend\Solr\LuceneSyntaxHelper;
-use VuFindSearch\Backend\Solr\QueryBuilder;
-use VuFindSearch\Backend\Solr\SimilarBuilder;
 
-use Zend\Config\Config;
+use VuFindSearch\Backend\Solr\QueryBuilder;
 
-use Zend\ServiceManager\Factory\FactoryInterface;
+use VuFindSearch\Backend\Solr\SimilarBuilder;
 
 /**
  * Abstract factory for SOLR backends.
@@ -67,7 +67,7 @@ abstract class AbstractSolrBackendFactory implements FactoryInterface
     /**
      * Logger.
      *
-     * @var \Zend\Log\LoggerInterface
+     * @var \Laminas\Log\LoggerInterface
      */
     protected $logger;
 
diff --git a/module/VuFind/src/VuFind/Search/Factory/BrowZineBackendFactory.php b/module/VuFind/src/VuFind/Search/Factory/BrowZineBackendFactory.php
index bd612a18962..a4337a0bb25 100644
--- a/module/VuFind/src/VuFind/Search/Factory/BrowZineBackendFactory.php
+++ b/module/VuFind/src/VuFind/Search/Factory/BrowZineBackendFactory.php
@@ -30,12 +30,12 @@ namespace VuFind\Search\Factory;
 
 use Interop\Container\ContainerInterface;
 
+use Laminas\ServiceManager\Factory\FactoryInterface;
 use VuFindSearch\Backend\BrowZine\Backend;
 use VuFindSearch\Backend\BrowZine\Connector;
 use VuFindSearch\Backend\BrowZine\QueryBuilder;
-use VuFindSearch\Backend\BrowZine\Response\RecordCollectionFactory;
 
-use Zend\ServiceManager\Factory\FactoryInterface;
+use VuFindSearch\Backend\BrowZine\Response\RecordCollectionFactory;
 
 /**
  * Factory for BrowZine backend.
@@ -51,7 +51,7 @@ class BrowZineBackendFactory implements FactoryInterface
     /**
      * Logger.
      *
-     * @var \Zend\Log\LoggerInterface
+     * @var \Laminas\Log\LoggerInterface
      */
     protected $logger;
 
@@ -65,7 +65,7 @@ class BrowZineBackendFactory implements FactoryInterface
     /**
      * BrowZine configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $browzineConfig;
 
diff --git a/module/VuFind/src/VuFind/Search/Factory/EITBackendFactory.php b/module/VuFind/src/VuFind/Search/Factory/EITBackendFactory.php
index 3fe65d424df..f8d197688f4 100644
--- a/module/VuFind/src/VuFind/Search/Factory/EITBackendFactory.php
+++ b/module/VuFind/src/VuFind/Search/Factory/EITBackendFactory.php
@@ -30,12 +30,12 @@ namespace VuFind\Search\Factory;
 
 use Interop\Container\ContainerInterface;
 
+use Laminas\ServiceManager\Factory\FactoryInterface;
 use VuFindSearch\Backend\EIT\Backend;
 use VuFindSearch\Backend\EIT\Connector;
 use VuFindSearch\Backend\EIT\QueryBuilder;
-use VuFindSearch\Backend\EIT\Response\XML\RecordCollectionFactory;
 
-use Zend\ServiceManager\Factory\FactoryInterface;
+use VuFindSearch\Backend\EIT\Response\XML\RecordCollectionFactory;
 
 /**
  * Factory for EIT backends.
@@ -52,7 +52,7 @@ class EITBackendFactory implements FactoryInterface
     /**
      * Logger.
      *
-     * @var \Zend\Log\LoggerInterface
+     * @var \Laminas\Log\LoggerInterface
      */
     protected $logger;
 
@@ -66,7 +66,7 @@ class EITBackendFactory implements FactoryInterface
     /**
      * VuFind configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
diff --git a/module/VuFind/src/VuFind/Search/Factory/EdsBackendFactory.php b/module/VuFind/src/VuFind/Search/Factory/EdsBackendFactory.php
index 3afff45e7b3..927df1696c2 100644
--- a/module/VuFind/src/VuFind/Search/Factory/EdsBackendFactory.php
+++ b/module/VuFind/src/VuFind/Search/Factory/EdsBackendFactory.php
@@ -30,13 +30,12 @@ namespace VuFind\Search\Factory;
 
 use Interop\Container\ContainerInterface;
 
+use Laminas\ServiceManager\Factory\FactoryInterface;
 use VuFindSearch\Backend\EDS\Backend;
 use VuFindSearch\Backend\EDS\Connector;
 use VuFindSearch\Backend\EDS\QueryBuilder;
 use VuFindSearch\Backend\EDS\Response\RecordCollectionFactory;
 
-use Zend\ServiceManager\Factory\FactoryInterface;
-
 /**
  * Factory for EDS backends.
  *
@@ -51,7 +50,7 @@ class EdsBackendFactory implements FactoryInterface
     /**
      * Logger.
      *
-     * @var \Zend\Log\LoggerInterface
+     * @var \Laminas\Log\LoggerInterface
      */
     protected $logger = null;
 
@@ -65,7 +64,7 @@ class EdsBackendFactory implements FactoryInterface
     /**
      * EDS configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $edsConfig;
 
@@ -112,8 +111,9 @@ class EdsBackendFactory implements FactoryInterface
         $auth = $this->serviceLocator
             ->get(\ZfcRbac\Service\AuthorizationService::class);
         $isGuest = !$auth->isGranted('access.EDSExtendedResults');
-        $session = new \Zend\Session\Container(
-            'EBSCO', $this->serviceLocator->get(\Zend\Session\SessionManager::class)
+        $session = new \Laminas\Session\Container(
+            'EBSCO',
+            $this->serviceLocator->get(\Laminas\Session\SessionManager::class)
         );
         $backend = new Backend(
             $connector, $this->createRecordCollectionFactory(),
diff --git a/module/VuFind/src/VuFind/Search/Factory/LibGuidesBackendFactory.php b/module/VuFind/src/VuFind/Search/Factory/LibGuidesBackendFactory.php
index d8da8b3a9ff..15425848e27 100644
--- a/module/VuFind/src/VuFind/Search/Factory/LibGuidesBackendFactory.php
+++ b/module/VuFind/src/VuFind/Search/Factory/LibGuidesBackendFactory.php
@@ -30,12 +30,12 @@ namespace VuFind\Search\Factory;
 
 use Interop\Container\ContainerInterface;
 
+use Laminas\ServiceManager\Factory\FactoryInterface;
 use VuFindSearch\Backend\LibGuides\Backend;
 use VuFindSearch\Backend\LibGuides\Connector;
 use VuFindSearch\Backend\LibGuides\QueryBuilder;
-use VuFindSearch\Backend\LibGuides\Response\RecordCollectionFactory;
 
-use Zend\ServiceManager\Factory\FactoryInterface;
+use VuFindSearch\Backend\LibGuides\Response\RecordCollectionFactory;
 
 /**
  * Factory for LibGuides backends.
@@ -51,7 +51,7 @@ class LibGuidesBackendFactory implements FactoryInterface
     /**
      * Logger.
      *
-     * @var \Zend\Log\LoggerInterface
+     * @var \Laminas\Log\LoggerInterface
      */
     protected $logger;
 
@@ -65,7 +65,7 @@ class LibGuidesBackendFactory implements FactoryInterface
     /**
      * LibGuides configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $libGuidesConfig;
 
diff --git a/module/VuFind/src/VuFind/Search/Factory/Pazpar2BackendFactory.php b/module/VuFind/src/VuFind/Search/Factory/Pazpar2BackendFactory.php
index 335da7e50a1..5c1b40a3bef 100644
--- a/module/VuFind/src/VuFind/Search/Factory/Pazpar2BackendFactory.php
+++ b/module/VuFind/src/VuFind/Search/Factory/Pazpar2BackendFactory.php
@@ -30,14 +30,14 @@ namespace VuFind\Search\Factory;
 
 use Interop\Container\ContainerInterface;
 
-use VuFindHttp\HttpService;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
+use VuFindHttp\HttpService;
 use VuFindSearch\Backend\Pazpar2\Backend;
 use VuFindSearch\Backend\Pazpar2\Connector;
 use VuFindSearch\Backend\Pazpar2\QueryBuilder;
-use VuFindSearch\Backend\Pazpar2\Response\RecordCollectionFactory;
 
-use Zend\ServiceManager\Factory\FactoryInterface;
+use VuFindSearch\Backend\Pazpar2\Response\RecordCollectionFactory;
 
 /**
  * Factory for Pazpar2 backends.
@@ -53,7 +53,7 @@ class Pazpar2BackendFactory implements FactoryInterface
     /**
      * Logger.
      *
-     * @var \Zend\Log\LoggerInterface
+     * @var \Laminas\Log\LoggerInterface
      */
     protected $logger;
 
@@ -67,7 +67,7 @@ class Pazpar2BackendFactory implements FactoryInterface
     /**
      * VuFind configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
diff --git a/module/VuFind/src/VuFind/Search/Factory/PrimoBackendFactory.php b/module/VuFind/src/VuFind/Search/Factory/PrimoBackendFactory.php
index d3a57fb75dd..baa8f477749 100644
--- a/module/VuFind/src/VuFind/Search/Factory/PrimoBackendFactory.php
+++ b/module/VuFind/src/VuFind/Search/Factory/PrimoBackendFactory.php
@@ -30,15 +30,15 @@ namespace VuFind\Search\Factory;
 
 use Interop\Container\ContainerInterface;
 
+use Laminas\ServiceManager\Factory\FactoryInterface;
 use VuFind\Search\Primo\InjectOnCampusListener;
 use VuFind\Search\Primo\PrimoPermissionHandler;
 use VuFindSearch\Backend\Primo\Backend;
-use VuFindSearch\Backend\Primo\Connector;
 
+use VuFindSearch\Backend\Primo\Connector;
 use VuFindSearch\Backend\Primo\QueryBuilder;
-use VuFindSearch\Backend\Primo\Response\RecordCollectionFactory;
 
-use Zend\ServiceManager\Factory\FactoryInterface;
+use VuFindSearch\Backend\Primo\Response\RecordCollectionFactory;
 
 use ZfcRbac\Service\AuthorizationService;
 
@@ -56,7 +56,7 @@ class PrimoBackendFactory implements FactoryInterface
     /**
      * Logger.
      *
-     * @var \Zend\Log\LoggerInterface
+     * @var \Laminas\Log\LoggerInterface
      */
     protected $logger;
 
@@ -70,7 +70,7 @@ class PrimoBackendFactory implements FactoryInterface
     /**
      * Primo configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $primoConfig;
 
diff --git a/module/VuFind/src/VuFind/Search/Factory/SummonBackendFactory.php b/module/VuFind/src/VuFind/Search/Factory/SummonBackendFactory.php
index 2b52ce49ac8..71cd3d783d2 100644
--- a/module/VuFind/src/VuFind/Search/Factory/SummonBackendFactory.php
+++ b/module/VuFind/src/VuFind/Search/Factory/SummonBackendFactory.php
@@ -30,13 +30,13 @@ namespace VuFind\Search\Factory;
 
 use Interop\Container\ContainerInterface;
 
-use SerialsSolutions\Summon\Zend2 as Connector;
+use Laminas\ServiceManager\Factory\FactoryInterface;
+use SerialsSolutions\Summon\Laminas as Connector;
 use VuFindSearch\Backend\Solr\LuceneSyntaxHelper;
 use VuFindSearch\Backend\Summon\Backend;
 use VuFindSearch\Backend\Summon\QueryBuilder;
-use VuFindSearch\Backend\Summon\Response\RecordCollectionFactory;
 
-use Zend\ServiceManager\Factory\FactoryInterface;
+use VuFindSearch\Backend\Summon\Response\RecordCollectionFactory;
 
 /**
  * Factory for Summon backends.
@@ -52,7 +52,7 @@ class SummonBackendFactory implements FactoryInterface
     /**
      * Logger.
      *
-     * @var \Zend\Log\LoggerInterface
+     * @var \Laminas\Log\LoggerInterface
      */
     protected $logger;
 
@@ -66,14 +66,14 @@ class SummonBackendFactory implements FactoryInterface
     /**
      * VuFind configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
     /**
      * Summon configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $summonConfig;
 
diff --git a/module/VuFind/src/VuFind/Search/Factory/WorldCatBackendFactory.php b/module/VuFind/src/VuFind/Search/Factory/WorldCatBackendFactory.php
index a257f372f7c..5f14819d89e 100644
--- a/module/VuFind/src/VuFind/Search/Factory/WorldCatBackendFactory.php
+++ b/module/VuFind/src/VuFind/Search/Factory/WorldCatBackendFactory.php
@@ -30,12 +30,12 @@ namespace VuFind\Search\Factory;
 
 use Interop\Container\ContainerInterface;
 
+use Laminas\ServiceManager\Factory\FactoryInterface;
 use VuFindSearch\Backend\WorldCat\Backend;
 use VuFindSearch\Backend\WorldCat\Connector;
 use VuFindSearch\Backend\WorldCat\QueryBuilder;
-use VuFindSearch\Backend\WorldCat\Response\XML\RecordCollectionFactory;
 
-use Zend\ServiceManager\Factory\FactoryInterface;
+use VuFindSearch\Backend\WorldCat\Response\XML\RecordCollectionFactory;
 
 /**
  * Factory for WorldCat backends.
@@ -51,7 +51,7 @@ class WorldCatBackendFactory implements FactoryInterface
     /**
      * Logger.
      *
-     * @var \Zend\Log\LoggerInterface
+     * @var \Laminas\Log\LoggerInterface
      */
     protected $logger;
 
@@ -65,14 +65,14 @@ class WorldCatBackendFactory implements FactoryInterface
     /**
      * VuFind configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
     /**
      * WorldCat configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $wcConfig;
 
diff --git a/module/VuFind/src/VuFind/Search/Favorites/Params.php b/module/VuFind/src/VuFind/Search/Favorites/Params.php
index 339de9ae906..e7da8f5664f 100644
--- a/module/VuFind/src/VuFind/Search/Favorites/Params.php
+++ b/module/VuFind/src/VuFind/Search/Favorites/Params.php
@@ -41,7 +41,7 @@ class Params extends \VuFind\Search\Base\Params
     /**
      * Add filters to the object based on values found in the request object.
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Search/History.php b/module/VuFind/src/VuFind/Search/History.php
index 8115263e6b2..f86850b081e 100644
--- a/module/VuFind/src/VuFind/Search/History.php
+++ b/module/VuFind/src/VuFind/Search/History.php
@@ -64,7 +64,7 @@ class History
     /**
      * VuFind configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
@@ -74,10 +74,10 @@ class History
      * @param \VuFind\Db\Table\Search              $searchTable    Search table
      * @param string                               $sessionId      Session ID
      * @param \VuFind\Search\Results\PluginManager $resultsManager Results manager
-     * @param \Zend\Config\Config                  $config         Configuration
+     * @param \Laminas\Config\Config               $config         Configuration
      */
     public function __construct($searchTable, $sessionId, $resultsManager,
-        \Zend\Config\Config $config = null
+        \Laminas\Config\Config $config = null
     ) {
         $this->searchTable = $searchTable;
         $this->sessionId = $sessionId;
diff --git a/module/VuFind/src/VuFind/Search/HistoryFactory.php b/module/VuFind/src/VuFind/Search/HistoryFactory.php
index 6c95e9d079c..0141f4a9179 100644
--- a/module/VuFind/src/VuFind/Search/HistoryFactory.php
+++ b/module/VuFind/src/VuFind/Search/HistoryFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Search;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Search history factory.
@@ -65,7 +65,8 @@ class HistoryFactory implements FactoryInterface
             ->get('Search');
         $resultsManager = $container
             ->get(\VuFind\Search\Results\PluginManager::class);
-        $sessionId = $container->get(\Zend\Session\SessionManager::class)->getId();
+        $sessionId = $container->get(\Laminas\Session\SessionManager::class)
+            ->getId();
         $cfg = $container->get(\VuFind\Config\PluginManager::class)->get('config');
         return new $requestedName($searchTable, $sessionId, $resultsManager, $cfg);
     }
diff --git a/module/VuFind/src/VuFind/Search/Memory.php b/module/VuFind/src/VuFind/Search/Memory.php
index f44ec6aa318..a4a904bd719 100644
--- a/module/VuFind/src/VuFind/Search/Memory.php
+++ b/module/VuFind/src/VuFind/Search/Memory.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Search;
 
-use Zend\Session\Container;
+use Laminas\Session\Container;
 
 /**
  * Wrapper class to handle search memory
diff --git a/module/VuFind/src/VuFind/Search/MemoryFactory.php b/module/VuFind/src/VuFind/Search/MemoryFactory.php
index a54cdebc952..b88852d1543 100644
--- a/module/VuFind/src/VuFind/Search/MemoryFactory.php
+++ b/module/VuFind/src/VuFind/Search/MemoryFactory.php
@@ -28,8 +28,8 @@
 namespace VuFind\Search;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
-use Zend\Session\Container;
+use Laminas\ServiceManager\Factory\FactoryInterface;
+use Laminas\Session\Container;
 
 /**
  * Search memory factory.
@@ -63,7 +63,7 @@ class MemoryFactory implements FactoryInterface
             throw new \Exception('Unexpected options sent to factory.');
         }
         $session = new Container(
-            'Search', $container->get(\Zend\Session\SessionManager::class)
+            'Search', $container->get(\Laminas\Session\SessionManager::class)
         );
         return new $requestedName($session);
     }
diff --git a/module/VuFind/src/VuFind/Search/MixedList/Params.php b/module/VuFind/src/VuFind/Search/MixedList/Params.php
index 8ae44fdd865..3c7700fb76b 100644
--- a/module/VuFind/src/VuFind/Search/MixedList/Params.php
+++ b/module/VuFind/src/VuFind/Search/MixedList/Params.php
@@ -48,7 +48,7 @@ class Params extends \VuFind\Search\Base\Params
     /**
      * Initialize the object's search settings from a request object.
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Search/Options/OptionsFactory.php b/module/VuFind/src/VuFind/Search/Options/OptionsFactory.php
index 1c08cfddbca..cc0cb5ec32f 100644
--- a/module/VuFind/src/VuFind/Search/Options/OptionsFactory.php
+++ b/module/VuFind/src/VuFind/Search/Options/OptionsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Search\Options;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Generic factory for search options objects.
diff --git a/module/VuFind/src/VuFind/Search/Options/ViewOptionsTrait.php b/module/VuFind/src/VuFind/Search/Options/ViewOptionsTrait.php
index 5d8b1e13d31..2e7d9aa0604 100644
--- a/module/VuFind/src/VuFind/Search/Options/ViewOptionsTrait.php
+++ b/module/VuFind/src/VuFind/Search/Options/ViewOptionsTrait.php
@@ -43,11 +43,11 @@ trait ViewOptionsTrait
     /**
      * Set up the view options.
      *
-     * @param \Zend\Config\Config $searchSettings Search settings.
+     * @param \Laminas\Config\Config $searchSettings Search settings.
      *
      * @return void
      */
-    public function initViewOptions(\Zend\Config\Config $searchSettings)
+    public function initViewOptions(\Laminas\Config\Config $searchSettings)
     {
         if (isset($searchSettings->General->default_view)) {
             $this->defaultView = $searchSettings->General->default_view;
diff --git a/module/VuFind/src/VuFind/Search/Params/FacetLimitTrait.php b/module/VuFind/src/VuFind/Search/Params/FacetLimitTrait.php
index 1e4e2727103..b214a53dd45 100644
--- a/module/VuFind/src/VuFind/Search/Params/FacetLimitTrait.php
+++ b/module/VuFind/src/VuFind/Search/Params/FacetLimitTrait.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Search\Params;
 
-use Zend\Config\Config;
+use Laminas\Config\Config;
 
 /**
  * Trait to add facet limiting settings to a Params object.
diff --git a/module/VuFind/src/VuFind/Search/Params/ParamsFactory.php b/module/VuFind/src/VuFind/Search/Params/ParamsFactory.php
index 5e1fe1b80dd..3cf142c819b 100644
--- a/module/VuFind/src/VuFind/Search/Params/ParamsFactory.php
+++ b/module/VuFind/src/VuFind/Search/Params/ParamsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Search\Params;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Generic factory for search params objects.
diff --git a/module/VuFind/src/VuFind/Search/Primo/InjectOnCampusListener.php b/module/VuFind/src/VuFind/Search/Primo/InjectOnCampusListener.php
index 7f8fa7f94dd..1f53761fa64 100644
--- a/module/VuFind/src/VuFind/Search/Primo/InjectOnCampusListener.php
+++ b/module/VuFind/src/VuFind/Search/Primo/InjectOnCampusListener.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\Search\Primo;
 
-use Zend\EventManager\EventInterface;
-use Zend\EventManager\SharedEventManagerInterface;
+use Laminas\EventManager\EventInterface;
+use Laminas\EventManager\SharedEventManagerInterface;
 
 use ZfcRbac\Service\AuthorizationServiceAwareTrait;
 
diff --git a/module/VuFind/src/VuFind/Search/Primo/PrimoPermissionHandler.php b/module/VuFind/src/VuFind/Search/Primo/PrimoPermissionHandler.php
index f35293a55e6..e307999a137 100644
--- a/module/VuFind/src/VuFind/Search/Primo/PrimoPermissionHandler.php
+++ b/module/VuFind/src/VuFind/Search/Primo/PrimoPermissionHandler.php
@@ -59,14 +59,14 @@ class PrimoPermissionHandler
     /**
      * Constructor.
      *
-     * @param Zend\Config\Config|array $primoPermConfig Primo-Config for
+     * @param Laminas\Config\Config|array $primoPermConfig Primo-Config for
      * Institutions
      *
      * @return void
      */
     public function __construct($primoPermConfig)
     {
-        if ($primoPermConfig instanceof \Zend\Config\Config) {
+        if ($primoPermConfig instanceof \Laminas\Config\Config) {
             $primoPermConfig = $primoPermConfig->toArray();
         }
         $this->primoConfig = is_array($primoPermConfig) ? $primoPermConfig : [];
diff --git a/module/VuFind/src/VuFind/Search/QueryAdapter.php b/module/VuFind/src/VuFind/Search/QueryAdapter.php
index ca0f4fcbb35..4c77767732c 100644
--- a/module/VuFind/src/VuFind/Search/QueryAdapter.php
+++ b/module/VuFind/src/VuFind/Search/QueryAdapter.php
@@ -28,10 +28,10 @@
  */
 namespace VuFind\Search;
 
+use Laminas\Stdlib\Parameters;
 use VuFindSearch\Query\AbstractQuery;
 use VuFindSearch\Query\Query;
 use VuFindSearch\Query\QueryGroup;
-use Zend\StdLib\Parameters;
 
 /**
  * Legacy adapter: search query parameters to AbstractQuery object
diff --git a/module/VuFind/src/VuFind/Search/RecommendListener.php b/module/VuFind/src/VuFind/Search/RecommendListener.php
index 85ac18478b4..9cbdbb2c9bc 100644
--- a/module/VuFind/src/VuFind/Search/RecommendListener.php
+++ b/module/VuFind/src/VuFind/Search/RecommendListener.php
@@ -28,9 +28,9 @@
  */
 namespace VuFind\Search;
 
+use Laminas\EventManager\EventInterface;
+use Laminas\EventManager\SharedEventManagerInterface;
 use VuFind\Recommend\PluginManager;
-use Zend\EventManager\EventInterface;
-use Zend\EventManager\SharedEventManagerInterface;
 
 /**
  * Recommend listener.
diff --git a/module/VuFind/src/VuFind/Search/Results/ResultsFactory.php b/module/VuFind/src/VuFind/Search/Results/ResultsFactory.php
index cddcfeb5797..f7e9073978a 100644
--- a/module/VuFind/src/VuFind/Search/Results/ResultsFactory.php
+++ b/module/VuFind/src/VuFind/Search/Results/ResultsFactory.php
@@ -28,8 +28,8 @@
 namespace VuFind\Search\Results;
 
 use Interop\Container\ContainerInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 use VuFind\Search\Factory\UrlQueryHelperFactory;
-use Zend\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Generic factory for search results objects.
diff --git a/module/VuFind/src/VuFind/Search/SearchRunner.php b/module/VuFind/src/VuFind/Search/SearchRunner.php
index 53a08fc0c19..5fab0949c03 100644
--- a/module/VuFind/src/VuFind/Search/SearchRunner.php
+++ b/module/VuFind/src/VuFind/Search/SearchRunner.php
@@ -27,10 +27,10 @@
  */
 namespace VuFind\Search;
 
+use Laminas\EventManager\EventManager;
+use Laminas\EventManager\EventManagerInterface;
+use Laminas\Stdlib\Parameters;
 use VuFind\Search\Results\PluginManager as ResultsManager;
-use Zend\EventManager\EventManager;
-use Zend\EventManager\EventManagerInterface;
-use Zend\Stdlib\Parameters;
 
 /**
  * VuFind Search Runner
diff --git a/module/VuFind/src/VuFind/Search/SearchRunnerFactory.php b/module/VuFind/src/VuFind/Search/SearchRunnerFactory.php
index 135bd7e5942..4dd683e0692 100644
--- a/module/VuFind/src/VuFind/Search/SearchRunnerFactory.php
+++ b/module/VuFind/src/VuFind/Search/SearchRunnerFactory.php
@@ -28,8 +28,8 @@
 namespace VuFind\Search;
 
 use Interop\Container\ContainerInterface;
-use Zend\EventManager\EventManager;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\EventManager\EventManager;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Search runner factory.
diff --git a/module/VuFind/src/VuFind/Search/SearchTabsHelper.php b/module/VuFind/src/VuFind/Search/SearchTabsHelper.php
index 999fa728163..c4e436b650c 100644
--- a/module/VuFind/src/VuFind/Search/SearchTabsHelper.php
+++ b/module/VuFind/src/VuFind/Search/SearchTabsHelper.php
@@ -29,8 +29,8 @@
  */
 namespace VuFind\Search;
 
+use Laminas\Http\Request;
 use VuFind\Search\Results\PluginManager;
-use Zend\Http\Request;
 
 /**
  * "Search tabs" helper
@@ -42,7 +42,7 @@ use Zend\Http\Request;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class SearchTabsHelper extends \Zend\View\Helper\AbstractHelper
+class SearchTabsHelper extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Search manager
diff --git a/module/VuFind/src/VuFind/Search/SearchTabsHelperFactory.php b/module/VuFind/src/VuFind/Search/SearchTabsHelperFactory.php
index 136ab2b5d64..d96accd3106 100644
--- a/module/VuFind/src/VuFind/Search/SearchTabsHelperFactory.php
+++ b/module/VuFind/src/VuFind/Search/SearchTabsHelperFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Search;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Search tabs helper factory.
diff --git a/module/VuFind/src/VuFind/Search/Solr/AbstractErrorListener.php b/module/VuFind/src/VuFind/Search/Solr/AbstractErrorListener.php
index b54da8be1e8..b4c4d2e102c 100644
--- a/module/VuFind/src/VuFind/Search/Solr/AbstractErrorListener.php
+++ b/module/VuFind/src/VuFind/Search/Solr/AbstractErrorListener.php
@@ -28,12 +28,12 @@
  */
 namespace VuFind\Search\Solr;
 
+use Laminas\EventManager\EventInterface;
+
+use Laminas\EventManager\SharedEventManagerInterface;
 use SplObjectStorage;
 
 use VuFindSearch\Backend\BackendInterface;
-use Zend\EventManager\EventInterface;
-
-use Zend\EventManager\SharedEventManagerInterface;
 
 /**
  * Abstract base class of SOLR error listeners.
diff --git a/module/VuFind/src/VuFind/Search/Solr/DeduplicationListener.php b/module/VuFind/src/VuFind/Search/Solr/DeduplicationListener.php
index a4e66f76dcc..f2d551279b2 100644
--- a/module/VuFind/src/VuFind/Search/Solr/DeduplicationListener.php
+++ b/module/VuFind/src/VuFind/Search/Solr/DeduplicationListener.php
@@ -30,11 +30,11 @@
  */
 namespace VuFind\Search\Solr;
 
-use VuFindSearch\Backend\BackendInterface;
+use Laminas\EventManager\EventInterface;
 
-use Zend\EventManager\EventInterface;
-use Zend\EventManager\SharedEventManagerInterface;
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\EventManager\SharedEventManagerInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
+use VuFindSearch\Backend\BackendInterface;
 
 /**
  * Solr merged record handling listener.
diff --git a/module/VuFind/src/VuFind/Search/Solr/FilterFieldConversionListener.php b/module/VuFind/src/VuFind/Search/Solr/FilterFieldConversionListener.php
index 0e93fb8c8ed..755327080c7 100644
--- a/module/VuFind/src/VuFind/Search/Solr/FilterFieldConversionListener.php
+++ b/module/VuFind/src/VuFind/Search/Solr/FilterFieldConversionListener.php
@@ -28,8 +28,8 @@
  */
 namespace VuFind\Search\Solr;
 
-use Zend\EventManager\EventInterface;
-use Zend\EventManager\SharedEventManagerInterface;
+use Laminas\EventManager\EventInterface;
+use Laminas\EventManager\SharedEventManagerInterface;
 
 /**
  * Listener to convert one field to another in filters (for legacy purposes).
diff --git a/module/VuFind/src/VuFind/Search/Solr/HideFacetValueListener.php b/module/VuFind/src/VuFind/Search/Solr/HideFacetValueListener.php
index f3939d53f84..3b66e7a1492 100644
--- a/module/VuFind/src/VuFind/Search/Solr/HideFacetValueListener.php
+++ b/module/VuFind/src/VuFind/Search/Solr/HideFacetValueListener.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\Search\Solr;
 
+use Laminas\EventManager\EventInterface;
+use Laminas\EventManager\SharedEventManagerInterface;
 use VuFindSearch\Backend\BackendInterface;
-use Zend\EventManager\EventInterface;
-use Zend\EventManager\SharedEventManagerInterface;
 
 /**
  * Hide single facet values from displaying.
diff --git a/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetListener.php b/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetListener.php
index 96052f2c2b5..798cd809878 100644
--- a/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetListener.php
+++ b/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetListener.php
@@ -30,11 +30,11 @@
  */
 namespace VuFind\Search\Solr;
 
-use VuFindSearch\Backend\BackendInterface;
+use Laminas\EventManager\EventInterface;
 
-use Zend\EventManager\EventInterface;
-use Zend\EventManager\SharedEventManagerInterface;
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\EventManager\SharedEventManagerInterface;
+use Laminas\ServiceManager\ServiceLocatorInterface;
+use VuFindSearch\Backend\BackendInterface;
 
 /**
  * Solr hierarchical facet handling listener.
diff --git a/module/VuFind/src/VuFind/Search/Solr/InjectConditionalFilterListener.php b/module/VuFind/src/VuFind/Search/Solr/InjectConditionalFilterListener.php
index fe2c42352c5..5521a39e3aa 100644
--- a/module/VuFind/src/VuFind/Search/Solr/InjectConditionalFilterListener.php
+++ b/module/VuFind/src/VuFind/Search/Solr/InjectConditionalFilterListener.php
@@ -28,8 +28,8 @@
  */
 namespace VuFind\Search\Solr;
 
-use Zend\EventManager\EventInterface;
-use Zend\EventManager\SharedEventManagerInterface;
+use Laminas\EventManager\EventInterface;
+use Laminas\EventManager\SharedEventManagerInterface;
 
 use ZfcRbac\Service\AuthorizationServiceAwareTrait;
 
diff --git a/module/VuFind/src/VuFind/Search/Solr/InjectHighlightingListener.php b/module/VuFind/src/VuFind/Search/Solr/InjectHighlightingListener.php
index 8f9c970eabd..887b60a7ea7 100644
--- a/module/VuFind/src/VuFind/Search/Solr/InjectHighlightingListener.php
+++ b/module/VuFind/src/VuFind/Search/Solr/InjectHighlightingListener.php
@@ -28,10 +28,10 @@
  */
 namespace VuFind\Search\Solr;
 
-use VuFindSearch\Backend\BackendInterface;
+use Laminas\EventManager\EventInterface;
 
-use Zend\EventManager\EventInterface;
-use Zend\EventManager\SharedEventManagerInterface;
+use Laminas\EventManager\SharedEventManagerInterface;
+use VuFindSearch\Backend\BackendInterface;
 
 /**
  * Solr highlighting listener.
diff --git a/module/VuFind/src/VuFind/Search/Solr/InjectSpellingListener.php b/module/VuFind/src/VuFind/Search/Solr/InjectSpellingListener.php
index 9816dbeef4b..1bb89339b88 100644
--- a/module/VuFind/src/VuFind/Search/Solr/InjectSpellingListener.php
+++ b/module/VuFind/src/VuFind/Search/Solr/InjectSpellingListener.php
@@ -28,15 +28,15 @@
  */
 namespace VuFind\Search\Solr;
 
+use Laminas\EventManager\EventInterface;
+use Laminas\EventManager\SharedEventManagerInterface;
 use VuFindSearch\Backend\BackendInterface;
 use VuFindSearch\Backend\Solr\Response\Json\Spellcheck;
 use VuFindSearch\ParamBag;
+
 use VuFindSearch\Query\Query;
 use VuFindSearch\Service;
 
-use Zend\EventManager\EventInterface;
-use Zend\EventManager\SharedEventManagerInterface;
-
 /**
  * Solr spelling listener.
  *
diff --git a/module/VuFind/src/VuFind/Search/Solr/MultiIndexListener.php b/module/VuFind/src/VuFind/Search/Solr/MultiIndexListener.php
index 57c776a2e8b..66eb240b22f 100644
--- a/module/VuFind/src/VuFind/Search/Solr/MultiIndexListener.php
+++ b/module/VuFind/src/VuFind/Search/Solr/MultiIndexListener.php
@@ -28,10 +28,10 @@
  */
 namespace VuFind\Search\Solr;
 
-use VuFindSearch\Backend\BackendInterface;
+use Laminas\EventManager\EventInterface;
 
-use Zend\EventManager\EventInterface;
-use Zend\EventManager\SharedEventManagerInterface;
+use Laminas\EventManager\SharedEventManagerInterface;
+use VuFindSearch\Backend\BackendInterface;
 
 /**
  * MultiIndex listener class file.
diff --git a/module/VuFind/src/VuFind/Search/Solr/Params.php b/module/VuFind/src/VuFind/Search/Solr/Params.php
index 8f9a07e524e..b3f575dfa7f 100644
--- a/module/VuFind/src/VuFind/Search/Solr/Params.php
+++ b/module/VuFind/src/VuFind/Search/Solr/Params.php
@@ -238,7 +238,7 @@ class Params extends \VuFind\Search\Base\Params
     /**
      * Initialize the object's search settings from a request object.
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
@@ -371,7 +371,7 @@ class Params extends \VuFind\Search\Base\Params
     /**
      * Add filters to the object based on values found in the request object.
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Search/Solr/SpellingProcessor.php b/module/VuFind/src/VuFind/Search/Solr/SpellingProcessor.php
index 53b9738eac9..f185fbcedd5 100644
--- a/module/VuFind/src/VuFind/Search/Solr/SpellingProcessor.php
+++ b/module/VuFind/src/VuFind/Search/Solr/SpellingProcessor.php
@@ -27,9 +27,9 @@
  */
 namespace VuFind\Search\Solr;
 
+use Laminas\Config\Config;
 use VuFindSearch\Backend\Solr\Response\Json\Spellcheck;
 use VuFindSearch\Query\AbstractQuery;
-use Zend\Config\Config;
 
 /**
  * Solr spelling processor.
diff --git a/module/VuFind/src/VuFind/Search/Solr/V3/ErrorListener.php b/module/VuFind/src/VuFind/Search/Solr/V3/ErrorListener.php
index f9c789ab2b8..59d025ccd16 100644
--- a/module/VuFind/src/VuFind/Search/Solr/V3/ErrorListener.php
+++ b/module/VuFind/src/VuFind/Search/Solr/V3/ErrorListener.php
@@ -28,12 +28,12 @@
  */
 namespace VuFind\Search\Solr\V3;
 
+use Laminas\EventManager\EventInterface;
+
 use VuFind\Search\Solr\AbstractErrorListener;
 
 use VuFindSearch\Backend\Exception\HttpErrorException;
 
-use Zend\EventManager\EventInterface;
-
 /**
  * SOLR 3.x error listener.
  *
diff --git a/module/VuFind/src/VuFind/Search/Solr/V4/ErrorListener.php b/module/VuFind/src/VuFind/Search/Solr/V4/ErrorListener.php
index c34e0fcb184..ab65dc0843d 100644
--- a/module/VuFind/src/VuFind/Search/Solr/V4/ErrorListener.php
+++ b/module/VuFind/src/VuFind/Search/Solr/V4/ErrorListener.php
@@ -28,12 +28,12 @@
  */
 namespace VuFind\Search\Solr\V4;
 
+use Laminas\EventManager\EventInterface;
+use Laminas\Http\Response;
+
 use VuFind\Search\Solr\AbstractErrorListener;
 use VuFindSearch\Backend\Exception\HttpErrorException;
 
-use Zend\EventManager\EventInterface;
-use Zend\Http\Response;
-
 /**
  * SOLR 3.x error listener.
  *
diff --git a/module/VuFind/src/VuFind/Search/SolrAuthor/Params.php b/module/VuFind/src/VuFind/Search/SolrAuthor/Params.php
index 68b76647593..e61c90214f9 100644
--- a/module/VuFind/src/VuFind/Search/SolrAuthor/Params.php
+++ b/module/VuFind/src/VuFind/Search/SolrAuthor/Params.php
@@ -41,7 +41,7 @@ class Params extends \VuFind\Search\Solr\Params
     /**
      * Support method for _initSearch() -- handle basic settings.
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return bool True if search settings were found, false if not.
diff --git a/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Params.php b/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Params.php
index 19f54d74eda..e534c0db2e2 100644
--- a/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Params.php
+++ b/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Params.php
@@ -41,7 +41,7 @@ class Params extends \VuFind\Search\Solr\Params
     /**
      * Set parameters based on a search object
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
@@ -67,7 +67,7 @@ class Params extends \VuFind\Search\Solr\Params
     /**
      * Support method for _initSearch() -- handle basic settings.
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return bool True if search settings were found, false if not.
@@ -88,7 +88,7 @@ class Params extends \VuFind\Search\Solr\Params
     /**
      * Initialize view
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Search/Tags/Params.php b/module/VuFind/src/VuFind/Search/Tags/Params.php
index 2932b867c6a..e1a8a16e420 100644
--- a/module/VuFind/src/VuFind/Search/Tags/Params.php
+++ b/module/VuFind/src/VuFind/Search/Tags/Params.php
@@ -58,7 +58,7 @@ class Params extends \VuFind\Search\Base\Params
     /**
      * Pull the search parameters
      *
-     * @param \Zend\StdLib\Parameters $request Parameter object representing user
+     * @param \Laminas\Stdlib\Parameters $request Parameter object representing user
      * request.
      *
      * @return void
diff --git a/module/VuFind/src/VuFind/Search/UrlQueryHelper.php b/module/VuFind/src/VuFind/Search/UrlQueryHelper.php
index f45de126771..ac1140f599d 100644
--- a/module/VuFind/src/VuFind/Search/UrlQueryHelper.php
+++ b/module/VuFind/src/VuFind/Search/UrlQueryHelper.php
@@ -492,7 +492,7 @@ class UrlQueryHelper
      * parameter.
      *
      * Note: This is called setViewParam rather than setView to avoid confusion
-     * with the \Zend\View\Helper\AbstractHelper interface.
+     * with the \Laminas\View\Helper\AbstractHelper interface.
      *
      * @param string $v New sort parameter (null for NO view parameter)
      *
diff --git a/module/VuFind/src/VuFind/Service/DateConverterFactory.php b/module/VuFind/src/VuFind/Service/DateConverterFactory.php
index 5e9a7eb11dd..dd99013ed38 100644
--- a/module/VuFind/src/VuFind/Service/DateConverterFactory.php
+++ b/module/VuFind/src/VuFind/Service/DateConverterFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Service;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for \VuFind\Date\Converter
diff --git a/module/VuFind/src/VuFind/Service/HttpServiceFactory.php b/module/VuFind/src/VuFind/Service/HttpServiceFactory.php
index b4801c73280..30cc58d5d02 100644
--- a/module/VuFind/src/VuFind/Service/HttpServiceFactory.php
+++ b/module/VuFind/src/VuFind/Service/HttpServiceFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Service;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * VuFind HTTP Service factory.
diff --git a/module/VuFind/src/VuFind/Service/MarkdownFactory.php b/module/VuFind/src/VuFind/Service/MarkdownFactory.php
index 4d130e1bbc5..d95edf3ffbf 100644
--- a/module/VuFind/src/VuFind/Service/MarkdownFactory.php
+++ b/module/VuFind/src/VuFind/Service/MarkdownFactory.php
@@ -30,10 +30,10 @@ namespace VuFind\Service;
 
 use Interop\Container\ContainerInterface;
 use Interop\Container\Exception\ContainerException;
+use Laminas\ServiceManager\Exception\ServiceNotCreatedException;
+use Laminas\ServiceManager\Exception\ServiceNotFoundException;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 use League\CommonMark\GithubFlavoredMarkdownConverter;
-use Zend\ServiceManager\Exception\ServiceNotCreatedException;
-use Zend\ServiceManager\Exception\ServiceNotFoundException;
-use Zend\ServiceManager\Factory\FactoryInterface;
 
 /**
  * VuFind HTTP Service factory.
diff --git a/module/VuFind/src/VuFind/Service/ProxyConfigFactory.php b/module/VuFind/src/VuFind/Service/ProxyConfigFactory.php
index 5fdd6bc9aaf..3261e3d2bfb 100644
--- a/module/VuFind/src/VuFind/Service/ProxyConfigFactory.php
+++ b/module/VuFind/src/VuFind/Service/ProxyConfigFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Service;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * ProxyManager configuration factory.
diff --git a/module/VuFind/src/VuFind/Service/ReCaptcha.php b/module/VuFind/src/VuFind/Service/ReCaptcha.php
index b4126a6b7cf..23c4bcf3ed2 100644
--- a/module/VuFind/src/VuFind/Service/ReCaptcha.php
+++ b/module/VuFind/src/VuFind/Service/ReCaptcha.php
@@ -36,7 +36,7 @@ namespace VuFind\Service;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class ReCaptcha extends \ZendService\ReCaptcha\ReCaptcha
+class ReCaptcha extends \Laminas\ReCaptcha\ReCaptcha
 {
     /**
      * Get the HTML code for the captcha
@@ -47,7 +47,7 @@ class ReCaptcha extends \ZendService\ReCaptcha\ReCaptcha
      *
      * @return string
      *
-     * @throws \ZendService\ReCaptcha\Exception
+     * @throws \Laminas\ReCaptcha\Exception
      */
     public function getHtml($name = null)
     {
diff --git a/module/VuFind/src/VuFind/Service/ReCaptchaFactory.php b/module/VuFind/src/VuFind/Service/ReCaptchaFactory.php
index 336bb0c1e55..ecd38f430de 100644
--- a/module/VuFind/src/VuFind/Service/ReCaptchaFactory.php
+++ b/module/VuFind/src/VuFind/Service/ReCaptchaFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Service;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * ReCaptcha factory.
@@ -75,7 +75,7 @@ class ReCaptchaFactory implements FactoryInterface
                 : '');
         $httpClient = $container->get(\VuFindHttp\HttpService::class)
             ->createClient();
-        $translator = $container->get(\Zend\Mvc\I18n\Translator::class);
+        $translator = $container->get(\Laminas\Mvc\I18n\Translator::class);
         $rcOptions = ['lang' => $translator->getLocale()];
         if (isset($config->Captcha->theme)) {
             $rcOptions['theme'] = $config->Captcha->theme;
diff --git a/module/VuFind/src/VuFind/Service/SearchServiceFactory.php b/module/VuFind/src/VuFind/Service/SearchServiceFactory.php
index a23756a460c..456e6bfeb6a 100644
--- a/module/VuFind/src/VuFind/Service/SearchServiceFactory.php
+++ b/module/VuFind/src/VuFind/Service/SearchServiceFactory.php
@@ -28,8 +28,8 @@
 namespace VuFind\Service;
 
 use Interop\Container\ContainerInterface;
-use Zend\EventManager\EventManager;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\EventManager\EventManager;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * VuFind Search Service factory.
diff --git a/module/VuFind/src/VuFind/Service/ServiceWithConfigIniFactory.php b/module/VuFind/src/VuFind/Service/ServiceWithConfigIniFactory.php
index 139181674a3..27f69a6844f 100644
--- a/module/VuFind/src/VuFind/Service/ServiceWithConfigIniFactory.php
+++ b/module/VuFind/src/VuFind/Service/ServiceWithConfigIniFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Service;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Generic factory to constructor-inject the config.ini settings.
diff --git a/module/VuFind/src/VuFind/ServiceManager/AbstractPluginFactory.php b/module/VuFind/src/VuFind/ServiceManager/AbstractPluginFactory.php
index 66004153b18..bb06073d364 100644
--- a/module/VuFind/src/VuFind/ServiceManager/AbstractPluginFactory.php
+++ b/module/VuFind/src/VuFind/ServiceManager/AbstractPluginFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ServiceManager;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\AbstractFactoryInterface;
+use Laminas\ServiceManager\Factory\AbstractFactoryInterface;
 
 /**
  * VuFind Abstract Plugin Factory
diff --git a/module/VuFind/src/VuFind/ServiceManager/AbstractPluginManager.php b/module/VuFind/src/VuFind/ServiceManager/AbstractPluginManager.php
index e48db3cfcda..b3cdc7a2a3f 100644
--- a/module/VuFind/src/VuFind/ServiceManager/AbstractPluginManager.php
+++ b/module/VuFind/src/VuFind/ServiceManager/AbstractPluginManager.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\ServiceManager;
 
-use Zend\ServiceManager\AbstractPluginManager as Base;
-use Zend\ServiceManager\Exception\InvalidServiceException;
+use Laminas\ServiceManager\AbstractPluginManager as Base;
+use Laminas\ServiceManager\Exception\InvalidServiceException;
 
 /**
  * VuFind Plugin Manager
diff --git a/module/VuFind/src/VuFind/ServiceManager/AbstractPluginManagerFactory.php b/module/VuFind/src/VuFind/ServiceManager/AbstractPluginManagerFactory.php
index de8271911d0..a6fa742cbbd 100644
--- a/module/VuFind/src/VuFind/ServiceManager/AbstractPluginManagerFactory.php
+++ b/module/VuFind/src/VuFind/ServiceManager/AbstractPluginManagerFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\ServiceManager;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * VuFind Plugin Manager factory.
diff --git a/module/VuFind/src/VuFind/ServiceManager/ServiceInitializer.php b/module/VuFind/src/VuFind/ServiceManager/ServiceInitializer.php
index 7aa68764eb3..ac2801ab252 100644
--- a/module/VuFind/src/VuFind/ServiceManager/ServiceInitializer.php
+++ b/module/VuFind/src/VuFind/ServiceManager/ServiceInitializer.php
@@ -28,7 +28,7 @@
 namespace VuFind\ServiceManager;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Initializer\InitializerInterface;
+use Laminas\ServiceManager\Initializer\InitializerInterface;
 
 /**
  * VuFind Service Initializer
@@ -86,11 +86,11 @@ class ServiceInitializer implements InitializerInterface
                 $sm->get(\VuFind\Db\Table\PluginManager::class)
             );
         }
-        if ($instance instanceof \Zend\Log\LoggerAwareInterface) {
+        if ($instance instanceof \Laminas\Log\LoggerAwareInterface) {
             $instance->setLogger($sm->get(\VuFind\Log\Logger::class));
         }
         if ($instance instanceof \VuFind\I18n\Translator\TranslatorAwareInterface) {
-            $instance->setTranslator($sm->get(\Zend\Mvc\I18n\Translator::class));
+            $instance->setTranslator($sm->get(\Laminas\Mvc\I18n\Translator::class));
         }
         if ($instance instanceof \VuFindHttp\HttpServiceAwareInterface) {
             $instance->setHttpService($sm->get(\VuFindHttp\HttpService::class));
diff --git a/module/VuFind/src/VuFind/Session/AbstractBase.php b/module/VuFind/src/VuFind/Session/AbstractBase.php
index dac4afc1bc8..1d5a9a25de0 100644
--- a/module/VuFind/src/VuFind/Session/AbstractBase.php
+++ b/module/VuFind/src/VuFind/Session/AbstractBase.php
@@ -29,7 +29,7 @@
  */
 namespace VuFind\Session;
 
-use Zend\Config\Config;
+use Laminas\Config\Config;
 
 /**
  * Base class for session handling
diff --git a/module/VuFind/src/VuFind/Session/AbstractBaseFactory.php b/module/VuFind/src/VuFind/Session/AbstractBaseFactory.php
index f01c67f9175..40c95e22d44 100644
--- a/module/VuFind/src/VuFind/Session/AbstractBaseFactory.php
+++ b/module/VuFind/src/VuFind/Session/AbstractBaseFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Session;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Generic factory for instantiating session handlers
diff --git a/module/VuFind/src/VuFind/Session/File.php b/module/VuFind/src/VuFind/Session/File.php
index 110e4533065..e14489c8961 100644
--- a/module/VuFind/src/VuFind/Session/File.php
+++ b/module/VuFind/src/VuFind/Session/File.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\Session;
 
-use Zend\Config\Config;
+use Laminas\Config\Config;
 
 /**
  * File-based session handler
diff --git a/module/VuFind/src/VuFind/Session/HandlerInterface.php b/module/VuFind/src/VuFind/Session/HandlerInterface.php
index 5aad643f31a..e02a30a090e 100644
--- a/module/VuFind/src/VuFind/Session/HandlerInterface.php
+++ b/module/VuFind/src/VuFind/Session/HandlerInterface.php
@@ -29,8 +29,8 @@
  */
 namespace VuFind\Session;
 
+use Laminas\Session\SaveHandler\SaveHandlerInterface;
 use VuFind\Db\Table\DbTableAwareInterface;
-use Zend\Session\SaveHandler\SaveHandlerInterface;
 
 /**
  * Session handler interface
diff --git a/module/VuFind/src/VuFind/Session/ManagerFactory.php b/module/VuFind/src/VuFind/Session/ManagerFactory.php
index 9b1a7d5e883..0e5462f647e 100644
--- a/module/VuFind/src/VuFind/Session/ManagerFactory.php
+++ b/module/VuFind/src/VuFind/Session/ManagerFactory.php
@@ -28,8 +28,8 @@
 namespace VuFind\Session;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
-use Zend\Session\SessionManager;
+use Laminas\ServiceManager\Factory\FactoryInterface;
+use Laminas\Session\SessionManager;
 
 /**
  * Factory for instantiating Session Manager
@@ -140,7 +140,7 @@ class ManagerFactory implements FactoryInterface
         }
 
         // Build configuration:
-        $sessionConfig = new \Zend\Session\Config\SessionConfig();
+        $sessionConfig = new \Laminas\Session\Config\SessionConfig();
         $sessionConfig->setOptions($this->getOptions($container));
 
         // Build session manager and attach handler:
@@ -152,7 +152,7 @@ class ManagerFactory implements FactoryInterface
 
         // Verify that any existing session has the correct path to avoid using
         // a cookie from a service higher up in the path hierarchy.
-        $storage = new \Zend\Session\Container('SessionState', $sessionManager);
+        $storage = new \Laminas\Session\Container('SessionState', $sessionManager);
         if (null !== $storage->cookiePath) {
             if ($storage->cookiePath != $sessionConfig->getCookiePath()) {
                 // Disable writes temporarily to keep the existing session intact
diff --git a/module/VuFind/src/VuFind/Session/Memcache.php b/module/VuFind/src/VuFind/Session/Memcache.php
index b3b3785520d..0560f53f612 100644
--- a/module/VuFind/src/VuFind/Session/Memcache.php
+++ b/module/VuFind/src/VuFind/Session/Memcache.php
@@ -30,7 +30,7 @@
  */
 namespace VuFind\Session;
 
-use Zend\Config\Config;
+use Laminas\Config\Config;
 
 /**
  * Memcache session handler
diff --git a/module/VuFind/src/VuFind/Session/PluginManager.php b/module/VuFind/src/VuFind/Session/PluginManager.php
index be84633a832..23174212535 100644
--- a/module/VuFind/src/VuFind/Session/PluginManager.php
+++ b/module/VuFind/src/VuFind/Session/PluginManager.php
@@ -72,7 +72,7 @@ class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager
     /**
      * Default delegator factories.
      *
-     * @var string[][]|\Zend\ServiceManager\Factory\DelegatorFactoryInterface[][]
+     * @var string[][]|\Laminas\ServiceManager\Factory\DelegatorFactoryInterface[][]
      */
     protected $delegators = [
         Database::class => [SecureDelegatorFactory::class],
diff --git a/module/VuFind/src/VuFind/Session/Redis.php b/module/VuFind/src/VuFind/Session/Redis.php
index 603a13f9f9b..c9168f7434a 100644
--- a/module/VuFind/src/VuFind/Session/Redis.php
+++ b/module/VuFind/src/VuFind/Session/Redis.php
@@ -31,7 +31,7 @@
  */
 namespace VuFind\Session;
 
-use Zend\Config\Config;
+use Laminas\Config\Config;
 
 /**
  * Redis session handler
diff --git a/module/VuFind/src/VuFind/Session/RedisFactory.php b/module/VuFind/src/VuFind/Session/RedisFactory.php
index 49290a91ed8..25acc5b7ada 100644
--- a/module/VuFind/src/VuFind/Session/RedisFactory.php
+++ b/module/VuFind/src/VuFind/Session/RedisFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Session;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Generic factory for instantiating session handlers
@@ -72,11 +72,11 @@ class RedisFactory implements FactoryInterface
     /**
      * Given a configuration, build the client object.
      *
-     * @param \Zend\Config\Config $config Session configuration
+     * @param \Laminas\Config\Config $config Session configuration
      *
      * @return \Credis_Client
      */
-    protected function getConnection(\Zend\Config\Config $config)
+    protected function getConnection(\Laminas\Config\Config $config)
     {
         // Set defaults if nothing set in config file.
         $host = $config->redis_host ?? 'localhost';
diff --git a/module/VuFind/src/VuFind/Session/SecureDelegator.php b/module/VuFind/src/VuFind/Session/SecureDelegator.php
index 6ae95a1efeb..b5f6adbc1b0 100644
--- a/module/VuFind/src/VuFind/Session/SecureDelegator.php
+++ b/module/VuFind/src/VuFind/Session/SecureDelegator.php
@@ -29,9 +29,9 @@
  */
 namespace VuFind\Session;
 
+use Laminas\Crypt\BlockCipher;
+use Laminas\Math\Rand;
 use VuFind\Cookie\CookieManager;
-use Zend\Crypt\BlockCipher;
-use Zend\Math\Rand;
 
 /**
  * Secure session delegator
diff --git a/module/VuFind/src/VuFind/Session/SecureDelegatorFactory.php b/module/VuFind/src/VuFind/Session/SecureDelegatorFactory.php
index fd370367314..befd66940e3 100644
--- a/module/VuFind/src/VuFind/Session/SecureDelegatorFactory.php
+++ b/module/VuFind/src/VuFind/Session/SecureDelegatorFactory.php
@@ -30,8 +30,8 @@
 namespace VuFind\Session;
 
 use Interop\Container\ContainerInterface;
+use Laminas\ServiceManager\Factory\DelegatorFactoryInterface;
 use ProxyManager\Factory\LazyLoadingValueHolderFactory;
-use Zend\ServiceManager\Factory\DelegatorFactoryInterface;
 
 /**
  * Secure session delegator factory
diff --git a/module/VuFind/src/VuFind/Session/Settings.php b/module/VuFind/src/VuFind/Session/Settings.php
index 35591025ef5..6d60906a5e2 100644
--- a/module/VuFind/src/VuFind/Session/Settings.php
+++ b/module/VuFind/src/VuFind/Session/Settings.php
@@ -30,7 +30,7 @@
  */
 namespace VuFind\Session;
 
-use Zend\Session\SessionManager;
+use Laminas\Session\SessionManager;
 
 /**
  * Container for session settings, allowing those settings to be configured
diff --git a/module/VuFind/src/VuFind/Sitemap/Generator.php b/module/VuFind/src/VuFind/Sitemap/Generator.php
index a4891a4cf92..e9505f6f3be 100644
--- a/module/VuFind/src/VuFind/Sitemap/Generator.php
+++ b/module/VuFind/src/VuFind/Sitemap/Generator.php
@@ -27,14 +27,14 @@
  */
 namespace VuFind\Sitemap;
 
+use Laminas\Config\Config;
+use Laminas\Console\Console;
 use VuFind\Search\BackendManager;
 use VuFindSearch\Backend\Solr\Backend;
 use VuFindSearch\Backend\Solr\Response\Json\RecordCollectionFactory;
 use VuFindSearch\ParamBag;
 use VuFindSearch\Query\Query;
 use VuFindSearch\Service as SearchService;
-use Zend\Config\Config;
-use Zend\Console\Console;
 
 /**
  * Class for generating sitemaps
diff --git a/module/VuFind/src/VuFind/Sitemap/GeneratorFactory.php b/module/VuFind/src/VuFind/Sitemap/GeneratorFactory.php
index d558ae57d32..5c2d2622198 100644
--- a/module/VuFind/src/VuFind/Sitemap/GeneratorFactory.php
+++ b/module/VuFind/src/VuFind/Sitemap/GeneratorFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Sitemap;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Sitemap Generator factory.
diff --git a/module/VuFind/src/VuFind/Solr/WriterFactory.php b/module/VuFind/src/VuFind/Solr/WriterFactory.php
index 729499db6fe..95ba89e5256 100644
--- a/module/VuFind/src/VuFind/Solr/WriterFactory.php
+++ b/module/VuFind/src/VuFind/Solr/WriterFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\Solr;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Solr writer factory.
diff --git a/module/VuFind/src/VuFind/TagsFactory.php b/module/VuFind/src/VuFind/TagsFactory.php
index d32fbd03cd5..12be9acf198 100644
--- a/module/VuFind/src/VuFind/TagsFactory.php
+++ b/module/VuFind/src/VuFind/TagsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Tags factory.
diff --git a/module/VuFind/src/VuFind/UrlShortener/PluginManager.php b/module/VuFind/src/VuFind/UrlShortener/PluginManager.php
index 8e8080988c9..c57299425a1 100644
--- a/module/VuFind/src/VuFind/UrlShortener/PluginManager.php
+++ b/module/VuFind/src/VuFind/UrlShortener/PluginManager.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\UrlShortener;
 
-use Zend\ServiceManager\Factory\InvokableFactory;
+use Laminas\ServiceManager\Factory\InvokableFactory;
 
 /**
  * URL shortener plugin manager.
diff --git a/module/VuFind/src/VuFind/Validator/Csrf.php b/module/VuFind/src/VuFind/Validator/Csrf.php
index 21ddfd6c3d5..b5b0c9c65e2 100644
--- a/module/VuFind/src/VuFind/Validator/Csrf.php
+++ b/module/VuFind/src/VuFind/Validator/Csrf.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * Extension of Zend\Validator\Csrf with token counting/clearing functions added.
+ * Extension of Laminas\Validator\Csrf with token counting/clearing functions added.
  *
  * PHP version 7
  *
@@ -28,7 +28,7 @@
 namespace VuFind\Validator;
 
 /**
- * Extension of Zend\Validator\Csrf with token counting/clearing functions added.
+ * Extension of Laminas\Validator\Csrf with token counting/clearing functions added.
  *
  * @category VuFind
  * @package  Solr
@@ -36,7 +36,7 @@ namespace VuFind\Validator;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class Csrf extends \Zend\Validator\Csrf
+class Csrf extends \Laminas\Validator\Csrf
 {
     /**
      * How many tokens are currently stored in the session?
diff --git a/module/VuFind/src/VuFind/Validator/CsrfFactory.php b/module/VuFind/src/VuFind/Validator/CsrfFactory.php
index c41ee838e0a..90707248c51 100644
--- a/module/VuFind/src/VuFind/Validator/CsrfFactory.php
+++ b/module/VuFind/src/VuFind/Validator/CsrfFactory.php
@@ -30,7 +30,7 @@
 namespace VuFind\Validator;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * CSRF Validator factory.
@@ -68,10 +68,10 @@ class CsrfFactory implements FactoryInterface
         }
         $config = $container->get(\VuFind\Config\PluginManager::class)
             ->get('config');
-        $sessionManager = $container->get(\Zend\Session\SessionManager::class);
+        $sessionManager = $container->get(\Laminas\Session\SessionManager::class);
         return new $requestedName(
             [
-                'session' => new \Zend\Session\Container('csrf', $sessionManager),
+                'session' => new \Laminas\Session\Container('csrf', $sessionManager),
                 'salt' => $config->Security->HMACkey ?? 'VuFindCsrfSalt'
             ]
         );
diff --git a/module/VuFind/src/VuFind/View/Helper/AbstractLayoutClass.php b/module/VuFind/src/VuFind/View/Helper/AbstractLayoutClass.php
index 6c08eeaa94e..a3944a77308 100644
--- a/module/VuFind/src/VuFind/View/Helper/AbstractLayoutClass.php
+++ b/module/VuFind/src/VuFind/View/Helper/AbstractLayoutClass.php
@@ -36,7 +36,7 @@ namespace VuFind\View\Helper;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-abstract class AbstractLayoutClass extends \Zend\View\Helper\AbstractHelper
+abstract class AbstractLayoutClass extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Does the sidebar go on the left?
diff --git a/module/VuFind/src/VuFind/View/Helper/AbstractSearch.php b/module/VuFind/src/VuFind/View/Helper/AbstractSearch.php
index c2b585b2aad..1e1baad435f 100644
--- a/module/VuFind/src/VuFind/View/Helper/AbstractSearch.php
+++ b/module/VuFind/src/VuFind/View/Helper/AbstractSearch.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * Helper class for displaying search-related HTML chunks.
@@ -50,8 +50,8 @@ abstract class AbstractSearch extends AbstractHelper
     /**
      * Render an expand link.
      *
-     * @param string                          $url  Link href
-     * @param \Zend\View\Renderer\PhpRenderer $view View renderer object
+     * @param string                             $url  Link href
+     * @param \Laminas\View\Renderer\PhpRenderer $view View renderer object
      *
      * @return string
      */
@@ -60,10 +60,10 @@ abstract class AbstractSearch extends AbstractHelper
     /**
      * Support function to display spelling suggestions.
      *
-     * @param string                          $msg     HTML to display at the top of
-     * the spelling section.
-     * @param \VuFind\Search\Base\Results     $results Results object
-     * @param \Zend\View\Renderer\PhpRenderer $view    View renderer object
+     * @param string                             $msg     HTML to display at the top
+     * of the spelling section.
+     * @param \VuFind\Search\Base\Results        $results Results object
+     * @param \Laminas\View\Renderer\PhpRenderer $view    View renderer object
      *
      * @return string
      */
diff --git a/module/VuFind/src/VuFind/View/Helper/Bootstrap3/LayoutClassFactory.php b/module/VuFind/src/VuFind/View/Helper/Bootstrap3/LayoutClassFactory.php
index e991df5bbcf..bdf39491cb4 100644
--- a/module/VuFind/src/VuFind/View/Helper/Bootstrap3/LayoutClassFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Bootstrap3/LayoutClassFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Bootstrap3;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * LayoutClass helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Bootstrap3/Recaptcha.php b/module/VuFind/src/VuFind/View/Helper/Bootstrap3/Recaptcha.php
index 62828563585..9bacef65db4 100644
--- a/module/VuFind/src/VuFind/View/Helper/Bootstrap3/Recaptcha.php
+++ b/module/VuFind/src/VuFind/View/Helper/Bootstrap3/Recaptcha.php
@@ -41,8 +41,8 @@ class Recaptcha extends \VuFind\View\Helper\Root\Recaptcha
     /**
      * Constructor
      *
-     * @param \ZendService\Recaptcha\Recaptcha $rc     Custom formatted Recaptcha
-     * @param \VuFind\Config                   $config Config object
+     * @param \Laminas\Recaptcha\Recaptcha $rc     Custom formatted Recaptcha
+     * @param \VuFind\Config               $config Config object
      */
     public function __construct($rc, $config)
     {
diff --git a/module/VuFind/src/VuFind/View/Helper/Bootstrap3/Search.php b/module/VuFind/src/VuFind/View/Helper/Bootstrap3/Search.php
index f4db00b72d0..1070d0fc4cc 100644
--- a/module/VuFind/src/VuFind/View/Helper/Bootstrap3/Search.php
+++ b/module/VuFind/src/VuFind/View/Helper/Bootstrap3/Search.php
@@ -51,8 +51,8 @@ class Search extends \VuFind\View\Helper\AbstractSearch
     /**
      * Render an expand link.
      *
-     * @param string                          $url  Link href
-     * @param \Zend\View\Renderer\PhpRenderer $view View renderer object
+     * @param string                             $url  Link href
+     * @param \Laminas\View\Renderer\PhpRenderer $view View renderer object
      *
      * @return string
      */
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/AbstractClassBasedTemplateRenderer.php b/module/VuFind/src/VuFind/View/Helper/Root/AbstractClassBasedTemplateRenderer.php
index 0d89815f9fe..3e9b92a19e3 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/AbstractClassBasedTemplateRenderer.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/AbstractClassBasedTemplateRenderer.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Exception\RuntimeException;
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Exception\RuntimeException;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * Authentication view helper
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/AccountCapabilities.php b/module/VuFind/src/VuFind/View/Helper/Root/AccountCapabilities.php
index 734472f9155..959b77d99e2 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/AccountCapabilities.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/AccountCapabilities.php
@@ -38,7 +38,7 @@ use VuFind\Config\AccountCapabilities as Helper;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class AccountCapabilities extends \Zend\View\Helper\AbstractHelper
+class AccountCapabilities extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Capabilities helper
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/AccountCapabilitiesFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/AccountCapabilitiesFactory.php
index 49074080385..b97acd35c08 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/AccountCapabilitiesFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/AccountCapabilitiesFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * AccountCapabilities helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/AddEllipsis.php b/module/VuFind/src/VuFind/View/Helper/Root/AddEllipsis.php
index 0e1772ffe83..de3ebf6a07d 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/AddEllipsis.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/AddEllipsis.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * "Add ellipsis" view helper
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/AddThis.php b/module/VuFind/src/VuFind/View/Helper/Root/AddThis.php
index 54d6a9ae723..0067ead6881 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/AddThis.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/AddThis.php
@@ -36,7 +36,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Site
  */
-class AddThis extends \Zend\View\Helper\AbstractHelper
+class AddThis extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * AddThis key (false if disabled)
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/AddThisFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/AddThisFactory.php
index a23df23148a..522dd54ee95 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/AddThisFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/AddThisFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * AddThis helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/AlphaBrowse.php b/module/VuFind/src/VuFind/View/Helper/Root/AlphaBrowse.php
index f3e96089808..becfe9edd30 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/AlphaBrowse.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/AlphaBrowse.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\Url;
+use Laminas\View\Helper\Url;
 
 /**
  * Authentication view helper
@@ -38,7 +38,7 @@ use Zend\View\Helper\Url;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class AlphaBrowse extends \Zend\View\Helper\AbstractHelper
+class AlphaBrowse extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * URL helper
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/AlphaBrowseFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/AlphaBrowseFactory.php
index b80ad7d7015..9e48f7e1655 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/AlphaBrowseFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/AlphaBrowseFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * AlphaBrowse helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/AuthFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/AuthFactory.php
index 2efae01d336..01ab7bfa917 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/AuthFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/AuthFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Auth helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/AuthorNotesFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/AuthorNotesFactory.php
index 2efae01d336..01ab7bfa917 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/AuthorNotesFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/AuthorNotesFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Auth helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Browse.php b/module/VuFind/src/VuFind/View/Helper/Root/Browse.php
index 01d7d830859..51ce8c4eceb 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Browse.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Browse.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * Browse controller view helper
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Cart.php b/module/VuFind/src/VuFind/View/Helper/Root/Cart.php
index a32b5a4f41a..bbdcc8c4e91 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Cart.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Cart.php
@@ -36,7 +36,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class Cart extends \Zend\View\Helper\AbstractHelper
+class Cart extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * VuFind Cart Model
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/CartFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/CartFactory.php
index 9729a026d97..756c32e3a44 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/CartFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/CartFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Cart helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Citation.php b/module/VuFind/src/VuFind/View/Helper/Root/Citation.php
index f509089a96f..e910d07be42 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Citation.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Citation.php
@@ -41,7 +41,7 @@ use VuFind\I18n\Translator\TranslatorAwareInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class Citation extends \Zend\View\Helper\AbstractHelper
+class Citation extends \Laminas\View\Helper\AbstractHelper
     implements TranslatorAwareInterface
 {
     use \VuFind\I18n\Translator\TranslatorAwareTrait;
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/CitationFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/CitationFactory.php
index 7791872b75b..0f4260ca366 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/CitationFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/CitationFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Citation helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Config.php b/module/VuFind/src/VuFind/View/Helper/Root/Config.php
index 868e7d7dd86..920ee558b67 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Config.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Config.php
@@ -38,7 +38,7 @@ use VuFind\Config\PluginManager;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class Config extends \Zend\View\Helper\AbstractHelper
+class Config extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Configuration plugin manager
@@ -62,7 +62,7 @@ class Config extends \Zend\View\Helper\AbstractHelper
      *
      * @param string $config Name of configuration
      *
-     * @return \Zend\Config\Config
+     * @return \Laminas\Config\Config
      */
     public function get($config)
     {
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/ConfigFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/ConfigFactory.php
index d9f7d02f89b..8282d81cb0c 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/ConfigFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/ConfigFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Config helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/ContentLoader.php b/module/VuFind/src/VuFind/View/Helper/Root/ContentLoader.php
index 068ef66d5d5..0ccf9507308 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/ContentLoader.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/ContentLoader.php
@@ -36,7 +36,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class ContentLoader extends \Zend\View\Helper\AbstractHelper
+class ContentLoader extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Constructor
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/ContentLoaderFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/ContentLoaderFactory.php
index 295182cd465..eca8d142422 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/ContentLoaderFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/ContentLoaderFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * ContentLoader helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Context.php b/module/VuFind/src/VuFind/View/Helper/Root/Context.php
index 9f9b1add0d3..b96501bf351 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Context.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Context.php
@@ -29,8 +29,8 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
-use Zend\View\Renderer\RendererInterface;
+use Laminas\View\Helper\AbstractHelper;
+use Laminas\View\Renderer\RendererInterface;
 
 /**
  * Context manager (useful for using render() instead of partial() for better
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/CurrentPath.php b/module/VuFind/src/VuFind/View/Helper/Root/CurrentPath.php
index 62a9d3d2303..25e7b3c0a97 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/CurrentPath.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/CurrentPath.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * Current path view helper
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/DateTime.php b/module/VuFind/src/VuFind/View/Helper/Root/DateTime.php
index 3dd5139b9b7..57fdf89ab4a 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/DateTime.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/DateTime.php
@@ -36,7 +36,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class DateTime extends \Zend\View\Helper\AbstractHelper
+class DateTime extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Date converter
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/DateTimeFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/DateTimeFactory.php
index 79f704c5974..caecb261ffe 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/DateTimeFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/DateTimeFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * DateTime helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/DisplayLanguageOption.php b/module/VuFind/src/VuFind/View/Helper/Root/DisplayLanguageOption.php
index 5a2cfb8074e..197c1396c93 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/DisplayLanguageOption.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/DisplayLanguageOption.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\I18n\Translator\TranslatorInterface;
+use Laminas\I18n\Translator\TranslatorInterface;
 
 /**
  * DisplayLanguageOption view helper
@@ -38,7 +38,7 @@ use Zend\I18n\Translator\TranslatorInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class DisplayLanguageOption extends \Zend\View\Helper\AbstractHelper
+class DisplayLanguageOption extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Translator (or null if unavailable)
@@ -60,7 +60,7 @@ class DisplayLanguageOption extends \Zend\View\Helper\AbstractHelper
                 'ExtendedIni', null, 'default', 'native'
             );
             $this->translator->setLocale('native');
-        } catch (\Zend\Mvc\I18n\Exception\BadMethodCallException $e) {
+        } catch (\Laminas\Mvc\I18n\Exception\BadMethodCallException $e) {
             if (!extension_loaded('intl')) {
                 throw new \Exception(
                     'Translation broken due to missing PHP intl extension.'
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/DisplayLanguageOptionFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/DisplayLanguageOptionFactory.php
index 28506916316..b8a05239cd4 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/DisplayLanguageOptionFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/DisplayLanguageOptionFactory.php
@@ -28,8 +28,8 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\Mvc\I18n\Translator;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\Mvc\I18n\Translator;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * DisplayLanguageOption helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Doi.php b/module/VuFind/src/VuFind/View/Helper/Root/Doi.php
index de56f1c6734..8f0a07ee15f 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Doi.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Doi.php
@@ -36,7 +36,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class Doi extends \Zend\View\Helper\AbstractHelper
+class Doi extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Context helper
@@ -48,7 +48,7 @@ class Doi extends \Zend\View\Helper\AbstractHelper
     /**
      * VuFind OpenURL configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
@@ -69,8 +69,8 @@ class Doi extends \Zend\View\Helper\AbstractHelper
     /**
      * Constructor
      *
-     * @param Context             $context Context helper
-     * @param \Zend\Config\Config $config  VuFind OpenURL config
+     * @param Context                $context Context helper
+     * @param \Laminas\Config\Config $config  VuFind OpenURL config
      */
     public function __construct(Context $context, $config = null)
     {
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/DoiFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/DoiFactory.php
index a64e6f8dd38..4369d692444 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/DoiFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/DoiFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * DOI helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Export.php b/module/VuFind/src/VuFind/View/Helper/Root/Export.php
index 95f7828af51..b41072b3e13 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Export.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Export.php
@@ -36,7 +36,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class Export extends \Zend\View\Helper\AbstractHelper
+class Export extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * VuFind Export Tools
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/ExportFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/ExportFactory.php
index bc94baeee8d..45f3d0d4cd8 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/ExportFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/ExportFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Export helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Feedback.php b/module/VuFind/src/VuFind/View/Helper/Root/Feedback.php
index 0793e41c0d0..8812f04be28 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Feedback.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Feedback.php
@@ -38,7 +38,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class Feedback extends \Zend\View\Helper\AbstractHelper
+class Feedback extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Is the tab enabled?
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/FeedbackFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/FeedbackFactory.php
index 4ac80ea0b6d..0601cfa229e 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/FeedbackFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/FeedbackFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Feedback helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Flashmessages.php b/module/VuFind/src/VuFind/View/Helper/Root/Flashmessages.php
index d955a1255ef..287c50dbc34 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Flashmessages.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Flashmessages.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\Mvc\Plugin\FlashMessenger\FlashMessenger;
-use Zend\View\Helper\AbstractHelper;
+use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * Flash message view helper
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/FlashmessagesFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/FlashmessagesFactory.php
index 2512310196f..47cc310d09d 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/FlashmessagesFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/FlashmessagesFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Flashmessages helper factory.
@@ -62,7 +62,7 @@ class FlashmessagesFactory implements FactoryInterface
             throw new \Exception('Unexpected options sent to factory.');
         }
         $messenger = $container->get('ControllerPluginManager')
-            ->get(\Zend\Mvc\Plugin\FlashMessenger\FlashMessenger::class);
+            ->get(\Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger::class);
         return new $requestedName($messenger);
     }
 }
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/GeoCoords.php b/module/VuFind/src/VuFind/View/Helper/Root/GeoCoords.php
index 0cb6e50c522..cc7eaef5a64 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/GeoCoords.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/GeoCoords.php
@@ -38,7 +38,7 @@ use VuFind\Search\Base\Options;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class GeoCoords extends \Zend\View\Helper\AbstractHelper
+class GeoCoords extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Is Map Search enabled?
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/GeoCoordsFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/GeoCoordsFactory.php
index 92b36992aab..15b2294e232 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/GeoCoordsFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/GeoCoordsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * GeoCoords helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/GoogleAnalytics.php b/module/VuFind/src/VuFind/View/Helper/Root/GoogleAnalytics.php
index fdd8f92e929..153ff4c982c 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/GoogleAnalytics.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/GoogleAnalytics.php
@@ -36,7 +36,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Site
  */
-class GoogleAnalytics extends \Zend\View\Helper\AbstractHelper
+class GoogleAnalytics extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * API key (false if disabled)
@@ -121,6 +121,6 @@ class GoogleAnalytics extends \Zend\View\Helper\AbstractHelper
         }
         $code = $this->getRawJavascript($customUrl);
         $inlineScript = $this->getView()->plugin('inlinescript');
-        return $inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $code, 'SET');
+        return $inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $code, 'SET');
     }
 }
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/GoogleAnalyticsFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/GoogleAnalyticsFactory.php
index b33603241ef..0ccabdffdf2 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/GoogleAnalyticsFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/GoogleAnalyticsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * GoogleAnalytics helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/HelpText.php b/module/VuFind/src/VuFind/View/Helper/Root/HelpText.php
index 1642474aeff..6450e35e577 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/HelpText.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/HelpText.php
@@ -36,7 +36,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class HelpText extends \Zend\View\Helper\AbstractHelper
+class HelpText extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * The current language
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/HelpTextFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/HelpTextFactory.php
index f9fb0b4c587..c698e29973c 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/HelpTextFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/HelpTextFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * HelpText helper factory.
@@ -61,8 +61,8 @@ class HelpTextFactory implements FactoryInterface
         if (!empty($options)) {
             throw new \Exception('Unexpected options sent to factory.');
         }
-        $lang = $container->has(\Zend\Mvc\I18n\Translator::class)
-            ? $container->get(\Zend\Mvc\I18n\Translator::class)->getLocale()
+        $lang = $container->has(\Laminas\Mvc\I18n\Translator::class)
+            ? $container->get(\Laminas\Mvc\I18n\Translator::class)->getLocale()
             : 'en';
         $helpers = $container->get('ViewHelperManager');
         return new $requestedName($helpers->get('context'), $lang);
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Highlight.php b/module/VuFind/src/VuFind/View/Helper/Root/Highlight.php
index 63d898b75ce..3233dc9bba2 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Highlight.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Highlight.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * Highlight view helper
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/HistoryLabel.php b/module/VuFind/src/VuFind/View/Helper/Root/HistoryLabel.php
index b8046973834..80de7892ebd 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/HistoryLabel.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/HistoryLabel.php
@@ -36,7 +36,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class HistoryLabel extends \Zend\View\Helper\AbstractHelper
+class HistoryLabel extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Label configuration
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/HistoryLabelFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/HistoryLabelFactory.php
index d8af099ef3e..8ec670f8a60 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/HistoryLabelFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/HistoryLabelFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * HistoryLabel helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Ils.php b/module/VuFind/src/VuFind/View/Helper/Root/Ils.php
index 540cb40775c..d447052be80 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Ils.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Ils.php
@@ -36,7 +36,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class Ils extends \Zend\View\Helper\AbstractHelper
+class Ils extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * ILS connection
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/IlsFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/IlsFactory.php
index bbe1f26ba02..16e2e676243 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/IlsFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/IlsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Ils helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/JsTranslations.php b/module/VuFind/src/VuFind/View/Helper/Root/JsTranslations.php
index 51956abd022..fa1b4e75435 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/JsTranslations.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/JsTranslations.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * JsTranslations helper for passing translation text to Javascript
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/JsTranslationsFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/JsTranslationsFactory.php
index 21a21e565d9..9f55e47b110 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/JsTranslationsFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/JsTranslationsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * JsTranslations helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/KeepAlive.php b/module/VuFind/src/VuFind/View/Helper/Root/KeepAlive.php
index 59e950e2f55..538a8531ff1 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/KeepAlive.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/KeepAlive.php
@@ -39,7 +39,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Site
  */
-class KeepAlive extends \Zend\View\Helper\AbstractHelper
+class KeepAlive extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Keep-alive interval in seconds or 0 if disabled
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/KeepAliveFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/KeepAliveFactory.php
index 3af02a7f9fe..842f2b571fa 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/KeepAliveFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/KeepAliveFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * KeepAlive helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Linkify.php b/module/VuFind/src/VuFind/View/Helper/Root/Linkify.php
index 7116176ce35..816e1b9d801 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Linkify.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Linkify.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * Linkify a string so that the links become clickable HTML
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/LocalizedNumber.php b/module/VuFind/src/VuFind/View/Helper/Root/LocalizedNumber.php
index dfaaf03817b..b0e53c8c988 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/LocalizedNumber.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/LocalizedNumber.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * Class NumberFormat
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Markdown.php b/module/VuFind/src/VuFind/View/Helper/Root/Markdown.php
index 518ef4228fc..8b6eaf057da 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Markdown.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Markdown.php
@@ -28,7 +28,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * Helper for transforming markdown to html
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/MarkdownFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/MarkdownFactory.php
index a92819c7a3a..a76f488445e 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/MarkdownFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/MarkdownFactory.php
@@ -29,7 +29,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Markdown helper factory
@@ -56,7 +56,8 @@ class MarkdownFactory implements FactoryInterface
     public function __invoke(
         ContainerInterface $container, $requestedName, array $options = null
     ) {
-        $markdownService = $container->get('League\CommonMark\ConverterInterface');
+        $markdownService = $container
+            ->get(\League\CommonMark\ConverterInterface::class);
         return new $requestedName($markdownService);
     }
 }
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Metadata.php b/module/VuFind/src/VuFind/View/Helper/Root/Metadata.php
index 5aadeb2a6aa..b8a3fe303b1 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Metadata.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Metadata.php
@@ -36,19 +36,19 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class Metadata extends \Zend\View\Helper\AbstractHelper
+class Metadata extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Metadata configuration entries
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
     /**
-     * Zend meta helper, used to embed html tags in the generated page
+     * Laminas meta helper, used to embed html tags in the generated page
      *
-     * @var \Zend\View\Helper\HeadMeta
+     * @var \Laminas\View\Helper\HeadMeta
      */
     protected $metaHelper;
 
@@ -63,12 +63,12 @@ class Metadata extends \Zend\View\Helper\AbstractHelper
      * Constructor
      *
      * @param \VuFind\MetadataVocabulary\PluginManager $pm         Plugin manager
-     * @param \Zend\Config\Config                      $config     Configuration
-     * @param \Zend\View\Helper\HeadMeta               $metaHelper Head meta helper
+     * @param \Laminas\Config\Config                   $config     Configuration
+     * @param \Laminas\View\Helper\HeadMeta            $metaHelper Head meta helper
      */
     public function __construct(\VuFind\MetadataVocabulary\PluginManager $pm,
-        \Zend\Config\Config $config,
-        \Zend\View\Helper\HeadMeta $metaHelper
+        \Laminas\Config\Config $config,
+        \Laminas\View\Helper\HeadMeta $metaHelper
     ) {
         $this->pluginManager = $pm;
         $this->config = $config;
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/MetadataFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/MetadataFactory.php
index 6c2d2260a49..78b07c97da4 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/MetadataFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/MetadataFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Metadata helper factory
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/OpenUrl.php b/module/VuFind/src/VuFind/View/Helper/Root/OpenUrl.php
index 26b32688a7e..0c65a0a6a55 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/OpenUrl.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/OpenUrl.php
@@ -38,7 +38,7 @@ use VuFind\Resolver\Driver\PluginManager;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class OpenUrl extends \Zend\View\Helper\AbstractHelper
+class OpenUrl extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Context helper
@@ -50,7 +50,7 @@ class OpenUrl extends \Zend\View\Helper\AbstractHelper
     /**
      * VuFind OpenURL configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
@@ -85,10 +85,10 @@ class OpenUrl extends \Zend\View\Helper\AbstractHelper
     /**
      * Constructor
      *
-     * @param Context             $context       Context helper
-     * @param array               $openUrlRules  VuFind OpenURL rules
-     * @param PluginManager       $pluginManager Resolver plugin manager
-     * @param \Zend\Config\Config $config        VuFind OpenURL config
+     * @param Context                $context       Context helper
+     * @param array                  $openUrlRules  VuFind OpenURL rules
+     * @param PluginManager          $pluginManager Resolver plugin manager
+     * @param \Laminas\Config\Config $config        VuFind OpenURL config
      */
     public function __construct(Context $context, $openUrlRules,
         PluginManager $pluginManager, $config = null
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/OpenUrlFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/OpenUrlFactory.php
index b0dd989ff10..67f87108c88 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/OpenUrlFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/OpenUrlFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * OpenUrl helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Overdrive.php b/module/VuFind/src/VuFind/View/Helper/Root/Overdrive.php
index a616404a8a6..b6688395663 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Overdrive.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Overdrive.php
@@ -38,7 +38,7 @@ use VuFind\DigitalContent\OverdriveConnector;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class Overdrive extends \Zend\View\Helper\AbstractHelper
+class Overdrive extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Overdrive connector.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/OverdriveFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/OverdriveFactory.php
index ee4ba74473a..2f93dc79bca 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/OverdriveFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/OverdriveFactory.php
@@ -30,7 +30,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Overdrive helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Permission.php b/module/VuFind/src/VuFind/View/Helper/Root/Permission.php
index 208e40b15f8..baabe3b3aae 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Permission.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Permission.php
@@ -28,9 +28,9 @@
  */
 namespace VuFind\View\Helper\Root;
 
+use Laminas\View\Helper\AbstractHelper;
 use VuFind\Role\PermissionDeniedManager;
 use VuFind\Role\PermissionManager;
-use Zend\View\Helper\AbstractHelper;
 
 /**
  * Permission helper
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/PermissionFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/PermissionFactory.php
index a60b6ca6fb6..263c4d1d05f 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/PermissionFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/PermissionFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Permission helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Piwik.php b/module/VuFind/src/VuFind/View/Helper/Root/Piwik.php
index 1c8297cfc0b..9ba3c498151 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Piwik.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Piwik.php
@@ -36,7 +36,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Site
  */
-class Piwik extends \Zend\View\Helper\AbstractHelper
+class Piwik extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Piwik URL (false if disabled)
@@ -76,14 +76,14 @@ class Piwik extends \Zend\View\Helper\AbstractHelper
     /**
      * Request object
      *
-     * @var \Zend\Http\PhpEnvironment\Request
+     * @var \Laminas\Http\PhpEnvironment\Request
      */
     protected $request;
 
     /**
      * Router object
      *
-     * @var \Zend\Router\Http\RouteMatch
+     * @var \Laminas\Router\Http\RouteMatch
      */
     protected $router;
 
@@ -112,14 +112,14 @@ class Piwik extends \Zend\View\Helper\AbstractHelper
     /**
      * Constructor
      *
-     * @param string|bool                      $url        Piwik address
+     * @param string|bool                         $url        Piwik address
      * (false if disabled)
-     * @param int|array                        $options    Options array (or,
+     * @param int|array                           $options    Options array (or,
      * if a single value, the Piwik site ID -- for backward compatibility)
-     * @param bool                             $customVars Whether to track
+     * @param bool                                $customVars Whether to track
      * additional information in custom variables
-     * @param Zend\Router\Http\RouteMatch      $router     Request
-     * @param Zend\Http\PhpEnvironment\Request $request    Request
+     * @param Laminas\Router\Http\RouteMatch      $router     Request
+     * @param Laminas\Http\PhpEnvironment\Request $request    Request
      */
     public function __construct($url, $options, $customVars, $router, $request)
     {
@@ -170,7 +170,7 @@ class Piwik extends \Zend\View\Helper\AbstractHelper
         }
 
         $inlineScript = $this->getView()->plugin('inlinescript');
-        return $inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $code, 'SET');
+        return $inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $code, 'SET');
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/PiwikFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/PiwikFactory.php
index 92eb3b1c78a..e1991ca002f 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/PiwikFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/PiwikFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Piwik helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Printms.php b/module/VuFind/src/VuFind/View/Helper/Root/Printms.php
index 656fb3df46c..c35b5f1828b 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Printms.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Printms.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * Prints a human readable format from a number of milliseconds
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/ProxyUrl.php b/module/VuFind/src/VuFind/View/Helper/Root/ProxyUrl.php
index 009dc386663..a101b25a016 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/ProxyUrl.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/ProxyUrl.php
@@ -36,19 +36,19 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class ProxyUrl extends \Zend\View\Helper\AbstractHelper
+class ProxyUrl extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * VuFind configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $config VuFind configuration
+     * @param \Laminas\Config\Config $config VuFind configuration
      */
     public function __construct($config = null)
     {
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/ProxyUrlFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/ProxyUrlFactory.php
index 1cb09ccbcd0..9eb0629edc5 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/ProxyUrlFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/ProxyUrlFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * ProxyUrl helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Recaptcha.php b/module/VuFind/src/VuFind/View/Helper/Root/Recaptcha.php
index a6adae1e9a9..764f1337757 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Recaptcha.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Recaptcha.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * Recaptcha view helper
@@ -71,8 +71,8 @@ class Recaptcha extends AbstractHelper
     /**
      * Constructor
      *
-     * @param \ZendService\Recaptcha\Recaptcha $rc     Custom formatted Recaptcha
-     * @param \VuFind\Config                   $config Config object
+     * @param \Laminas\Recaptcha\Recaptcha $rc     Custom formatted Recaptcha
+     * @param \VuFind\Config               $config Config object
      */
     public function __construct($rc, $config)
     {
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/RecaptchaFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/RecaptchaFactory.php
index 45ac126b386..a8c6f36b1eb 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/RecaptchaFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/RecaptchaFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Recaptcha helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Record.php b/module/VuFind/src/VuFind/View/Helper/Root/Record.php
index d67e241fad9..860cc358ca7 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Record.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Record.php
@@ -64,14 +64,14 @@ class Record extends AbstractClassBasedTemplateRenderer
     /**
      * VuFind configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $config;
 
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $config VuFind configuration
+     * @param \Laminas\Config\Config $config VuFind configuration
      */
     public function __construct($config = null)
     {
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/RecordDataFormatter.php b/module/VuFind/src/VuFind/View/Helper/Root/RecordDataFormatter.php
index 10bb8e6a7c0..99d9364bf9e 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/RecordDataFormatter.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/RecordDataFormatter.php
@@ -28,8 +28,8 @@
  */
 namespace VuFind\View\Helper\Root;
 
+use Laminas\View\Helper\AbstractHelper;
 use VuFind\RecordDriver\AbstractBase as RecordDriver;
-use Zend\View\Helper\AbstractHelper;
 
 /**
  * Record driver data formatting view helper
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/RecordDataFormatterFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/RecordDataFormatterFactory.php
index 5f1655b8018..bb9ecf562db 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/RecordDataFormatterFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/RecordDataFormatterFactory.php
@@ -29,7 +29,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for record driver data formatting view helper
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/RecordFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/RecordFactory.php
index 65872ea0e2f..0f3201444aa 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/RecordFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/RecordFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Record helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/RecordLink.php b/module/VuFind/src/VuFind/View/Helper/Root/RecordLink.php
index fb4e746f063..8a3204f03d0 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/RecordLink.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/RecordLink.php
@@ -36,7 +36,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class RecordLink extends \Zend\View\Helper\AbstractHelper
+class RecordLink extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Record router
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/RecordLinkFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/RecordLinkFactory.php
index ca3912a3332..f162c474760 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/RecordLinkFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/RecordLinkFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * RecordLink helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Relais.php b/module/VuFind/src/VuFind/View/Helper/Root/Relais.php
index a79d6db6145..78cdaff5cba 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Relais.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Relais.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\Config\Config;
+use Laminas\Config\Config;
 
 /**
  * Relais view helper
@@ -38,7 +38,7 @@ use Zend\Config\Config;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class Relais extends \Zend\View\Helper\AbstractHelper
+class Relais extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Relais configuration (or null if none found)
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/RelaisFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/RelaisFactory.php
index 3c138fb9078..2305753fd73 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/RelaisFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/RelaisFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Relais helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/RelatedFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/RelatedFactory.php
index 7a8b981b652..7a06bb3610c 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/RelatedFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/RelatedFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Related helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/RenderArray.php b/module/VuFind/src/VuFind/View/Helper/Root/RenderArray.php
index e10f7377724..020c5f54641 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/RenderArray.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/RenderArray.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * View helper to render a portion of an array.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/ResultFeed.php b/module/VuFind/src/VuFind/View/Helper/Root/ResultFeed.php
index 4a8da2b281b..3e0f5bec5c1 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/ResultFeed.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/ResultFeed.php
@@ -28,11 +28,11 @@
 namespace VuFind\View\Helper\Root;
 
 use DateTime;
+use Laminas\Feed\Writer\Feed;
+use Laminas\Feed\Writer\Writer as FeedWriter;
+use Laminas\ServiceManager\ServiceManager;
+use Laminas\View\Helper\AbstractHelper;
 use VuFind\I18n\Translator\TranslatorAwareInterface;
-use Zend\Feed\Writer\Feed;
-use Zend\Feed\Writer\Writer as FeedWriter;
-use Zend\ServiceManager\ServiceManager;
-use Zend\View\Helper\AbstractHelper;
 
 /**
  * "Results as feed" view helper
@@ -75,7 +75,7 @@ class ResultFeed extends AbstractHelper implements TranslatorAwareInterface
      */
     public function registerExtensions(ServiceManager $sm)
     {
-        $manager = new \Zend\Feed\Writer\ExtensionPluginManager($sm);
+        $manager = new \Laminas\Feed\Writer\ExtensionPluginManager($sm);
         $manager->setInvokableClass(
             'DublinCore\Renderer\Entry',
             'VuFind\Feed\Writer\Extension\DublinCore\Renderer\Entry'
@@ -241,7 +241,7 @@ class ResultFeed extends AbstractHelper implements TranslatorAwareInterface
         $recordLink = $this->getView()->plugin('recordLink');
         try {
             $url = $serverUrl($recordLink->getUrl($record));
-        } catch (\Zend\Router\Exception\RuntimeException $e) {
+        } catch (\Laminas\Router\Exception\RuntimeException $e) {
             // No route defined? See if we can get a URL out of the driver.
             // Useful for web results, among other things.
             $url = $record->tryMethod('getUrl');
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/ResultFeedFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/ResultFeedFactory.php
index fe044576542..c6086719224 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/ResultFeedFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/ResultFeedFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * ResultFeed helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SafeMoneyFormat.php b/module/VuFind/src/VuFind/View/Helper/Root/SafeMoneyFormat.php
index 9c2946e0ee9..b797db0ad08 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SafeMoneyFormat.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SafeMoneyFormat.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\View\Helper\Root;
 
+use Laminas\View\Helper\AbstractHelper;
 use NumberFormatter;
-use Zend\View\Helper\AbstractHelper;
 
 /**
  * Safe money format view helper
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SafeMoneyFormatFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/SafeMoneyFormatFactory.php
index f1b349dce36..4d3b2e3bd77 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SafeMoneyFormatFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SafeMoneyFormatFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * SafeMoneyFormat helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SearchBox.php b/module/VuFind/src/VuFind/View/Helper/Root/SearchBox.php
index 0fbda8da191..6a5accb3eda 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SearchBox.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SearchBox.php
@@ -38,7 +38,7 @@ use VuFind\Search\Options\PluginManager as OptionsManager;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class SearchBox extends \Zend\View\Helper\AbstractHelper
+class SearchBox extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Configuration for search box.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SearchBoxFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/SearchBoxFactory.php
index 427ae595273..9593fd1b9c2 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SearchBoxFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SearchBoxFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * SearchBox helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SearchMemory.php b/module/VuFind/src/VuFind/View/Helper/Root/SearchMemory.php
index c33797e0a45..046e386711d 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SearchMemory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SearchMemory.php
@@ -27,8 +27,8 @@
  */
 namespace VuFind\View\Helper\Root;
 
+use Laminas\View\Helper\AbstractHelper;
 use VuFind\Search\Memory;
-use Zend\View\Helper\AbstractHelper;
 
 /**
  * View helper for remembering recent user searches/parameters.
@@ -142,7 +142,7 @@ class SearchMemory extends AbstractHelper
     {
         $lastUrl = $this->memory->retrieveSearch();
         $queryParams = $lastUrl ? parse_url($lastUrl, PHP_URL_QUERY) : '';
-        $request = new \Zend\StdLib\Parameters();
+        $request = new \Laminas\Stdlib\Parameters();
         $request->fromString($queryParams);
         $paramsPlugin = $this->getView()->plugin('searchParams');
         $params = $paramsPlugin($searchClassId);
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SearchMemoryFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/SearchMemoryFactory.php
index 53e76ccb2f9..d7a85c103d3 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SearchMemoryFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SearchMemoryFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * SearchMemory helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SearchOptions.php b/module/VuFind/src/VuFind/View/Helper/Root/SearchOptions.php
index bdcc5715ada..53d2f2896bb 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SearchOptions.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SearchOptions.php
@@ -38,7 +38,7 @@ use VuFind\Search\Options\PluginManager;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class SearchOptions extends \Zend\View\Helper\AbstractHelper
+class SearchOptions extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Search manager
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SearchOptionsFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/SearchOptionsFactory.php
index f0ec2b35d67..e7a283f0339 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SearchOptionsFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SearchOptionsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * SearchOptions helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SearchParams.php b/module/VuFind/src/VuFind/View/Helper/Root/SearchParams.php
index 90710f88f4f..39323db32a0 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SearchParams.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SearchParams.php
@@ -38,7 +38,7 @@ use VuFind\Search\Params\PluginManager;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class SearchParams extends \Zend\View\Helper\AbstractHelper
+class SearchParams extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Search manager
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SearchParamsFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/SearchParamsFactory.php
index c00e68d58af..4b6cea75780 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SearchParamsFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SearchParamsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * SearchParams helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SearchTabs.php b/module/VuFind/src/VuFind/View/Helper/Root/SearchTabs.php
index 72e4ecb88d8..4a064ee7f35 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SearchTabs.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SearchTabs.php
@@ -29,11 +29,11 @@
  */
 namespace VuFind\View\Helper\Root;
 
+use Laminas\Http\Request;
+use Laminas\View\Helper\Url;
 use VuFind\Search\Base\Results;
 use VuFind\Search\Results\PluginManager;
 use VuFind\Search\SearchTabsHelper;
-use Zend\Http\Request;
-use Zend\View\Helper\Url;
 
 /**
  * "Search tabs" view helper
@@ -45,7 +45,7 @@ use Zend\View\Helper\Url;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class SearchTabs extends \Zend\View\Helper\AbstractHelper
+class SearchTabs extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Search manager
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SearchTabsFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/SearchTabsFactory.php
index f8d84399d30..6181f057f92 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SearchTabsFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SearchTabsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * SearchTabs helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/ServerUrlFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/ServerUrlFactory.php
index bba22b7e3d5..a7ddf6e8f88 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/ServerUrlFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/ServerUrlFactory.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * ServerUrl helper factory. This uses the core Zend helper but configures it
+ * ServerUrl helper factory. This uses the core Laminas helper but configures it
  * according to VuFind settings.
  *
  * PHP version 7
@@ -29,7 +29,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * ServerUrl helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/ShortenUrl.php b/module/VuFind/src/VuFind/View/Helper/Root/ShortenUrl.php
index ea70d1be214..8150e2e71cb 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/ShortenUrl.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/ShortenUrl.php
@@ -38,7 +38,7 @@ use VuFind\UrlShortener\UrlShortenerInterface;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class ShortenUrl extends \Zend\View\Helper\AbstractHelper
+class ShortenUrl extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * URL shortener
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/ShortenUrlFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/ShortenUrlFactory.php
index cbf78fc8e03..1ee35655810 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/ShortenUrlFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/ShortenUrlFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * ShortenUrl helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SortFacetList.php b/module/VuFind/src/VuFind/View/Helper/Root/SortFacetList.php
index cb318e0d1ca..d68f808c412 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SortFacetList.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SortFacetList.php
@@ -28,7 +28,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * Sort facet list view helper
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Summon.php b/module/VuFind/src/VuFind/View/Helper/Root/Summon.php
index 2421a54eb8f..c58a19961a4 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Summon.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Summon.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * Summon support functions.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SyndeticsPlus.php b/module/VuFind/src/VuFind/View/Helper/Root/SyndeticsPlus.php
index b710c08ae7e..b60a86d15f2 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SyndeticsPlus.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SyndeticsPlus.php
@@ -36,19 +36,19 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Site
  */
-class SyndeticsPlus extends \Zend\View\Helper\AbstractHelper
+class SyndeticsPlus extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Syndetics configuration
      *
-     * \Zend\Config\Config
+     * \Laminas\Config\Config
      */
     protected $config;
 
     /**
      * Constructor
      *
-     * @param \Zend\Config\Config $config Syndetics configuration (should contain
+     * @param \Laminas\Config\Config $config Syndetics configuration (should contain
      * 'plus' boolean value (true if Syndetics Plus is enabled) and 'plus_id' string
      * value (Syndetics Plus user ID).  If these values are absent, SyndeticsPlus
      * will be disabled.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SyndeticsPlusFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/SyndeticsPlusFactory.php
index 08be5432d73..55b27813ee7 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SyndeticsPlusFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SyndeticsPlusFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * SyndeticsPlus helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SystemEmail.php b/module/VuFind/src/VuFind/View/Helper/Root/SystemEmail.php
index cad50dbe39c..a8d12092046 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SystemEmail.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SystemEmail.php
@@ -36,7 +36,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class SystemEmail extends \Zend\View\Helper\AbstractHelper
+class SystemEmail extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * System email
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/SystemEmailFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/SystemEmailFactory.php
index 1da45bbbedb..5a4a70337e3 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/SystemEmailFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/SystemEmailFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * SystemEmail helper factory.
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/TransEsc.php b/module/VuFind/src/VuFind/View/Helper/Root/TransEsc.php
index 5ae26a8735f..1dc8ccbad52 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/TransEsc.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/TransEsc.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * Translate + escape view helper
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/TransEscWithPrefix.php b/module/VuFind/src/VuFind/View/Helper/Root/TransEscWithPrefix.php
index 91455481804..5f376b90916 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/TransEscWithPrefix.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/TransEscWithPrefix.php
@@ -41,7 +41,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class TransEscWithPrefix extends \Zend\View\Helper\AbstractHelper
+class TransEscWithPrefix extends \Laminas\View\Helper\AbstractHelper
     implements \VuFind\I18n\Translator\TranslatorAwareInterface
 {
     use \VuFind\I18n\Translator\TranslatorAwareTrait;
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Translate.php b/module/VuFind/src/VuFind/View/Helper/Root/Translate.php
index d34bfa66a14..2ff9fd56cad 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Translate.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Translate.php
@@ -36,7 +36,7 @@ namespace VuFind\View\Helper\Root;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class Translate extends \Zend\View\Helper\AbstractHelper
+class Translate extends \Laminas\View\Helper\AbstractHelper
     implements \VuFind\I18n\Translator\TranslatorAwareInterface
 {
     use \VuFind\I18n\Translator\TranslatorAwareTrait;
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Truncate.php b/module/VuFind/src/VuFind/View/Helper/Root/Truncate.php
index f483d1ab9aa..47dfabc2098 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Truncate.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Truncate.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * Truncate view helper
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Url.php b/module/VuFind/src/VuFind/View/Helper/Root/Url.php
index b886eef2857..a838eaa404e 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Url.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Url.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * Url view helper (extending core Zend helper with additional functionality)
+ * Url view helper (extending core Laminas helper with additional functionality)
  *
  * PHP version 7
  *
@@ -27,10 +27,10 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\Http\PhpEnvironment\Request;
+use Laminas\Http\PhpEnvironment\Request;
 
 /**
- * Url view helper (extending core Zend helper with additional functionality)
+ * Url view helper (extending core Laminas helper with additional functionality)
  *
  * @category VuFind
  * @package  View_Helpers
@@ -38,7 +38,7 @@ use Zend\Http\PhpEnvironment\Request;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class Url extends \Zend\View\Helper\Url
+class Url extends \Laminas\View\Helper\Url
 {
     /**
      * Request (or null if unavailable)
@@ -66,8 +66,8 @@ class Url extends \Zend\View\Helper\Url
      * @param bool              $reuseMatchedParams Whether to reuse matched
      * parameters
      *
-     * @see Zend\Mvc\Router\RouteInterface::assemble()
-     * @see Zend\Router\RouteInterface::assemble()
+     * @see Laminas\Mvc\Router\RouteInterface::assemble()
+     * @see Laminas\Router\RouteInterface::assemble()
      *
      * @throws Exception\RuntimeException If no RouteStackInterface was provided
      * @throws Exception\RuntimeException If no RouteMatch was provided
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/UrlFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/UrlFactory.php
index 7ed0162d34e..da5c19e14ee 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/UrlFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/UrlFactory.php
@@ -28,8 +28,8 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\Router\RouteMatch;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\Router\RouteMatch;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Url helper factory.
@@ -59,7 +59,11 @@ class UrlFactory implements FactoryInterface
     public function __invoke(ContainerInterface $container, $requestedName,
         array $options = null
     ) {
-        $helper = new $requestedName($container->get('Request'));
+        $request = $container->get('Request');
+        if (!($request instanceof \Laminas\Http\PhpEnvironment\Request)) {
+            $request = null;
+        }
+        $helper = new $requestedName($request);
         $helper->setRouter($container->get('HttpRouter'));
 
         $match = $container->get('Application')
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/UserList.php b/module/VuFind/src/VuFind/View/Helper/Root/UserList.php
index 36337ab47df..e6999bdd10b 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/UserList.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/UserList.php
@@ -27,7 +27,8 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\Session\Container;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * List view helper
@@ -50,18 +51,18 @@ class UserList extends AbstractHelper
     /**
      * Session container for last list information.
      *
-     * @var \Zend\Session\Container
+     * @var Container
      */
     protected $session;
 
     /**
      * Constructor
      *
-     * @param \Zend\Session\Container $session Session container (must use same
-     * namespace as container provided to \VuFind\Db\Table\UserList)
-     * @param string                  $mode    List mode (enabled or disabled)
+     * @param Container $session Session container (must use same namespace as
+     * container provided to \VuFind\Db\Table\UserList)
+     * @param string    $mode    List mode (enabled or disabled)
      */
-    public function __construct(\Zend\Session\Container $session, $mode = 'enabled')
+    public function __construct(Container $session, $mode = 'enabled')
     {
         $this->mode = $mode;
         $this->session = $session;
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/UserListFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/UserListFactory.php
index 4810779adb2..887ec82982c 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/UserListFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/UserListFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * UserList helper factory.
@@ -61,8 +61,8 @@ class UserListFactory implements FactoryInterface
         if (!empty($options)) {
             throw new \Exception('Unexpected options sent to factory.');
         }
-        $sessionManager = $container->get(\Zend\Session\SessionManager::class);
-        $session = new \Zend\Session\Container('List', $sessionManager);
+        $sessionManager = $container->get(\Laminas\Session\SessionManager::class);
+        $session = new \Laminas\Session\Container('List', $sessionManager);
         $capabilities = $container->get(\VuFind\Config\AccountCapabilities::class);
         return new $requestedName($session, $capabilities->getListSetting());
     }
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/UserTags.php b/module/VuFind/src/VuFind/View/Helper/Root/UserTags.php
index 3f3753f1a58..3b86eff300a 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/UserTags.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/UserTags.php
@@ -27,7 +27,7 @@
  */
 namespace VuFind\View\Helper\Root;
 
-use Zend\View\Helper\AbstractHelper;
+use Laminas\View\Helper\AbstractHelper;
 
 /**
  * Tag view helper
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/UserTagsFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/UserTagsFactory.php
index 192d25fffc7..f1d9459cec9 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/UserTagsFactory.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/UserTagsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFind\View\Helper\Root;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * UserTags helper factory.
diff --git a/module/VuFind/src/VuFind/XSLT/Import/VuFind.php b/module/VuFind/src/VuFind/XSLT/Import/VuFind.php
index 575407fd728..626c459b7de 100644
--- a/module/VuFind/src/VuFind/XSLT/Import/VuFind.php
+++ b/module/VuFind/src/VuFind/XSLT/Import/VuFind.php
@@ -78,7 +78,7 @@ class VuFind
      *
      * @param string $config Configuration name
      *
-     * @return \Zend\Config\Config
+     * @return \Laminas\Config\Config
      */
     public static function getConfig($config = 'config')
     {
diff --git a/module/VuFind/src/VuFind/XSLT/Importer.php b/module/VuFind/src/VuFind/XSLT/Importer.php
index caad2b7f2dc..3fd9a5b2c83 100644
--- a/module/VuFind/src/VuFind/XSLT/Importer.php
+++ b/module/VuFind/src/VuFind/XSLT/Importer.php
@@ -28,11 +28,11 @@
 namespace VuFind\XSLT;
 
 use DOMDocument;
+use Laminas\Console\Console;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 use VuFind\Config\Locator as ConfigLocator;
 use VuFindSearch\Backend\Solr\Document\RawXMLDocument;
 use XSLTProcessor;
-use Zend\Console\Console;
-use Zend\ServiceManager\ServiceLocatorInterface;
 
 /**
  * VuFind XSLT importer
diff --git a/module/VuFind/src/VuFindTest/Unit/AjaxHandlerTest.php b/module/VuFind/src/VuFindTest/Unit/AjaxHandlerTest.php
index 59d2fcfd19a..a19461e9183 100644
--- a/module/VuFind/src/VuFindTest/Unit/AjaxHandlerTest.php
+++ b/module/VuFind/src/VuFindTest/Unit/AjaxHandlerTest.php
@@ -27,9 +27,9 @@
  */
 namespace VuFindTest\Unit;
 
-use Zend\Http\Request;
-use Zend\Mvc\Controller\Plugin\Params;
-use Zend\Stdlib\Parameters;
+use Laminas\Http\Request;
+use Laminas\Mvc\Controller\Plugin\Params;
+use Laminas\Stdlib\Parameters;
 
 /**
  * Base class for AjaxHandler tests.
@@ -84,7 +84,7 @@ abstract class AjaxHandlerTest extends MockContainerTest
         $request->setQuery(new Parameters($get));
         $request->setPost(new Parameters($post));
         $controller = $this->container->createMock(
-            'Zend\Mvc\Controller\AbstractActionController', ['getRequest']
+            'Laminas\Mvc\Controller\AbstractActionController', ['getRequest']
         );
         $controller->expects($this->any())->method('getRequest')
             ->will($this->returnValue($request));
diff --git a/module/VuFind/src/VuFindTest/Unit/DbTestCase.php b/module/VuFind/src/VuFindTest/Unit/DbTestCase.php
index 5f288fd53ae..52d6b834950 100644
--- a/module/VuFind/src/VuFindTest/Unit/DbTestCase.php
+++ b/module/VuFind/src/VuFindTest/Unit/DbTestCase.php
@@ -28,7 +28,7 @@
  */
 namespace VuFindTest\Unit;
 
-use Zend\ServiceManager\ServiceManager;
+use Laminas\ServiceManager\ServiceManager;
 
 /**
  * Abstract base class for PHPUnit database test cases.
@@ -97,7 +97,7 @@ abstract class DbTestCase extends TestCase
     /**
      * Get a service manager.
      *
-     * @return \Zend\ServiceManager\ServiceManager
+     * @return \Laminas\ServiceManager\ServiceManager
      */
     public function getServiceManager()
     {
@@ -109,12 +109,12 @@ abstract class DbTestCase extends TestCase
             $dbFactory = new \VuFind\Db\AdapterFactory(
                 $sm->get(\VuFind\Config\PluginManager::class)->get('config')
             );
-            $sm->setService('Zend\Db\Adapter\Adapter', $dbFactory->getAdapter());
+            $sm->setService('Laminas\Db\Adapter\Adapter', $dbFactory->getAdapter());
             $this->addTableManager($sm);
             $this->addRowManager($sm);
             $sm->setService(
-                'Zend\Session\SessionManager',
-                $this->createMock(\Zend\Session\SessionManager::class)
+                'Laminas\Session\SessionManager',
+                $this->createMock(\Laminas\Session\SessionManager::class)
             );
 
             // Override the configuration so PostgreSQL tests can work:
diff --git a/module/VuFind/src/VuFindTest/Unit/RecommendDeferredTestCase.php b/module/VuFind/src/VuFindTest/Unit/RecommendDeferredTestCase.php
index ba71e825544..8b5c5334eb3 100644
--- a/module/VuFind/src/VuFindTest/Unit/RecommendDeferredTestCase.php
+++ b/module/VuFind/src/VuFindTest/Unit/RecommendDeferredTestCase.php
@@ -44,7 +44,7 @@ abstract class RecommendDeferredTestCase extends TestCase
      *
      * @param string                      $class    class to construct
      * @param string                      $settings settings
-     * @param \Zend\StdLib\Parameters     $request  request
+     * @param \Laminas\Stdlib\Parameters  $request  request
      * @param \VuFind\Search\Solr\Results $results  results object
      *
      * @return SideFacets
@@ -56,7 +56,7 @@ abstract class RecommendDeferredTestCase extends TestCase
             $results = $this->getMockResults();
         }
         if (null === $request) {
-            $request = new \Zend\StdLib\Parameters([]);
+            $request = new \Laminas\Stdlib\Parameters([]);
         }
         $mod = new $class();
         $mod->setConfig($settings);
diff --git a/module/VuFind/src/VuFindTest/Unit/TestCase.php b/module/VuFind/src/VuFindTest/Unit/TestCase.php
index 4ceead7268a..683118115ad 100644
--- a/module/VuFind/src/VuFindTest/Unit/TestCase.php
+++ b/module/VuFind/src/VuFindTest/Unit/TestCase.php
@@ -44,7 +44,7 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase
     /**
      * The service manager instance
      *
-     * @var \Zend\ServiceManager\ServiceManager
+     * @var \Laminas\ServiceManager\ServiceManager
      */
     protected $serviceManager = false;
 
@@ -137,12 +137,12 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase
     /**
      * Get a service manager.
      *
-     * @return \Zend\ServiceManager\ServiceManager
+     * @return \Laminas\ServiceManager\ServiceManager
      */
     public function getServiceManager()
     {
         if (!$this->serviceManager) {
-            $this->serviceManager = new \Zend\ServiceManager\ServiceManager();
+            $this->serviceManager = new \Laminas\ServiceManager\ServiceManager();
             $optionsFactory = new \VuFind\Search\Options\PluginManager(
                 $this->serviceManager,
                 [
@@ -201,7 +201,7 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase
                 new \VuFind\Config\PluginManager($this->serviceManager, $cfg)
             );
             $this->serviceManager->setService(
-                'SharedEventManager', new \Zend\EventManager\SharedEventManager()
+                'SharedEventManager', new \Laminas\EventManager\SharedEventManager()
             );
             $driverManager = $this->serviceManager
                 ->get(\VuFind\RecordDriver\PluginManager::class);
@@ -212,9 +212,9 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase
                 )
             );
             $this->serviceManager->setService('Config', []);
-            $factory = new \Zend\Mvc\I18n\TranslatorFactory();
+            $factory = new \Laminas\Mvc\I18n\TranslatorFactory();
             $this->serviceManager->setService(
-                \Zend\Mvc\I18n\Translator::class,
+                \Laminas\Mvc\I18n\Translator::class,
                 $factory->createService($this->serviceManager)
             );
             $this->serviceManager->setService(
diff --git a/module/VuFind/src/VuFindTest/Unit/ViewHelperTestCase.php b/module/VuFind/src/VuFindTest/Unit/ViewHelperTestCase.php
index 4a34b13d13b..27bcad71cae 100644
--- a/module/VuFind/src/VuFindTest/Unit/ViewHelperTestCase.php
+++ b/module/VuFind/src/VuFindTest/Unit/ViewHelperTestCase.php
@@ -45,11 +45,11 @@ abstract class ViewHelperTestCase extends DbTestCase
      * @param array  $plugins Custom VuFind plug-ins to register
      * @param string $theme   Theme directory to load from
      *
-     * @return \Zend\View\Renderer\PhpRenderer
+     * @return \Laminas\View\Renderer\PhpRenderer
      */
     protected function getPhpRenderer($plugins = [], $theme = 'bootstrap3')
     {
-        $resolver = new \Zend\View\Resolver\TemplatePathStack();
+        $resolver = new \Laminas\View\Resolver\TemplatePathStack();
 
         // This assumes that all themes will be testing inherit directly
         // from root with no intermediate themes.  Probably safe for most
@@ -60,7 +60,7 @@ abstract class ViewHelperTestCase extends DbTestCase
                 $this->getPathForTheme($theme)
             ]
         );
-        $renderer = new \Zend\View\Renderer\PhpRenderer();
+        $renderer = new \Laminas\View\Renderer\PhpRenderer();
         $renderer->setResolver($resolver);
         if (!empty($plugins)) {
             $pluginManager = $renderer->getHelperPluginManager();
diff --git a/module/VuFind/tests/fixtures/content/amazon-cover b/module/VuFind/tests/fixtures/content/amazon-cover
index 8a3eb8bbf44a0edbc9869b507ddbe18977efc8a1..110afc8358a8075b4ccdb55aa93338f54f3982d7 100644
GIT binary patch
delta 59
scmey!{fm3T4K6b)C7;CH%)G?n$sd`|PF};f1zpI5c^i_@;*ZQs0Mc+5LI3~&

delta 52
vcmeyx{gHdZ4R&KIrKr@rl*zeF=O%Ap+zjJy&Sh$5gmHk9XEz^bF=hk+4BQgU

diff --git a/module/VuFind/tests/fixtures/paia/response/fees.json b/module/VuFind/tests/fixtures/paia/response/fees.json
index 010e18a05fd..b778021459a 100644
--- a/module/VuFind/tests/fixtures/paia/response/fees.json
+++ b/module/VuFind/tests/fixtures/paia/response/fees.json
@@ -24,7 +24,7 @@ Content-Type: application/json; charset=UTF-8
     "amount": "0.80 EUR",
     "date": "2016-05-23T15:31:34+02:00",
     "feetype": "Vormerkgebuehr",
-    "about": "Zend framework in action / Allen, Rob (2009)",
+    "about": "Test framework in action / Allen, Rob (2009)",
     "item": "http://uri.gbv.de/document/opac-de-830:bar:830$28323471"
   }, {
     "feetypeid": "de-830:fee-type:3",
diff --git a/module/VuFind/tests/fixtures/searches/advanced/request b/module/VuFind/tests/fixtures/searches/advanced/request
index 1197c2b209d..38da22b5cc1 100644
--- a/module/VuFind/tests/fixtures/searches/advanced/request
+++ b/module/VuFind/tests/fixtures/searches/advanced/request
@@ -1 +1 @@
-C:22:"Zend\Stdlib\Parameters":556:{x:i:2;a:13:{s:6:"method";s:10:"getVisData";s:11:"facetFields";s:11:"publishDate";s:4:"join";s:2:"OR";s:5:"bool0";a:1:{i:0;s:3:"AND";}s:8:"lookfor0";a:3:{i:0;s:7:"oranges";i:1;s:7:"bananas";i:2;s:5:"pears";}s:5:"type0";a:3:{i:0;s:10:"CallNumber";i:1;s:3:"toc";i:2;s:3:"ISN";}s:5:"bool1";a:1:{i:0;s:2:"OR";}s:8:"lookfor1";a:2:{i:0;s:4:"cars";i:1;s:6:"trucks";}s:5:"type1";a:2:{i:0;s:5:"Title";i:1;s:7:"Subject";}s:5:"bool2";a:1:{i:0;s:3:"NOT";}s:8:"lookfor2";a:1:{i:0;s:5:"squid";}s:5:"type2";a:1:{i:0;s:9:"AllFields";}s:1:"_";s:13:"1364229326430";};m:a:0:{}}
\ No newline at end of file
+C:25:"Laminas\Stdlib\Parameters":556:{x:i:2;a:13:{s:6:"method";s:10:"getVisData";s:11:"facetFields";s:11:"publishDate";s:4:"join";s:2:"OR";s:5:"bool0";a:1:{i:0;s:3:"AND";}s:8:"lookfor0";a:3:{i:0;s:7:"oranges";i:1;s:7:"bananas";i:2;s:5:"pears";}s:5:"type0";a:3:{i:0;s:10:"CallNumber";i:1;s:3:"toc";i:2;s:3:"ISN";}s:5:"bool1";a:1:{i:0;s:2:"OR";}s:8:"lookfor1";a:2:{i:0;s:4:"cars";i:1;s:6:"trucks";}s:5:"type1";a:2:{i:0;s:5:"Title";i:1;s:7:"Subject";}s:5:"bool2";a:1:{i:0;s:3:"NOT";}s:8:"lookfor2";a:1:{i:0;s:5:"squid";}s:5:"type2";a:1:{i:0;s:9:"AllFields";}s:1:"_";s:13:"1364229326430";};m:a:0:{}}
\ No newline at end of file
diff --git a/module/VuFind/tests/integration-tests/src/VuFindTest/Auth/DatabaseTest.php b/module/VuFind/tests/integration-tests/src/VuFindTest/Auth/DatabaseTest.php
index a8af9f56596..02fdfaef9a3 100644
--- a/module/VuFind/tests/integration-tests/src/VuFindTest/Auth/DatabaseTest.php
+++ b/module/VuFind/tests/integration-tests/src/VuFindTest/Auth/DatabaseTest.php
@@ -90,12 +90,12 @@ class DatabaseTest extends \VuFindTest\Unit\DbTestCase
      *
      * @param array $post Associative array of POST parameters.
      *
-     * @return \Zend\Http\Request
+     * @return \Laminas\Http\Request
      */
     protected function getRequest($post)
     {
-        $request = new \Zend\Http\Request();
-        $request->setPost(new \Zend\Stdlib\Parameters($post));
+        $request = new \Laminas\Http\Request();
+        $request->setPost(new \Laminas\Stdlib\Parameters($post));
         return $request;
     }
 
@@ -105,7 +105,7 @@ class DatabaseTest extends \VuFindTest\Unit\DbTestCase
      *
      * @param array $overrides Associative array of parameters to override.
      *
-     * @return \Zend\Http\Request
+     * @return \Laminas\Http\Request
      */
     protected function getAccountCreationRequest($overrides = [])
     {
@@ -123,7 +123,7 @@ class DatabaseTest extends \VuFindTest\Unit\DbTestCase
      *
      * @param array $overrides Associative array of parameters to override.
      *
-     * @return \Zend\Http\Request
+     * @return \Laminas\Http\Request
      */
     protected function getLoginRequest($overrides = [])
     {
diff --git a/module/VuFind/tests/integration-tests/src/VuFindTest/Auth/ILSTest.php b/module/VuFind/tests/integration-tests/src/VuFindTest/Auth/ILSTest.php
index c24b8a5f4ef..726cc264aee 100644
--- a/module/VuFind/tests/integration-tests/src/VuFindTest/Auth/ILSTest.php
+++ b/module/VuFind/tests/integration-tests/src/VuFindTest/Auth/ILSTest.php
@@ -27,9 +27,9 @@
  */
 namespace VuFindTest\Auth;
 
+use Laminas\Stdlib\Parameters;
 use VuFind\Auth\ILS;
 use VuFind\Db\Table\User;
-use Zend\Stdlib\Parameters;
 
 /**
  * ILS authentication test class.
@@ -105,10 +105,10 @@ class ILSTest extends \VuFindTest\Unit\DbTestCase
         $driverManager->setService('Sample', $driver);
         $mockConfigReader = $this->createMock(\VuFind\Config\PluginManager::class);
         $mockConfigReader->expects($this->any())->method('get')
-            ->will($this->returnValue(new \Zend\Config\Config([])));
+            ->will($this->returnValue(new \Laminas\Config\Config([])));
         $auth = new \VuFind\Auth\ILS(
             new \VuFind\ILS\Connection(
-                new \Zend\Config\Config(['driver' => 'Sample']),
+                new \Laminas\Config\Config(['driver' => 'Sample']),
                 $driverManager, $mockConfigReader
             ),
             $authenticator
@@ -136,15 +136,15 @@ class ILSTest extends \VuFindTest\Unit\DbTestCase
      *
      * @param array $overrides Associative array of parameters to override.
      *
-     * @return \Zend\Http\Request
+     * @return \Laminas\Http\Request
      */
     protected function getLoginRequest($overrides = [])
     {
         $post = $overrides + [
             'username' => 'testuser', 'password' => 'testpass'
         ];
-        $request = new \Zend\Http\Request();
-        $request->setPost(new \Zend\Stdlib\Parameters($post));
+        $request = new \Laminas\Http\Request();
+        $request->setPost(new \Laminas\Stdlib\Parameters($post));
         return $request;
     }
 
@@ -235,7 +235,7 @@ class ILSTest extends \VuFindTest\Unit\DbTestCase
         // Configure the authenticator to look for a cat_id; since there is no
         // cat_id in the response above, this will throw an exception.
         $config = ['Authentication' => ['ILS_username_field' => 'cat_id']];
-        $auth->setConfig(new \Zend\Config\Config($config));
+        $auth->setConfig(new \Laminas\Config\Config($config));
         $auth->authenticate($this->getLoginRequest());
     }
 
@@ -344,7 +344,7 @@ class ILSTest extends \VuFindTest\Unit\DbTestCase
         $patron = ['cat_username' => 'testuser', 'cat_id' => '1234'];
         $auth = $this->getAuth($driver, $patron);
         $config = ['Authentication' => ['ILS_username_field' => 'cat_id']];
-        $auth->setConfig(new \Zend\Config\Config($config));
+        $auth->setConfig(new \Laminas\Config\Config($config));
         $user = $auth->updatePassword($request);
         $this->assertEquals('1234', $user->username);
         $this->assertEquals('newpass', $user->getCatPassword());
diff --git a/module/VuFind/tests/integration-tests/src/VuFindTest/Auth/ShibbolethTest.php b/module/VuFind/tests/integration-tests/src/VuFindTest/Auth/ShibbolethTest.php
index 6172fbbe318..7d7a7f82cce 100644
--- a/module/VuFind/tests/integration-tests/src/VuFindTest/Auth/ShibbolethTest.php
+++ b/module/VuFind/tests/integration-tests/src/VuFindTest/Auth/ShibbolethTest.php
@@ -27,8 +27,8 @@
  */
 namespace VuFindTest\Auth;
 
+use Laminas\Config\Config;
 use VuFind\Auth\Shibboleth;
-use Zend\Config\Config;
 
 /**
  * Shibboleth authentication test class.
@@ -79,7 +79,7 @@ class ShibbolethTest extends \VuFindTest\Unit\DbTestCase
         if (null === $config) {
             $config = $this->getAuthConfig();
         }
-        $obj = new Shibboleth($this->createMock(\Zend\Session\ManagerInterface::class));
+        $obj = new Shibboleth($this->createMock(\Laminas\Session\ManagerInterface::class));
         $initializer = new \VuFind\ServiceManager\ServiceInitializer();
         $initializer($this->getServiceManager(), $obj);
         $obj->setConfig($config);
@@ -121,7 +121,7 @@ class ShibbolethTest extends \VuFindTest\Unit\DbTestCase
      *
      * @param array $overrides Associative array of parameters to override.
      *
-     * @return \Zend\Http\Request
+     * @return \Laminas\Http\Request
      */
     protected function getLoginRequest($overrides = [])
     {
@@ -129,8 +129,8 @@ class ShibbolethTest extends \VuFindTest\Unit\DbTestCase
             'username' => 'testuser', 'email' => 'user@test.com',
             'password' => 'testpass'
         ];
-        $request = new \Zend\Http\PhpEnvironment\Request();
-        $request->setServer(new \Zend\Stdlib\Parameters($server));
+        $request = new \Laminas\Http\PhpEnvironment\Request();
+        $request->setServer(new \Laminas\Stdlib\Parameters($server));
         return $request;
     }
 
diff --git a/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/RecordTest.php b/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/RecordTest.php
index 69d42a478db..2fb2b35d9f4 100644
--- a/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/RecordTest.php
+++ b/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/RecordTest.php
@@ -129,7 +129,7 @@ class RecordTest extends \VuFindTest\Unit\MinkTestCase
      */
     public function testRecordTabsOnPlusId()
     {
-        // Skip encoding on this one, because Zend Framework doesn't URL encode
+        // Skip encoding on this one, because Laminas doesn't URL encode
         // plus signs in route segments!
         $this->tryRecordTabsOnId('theplus+andtheminus-', false);
         $this->tryLoadingTabHashAndReturningToDefault(
diff --git a/module/VuFind/tests/integration-tests/src/VuFindTest/View/Helper/Root/ResultFeedTest.php b/module/VuFind/tests/integration-tests/src/VuFindTest/View/Helper/Root/ResultFeedTest.php
index 2ef78a9997e..e30a1167dfe 100644
--- a/module/VuFind/tests/integration-tests/src/VuFindTest/View/Helper/Root/ResultFeedTest.php
+++ b/module/VuFind/tests/integration-tests/src/VuFindTest/View/Helper/Root/ResultFeedTest.php
@@ -69,14 +69,14 @@ class ResultFeedTest extends \VuFindTest\Unit\ViewHelperTestCase
             ->setConstructorArgs(
                 [
                     new \VuFind\Record\Router(
-                        new \Zend\Config\Config([])
+                        new \Laminas\Config\Config([])
                     )
                 ]
             )->getMock();
         $recordLink->expects($this->any())->method('getUrl')
             ->will($this->returnValue('test/url'));
 
-        $serverUrl = $this->createMock(\Zend\View\Helper\ServerUrl::class);
+        $serverUrl = $this->createMock(\Laminas\View\Helper\ServerUrl::class);
         $serverUrl->expects($this->any())->method('__invoke')
             ->will($this->returnValue('http://server/url'));
 
@@ -90,11 +90,11 @@ class ResultFeedTest extends \VuFindTest\Unit\ViewHelperTestCase
     /**
      * Mock out the translator.
      *
-     * @return \Zend\I18n\Translator\TranslatorInterface
+     * @return \Laminas\I18n\Translator\TranslatorInterface
      */
     protected function getMockTranslator()
     {
-        $mock = $this->getMockBuilder(\Zend\I18n\Translator\TranslatorInterface::class)
+        $mock = $this->getMockBuilder(\Laminas\I18n\Translator\TranslatorInterface::class)
             ->getMock();
         $mock->expects($this->at(1))->method('translate')
             ->with($this->equalTo('showing_results_of_html'), $this->equalTo('default'))
@@ -112,7 +112,7 @@ class ResultFeedTest extends \VuFindTest\Unit\ViewHelperTestCase
         // Set up a request -- we'll sort by title to ensure a predictable order
         // for the result list (relevance or last_indexed may lead to unstable test
         // cases).
-        $request = new \Zend\Stdlib\Parameters();
+        $request = new \Laminas\Stdlib\Parameters();
         $request->set('lookfor', 'id:testbug2 OR id:testsample1');
         $request->set('skip_rss_sort', 1);
         $request->set('sort', 'title');
@@ -137,7 +137,7 @@ class ResultFeedTest extends \VuFindTest\Unit\ViewHelperTestCase
         $this->assertTrue(strstr($rss, 'dc:format') !== false);
 
         // Now re-parse it and check for some expected values:
-        $parsedFeed = \Zend\Feed\Reader\Reader::importString($rss);
+        $parsedFeed = \Laminas\Feed\Reader\Reader::importString($rss);
         $this->assertEquals(
             'Showing 1 - 2 results of 2', $parsedFeed->getDescription()
         );
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/AjaxHandler/CommentRecordTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/AjaxHandler/CommentRecordTest.php
index e30aaf0a088..36b7223470f 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/AjaxHandler/CommentRecordTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/AjaxHandler/CommentRecordTest.php
@@ -65,7 +65,7 @@ class CommentRecordTest extends \VuFindTest\Unit\AjaxHandlerTest
         $this->container->set('VuFind\Auth\Manager', $authManager);
 
         // Set up capability configuration:
-        $cfg = new \Zend\Config\Config(
+        $cfg = new \Laminas\Config\Config(
             ['Social' => ['comments' => $enabled ? 'enabled' : 'disabled']]
         );
         $capabilities = new AccountCapabilities($cfg, $authManager);
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/AjaxHandler/DoiLookupTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/AjaxHandler/DoiLookupTest.php
index a043d269477..a535ca58cce 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/AjaxHandler/DoiLookupTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/AjaxHandler/DoiLookupTest.php
@@ -27,12 +27,12 @@
  */
 namespace VuFindTest\AjaxHandler;
 
+use Laminas\Config\Config;
 use VuFind\AjaxHandler\DoiLookup;
 use VuFind\AjaxHandler\DoiLookupFactory;
 use VuFind\Config\PluginManager as ConfigManager;
 use VuFind\DoiLinker\DoiLinkerInterface;
 use VuFind\DoiLinker\PluginManager;
-use Zend\Config\Config;
 
 /**
  * DoiLookup test class.
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/AjaxHandler/KeepAliveTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/AjaxHandler/KeepAliveTest.php
index 7334e6f0cc3..9e13cf1c5a1 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/AjaxHandler/KeepAliveTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/AjaxHandler/KeepAliveTest.php
@@ -27,9 +27,9 @@
  */
 namespace VuFindTest\AjaxHandler;
 
+use Laminas\Session\SessionManager;
 use VuFind\AjaxHandler\KeepAlive;
 use VuFind\AjaxHandler\KeepAliveFactory;
-use Zend\Session\SessionManager;
 
 /**
  * KeepAlive test class.
@@ -54,7 +54,7 @@ class KeepAliveTest extends \VuFindTest\Unit\AjaxHandlerTest
         $this->container->set(SessionManager::class, $sm);
         $factory = new KeepAliveFactory();
         $handler = $factory($this->container, KeepAlive::class);
-        $params = new \Zend\Mvc\Controller\Plugin\Params();
+        $params = new \Laminas\Mvc\Controller\Plugin\Params();
         $this->assertEquals([true], $handler->handleRequest($params));
     }
 }
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/AjaxHandler/RecommendTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/AjaxHandler/RecommendTest.php
index d07c83dc503..e03a025fc94 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/AjaxHandler/RecommendTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/AjaxHandler/RecommendTest.php
@@ -27,6 +27,7 @@
  */
 namespace VuFindTest\AjaxHandler;
 
+use Laminas\View\Renderer\PhpRenderer;
 use VuFind\AjaxHandler\Recommend;
 use VuFind\AjaxHandler\RecommendFactory;
 use VuFind\Recommend\PluginManager;
@@ -35,7 +36,6 @@ use VuFind\Search\Results\PluginManager as ResultsManager;
 use VuFind\Search\Solr\Results;
 use VuFind\Session\Settings;
 use VuFind\View\Helper\Root\Recommend as RecommendHelper;
-use Zend\View\Renderer\PhpRenderer;
 
 /**
  * Recommend test class.
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/ChoiceAuthTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/ChoiceAuthTest.php
index 557daa3fb9c..1cb468c4033 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/ChoiceAuthTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/ChoiceAuthTest.php
@@ -27,11 +27,11 @@
  */
 namespace VuFindTest\Auth;
 
+use Laminas\Config\Config;
+use Laminas\Http\PhpEnvironment\Request;
 use VuFind\Auth\ChoiceAuth;
 use VuFind\Auth\PluginManager;
 use VuFind\Db\Row\User as UserRow;
-use Zend\Config\Config;
-use Zend\Http\PhpEnvironment\Request;
 
 /**
  * ChoiceAuth test class.
@@ -207,11 +207,11 @@ class ChoiceAuthTest extends \VuFindTest\Unit\TestCase
      *
      * @param string $method Auth method to set in container (null for none).
      *
-     * @return \Zend\Session\Container
+     * @return \Laminas\Session\Container
      */
     protected function getSessionContainer($method = null)
     {
-        $mock = $this->getMockBuilder(\Zend\Session\Container::class)
+        $mock = $this->getMockBuilder(\Laminas\Session\Container::class)
             ->setMethods(['__get', '__isset', '__set', '__unset'])
             ->disableOriginalConstructor()->getMock();
         if ($method) {
@@ -225,7 +225,7 @@ class ChoiceAuthTest extends \VuFindTest\Unit\TestCase
      * Get a ChoiceAuth object.
      *
      * @param PluginManager           $pm         Plugin manager
-     * @param \Zend\Session\Container $session    Session container
+     * @param \Laminas\Session\Container $session    Session container
      * @param string                  $strategies Strategies setting
      *
      * @return ChoiceAuth
@@ -274,11 +274,11 @@ class ChoiceAuthTest extends \VuFindTest\Unit\TestCase
     /**
      * Get a mock request object
      *
-     * @return \Zend\Http\PhpEnvironment\Request
+     * @return \Laminas\Http\PhpEnvironment\Request
      */
     protected function getMockRequest()
     {
-        return $this->getMockBuilder(\Zend\Http\PhpEnvironment\Request::class)
+        return $this->getMockBuilder(\Laminas\Http\PhpEnvironment\Request::class)
             ->disableOriginalConstructor()
             ->getMock();
     }
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/DatabaseUnitTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/DatabaseUnitTest.php
index 2ad8163a007..5a5323d4cce 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/DatabaseUnitTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/DatabaseUnitTest.php
@@ -27,9 +27,9 @@
  */
 namespace VuFindTest\Auth;
 
+use Laminas\Db\ResultSet\ResultSet;
+use Laminas\Stdlib\Parameters;
 use VuFind\Auth\Database;
-use Zend\Db\ResultSet\ResultSet;
-use Zend\Stdlib\Parameters;
 
 /**
  * Database authentication test class.
@@ -230,12 +230,12 @@ class DatabaseUnitTest extends \VuFindTest\Unit\DbTestCase
      *
      * @param array $post POST parameters
      *
-     * @return \Zend\Http\PhpEnvironment\Request
+     * @return \Laminas\Http\PhpEnvironment\Request
      */
     protected function getRequest($post = [])
     {
         $post = new Parameters($post);
-        $request = $this->getMockBuilder(\Zend\Http\PhpEnvironment\Request::class)
+        $request = $this->getMockBuilder(\Laminas\Http\PhpEnvironment\Request::class)
             ->setMethods(['getPost'])->getMock();
         $request->expects($this->any())->method('getPost')
             ->will($this->returnValue($post));
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/LDAPTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/LDAPTest.php
index 13cdb68b0c9..4aa80e7442c 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/LDAPTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/LDAPTest.php
@@ -27,8 +27,8 @@
  */
 namespace VuFindTest\Auth;
 
+use Laminas\Config\Config;
 use VuFind\Auth\LDAP;
-use Zend\Config\Config;
 
 /**
  * LDAP authentication test class.
@@ -171,15 +171,15 @@ class LDAPTest extends \VuFindTest\Unit\DbTestCase
      *
      * @param array $overrides Associative array of parameters to override.
      *
-     * @return \Zend\Http\Request
+     * @return \Laminas\Http\Request
      */
     protected function getLoginRequest($overrides = [])
     {
         $post = $overrides + [
             'username' => 'testuser', 'password' => 'testpass'
         ];
-        $request = new \Zend\Http\Request();
-        $request->setPost(new \Zend\Stdlib\Parameters($post));
+        $request = new \Laminas\Http\Request();
+        $request->setPost(new \Laminas\Stdlib\Parameters($post));
         return $request;
     }
 
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/ManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/ManagerTest.php
index 327a73fc4f2..ce58562a2bd 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/ManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/ManagerTest.php
@@ -27,12 +27,12 @@
  */
 namespace VuFindTest\Auth;
 
+use Laminas\Config\Config;
+use Laminas\Session\SessionManager;
 use VuFind\Auth\Manager;
 use VuFind\Auth\PluginManager;
 use VuFind\Db\Row\User as UserRow;
 use VuFind\Db\Table\User as UserTable;
-use Zend\Config\Config;
-use Zend\Session\SessionManager;
 
 /**
  * Authentication manager test class.
@@ -503,7 +503,7 @@ class ManagerTest extends \VuFindTest\Unit\TestCase
         $manager = $this->getManager([], $table);
 
         // Fake the session inside the manager:
-        $mockSession = $this->getMockBuilder(\Zend\Session\Container::class)
+        $mockSession = $this->getMockBuilder(\Laminas\Session\Container::class)
             ->setMethods(['__get', '__isset', '__set', '__unset'])
             ->disableOriginalConstructor()->getMock();
         $mockSession->expects($this->any())->method('__isset')->with($this->equalTo('userId'))->will($this->returnValue(true));
@@ -538,7 +538,7 @@ class ManagerTest extends \VuFindTest\Unit\TestCase
         $cookies = new \VuFind\Cookie\CookieManager([]);
         $csrf = new \VuFind\Validator\Csrf(
             [
-                'session' => new \Zend\Session\Container('csrf', $sessionManager),
+                'session' => new \Laminas\Session\Container('csrf', $sessionManager),
                 'salt' => 'csrftest'
             ]
         );
@@ -566,7 +566,7 @@ class ManagerTest extends \VuFindTest\Unit\TestCase
      */
     protected function getMockSessionManager()
     {
-        return $this->getMockBuilder(\Zend\Session\SessionManager::class)
+        return $this->getMockBuilder(\Laminas\Session\SessionManager::class)
             ->disableOriginalConstructor()
             ->getMock();
     }
@@ -616,17 +616,17 @@ class ManagerTest extends \VuFindTest\Unit\TestCase
     /**
      * Get a mock request object
      *
-     * @return \Zend\Http\PhpEnvironment\Request
+     * @return \Laminas\Http\PhpEnvironment\Request
      */
     protected function getMockRequest()
     {
-        $mock = $this->getMockBuilder(\Zend\Http\PhpEnvironment\Request::class)
+        $mock = $this->getMockBuilder(\Laminas\Http\PhpEnvironment\Request::class)
             ->disableOriginalConstructor()
             ->getMock();
-        $post = new \Zend\Stdlib\Parameters();
+        $post = new \Laminas\Stdlib\Parameters();
         $mock->expects($this->any())->method('getPost')
             ->will($this->returnValue($post));
-        $get = new \Zend\Stdlib\Parameters();
+        $get = new \Laminas\Stdlib\Parameters();
         $mock->expects($this->any())->method('getQuery')
             ->will($this->returnValue($get));
         return $mock;
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/MultiAuthTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/MultiAuthTest.php
index 0de2ece8b48..a7d1617c0da 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/MultiAuthTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/MultiAuthTest.php
@@ -27,7 +27,7 @@
  */
 namespace VuFindTest\Auth;
 
-use Zend\Config\Config;
+use Laminas\Config\Config;
 
 /**
  * LDAP authentication test class.
@@ -94,15 +94,15 @@ class MultiAuthTest extends \VuFindTest\Unit\DbTestCase
      *
      * @param array $overrides Associative array of parameters to override.
      *
-     * @return \Zend\Http\Request
+     * @return \Laminas\Http\Request
      */
     protected function getLoginRequest($overrides = [])
     {
         $post = $overrides + [
             'username' => 'testuser', 'password' => 'testpass'
         ];
-        $request = new \Zend\Http\Request();
-        $request->setPost(new \Zend\Stdlib\Parameters($post));
+        $request = new \Laminas\Http\Request();
+        $request->setPost(new \Laminas\Stdlib\Parameters($post));
         return $request;
     }
 
@@ -113,7 +113,7 @@ class MultiAuthTest extends \VuFindTest\Unit\DbTestCase
      */
     public function testLoginWithBadService()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\ServiceNotFoundException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\ServiceNotFoundException::class);
 
         $config = $this->getAuthConfig();
         $config->MultiAuth->method_order = 'InappropriateService,Database';
@@ -131,7 +131,7 @@ class MultiAuthTest extends \VuFindTest\Unit\DbTestCase
      */
     public function testLoginWithBadClass()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
 
         $config = $this->getAuthConfig();
         $config->MultiAuth->method_order = get_class($this) . ',Database';
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/PluginManagerTest.php
index a78c49f8c5f..ddebc2115da 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Auth\\AbstractBase');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/SIP2Test.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/SIP2Test.php
index 214ec1f7a5d..b705b0d0f81 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/SIP2Test.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Auth/SIP2Test.php
@@ -27,8 +27,8 @@
  */
 namespace VuFindTest\Auth;
 
+use Laminas\Config\Config;
 use VuFind\Auth\SIP2;
-use Zend\Config\Config;
 
 /**
  * SIP2 authentication test class.
@@ -80,15 +80,15 @@ class SIP2Test extends \VuFindTest\Unit\DbTestCase
      *
      * @param array $overrides Associative array of parameters to override.
      *
-     * @return \Zend\Http\Request
+     * @return \Laminas\Http\Request
      */
     protected function getLoginRequest($overrides = [])
     {
         $post = $overrides + [
             'username' => 'testuser', 'password' => 'testpass'
         ];
-        $request = new \Zend\Http\Request();
-        $request->setPost(new \Zend\Stdlib\Parameters($post));
+        $request = new \Laminas\Http\Request();
+        $request->setPost(new \Laminas\Stdlib\Parameters($post));
         return $request;
     }
 
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Autocomplete/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Autocomplete/PluginManagerTest.php
index 5d30c271ded..d7d80a0c47e 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Autocomplete/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Autocomplete/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Autocomplete\\AutocompleteInterface');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Config/PluginFactoryTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Config/PluginFactoryTest.php
index 542bf03565b..632732bdfe5 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Config/PluginFactoryTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Config/PluginFactoryTest.php
@@ -130,7 +130,7 @@ class PluginFactoryTest extends \VuFindTest\Unit\TestCase
      *
      * @param string $name Configuration to load
      *
-     * @return \Zend\Config\Config
+     * @return \Laminas\Config\Config
      */
     protected function getConfig($name)
     {
@@ -254,7 +254,7 @@ class PluginFactoryTest extends \VuFindTest\Unit\TestCase
      */
     public function testReadOnlyConfig()
     {
-        $this->expectException(\Zend\Config\Exception\RuntimeException::class);
+        $this->expectException(\Laminas\Config\Exception\RuntimeException::class);
 
         if (self::$writeFailed) {
             $this->markTestSkipped('Could not write test configurations.');
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Config/Reader/CacheDecoratorTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Config/Reader/CacheDecoratorTest.php
index 3ccda6821d8..6bf3f3a0d7f 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Config/Reader/CacheDecoratorTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Config/Reader/CacheDecoratorTest.php
@@ -48,13 +48,13 @@ class CacheDecoratorTest extends \PHPUnit\Framework\TestCase
      */
     public function testFromFileAndString()
     {
-        $cache = $this->getMockForAbstractClass('Zend\Cache\Storage\StorageInterface');
+        $cache = $this->getMockForAbstractClass('Laminas\Cache\Storage\StorageInterface');
         $cache->expects($this->exactly(2))
             ->method('setItem');
         $cache->expects($this->exactly(2))
             ->method('hasItem')
             ->will($this->returnValue(false));
-        $reader = $this->getMockForAbstractClass('Zend\Config\Reader\ReaderInterface');
+        $reader = $this->getMockForAbstractClass('Laminas\Config\Reader\ReaderInterface');
         $reader->expects($this->once())
             ->method('fromFile')
             ->will($this->returnValue([]));
@@ -73,7 +73,7 @@ class CacheDecoratorTest extends \PHPUnit\Framework\TestCase
      */
     public function testFromFileAndStringCached()
     {
-        $cache = $this->getMockForAbstractClass('Zend\Cache\Storage\StorageInterface');
+        $cache = $this->getMockForAbstractClass('Laminas\Cache\Storage\StorageInterface');
         $cache->expects($this->never())
             ->method('setItem');
         $cache->expects($this->exactly(2))
@@ -82,7 +82,7 @@ class CacheDecoratorTest extends \PHPUnit\Framework\TestCase
         $cache->expects($this->exactly(2))
             ->method('getItem')
             ->will($this->returnValue([]));
-        $reader = $this->getMockForAbstractClass('Zend\Config\Reader\ReaderInterface');
+        $reader = $this->getMockForAbstractClass('Laminas\Config\Reader\ReaderInterface');
         $deco = new CacheDecorator($reader, $cache);
         $deco->fromFile('ignore');
         $deco->fromString('ignore');
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Connection/WikipediaTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Connection/WikipediaTest.php
index 35adc059d48..28048abe0e6 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Connection/WikipediaTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Connection/WikipediaTest.php
@@ -28,10 +28,10 @@
  */
 namespace VuFindTest\Connection;
 
-use VuFind\Connection\Wikipedia;
+use Laminas\Http\Client\Adapter\Test as TestAdapter;
 
-use Zend\Http\Client\Adapter\Test as TestAdapter;
-use Zend\Http\Client as HttpClient;
+use Laminas\Http\Client as HttpClient;
+use VuFind\Connection\Wikipedia;
 
 /**
  * Unit tests for Wikipedia connector.
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Connection/WorldCatUtilsTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Connection/WorldCatUtilsTest.php
index c8f9b28931f..23d3915fe52 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Connection/WorldCatUtilsTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Connection/WorldCatUtilsTest.php
@@ -28,10 +28,10 @@
  */
 namespace VuFindTest\Connection;
 
-use VuFind\Connection\WorldCatUtils;
+use Laminas\Http\Client\Adapter\Test as TestAdapter;
 
-use Zend\Http\Client\Adapter\Test as TestAdapter;
-use Zend\Http\Client as HttpClient;
+use Laminas\Http\Client as HttpClient;
+use VuFind\Connection\WorldCatUtils;
 
 /**
  * Unit tests for WorldCat utility connector.
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Content/AuthorNotes/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Content/AuthorNotes/PluginManagerTest.php
index 273156a142c..eeafde175cd 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Content/AuthorNotes/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Content/AuthorNotes/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Content\\AbstractBase');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Content/Covers/ContentCafeTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Content/Covers/ContentCafeTest.php
index ead0d94022e..d5743672f17 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Content/Covers/ContentCafeTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Content/Covers/ContentCafeTest.php
@@ -28,9 +28,9 @@
  */
 namespace VuFindTest\Content\Covers;
 
+use Laminas\Config\Config;
 use VuFind\Content\Covers\ContentCafe;
 use VuFindCode\ISBN;
-use Zend\Config\Config;
 
 /**
  * Unit tests for ContentCafe cover loader.
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Content/Covers/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Content/Covers/PluginManagerTest.php
index c835b7e34ca..bc12cd7ebad 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Content/Covers/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Content/Covers/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Content\\AbstractCover');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Content/Excerpts/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Content/Excerpts/PluginManagerTest.php
index 12334aee8d5..4b8699502ce 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Content/Excerpts/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Content/Excerpts/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Content\\AbstractBase');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Content/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Content/PluginManagerTest.php
index c35d9b7dd30..bd11ab8f4f8 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Content/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Content/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Content\\Loader');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Content/Reviews/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Content/Reviews/PluginManagerTest.php
index 2765672c6bf..9a173c99104 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Content/Reviews/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Content/Reviews/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Content\\AbstractBase');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/FollowupTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/FollowupTest.php
index 42183d039d5..282c01c1ea4 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/FollowupTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/FollowupTest.php
@@ -28,9 +28,9 @@
  */
 namespace VuFindTest\Controller\Plugin;
 
+use Laminas\Session\Container;
 use VuFind\Controller\Plugin\Followup;
 use VuFindTest\Unit\TestCase as TestCase;
-use Zend\Session\Container;
 
 /**
  * Followup controller plugin tests.
@@ -71,7 +71,7 @@ class FollowupTest extends TestCase
         // standard controller-provided URL retrieval:
         $this->assertEquals('http://localhost/default-url', $f->retrieve('url'));
         // no parameters retrieves session object:
-        $this->assertEquals('Zend\Session\Container', get_class($f->retrieve()));
+        $this->assertEquals('Laminas\Session\Container', get_class($f->retrieve()));
         // test defaulting behavior:
         $this->assertEquals('foo', $f->retrieve('bar', 'foo'));
     }
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/NewItemsTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/NewItemsTest.php
index e37f439bb0c..89fad16fb9a 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/NewItemsTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/NewItemsTest.php
@@ -28,9 +28,9 @@
  */
 namespace VuFindTest\Controller\Plugin;
 
+use Laminas\Config\Config;
 use VuFind\Controller\Plugin\NewItems;
 use VuFindTest\Unit\TestCase as TestCase;
-use Zend\Config\Config;
 
 /**
  * New items controller plugin tests.
@@ -50,7 +50,7 @@ class NewItemsTest extends TestCase
      */
     public function testGetBibIDsFromCatalog()
     {
-        $flash = $this->createMock(\Zend\Mvc\Plugin\FlashMessenger\FlashMessenger::class);
+        $flash = $this->createMock(\Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger::class);
         $config = new Config(['result_pages' => 10]);
         $newItems = new NewItems($config);
         $bibs = $newItems->getBibIDsFromCatalog(
@@ -66,7 +66,7 @@ class NewItemsTest extends TestCase
      */
     public function testGetBibIDsFromCatalogWithIDLimit()
     {
-        $flash = $this->createMock(\Zend\Mvc\Plugin\FlashMessenger\FlashMessenger::class);
+        $flash = $this->createMock(\Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger::class);
         $flash->expects($this->once())->method('addMessage')
             ->with($this->equalTo('too_many_new_items'), $this->equalTo('info'));
         $config = new Config(['result_pages' => 10]);
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/ResultScrollerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/ResultScrollerTest.php
index 05a94763808..f3333869fe2 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/ResultScrollerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/ResultScrollerTest.php
@@ -28,9 +28,9 @@
  */
 namespace VuFindTest\Controller\Plugin;
 
+use Laminas\Session\Container;
 use VuFind\Controller\Plugin\ResultScroller;
 use VuFindTest\Unit\TestCase as TestCase;
-use Zend\Session\Container;
 
 /**
  * ResultScroller controller plugin tests.
@@ -354,7 +354,7 @@ class ResultScrollerTest extends TestCase
         $firstLast = true, $sort = null
     ) {
         $pm = $this->getMockBuilder(\VuFind\Config\PluginManager::class)->disableOriginalConstructor()->getMock();
-        $config = new \Zend\Config\Config(
+        $config = new \Laminas\Config\Config(
             $firstLast ? $this->getFirstLastConfig() : []
         );
         $pm->expects($this->any())->method('get')->will($this->returnValue($config));
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Cover/LoaderTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Cover/LoaderTest.php
index 6cfe340cecd..f1f61ed3721 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Cover/LoaderTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Cover/LoaderTest.php
@@ -27,9 +27,9 @@
  */
 namespace VuFindTest\Cover;
 
+use Laminas\Config\Config;
 use VuFind\Cover\Loader;
 use VuFindTheme\ThemeInfo;
-use Zend\Config\Config;
 
 /**
  * Cover Loader Test Class
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Db/Table/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Db/Table/PluginManagerTest.php
index f61e5725c5d..c1e54081754 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Db/Table/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Db/Table/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Db\\Table\\Gateway');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/DoiLinker/UnpaywallTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/DoiLinker/UnpaywallTest.php
index 536675bb983..faf7deef3b7 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/DoiLinker/UnpaywallTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/DoiLinker/UnpaywallTest.php
@@ -27,9 +27,9 @@
  */
 namespace VuFindTest\DoiLinker;
 
+use Laminas\Http\Client\Adapter\Test as TestAdapter;
+use Laminas\Http\Response as HttpResponse;
 use VuFind\DoiLinker\Unpaywall;
-use Zend\Http\Client\Adapter\Test as TestAdapter;
-use Zend\Http\Response as HttpResponse;
 
 /**
  * Unpaywall Test Class
@@ -52,7 +52,7 @@ class UnpaywallTest extends \VuFindTest\Unit\TestCase
         $this->expectException(\Exception::class);
         $this->expectExceptionMessage('Missing configuration for Unpaywall DOI linker: unpaywall_email');
 
-        new Unpaywall(new \Zend\Config\Config([]));
+        new Unpaywall(new \Laminas\Config\Config([]));
     }
 
     /**
@@ -104,7 +104,7 @@ class UnpaywallTest extends \VuFindTest\Unit\TestCase
         $config = [
             'unpaywall_email' => 'foo@myuniversity.edu',
         ];
-        $unpaywall = new Unpaywall(new \Zend\Config\Config($config));
+        $unpaywall = new Unpaywall(new \Laminas\Config\Config($config));
 
         foreach ($testData as $data) {
             $response = file_get_contents($data['filename']);
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/ExportTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/ExportTest.php
index a4e598765fa..bb0fa18d838 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/ExportTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/ExportTest.php
@@ -27,8 +27,8 @@
  */
 namespace VuFindTest;
 
+use Laminas\Config\Config;
 use VuFind\Export;
-use Zend\Config\Config;
 
 /**
  * Export Support Test Class
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Form/FormTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Form/FormTest.php
index 3f2f0ed64ed..6d9db0e34bb 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Form/FormTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Form/FormTest.php
@@ -50,7 +50,7 @@ class FormTest extends \VuFindTest\Unit\TestCase
     {
         $form = new Form(
             new YamlReader(),
-            $this->createMock(\Zend\View\HelperPluginManager::class)
+            $this->createMock(\Laminas\View\HelperPluginManager::class)
         );
         $this->assertTrue($form->isEnabled());
         $this->assertTrue($form->useCaptcha());
@@ -67,7 +67,7 @@ class FormTest extends \VuFindTest\Unit\TestCase
         );
         $this->assertEquals([[], 'Email/form.phtml'], $form->formatEmailMessage([]));
         $this->assertEquals(
-            'Zend\InputFilter\InputFilter', get_class($form->getInputFilter())
+            'Laminas\InputFilter\InputFilter', get_class($form->getInputFilter())
         );
     }
 
@@ -85,7 +85,7 @@ class FormTest extends \VuFindTest\Unit\TestCase
         ];
         $form = new Form(
             new YamlReader(),
-            $this->createMock(\Zend\View\HelperPluginManager::class),
+            $this->createMock(\Laminas\View\HelperPluginManager::class),
             $defaults
         );
         $this->assertEquals(
@@ -106,7 +106,7 @@ class FormTest extends \VuFindTest\Unit\TestCase
 
         $form = new Form(
             new YamlReader(),
-            $this->createMock(\Zend\View\HelperPluginManager::class)
+            $this->createMock(\Laminas\View\HelperPluginManager::class)
         );
         $form->setFormId('foo');
     }
@@ -120,7 +120,7 @@ class FormTest extends \VuFindTest\Unit\TestCase
     {
         $form = new Form(
             new YamlReader(),
-            $this->createMock(\Zend\View\HelperPluginManager::class)
+            $this->createMock(\Laminas\View\HelperPluginManager::class)
         );
         $form->setFormId('FeedbackSite');
 
@@ -187,7 +187,7 @@ class FormTest extends \VuFindTest\Unit\TestCase
             )
         );
         $this->assertEquals(
-            'Zend\InputFilter\InputFilter', get_class($form->getInputFilter())
+            'Laminas\InputFilter\InputFilter', get_class($form->getInputFilter())
         );
 
         // Validators: Required field problems
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Hierarchy/Driver/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Hierarchy/Driver/PluginManagerTest.php
index 67582a18f9f..e32bacdb1b1 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Hierarchy/Driver/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Hierarchy/Driver/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Hierarchy\\Driver\\AbstractBase');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Hierarchy/TreeDataSource/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Hierarchy/TreeDataSource/PluginManagerTest.php
index 2f773e5309f..efcfd628e28 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Hierarchy/TreeDataSource/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Hierarchy/TreeDataSource/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Hierarchy\\TreeDataSource\\AbstractBase');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Hierarchy/TreeRenderer/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Hierarchy/TreeRenderer/PluginManagerTest.php
index 2db0ec683b4..bf908d7f6ea 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Hierarchy/TreeRenderer/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Hierarchy/TreeRenderer/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Hierarchy\\TreeRenderer\\AbstractBase');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/I18n/Translator/Loader/ExtendedIniTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/I18n/Translator/Loader/ExtendedIniTest.php
index 1aaac442a6e..af66f5fccc7 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/I18n/Translator/Loader/ExtendedIniTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/I18n/Translator/Loader/ExtendedIniTest.php
@@ -160,7 +160,7 @@ class ExtendedIniTest extends \VuFindTest\Unit\TestCase
      */
     public function testMissingPathStack()
     {
-        $this->expectException(\Zend\I18n\Exception\InvalidArgumentException::class);
+        $this->expectException(\Laminas\I18n\Exception\InvalidArgumentException::class);
         $this->expectExceptionMessage('Ini file \'en.ini\' not found');
 
         $loader = new ExtendedIni();
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/DAIATest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/DAIATest.php
index c278d834495..78398a70bbc 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/DAIATest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/DAIATest.php
@@ -30,10 +30,10 @@ namespace VuFindTest\ILS\Driver;
 
 use InvalidArgumentException;
 
-use VuFind\ILS\Driver\DAIA;
-use Zend\Http\Client\Adapter\Test as TestAdapter;
+use Laminas\Http\Client\Adapter\Test as TestAdapter;
+use Laminas\Http\Response as HttpResponse;
 
-use Zend\Http\Response as HttpResponse;
+use VuFind\ILS\Driver\DAIA;
 
 /**
  * ILS driver test
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/DemoTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/DemoTest.php
index e657a9749d8..c74882e46dc 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/DemoTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/DemoTest.php
@@ -54,7 +54,7 @@ class DemoTest extends \VuFindTest\Unit\TestCase
      */
     public function setUp(): void
     {
-        $session = $this->getMockBuilder(\Zend\Session\Container::class)
+        $session = $this->getMockBuilder(\Laminas\Session\Container::class)
             ->disableOriginalConstructor()->getMock();
         $this->driver = new Demo(
             new \VuFind\Date\Converter(), $this->createMock(\VuFindSearch\Service::class),
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/FolioTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/FolioTest.php
index fc7f4d9dc93..600d1530ffb 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/FolioTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/FolioTest.php
@@ -66,12 +66,12 @@ class FolioTest extends \VuFindTest\Unit\TestCase
      * @param array  $params  Parameters object to be sent as data
      * @param array  $headers Additional headers
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function mockMakeRequest($method = "GET", $path = "/", $params = [], $headers = [])
     {
         // Run preRequest
-        $httpHeaders = new \Zend\Http\Headers();
+        $httpHeaders = new \Laminas\Http\Headers();
         $httpHeaders->addHeaders($headers);
         list($httpHeaders, $params) = $this->driver->preRequest($httpHeaders, $params);
         // Log request
@@ -83,7 +83,7 @@ class FolioTest extends \VuFindTest\Unit\TestCase
         ];
         // Create response
         $testResponse = array_shift($this->testResponses);
-        $response = new \Zend\Http\Response();
+        $response = new \Laminas\Http\Response();
         $response->setStatusCode($testResponse['status'] ?? 200);
         $response->setContent($testResponse['body'] ?? '');
         $response->getHeaders()->addHeaders($testResponse['headers'] ?? []);
@@ -113,8 +113,8 @@ class FolioTest extends \VuFindTest\Unit\TestCase
         $this->testRequestLog = [];
         // Session factory
         $factory = function ($namespace) {
-            $manager = new \Zend\Session\SessionManager();
-            return new \Zend\Session\Container("Folio_$namespace", $manager);
+            $manager = new \Laminas\Session\SessionManager();
+            return new \Laminas\Session\Container("Folio_$namespace", $manager);
         };
         // Create a stub for the SomeClass class
         $this->driver = $this->getMockBuilder(\VuFind\ILS\Driver\Folio::class)
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/MultiBackendTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/MultiBackendTest.php
index 534d9a2d688..04c7d3117a3 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/MultiBackendTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/MultiBackendTest.php
@@ -29,8 +29,8 @@
  */
 namespace VuFindTest\ILS\Driver;
 
+use Laminas\Log\Writer\Mock;
 use VuFind\ILS\Driver\MultiBackend;
-use Zend\Log\Writer\Mock;
 
 /**
  * ILS driver test
@@ -80,15 +80,15 @@ class MultiBackendTest extends \VuFindTest\Unit\TestCase
      */
     public function testLogging()
     {
-        $logger = new \Zend\Log\Logger();
-        $writer = new \Zend\Log\Writer\Mock();
+        $logger = new \Laminas\Log\Logger();
+        $writer = new \Laminas\Log\Writer\Mock();
         $logger->addWriter($writer);
 
         $mockPM = $this->createMock(\VuFind\Config\PluginManager::class);
         $mockPM->expects($this->any())
             ->method('get')
             ->will(
-                $this->throwException(new \Zend\Config\Exception\RuntimeException())
+                $this->throwException(new \Laminas\Config\Exception\RuntimeException())
             );
         $driver = new MultiBackend(
             $mockPM, $this->getMockILSAuthenticator(), $this->getMockSM()
@@ -201,12 +201,12 @@ class MultiBackendTest extends \VuFindTest\Unit\TestCase
         $val = $this->callMethod($driver, 'getDriverConfig', ['good']);
         $this->assertEquals($configData, $val);
 
-        $config = new \Zend\Config\Config($configData);
+        $config = new \Laminas\Config\Config($configData);
         $mockPM = $this->createMock(\VuFind\Config\PluginManager::class);
         $mockPM->expects($this->any())
             ->method('get')
             ->will(
-                $this->throwException(new \Zend\Config\Exception\RuntimeException())
+                $this->throwException(new \Laminas\Config\Exception\RuntimeException())
             );
         $driver = new MultiBackend(
             $mockPM, $this->getMockILSAuthenticator(), $this->getMockSM()
@@ -2308,7 +2308,7 @@ class MultiBackendTest extends \VuFindTest\Unit\TestCase
     protected function getPluginManager()
     {
         $configData = ['config' => 'values'];
-        $config = new \Zend\Config\Config($configData);
+        $config = new \Laminas\Config\Config($configData);
         $mockPM = $this->createMock(\VuFind\Config\PluginManager::class);
         $mockPM->expects($this->any())
             ->method('get')
@@ -2368,7 +2368,7 @@ class MultiBackendTest extends \VuFindTest\Unit\TestCase
      */
     protected function getMockDemoDriver($methods)
     {
-        $session = $this->getMockBuilder(\Zend\Session\Container::class)
+        $session = $this->getMockBuilder(\Laminas\Session\Container::class)
             ->disableOriginalConstructor()->getMock();
         return $this->getMockBuilder(__NAMESPACE__ . '\DemoMock')
             ->setMethods($methods)
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/PAIATest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/PAIATest.php
index 1ce1ae16bbd..486db2cbf06 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/PAIATest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/PAIATest.php
@@ -30,10 +30,10 @@ namespace VuFindTest\ILS\Driver;
 
 use InvalidArgumentException;
 
-use VuFind\ILS\Driver\PAIA;
-use Zend\Http\Client\Adapter\Test as TestAdapter;
+use Laminas\Http\Client\Adapter\Test as TestAdapter;
+use Laminas\Http\Response as HttpResponse;
 
-use Zend\Http\Response as HttpResponse;
+use VuFind\ILS\Driver\PAIA;
 
 /**
  * ILS driver test
@@ -135,9 +135,9 @@ class PAIATest extends \VuFindTest\Unit\ILSDriverTestCase
                 'createdate' => '05-23-2016',
                 'duedate' => '',
                 'id' => '',
-                'title' => 'Zend framework in action / Allen, Rob (2009)',
+                'title' => 'Test framework in action / Allen, Rob (2009)',
                 'feeid' => null,
-                'about' => 'Zend framework in action / Allen, Rob (2009)',
+                'about' => 'Test framework in action / Allen, Rob (2009)',
                 'item' => 'http://uri.gbv.de/document/opac-de-830:bar:830$28323471'
             ],
         2 =>
@@ -594,7 +594,7 @@ class PAIATest extends \VuFindTest\Unit\ILSDriverTestCase
         $service = $this->getHttpService($fixture);
         $conn = new PAIA(
             new \VuFind\Date\Converter(),
-            new \Zend\Session\SessionManager()
+            new \Laminas\Session\SessionManager()
         );
         $conn->setHttpService($service);
         return $conn;
@@ -613,7 +613,7 @@ class PAIATest extends \VuFindTest\Unit\ILSDriverTestCase
     {
         $service = $this->getHttpService($fixture);
         $dateConverter = new \VuFind\Date\Converter();
-        $sessionManager = new \Zend\Session\SessionManager();
+        $sessionManager = new \Laminas\Session\SessionManager();
         $conn = $this->getMockBuilder(\VuFind\ILS\Driver\PAIA::class)
             ->setConstructorArgs([$dateConverter, $sessionManager])
             ->setMethods(['getScope'])
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/PluginManagerTest.php
index fdce42d1538..b5ec137362d 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\ILS\\Driver\\DriverInterface');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/SierraRestTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/SierraRestTest.php
index e6312c8f598..bdd5e326329 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/SierraRestTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/SierraRestTest.php
@@ -62,7 +62,7 @@ class SierraRestTest extends \VuFindTest\Unit\ILSDriverTestCase
     public function setUp(): void
     {
         $sessionFactory = function ($namespace) {
-            return new \Zend\Session\Container($namespace);
+            return new \Laminas\Session\Container($namespace);
         };
         $this->driver = new SierraRest(
             new \VuFind\Date\Converter(), $sessionFactory
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Log/LoggerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Log/LoggerTest.php
index 2662a8b5707..05cea73db21 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Log/LoggerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Log/LoggerTest.php
@@ -85,7 +85,7 @@ CONTEXT;
         try {
             throw new \Exception('test');
         } catch (\Exception $e) {
-            $fakeServer = new \Zend\Stdlib\Parameters(
+            $fakeServer = new \Laminas\Stdlib\Parameters(
                 [
                     'REMOTE_ADDR' => '1.2.3.4',
                     'HTTP_USER_AGENT' => 'Fake browser',
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Mailer/MailerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Mailer/MailerTest.php
index a6f71fe332e..f79aba37c17 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Mailer/MailerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Mailer/MailerTest.php
@@ -27,11 +27,11 @@
  */
 namespace VuFindTest\Mailer;
 
+use Laminas\Mail\Address;
+use Laminas\Mail\AddressList;
 use VuFind\Mailer\Factory as MailerFactory;
 use VuFind\Mailer\Mailer;
 use VuFindTest\Container\MockContainer;
-use Zend\Mail\Address;
-use Zend\Mail\AddressList;
 
 /**
  * Mailer Test Class
@@ -51,7 +51,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
      */
     public function testFactoryConfiguration()
     {
-        $config = new \Zend\Config\Config(
+        $config = new \Laminas\Config\Config(
             [
                 'Mail' => [
                     'host' => 'vufindtest.localhost',
@@ -94,7 +94,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
                 && 'body' == $message->getBody()
                 && 'subject' == $message->getSubject();
         };
-        $transport = $this->createMock(\Zend\Mail\Transport\TransportInterface::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\TransportInterface::class);
         $transport->expects($this->once())->method('send')->with($this->callback($callback));
         $mailer = new Mailer($transport);
         $mailer->send('to@example.com', 'from@example.com', 'subject', 'body');
@@ -114,7 +114,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
                 && 'body' == $message->getBody()
                 && 'subject' == $message->getSubject();
         };
-        $transport = $this->createMock(\Zend\Mail\Transport\TransportInterface::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\TransportInterface::class);
         $transport->expects($this->once())->method('send')->with($this->callback($callback));
         $address = new Address('from@example.com', 'Sender TextName');
         $mailer = new Mailer($transport);
@@ -135,7 +135,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
                 && 'body' == $message->getBody()
                 && 'subject' == $message->getSubject();
         };
-        $transport = $this->createMock(\Zend\Mail\Transport\TransportInterface::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\TransportInterface::class);
         $transport->expects($this->once())->method('send')->with($this->callback($callback));
         $address = new Address('to@example.com', 'Recipient TextName');
         $mailer = new Mailer($transport);
@@ -156,7 +156,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
                 && 'body' == $message->getBody()
                 && 'subject' == $message->getSubject();
         };
-        $transport = $this->createMock(\Zend\Mail\Transport\TransportInterface::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\TransportInterface::class);
         $transport->expects($this->once())->method('send')->with($this->callback($callback));
         $list = new AddressList();
         $list->add(new Address('to@example.com', 'Recipient TextName'));
@@ -179,7 +179,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
                 && 'body' == $message->getBody()
                 && 'subject' == $message->getSubject();
         };
-        $transport = $this->createMock(\Zend\Mail\Transport\TransportInterface::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\TransportInterface::class);
         $transport->expects($this->once())->method('send')->with($this->callback($callback));
         $address = new Address('me@example.com');
         $mailer = new Mailer($transport);
@@ -202,7 +202,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
                 && 'body' == $message->getBody()
                 && 'subject' == $message->getSubject();
         };
-        $transport = $this->createMock(\Zend\Mail\Transport\TransportInterface::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\TransportInterface::class);
         $transport->expects($this->once())->method('send')->with($this->callback($callback));
         $address = new Address('me@example.com');
         $mailer = new Mailer($transport);
@@ -225,7 +225,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
                 && 'body' == $message->getBody()
                 && 'subject' == $message->getSubject();
         };
-        $transport = $this->createMock(\Zend\Mail\Transport\TransportInterface::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\TransportInterface::class);
         $transport->expects($this->once())->method('send')->with($this->callback($callback));
         $address = new Address('me@example.com');
         $mailer = new Mailer($transport);
@@ -243,7 +243,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
         $this->expectException(\VuFind\Exception\Mail::class);
         $this->expectExceptionMessage('Invalid Recipient Email Address');
 
-        $transport = $this->createMock(\Zend\Mail\Transport\TransportInterface::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\TransportInterface::class);
         $mailer = new Mailer($transport);
         $mailer->send('bad@bad', 'from@example.com', 'subject', 'body');
     }
@@ -258,7 +258,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
         $this->expectException(\VuFind\Exception\Mail::class);
         $this->expectExceptionMessage('Invalid Reply-To Email Address');
 
-        $transport = $this->createMock(\Zend\Mail\Transport\TransportInterface::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\TransportInterface::class);
         $mailer = new Mailer($transport);
         $mailer->send(
             'good@good.com', 'from@example.com', 'subject', 'body', null, 'bad@bad'
@@ -275,7 +275,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
         $this->expectException(\VuFind\Exception\Mail::class);
         $this->expectExceptionMessage('Invalid Recipient Email Address');
 
-        $transport = $this->createMock(\Zend\Mail\Transport\TransportInterface::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\TransportInterface::class);
         $mailer = new Mailer($transport);
         $mailer->send('', 'from@example.com', 'subject', 'body');
     }
@@ -290,7 +290,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
         $this->expectException(\VuFind\Exception\Mail::class);
         $this->expectExceptionMessage('Too Many Email Recipients');
 
-        $transport = $this->createMock(\Zend\Mail\Transport\TransportInterface::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\TransportInterface::class);
         $mailer = new Mailer($transport);
         $mailer->send('one@test.com;two@test.com', 'from@example.com', 'subject', 'body');
     }
@@ -305,7 +305,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
         $this->expectException(\VuFind\Exception\Mail::class);
         $this->expectExceptionMessage('Invalid Sender Email Address');
 
-        $transport = $this->createMock(\Zend\Mail\Transport\TransportInterface::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\TransportInterface::class);
         $mailer = new Mailer($transport);
         $mailer->send('to@example.com', 'bad@bad', 'subject', 'body');
     }
@@ -320,7 +320,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
         $this->expectException(\VuFind\Exception\Mail::class);
         $this->expectExceptionMessage('Invalid Sender Email Address');
 
-        $transport = $this->createMock(\Zend\Mail\Transport\TransportInterface::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\TransportInterface::class);
         $mailer = new Mailer($transport);
         $mailer->send('to@example.com', new Address('bad@bad'), 'subject', 'body');
     }
@@ -335,7 +335,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
         $this->expectException(\VuFind\Exception\Mail::class);
         $this->expectExceptionMessage('Boom');
 
-        $transport = $this->createMock(\Zend\Mail\Transport\TransportInterface::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\TransportInterface::class);
         $transport->expects($this->once())->method('send')->will($this->throwException(new \Exception('Boom')));
         $mailer = new Mailer($transport);
         $mailer->send('to@example.com', 'from@example.com', 'subject', 'body');
@@ -370,7 +370,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
                 && 'body' == $message->getBody()
                 && 'Library Catalog Search Result' == $message->getSubject();
         };
-        $transport = $this->createMock(\Zend\Mail\Transport\TransportInterface::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\TransportInterface::class);
         $transport->expects($this->once())->method('send')->with($this->callback($callback));
         $mailer = new Mailer($transport);
         $mailer->setMaxRecipients(2);
@@ -408,7 +408,7 @@ class MailerTest extends \VuFindTest\Unit\TestCase
                 && 'body' == $message->getBody()
                 && 'Library Catalog Record: breadcrumb' == $message->getSubject();
         };
-        $transport = $this->createMock(\Zend\Mail\Transport\TransportInterface::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\TransportInterface::class);
         $transport->expects($this->once())->method('send')->with($this->callback($callback));
         $mailer = new Mailer($transport);
         $mailer->sendRecord('to@example.com', 'from@example.com', 'message', $driver, $view);
@@ -421,14 +421,14 @@ class MailerTest extends \VuFindTest\Unit\TestCase
      */
     public function testResetConnection()
     {
-        $transport = $this->createMock(\Zend\Mail\Transport\Smtp::class);
+        $transport = $this->createMock(\Laminas\Mail\Transport\Smtp::class);
         $transport->expects($this->once())->method('disconnect');
         $mailer = new Mailer($transport);
         $mailer->resetConnection();
     }
 }
 
-class MockEmailRenderer extends \Zend\View\Renderer\PhpRenderer
+class MockEmailRenderer extends \Laminas\View\Renderer\PhpRenderer
 {
     public function partial($template, $driver)
     {
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/OAI/ServerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/OAI/ServerTest.php
index 03192ed6a1d..97321280845 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/OAI/ServerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/OAI/ServerTest.php
@@ -74,7 +74,7 @@ class ServerTest extends \VuFindTest\Unit\TestCase
             $this->getMockResultsManager(),
             $this->getMockRecordLoader(),
             $this->getMockTableManager(),
-            new \Zend\Config\Config($config),
+            new \Laminas\Config\Config($config),
             $baseURL,
             $params
         );
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/QRCode/LoaderTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/QRCode/LoaderTest.php
index 043d113e278..ef696dbc7dd 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/QRCode/LoaderTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/QRCode/LoaderTest.php
@@ -27,9 +27,9 @@
  */
 namespace VuFindTest\QRCode;
 
+use Laminas\Config\Config;
 use VuFind\QRCode\Loader;
 use VuFindTheme\ThemeInfo;
-use Zend\Config\Config;
 
 /**
  * QR Code Loader Test Class
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/CollectionSideFacetsTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/CollectionSideFacetsTest.php
index 5e11d90f71c..ccf3f4b7b64 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/CollectionSideFacetsTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/CollectionSideFacetsTest.php
@@ -60,7 +60,7 @@ class CollectionSideFacetsTest extends \VuFindTest\Unit\TestCase
      * @param \VuFind\Config\PluginManager                $configLoader config loader
      * @param \VuFind\Search\Solr\Results                 $results      results object
      * @param string                                      $settings     settings
-     * @param \Zend\StdLib\Parameters                     $request      request
+     * @param \Laminas\Stdlib\Parameters                     $request      request
      * @param \VuFind\Search\Solr\HierarchicalFacetHelper $facetHelper  hierarchical facet helper (true to build default, null to omit)
      *
      * @return SideFacets
@@ -77,7 +77,7 @@ class CollectionSideFacetsTest extends \VuFindTest\Unit\TestCase
             $facetHelper = new \VuFind\Search\Solr\HierarchicalFacetHelper();
         }
         if (null === $request) {
-            $request = new \Zend\StdLib\Parameters([]);
+            $request = new \Laminas\Stdlib\Parameters([]);
         }
         $sf = new CollectionSideFacets($configLoader, $facetHelper);
         $sf->setConfig($settings);
@@ -99,7 +99,7 @@ class CollectionSideFacetsTest extends \VuFindTest\Unit\TestCase
         $loader = $this->getMockBuilder(\VuFind\Config\PluginManager::class)
             ->disableOriginalConstructor()->getMock();
         $loader->expects($this->once())->method('get')->with($this->equalTo($key))
-            ->will($this->returnValue(new \Zend\Config\Config($config)));
+            ->will($this->returnValue(new \Laminas\Config\Config($config)));
         return $loader;
     }
 
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/EuropeanaResultsTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/EuropeanaResultsTest.php
index 851ed35cc20..ec925a6867b 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/EuropeanaResultsTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/EuropeanaResultsTest.php
@@ -28,10 +28,10 @@
  */
 namespace VuFindTest\Recommend;
 
+use Laminas\Http\Client\Adapter\Test as TestAdapter;
 use VuFind\Recommend\EuropeanaResults;
 use VuFindHttp\HttpService;
 use VuFindTest\Unit\TestCase as TestCase;
-use Zend\Http\Client\Adapter\Test as TestAdapter;
 
 /**
  * EuropeanaResults tests.
@@ -47,7 +47,7 @@ class EuropeanaResultsTest extends TestCase
     /**
      * Test that the module properly parses a sample response.
      *
-     * This is a bare minimum test to confirm that Zend\Feed deals with the RSS
+     * This is a bare minimum test to confirm that Laminas\Feed deals with the RSS
      * response correctly. More work should be done to confirm that URL generation
      * works appropriately, optional configuration parameters are respected, etc.
      *
@@ -59,7 +59,7 @@ class EuropeanaResultsTest extends TestCase
         $europeana->setHttpService($this->getHttpService());
         $europeana->setConfig(''); // use defaults
         $results = $this->getMockResults();
-        $query = new \Zend\StdLib\Parameters(['lookfor' => 'test']);
+        $query = new \Laminas\Stdlib\Parameters(['lookfor' => 'test']);
         $europeana->init($results->getParams(), $query);
         $europeana->process($results);
         $this->assertEquals(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/ExpandFacetsTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/ExpandFacetsTest.php
index f0cb075ee5e..2929f7a3473 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/ExpandFacetsTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/ExpandFacetsTest.php
@@ -81,7 +81,7 @@ class ExpandFacetsTest extends \VuFindTest\Unit\TestCase
      * @param \VuFind\Search\Solr\Results  $results      populated results object
      * @param \VuFind\Search\Solr\Results  $emptyResults empty results object
      * @param string                       $settings     settings
-     * @param \Zend\StdLib\Parameters      $request      request
+     * @param \Laminas\Stdlib\Parameters      $request      request
      *
      * @return ExpandFacets
      */
@@ -97,7 +97,7 @@ class ExpandFacetsTest extends \VuFindTest\Unit\TestCase
             $emptyResults = $this->getMockResults();
         }
         if (null === $request) {
-            $request = new \Zend\StdLib\Parameters([]);
+            $request = new \Laminas\Stdlib\Parameters([]);
         }
         $sf = new ExpandFacets($configLoader, $emptyResults);
         $sf->setConfig($settings);
@@ -119,7 +119,7 @@ class ExpandFacetsTest extends \VuFindTest\Unit\TestCase
         $loader = $this->getMockBuilder(\VuFind\Config\PluginManager::class)
             ->disableOriginalConstructor()->getMock();
         $loader->expects($this->once())->method('get')->with($this->equalTo($key))
-            ->will($this->returnValue(new \Zend\Config\Config($config)));
+            ->will($this->returnValue(new \Laminas\Config\Config($config)));
         return $loader;
     }
 
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/ExternalSearchTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/ExternalSearchTest.php
index 092f7a97242..1284928cee3 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/ExternalSearchTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/ExternalSearchTest.php
@@ -54,7 +54,7 @@ class ExternalSearchTest extends \VuFindTest\Unit\TestCase
     {
         $rec = new ExternalSearch();
         $rec->setConfig($label . ':' . $template);
-        $params = new \Zend\StdLib\Parameters();
+        $params = new \Laminas\Stdlib\Parameters();
         $params->set('lookfor', $lookfor);
         $rec->init(
             $this->createMock(\VuFind\Search\Solr\Params::class),
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/FacetCloudTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/FacetCloudTest.php
index 8b8fe791c78..ac4948e80c2 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/FacetCloudTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/FacetCloudTest.php
@@ -61,7 +61,7 @@ class FacetCloudTest extends \VuFindTest\Unit\TestCase
      * @param \VuFind\Search\Solr\Results  $results      populated results object
      * @param \VuFind\Search\Solr\Results  $emptyResults empty results object
      * @param string                       $settings     settings
-     * @param \Zend\StdLib\Parameters      $request      request
+     * @param \Laminas\Stdlib\Parameters      $request      request
      *
      * @return FacetCloud
      */
@@ -77,7 +77,7 @@ class FacetCloudTest extends \VuFindTest\Unit\TestCase
             $emptyResults = $this->getMockResults();
         }
         if (null === $request) {
-            $request = new \Zend\StdLib\Parameters([]);
+            $request = new \Laminas\Stdlib\Parameters([]);
         }
         $fc = new FacetCloud($configLoader, $emptyResults);
         $fc->setConfig($settings);
@@ -99,7 +99,7 @@ class FacetCloudTest extends \VuFindTest\Unit\TestCase
         $loader = $this->getMockBuilder(\VuFind\Config\PluginManager::class)
             ->disableOriginalConstructor()->getMock();
         $loader->expects($this->once())->method('get')->with($this->equalTo($key))
-            ->will($this->returnValue(new \Zend\Config\Config($config)));
+            ->will($this->returnValue(new \Laminas\Config\Config($config)));
         return $loader;
     }
 
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/FavoriteFacetsTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/FavoriteFacetsTest.php
index 6e3e95391f3..8c9225a4b32 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/FavoriteFacetsTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/FavoriteFacetsTest.php
@@ -72,7 +72,7 @@ class FavoriteFacetsTest extends \VuFindTest\Unit\TestCase
      * @param \VuFind\Search\Solr\Results                 $results      results object
      * @param string                                      $tagSetting   Are tags enabled?
      * @param string                                      $settings     settings
-     * @param \Zend\StdLib\Parameters                     $request      request
+     * @param \Laminas\Stdlib\Parameters                     $request      request
      * @param \VuFind\Search\Solr\HierarchicalFacetHelper $facetHelper  hierarchical facet helper (true to build default, null to omit)
      * @param \VuFind\Config\PluginManager                $configLoader config loader
      *
@@ -90,7 +90,7 @@ class FavoriteFacetsTest extends \VuFindTest\Unit\TestCase
             $facetHelper = new \VuFind\Search\Solr\HierarchicalFacetHelper();
         }
         if (null === $request) {
-            $request = new \Zend\StdLib\Parameters([]);
+            $request = new \Laminas\Stdlib\Parameters([]);
         }
         $sf = new FavoriteFacets($configLoader, $facetHelper, $tagSetting);
         $sf->setConfig($settings);
@@ -112,7 +112,7 @@ class FavoriteFacetsTest extends \VuFindTest\Unit\TestCase
         $loader = $this->getMockBuilder(\VuFind\Config\PluginManager::class)
             ->disableOriginalConstructor()->getMock();
         $loader->expects($this->any())->method('get')->with($this->equalTo($key))
-            ->will($this->returnValue(new \Zend\Config\Config($config)));
+            ->will($this->returnValue(new \Laminas\Config\Config($config)));
         return $loader;
     }
 
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/PluginManagerTest.php
index 4a6aa309a26..ba7fac5f9b6 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Recommend\\RecommendInterface');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/RandomRecommendTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/RandomRecommendTest.php
index 22f1e3726e4..42a41ebd5b8 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/RandomRecommendTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/RandomRecommendTest.php
@@ -131,7 +131,7 @@ class RandomRecommendTest extends TestCase
             ->get(\VuFind\Search\Params\PluginManager::class)->get('Solr');
         $query = $this->getFixture('query');
         $params->setBasicSearch($query->getString(), $query->getHandler());
-        $request = $this->createMock(\Zend\StdLib\Parameters::class);
+        $request = $this->createMock(\Laminas\Stdlib\Parameters::class);
 
         $service->expects($this->once())->method('random')
             ->with(
@@ -169,7 +169,7 @@ class RandomRecommendTest extends TestCase
             ->get(\VuFind\Search\Params\PluginManager::class)->get('Solr');
         $query = $this->getFixture('query');
         $params->setBasicSearch($query->getString(), $query->getHandler());
-        $request = $this->createMock(\Zend\StdLib\Parameters::class);
+        $request = $this->createMock(\Laminas\Stdlib\Parameters::class);
 
         $service->expects($this->once())->method('random')
             ->with($this->equalTo("Solr"))
@@ -197,7 +197,7 @@ class RandomRecommendTest extends TestCase
         $params = $results->getParams();
         $query = $this->getFixture('query');
         $params->setBasicSearch($query->getString(), $query->getHandler());
-        $request = $this->createMock(\Zend\StdLib\Parameters::class);
+        $request = $this->createMock(\Laminas\Stdlib\Parameters::class);
 
         $results = $this->createMock(\VuFindSearch\Response\RecordCollectionInterface::class);
         $results->expects($this->once())->method('getRecords')
@@ -235,7 +235,7 @@ class RandomRecommendTest extends TestCase
         $params = $results->getParams();
         $query = $this->getFixture('query');
         $params->setBasicSearch($query->getString(), $query->getHandler());
-        $request = $this->createMock(\Zend\StdLib\Parameters::class);
+        $request = $this->createMock(\Laminas\Stdlib\Parameters::class);
 
         $results = $this->createMock(\VuFindSearch\Response\RecordCollectionInterface::class);
         $results->expects($this->once())->method('getRecords')
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/RecommendLinksTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/RecommendLinksTest.php
index f514247bedb..cd30d89a506 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/RecommendLinksTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/RecommendLinksTest.php
@@ -64,7 +64,7 @@ class RecommendLinksTest extends \VuFindTest\Unit\TestCase
         $rec->setConfig($config);
         $rec->init(
             $this->createMock(\VuFind\Search\Solr\Params::class),
-            new \Zend\StdLib\Parameters()
+            new \Laminas\Stdlib\Parameters()
         );
         $rec->process(
             $this->createMock(\VuFind\Search\Solr\Results::class)
@@ -101,7 +101,7 @@ class RecommendLinksTest extends \VuFindTest\Unit\TestCase
      */
     protected function getConfigManager($section, $ini)
     {
-        $config = new \Zend\Config\Config([$section => $this->sampleLinks]);
+        $config = new \Laminas\Config\Config([$section => $this->sampleLinks]);
         $mock = $this->getMockBuilder(\VuFind\Config\PluginManager::class)
             ->disableOriginalConstructor()
             ->setMethods(['get'])
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/SideFacetsTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/SideFacetsTest.php
index 35ed152a115..b341c8c179d 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/SideFacetsTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/SideFacetsTest.php
@@ -260,7 +260,7 @@ class SideFacetsTest extends \VuFindTest\Unit\TestCase
      * @param \VuFind\Config\PluginManager                $configLoader config loader
      * @param \VuFind\Search\Solr\Results                 $results      results object
      * @param string                                      $settings     settings
-     * @param \Zend\StdLib\Parameters                     $request      request
+     * @param \Laminas\Stdlib\Parameters                     $request      request
      * @param \VuFind\Search\Solr\HierarchicalFacetHelper $facetHelper  hierarchical facet helper (true to build default, null to omit)
      *
      * @return SideFacets
@@ -277,7 +277,7 @@ class SideFacetsTest extends \VuFindTest\Unit\TestCase
             $facetHelper = new \VuFind\Search\Solr\HierarchicalFacetHelper();
         }
         if (null === $request) {
-            $request = new \Zend\StdLib\Parameters([]);
+            $request = new \Laminas\Stdlib\Parameters([]);
         }
         $sf = new SideFacets($configLoader, $facetHelper);
         $sf->setConfig($settings);
@@ -299,7 +299,7 @@ class SideFacetsTest extends \VuFindTest\Unit\TestCase
         $loader = $this->getMockBuilder(\VuFind\Config\PluginManager::class)
             ->disableOriginalConstructor()->getMock();
         $loader->expects($this->once())->method('get')->with($this->equalTo($key))
-            ->will($this->returnValue(new \Zend\Config\Config($config)));
+            ->will($this->returnValue(new \Laminas\Config\Config($config)));
         return $loader;
     }
 
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/SwitchQueryTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/SwitchQueryTest.php
index 019657b6f41..0a7832ac110 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/SwitchQueryTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Recommend/SwitchQueryTest.php
@@ -196,7 +196,7 @@ class SwitchQueryTest extends \VuFindTest\Unit\TestCase
         }
         $sq = new SwitchQuery($bm);
         $sq->setConfig($settings);
-        $sq->init($results->getParams(), new \Zend\StdLib\Parameters([]));
+        $sq->init($results->getParams(), new \Laminas\Stdlib\Parameters([]));
         $sq->process($results);
         return $sq;
     }
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Record/CacheTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Record/CacheTest.php
index ddc0686f64d..bf9a08e9167 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Record/CacheTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Record/CacheTest.php
@@ -205,7 +205,7 @@ class CacheTest extends TestCase
     /**
      * Create configuration
      *
-     * @return \Zend\Config\Config
+     * @return \Laminas\Config\Config
      */
     protected function getConfig()
     {
@@ -222,7 +222,7 @@ class CacheTest extends TestCase
             ],
         ];
 
-        $config = new \Zend\Config\Config($configArr);
+        $config = new \Laminas\Config\Config($configArr);
 
         return $config;
     }
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Record/RouterTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Record/RouterTest.php
index accb462fa82..70828d0baea 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Record/RouterTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Record/RouterTest.php
@@ -28,10 +28,10 @@
  */
 namespace VuFindTest\Record;
 
+use Laminas\Config\Config;
 use VuFind\Record\Router;
 use VuFind\RecordDriver\AbstractBase as RecordDriver;
 use VuFindTest\Unit\TestCase as TestCase;
-use Zend\Config\Config;
 
 /**
  * Record router tests.
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/DefaultRecordTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/DefaultRecordTest.php
index 06a655e8230..f38ffa8366d 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/DefaultRecordTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/DefaultRecordTest.php
@@ -28,9 +28,9 @@
  */
 namespace VuFindTest\RecordDriver;
 
+use Laminas\Config\Config;
 use VuFind\RecordDriver\DefaultRecord;
 use VuFind\RecordDriver\Response\PublicationDetails;
-use Zend\Config\Config;
 
 /**
  * DefaultRecord Record Driver Test Class
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/PluginManagerTest.php
index 7fc032c97b4..dca067a2ee7 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\RecordDriver\\AbstractBase');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/SolrDefaultTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/SolrDefaultTest.php
index adc1f6ff9ec..6c341a8e376 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/SolrDefaultTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/SolrDefaultTest.php
@@ -211,7 +211,7 @@ XML;
             true
         );
 
-        $record = new SolrDefault(null, null, new \Zend\Config\Config($searchConfig));
+        $record = new SolrDefault(null, null, new \Laminas\Config\Config($searchConfig));
         $record->setRawData($overrides + $fixture['response']['docs'][0]);
         return $record;
     }
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/SolrMarcTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/SolrMarcTest.php
index 471e108c182..a8cc52a85f7 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/SolrMarcTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/SolrMarcTest.php
@@ -54,7 +54,7 @@ class SolrMarcTest extends \VuFindTest\Unit\TestCase
     public function testBug1()
     {
         $configArr = ['Record' => ['marc_links' => '760,765,770,772,774,773,775,777,780,785']];
-        $config = new \Zend\Config\Config($configArr);
+        $config = new \Laminas\Config\Config($configArr);
         $record = new \VuFind\RecordDriver\SolrMarc($config);
         $fixture = $this->loadRecordFixture('testbug1.json');
         $record->setRawData($fixture['response']['docs'][0]);
@@ -100,7 +100,7 @@ class SolrMarcTest extends \VuFindTest\Unit\TestCase
      */
     public function testSubjectHeadings()
     {
-        $config = new \Zend\Config\Config([]);
+        $config = new \Laminas\Config\Config([]);
         $record = new \VuFind\RecordDriver\SolrMarc($config);
         $fixture = $this->loadRecordFixture('testbug1.json');
         $record->setRawData($fixture['response']['docs'][0]);
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/RecordTab/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/RecordTab/PluginManagerTest.php
index 8d7acb7659e..acd53a180fe 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/RecordTab/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/RecordTab/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\RecordTab\\TabInterface');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/RecordTab/TabManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/RecordTab/TabManagerTest.php
index 8da93fedeee..2970e040091 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/RecordTab/TabManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/RecordTab/TabManagerTest.php
@@ -106,7 +106,7 @@ class TabManagerTest extends \VuFindTest\Unit\TestCase
      */
     protected function getMockConfigManager()
     {
-        $iniConfig = new \Zend\Config\Config(
+        $iniConfig = new \Laminas\Config\Config(
             [
                 'VuFind\RecordDriver\EDS' => [
                     'tabs' => [
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Related/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Related/PluginManagerTest.php
index 391a388ac5e..bf39bd4b7f0 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Related/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Related/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Related\\RelatedInterface');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/AlmaTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/AlmaTest.php
index 3a51447d738..636ac0f0c18 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/AlmaTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/AlmaTest.php
@@ -32,10 +32,10 @@ namespace VuFindTest\Resolver\Driver;
 
 use InvalidArgumentException;
 
-use VuFind\Resolver\Driver\Alma;
-use Zend\Http\Client\Adapter\Test as TestAdapter;
+use Laminas\Http\Client\Adapter\Test as TestAdapter;
+use Laminas\Http\Response as HttpResponse;
 
-use Zend\Http\Response as HttpResponse;
+use VuFind\Resolver\Driver\Alma;
 
 /**
  * Alma resolver driver test
@@ -187,7 +187,7 @@ class AlmaTest extends \VuFindTest\Unit\TestCase
         }
         $_SERVER['REMOTE_ADDR'] = "127.0.0.1";
 
-        $client = new \Zend\Http\Client();
+        $client = new \Laminas\Http\Client();
         $client->setAdapter($adapter);
 
         $conn = new Alma($this->openUrlConfig['OpenURL']['url'], $client);
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/EzbTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/EzbTest.php
index d2ac85651ba..79a0fe13646 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/EzbTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/EzbTest.php
@@ -30,10 +30,10 @@ namespace VuFindTest\Resolver\Driver;
 
 use InvalidArgumentException;
 
-use VuFind\Resolver\Driver\Ezb;
-use Zend\Http\Client\Adapter\Test as TestAdapter;
+use Laminas\Http\Client\Adapter\Test as TestAdapter;
+use Laminas\Http\Response as HttpResponse;
 
-use Zend\Http\Response as HttpResponse;
+use VuFind\Resolver\Driver\Ezb;
 
 /**
  * Ezb resolver driver test
@@ -160,7 +160,7 @@ class EzbTest extends \VuFindTest\Unit\TestCase
         }
         $_SERVER['REMOTE_ADDR'] = "127.0.0.1";
 
-        $client = new \Zend\Http\Client();
+        $client = new \Laminas\Http\Client();
         $client->setAdapter($adapter);
 
         $conn = new Ezb($this->openUrlConfig['OpenURL']['url'], $client);
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/PluginManagerTest.php
index 9958062223e..52fbe7f9231 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Resolver\\Driver\\DriverInterface');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/RediTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/RediTest.php
index 7a65693ad6e..820c9a28ac5 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/RediTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Resolver/Driver/RediTest.php
@@ -30,10 +30,10 @@ namespace VuFindTest\Resolver\Driver;
 
 use InvalidArgumentException;
 
-use VuFind\Resolver\Driver\Redi;
-use Zend\Http\Client\Adapter\Test as TestAdapter;
+use Laminas\Http\Client\Adapter\Test as TestAdapter;
+use Laminas\Http\Response as HttpResponse;
 
-use Zend\Http\Response as HttpResponse;
+use VuFind\Resolver\Driver\Redi;
 
 /**
  * Redi resolver driver test
@@ -130,7 +130,7 @@ class RediTest extends \VuFindTest\Unit\TestCase
             $responseObj = HttpResponse::fromString($response);
             $adapter->setResponse($responseObj);
         }
-        $client = new \Zend\Http\Client();
+        $client = new \Laminas\Http\Client();
         $client->setAdapter($adapter);
 
         $conn = new Redi($this->openUrlConfig['OpenURL']['url'], $client);
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Role/PermissionProvider/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Role/PermissionProvider/PluginManagerTest.php
index 6820dbe1ba5..1b27211c555 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Role/PermissionProvider/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Role/PermissionProvider/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Role\\PermissionProvider\\PermissionProviderInterface');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Role/PermissionProvider/ServerParamTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Role/PermissionProvider/ServerParamTest.php
index e16a476718a..f6f21f1ab26 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Role/PermissionProvider/ServerParamTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Role/PermissionProvider/ServerParamTest.php
@@ -221,8 +221,8 @@ class ServerParamTest extends \VuFindTest\Unit\TestCase
      */
     protected function checkServerParams($headers, $options, $expectedResult)
     {
-        $request = new \Zend\Http\PhpEnvironment\Request();
-        $request->setServer(new \Zend\Stdlib\Parameters($headers));
+        $request = new \Laminas\Http\PhpEnvironment\Request();
+        $request->setServer(new \Laminas\Stdlib\Parameters($headers));
         $header = new ServerParam($request);
         $result = $header->getPermissions($options);
         $this->assertEquals($result, $expectedResult);
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Role/PermissionProvider/ShibbolethTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Role/PermissionProvider/ShibbolethTest.php
index 7e1d337f421..b738fa044a8 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Role/PermissionProvider/ShibbolethTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Role/PermissionProvider/ShibbolethTest.php
@@ -99,9 +99,9 @@ class ShibbolethTest extends \VuFindTest\Unit\TestCase
     protected function checkShibboleth($headers, $options, $expectedResult,
         $config = []
     ) {
-        $request = new \Zend\Http\PhpEnvironment\Request();
-        $request->setServer(new \Zend\Stdlib\Parameters($headers));
-        $shibboleth = new Shibboleth($request, new \Zend\Config\Config($config));
+        $request = new \Laminas\Http\PhpEnvironment\Request();
+        $request->setServer(new \Laminas\Stdlib\Parameters($headers));
+        $shibboleth = new Shibboleth($request, new \Laminas\Config\Config($config));
         $result = $shibboleth->getPermissions($options);
         $this->assertEquals($result, $expectedResult);
     }
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/SMS/ClickatellTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/SMS/ClickatellTest.php
index 7d6d0a0208f..ee5fffedd77 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/SMS/ClickatellTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/SMS/ClickatellTest.php
@@ -76,7 +76,7 @@ class ClickatellTest extends \VuFindTest\Unit\TestCase
     {
         $client = $this->getMockClient();
         $expectedUri = 'https://api.clickatell.com/http/sendmsg?api_id=api_id&user=user&password=password&to=1234567890&text=hello';
-        $response = new \Zend\Http\Response();
+        $response = new \Laminas\Http\Response();
         $response->setStatusCode(200);
         $response->setContent('ID:fake');
         $client->expects($this->once())->method('setMethod')->with($this->equalTo('GET'))->will($this->returnValue($client));
@@ -100,7 +100,7 @@ class ClickatellTest extends \VuFindTest\Unit\TestCase
 
         $client = $this->getMockClient();
         $expectedUri = 'https://api.clickatell.com/http/sendmsg?api_id=api_id&user=user&password=password&to=1234567890&text=hello';
-        $response = new \Zend\Http\Response();
+        $response = new \Laminas\Http\Response();
         $response->setStatusCode(200);
         $response->setContent('badbadbad');
         $client->expects($this->once())->method('setMethod')->with($this->equalTo('GET'))->will($this->returnValue($client));
@@ -122,7 +122,7 @@ class ClickatellTest extends \VuFindTest\Unit\TestCase
 
         $client = $this->getMockClient();
         $expectedUri = 'https://api.clickatell.com/http/sendmsg?api_id=api_id&user=user&password=password&to=1234567890&text=hello';
-        $response = new \Zend\Http\Response();
+        $response = new \Laminas\Http\Response();
         $response->setStatusCode(404);
         $client->expects($this->once())->method('setMethod')->with($this->equalTo('GET'))->will($this->returnValue($client));
         $client->expects($this->once())->method('setUri')->with($this->equalTo($expectedUri))->will($this->returnValue($client));
@@ -153,7 +153,7 @@ class ClickatellTest extends \VuFindTest\Unit\TestCase
     /**
      * Build a test object
      *
-     * @param \Zend\Http\Client $client HTTP client (null for default)
+     * @param \Laminas\Http\Client $client HTTP client (null for default)
      * @param array             $config Configuration (null for default)
      *
      * @return Clickatell
@@ -167,7 +167,7 @@ class ClickatellTest extends \VuFindTest\Unit\TestCase
             $client = $this->getMockClient();
         }
         return new Clickatell(
-            new \Zend\Config\Config($config),
+            new \Laminas\Config\Config($config),
             ['client' => $client]
         );
     }
@@ -191,10 +191,10 @@ class ClickatellTest extends \VuFindTest\Unit\TestCase
     /**
      * Get a mock HTTP client
      *
-     * @return \Zend\Http\Client
+     * @return \Laminas\Http\Client
      */
     protected function getMockClient()
     {
-        return $this->createMock(\Zend\Http\Client::class);
+        return $this->createMock(\Laminas\Http\Client::class);
     }
 }
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/BackendManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/BackendManagerTest.php
index f45f9547966..50f329b37ed 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/BackendManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/BackendManagerTest.php
@@ -28,10 +28,10 @@
  */
 namespace VuFindTest\Search;
 
+use Laminas\EventManager\SharedEventManager;
 use VuFind\Search\BackendManager;
-use VuFindTest\Unit\TestCase as TestCase;
 
-use Zend\EventManager\SharedEventManager;
+use VuFindTest\Unit\TestCase as TestCase;
 
 /**
  * BackendManager unit tests.
@@ -54,7 +54,7 @@ class BackendManagerTest extends TestCase
         $this->expectException(\UnexpectedValueException::class);
         $this->expectExceptionMessage('Expected backend registry to return object');
 
-        $registry = $this->getMockForAbstractClass('Zend\ServiceManager\ServiceLocatorInterface');
+        $registry = $this->getMockForAbstractClass(\Laminas\ServiceManager\ServiceLocatorInterface::class);
         $registry->expects($this->once())
             ->method('get')
             ->will($this->returnValue('not-an-object'));
@@ -72,7 +72,7 @@ class BackendManagerTest extends TestCase
         $this->expectException(\UnexpectedValueException::class);
         $this->expectExceptionMessage('does not implement the expected interface');
 
-        $registry = $this->getMockForAbstractClass('Zend\ServiceManager\ServiceLocatorInterface');
+        $registry = $this->getMockForAbstractClass(\Laminas\ServiceManager\ServiceLocatorInterface::class);
         $registry->expects($this->once())
             ->method('get')
             ->will($this->returnValue($this));
@@ -87,7 +87,7 @@ class BackendManagerTest extends TestCase
      */
     public function testAttachDetachShared()
     {
-        $registry = $this->getMockForAbstractClass('Zend\ServiceManager\ServiceLocatorInterface');
+        $registry = $this->getMockForAbstractClass(\Laminas\ServiceManager\ServiceLocatorInterface::class);
         $events   = new SharedEventManager();
         $manager  = new BackendManager($registry);
         $manager->attachShared($events);
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/HistoryTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/HistoryTest.php
index f8eaa45234f..b0338b157cb 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/HistoryTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/HistoryTest.php
@@ -61,7 +61,7 @@ class HistoryTest extends TestCase
      */
     public function testExplicitlyDisabledScheduleOptions()
     {
-        $config = new \Zend\Config\Config(
+        $config = new \Laminas\Config\Config(
             [
                 'Account' => [
                     'schedule_searches' => false,
@@ -80,7 +80,7 @@ class HistoryTest extends TestCase
      */
     public function testDefaultScheduleOptions()
     {
-        $config = new \Zend\Config\Config(
+        $config = new \Laminas\Config\Config(
             [
                 'Account' => [
                     'schedule_searches' => true,
@@ -115,12 +115,12 @@ class HistoryTest extends TestCase
      *
      * @param \VuFind\Db\Table\Search              $searchTable    Search table
      * @param \VuFind\Search\Results\PluginManager $resultsManager Results manager
-     * @param \Zend\Config\Config                  $config         Configuration
+     * @param \Laminas\Config\Config                  $config         Configuration
      *
      * @return History
      */
     protected function getHistory($searchTable = null,
-        $resultsManager = null, \Zend\Config\Config $config = null
+        $resultsManager = null, \Laminas\Config\Config $config = null
     ) {
         return new History(
             $searchTable ?: $this->getMockBuilder(\VuFind\Db\Table\Search::class)
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/MemoryTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/MemoryTest.php
index e360068fa1e..e1b86831cf2 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/MemoryTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/MemoryTest.php
@@ -28,9 +28,9 @@
  */
 namespace VuFindTest\Search;
 
+use Laminas\Session\Container;
 use VuFind\Search\Memory;
 use VuFindTest\Unit\TestCase as TestCase;
-use Zend\Session\Container;
 
 /**
  * Memory unit tests.
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Options/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Options/PluginManagerTest.php
index df70c7b3b3f..ff2977c3ea6 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Options/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Options/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Search\\Base\\Options');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Params/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Params/PluginManagerTest.php
index 6a366750bc9..c8f4637d64a 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Params/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Params/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Search\\Base\\Params');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Primo/OnCampusListenerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Primo/OnCampusListenerTest.php
index c65adb3c154..196f8e429ed 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Primo/OnCampusListenerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Primo/OnCampusListenerTest.php
@@ -28,13 +28,13 @@
  */
 namespace VuFindTest\Search\Primo;
 
+use Laminas\EventManager\Event;
 use VuFind\Search\Primo\InjectOnCampusListener;
 use VuFindSearch\Backend\Primo\Backend;
-use VuFindSearch\Backend\Primo\Connector;
 
+use VuFindSearch\Backend\Primo\Connector;
 use VuFindSearch\ParamBag;
 use VuFindTest\Unit\TestCase;
-use Zend\EventManager\Event;
 
 /**
  * Unit tests for OnCampus listener.
@@ -73,7 +73,7 @@ class OnCampusListenerTest extends TestCase
     public function testAttach()
     {
         $listener = new InjectOnCampusListener();
-        $mock = $this->createMock(\Zend\EventManager\SharedEventManagerInterface::class);
+        $mock = $this->createMock(\Laminas\EventManager\SharedEventManagerInterface::class);
         $mock->expects($this->once())->method('attach')->with(
             $this->equalTo('VuFind\Search'),
             $this->equalTo('pre'),
@@ -93,7 +93,7 @@ class OnCampusListenerTest extends TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $listener = new InjectOnCampusListener($mockPermController);
-        $mock = $this->createMock(\Zend\EventManager\SharedEventManagerInterface::class);
+        $mock = $this->createMock(\Laminas\EventManager\SharedEventManagerInterface::class);
         $mock->expects($this->once())->method('attach')->with(
             $this->equalTo('VuFind\Search'),
             $this->equalTo('pre'),
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Primo/PrimoPermissionHandlerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Primo/PrimoPermissionHandlerTest.php
index 099ea7df6af..5336c3017e1 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Primo/PrimoPermissionHandlerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Primo/PrimoPermissionHandlerTest.php
@@ -166,10 +166,10 @@ class PrimoPermissionHandlerTest extends TestCase
      *
      * @return void
      */
-    public function testWithoutAuthorizationServiceWithZendConfigObject()
+    public function testWithoutAuthorizationServiceWithLaminasConfigObject()
     {
         $handler = new PrimoPermissionHandler(
-            new \Zend\Config\Config($this->primoConfig)
+            new \Laminas\Config\Config($this->primoConfig)
         );
         $this->assertEquals(false, $handler->hasPermission());
     }
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/QueryAdapterTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/QueryAdapterTest.php
index ecaf3401bc5..8d9cc083fa7 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/QueryAdapterTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/QueryAdapterTest.php
@@ -115,7 +115,7 @@ class QueryAdapterTest extends TestCase
      */
     public function testEmptyRequest()
     {
-        $req = new \Zend\Stdlib\Parameters([]);
+        $req = new \Laminas\Stdlib\Parameters([]);
         $this->assertEquals(new Query(), QueryAdapter::fromRequest($req, 'AllFields'));
     }
 
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Results/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Results/PluginManagerTest.php
index 9a75700d5a3..2920e162cdb 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Results/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Results/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Search\\Base\\Results');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/SearchTabsHelperTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/SearchTabsHelperTest.php
index 1b19096ba3e..bba918fd5b6 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/SearchTabsHelperTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/SearchTabsHelperTest.php
@@ -208,7 +208,7 @@ class SearchTabsHelperTest extends TestCase
     protected function getSearchTabsHelper($config = 'default_unfiltered',
         $filters = null
     ) {
-        $mockRequest = $this->createMock(\Zend\Http\Request::class);
+        $mockRequest = $this->createMock(\Laminas\Http\Request::class);
         $mockRequest->expects($this->any())
             ->method('getQuery')
             ->with($this->equalTo('hiddenFilters'))
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/ConditionalFilterListenerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/ConditionalFilterListenerTest.php
index c96f63e20b7..6ddec0d11b5 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/ConditionalFilterListenerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/ConditionalFilterListenerTest.php
@@ -28,14 +28,14 @@
  */
 namespace VuFindTest\Search\Solr;
 
+use Laminas\EventManager\Event;
 use VuFind\Search\Solr\InjectConditionalFilterListener;
 use VuFindSearch\Backend\Solr\Backend;
 use VuFindSearch\Backend\Solr\Connector;
-use VuFindSearch\Backend\Solr\HandlerMap;
 
+use VuFindSearch\Backend\Solr\HandlerMap;
 use VuFindSearch\ParamBag;
 use VuFindTest\Unit\TestCase;
-use Zend\EventManager\Event;
 
 /**
  * Unit tests for Conditional Filter listener.
@@ -92,7 +92,7 @@ class ConditionalFilterListenerTest extends TestCase
     public function testAttach()
     {
         $listener = new InjectConditionalFilterListener(self::$emptySearchConfig);
-        $mock = $this->createMock(\Zend\EventManager\SharedEventManagerInterface::class);
+        $mock = $this->createMock(\Laminas\EventManager\SharedEventManagerInterface::class);
         $mock->expects($this->once())->method('attach')->with(
             $this->equalTo('VuFind\Search'),
             $this->equalTo('pre'),
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/FilterFieldConversionListenerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/FilterFieldConversionListenerTest.php
index 880319e6adb..f2be6f3148e 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/FilterFieldConversionListenerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/FilterFieldConversionListenerTest.php
@@ -28,11 +28,11 @@
  */
 namespace VuFindTest\Search\Solr;
 
-use VuFind\Search\Solr\FilterFieldConversionListener;
+use Laminas\EventManager\Event;
 
+use VuFind\Search\Solr\FilterFieldConversionListener;
 use VuFindSearch\ParamBag;
 use VuFindTest\Unit\TestCase;
-use Zend\EventManager\Event;
 
 /**
  * Unit tests for FilterFieldConversionListener.
@@ -53,7 +53,7 @@ class FilterFieldConversionListenerTest extends TestCase
     public function testAttach()
     {
         $listener = new FilterFieldConversionListener(['foo' => 'bar']);
-        $mock = $this->createMock(\Zend\EventManager\SharedEventManagerInterface::class);
+        $mock = $this->createMock(\Laminas\EventManager\SharedEventManagerInterface::class);
         $mock->expects($this->once())->method('attach')->with(
             $this->equalTo('VuFind\Search'),
             $this->equalTo('pre'),
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/HideFacetValueListenerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/HideFacetValueListenerTest.php
index a058e327914..0e6f8cb1c5a 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/HideFacetValueListenerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/HideFacetValueListenerTest.php
@@ -28,10 +28,10 @@
  */
 namespace VuFindTest\Search\Solr;
 
+use Laminas\EventManager\Event;
 use VuFind\Search\Solr\HideFacetValueListener;
 use VuFindSearch\Backend\Solr\Response\Json\Facets;
 use VuFindTest\Unit\TestCase;
-use Zend\EventManager\Event;
 
 /**
  * Unit tests for Hide Facet Value Listener.
@@ -120,7 +120,7 @@ class HideFacetValueListenerTest extends TestCase
     public function testAttach()
     {
         $listener = $this->getListener();
-        $mock = $this->createMock(\Zend\EventManager\SharedEventManagerInterface::class);
+        $mock = $this->createMock(\Laminas\EventManager\SharedEventManagerInterface::class);
         $mock->expects($this->once())->method('attach')->with(
             $this->equalTo('VuFind\Search'),
             $this->equalTo('post'),
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/MultiIndexListenerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/MultiIndexListenerTest.php
index d374ac20576..d473a182537 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/MultiIndexListenerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/MultiIndexListenerTest.php
@@ -28,14 +28,14 @@
  */
 namespace VuFindTest\Search\Solr;
 
+use Laminas\EventManager\Event;
 use VuFind\Search\Solr\MultiIndexListener;
 use VuFindSearch\Backend\Solr\Backend;
 use VuFindSearch\Backend\Solr\Connector;
-use VuFindSearch\Backend\Solr\HandlerMap;
 
+use VuFindSearch\Backend\Solr\HandlerMap;
 use VuFindSearch\ParamBag;
 use VuFindTest\Unit\TestCase;
-use Zend\EventManager\Event;
 
 /**
  * Unit tests for multiindex listener.
@@ -182,7 +182,7 @@ class MultiIndexListenerTest extends TestCase
      */
     public function testAttach()
     {
-        $mock = $this->createMock(\Zend\EventManager\SharedEventManagerInterface::class);
+        $mock = $this->createMock(\Laminas\EventManager\SharedEventManagerInterface::class);
         $mock->expects($this->once())->method('attach')->with(
             $this->equalTo('VuFind\Search'),
             $this->equalTo('pre'),
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/SpellingProcessorTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/SpellingProcessorTest.php
index 091bd8a2311..091efc63312 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/SpellingProcessorTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/SpellingProcessorTest.php
@@ -28,9 +28,9 @@
  */
 namespace VuFindTest\Search\Solr;
 
+use Laminas\Config\Config;
 use VuFind\Search\Solr\SpellingProcessor;
 use VuFindTest\Unit\TestCase;
-use Zend\Config\Config;
 
 /**
  * Unit tests for spelling processor.
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/V3/ErrorListenerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/V3/ErrorListenerTest.php
index be889939638..29350c546c1 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/V3/ErrorListenerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/V3/ErrorListenerTest.php
@@ -28,16 +28,16 @@
  */
 namespace VuFindTest\Search\Solr\V3;
 
-use PHPUnit\Framework\TestCase;
+use Laminas\EventManager\Event;
+
+use Laminas\Http\Response;
 
+use PHPUnit\Framework\TestCase;
 use RuntimeException;
 
 use VuFind\Search\Solr\V3\ErrorListener;
-use VuFindSearch\Backend\Exception\HttpErrorException;
-
-use Zend\EventManager\Event;
 
-use Zend\Http\Response;
+use VuFindSearch\Backend\Exception\HttpErrorException;
 
 /**
  * Unit tests for SOLR 3.x error listener.
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/V4/ErrorListenerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/V4/ErrorListenerTest.php
index 32ccb0f284a..e4ce4aed287 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/V4/ErrorListenerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/V4/ErrorListenerTest.php
@@ -28,16 +28,16 @@
  */
 namespace VuFindTest\Search\Solr\V4;
 
-use PHPUnit\Framework\TestCase;
+use Laminas\EventManager\Event;
+
+use Laminas\Http\Response;
 
+use PHPUnit\Framework\TestCase;
 use RuntimeException;
 
 use VuFind\Search\Solr\V4\ErrorListener;
-use VuFindSearch\Backend\Exception\HttpErrorException;
-
-use Zend\EventManager\Event;
 
-use Zend\Http\Response;
+use VuFindSearch\Backend\Exception\HttpErrorException;
 
 /**
  * Unit tests for SOLR 3.x error listener.
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Session/DatabaseTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Session/DatabaseTest.php
index ae02e611566..d06a474c112 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Session/DatabaseTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Session/DatabaseTest.php
@@ -66,7 +66,7 @@ class DatabaseTest extends \VuFindTest\Unit\SessionHandlerTestCase
     public function testReadWithNonDefaultLifetime()
     {
         $handler = $this->getHandler(
-            new \Zend\Config\Config(['lifetime' => 1000])
+            new \Laminas\Config\Config(['lifetime' => 1000])
         );
         $session = $this->getMockSessionTable();
         $session->expects($this->once())->method('readSession')
@@ -133,7 +133,7 @@ class DatabaseTest extends \VuFindTest\Unit\SessionHandlerTestCase
     /**
      * Get the session handler to test.
      *
-     * @param \Zend\Config\Config $config Optional configuration
+     * @param \Laminas\Config\Config $config Optional configuration
      *
      * @return Database
      */
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Session/FileTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Session/FileTest.php
index e17248ca85b..7f9434c4c0a 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Session/FileTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Session/FileTest.php
@@ -126,14 +126,14 @@ class FileTest extends \VuFindTest\Unit\SessionHandlerTestCase
     /**
      * Get the session handler to test.
      *
-     * @param \Zend\Config\Config $config Optional configuration
+     * @param \Laminas\Config\Config $config Optional configuration
      *
      * @return Database
      */
     protected function getHandler($config = null)
     {
         if (null === $config) {
-            $config = new \Zend\Config\Config(
+            $config = new \Laminas\Config\Config(
                 ['file_save_path' => $this->path]
             );
         }
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Session/MemcacheTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Session/MemcacheTest.php
index b996ced0894..8212159510b 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Session/MemcacheTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Session/MemcacheTest.php
@@ -109,7 +109,7 @@ class MemcacheTest extends \VuFindTest\Unit\SessionHandlerTestCase
                 $this->equalTo(0),
                 $this->equalTo(1000)
             )->will($this->returnValue(true));
-        $config = new \Zend\Config\Config(
+        $config = new \Laminas\Config\Config(
             [
                 'lifetime' => 1000,
                 'memcache_host' => 'myhost',
@@ -145,8 +145,8 @@ class MemcacheTest extends \VuFindTest\Unit\SessionHandlerTestCase
     /**
      * Get the session handler to test.
      *
-     * @param \Zend\Config\Config $config Optional configuration
-     * @param \Memcache           $client Optional client object
+     * @param \Laminas\Config\Config $config Optional configuration
+     * @param \Memcache              $client Optional client object
      *
      * @return Database
      */
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Session/PluginManagerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Session/PluginManagerTest.php
index a19eff2f028..9d42ac6bd39 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Session/PluginManagerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Session/PluginManagerTest.php
@@ -60,7 +60,7 @@ class PluginManagerTest extends \VuFindTest\Unit\TestCase
      */
     public function testExpectedInterface()
     {
-        $this->expectException(\Zend\ServiceManager\Exception\InvalidServiceException::class);
+        $this->expectException(\Laminas\ServiceManager\Exception\InvalidServiceException::class);
         $this->expectExceptionMessage('Plugin ArrayObject does not belong to VuFind\\Session\\HandlerInterface');
 
         $pm = new PluginManager(
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Session/RedisTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Session/RedisTest.php
index f3849a2aee1..d521c377a15 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Session/RedisTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Session/RedisTest.php
@@ -110,7 +110,7 @@ class RedisTest extends \VuFindTest\Unit\SessionHandlerTestCase
         $client->expects($this->once())->method('unlink')
             ->with($this->equalTo('vufind_sessions/foo'))
             ->will($this->returnValue(1));
-        $config = new \Zend\Config\Config(
+        $config = new \Laminas\Config\Config(
             ['redis_version' => 4]
         );
         $handler = $this->getHandler($client, $config);
@@ -122,8 +122,8 @@ class RedisTest extends \VuFindTest\Unit\SessionHandlerTestCase
     /**
      * Get the session handler to test.
      *
-     * @param \Credis_Client      $client Client object
-     * @param \Zend\Config\Config $config Optional configuration
+     * @param \Credis_Client         $client Client object
+     * @param \Laminas\Config\Config $config Optional configuration
      *
      * @return Database
      */
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Solr/WriterTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Solr/WriterTest.php
index ddb96bee852..40341026205 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Solr/WriterTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Solr/WriterTest.php
@@ -133,7 +133,7 @@ class WriterTest extends \VuFindTest\Unit\TestCase
      */
     protected function getBackendManagerWithMockSolr()
     {
-        $sm = new \Zend\ServiceManager\ServiceManager();
+        $sm = new \Laminas\ServiceManager\ServiceManager();
         $pm = new BackendManager($sm);
         $mockBackend = $this->getMockBuilder(\VuFindSearch\Backend\Solr\Backend::class)
             ->disableOriginalConstructor()
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/UrlShortener/DatabaseTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/UrlShortener/DatabaseTest.php
index 48079e59320..6fef65a0abd 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/UrlShortener/DatabaseTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/UrlShortener/DatabaseTest.php
@@ -28,13 +28,13 @@
 namespace VuFindTest\UrlShortener;
 
 use Exception;
+use Laminas\Db\Adapter\Adapter;
+use Laminas\Db\Adapter\Driver\ConnectionInterface;
+use Laminas\Db\Adapter\Driver\DriverInterface;
+use Laminas\Db\ResultSet;
 use PHPUnit\Framework\TestCase;
 use VuFind\Db\Table\Shortlinks;
 use VuFind\UrlShortener\Database;
-use Zend\Db\Adapter\Adapter;
-use Zend\Db\Adapter\Driver\ConnectionInterface;
-use Zend\Db\Adapter\Driver\DriverInterface;
-use Zend\Db\ResultSet;
 
 /**
  * "Database" URL shortener test.
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Validator/CsrfTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Validator/CsrfTest.php
index 8c68d3ed90b..e34b0683a0b 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Validator/CsrfTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Validator/CsrfTest.php
@@ -27,8 +27,8 @@
  */
 namespace VuFindTest\Validator;
 
+use Laminas\Session\Container;
 use VuFind\Validator\Csrf;
-use Zend\Session\Container;
 
 /**
  * CSRF Test Class
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/LinkifyTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/LinkifyTest.php
index 084fb29b3e3..d3ecf8858b7 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/LinkifyTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/LinkifyTest.php
@@ -27,10 +27,10 @@
  */
 namespace VuFindTest\View\Helper\Root;
 
+use Laminas\View\Helper\EscapeHtml;
+use Laminas\View\Helper\EscapeHtmlAttr;
 use VuFind\View\Helper\Root\Linkify;
 use VuFind\View\Helper\Root\ProxyUrl;
-use Zend\View\Helper\EscapeHtml;
-use Zend\View\Helper\EscapeHtmlAttr;
 
 /**
  * Linkify Test Class
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/MetadataTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/MetadataTest.php
index 62b714f89c6..9b347e412f6 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/MetadataTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/MetadataTest.php
@@ -27,12 +27,12 @@
  */
 namespace VuFindTest\View\Helper\Root;
 
+use Laminas\Config\Config;
+use Laminas\View\Helper\HeadMeta;
 use VuFind\MetadataVocabulary\PluginManager;
 use VuFind\MetadataVocabulary\PRISM;
 use VuFind\View\Helper\Root\Metadata;
 use VuFindTest\RecordDriver\TestHarness;
-use Zend\Config\Config;
-use Zend\View\Helper\HeadMeta;
 
 /**
  * Metadata Test Class
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/OpenUrlTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/OpenUrlTest.php
index 20debbc83eb..ebc256be7fe 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/OpenUrlTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/OpenUrlTest.php
@@ -28,8 +28,8 @@
  */
 namespace VuFindTest\View\Helper\Root;
 
+use Laminas\Config\Config;
 use VuFind\View\Helper\Root\OpenUrl;
-use Zend\Config\Config;
 
 /**
  * OpenUrl Test Class
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/PermissionTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/PermissionTest.php
index 89e99502ca5..6b4e5007e41 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/PermissionTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/PermissionTest.php
@@ -104,7 +104,7 @@ class PermissionTest  extends \VuFindTest\Unit\ViewHelperTestCase
      */
     public function testTemplateDisplay()
     {
-        $this->expectException(\Zend\View\Exception\RuntimeException::class);
+        $this->expectException(\Laminas\View\Exception\RuntimeException::class);
 
         // Template does not exist, expect an exception, though
         $mockPmd = $this->getMockPmd(
@@ -200,11 +200,11 @@ class PermissionTest  extends \VuFindTest\Unit\ViewHelperTestCase
     /**
      * Return a view object populated for these test cases.
      *
-     * @return \Zend\View\Renderer\PhpRenderer
+     * @return \Laminas\View\Renderer\PhpRenderer
      */
     protected function getMockView()
     {
-        $escapehtml = new \Zend\View\Helper\EscapeHtml();
+        $escapehtml = new \Laminas\View\Helper\EscapeHtml();
         $translate = new \VuFind\View\Helper\Root\Translate();
         $transEsc = new \VuFind\View\Helper\Root\TransEsc();
         $context = new \VuFind\View\Helper\Root\Context();
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordDataFormatterTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordDataFormatterTest.php
index 98c3676a86f..ce3011dd63c 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordDataFormatterTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordDataFormatterTest.php
@@ -149,10 +149,10 @@ class RecordDataFormatterTest extends \VuFindTest\Unit\ViewHelperTestCase
         $view = $this->getPhpRenderer($helpers);
 
         // Mock out the router to avoid errors:
-        $match = new \Zend\Router\RouteMatch([]);
+        $match = new \Laminas\Router\RouteMatch([]);
         $match->setMatchedRouteName('foo');
         $view->plugin('url')
-            ->setRouter($this->createMock(\Zend\Router\RouteStackInterface::class))
+            ->setRouter($this->createMock(\Laminas\Router\RouteStackInterface::class))
             ->setRouteMatch($match);
 
         // Inject the view object into all of the helpers:
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordLinkTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordLinkTest.php
index 7fa28a5237d..819fa24b99f 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordLinkTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordLinkTest.php
@@ -27,9 +27,9 @@
  */
 namespace VuFindTest\View\Helper\Root;
 
+use Laminas\Config\Config;
 use VuFind\Record\Router;
 use VuFind\View\Helper\Root\RecordLink;
-use Zend\Config\Config;
 
 /**
  * RecordLink view helper Test Class
@@ -73,7 +73,7 @@ class RecordLinkTest extends \PHPUnit\Framework\TestCase
      */
     protected function getRecordLink()
     {
-        $view = $this->getMockBuilder(\Zend\View\Renderer\PhpRenderer::class)
+        $view = $this->getMockBuilder(\Laminas\View\Renderer\PhpRenderer::class)
             ->disableOriginalConstructor()
             ->setMethods(['plugin'])
             ->getMock();
@@ -92,17 +92,17 @@ class RecordLinkTest extends \PHPUnit\Framework\TestCase
      */
     protected function getUrl()
     {
-        $request = $this->getMockBuilder(\Zend\Http\PhpEnvironment\Request::class)
+        $request = $this->getMockBuilder(\Laminas\Http\PhpEnvironment\Request::class)
             ->setMethods(['getQuery'])->getMock();
         $request->expects($this->any())->method('getQuery')
-            ->will($this->returnValue(new \Zend\StdLib\Parameters()));
+            ->will($this->returnValue(new \Laminas\Stdlib\Parameters()));
 
         $url = new \VuFind\View\Helper\Root\Url($request);
 
         // Create router
-        $router = new \Zend\Router\Http\TreeRouteStack();
-        $router->setRequestUri(new \Zend\Uri\Http('http://localhost'));
-        $recordRoute = new \Zend\Router\Http\Segment(
+        $router = new \Laminas\Router\Http\TreeRouteStack();
+        $router->setRequestUri(new \Laminas\Uri\Http('http://localhost'));
+        $recordRoute = new \Laminas\Router\Http\Segment(
             '/Record/[:id[/[:tab]]]',
             [
                 'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordTest.php
index 8daf2b14155..a22447dda52 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordTest.php
@@ -27,8 +27,8 @@
  */
 namespace VuFindTest\View\Helper\Root;
 
+use Laminas\View\Exception\RuntimeException;
 use VuFind\View\Helper\Root\Record;
-use Zend\View\Exception\RuntimeException;
 
 /**
  * Record view helper Test Class
@@ -48,7 +48,7 @@ class RecordTest extends \PHPUnit\Framework\TestCase
      */
     public function testMissingTemplate()
     {
-        $this->expectException(\Zend\View\Exception\RuntimeException::class);
+        $this->expectException(\Laminas\View\Exception\RuntimeException::class);
         $this->expectExceptionMessage('Cannot find RecordDriver/AbstractBase/core.phtml template for class: VuFind\\RecordDriver\\SolrMarc');
 
         $record = $this->getRecord($this->loadRecordFixture('testbug1.json'));
@@ -221,7 +221,7 @@ class RecordTest extends \PHPUnit\Framework\TestCase
     public function testGetPreviews()
     {
         $driver = $this->loadRecordFixture('testbug1.json');
-        $config = new \Zend\Config\Config(['foo' => 'bar']);
+        $config = new \Laminas\Config\Config(['foo' => 'bar']);
         $context = $this->getMockContext();
         $context->expects($this->exactly(2))->method('apply')
             ->with($this->equalTo(compact('driver', 'config')))
@@ -499,7 +499,7 @@ class RecordTest extends \PHPUnit\Framework\TestCase
         if (null === $context) {
             $context = $this->getMockContext();
         }
-        $view = $this->getMockBuilder(\Zend\View\Renderer\PhpRenderer::class)
+        $view = $this->getMockBuilder(\Laminas\View\Renderer\PhpRenderer::class)
             ->disableOriginalConstructor()
             ->setMethods(['render', 'plugin', 'resolver'])
             ->getMock();
@@ -522,7 +522,7 @@ class RecordTest extends \PHPUnit\Framework\TestCase
 
         $view->expects($this->any())->method('resolver')
             ->will($this->returnValue($this->getMockResolver()));
-        $config = is_array($config) ? new \Zend\Config\Config($config) : $config;
+        $config = is_array($config) ? new \Laminas\Config\Config($config) : $config;
         $record = new Record($config);
         $record->setCoverRouter(new \VuFind\Cover\Router('http://foo/bar'));
         $record->setView($view);
@@ -536,7 +536,7 @@ class RecordTest extends \PHPUnit\Framework\TestCase
      */
     protected function getMockResolver()
     {
-        return $this->createMock(\Zend\View\Resolver\ResolverInterface::class);
+        return $this->createMock(\Laminas\View\Resolver\ResolverInterface::class);
     }
 
     /**
@@ -557,11 +557,11 @@ class RecordTest extends \PHPUnit\Framework\TestCase
      *
      * @param string $expectedRoute Route expected by mock helper
      *
-     * @return \Zend\View\Helper\Url
+     * @return \Laminas\View\Helper\Url
      */
     protected function getMockUrl($expectedRoute)
     {
-        $url = $this->createMock(\Zend\View\Helper\Url::class);
+        $url = $this->createMock(\Laminas\View\Helper\Url::class);
         $url->expects($this->once())->method('__invoke')
             ->with($this->equalTo($expectedRoute))
             ->will($this->returnValue('http://foo/bar'));
@@ -573,11 +573,11 @@ class RecordTest extends \PHPUnit\Framework\TestCase
      *
      * @param string $expectedRoute Route expected by mock helper
      *
-     * @return \Zend\View\Helper\ServerUrl
+     * @return \Laminas\View\Helper\ServerUrl
      */
     protected function getMockServerUrl()
     {
-        $url = $this->createMock(\Zend\View\Helper\ServerUrl::class);
+        $url = $this->createMock(\Laminas\View\Helper\ServerUrl::class);
         $url->expects($this->once())->method('__invoke')
             ->will($this->returnValue('http://server-foo/baz'));
         return $url;
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/SafeMoneyFormatTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/SafeMoneyFormatTest.php
index ca18f1f57e9..eebb1cea17b 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/SafeMoneyFormatTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/SafeMoneyFormatTest.php
@@ -80,8 +80,8 @@ class SafeMoneyFormatTest extends \PHPUnit\Framework\TestCase
      */
     public function testFormatting()
     {
-        $escaper = new \Zend\View\Helper\EscapeHtml();
-        $view = $this->createMock(\Zend\View\Renderer\PhpRenderer::class);
+        $escaper = new \Laminas\View\Helper\EscapeHtml();
+        $view = $this->createMock(\Laminas\View\Renderer\PhpRenderer::class);
         $view->expects($this->any())->method('plugin')
             ->with($this->equalTo('escapeHtml'))
             ->will($this->returnValue($escaper));
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/TranslateTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/TranslateTest.php
index 93c6cc96624..3a42c737dca 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/TranslateTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/TranslateTest.php
@@ -242,7 +242,7 @@ class TranslateTest extends \PHPUnit\Framework\TestCase
     public function testLocaleWithTranslator()
     {
         $translate = new Translate();
-        $translator = $this->createMock(\Zend\I18n\Translator\Translator::class);
+        $translator = $this->createMock(\Laminas\I18n\Translator\Translator::class);
         $translator->expects($this->once())->method('getLocale')
             ->will($this->returnValue('foo'));
         $translate->setTranslator($translator);
@@ -257,7 +257,7 @@ class TranslateTest extends \PHPUnit\Framework\TestCase
     public function testGetTranslator()
     {
         $translate = new Translate();
-        $translator = $this->createMock(\Zend\I18n\Translator\TranslatorInterface::class);
+        $translator = $this->createMock(\Laminas\I18n\Translator\TranslatorInterface::class);
         $translate->setTranslator($translator);
         $this->assertEquals($translator, $translate->getTranslator());
     }
@@ -267,14 +267,14 @@ class TranslateTest extends \PHPUnit\Framework\TestCase
      *
      * @param array $translations Key => value translation map.
      *
-     * @return \Zend\I18n\Translator\TranslatorInterface
+     * @return \Laminas\I18n\Translator\TranslatorInterface
      */
     protected function getMockTranslator($translations)
     {
         $callback = function ($str, $domain) use ($translations) {
             return $translations[$domain][$str] ?? $str;
         };
-        $translator = $this->createMock(\Zend\I18n\Translator\TranslatorInterface::class);
+        $translator = $this->createMock(\Laminas\I18n\Translator\TranslatorInterface::class);
         $translator->expects($this->any())->method('translate')
             ->will($this->returnCallback($callback));
         return $translator;
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/XSLT/Import/VuFindTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/XSLT/Import/VuFindTest.php
index 2757350182f..c2f3b3a6a51 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/XSLT/Import/VuFindTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/XSLT/Import/VuFindTest.php
@@ -63,7 +63,7 @@ class VuFindTest extends \VuFindTest\Unit\DbTestCase
     {
         VuFind::setServiceLocator($this->getServiceManager());
         $this->assertEquals(
-            \Zend\Config\Config::class, get_class(VuFind::getConfig())
+            \Laminas\Config\Config::class, get_class(VuFind::getConfig())
         );
     }
 
diff --git a/module/VuFindAdmin/Module.php b/module/VuFindAdmin/Module.php
index e93b241e933..3287e9d18d7 100644
--- a/module/VuFindAdmin/Module.php
+++ b/module/VuFindAdmin/Module.php
@@ -56,7 +56,7 @@ class Module
     public function getAutoloaderConfig()
     {
         return [
-            'Zend\Loader\StandardAutoloader' => [
+            'Laminas\Loader\StandardAutoloader' => [
                 'namespaces' => [
                     __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                 ],
diff --git a/module/VuFindAdmin/config/module.config.php b/module/VuFindAdmin/config/module.config.php
index e874986086b..a0a30f60e31 100644
--- a/module/VuFindAdmin/config/module.config.php
+++ b/module/VuFindAdmin/config/module.config.php
@@ -24,7 +24,7 @@ $config = [
     'router' => [
         'routes' => [
             'admin' => [
-                'type' => 'Zend\Router\Http\Literal',
+                'type' => 'Laminas\Router\Http\Literal',
                 'options' => [
                     'route'    => '/Admin',
                     'defaults' => [
@@ -35,7 +35,7 @@ $config = [
                 'may_terminate' => true,
                 'child_routes' => [
                     'disabled' => [
-                        'type' => 'Zend\Router\Http\Literal',
+                        'type' => 'Laminas\Router\Http\Literal',
                         'options' => [
                             'route'    => '/Disabled',
                             'defaults' => [
@@ -45,7 +45,7 @@ $config = [
                         ]
                     ],
                     'config' => [
-                        'type' => 'Zend\Router\Http\Segment',
+                        'type' => 'Laminas\Router\Http\Segment',
                         'options' => [
                             'route'    => '/Config[/:action]',
                             'defaults' => [
@@ -55,7 +55,7 @@ $config = [
                         ]
                     ],
                     'maintenance' => [
-                        'type' => 'Zend\Router\Http\Segment',
+                        'type' => 'Laminas\Router\Http\Segment',
                         'options' => [
                             'route'    => '/Maintenance[/:action]',
                             'defaults' => [
@@ -65,7 +65,7 @@ $config = [
                         ]
                     ],
                     'social' => [
-                        'type' => 'Zend\Router\Http\Segment',
+                        'type' => 'Laminas\Router\Http\Segment',
                         'options' => [
                             'route'    => '/Social[/:action]',
                             'defaults' => [
@@ -75,7 +75,7 @@ $config = [
                         ]
                     ],
                     'tags' => [
-                        'type' => 'Zend\Router\Http\Segment',
+                        'type' => 'Laminas\Router\Http\Segment',
                         'options' => [
                             'route'    => '/Tags[/:action]',
                             'defaults' => [
@@ -85,7 +85,7 @@ $config = [
                         ]
                     ],
                     'overdrive' => [
-                        'type' => 'Zend\Router\Http\Segment',
+                        'type' => 'Laminas\Router\Http\Segment',
                         'options' => [
                             'route'    => '/Overdrive',
                             'defaults' => [
diff --git a/module/VuFindAdmin/src/VuFindAdmin/Controller/AbstractAdmin.php b/module/VuFindAdmin/src/VuFindAdmin/Controller/AbstractAdmin.php
index 1e156a18646..9f3dd1f5ebd 100644
--- a/module/VuFindAdmin/src/VuFindAdmin/Controller/AbstractAdmin.php
+++ b/module/VuFindAdmin/src/VuFindAdmin/Controller/AbstractAdmin.php
@@ -27,8 +27,8 @@
  */
 namespace VuFindAdmin\Controller;
 
-use Zend\Mvc\MvcEvent;
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\Mvc\MvcEvent;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * VuFind Admin Controller Base
@@ -75,7 +75,7 @@ class AbstractAdmin extends \VuFind\Controller\AbstractBase
         $config = $this->getConfig();
         if (!isset($config->Site->admin_enabled) || !$config->Site->admin_enabled) {
             $pluginManager  = $this->serviceLocator
-                ->get(\Zend\Mvc\Controller\PluginManager::class);
+                ->get(\Laminas\Mvc\Controller\PluginManager::class);
             $redirectPlugin = $pluginManager->get('redirect');
             return $redirectPlugin->toRoute('admin/disabled');
         }
@@ -87,7 +87,7 @@ class AbstractAdmin extends \VuFind\Controller\AbstractBase
     /**
      * Display disabled message.
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function disabledAction()
     {
diff --git a/module/VuFindAdmin/src/VuFindAdmin/Controller/AdminController.php b/module/VuFindAdmin/src/VuFindAdmin/Controller/AdminController.php
index 161f248055a..dc2deac3deb 100644
--- a/module/VuFindAdmin/src/VuFindAdmin/Controller/AdminController.php
+++ b/module/VuFindAdmin/src/VuFindAdmin/Controller/AdminController.php
@@ -41,7 +41,7 @@ class AdminController extends AbstractAdmin
     /**
      * Display disabled message.
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function disabledAction()
     {
@@ -51,7 +51,7 @@ class AdminController extends AbstractAdmin
     /**
      * Admin home.
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function homeAction()
     {
diff --git a/module/VuFindAdmin/src/VuFindAdmin/Controller/ConfigController.php b/module/VuFindAdmin/src/VuFindAdmin/Controller/ConfigController.php
index 17a5f45a79e..3fb82b5b803 100644
--- a/module/VuFindAdmin/src/VuFindAdmin/Controller/ConfigController.php
+++ b/module/VuFindAdmin/src/VuFindAdmin/Controller/ConfigController.php
@@ -41,7 +41,7 @@ class ConfigController extends AbstractAdmin
     /**
      * Configuration management
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function homeAction()
     {
diff --git a/module/VuFindAdmin/src/VuFindAdmin/Controller/MaintenanceController.php b/module/VuFindAdmin/src/VuFindAdmin/Controller/MaintenanceController.php
index 178d3163097..5f628e9ffc6 100644
--- a/module/VuFindAdmin/src/VuFindAdmin/Controller/MaintenanceController.php
+++ b/module/VuFindAdmin/src/VuFindAdmin/Controller/MaintenanceController.php
@@ -41,7 +41,7 @@ class MaintenanceController extends AbstractAdmin
     /**
      * System Maintenance
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function homeAction()
     {
diff --git a/module/VuFindAdmin/src/VuFindAdmin/Controller/OverdriveController.php b/module/VuFindAdmin/src/VuFindAdmin/Controller/OverdriveController.php
index ecc8292aefe..4c284916c88 100644
--- a/module/VuFindAdmin/src/VuFindAdmin/Controller/OverdriveController.php
+++ b/module/VuFindAdmin/src/VuFindAdmin/Controller/OverdriveController.php
@@ -65,7 +65,7 @@ class OverdriveController extends AbstractAdmin
     /**
      * Tag Details
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function homeAction()
     {
diff --git a/module/VuFindAdmin/src/VuFindAdmin/Controller/SocialstatsController.php b/module/VuFindAdmin/src/VuFindAdmin/Controller/SocialstatsController.php
index 4d80265e5fe..c4a6dfa282f 100644
--- a/module/VuFindAdmin/src/VuFindAdmin/Controller/SocialstatsController.php
+++ b/module/VuFindAdmin/src/VuFindAdmin/Controller/SocialstatsController.php
@@ -41,7 +41,7 @@ class SocialstatsController extends AbstractAdmin
     /**
      * Social statistics reporting
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function homeAction()
     {
diff --git a/module/VuFindAdmin/src/VuFindAdmin/Controller/TagsController.php b/module/VuFindAdmin/src/VuFindAdmin/Controller/TagsController.php
index 7e1bb3c5cd1..591ad0db86b 100644
--- a/module/VuFindAdmin/src/VuFindAdmin/Controller/TagsController.php
+++ b/module/VuFindAdmin/src/VuFindAdmin/Controller/TagsController.php
@@ -65,7 +65,7 @@ class TagsController extends AbstractAdmin
     /**
      * Tag Details
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function homeAction()
     {
@@ -78,7 +78,7 @@ class TagsController extends AbstractAdmin
     /**
      * Manage Tags
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function manageAction()
     {
@@ -99,7 +99,7 @@ class TagsController extends AbstractAdmin
     /**
      * List Tags
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function listAction()
     {
@@ -118,7 +118,7 @@ class TagsController extends AbstractAdmin
     /**
      * Delete Tags
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function deleteAction()
     {
@@ -304,7 +304,7 @@ class TagsController extends AbstractAdmin
     /**
      * Gets a list of unique resources based on the url params
      *
-     * @return \Zend\Db\ResultSet
+     * @return \Laminas\Db\ResultSet
      */
     protected function getUniqueResources()
     {
@@ -318,7 +318,7 @@ class TagsController extends AbstractAdmin
     /**
      * Gets a list of unique tags based on the url params
      *
-     * @return \Zend\Db\ResultSet
+     * @return \Laminas\Db\ResultSet
      */
     protected function getUniqueTags()
     {
@@ -332,7 +332,7 @@ class TagsController extends AbstractAdmin
     /**
      * Gets a list of unique users based on the url params
      *
-     * @return \Zend\Db\ResultSet
+     * @return \Laminas\Db\ResultSet
      */
     protected function getUniqueUsers()
     {
@@ -359,7 +359,7 @@ class TagsController extends AbstractAdmin
     /**
      * Get and set a list of resource tags
      *
-     * @return \Zend\Paginator\Paginator
+     * @return \Laminas\Paginator\Paginator
      */
     protected function getResourceTags()
     {
diff --git a/module/VuFindApi/Module.php b/module/VuFindApi/Module.php
index 71851a7c866..5acf112af2e 100644
--- a/module/VuFindApi/Module.php
+++ b/module/VuFindApi/Module.php
@@ -56,7 +56,7 @@ class Module
     public function getAutoloaderConfig()
     {
         return [
-            'Zend\Loader\StandardAutoloader' => [
+            'Laminas\Loader\StandardAutoloader' => [
                 'namespaces' => [
                     __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                 ],
diff --git a/module/VuFindApi/config/module.config.php b/module/VuFindApi/config/module.config.php
index d551909287f..a235cd00f7e 100644
--- a/module/VuFindApi/config/module.config.php
+++ b/module/VuFindApi/config/module.config.php
@@ -14,14 +14,14 @@ $config = [
     ],
     'service_manager' => [
         'factories' => [
-            'VuFindApi\Formatter\FacetFormatter' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFindApi\Formatter\FacetFormatter' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFindApi\Formatter\RecordFormatter' => 'VuFindApi\Formatter\RecordFormatterFactory',
         ],
     ],
     'router' => [
         'routes' => [
             'apiHome' => [
-                'type' => 'Zend\Router\Http\Segment',
+                'type' => 'Laminas\Router\Http\Segment',
                 'verb' => 'get,post,options',
                 'options' => [
                     'route'    => '/api[/v1][/]',
@@ -32,7 +32,7 @@ $config = [
                 ],
             ],
             'searchApiv1' => [
-                'type' => 'Zend\Router\Http\Literal',
+                'type' => 'Laminas\Router\Http\Literal',
                 'verb' => 'get,post,options',
                 'options' => [
                     'route'    => '/api/v1/search',
@@ -43,7 +43,7 @@ $config = [
                 ]
             ],
             'recordApiv1' => [
-                'type' => 'Zend\Router\Http\Literal',
+                'type' => 'Laminas\Router\Http\Literal',
                 'verb' => 'get,post,options',
                 'options' => [
                     'route'    => '/api/v1/record',
diff --git a/module/VuFindApi/src/VuFindApi/Controller/ApiController.php b/module/VuFindApi/src/VuFindApi/Controller/ApiController.php
index a7e0730f8db..369fcace55a 100644
--- a/module/VuFindApi/src/VuFindApi/Controller/ApiController.php
+++ b/module/VuFindApi/src/VuFindApi/Controller/ApiController.php
@@ -52,7 +52,8 @@ class ApiController extends \VuFind\Controller\AbstractBase
     /**
      * Add an API controller to the list of available controllers
      *
-     * @param Zend\Mvc\Controller\AbstractActionController $controller API Controller
+     * @param Laminas\Mvc\Controller\AbstractActionController $controller API
+     * Controller
      *
      * @return void
      */
@@ -68,7 +69,7 @@ class ApiController extends \VuFind\Controller\AbstractBase
      *
      * Return Swagger specification or redirect to Swagger UI
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function indexAction()
     {
diff --git a/module/VuFindApi/src/VuFindApi/Controller/ApiControllerFactory.php b/module/VuFindApi/src/VuFindApi/Controller/ApiControllerFactory.php
index 135616e255c..050b80e1b21 100644
--- a/module/VuFindApi/src/VuFindApi/Controller/ApiControllerFactory.php
+++ b/module/VuFindApi/src/VuFindApi/Controller/ApiControllerFactory.php
@@ -28,7 +28,7 @@
 namespace VuFindApi\Controller;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for ApiController.
diff --git a/module/VuFindApi/src/VuFindApi/Controller/ApiTrait.php b/module/VuFindApi/src/VuFindApi/Controller/ApiTrait.php
index 1776c7037e7..3ff6eab716d 100644
--- a/module/VuFindApi/src/VuFindApi/Controller/ApiTrait.php
+++ b/module/VuFindApi/src/VuFindApi/Controller/ApiTrait.php
@@ -62,12 +62,12 @@ trait ApiTrait
     /**
      * Execute the request
      *
-     * @param \Zend\Mvc\MvcEvent $e Event
+     * @param \Laminas\Mvc\MvcEvent $e Event
      *
      * @return mixed
      * @throws Exception\DomainException
      */
-    public function onDispatch(\Zend\Mvc\MvcEvent $e)
+    public function onDispatch(\Laminas\Mvc\MvcEvent $e)
     {
         // Add CORS headers and handle OPTIONS requests. This is a simplistic
         // approach since we allow any origin. For more complete CORS handling
@@ -111,7 +111,7 @@ trait ApiTrait
      *
      * @param string $permission Permission to check
      *
-     * @return \Zend\Http\Response|boolean
+     * @return \Laminas\Http\Response|boolean
      */
     protected function isAccessDenied($permission)
     {
@@ -131,7 +131,7 @@ trait ApiTrait
      * @param int    $httpCode A custom HTTP Status Code
      * @param string $message  Status message
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      * @throws \Exception
      */
     protected function output($data, $status, $httpCode = null, $message = '')
diff --git a/module/VuFindApi/src/VuFindApi/Controller/SearchApiController.php b/module/VuFindApi/src/VuFindApi/Controller/SearchApiController.php
index 579c65c1526..b5d4a74642a 100644
--- a/module/VuFindApi/src/VuFindApi/Controller/SearchApiController.php
+++ b/module/VuFindApi/src/VuFindApi/Controller/SearchApiController.php
@@ -27,9 +27,9 @@
  */
 namespace VuFindApi\Controller;
 
+use Laminas\ServiceManager\ServiceLocatorInterface;
 use VuFindApi\Formatter\FacetFormatter;
 use VuFindApi\Formatter\RecordFormatter;
-use Zend\ServiceManager\ServiceLocatorInterface;
 
 /**
  * Search API Controller
@@ -135,12 +135,12 @@ class SearchApiController extends \VuFind\Controller\AbstractSearch
     /**
      * Execute the request
      *
-     * @param \Zend\Mvc\MvcEvent $e Event
+     * @param \Laminas\Mvc\MvcEvent $e Event
      *
      * @return mixed
      * @throws Exception\DomainException
      */
-    public function onDispatch(\Zend\Mvc\MvcEvent $e)
+    public function onDispatch(\Laminas\Mvc\MvcEvent $e)
     {
         // Add CORS headers and handle OPTIONS requests. This is a simplistic
         // approach since we allow any origin. For more complete CORS handling
@@ -168,7 +168,7 @@ class SearchApiController extends \VuFind\Controller\AbstractSearch
     /**
      * Record action
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function recordAction()
     {
@@ -216,7 +216,7 @@ class SearchApiController extends \VuFind\Controller\AbstractSearch
     /**
      * Search action
      *
-     * @return \Zend\Http\Response
+     * @return \Laminas\Http\Response
      */
     public function searchAction()
     {
diff --git a/module/VuFindApi/src/VuFindApi/Controller/SearchApiControllerFactory.php b/module/VuFindApi/src/VuFindApi/Controller/SearchApiControllerFactory.php
index ea1fa137ff4..d51ce4ecab6 100644
--- a/module/VuFindApi/src/VuFindApi/Controller/SearchApiControllerFactory.php
+++ b/module/VuFindApi/src/VuFindApi/Controller/SearchApiControllerFactory.php
@@ -28,7 +28,7 @@
 namespace VuFindApi\Controller;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for SearchApiController.
diff --git a/module/VuFindApi/src/VuFindApi/Formatter/RecordFormatter.php b/module/VuFindApi/src/VuFindApi/Formatter/RecordFormatter.php
index 0394f6e91ba..1f89e04954b 100644
--- a/module/VuFindApi/src/VuFindApi/Formatter/RecordFormatter.php
+++ b/module/VuFindApi/src/VuFindApi/Formatter/RecordFormatter.php
@@ -27,8 +27,8 @@
  */
 namespace VuFindApi\Formatter;
 
+use Laminas\View\HelperPluginManager;
 use VuFind\I18n\TranslatableString;
-use Zend\View\HelperPluginManager;
 
 /**
  * Record formatter for API responses
diff --git a/module/VuFindApi/src/VuFindApi/Formatter/RecordFormatterFactory.php b/module/VuFindApi/src/VuFindApi/Formatter/RecordFormatterFactory.php
index 62f6f016cae..2e998ea8631 100644
--- a/module/VuFindApi/src/VuFindApi/Formatter/RecordFormatterFactory.php
+++ b/module/VuFindApi/src/VuFindApi/Formatter/RecordFormatterFactory.php
@@ -28,7 +28,7 @@
 namespace VuFindApi\Formatter;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Record Formatter factory.
diff --git a/module/VuFindApi/tests/unit-tests/src/VuFindTest/Formatter/FacetFormatterTest.php b/module/VuFindApi/tests/unit-tests/src/VuFindTest/Formatter/FacetFormatterTest.php
index 7cbba89e5e6..286b3e672d5 100644
--- a/module/VuFindApi/tests/unit-tests/src/VuFindTest/Formatter/FacetFormatterTest.php
+++ b/module/VuFindApi/tests/unit-tests/src/VuFindTest/Formatter/FacetFormatterTest.php
@@ -158,7 +158,7 @@ class FacetFormatterTest extends \VuFindTest\Unit\TestCase
         $helper = new \VuFind\Search\Solr\HierarchicalFacetHelper();
         $configManager = $this->createMock(\VuFind\Config\PluginManager::class);
         $params = new Params(new Options($configManager), $configManager);
-        $requestParams = new \Zend\StdLib\Parameters($request);
+        $requestParams = new \Laminas\Stdlib\Parameters($request);
         $params->initFromRequest($requestParams);
         $factory = new \VuFind\Search\Factory\UrlQueryHelperFactory();
         $urlQuery = $factory->fromParams($params);
@@ -183,7 +183,7 @@ class FacetFormatterTest extends \VuFindTest\Unit\TestCase
     {
         $configManager = $this->createMock(\VuFind\Config\PluginManager::class);
         $params = new Params(new Options($configManager), $configManager);
-        $params->initFromRequest(new \Zend\Stdlib\Parameters($request));
+        $params->initFromRequest(new \Laminas\Stdlib\Parameters($request));
         $ss = $this->getMockBuilder(\VuFindSearch\Service::class)
             ->disableOriginalConstructor()->getMock();
         $rl = $this->getMockBuilder(\VuFind\Record\Loader::class)
diff --git a/module/VuFindApi/tests/unit-tests/src/VuFindTest/Formatter/RecordFormatterTest.php b/module/VuFindApi/tests/unit-tests/src/VuFindTest/Formatter/RecordFormatterTest.php
index 09afece3642..f47e63aa1c6 100644
--- a/module/VuFindApi/tests/unit-tests/src/VuFindTest/Formatter/RecordFormatterTest.php
+++ b/module/VuFindApi/tests/unit-tests/src/VuFindTest/Formatter/RecordFormatterTest.php
@@ -75,11 +75,11 @@ class RecordFormatterTest extends \VuFindTest\Unit\TestCase
     /**
      * Get a helper plugin manager for the RecordFormatter.
      *
-     * @return \Zend\View\HelperPluginManager
+     * @return \Laminas\View\HelperPluginManager
      */
     protected function getHelperPluginManager()
     {
-        $hm = new \Zend\View\HelperPluginManager(
+        $hm = new \Laminas\View\HelperPluginManager(
             $this->createMock(\Interop\Container\ContainerInterface::class)
         );
         $hm->setService('translate', new \VuFind\View\Helper\Root\Translate());
diff --git a/module/VuFindConsole/Module.php b/module/VuFindConsole/Module.php
index 955619d36a1..04768b93bed 100644
--- a/module/VuFindConsole/Module.php
+++ b/module/VuFindConsole/Module.php
@@ -27,7 +27,7 @@
  */
 namespace VuFindConsole;
 
-use Zend\Console\Adapter\AdapterInterface as Console;
+use Laminas\Console\Adapter\AdapterInterface as Console;
 
 /**
  * Code module for VuFind's console functionality
@@ -38,8 +38,8 @@ use Zend\Console\Adapter\AdapterInterface as Console;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development
  */
-class Module implements \Zend\ModuleManager\Feature\ConsoleUsageProviderInterface,
-    \Zend\ModuleManager\Feature\ConsoleBannerProviderInterface
+class Module implements \Laminas\ModuleManager\Feature\ConsoleUsageProviderInterface,
+    \Laminas\ModuleManager\Feature\ConsoleBannerProviderInterface
 {
     /**
      * Get module configuration
@@ -59,7 +59,7 @@ class Module implements \Zend\ModuleManager\Feature\ConsoleUsageProviderInterfac
     public function getAutoloaderConfig()
     {
         return [
-            'Zend\Loader\StandardAutoloader' => [
+            'Laminas\Loader\StandardAutoloader' => [
                 'namespaces' => [
                     __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                 ],
@@ -73,7 +73,7 @@ class Module implements \Zend\ModuleManager\Feature\ConsoleUsageProviderInterfac
      * The banner is shown in the console window, when the user supplies invalid
      * command-line parameters or invokes the application with no parameters.
      *
-     * The method is called with active Zend\Console\Adapter\AdapterInterface that
+     * The method is called with active Laminas\Console\Adapter\AdapterInterface that
      * can be used to directly access Console and send output.
      *
      * @param Console $console Console adapter
diff --git a/module/VuFindConsole/src/VuFindConsole/Controller/AbstractBase.php b/module/VuFindConsole/src/VuFindConsole/Controller/AbstractBase.php
index 9f2f31a1af7..f0ae99bb442 100644
--- a/module/VuFindConsole/src/VuFindConsole/Controller/AbstractBase.php
+++ b/module/VuFindConsole/src/VuFindConsole/Controller/AbstractBase.php
@@ -28,9 +28,9 @@
  */
 namespace VuFindConsole\Controller;
 
-use Zend\Console\Console;
-use Zend\Mvc\Controller\AbstractActionController;
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\Console\Console;
+use Laminas\Mvc\Controller\AbstractActionController;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * VuFind controller base class (defines some methods that can be shared by other
@@ -91,7 +91,7 @@ class AbstractBase extends AbstractActionController
     /**
      * Indicate failure.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     protected function getFailureResponse()
     {
@@ -101,7 +101,7 @@ class AbstractBase extends AbstractActionController
     /**
      * Indicate success.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     protected function getSuccessResponse()
     {
@@ -113,7 +113,7 @@ class AbstractBase extends AbstractActionController
      *
      * @param string $id Configuration identifier (default = main VuFind config)
      *
-     * @return \Zend\Config\Config
+     * @return \Laminas\Config\Config
      */
     public function getConfig($id = 'config')
     {
diff --git a/module/VuFindConsole/src/VuFindConsole/Controller/CompileController.php b/module/VuFindConsole/src/VuFindConsole/Controller/CompileController.php
index a03e1ec4dd0..5834527ed41 100644
--- a/module/VuFindConsole/src/VuFindConsole/Controller/CompileController.php
+++ b/module/VuFindConsole/src/VuFindConsole/Controller/CompileController.php
@@ -27,7 +27,7 @@
  */
 namespace VuFindConsole\Controller;
 
-use Zend\Console\Console;
+use Laminas\Console\Console;
 
 /**
  * This controller handles the command-line tool for compiling themes.
diff --git a/module/VuFindConsole/src/VuFindConsole/Controller/GenerateController.php b/module/VuFindConsole/src/VuFindConsole/Controller/GenerateController.php
index 7d4d7b53b3a..db4b3b97772 100644
--- a/module/VuFindConsole/src/VuFindConsole/Controller/GenerateController.php
+++ b/module/VuFindConsole/src/VuFindConsole/Controller/GenerateController.php
@@ -27,7 +27,7 @@
  */
 namespace VuFindConsole\Controller;
 
-use Zend\Console\Console;
+use Laminas\Console\Console;
 
 /**
  * This controller handles various command-line tools for dealing with language files
@@ -43,7 +43,7 @@ class GenerateController extends AbstractBase
     /**
      * Add a new dynamic route definition
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function dynamicrouteAction()
     {
@@ -90,7 +90,7 @@ class GenerateController extends AbstractBase
     /**
      * Extend an existing class
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function extendclassAction()
     {
@@ -133,7 +133,7 @@ class GenerateController extends AbstractBase
     /**
      * Extend an existing service
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function extendserviceAction()
     {
@@ -169,7 +169,7 @@ class GenerateController extends AbstractBase
     /**
      * Add a new non-tab record action to all existing record routes
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function nontabrecordactionAction()
     {
@@ -225,7 +225,7 @@ class GenerateController extends AbstractBase
     /**
      * Create a new plugin class
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function pluginAction()
     {
@@ -262,7 +262,7 @@ class GenerateController extends AbstractBase
     /**
      * Add a new record route definition
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function recordrouteAction()
     {
@@ -305,7 +305,7 @@ class GenerateController extends AbstractBase
     /**
      * Add a new static route definition
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function staticrouteAction()
     {
@@ -344,7 +344,7 @@ class GenerateController extends AbstractBase
     /**
      * Create a custom theme from the template, configure.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function themeAction()
     {
@@ -371,7 +371,7 @@ class GenerateController extends AbstractBase
     /**
      * Create a custom theme from the template.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function thememixinAction()
     {
diff --git a/module/VuFindConsole/src/VuFindConsole/Controller/HarvestController.php b/module/VuFindConsole/src/VuFindConsole/Controller/HarvestController.php
index 8db422eb84b..ed0f0d657a2 100644
--- a/module/VuFindConsole/src/VuFindConsole/Controller/HarvestController.php
+++ b/module/VuFindConsole/src/VuFindConsole/Controller/HarvestController.php
@@ -27,8 +27,8 @@
  */
 namespace VuFindConsole\Controller;
 
+use Laminas\Console\Console;
 use VuFindHarvest\OaiPmh\HarvesterConsoleRunner;
-use Zend\Console\Console;
 
 /**
  * This controller handles various command-line tools
@@ -69,7 +69,7 @@ class HarvestController extends AbstractBase
     /**
      * Harvest OAI-PMH records.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function harvestoaiAction()
     {
@@ -98,7 +98,7 @@ class HarvestController extends AbstractBase
     /**
      * Merge harvested MARC records into a single <collection>
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      * @author Thomas Schwaerzler <thomas.schwaerzler@uibk.ac.at>
      */
     public function mergemarcAction()
diff --git a/module/VuFindConsole/src/VuFindConsole/Controller/ImportController.php b/module/VuFindConsole/src/VuFindConsole/Controller/ImportController.php
index 6b5f64e0fca..098279b7c25 100644
--- a/module/VuFindConsole/src/VuFindConsole/Controller/ImportController.php
+++ b/module/VuFindConsole/src/VuFindConsole/Controller/ImportController.php
@@ -27,8 +27,8 @@
  */
 namespace VuFindConsole\Controller;
 
+use Laminas\Console\Console;
 use VuFind\XSLT\Importer;
-use Zend\Console\Console;
 
 /**
  * This controller handles various command-line tools
@@ -44,7 +44,7 @@ class ImportController extends AbstractBase
     /**
      * XSLT Import Tool
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function importXslAction()
     {
@@ -131,7 +131,7 @@ class ImportController extends AbstractBase
     /**
      * Tool to crawl website for special index.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function webcrawlAction()
     {
diff --git a/module/VuFindConsole/src/VuFindConsole/Controller/LanguageController.php b/module/VuFindConsole/src/VuFindConsole/Controller/LanguageController.php
index c130d346ea6..e44bbaaef67 100644
--- a/module/VuFindConsole/src/VuFindConsole/Controller/LanguageController.php
+++ b/module/VuFindConsole/src/VuFindConsole/Controller/LanguageController.php
@@ -27,9 +27,9 @@
  */
 namespace VuFindConsole\Controller;
 
+use Laminas\Console\Console;
 use VuFind\I18n\ExtendedIniNormalizer;
 use VuFind\I18n\Translator\Loader\ExtendedIniReader;
-use Zend\Console\Console;
 
 /**
  * This controller handles various command-line tools for dealing with language files
@@ -45,7 +45,7 @@ class LanguageController extends AbstractBase
     /**
      * Copy one language string to another
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function copystringAction()
     {
@@ -113,7 +113,7 @@ class LanguageController extends AbstractBase
      * Assemble a new language string by combining existing ones using a
      * template.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function addusingtemplateAction()
     {
@@ -209,7 +209,7 @@ class LanguageController extends AbstractBase
     /**
      * Delete a language string to another
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function deleteAction()
     {
@@ -260,7 +260,7 @@ class LanguageController extends AbstractBase
     /**
      * Normalizer
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function normalizeAction()
     {
diff --git a/module/VuFindConsole/src/VuFindConsole/Controller/RedirectController.php b/module/VuFindConsole/src/VuFindConsole/Controller/RedirectController.php
index 23dca95fb00..9e3622f632e 100644
--- a/module/VuFindConsole/src/VuFindConsole/Controller/RedirectController.php
+++ b/module/VuFindConsole/src/VuFindConsole/Controller/RedirectController.php
@@ -27,8 +27,8 @@
  */
 namespace VuFindConsole\Controller;
 
-use Zend\Console\Console;
-use Zend\Mvc\Application;
+use Laminas\Console\Console;
+use Laminas\Mvc\Application;
 
 /**
  * This controller handles various command-line tools
@@ -63,9 +63,9 @@ class RedirectController extends AbstractBase
      */
     public function consoledefaultAction()
     {
-        // We need to modify the $_SERVER superglobals so that \Zend\Console\GetOpt
-        // will behave correctly after we've manipulated the CLI parameters. Let's
-        // use references for convenience.
+        // We need to modify the $_SERVER superglobals so that
+        // \Laminas\Console\GetOpt will behave correctly after we've manipulated the
+        // CLI parameters. Let's use references for convenience.
         $argv = & $_SERVER['argv'];
         $argc = & $_SERVER['argc'];
 
diff --git a/module/VuFindConsole/src/VuFindConsole/Controller/ScheduledSearchController.php b/module/VuFindConsole/src/VuFindConsole/Controller/ScheduledSearchController.php
index 9db7b83d5c2..dafeb288957 100644
--- a/module/VuFindConsole/src/VuFindConsole/Controller/ScheduledSearchController.php
+++ b/module/VuFindConsole/src/VuFindConsole/Controller/ScheduledSearchController.php
@@ -29,8 +29,8 @@
  */
 namespace VuFindConsole\Controller;
 
-use Zend\Console\Console;
-use Zend\ServiceManager\ServiceLocatorInterface;
+use Laminas\Console\Console;
+use Laminas\ServiceManager\ServiceLocatorInterface;
 
 /**
  * CLI Controller Module (scheduled search tools)
@@ -66,14 +66,14 @@ class ScheduledSearchController extends AbstractBase
     /**
      * View renderer
      *
-     * @var \Zend\View\Renderer\PhpRenderer
+     * @var \Laminas\View\Renderer\PhpRenderer
      */
     protected $renderer;
 
     /**
      * URL helper
      *
-     * @var \Zend\View\Helper\Url
+     * @var \Laminas\View\Helper\Url
      */
     protected $urlHelper;
 
@@ -94,7 +94,7 @@ class ScheduledSearchController extends AbstractBase
     /**
      * Top-level VuFind configuration
      *
-     * @var \Zend\Config\Config
+     * @var \Laminas\Config\Config
      */
     protected $mainConfig;
 
@@ -138,7 +138,7 @@ class ScheduledSearchController extends AbstractBase
     /**
      * Send notifications.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function notifyAction()
     {
diff --git a/module/VuFindConsole/src/VuFindConsole/Controller/UtilController.php b/module/VuFindConsole/src/VuFindConsole/Controller/UtilController.php
index 98db89ef69e..a8ec063a756 100644
--- a/module/VuFindConsole/src/VuFindConsole/Controller/UtilController.php
+++ b/module/VuFindConsole/src/VuFindConsole/Controller/UtilController.php
@@ -29,14 +29,14 @@ namespace VuFindConsole\Controller;
 
 use File_MARC;
 use File_MARCXML;
+use Laminas\Console\Console;
+use Laminas\Crypt\BlockCipher as BlockCipher;
+use Laminas\Crypt\Symmetric\Openssl;
 use VuFind\Config\Locator as ConfigLocator;
 use VuFind\Config\Writer as ConfigWriter;
 use VuFind\Sitemap\Generator as Sitemap;
 use VuFindSearch\Backend\Solr\Document\UpdateDocument;
 use VuFindSearch\Backend\Solr\Record\SerializableRecord;
-use Zend\Console\Console;
-use Zend\Crypt\BlockCipher as BlockCipher;
-use Zend\Crypt\Symmetric\Openssl;
 
 /**
  * This controller handles various command-line tools
@@ -54,7 +54,7 @@ class UtilController extends AbstractBase
      *
      * @param string $msg Extra message to display
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     protected function indexReservesHelp($msg = '')
     {
@@ -104,7 +104,7 @@ class UtilController extends AbstractBase
     /**
      * Build the Reserves index.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function indexreservesAction()
     {
@@ -230,7 +230,7 @@ class UtilController extends AbstractBase
     /**
      * Commit the Solr index.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function commitAction()
     {
@@ -240,7 +240,7 @@ class UtilController extends AbstractBase
     /**
      * Optimize the Solr index.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function optimizeAction()
     {
@@ -252,7 +252,7 @@ class UtilController extends AbstractBase
      *
      * @param bool $optimize Should we optimize?
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     protected function performCommit($optimize = false)
     {
@@ -274,7 +274,7 @@ class UtilController extends AbstractBase
     /**
      * Generate a Sitemap
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function sitemapAction()
     {
@@ -321,7 +321,7 @@ class UtilController extends AbstractBase
     /**
      * Command-line tool to batch-delete records from the Solr index.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function deletesAction()
     {
@@ -440,7 +440,7 @@ class UtilController extends AbstractBase
      * Command-line tool to clear unwanted entries
      * from record cache table.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function cleanuprecordcacheAction()
     {
@@ -465,7 +465,7 @@ class UtilController extends AbstractBase
      *
      * @param string $rows Plural name of records to delete
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     protected function expirationHelp($rows)
     {
@@ -497,7 +497,7 @@ class UtilController extends AbstractBase
      * Command-line tool to clear unwanted entries
      * from search history database table.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function expiresearchesAction()
     {
@@ -517,7 +517,7 @@ class UtilController extends AbstractBase
      * Command-line tool to clear unwanted entries
      * from session database table.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function expiresessionsAction()
     {
@@ -537,7 +537,7 @@ class UtilController extends AbstractBase
      * Command-line tool to clear unwanted entries
      * from external_session database table.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function expireExternalSessionsAction()
     {
@@ -557,7 +557,7 @@ class UtilController extends AbstractBase
      * Command-line tool to clear unwanted entries
      * from auth_hash database table.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function expireauthhashesAction()
     {
@@ -576,7 +576,7 @@ class UtilController extends AbstractBase
     /**
      * Command-line tool to delete suppressed records from the index.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function suppressedAction()
     {
@@ -783,7 +783,7 @@ class UtilController extends AbstractBase
     /**
      * Tool to auto-fill hierarchy cache.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function createhierarchytreesAction()
     {
@@ -866,7 +866,7 @@ class UtilController extends AbstractBase
     /**
      * Compile CSS files from LESS.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function cssbuilderAction()
     {
@@ -961,7 +961,7 @@ class UtilController extends AbstractBase
      * Convert hash algorithms
      * Expected parameters: oldmethod:oldkey (or none) newmethod:newkey
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function switchdbhashAction()
     {
@@ -1063,7 +1063,7 @@ class UtilController extends AbstractBase
     /**
      * Lint a file of MARC records.
      *
-     * @return \Zend\Console\Response
+     * @return \Laminas\Console\Response
      */
     public function lintmarcAction()
     {
diff --git a/module/VuFindConsole/src/VuFindConsole/Generator/GeneratorTools.php b/module/VuFindConsole/src/VuFindConsole/Generator/GeneratorTools.php
index 615112fb4e4..691c01e74dd 100644
--- a/module/VuFindConsole/src/VuFindConsole/Generator/GeneratorTools.php
+++ b/module/VuFindConsole/src/VuFindConsole/Generator/GeneratorTools.php
@@ -28,11 +28,11 @@
 namespace VuFindConsole\Generator;
 
 use Interop\Container\ContainerInterface;
-use Zend\Code\Generator\ClassGenerator;
-use Zend\Code\Generator\FileGenerator;
-use Zend\Code\Generator\MethodGenerator;
-use Zend\Code\Reflection\ClassReflection;
-use Zend\Console\Console;
+use Laminas\Code\Generator\ClassGenerator;
+use Laminas\Code\Generator\FileGenerator;
+use Laminas\Code\Generator\MethodGenerator;
+use Laminas\Code\Reflection\ClassReflection;
+use Laminas\Console\Console;
 
 /**
  * Generator tools.
@@ -46,7 +46,7 @@ use Zend\Console\Console;
 class GeneratorTools
 {
     /**
-     * Zend Framework configuration
+     * Laminas configuration
      *
      * @var array
      */
@@ -55,7 +55,7 @@ class GeneratorTools
     /**
      * Constructor.
      *
-     * @param array $config Zend Framework configuration
+     * @param array $config Laminas configuration
      */
     public function __construct(array $config)
     {
@@ -148,7 +148,7 @@ class GeneratorTools
     {
         $this->createClassInModule(
             $factory, $module, null,
-            ['Zend\ServiceManager\Factory\FactoryInterface'],
+            ['Laminas\ServiceManager\Factory\FactoryInterface'],
             function ($generator) use ($class) {
                 $method = MethodGenerator::fromArray(
                     [
@@ -170,7 +170,7 @@ class GeneratorTools
                 ];
                 $method->setParameters([$param1, $param2, $param3]);
                 // Copy doc block from this class' factory:
-                $reflection = new \Zend\Code\Reflection\MethodReflection(
+                $reflection = new \Laminas\Code\Reflection\MethodReflection(
                     GeneratorToolsFactory::class, '__invoke'
                 );
                 $example = MethodGenerator::fromReflection($reflection);
@@ -566,9 +566,9 @@ class GeneratorTools
                 throw new \Exception("$fullPath already exists.");
             }
         }
-        // TODO: this is a workaround for an apparent bug in Zend\Code which
+        // TODO: this is a workaround for an apparent bug in Laminas\Code which
         // omits the leading backslash on "extends" statements when rewriting
-        // existing classes. Can we remove this after a future Zend\Code upgrade?
+        // existing classes. Can we remove this after a future Laminas\Code upgrade?
         $code = str_replace(
             'extends VuFind\\', 'extends \\VuFind\\', $generator->generate()
         );
diff --git a/module/VuFindConsole/src/VuFindConsole/Generator/GeneratorToolsFactory.php b/module/VuFindConsole/src/VuFindConsole/Generator/GeneratorToolsFactory.php
index 27cebaa3fda..237d04d90a4 100644
--- a/module/VuFindConsole/src/VuFindConsole/Generator/GeneratorToolsFactory.php
+++ b/module/VuFindConsole/src/VuFindConsole/Generator/GeneratorToolsFactory.php
@@ -28,7 +28,7 @@
 namespace VuFindConsole\Generator;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Generator tools factory.
diff --git a/module/VuFindDevTools/Module.php b/module/VuFindDevTools/Module.php
index f6e0298c06d..fe50d874884 100644
--- a/module/VuFindDevTools/Module.php
+++ b/module/VuFindDevTools/Module.php
@@ -56,7 +56,7 @@ class Module
     public function getAutoloaderConfig()
     {
         return [
-            'Zend\Loader\StandardAutoloader' => [
+            'Laminas\Loader\StandardAutoloader' => [
                 'namespaces' => [
                     __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                 ],
diff --git a/module/VuFindDevTools/config/module.config.php b/module/VuFindDevTools/config/module.config.php
index 9f95f2d302d..3e834ac2ae3 100644
--- a/module/VuFindDevTools/config/module.config.php
+++ b/module/VuFindDevTools/config/module.config.php
@@ -13,7 +13,7 @@ $config = [
     'router' => [
         'routes' => [
             'devtools-deminify' => [
-                'type' => 'Zend\Router\Http\Literal',
+                'type' => 'Laminas\Router\Http\Literal',
                 'options' => [
                     'route'    => '/devtools/deminify',
                     'defaults' => [
@@ -23,7 +23,7 @@ $config = [
                 ]
             ],
             'devtools-home' => [
-                'type' => 'Zend\Router\Http\Literal',
+                'type' => 'Laminas\Router\Http\Literal',
                 'options' => [
                     'route'    => '/devtools/home',
                     'defaults' => [
@@ -33,7 +33,7 @@ $config = [
                 ]
             ],
             'devtools-language' => [
-                'type' => 'Zend\Router\Http\Literal',
+                'type' => 'Laminas\Router\Http\Literal',
                 'options' => [
                     'route'    => '/devtools/language',
                     'defaults' => [
diff --git a/module/VuFindDevTools/src/VuFindDevTools/Controller/DevtoolsController.php b/module/VuFindDevTools/src/VuFindDevTools/Controller/DevtoolsController.php
index 6996491370f..1e7156d5e6e 100644
--- a/module/VuFindDevTools/src/VuFindDevTools/Controller/DevtoolsController.php
+++ b/module/VuFindDevTools/src/VuFindDevTools/Controller/DevtoolsController.php
@@ -68,7 +68,7 @@ class DevtoolsController extends \VuFind\Controller\AbstractBase
     /**
      * Deminify action
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function deminifyAction()
     {
@@ -99,7 +99,7 @@ class DevtoolsController extends \VuFind\Controller\AbstractBase
     /**
      * Home action
      *
-     * @return \Zend\View\Model\ViewModel
+     * @return \Laminas\View\Model\ViewModel
      */
     public function homeAction()
     {
diff --git a/module/VuFindDevTools/src/VuFindDevTools/LanguageHelper.php b/module/VuFindDevTools/src/VuFindDevTools/LanguageHelper.php
index 7f1c0ff333f..b6412b4a21d 100644
--- a/module/VuFindDevTools/src/VuFindDevTools/LanguageHelper.php
+++ b/module/VuFindDevTools/src/VuFindDevTools/LanguageHelper.php
@@ -27,9 +27,9 @@
  */
 namespace VuFindDevTools;
 
+use Laminas\Config\Config;
+use Laminas\I18n\Translator\TextDomain;
 use VuFind\I18n\Translator\Loader\ExtendedIni;
-use Zend\Config\Config;
-use Zend\I18n\Translator\TextDomain;
 
 /**
  * Language Helper for Development Tools Controller
diff --git a/module/VuFindDevTools/tests/unit-tests/src/VuFindTest/Controller/DevtoolsControllerTest.php b/module/VuFindDevTools/tests/unit-tests/src/VuFindTest/Controller/DevtoolsControllerTest.php
index 8037c4bbac8..7191512b73b 100644
--- a/module/VuFindDevTools/tests/unit-tests/src/VuFindTest/Controller/DevtoolsControllerTest.php
+++ b/module/VuFindDevTools/tests/unit-tests/src/VuFindTest/Controller/DevtoolsControllerTest.php
@@ -28,8 +28,8 @@
  */
 namespace VuFindTest\Controller;
 
+use Laminas\Config\Config;
 use VuFindDevTools\Controller\DevtoolsController as Controller;
-use Zend\Config\Config;
 
 /**
  * Unit tests for DevTools controller.
@@ -57,7 +57,7 @@ class DevtoolsControllerTest extends \VuFindTest\Unit\TestCase
         $this->assertEquals('English', $result['mainName']);
 
         // Make sure correct type of object was loaded:
-        $this->assertEquals('Zend\I18n\Translator\TextDomain', get_class($result['main']));
+        $this->assertEquals('Laminas\I18n\Translator\TextDomain', get_class($result['main']));
 
         // Shortcut to help check some key details:
         $en = $result['details']['en'];
@@ -67,7 +67,7 @@ class DevtoolsControllerTest extends \VuFindTest\Unit\TestCase
         $this->assertTrue(in_array('search.phtml', $en['helpFiles']));
 
         // Did we put the object in the right place?
-        $this->assertEquals('Zend\I18n\Translator\TextDomain', get_class($en['object']));
+        $this->assertEquals('Laminas\I18n\Translator\TextDomain', get_class($en['object']));
 
         // Did the @parent_ini macro get stripped correctly?
         $this->assertFalse(isset($result['details']['en-gb']['object']['@parent_ini']));
diff --git a/module/VuFindDevTools/tests/unit-tests/src/VuFindTest/LanguageHelperTest.php b/module/VuFindDevTools/tests/unit-tests/src/VuFindTest/LanguageHelperTest.php
index 77ec90569df..0540793eb7f 100644
--- a/module/VuFindDevTools/tests/unit-tests/src/VuFindTest/LanguageHelperTest.php
+++ b/module/VuFindDevTools/tests/unit-tests/src/VuFindTest/LanguageHelperTest.php
@@ -28,8 +28,8 @@
  */
 namespace VuFindTest\Controller;
 
+use Laminas\Config\Config;
 use VuFindDevTools\LanguageHelper;
-use Zend\Config\Config;
 
 /**
  * Unit tests for language helper.
diff --git a/module/VuFindLocalTemplate/Module.php b/module/VuFindLocalTemplate/Module.php
index e9796e405dd..6b544a1a017 100644
--- a/module/VuFindLocalTemplate/Module.php
+++ b/module/VuFindLocalTemplate/Module.php
@@ -27,8 +27,8 @@
  */
 namespace VuFindLocalTemplate;
 
-use Zend\ModuleManager\ModuleManager;
-use Zend\Mvc\MvcEvent;
+use Laminas\ModuleManager\ModuleManager;
+use Laminas\Mvc\MvcEvent;
 
 /**
  * Template for code module for storing local overrides.
@@ -59,7 +59,7 @@ class Module
     public function getAutoloaderConfig()
     {
         return [
-            'Zend\Loader\StandardAutoloader' => [
+            'Laminas\Loader\StandardAutoloader' => [
                 'namespaces' => [
                     __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                 ],
diff --git a/module/VuFindSearch/Module.php b/module/VuFindSearch/Module.php
index 7b0278dd2ad..d3f643b77ae 100644
--- a/module/VuFindSearch/Module.php
+++ b/module/VuFindSearch/Module.php
@@ -64,7 +64,7 @@ class Module
     public function getAutoloaderConfig()
     {
         return [
-            'Zend\Loader\StandardAutoloader' => [
+            'Laminas\Loader\StandardAutoloader' => [
                 'namespaces' => [
                     __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                 ],
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/AbstractBackend.php b/module/VuFindSearch/src/VuFindSearch/Backend/AbstractBackend.php
index 758ac6db9e8..e525e74af1c 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/AbstractBackend.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/AbstractBackend.php
@@ -27,10 +27,10 @@
  */
 namespace VuFindSearch\Backend;
 
+use Laminas\Log\LoggerAwareInterface;
 use VuFindSearch\Response\RecordCollectionFactoryInterface;
-use VuFindSearch\Response\RecordCollectionInterface;
 
-use Zend\Log\LoggerAwareInterface;
+use VuFindSearch\Response\RecordCollectionInterface;
 
 /**
  * Abstract backend.
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/BrowZine/Connector.php b/module/VuFindSearch/src/VuFindSearch/Backend/BrowZine/Connector.php
index 61c37a47e0b..12fef255af3 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/BrowZine/Connector.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/BrowZine/Connector.php
@@ -28,7 +28,7 @@
  */
 namespace VuFindSearch\Backend\BrowZine;
 
-use Zend\Http\Client as HttpClient;
+use Laminas\Http\Client as HttpClient;
 
 /**
  * BrowZine connector.
@@ -39,7 +39,7 @@ use Zend\Http\Client as HttpClient;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org
  */
-class Connector implements \Zend\Log\LoggerAwareInterface
+class Connector implements \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
 
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/EDS/Backend.php b/module/VuFindSearch/src/VuFindSearch/Backend/EDS/Backend.php
index 1e1a3fd35a8..d2cf32b607f 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/EDS/Backend.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/EDS/Backend.php
@@ -29,15 +29,15 @@
 namespace VuFindSearch\Backend\EDS;
 
 use Exception;
+use Laminas\Cache\Storage\Adapter\AbstractAdapter as CacheAdapter;
+use Laminas\Config\Config;
+use Laminas\Session\Container as SessionContainer;
 use VuFindSearch\Backend\AbstractBackend;
 use VuFindSearch\Backend\Exception\BackendException;
 use VuFindSearch\ParamBag;
 use VuFindSearch\Query\AbstractQuery;
 use VuFindSearch\Response\RecordCollectionFactoryInterface;
 use VuFindSearch\Response\RecordCollectionInterface;
-use Zend\Cache\Storage\Adapter\AbstractAdapter as CacheAdapter;
-use Zend\Config\Config;
-use Zend\Session\Container as SessionContainer;
 
 /**
  *  EDS API Backend
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/EDS/Connector.php b/module/VuFindSearch/src/VuFindSearch/Backend/EDS/Connector.php
index 05b00b68709..5c089865155 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/EDS/Connector.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/EDS/Connector.php
@@ -28,9 +28,9 @@
  */
 namespace VuFindSearch\Backend\EDS;
 
-use Zend\Http\Client\Adapter\Curl as CurlAdapter;
-use Zend\Http\Client as HttpClient;
-use Zend\Log\LoggerAwareInterface;
+use Laminas\Http\Client\Adapter\Curl as CurlAdapter;
+use Laminas\Http\Client as HttpClient;
+use Laminas\Log\LoggerAwareInterface;
 
 /**
  * EBSCO EDS API Connector
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/EIT/Connector.php b/module/VuFindSearch/src/VuFindSearch/Backend/EIT/Connector.php
index e3c2782d727..839864f9d5b 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/EIT/Connector.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/EIT/Connector.php
@@ -28,10 +28,11 @@
  */
 namespace VuFindSearch\Backend\EIT;
 
+use Laminas\Http\Client;
+use Laminas\Http\Request;
 use VuFindSearch\Backend\Exception\HttpErrorException;
-use VuFindSearch\ParamBag;
 
-use Zend\Http\Request;
+use VuFindSearch\ParamBag;
 
 /**
  * Central class for connecting to EIT resources used by VuFind.
@@ -42,7 +43,7 @@ use Zend\Http\Request;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development:architecture Wiki
  */
-class Connector implements \Zend\Log\LoggerAwareInterface
+class Connector implements \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
 
@@ -56,7 +57,7 @@ class Connector implements \Zend\Log\LoggerAwareInterface
     /**
      * The HTTP_Request object used for REST transactions
      *
-     * @var \Zend\Http\Client
+     * @var Client
      */
     protected $client;
 
@@ -84,13 +85,13 @@ class Connector implements \Zend\Log\LoggerAwareInterface
     /**
      * Constructor
      *
-     * @param string            $base   Base URL
-     * @param \Zend\Http\Client $client HTTP client
-     * @param string            $prof   Profile
-     * @param string            $pwd    Password
-     * @param string            $dbs    Database list (comma-separated abbrevs.)
+     * @param string $base   Base URL
+     * @param Client $client HTTP client
+     * @param string $prof   Profile
+     * @param string $pwd    Password
+     * @param string $dbs    Database list (comma-separated abbrevs.)
      */
-    public function __construct($base, \Zend\Http\Client $client, $prof, $pwd, $dbs)
+    public function __construct($base, Client $client, $prof, $pwd, $dbs)
     {
         $this->base = $base;
         $this->client = $client;
@@ -131,7 +132,7 @@ class Connector implements \Zend\Log\LoggerAwareInterface
     /**
      * Check for HTTP errors in a response.
      *
-     * @param \Zend\Http\Response $result The response to check.
+     * @param \Laminas\Http\Response $result The response to check.
      *
      * @throws BackendException
      * @return void
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/Exception/HttpErrorException.php b/module/VuFindSearch/src/VuFindSearch/Backend/Exception/HttpErrorException.php
index 22fbd2efd59..29da75811eb 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/Exception/HttpErrorException.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/Exception/HttpErrorException.php
@@ -30,7 +30,7 @@ namespace VuFindSearch\Backend\Exception;
 
 use Exception;
 
-use Zend\Http\Response;
+use Laminas\Http\Response;
 
 /**
  * HTTP error exception.
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/LibGuides/Connector.php b/module/VuFindSearch/src/VuFindSearch/Backend/LibGuides/Connector.php
index 2456a221959..3d1f20688ee 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/LibGuides/Connector.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/LibGuides/Connector.php
@@ -29,7 +29,7 @@
  */
 namespace VuFindSearch\Backend\LibGuides;
 
-use Zend\Http\Client as HttpClient;
+use Laminas\Http\Client as HttpClient;
 
 /**
  * LibGuides connector.
@@ -41,7 +41,7 @@ use Zend\Http\Client as HttpClient;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org
  */
-class Connector implements \Zend\Log\LoggerAwareInterface
+class Connector implements \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
 
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/Pazpar2/Connector.php b/module/VuFindSearch/src/VuFindSearch/Backend/Pazpar2/Connector.php
index 62b702c49e4..7dbd4074179 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/Pazpar2/Connector.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/Pazpar2/Connector.php
@@ -27,10 +27,11 @@
  */
 namespace VuFindSearch\Backend\Pazpar2;
 
+use Laminas\Http\Client;
+use Laminas\Http\Request;
 use VuFindSearch\Backend\Exception\HttpErrorException;
-use VuFindSearch\ParamBag;
 
-use Zend\Http\Request;
+use VuFindSearch\ParamBag;
 
 /**
  * Central class for connecting to resources used by VuFind.
@@ -41,7 +42,7 @@ use Zend\Http\Request;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development:architecture Wiki
  */
-class Connector implements \Zend\Log\LoggerAwareInterface
+class Connector implements \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
 
@@ -55,7 +56,7 @@ class Connector implements \Zend\Log\LoggerAwareInterface
     /**
      * The HTTP_Request object used for REST transactions
      *
-     * @var \Zend\Http\Client
+     * @var Client
      */
     protected $client;
 
@@ -69,12 +70,11 @@ class Connector implements \Zend\Log\LoggerAwareInterface
     /**
      * Constructor
      *
-     * @param string            $base     Base URL for Pazpar2
-     * @param \Zend\Http\Client $client   An HTTP client object
-     * @param bool              $autoInit Should we auto-initialize the Pazpar2
-     * connection?
+     * @param string $base     Base URL for Pazpar2
+     * @param Client $client   An HTTP client object
+     * @param bool   $autoInit Should we auto-initialize the Pazpar2 connection?
      */
-    public function __construct($base, \Zend\Http\Client $client, $autoInit = false)
+    public function __construct($base, Client $client, $autoInit = false)
     {
         $this->base = $base;
         if (empty($this->base)) {
@@ -147,7 +147,7 @@ class Connector implements \Zend\Log\LoggerAwareInterface
     /**
      * Send a request and return the response.
      *
-     * @param \Zend\Http\Client $client Prepare HTTP client
+     * @param Client $client Prepare HTTP client
      *
      * @return string Response body
      *
@@ -156,7 +156,7 @@ class Connector implements \Zend\Log\LoggerAwareInterface
      * @throws \VuFindSearch\Backend\Exception\RequestErrorException Server
      * signaled a client error (HTTP 4xx)
      */
-    protected function send(\Zend\Http\Client $client)
+    protected function send(Client $client)
     {
         $this->debug(
             sprintf('=> %s %s', $client->getMethod(), $client->getUri())
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/Primo/Connector.php b/module/VuFindSearch/src/VuFindSearch/Backend/Primo/Connector.php
index dacafdfa4a3..f9d81413f5f 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/Primo/Connector.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/Primo/Connector.php
@@ -33,7 +33,7 @@
  */
 namespace VuFindSearch\Backend\Primo;
 
-use Zend\Http\Client as HttpClient;
+use Laminas\Http\Client as HttpClient;
 
 /**
  * Primo Central connector.
@@ -49,7 +49,7 @@ use Zend\Http\Client as HttpClient;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org
  */
-class Connector implements \Zend\Log\LoggerAwareInterface
+class Connector implements \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
 
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/SRU/Connector.php b/module/VuFindSearch/src/VuFindSearch/Backend/SRU/Connector.php
index 272cf6d92da..60067269391 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/SRU/Connector.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/SRU/Connector.php
@@ -41,7 +41,7 @@ use VuFindSearch\Backend\Exception\HttpErrorException;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class Connector implements \Zend\Log\LoggerAwareInterface
+class Connector implements \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
 
@@ -55,7 +55,7 @@ class Connector implements \Zend\Log\LoggerAwareInterface
     /**
      * The HTTP_Request object used for REST transactions
      *
-     * @var \Zend\Http\Client
+     * @var \Laminas\Http\Client
      */
     protected $client;
 
@@ -78,10 +78,10 @@ class Connector implements \Zend\Log\LoggerAwareInterface
      *
      * Sets up the SOAP Client
      *
-     * @param string            $host   The URL of the SRU Server
-     * @param \Zend\Http\Client $client An HTTP client object
+     * @param string               $host   The URL of the SRU Server
+     * @param \Laminas\Http\Client $client An HTTP client object
      */
-    public function __construct($host, \Zend\Http\Client $client)
+    public function __construct($host, \Laminas\Http\Client $client)
     {
         // Initialize properties needed for HTTP connection:
         $this->host = $host;
@@ -173,7 +173,7 @@ class Connector implements \Zend\Log\LoggerAwareInterface
     /**
      * Check for HTTP errors in a response.
      *
-     * @param \Zend\Http\Response $result The response to check.
+     * @param \Laminas\Http\Response $result The response to check.
      *
      * @throws BackendException
      * @return void
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/Connector.php b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/Connector.php
index 2075717d888..fc953e71eec 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/Connector.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/Connector.php
@@ -32,21 +32,21 @@ namespace VuFindSearch\Backend\Solr;
 
 use InvalidArgumentException;
 
+use Laminas\Http\Client\Adapter\AdapterInterface;
+use Laminas\Http\Client\Adapter\Exception\TimeoutException;
+use Laminas\Http\Client as HttpClient;
+use Laminas\Http\Request;
+
 use VuFindSearch\Backend\Exception\BackendException;
+
 use VuFindSearch\Backend\Exception\HttpErrorException;
+
 use VuFindSearch\Backend\Exception\RemoteErrorException;
 use VuFindSearch\Backend\Exception\RequestErrorException;
-
 use VuFindSearch\Backend\Solr\Document\AbstractDocument;
-
 use VuFindSearch\ParamBag;
 
 use VuFindSearch\Query\Query;
-use Zend\Http\Client\Adapter\AdapterInterface;
-use Zend\Http\Client\Adapter\Exception\TimeoutException;
-use Zend\Http\Client as HttpClient;
-
-use Zend\Http\Request;
 
 /**
  * SOLR connector.
@@ -59,7 +59,7 @@ use Zend\Http\Request;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org
  */
-class Connector implements \Zend\Log\LoggerAwareInterface
+class Connector implements \Laminas\Log\LoggerAwareInterface
 {
     use \VuFind\Log\LoggerAwareTrait;
 
@@ -116,7 +116,7 @@ class Connector implements \Zend\Log\LoggerAwareInterface
      *
      * @var string|AdapterInterface
      */
-    protected $adapter = 'Zend\Http\Client\Adapter\Socket';
+    protected $adapter = 'Laminas\Http\Client\Adapter\Socket';
 
     /**
      * Constructor
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/SimilarBuilder.php b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/SimilarBuilder.php
index 8392d581028..9c6c70f0106 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/SimilarBuilder.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/SimilarBuilder.php
@@ -80,13 +80,13 @@ class SimilarBuilder implements SimilarBuilderInterface
     /**
      * Constructor.
      *
-     * @param \Zend\Config\Config $searchConfig Search config
-     * @param string              $uniqueKey    Solr field used to store unique
+     * @param \Laminas\Config\Config $searchConfig Search config
+     * @param string                 $uniqueKey    Solr field used to store unique
      * identifier
      *
      * @return void
      */
-    public function __construct(\Zend\Config\Config $searchConfig = null,
+    public function __construct(\Laminas\Config\Config $searchConfig = null,
         $uniqueKey = 'id'
     ) {
         $this->uniqueKey = $uniqueKey;
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/Summon/Backend.php b/module/VuFindSearch/src/VuFindSearch/Backend/Summon/Backend.php
index e4e4ac64b22..03730e9a270 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/Summon/Backend.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/Summon/Backend.php
@@ -28,7 +28,7 @@
  */
 namespace VuFindSearch\Backend\Summon;
 
-use SerialsSolutions\Summon\Zend2 as Connector;
+use SerialsSolutions\Summon\Laminas as Connector;
 use SerialsSolutions_Summon_Exception as SummonException;
 use SerialsSolutions_Summon_Query as SummonQuery;
 
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/WorldCat/Connector.php b/module/VuFindSearch/src/VuFindSearch/Backend/WorldCat/Connector.php
index 46d47bccaa7..bcea46702d5 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/WorldCat/Connector.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/WorldCat/Connector.php
@@ -58,11 +58,11 @@ class Connector extends \VuFindSearch\Backend\SRU\Connector
     /**
      * Constructor
      *
-     * @param string            $wsKey   Web services key
-     * @param \Zend\Http\Client $client  An HTTP client object
-     * @param array             $options Additional config settings
+     * @param string               $wsKey   Web services key
+     * @param \Laminas\Http\Client $client  An HTTP client object
+     * @param array                $options Additional config settings
      */
-    public function __construct($wsKey, \Zend\Http\Client $client,
+    public function __construct($wsKey, \Laminas\Http\Client $client,
         array $options = []
     ) {
         parent::__construct(
diff --git a/module/VuFindSearch/src/VuFindSearch/Service.php b/module/VuFindSearch/src/VuFindSearch/Service.php
index 075fd8d688d..3680fbd11e8 100644
--- a/module/VuFindSearch/src/VuFindSearch/Service.php
+++ b/module/VuFindSearch/src/VuFindSearch/Service.php
@@ -28,16 +28,16 @@
  */
 namespace VuFindSearch;
 
+use Laminas\EventManager\EventManager;
+use Laminas\EventManager\EventManagerInterface;
 use VuFindSearch\Backend\BackendInterface;
 use VuFindSearch\Backend\Exception\BackendException;
 use VuFindSearch\Feature\GetIdsInterface;
 use VuFindSearch\Feature\RandomInterface;
+
 use VuFindSearch\Feature\RetrieveBatchInterface;
 use VuFindSearch\Response\RecordCollectionInterface;
 
-use Zend\EventManager\EventManager;
-use Zend\EventManager\EventManagerInterface;
-
 /**
  * Search service.
  *
diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/BrowZine/BackendTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/BrowZine/BackendTest.php
index 830bcc9818e..c21545e13f7 100644
--- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/BrowZine/BackendTest.php
+++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/BrowZine/BackendTest.php
@@ -29,13 +29,13 @@
 namespace VuFindTest\Backend\BrowZine;
 
 use InvalidArgumentException;
+use Laminas\Http\Client\Adapter\Test as TestAdapter;
+use Laminas\Http\Client as HttpClient;
 use VuFindSearch\Backend\BrowZine\Backend;
 use VuFindSearch\Backend\BrowZine\Connector;
 use VuFindSearch\Backend\BrowZine\QueryBuilder;
 use VuFindSearch\Backend\BrowZine\Response\RecordCollectionFactory;
 use VuFindSearch\Query\Query;
-use Zend\Http\Client\Adapter\Test as TestAdapter;
-use Zend\Http\Client as HttpClient;
 
 /**
  * Unit tests for BrowZine backend.
@@ -185,7 +185,7 @@ class BackendTest extends \VuFindTest\Unit\TestCase
      */
     protected function getConnectorMock(array $mock = [])
     {
-        $client = $this->createMock(\Zend\Http\Client::class);
+        $client = $this->createMock(\Laminas\Http\Client::class);
         return $this->getMockBuilder(\VuFindSearch\Backend\BrowZine\Connector::class)
             ->setMethods($mock)
             ->setConstructorArgs([$client, 'faketoken', 'fakeid'])
diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/EDS/BackendTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/EDS/BackendTest.php
index adde7991066..9c3cba8ab85 100644
--- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/EDS/BackendTest.php
+++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/EDS/BackendTest.php
@@ -224,7 +224,7 @@ class BackendTest extends \VuFindTest\Unit\TestCase
      */
     protected function getConnectorMock(array $mock = [])
     {
-        $client = $this->createMock(\Zend\Http\Client::class);
+        $client = $this->createMock(\Laminas\Http\Client::class);
         return $this->getMockBuilder(\VuFindSearch\Backend\EDS\Connector::class)
             ->setMethods($mock)
             ->setConstructorArgs([[], $client])
@@ -236,8 +236,8 @@ class BackendTest extends \VuFindTest\Unit\TestCase
      *
      * @param \VuFindSearch\Backend\EDS\Connector                     $connector Connector
      * @param \VuFindSearch\Response\RecordCollectionFactoryInterface $factory   Record collection factory
-     * @param \Zend\Cache\Storage\Adapter\AbstractAdapter             $cache     Object cache adapter
-     * @param \Zend\Session\Container                                 $container Session container
+     * @param \Laminas\Cache\Storage\Adapter\AbstractAdapter             $cache     Object cache adapter
+     * @param \Laminas\Session\Container                                 $container Session container
      * @param array                                                   $settings  Additional settings
      * @param array                                                   $mock      Methods to mock (or null for a real object)
      */
@@ -247,16 +247,16 @@ class BackendTest extends \VuFindTest\Unit\TestCase
             $factory = $this->createMock(\VuFindSearch\Response\RecordCollectionFactoryInterface::class);
         }
         if (null === $cache) {
-            $cache = $this->createMock(\Zend\Cache\Storage\Adapter\Filesystem::class);
+            $cache = $this->createMock(\Laminas\Cache\Storage\Adapter\Filesystem::class);
         }
         if (null === $container) {
-            $container = $this->getMockBuilder(\Zend\Session\Container::class)
+            $container = $this->getMockBuilder(\Laminas\Session\Container::class)
                 ->disableOriginalConstructor()->getMock();
         }
         if (null === $mock) {
-            return new Backend($connector, $factory, $cache, $container, new \Zend\Config\Config($settings));
+            return new Backend($connector, $factory, $cache, $container, new \Laminas\Config\Config($settings));
         } else {
-            $params = [$connector, $factory, $cache, $container, new \Zend\Config\Config($settings)];
+            $params = [$connector, $factory, $cache, $container, new \Laminas\Config\Config($settings)];
             return $this->getMockBuilder(__NAMESPACE__ . '\BackendMock')
                 ->setMethods($mock)
                 ->setConstructorArgs($params)
diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/EIT/BackendTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/EIT/BackendTest.php
index 159743c8b9f..de02df81e3d 100644
--- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/EIT/BackendTest.php
+++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/EIT/BackendTest.php
@@ -164,7 +164,7 @@ class BackendTest extends \VuFindTest\Unit\TestCase
      */
     protected function getConnectorMock(array $mock = [])
     {
-        $client = $this->createMock(\Zend\Http\Client::class);
+        $client = $this->createMock(\Laminas\Http\Client::class);
         return $this->getMockBuilder(__NAMESPACE__ . '\ConnectorMock')
             ->setMethods($mock)
             ->setConstructorArgs(['http://fake', $client, 'profile', 'pwd', 'dbs'])
diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/LibGuides/BackendTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/LibGuides/BackendTest.php
index 4c4445f5636..546ba7b710c 100644
--- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/LibGuides/BackendTest.php
+++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/LibGuides/BackendTest.php
@@ -29,14 +29,14 @@
 namespace VuFindTest\Backend\LibGuides;
 
 use InvalidArgumentException;
+use Laminas\Http\Client\Adapter\Test as TestAdapter;
+use Laminas\Http\Client as HttpClient;
 use VuFindSearch\Backend\LibGuides\Backend;
 use VuFindSearch\Backend\LibGuides\Connector;
 use VuFindSearch\Backend\LibGuides\QueryBuilder;
 use VuFindSearch\Backend\LibGuides\Response\RecordCollectionFactory;
 use VuFindSearch\ParamBag;
 use VuFindSearch\Query\Query;
-use Zend\Http\Client\Adapter\Test as TestAdapter;
-use Zend\Http\Client as HttpClient;
 
 /**
  * Unit tests for LibGuides backend.
@@ -243,7 +243,7 @@ class BackendTest extends \VuFindTest\Unit\TestCase
      */
     protected function getConnectorMock(array $mock = [])
     {
-        $client = $this->createMock(\Zend\Http\Client::class);
+        $client = $this->createMock(\Laminas\Http\Client::class);
         return $this->getMockBuilder(\VuFindSearch\Backend\LibGuides\Connector::class)
             ->setMethods($mock)
             ->setConstructorArgs(['fakeid', $client])
diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Pazpar2/BackendTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Pazpar2/BackendTest.php
index d240d5b7794..4df4f5f215e 100644
--- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Pazpar2/BackendTest.php
+++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Pazpar2/BackendTest.php
@@ -52,7 +52,7 @@ class BackendTest extends TestCase
     public function testGetConnector()
     {
         $connector = $this->getMockBuilder(\VuFindSearch\Backend\Pazpar2\Connector::class)
-            ->setConstructorArgs(['http://fake', $this->createMock(\Zend\Http\Client::class)])
+            ->setConstructorArgs(['http://fake', $this->createMock(\Laminas\Http\Client::class)])
             ->getMock();
         $back = new Backend(
             $connector,
@@ -149,7 +149,7 @@ class BackendTest extends TestCase
      */
     protected function getConnectorMock(array $mock = [])
     {
-        $client = $this->createMock(\Zend\Http\Client::class);
+        $client = $this->createMock(\Laminas\Http\Client::class);
         return $this->getMockBuilder(\VuFindSearch\Backend\Pazpar2\Connector::class)
             ->setMethods($mock)
             ->setConstructorArgs(['fake', $client])
diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Primo/BackendTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Primo/BackendTest.php
index 150faeedbcd..8ce5490c53d 100644
--- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Primo/BackendTest.php
+++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Primo/BackendTest.php
@@ -209,7 +209,7 @@ class BackendTest extends \VuFindTest\Unit\TestCase
      */
     protected function getConnectorMock(array $mock = [])
     {
-        $client = $this->createMock(\Zend\Http\Client::class);
+        $client = $this->createMock(\Laminas\Http\Client::class);
         return $this->getMockBuilder(\VuFindSearch\Backend\Primo\Connector::class)
             ->setMethods($mock)
             ->setConstructorArgs(['http://fakeaddress.none', 'inst-id', $client])
diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Primo/ConnectorTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Primo/ConnectorTest.php
index 4e2a32ee787..66f48e3762e 100644
--- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Primo/ConnectorTest.php
+++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Primo/ConnectorTest.php
@@ -30,12 +30,12 @@ namespace VuFindTest\Backend\Primo;
 
 use InvalidArgumentException;
 
+use Laminas\Http\Client\Adapter\Test as TestAdapter;
+use Laminas\Http\Client as HttpClient;
+
 use PHPUnit\Framework\TestCase;
 use VuFindSearch\Backend\Primo\Connector;
 
-use Zend\Http\Client\Adapter\Test as TestAdapter;
-use Zend\Http\Client as HttpClient;
-
 /**
  * Unit tests for Primo connector.
  *
diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/BackendTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/BackendTest.php
index e040dc2ffde..f37202031d4 100644
--- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/BackendTest.php
+++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/BackendTest.php
@@ -29,15 +29,14 @@
 namespace VuFindTest\Backend\Solr;
 
 use InvalidArgumentException;
+use Laminas\Http\Response;
 use PHPUnit\Framework\TestCase;
 use VuFindSearch\Backend\Exception\RemoteErrorException;
 use VuFindSearch\Backend\Solr\Backend;
 use VuFindSearch\Backend\Solr\HandlerMap;
 use VuFindSearch\Backend\Solr\Response\Json\RecordCollection;
-
 use VuFindSearch\ParamBag;
 use VuFindSearch\Query\Query;
-use Zend\Http\Response;
 
 /**
  * Unit tests for SOLR backend.
@@ -354,7 +353,7 @@ class BackendTest extends TestCase
     protected function runRefineExceptionCall($msg)
     {
         $conn = $this->getConnectorMock(['query']);
-        $e = new RemoteErrorException($msg, 400, new \Zend\Http\Response());
+        $e = new RemoteErrorException($msg, 400, new \Laminas\Http\Response());
         $conn->expects($this->once())->method('query')
             ->with($this->equalTo('browse'))
             ->will($this->throwException($e));
@@ -367,7 +366,7 @@ class BackendTest extends TestCase
      *
      * @param string $fixture Fixture file
      *
-     * @return Zend\Http\Response
+     * @return Laminas\Http\Response
      *
      * @throws InvalidArgumentException Fixture files does not exist
      */
diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/ConnectorTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/ConnectorTest.php
index 948cf68224b..29b34330edd 100644
--- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/ConnectorTest.php
+++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/ConnectorTest.php
@@ -29,14 +29,14 @@
 namespace VuFindTest\Backend\Solr;
 
 use InvalidArgumentException;
+use Laminas\Http\Client\Adapter\Test as TestAdapter;
+
+use Laminas\Http\Client as HttpClient;
 use PHPUnit\Framework\TestCase;
 
 use VuFindSearch\Backend\Solr\Connector;
 use VuFindSearch\Backend\Solr\HandlerMap;
 
-use Zend\Http\Client\Adapter\Test as TestAdapter;
-use Zend\Http\Client as HttpClient;
-
 /**
  * Unit tests for SOLR connector.
  *
diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/SimilarBuilderTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/SimilarBuilderTest.php
index 6d1c6b32f90..2b0b17be0d2 100644
--- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/SimilarBuilderTest.php
+++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/SimilarBuilderTest.php
@@ -86,13 +86,13 @@ class SimilarBuilderTest extends \VuFindTest\Unit\TestCase
                 'count' => 10
             ]
         ];
-        $sb = new SimilarBuilder(new \Zend\Config\Config($config));
+        $sb = new SimilarBuilder(new \Laminas\Config\Config($config));
         $response = $sb->build('testrecord');
         $rows = $response->get('rows');
         $this->assertEquals(10, $rows[0]);
 
         $config['MoreLikeThis']['useMoreLikeThisHandler'] = true;
-        $sb = new SimilarBuilder(new \Zend\Config\Config($config));
+        $sb = new SimilarBuilder(new \Laminas\Config\Config($config));
         $response = $sb->build('testrecord');
         $rows = $response->get('rows');
         $this->assertEquals(10, $rows[0]);
@@ -106,7 +106,7 @@ class SimilarBuilderTest extends \VuFindTest\Unit\TestCase
         $this->assertEquals(null, $qt);
 
         $config['MoreLikeThis']['params'] = 'qf=title,topic';
-        $sb = new SimilarBuilder(new \Zend\Config\Config($config));
+        $sb = new SimilarBuilder(new \Laminas\Config\Config($config));
         $response = $sb->build('testrecord');
         $q = $response->get('q');
         $this->assertEquals('{!mlt qf=title,topic}testrecord', $q[0]);
diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Summon/BackendTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Summon/BackendTest.php
index b0d6362be05..955648acfd4 100644
--- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Summon/BackendTest.php
+++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Summon/BackendTest.php
@@ -260,7 +260,7 @@ class BackendTest extends TestCase
      */
     protected function getConnectorMock(array $mock = [])
     {
-        return $this->getMockBuilder(\SerialsSolutions\Summon\Zend2::class)
+        return $this->getMockBuilder(\SerialsSolutions\Summon\Laminas::class)
             ->setMethods($mock)
             ->setConstructorArgs(['id', 'key'])
             ->getMock();
diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/WorldCat/BackendTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/WorldCat/BackendTest.php
index 505450072cb..68940f68398 100644
--- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/WorldCat/BackendTest.php
+++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/WorldCat/BackendTest.php
@@ -149,7 +149,7 @@ class BackendTest extends TestCase
      */
     protected function getConnectorMock(array $mock = [])
     {
-        $client = $this->createMock(\Zend\Http\Client::class);
+        $client = $this->createMock(\Laminas\Http\Client::class);
         return $this->getMockBuilder(\VuFindSearch\Backend\WorldCat\Connector::class)
             ->setMethods($mock)
             ->setConstructorArgs(['fake', $client])
diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/WorldCat/ConnectorTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/WorldCat/ConnectorTest.php
index 465aad64068..34003061a11 100644
--- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/WorldCat/ConnectorTest.php
+++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/WorldCat/ConnectorTest.php
@@ -49,7 +49,7 @@ class ConnectorTest extends \PHPUnit\Framework\TestCase
      */
     public function testGetHoldings()
     {
-        $client = $this->createMock(\Zend\Http\Client::class);
+        $client = $this->createMock(\Laminas\Http\Client::class);
         $connector = new Connector('key', $client);
         $client->expects($this->once())->method('setMethod')
             ->with($this->equalTo('POST'))
@@ -57,7 +57,7 @@ class ConnectorTest extends \PHPUnit\Framework\TestCase
         $client->expects($this->once())->method('setUri')
             ->with($this->equalTo('http://www.worldcat.org/webservices/catalog/content/libraries/baz?wskey=key&servicelevel=full&frbrGrouping=on'));
         $body = '<foo>bar</foo>';
-        $response = $this->createMock(\Zend\Http\Response::class);
+        $response = $this->createMock(\Laminas\Http\Response::class);
         $response->expects($this->once())->method('getBody')
             ->will($this->returnValue($body));
         $response->expects($this->any())->method('isSuccess')
@@ -77,12 +77,12 @@ class ConnectorTest extends \PHPUnit\Framework\TestCase
     {
         $this->expectException(\VuFindSearch\Backend\Exception\RequestErrorException::class);
 
-        $client = $this->createMock(\Zend\Http\Client::class);
+        $client = $this->createMock(\Laminas\Http\Client::class);
         $connector = new Connector('key', $client);
         $client->expects($this->once())->method('setMethod')
             ->with($this->equalTo('POST'))
             ->will($this->returnValue($client));
-        $response = $this->createMock(\Zend\Http\Response::class);
+        $response = $this->createMock(\Laminas\Http\Response::class);
         $response->expects($this->any())->method('isSuccess')
             ->will($this->returnValue(false));
         $client->expects($this->once())->method('send')
@@ -97,7 +97,7 @@ class ConnectorTest extends \PHPUnit\Framework\TestCase
      */
     public function testGetRecord()
     {
-        $client = $this->createMock(\Zend\Http\Client::class);
+        $client = $this->createMock(\Laminas\Http\Client::class);
         $connector = new Connector('key', $client);
         $client->expects($this->once())->method('setMethod')
             ->with($this->equalTo('POST'))
@@ -105,7 +105,7 @@ class ConnectorTest extends \PHPUnit\Framework\TestCase
         $client->expects($this->once())->method('setUri')
             ->with($this->equalTo('http://www.worldcat.org/webservices/catalog/content/baz?servicelevel=full&wskey=key'));
         $body = '<foo>bar</foo>';
-        $response = $this->createMock(\Zend\Http\Response::class);
+        $response = $this->createMock(\Laminas\Http\Response::class);
         $response->expects($this->once())->method('getBody')
             ->will($this->returnValue($body));
         $response->expects($this->any())->method('isSuccess')
@@ -123,7 +123,7 @@ class ConnectorTest extends \PHPUnit\Framework\TestCase
      */
     public function testGetRecordWithError()
     {
-        $client = $this->createMock(\Zend\Http\Client::class);
+        $client = $this->createMock(\Laminas\Http\Client::class);
         $connector = new Connector('key', $client);
         $client->expects($this->once())->method('setMethod')
             ->with($this->equalTo('POST'))
@@ -131,7 +131,7 @@ class ConnectorTest extends \PHPUnit\Framework\TestCase
         $client->expects($this->once())->method('setUri')
             ->with($this->equalTo('http://www.worldcat.org/webservices/catalog/content/baz?servicelevel=full&wskey=key'));
         $body = '<foo><diagnostic>bad</diagnostic></foo>';
-        $response = $this->createMock(\Zend\Http\Response::class);
+        $response = $this->createMock(\Laminas\Http\Response::class);
         $response->expects($this->once())->method('getBody')
             ->will($this->returnValue($body));
         $response->expects($this->any())->method('isSuccess')
@@ -149,7 +149,7 @@ class ConnectorTest extends \PHPUnit\Framework\TestCase
      */
     public function testSearch()
     {
-        $client = $this->createMock(\Zend\Http\Client::class);
+        $client = $this->createMock(\Laminas\Http\Client::class);
         $connector = new Connector('key', $client);
         $client->expects($this->once())->method('setMethod')
             ->with($this->equalTo('POST'))
@@ -157,7 +157,7 @@ class ConnectorTest extends \PHPUnit\Framework\TestCase
         $client->expects($this->once())->method('setUri')
             ->with($this->equalTo('http://www.worldcat.org/webservices/catalog/search/sru?version=1.1&x=y&startRecord=0&maximumRecords=20&servicelevel=full&wskey=key'));
         $body = '<foo>,<numberOfRecords>1</numberOfRecords><records><record><recordData>bar</recordData></record></records></foo>';
-        $response = $this->createMock(\Zend\Http\Response::class);
+        $response = $this->createMock(\Laminas\Http\Response::class);
         $response->expects($this->once())->method('getBody')
             ->will($this->returnValue($body));
         $response->expects($this->any())->method('isSuccess')
diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/SearchServiceTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/SearchServiceTest.php
index c62bb7e85be..f777a3db00e 100644
--- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/SearchServiceTest.php
+++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/SearchServiceTest.php
@@ -705,9 +705,9 @@ class SearchServiceTest extends TestCase
         $this->expectException(\VuFindSearch\Exception\RuntimeException::class);
         $this->expectExceptionMessage('Unable to resolve backend: retrieve, junk');
 
-        $mockResponse = $this->createMock(\Zend\EventManager\ResponseCollection::class);
+        $mockResponse = $this->createMock(\Laminas\EventManager\ResponseCollection::class);
         $mockResponse->expects($this->any())->method('stopped')->will($this->returnValue(false));
-        $em = $this->createMock(\Zend\EventManager\EventManagerInterface::class);
+        $em = $this->createMock(\Laminas\EventManager\EventManagerInterface::class);
         $service = new Service();
         $em->expects($this->any())->method('triggerUntil')
             ->with(
@@ -740,7 +740,7 @@ class SearchServiceTest extends TestCase
      */
     protected function getService()
     {
-        $em = $this->createMock(\Zend\EventManager\EventManagerInterface::class);
+        $em = $this->createMock(\Laminas\EventManager\EventManagerInterface::class);
         $service = new SearchServiceMock($this->getBackend());
         $service->setEventManager($em);
         return $service;
diff --git a/module/VuFindTheme/Module.php b/module/VuFindTheme/Module.php
index 529ce805128..fd549f2dc81 100644
--- a/module/VuFindTheme/Module.php
+++ b/module/VuFindTheme/Module.php
@@ -27,8 +27,8 @@
  */
 namespace VuFindTheme;
 
-use Zend\Mvc\View\Http\InjectTemplateListener as ZendInjectTemplateListener;
-use Zend\ServiceManager\Factory\InvokableFactory;
+use Laminas\Mvc\View\Http\InjectTemplateListener as ParentInjectTemplateListener;
+use Laminas\ServiceManager\Factory\InvokableFactory;
 
 /**
  * Module definition for the VuFind theme system.
@@ -49,7 +49,7 @@ class Module
     public function getAutoloaderConfig()
     {
         return [
-            'Zend\Loader\StandardAutoloader' => [
+            'Laminas\Loader\StandardAutoloader' => [
                 'namespaces' => [
                     __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                 ],
@@ -66,7 +66,7 @@ class Module
     {
         return [
             'aliases' => [
-                ZendInjectTemplateListener::class => InjectTemplateListener::class,
+                ParentInjectTemplateListener::class => InjectTemplateListener::class,
             ],
             'factories' => [
                 InjectTemplateListener::class => InvokableFactory::class,
@@ -106,9 +106,10 @@ class Module
             'aliases' => [
                 'headThemeResources' => View\Helper\HeadThemeResources::class,
                 'imageLink' => View\Helper\ImageLink::class,
-                \Zend\View\Helper\HeadLink::class => View\Helper\HeadLink::class,
-                \Zend\View\Helper\HeadScript::class => View\Helper\HeadScript::class,
-                \Zend\View\Helper\InlineScript::class =>
+                \Laminas\View\Helper\HeadLink::class => View\Helper\HeadLink::class,
+                \Laminas\View\Helper\HeadScript::class =>
+                    View\Helper\HeadScript::class,
+                \Laminas\View\Helper\InlineScript::class =>
                     View\Helper\InlineScript::class,
                 'parentTemplate' => View\Helper\ParentTemplate::class,
                 'templatePath' => View\Helper\TemplatePath::class,
diff --git a/module/VuFindTheme/src/VuFindTheme/Initializer.php b/module/VuFindTheme/src/VuFindTheme/Initializer.php
index 70d2441a397..488b654728f 100644
--- a/module/VuFindTheme/src/VuFindTheme/Initializer.php
+++ b/module/VuFindTheme/src/VuFindTheme/Initializer.php
@@ -27,11 +27,11 @@
  */
 namespace VuFindTheme;
 
-use Zend\Config\Config;
-use Zend\Console\Console;
-use Zend\Mvc\MvcEvent;
-use Zend\Stdlib\RequestInterface as Request;
-use Zend\View\Resolver\TemplatePathStack;
+use Laminas\Config\Config;
+use Laminas\Console\Console;
+use Laminas\Mvc\MvcEvent;
+use Laminas\Stdlib\RequestInterface as Request;
+use Laminas\View\Resolver\TemplatePathStack;
 
 /**
  * VuFind Theme Initializer
@@ -52,7 +52,7 @@ class Initializer
     protected $config;
 
     /**
-     * Zend MVC Event
+     * Laminas MVC Event
      *
      * @var MvcEvent
      */
@@ -61,7 +61,7 @@ class Initializer
     /**
      * Top-level service manager
      *
-     * @var \Zend\ServiceManager\ServiceManager
+     * @var \Laminas\ServiceManager\ServiceManager
      */
     protected $serviceManager;
 
@@ -111,7 +111,7 @@ class Initializer
      *   <li>generator - a Generator value to display in the HTML header
      * (optional)</li>
      * </ul>
-     * @param MvcEvent $event  Zend MVC Event object
+     * @param MvcEvent $event  Laminas MVC Event object
      */
     public function __construct(Config $config, MvcEvent $event)
     {
@@ -290,7 +290,7 @@ class Initializer
         $loader = $this->serviceManager->get('ViewHelperManager');
 
         // Register all the helpers:
-        $config = new \Zend\ServiceManager\Config($helpers);
+        $config = new \Laminas\ServiceManager\Config($helpers);
         $config->configureServiceManager($loader);
     }
 
@@ -382,10 +382,10 @@ class Initializer
         if (!empty($pathStack)) {
             try {
                 $translator = $this->serviceManager
-                    ->get(\Zend\Mvc\I18n\Translator::class);
+                    ->get(\Laminas\Mvc\I18n\Translator::class);
                 $pm = $translator->getPluginManager();
                 $pm->get('ExtendedIni')->addToPathStack($pathStack);
-            } catch (\Zend\Mvc\I18n\Exception\BadMethodCallException $e) {
+            } catch (\Laminas\Mvc\I18n\Exception\BadMethodCallException $e) {
                 // This exception likely indicates that translation is disabled,
                 // so we can't proceed.
                 return;
diff --git a/module/VuFindTheme/src/VuFindTheme/InjectTemplateListener.php b/module/VuFindTheme/src/VuFindTheme/InjectTemplateListener.php
index 24733116451..3133ab2dd8a 100644
--- a/module/VuFindTheme/src/VuFindTheme/InjectTemplateListener.php
+++ b/module/VuFindTheme/src/VuFindTheme/InjectTemplateListener.php
@@ -37,7 +37,7 @@ namespace VuFindTheme;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Site
  */
-class InjectTemplateListener extends \Zend\Mvc\View\Http\InjectTemplateListener
+class InjectTemplateListener extends \Laminas\Mvc\View\Http\InjectTemplateListener
 {
     /**
      * Inflect a name to a normalized value
diff --git a/module/VuFindTheme/src/VuFindTheme/LessCompiler.php b/module/VuFindTheme/src/VuFindTheme/LessCompiler.php
index 3b6c2923e20..b931262354b 100644
--- a/module/VuFindTheme/src/VuFindTheme/LessCompiler.php
+++ b/module/VuFindTheme/src/VuFindTheme/LessCompiler.php
@@ -27,7 +27,7 @@
  */
 namespace VuFindTheme;
 
-use Zend\Console\Console;
+use Laminas\Console\Console;
 
 /**
  * Class to compile LESS into CSS within a theme.
diff --git a/module/VuFindTheme/src/VuFindTheme/MixinGenerator.php b/module/VuFindTheme/src/VuFindTheme/MixinGenerator.php
index e7cc4019f57..2d2eb89ef49 100644
--- a/module/VuFindTheme/src/VuFindTheme/MixinGenerator.php
+++ b/module/VuFindTheme/src/VuFindTheme/MixinGenerator.php
@@ -28,7 +28,7 @@
  */
 namespace VuFindTheme;
 
-use Zend\Console\Console;
+use Laminas\Console\Console;
 
 /**
  * Class to generate a new mixin from a template.
diff --git a/module/VuFindTheme/src/VuFindTheme/ThemeGenerator.php b/module/VuFindTheme/src/VuFindTheme/ThemeGenerator.php
index 8ae59b2d347..20d744ab6d1 100644
--- a/module/VuFindTheme/src/VuFindTheme/ThemeGenerator.php
+++ b/module/VuFindTheme/src/VuFindTheme/ThemeGenerator.php
@@ -28,10 +28,10 @@
  */
 namespace VuFindTheme;
 
+use Laminas\Config\Config;
+use Laminas\Console\Console;
 use VuFind\Config\Locator as ConfigLocator;
 use VuFind\Config\Writer as ConfigWriter;
-use Zend\Config\Config;
-use Zend\Console\Console;
 
 /**
  * Class to generate a new theme from a template and reconfigure VuFind to use it.
diff --git a/module/VuFindTheme/src/VuFindTheme/ThemeInfoFactory.php b/module/VuFindTheme/src/VuFindTheme/ThemeInfoFactory.php
index e08ed1fbdc5..906ab3c07bf 100644
--- a/module/VuFindTheme/src/VuFindTheme/ThemeInfoFactory.php
+++ b/module/VuFindTheme/src/VuFindTheme/ThemeInfoFactory.php
@@ -28,7 +28,7 @@
 namespace VuFindTheme;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * ThemeInfo factory.
diff --git a/module/VuFindTheme/src/VuFindTheme/ThemeInfoInjectorFactory.php b/module/VuFindTheme/src/VuFindTheme/ThemeInfoInjectorFactory.php
index 2b781771a7c..79d2a671331 100644
--- a/module/VuFindTheme/src/VuFindTheme/ThemeInfoInjectorFactory.php
+++ b/module/VuFindTheme/src/VuFindTheme/ThemeInfoInjectorFactory.php
@@ -28,7 +28,7 @@
 namespace VuFindTheme;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for objects that depend on the ThemeInfo object.
diff --git a/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadLink.php b/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadLink.php
index 150fec2f076..0e349ac2ad1 100644
--- a/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadLink.php
+++ b/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadLink.php
@@ -38,8 +38,8 @@ use VuFindTheme\ThemeInfo;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class HeadLink extends \Zend\View\Helper\HeadLink
-    implements \Zend\Log\LoggerAwareInterface
+class HeadLink extends \Laminas\View\Helper\HeadLink
+    implements \Laminas\Log\LoggerAwareInterface
 {
     use ConcatTrait;
     use \VuFind\Log\LoggerAwareTrait;
diff --git a/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadScript.php b/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadScript.php
index b8d235e92c0..be1180e60a8 100644
--- a/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadScript.php
+++ b/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadScript.php
@@ -38,8 +38,8 @@ use VuFindTheme\ThemeInfo;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class HeadScript extends \Zend\View\Helper\HeadScript
-    implements \Zend\Log\LoggerAwareInterface
+class HeadScript extends \Laminas\View\Helper\HeadScript
+    implements \Laminas\Log\LoggerAwareInterface
 {
     use ConcatTrait {
         getMinifiedData as getBaseMinifiedData;
diff --git a/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResources.php b/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResources.php
index 69804c642c9..1f8a628ae89 100644
--- a/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResources.php
+++ b/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResources.php
@@ -36,7 +36,7 @@ namespace VuFindTheme\View\Helper;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class HeadThemeResources extends \Zend\View\Helper\AbstractHelper
+class HeadThemeResources extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Theme resource container
diff --git a/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResourcesFactory.php b/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResourcesFactory.php
index a6253e7a1b9..7dfef68873f 100644
--- a/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResourcesFactory.php
+++ b/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResourcesFactory.php
@@ -28,7 +28,7 @@
 namespace VuFindTheme\View\Helper;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for HeadThemeResources view helper.
diff --git a/module/VuFindTheme/src/VuFindTheme/View/Helper/ImageLink.php b/module/VuFindTheme/src/VuFindTheme/View/Helper/ImageLink.php
index 7b0de3ba14b..bb1cd54ee71 100644
--- a/module/VuFindTheme/src/VuFindTheme/View/Helper/ImageLink.php
+++ b/module/VuFindTheme/src/VuFindTheme/View/Helper/ImageLink.php
@@ -36,7 +36,7 @@ namespace VuFindTheme\View\Helper;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org Main Page
  */
-class ImageLink extends \Zend\View\Helper\AbstractHelper
+class ImageLink extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Theme information service
diff --git a/module/VuFindTheme/src/VuFindTheme/View/Helper/ImageLinkFactory.php b/module/VuFindTheme/src/VuFindTheme/View/Helper/ImageLinkFactory.php
index eeda2a5e1d9..eeb97f4bc57 100644
--- a/module/VuFindTheme/src/VuFindTheme/View/Helper/ImageLinkFactory.php
+++ b/module/VuFindTheme/src/VuFindTheme/View/Helper/ImageLinkFactory.php
@@ -28,7 +28,7 @@
 namespace VuFindTheme\View\Helper;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for ImageLink view helper.
diff --git a/module/VuFindTheme/src/VuFindTheme/View/Helper/InlineScript.php b/module/VuFindTheme/src/VuFindTheme/View/Helper/InlineScript.php
index 2ab8754b90d..b4b618dcf3b 100644
--- a/module/VuFindTheme/src/VuFindTheme/View/Helper/InlineScript.php
+++ b/module/VuFindTheme/src/VuFindTheme/View/Helper/InlineScript.php
@@ -38,13 +38,6 @@ namespace VuFindTheme\View\Helper;
  */
 class InlineScript extends HeadScript
 {
-    /**
-     * Registry key for placeholder
-     *
-     * @var string
-     */
-    protected $regKey = 'Zend_View_Helper_InlineScript';
-
     /**
      * Return InlineScript object
      *
diff --git a/module/VuFindTheme/src/VuFindTheme/View/Helper/ParentTemplate.php b/module/VuFindTheme/src/VuFindTheme/View/Helper/ParentTemplate.php
index 836d68e9522..c2cabeeae18 100644
--- a/module/VuFindTheme/src/VuFindTheme/View/Helper/ParentTemplate.php
+++ b/module/VuFindTheme/src/VuFindTheme/View/Helper/ParentTemplate.php
@@ -27,7 +27,7 @@
  */
 namespace VuFindTheme\View\Helper;
 
-use Zend\View\Resolver\TemplatePathStack;
+use Laminas\View\Resolver\TemplatePathStack;
 
 /**
  * Helper to get path to a parent template (for including)
@@ -38,7 +38,7 @@ use Zend\View\Resolver\TemplatePathStack;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class ParentTemplate extends \Zend\View\Helper\AbstractHelper
+class ParentTemplate extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Inheritance stack of template folder paths
diff --git a/module/VuFindTheme/src/VuFindTheme/View/Helper/ParentTemplateFactory.php b/module/VuFindTheme/src/VuFindTheme/View/Helper/ParentTemplateFactory.php
index fbd88bdc06f..aa038be98b1 100644
--- a/module/VuFindTheme/src/VuFindTheme/View/Helper/ParentTemplateFactory.php
+++ b/module/VuFindTheme/src/VuFindTheme/View/Helper/ParentTemplateFactory.php
@@ -28,7 +28,7 @@
 namespace VuFindTheme\View\Helper;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * ParentTemplate helper factory.
@@ -62,7 +62,7 @@ class ParentTemplateFactory implements FactoryInterface
             throw new \Exception('Unexpected options sent to factory.');
         }
         return new $requestedName(
-            $container->get(\Zend\View\Resolver\TemplatePathStack::class)
+            $container->get(\Laminas\View\Resolver\TemplatePathStack::class)
         );
     }
 }
diff --git a/module/VuFindTheme/src/VuFindTheme/View/Helper/PipelineInjectorFactory.php b/module/VuFindTheme/src/VuFindTheme/View/Helper/PipelineInjectorFactory.php
index dc508babdb3..19abf79454e 100644
--- a/module/VuFindTheme/src/VuFindTheme/View/Helper/PipelineInjectorFactory.php
+++ b/module/VuFindTheme/src/VuFindTheme/View/Helper/PipelineInjectorFactory.php
@@ -28,8 +28,8 @@
 namespace VuFindTheme\View\Helper;
 
 use Interop\Container\ContainerInterface;
-use Zend\Config\Config;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\Config\Config;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * Factory for helpers relying on asset pipeline configuration.
diff --git a/module/VuFindTheme/src/VuFindTheme/View/Helper/TemplatePath.php b/module/VuFindTheme/src/VuFindTheme/View/Helper/TemplatePath.php
index 85b97db1d41..6dc3d1fdc48 100644
--- a/module/VuFindTheme/src/VuFindTheme/View/Helper/TemplatePath.php
+++ b/module/VuFindTheme/src/VuFindTheme/View/Helper/TemplatePath.php
@@ -27,7 +27,7 @@
  */
 namespace VuFindTheme\View\Helper;
 
-use Zend\View\Resolver\TemplatePathStack;
+use Laminas\View\Resolver\TemplatePathStack;
 
 /**
  * Helper to get path to a template from another theme (for including)
@@ -38,7 +38,7 @@ use Zend\View\Resolver\TemplatePathStack;
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     https://vufind.org/wiki/development Wiki
  */
-class TemplatePath extends \Zend\View\Helper\AbstractHelper
+class TemplatePath extends \Laminas\View\Helper\AbstractHelper
 {
     /**
      * Absolute path up to the theme name
diff --git a/module/VuFindTheme/src/VuFindTheme/View/Helper/TemplatePathFactory.php b/module/VuFindTheme/src/VuFindTheme/View/Helper/TemplatePathFactory.php
index 36898bf9b1b..c1860545356 100644
--- a/module/VuFindTheme/src/VuFindTheme/View/Helper/TemplatePathFactory.php
+++ b/module/VuFindTheme/src/VuFindTheme/View/Helper/TemplatePathFactory.php
@@ -28,7 +28,7 @@
 namespace VuFindTheme\View\Helper;
 
 use Interop\Container\ContainerInterface;
-use Zend\ServiceManager\Factory\FactoryInterface;
+use Laminas\ServiceManager\Factory\FactoryInterface;
 
 /**
  * TemplatePath helper factory.
@@ -62,7 +62,7 @@ class TemplatePathFactory implements FactoryInterface
             throw new \Exception('Unexpected options sent to factory.');
         }
         return new $requestedName(
-            $container->get(\Zend\View\Resolver\TemplatePathStack::class)
+            $container->get(\Laminas\View\Resolver\TemplatePathStack::class)
         );
     }
 }
diff --git a/module/VuFindTheme/tests/unit-tests/src/VuFindTest/View/Helper/HeadThemeResourcesTest.php b/module/VuFindTheme/tests/unit-tests/src/VuFindTest/View/Helper/HeadThemeResourcesTest.php
index 2f9545f98d4..b13e2aab33e 100644
--- a/module/VuFindTheme/tests/unit-tests/src/VuFindTest/View/Helper/HeadThemeResourcesTest.php
+++ b/module/VuFindTheme/tests/unit-tests/src/VuFindTest/View/Helper/HeadThemeResourcesTest.php
@@ -88,11 +88,11 @@ class HeadThemeResourcesTest extends \VuFindTest\Unit\TestCase
     /**
      * Get a fake view object.
      *
-     * @return \Zend\View\Renderer\PhpRenderer
+     * @return \Laminas\View\Renderer\PhpRenderer
      */
     protected function getMockView()
     {
-        $view = $this->createMock(\Zend\View\Renderer\PhpRenderer::class);
+        $view = $this->createMock(\Laminas\View\Renderer\PhpRenderer::class);
         $view->expects($this->at(0))->method('plugin')
             ->with($this->equalTo('headMeta'))
             ->will($this->returnValue($this->getMockHeadMeta()));
@@ -108,7 +108,7 @@ class HeadThemeResourcesTest extends \VuFindTest\Unit\TestCase
     /**
      * Get a fake HeadMeta helper.
      *
-     * @return \Zend\View\Helper\HeadMeta
+     * @return \Laminas\View\Helper\HeadMeta
      */
     protected function getMockHeadMeta()
     {
@@ -127,7 +127,7 @@ class HeadThemeResourcesTest extends \VuFindTest\Unit\TestCase
     /**
      * Get a fake HeadLink helper.
      *
-     * @return \Zend\View\Helper\HeadLink
+     * @return \Laminas\View\Helper\HeadLink
      */
     protected function getMockHeadLink()
     {
@@ -141,7 +141,7 @@ class HeadThemeResourcesTest extends \VuFindTest\Unit\TestCase
     /**
      * Get a fake HeadScript helper.
      *
-     * @return \Zend\View\Helper\HeadScript
+     * @return \Laminas\View\Helper\HeadScript
      */
     protected function getMockHeadScript()
     {
diff --git a/module/VuFindTheme/tests/unit-tests/src/VuFindTest/View/Helper/ParentTemplateTest.php b/module/VuFindTheme/tests/unit-tests/src/VuFindTest/View/Helper/ParentTemplateTest.php
index a3773cc8873..f29858f5f05 100644
--- a/module/VuFindTheme/tests/unit-tests/src/VuFindTest/View/Helper/ParentTemplateTest.php
+++ b/module/VuFindTheme/tests/unit-tests/src/VuFindTest/View/Helper/ParentTemplateTest.php
@@ -67,7 +67,7 @@ class ParentTemplateTest extends \VuFindTest\Unit\TestCase
     {
         // Get mock TemplateStack
         $stackMock =
-            $this->getMockBuilder(\Zend\View\Resolver\TemplatePathStack::class)
+            $this->getMockBuilder(\Laminas\View\Resolver\TemplatePathStack::class)
             ->disableOriginalConstructor()->getMock();
 
         $return = new \SplStack();
diff --git a/module/VuFindTheme/tests/unit-tests/src/VuFindTest/View/Helper/TemplatePathTest.php b/module/VuFindTheme/tests/unit-tests/src/VuFindTest/View/Helper/TemplatePathTest.php
index 38644f02467..3c42173fe4d 100644
--- a/module/VuFindTheme/tests/unit-tests/src/VuFindTest/View/Helper/TemplatePathTest.php
+++ b/module/VuFindTheme/tests/unit-tests/src/VuFindTest/View/Helper/TemplatePathTest.php
@@ -67,7 +67,7 @@ class TemplatePathTest extends \VuFindTest\Unit\TestCase
     {
         // Get mock TemplateStack
         $stackMock =
-            $this->getMockBuilder(\Zend\View\Resolver\TemplatePathStack::class)
+            $this->getMockBuilder(\Laminas\View\Resolver\TemplatePathStack::class)
             ->disableOriginalConstructor()->getMock();
 
         $return = new \SplStack();
diff --git a/module/finc/src/finc/Exception/DDS.php b/module/finc/src/finc/Exception/DDS.php
index 44981091b0c..1a1a0ccb9b8 100644
--- a/module/finc/src/finc/Exception/DDS.php
+++ b/module/finc/src/finc/Exception/DDS.php
@@ -1,10 +1,10 @@
 <?php
 /**
- * DDS Exception
+ * XSLT importer support methods.
  *
- * PHP version 5
+ * PHP version 7
  *
- * Copyright (C) Leipzig University Library 2016.
+ * Copyright (c) Demian Katz 2010.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2,
@@ -20,22 +20,14 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  *
  * @category VuFind
- * @package  Exceptions
- * @author   Frank Morgner <morgnerf@ub.uni-leipzig.de>
+ * @package  Utilities
+ * @author   Andrew S. Nagy <vufind-tech@lists.sourceforge.net>
+ * @author   Demian Katz <demian.katz@villanova.edu>
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
- * @link     http://vufind.org/wiki/vufind2:developer_manual Wiki
+ * @link     https://vufind.org/wiki/indexing Wiki
  */
-namespace finc\Exception;
 
-/**
- * DDS Exception
- *
- * @category VuFind
- * @package  Exceptions
- * @author   Frank Morgner <morgnerf@ub.uni-leipzig.de>
- * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
- * @link     http://vufind.org/wiki/vufind2:developer_manual Wiki
- */
-class DDS extends \Exception
-{
-}
+// Manipulate command line to load correct route, then run the main index page:
+array_unshift($_SERVER['argv'], array_shift($_SERVER['argv']), 'import', 'import-xsl');
+$_SERVER['argc'] += 2;
+require_once __DIR__ . '/../public/index.php';
diff --git a/module/finc/src/finc/ILS/InitException.php b/module/finc/src/finc/ILS/InitException.php
index 7e7a692cc70..b6468374da8 100644
--- a/module/finc/src/finc/ILS/InitException.php
+++ b/module/finc/src/finc/ILS/InitException.php
@@ -1,9 +1,10 @@
 <?php
 /**
- * Exception thrown in FincLibero::init()
+ * Command-line tool to crawl website for special index.
+ *
  * PHP version 7
  *
- * Copyright (C) Leipzig University Library 2021.
+ * Copyright (c) Demian Katz 2010.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2,
@@ -19,22 +20,14 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  *
  * @category VuFind
- * @package  ILS_Drivers
- * @author   Dorian Merz <merz@ub.uni-leipzig.de>
+ * @package  Utilities
+ * @author   Andrew S. Nagy <vufind-tech@lists.sourceforge.net>
+ * @author   Demian Katz <demian.katz@villanova.edu>
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
- * @link     https://vufind.org/wiki/development:plugins:ils_drivers Wiki
+ * @link     https://vufind.org/wiki/indexing Wiki
  */
-namespace finc\ILS;
 
-/**
- * Exception thrown in FincLibero::init()
- *
- * @category VuFind
- * @package  ILS_Drivers
- * @author   Dorian Merz <merz@ub.uni-leipzig.de>
- * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
- * @link     https://vufind.org/wiki/development:plugins:ils_drivers Wiki
- */
-class InitException extends \Exception
-{
-}
+// Manipulate command line to load correct route, then run the main index page:
+array_unshift($_SERVER['argv'], array_shift($_SERVER['argv']), 'import', 'webcrawl');
+$_SERVER['argc'] += 2;
+require_once __DIR__ . '/../public/index.php';
diff --git a/public/index.php b/public/index.php
index 78117fc5094..125fe7220b5 100644
--- a/public/index.php
+++ b/public/index.php
@@ -75,9 +75,9 @@ if (file_exists('vendor/autoload.php')) {
     $loader = include 'vendor/autoload.php';
 }
 
-if (!class_exists('Zend\Loader\AutoloaderFactory')) {
-    throw new RuntimeException('Unable to load Zend Framework autoloader.');
+if (!class_exists('Laminas\Loader\AutoloaderFactory')) {
+    throw new RuntimeException('Unable to load Laminas autoloader.');
 }
 
 // Run the application!
-Zend\Mvc\Application::init(require 'config/application.config.php')->run();
+Laminas\Mvc\Application::init(require 'config/application.config.php')->run();
diff --git a/themes/bootstrap3/templates/Auth/MultiILS/loginfields.phtml b/themes/bootstrap3/templates/Auth/MultiILS/loginfields.phtml
index a7b253261bd..c82987314c1 100644
--- a/themes/bootstrap3/templates/Auth/MultiILS/loginfields.phtml
+++ b/themes/bootstrap3/templates/Auth/MultiILS/loginfields.phtml
@@ -28,5 +28,5 @@
   $script = "setupMultiILSLoginFields($methods, 'login_{$topClass}_');";
 
   // Inline the script for lightbox compatibility
-  echo $this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET');
+  echo $this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET');
 ?>
diff --git a/themes/bootstrap3/templates/ContentBlock/FacetList.phtml b/themes/bootstrap3/templates/ContentBlock/FacetList.phtml
index a889fb248a7..baf7a90e86b 100644
--- a/themes/bootstrap3/templates/ContentBlock/FacetList.phtml
+++ b/themes/bootstrap3/templates/ContentBlock/FacetList.phtml
@@ -18,7 +18,7 @@ $(document).ready(function() {
   initFacetTree($('#facet_{$this->escapeHtml($field)}'), false);
 });
 JS;
-          echo $this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET');
+          echo $this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET');
         ?>
         <div id="facet_<?=$this->escapeHtml($field)?>_container" class="home-facet <?=$this->escapeHtmlAttr($field)?> hide">
           <h2><?=$this->transEsc('home_browse') . ' ' . $this->transEsc($details['label'])?></h2>
diff --git a/themes/bootstrap3/templates/ContentBlock/IlsStatusMonitor.phtml b/themes/bootstrap3/templates/ContentBlock/IlsStatusMonitor.phtml
index 36d97c56bcd..5095520293a 100644
--- a/themes/bootstrap3/templates/ContentBlock/IlsStatusMonitor.phtml
+++ b/themes/bootstrap3/templates/ContentBlock/IlsStatusMonitor.phtml
@@ -12,5 +12,5 @@ $(document).ready(function() {
   });
 });
 JS;
-echo $this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $ilsStatusScript, 'SET');
+echo $this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $ilsStatusScript, 'SET');
 ?>
diff --git a/themes/bootstrap3/templates/Helpers/doi.phtml b/themes/bootstrap3/templates/Helpers/doi.phtml
index 55f9676ad35..fa14e2e9257 100644
--- a/themes/bootstrap3/templates/Helpers/doi.phtml
+++ b/themes/bootstrap3/templates/Helpers/doi.phtml
@@ -1,2 +1,2 @@
-<?=$this->inlineScript(\Zend\View\Helper\HeadScript::FILE, 'doi.js', 'SET');?>
+<?=$this->inlineScript(\Laminas\View\Helper\HeadScript::FILE, 'doi.js', 'SET');?>
 <span class="doiLink" data-doi="<?=$this->escapeHtml($doi)?>"></span>
\ No newline at end of file
diff --git a/themes/bootstrap3/templates/Helpers/openurl.phtml b/themes/bootstrap3/templates/Helpers/openurl.phtml
index d192d79b626..16954781f22 100644
--- a/themes/bootstrap3/templates/Helpers/openurl.phtml
+++ b/themes/bootstrap3/templates/Helpers/openurl.phtml
@@ -1,5 +1,5 @@
 <?php
-  echo $this->inlineScript(\Zend\View\Helper\HeadScript::FILE, 'openurl.js', 'SET');
+  echo $this->inlineScript(\Laminas\View\Helper\HeadScript::FILE, 'openurl.js', 'SET');
   $classes = '';
   if ($this->openUrlEmbed) {
     $classes = "fulltext";
diff --git a/themes/bootstrap3/templates/Recommend/DOI.phtml b/themes/bootstrap3/templates/Recommend/DOI.phtml
index 384d32735b6..81bf1fae901 100644
--- a/themes/bootstrap3/templates/Recommend/DOI.phtml
+++ b/themes/bootstrap3/templates/Recommend/DOI.phtml
@@ -5,6 +5,6 @@
   </div>
   <?php if ($this->recommend->isFullMatch()): ?>
     <?php $redirect = 'document.location.href = "' . $this->escapeJs($url) . '";'; ?>
-    <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $redirect, 'SET')?>
+    <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $redirect, 'SET')?>
   <?php endif; ?>
 <?php endif; ?>
diff --git a/themes/bootstrap3/templates/Recommend/EuropeanaResultsDeferred.phtml b/themes/bootstrap3/templates/Recommend/EuropeanaResultsDeferred.phtml
index 71299f87d89..92d092ee559 100644
--- a/themes/bootstrap3/templates/Recommend/EuropeanaResultsDeferred.phtml
+++ b/themes/bootstrap3/templates/Recommend/EuropeanaResultsDeferred.phtml
@@ -5,5 +5,5 @@
 ?>
 <div id="EuropeanaDeferredRecommend">
     <p><?=$this->transEsc("Loading")?>... <img src="<?=$this->imageLink('ajax_loading.gif')?>" /></p>
-    <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $loadJs, 'SET')?>
+    <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $loadJs, 'SET')?>
 </div>
diff --git a/themes/bootstrap3/templates/Recommend/MapSelection.phtml b/themes/bootstrap3/templates/Recommend/MapSelection.phtml
index f6956786f56..9253917a19d 100644
--- a/themes/bootstrap3/templates/Recommend/MapSelection.phtml
+++ b/themes/bootstrap3/templates/Recommend/MapSelection.phtml
@@ -48,7 +48,7 @@ EOF;
       <span class="geo_maphelp">&nbsp;<a href="<?php echo $this->url('help-home')?>?topic=geosearch" data-lightbox class="help-link"><?php echo $this->transEsc('Need Help?')?></a></span>
       <div id="geo_search_map" style="height: <?php echo $height?>px;"></div>
     </div>
-    <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $showSelection ? $jsLoad : $addSearchOption, 'SET')?>
+    <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $showSelection ? $jsLoad : $addSearchOption, 'SET')?>
   </div>
   <?php
     // Overwrite leaflet.draw.js tooltips with international translations
@@ -56,5 +56,5 @@ EOF;
       = 'L.drawLocal.draw.handlers.rectangle.tooltip.start = "' . $this->transEsc('draw_searchbox_start') . '";'
       . 'L.drawLocal.draw.handlers.simpleshape.tooltip.end = "' . $this->transEsc('draw_searchbox_end') . '";'
   ?>
-  <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $loadTranslations, 'SET')?>
+  <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $loadTranslations, 'SET')?>
 <?php endif; ?>
diff --git a/themes/bootstrap3/templates/Recommend/OpenLibrarySubjectsDeferred.phtml b/themes/bootstrap3/templates/Recommend/OpenLibrarySubjectsDeferred.phtml
index 0ab09b0806f..f3e1e957417 100644
--- a/themes/bootstrap3/templates/Recommend/OpenLibrarySubjectsDeferred.phtml
+++ b/themes/bootstrap3/templates/Recommend/OpenLibrarySubjectsDeferred.phtml
@@ -5,5 +5,5 @@
 ?>
 <div id="openLibraryDeferredRecommend">
     <p><?=$this->transEsc("Loading")?>... <img src="<?=$this->imageLink('ajax_loading.gif')?>" /></p>
-    <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $loadJs, 'SET')?>
+    <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $loadJs, 'SET')?>
 </div>
diff --git a/themes/bootstrap3/templates/Recommend/PubDateVisAjax.phtml b/themes/bootstrap3/templates/Recommend/PubDateVisAjax.phtml
index 542e4b60e81..32a5a4791c5 100644
--- a/themes/bootstrap3/templates/Recommend/PubDateVisAjax.phtml
+++ b/themes/bootstrap3/templates/Recommend/PubDateVisAjax.phtml
@@ -22,7 +22,7 @@
     $js = "loadVis('" . $this->recommend->getFacetFields() . "', '"
         . $this->recommend->getSearchParams() . "', VuFind.path, "
         . $this->recommend->getZooming() . ");";
-    echo $this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $js, 'SET');
+    echo $this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $js, 'SET');
   ?>
 
 <?php endif; ?>
diff --git a/themes/bootstrap3/templates/Recommend/SideFacets/hierarchical-facet.phtml b/themes/bootstrap3/templates/Recommend/SideFacets/hierarchical-facet.phtml
index e523b829598..ddfb7bd09f8 100644
--- a/themes/bootstrap3/templates/Recommend/SideFacets/hierarchical-facet.phtml
+++ b/themes/bootstrap3/templates/Recommend/SideFacets/hierarchical-facet.phtml
@@ -7,7 +7,7 @@ $(document).ready(function() {
 });
 JS;
   ?>
-  <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET'); ?>
+  <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET'); ?>
 <?php else: ?>
   <?php
   $script = <<<JS
@@ -16,7 +16,7 @@ $('#side-collapse-{$this->escapeHtmlAttr($this->title)}').on('show.bs.collapse',
 });
 JS;
   ?>
-  <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET'); ?>
+  <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET'); ?>
 <?php endif; ?>
 <li id="facet_<?=$this->escapeHtml($this->title)?>" class="jstree-facet"
     data-source="<?=$this->escapeHtml($this->searchClassId)?>"
diff --git a/themes/bootstrap3/templates/Recommend/SideFacets/range-slider.phtml b/themes/bootstrap3/templates/Recommend/SideFacets/range-slider.phtml
index e9281fc6a83..565afff3e0a 100644
--- a/themes/bootstrap3/templates/Recommend/SideFacets/range-slider.phtml
+++ b/themes/bootstrap3/templates/Recommend/SideFacets/range-slider.phtml
@@ -65,5 +65,5 @@ $('#{$this->escapeHtmlAttr($this->title)}from, #{$this->escapeHtmlAttr($this->ti
 });
 JS;
   ?>
-  <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET'); ?>
+  <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET'); ?>
 <?php endif; ?>
diff --git a/themes/bootstrap3/templates/Recommend/SummonBestBetsDeferred.phtml b/themes/bootstrap3/templates/Recommend/SummonBestBetsDeferred.phtml
index 7a2e2490f3a..f3cc10f232d 100644
--- a/themes/bootstrap3/templates/Recommend/SummonBestBetsDeferred.phtml
+++ b/themes/bootstrap3/templates/Recommend/SummonBestBetsDeferred.phtml
@@ -5,5 +5,5 @@
 ?>
 <div id="SummonDeferredBestBets">
   <p><?=$this->transEsc("Loading")?>... <i class="fa fa-spinner" aria-hidden="true"></i></p>
-  <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $loadJs, 'SET')?>
+  <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $loadJs, 'SET')?>
 </div>
diff --git a/themes/bootstrap3/templates/Recommend/SummonDatabasesDeferred.phtml b/themes/bootstrap3/templates/Recommend/SummonDatabasesDeferred.phtml
index 2c0f150f487..0cbd39bf18d 100644
--- a/themes/bootstrap3/templates/Recommend/SummonDatabasesDeferred.phtml
+++ b/themes/bootstrap3/templates/Recommend/SummonDatabasesDeferred.phtml
@@ -5,5 +5,5 @@
 ?>
 <div id="SummonDeferredDatabases">
   <p><?=$this->transEsc("Loading")?>... <i class="fa fa-spinner" aria-hidden="true"></i></p>
-  <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $loadJs, 'SET')?>
+  <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $loadJs, 'SET')?>
 </div>
diff --git a/themes/bootstrap3/templates/Recommend/SummonResultsDeferred.phtml b/themes/bootstrap3/templates/Recommend/SummonResultsDeferred.phtml
index 72c4ce280d3..25291a356c5 100644
--- a/themes/bootstrap3/templates/Recommend/SummonResultsDeferred.phtml
+++ b/themes/bootstrap3/templates/Recommend/SummonResultsDeferred.phtml
@@ -6,5 +6,5 @@
 <div id="SummonDeferredRecommend">
   <h3><?=$this->transEsc("Summon Results")?></h3>
   <p><?=$this->transEsc("Loading")?>... <i class="fa fa-spinner" aria-hidden="true"></i></p>
-  <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $loadJs, 'SET')?>
+  <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $loadJs, 'SET')?>
 </div>
diff --git a/themes/bootstrap3/templates/Recommend/TopFacets.phtml b/themes/bootstrap3/templates/Recommend/TopFacets.phtml
index 88c63586320..13d06f0089b 100644
--- a/themes/bootstrap3/templates/Recommend/TopFacets.phtml
+++ b/themes/bootstrap3/templates/Recommend/TopFacets.phtml
@@ -59,4 +59,4 @@
   <?php endforeach; ?>
 <?php endif; ?>
 
-<?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, 'collapseTopFacets()', 'SET')?>
+<?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, 'collapseTopFacets()', 'SET')?>
diff --git a/themes/bootstrap3/templates/RecordTab/hierarchytree.phtml b/themes/bootstrap3/templates/RecordTab/hierarchytree.phtml
index bb72715d50c..35ec8fad13b 100644
--- a/themes/bootstrap3/templates/RecordTab/hierarchytree.phtml
+++ b/themes/bootstrap3/templates/RecordTab/hierarchytree.phtml
@@ -5,7 +5,7 @@
   $activeTree = $this->tab->getActiveTree();
 
   $this->inlineScript(
-     \Zend\View\Helper\HeadScript::SCRIPT,
+     \Laminas\View\Helper\HeadScript::SCRIPT,
      "var hierarchySettings = {\n"
      . "    lightboxMode: " . ($this->layout()->getTemplate() == 'layout/lightbox' ? 'true' : 'false') . ",\n"
      . "    fullHierarchy: " . ($this->tab->isFullHierarchyVisible() ? 'true' : 'false') . "\n"
@@ -16,8 +16,8 @@
      . ");\n",
      'SET'
   );
-  $this->inlineScript(\Zend\View\Helper\HeadScript::FILE, 'vendor/jsTree/jstree.min.js');
-  $this->inlineScript(\Zend\View\Helper\HeadScript::FILE, 'hierarchyTree.js');
+  $this->inlineScript(\Laminas\View\Helper\HeadScript::FILE, 'vendor/jsTree/jstree.min.js');
+  $this->inlineScript(\Laminas\View\Helper\HeadScript::FILE, 'hierarchyTree.js');
   echo $this->inlineScript();
 ?>
 <?php if (count($hierarchyTreeList) > 1): ?>
diff --git a/themes/bootstrap3/templates/RecordTab/map.phtml b/themes/bootstrap3/templates/RecordTab/map.phtml
index 1126a4eedd5..fe2dcae1d7c 100644
--- a/themes/bootstrap3/templates/RecordTab/map.phtml
+++ b/themes/bootstrap3/templates/RecordTab/map.phtml
@@ -17,5 +17,5 @@
 ?>
 <div id="wrap" style="width: inherit; height: 479px">
   <div id="map-canvas" style="width: 100%; height: 100%"></div>
-  <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $jsLoad, 'SET')?>
+  <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $jsLoad, 'SET')?>
 </div>
diff --git a/themes/bootstrap3/templates/RecordTab/similaritemscarousel.phtml b/themes/bootstrap3/templates/RecordTab/similaritemscarousel.phtml
index 282c490720e..81714331864 100644
--- a/themes/bootstrap3/templates/RecordTab/similaritemscarousel.phtml
+++ b/themes/bootstrap3/templates/RecordTab/similaritemscarousel.phtml
@@ -68,4 +68,4 @@ function normalizeHeights() {
 $('#similar-items-carousel img').load(normalizeHeights);
 JS;
 ?>
-<?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET') ?>
+<?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET') ?>
diff --git a/themes/bootstrap3/templates/cart/cart.phtml b/themes/bootstrap3/templates/cart/cart.phtml
index d81bd52c547..15fc84a3150 100644
--- a/themes/bootstrap3/templates/cart/cart.phtml
+++ b/themes/bootstrap3/templates/cart/cart.phtml
@@ -64,4 +64,4 @@
   }
 JS;
 ?>
-<?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET') ?>
+<?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET') ?>
diff --git a/themes/bootstrap3/templates/cart/email.phtml b/themes/bootstrap3/templates/cart/email.phtml
index cf502474aac..e4dc8d24ff3 100644
--- a/themes/bootstrap3/templates/cart/email.phtml
+++ b/themes/bootstrap3/templates/cart/email.phtml
@@ -38,4 +38,4 @@
     $('#itemhide').removeClass('in');
 JS;
 ?>
-<?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET') ?>
+<?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET') ?>
diff --git a/themes/bootstrap3/templates/cart/export.phtml b/themes/bootstrap3/templates/cart/export.phtml
index 038e28fb5ad..c6be7a6c043 100644
--- a/themes/bootstrap3/templates/cart/export.phtml
+++ b/themes/bootstrap3/templates/cart/export.phtml
@@ -68,4 +68,4 @@
   }).trigger('change');
 JS;
 ?>
-<?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET') ?>
+<?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET') ?>
diff --git a/themes/bootstrap3/templates/cart/save.phtml b/themes/bootstrap3/templates/cart/save.phtml
index 9922b5936bf..a7c0532f7fe 100644
--- a/themes/bootstrap3/templates/cart/save.phtml
+++ b/themes/bootstrap3/templates/cart/save.phtml
@@ -66,4 +66,4 @@
   $('#itemhide').removeClass('in');
 JS;
 ?>
-<?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET') ?>
+<?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET') ?>
diff --git a/themes/bootstrap3/templates/collection/view.phtml b/themes/bootstrap3/templates/collection/view.phtml
index 11a24592088..1516360c6c8 100644
--- a/themes/bootstrap3/templates/collection/view.phtml
+++ b/themes/bootstrap3/templates/collection/view.phtml
@@ -75,4 +75,4 @@
     <?=$this->driver->supportsCoinsOpenURL()?'<span class="Z3988" title="' . $this->escapeHtmlAttr($this->driver->getCoinsOpenURL()) . '"></span>':''?>
   </div>
 </div>
-<?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, '$(document).ready(recordDocReady);', 'SET'); ?>
+<?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, '$(document).ready(recordDocReady);', 'SET'); ?>
diff --git a/themes/bootstrap3/templates/combined/results-ajax.phtml b/themes/bootstrap3/templates/combined/results-ajax.phtml
index d60e5c7cec1..b9240468524 100644
--- a/themes/bootstrap3/templates/combined/results-ajax.phtml
+++ b/themes/bootstrap3/templates/combined/results-ajax.phtml
@@ -25,5 +25,5 @@ JS;
 ?>
 <h2><?=$this->transEsc($currentSearch['label'])?></h2>
 <p><i class="fa fa-spinner fa-spin" aria-hidden="true"></i> <?=$this->transEsc("Loading")?>...</p>
-<?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $loadJs, 'SET')?>
+<?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $loadJs, 'SET')?>
 <noscript><?=$this->transEsc('Please enable JavaScript.')?></noscript>
diff --git a/themes/bootstrap3/templates/devtools/language.phtml b/themes/bootstrap3/templates/devtools/language.phtml
index f03705aee16..301a1f48606 100644
--- a/themes/bootstrap3/templates/devtools/language.phtml
+++ b/themes/bootstrap3/templates/devtools/language.phtml
@@ -51,4 +51,4 @@
   var diffManager = createDiffManager();
 JS;
 ?>
-<?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET') ?>
+<?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET') ?>
diff --git a/themes/bootstrap3/templates/layout/layout.phtml b/themes/bootstrap3/templates/layout/layout.phtml
index ee5253463a2..ff0c4d074da 100644
--- a/themes/bootstrap3/templates/layout/layout.phtml
+++ b/themes/bootstrap3/templates/layout/layout.phtml
@@ -202,7 +202,7 @@ JS;
     <?=$this->googleanalytics()?>
     <?=$this->piwik()?>
     <?php if ($this->recaptcha()->active()): ?>
-      <?=$this->inlineScript(\Zend\View\Helper\HeadScript::FILE, "https://www.google.com/recaptcha/api.js?onload=recaptchaOnLoad&render=explicit&hl=" . $this->layout()->userLang, 'SET')?>
+      <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::FILE, "https://www.google.com/recaptcha/api.js?onload=recaptchaOnLoad&render=explicit&hl=" . $this->layout()->userLang, 'SET')?>
     <?php endif; ?>
   </body>
 </html>
diff --git a/themes/bootstrap3/templates/librarycards/editcard.phtml b/themes/bootstrap3/templates/librarycards/editcard.phtml
index 7d8e40684fe..83f80888e3b 100644
--- a/themes/bootstrap3/templates/librarycards/editcard.phtml
+++ b/themes/bootstrap3/templates/librarycards/editcard.phtml
@@ -55,6 +55,6 @@
     $script = "setupMultiILSLoginFields($methods, 'login_');";
 
     // Inline the script for lightbox compatibility
-    echo $this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET');
+    echo $this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET');
   }
 ?>
diff --git a/themes/bootstrap3/templates/myresearch/cataloglogin.phtml b/themes/bootstrap3/templates/myresearch/cataloglogin.phtml
index 3a2eb713ef2..d5776eb4208 100644
--- a/themes/bootstrap3/templates/myresearch/cataloglogin.phtml
+++ b/themes/bootstrap3/templates/myresearch/cataloglogin.phtml
@@ -56,7 +56,7 @@
       $script = "setupMultiILSLoginFields($methods, 'profile_cat_');";
 
       // Inline the script for lightbox compatibility
-      echo $this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET');
+      echo $this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET');
     }
   ?>
 <?php endif; ?>
diff --git a/themes/bootstrap3/templates/myresearch/deleteaccount.phtml b/themes/bootstrap3/templates/myresearch/deleteaccount.phtml
index 140d2fc16ec..a011310dd91 100644
--- a/themes/bootstrap3/templates/myresearch/deleteaccount.phtml
+++ b/themes/bootstrap3/templates/myresearch/deleteaccount.phtml
@@ -7,7 +7,7 @@
       // Logout redirect with inline script to make it lightbox compatible
       $script = "setTimeout(function() { window.location = '{$this->redirectUrl}'; }, 3000);";
     ?>
-    <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET'); ?>
+    <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET'); ?>
   </div>
 <?php else: ?>
   <form id="delete-account" method="post" action="<?=$this->url('myresearch-deleteaccount') ?>" name="deleteAccount">
diff --git a/themes/bootstrap3/templates/record/sms.phtml b/themes/bootstrap3/templates/record/sms.phtml
index 4bb8f8a3dca..e06e1364454 100644
--- a/themes/bootstrap3/templates/record/sms.phtml
+++ b/themes/bootstrap3/templates/record/sms.phtml
@@ -1,7 +1,7 @@
 <?php
   // Set page title.
   $this->headTitle($this->translate('Text this'));
-  echo $this->inlineScript(\Zend\View\Helper\HeadScript::FILE, 'vendor/libphonenumber.js', 'SET');
+  echo $this->inlineScript(\Laminas\View\Helper\HeadScript::FILE, 'vendor/libphonenumber.js', 'SET');
 
   // Set up breadcrumbs:
   $this->layout()->breadcrumbs = '<li>' . $this->searchMemory()->getLastSearchLink($this->transEsc('Search'), '', '</li> ')
@@ -14,7 +14,7 @@
   }
 JS;
 ?>
-<?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $validatorCallback, 'SET'); ?>
+<?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $validatorCallback, 'SET'); ?>
 <h2><?=$this->transEsc('Text this') ?>: <span class="title-in-heading"><?=$this->escapeHtml($this->driver->getBreadcrumb())?></span></h2>
 <form method="post" name="smsRecord" class="form-record-sms"<?php if(isset($this->validation) && !empty($this->validation)):?> data-lightbox-onsubmit="phoneNumberValidation"<?php endif; ?>>
   <?=$this->flashmessages()?>
diff --git a/themes/bootstrap3/templates/record/view.phtml b/themes/bootstrap3/templates/record/view.phtml
index efaf4538156..81d578cf244 100644
--- a/themes/bootstrap3/templates/record/view.phtml
+++ b/themes/bootstrap3/templates/record/view.phtml
@@ -77,4 +77,4 @@
     <?php endforeach; ?>
   </div>
 </div>
-<?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, '$(document).ready(recordDocReady);', 'SET'); ?>
+<?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, '$(document).ready(recordDocReady);', 'SET'); ?>
diff --git a/themes/bootstrap3/templates/relais/button.phtml b/themes/bootstrap3/templates/relais/button.phtml
index 335b09a20f1..74a5d2e1496 100644
--- a/themes/bootstrap3/templates/relais/button.phtml
+++ b/themes/bootstrap3/templates/relais/button.phtml
@@ -26,6 +26,6 @@
     $oclc = $this->escapeJs($driver->tryMethod('getCleanOCLCNum'));
     $failLink = $this->escapeJs($this->relais()->getSearchLink($driver));
     $activateRelais = "$(document).ready(function() { VuFind.relais.checkAvailability('$addLink', '$oclc', '$failLink') });";
-    echo $this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $activateRelais, 'SET');
+    echo $this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $activateRelais, 'SET');
   }
 ?>
\ No newline at end of file
diff --git a/themes/bootstrap3/templates/relais/request.phtml b/themes/bootstrap3/templates/relais/request.phtml
index 70740d0e16d..1f60af2cb51 100644
--- a/themes/bootstrap3/templates/relais/request.phtml
+++ b/themes/bootstrap3/templates/relais/request.phtml
@@ -10,5 +10,5 @@
 <?php
   $this->headScript()->appendFile('relais.js');
   $activateRelais = "$(document).ready(function () { VuFind.relais.addItem('$oclc', '$failLink'); });\n";
-  echo $this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $activateRelais, 'SET')
+  echo $this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $activateRelais, 'SET')
 ?>
diff --git a/themes/bootstrap3/templates/search/advanced/eds.phtml b/themes/bootstrap3/templates/search/advanced/eds.phtml
index 99913e3baaa..5584357c8df 100644
--- a/themes/bootstrap3/templates/search/advanced/eds.phtml
+++ b/themes/bootstrap3/templates/search/advanced/eds.phtml
@@ -123,6 +123,6 @@ $(document).ready(function() {
 });
 JS;
     ?>
-    <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET'); ?>
+    <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET'); ?>
   </fieldset>
 <?php endif; ?>
diff --git a/themes/bootstrap3/templates/search/advanced/ranges.phtml b/themes/bootstrap3/templates/search/advanced/ranges.phtml
index 8e3de488cb0..9cf2f1fb8eb 100644
--- a/themes/bootstrap3/templates/search/advanced/ranges.phtml
+++ b/themes/bootstrap3/templates/search/advanced/ranges.phtml
@@ -66,7 +66,7 @@ $('#{$escField}from, #{$escField}to').change(function () {
 });
 JS;
         ?>
-        <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET'); ?>
+        <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET'); ?>
       <?php endif; ?>
     </fieldset>
   <?php endforeach; ?>
diff --git a/themes/bootstrap3/templates/search/facet-list.phtml b/themes/bootstrap3/templates/search/facet-list.phtml
index 181bca6ec2d..f1fc812acd1 100644
--- a/themes/bootstrap3/templates/search/facet-list.phtml
+++ b/themes/bootstrap3/templates/search/facet-list.phtml
@@ -51,4 +51,4 @@
   <?php endforeach; ?>
 </div>
 <button class="btn btn-default lightbox-only" data-dismiss="modal"><?=$this->translate('close') ?></button>
-<?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, '(typeof VuFind.lightbox_facets !== "undefined") && VuFind.lightbox_facets.setup();', 'SET'); ?>
+<?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, '(typeof VuFind.lightbox_facets !== "undefined") && VuFind.lightbox_facets.setup();', 'SET'); ?>
diff --git a/themes/bootstrap3/templates/search/history.phtml b/themes/bootstrap3/templates/search/history.phtml
index 5c6f790a4cf..8d69434b857 100644
--- a/themes/bootstrap3/templates/search/history.phtml
+++ b/themes/bootstrap3/templates/search/history.phtml
@@ -63,4 +63,4 @@ $(".search-schedule-header").popover({
 })
 JS;
 ?>
-<?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET') ?>
+<?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET') ?>
diff --git a/themes/bootstrap3/templates/search/home.phtml b/themes/bootstrap3/templates/search/home.phtml
index f9c8cff4cbb..ee530a73b3e 100644
--- a/themes/bootstrap3/templates/search/home.phtml
+++ b/themes/bootstrap3/templates/search/home.phtml
@@ -15,7 +15,7 @@
 
 <div class="searchHomeContent">
   <?=$this->context($this)->renderInContext("search/searchbox.phtml", ['ignoreHiddenFilterMemory' => true])?>
-  <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, '$("#searchForm_lookfor").focus();', 'SET'); ?>
+  <?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, '$("#searchForm_lookfor").focus();', 'SET'); ?>
 </div>
 
 <?=implode('', array_map([$this, 'contentBlock'], $blocks ?? []))?>
\ No newline at end of file
diff --git a/themes/bootstrap3/theme.config.php b/themes/bootstrap3/theme.config.php
index 733dd1aa5cb..5b90a4fe265 100644
--- a/themes/bootstrap3/theme.config.php
+++ b/themes/bootstrap3/theme.config.php
@@ -28,10 +28,10 @@ return [
     'helpers' => [
         'factories' => [
             'VuFind\View\Helper\Bootstrap3\Flashmessages' => 'VuFind\View\Helper\Root\FlashmessagesFactory',
-            'VuFind\View\Helper\Bootstrap3\Highlight' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Bootstrap3\Highlight' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\View\Helper\Bootstrap3\LayoutClass' => 'VuFind\View\Helper\Bootstrap3\LayoutClassFactory',
             'VuFind\View\Helper\Bootstrap3\Recaptcha' => 'VuFind\View\Helper\Root\RecaptchaFactory',
-            'VuFind\View\Helper\Bootstrap3\Search' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Bootstrap3\Search' => 'Laminas\ServiceManager\Factory\InvokableFactory',
         ],
         'aliases' => [
             'flashmessages' => 'VuFind\View\Helper\Bootstrap3\Flashmessages',
diff --git a/themes/root/theme.config.php b/themes/root/theme.config.php
index d7c3d2d3b27..95077af0969 100644
--- a/themes/root/theme.config.php
+++ b/themes/root/theme.config.php
@@ -4,18 +4,18 @@ return [
     'helpers' => [
         'factories' => [
             'VuFind\View\Helper\Root\AccountCapabilities' => 'VuFind\View\Helper\Root\AccountCapabilitiesFactory',
-            'VuFind\View\Helper\Root\AddEllipsis' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\AddEllipsis' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\View\Helper\Root\AddThis' => 'VuFind\View\Helper\Root\AddThisFactory',
             'VuFind\View\Helper\Root\AlphaBrowse' => 'VuFind\View\Helper\Root\AlphaBrowseFactory',
             'VuFind\View\Helper\Root\Auth' => 'VuFind\View\Helper\Root\AuthFactory',
             'VuFind\View\Helper\Root\AuthorNotes' => 'VuFind\View\Helper\Root\ContentLoaderFactory',
-            'VuFind\View\Helper\Root\Browse' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\Browse' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\View\Helper\Root\Cart' => 'VuFind\View\Helper\Root\CartFactory',
             'VuFind\View\Helper\Root\Citation' => 'VuFind\View\Helper\Root\CitationFactory',
             'VuFind\View\Helper\Root\Config' => 'VuFind\View\Helper\Root\ConfigFactory',
-            'VuFind\View\Helper\Root\ContentBlock' => 'Zend\ServiceManager\Factory\InvokableFactory',
-            'VuFind\View\Helper\Root\Context' => 'Zend\ServiceManager\Factory\InvokableFactory',
-            'VuFind\View\Helper\Root\CurrentPath' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\ContentBlock' => 'Laminas\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\Context' => 'Laminas\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\CurrentPath' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\View\Helper\Root\DateTime' => 'VuFind\View\Helper\Root\DateTimeFactory',
             'VuFind\View\Helper\Root\DisplayLanguageOption' => 'VuFind\View\Helper\Root\DisplayLanguageOptionFactory',
             'VuFind\View\Helper\Root\Doi' => 'VuFind\View\Helper\Root\DoiFactory',
@@ -25,29 +25,29 @@ return [
             'VuFind\View\Helper\Root\GeoCoords' => 'VuFind\View\Helper\Root\GeoCoordsFactory',
             'VuFind\View\Helper\Root\GoogleAnalytics' => 'VuFind\View\Helper\Root\GoogleAnalyticsFactory',
             'VuFind\View\Helper\Root\HelpText' => 'VuFind\View\Helper\Root\HelpTextFactory',
-            'VuFind\View\Helper\Root\Highlight' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\Highlight' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\View\Helper\Root\HistoryLabel' => 'VuFind\View\Helper\Root\HistoryLabelFactory',
             'VuFind\View\Helper\Root\Ils' => 'VuFind\View\Helper\Root\IlsFactory',
             'VuFind\View\Helper\Root\JsTranslations' => 'VuFind\View\Helper\Root\JsTranslationsFactory',
             'VuFind\View\Helper\Root\KeepAlive' => 'VuFind\View\Helper\Root\KeepAliveFactory',
-            'VuFind\View\Helper\Root\Linkify' => 'Zend\ServiceManager\Factory\InvokableFactory',
-            'VuFind\View\Helper\Root\LocalizedNumber' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\Linkify' => 'Laminas\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\LocalizedNumber' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\View\Helper\Root\Markdown' => 'VuFind\View\Helper\Root\MarkdownFactory',
             'VuFind\View\Helper\Root\Metadata' => 'VuFind\View\Helper\Root\MetadataFactory',
             'VuFind\View\Helper\Root\OpenUrl' => 'VuFind\View\Helper\Root\OpenUrlFactory',
             'VuFind\View\Helper\Root\Overdrive' => 'VuFind\View\Helper\Root\OverdriveFactory',
             'VuFind\View\Helper\Root\Permission' => 'VuFind\View\Helper\Root\PermissionFactory',
             'VuFind\View\Helper\Root\Piwik' => 'VuFind\View\Helper\Root\PiwikFactory',
-            'VuFind\View\Helper\Root\Printms' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\Printms' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\View\Helper\Root\ProxyUrl' => 'VuFind\View\Helper\Root\ProxyUrlFactory',
             'VuFind\View\Helper\Root\Recaptcha' => 'VuFind\View\Helper\Root\RecaptchaFactory',
-            'VuFind\View\Helper\Root\Recommend' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\Recommend' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\View\Helper\Root\Record' => 'VuFind\View\Helper\Root\RecordFactory',
             'VuFind\View\Helper\Root\RecordDataFormatter' => 'VuFind\View\Helper\Root\RecordDataFormatterFactory',
             'VuFind\View\Helper\Root\RecordLink' => 'VuFind\View\Helper\Root\RecordLinkFactory',
             'VuFind\View\Helper\Root\Relais' => 'VuFind\View\Helper\Root\RelaisFactory',
             'VuFind\View\Helper\Root\Related' => 'VuFind\View\Helper\Root\RelatedFactory',
-            'VuFind\View\Helper\Root\RenderArray' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\RenderArray' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\View\Helper\Root\ResultFeed' => 'VuFind\View\Helper\Root\ResultFeedFactory',
             'VuFind\View\Helper\Root\SafeMoneyFormat' => 'VuFind\View\Helper\Root\SafeMoneyFormatFactory',
             'VuFind\View\Helper\Root\SearchBox' => 'VuFind\View\Helper\Root\SearchBoxFactory',
@@ -56,19 +56,19 @@ return [
             'VuFind\View\Helper\Root\SearchParams' => 'VuFind\View\Helper\Root\SearchParamsFactory',
             'VuFind\View\Helper\Root\SearchTabs' => 'VuFind\View\Helper\Root\SearchTabsFactory',
             'VuFind\View\Helper\Root\ShortenUrl' => 'VuFind\View\Helper\Root\ShortenUrlFactory',
-            'VuFind\View\Helper\Root\SortFacetList' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\SortFacetList' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\View\Helper\Root\Summaries' => 'VuFind\View\Helper\Root\ContentLoaderFactory',
-            'VuFind\View\Helper\Root\Summon' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\Summon' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\View\Helper\Root\SyndeticsPlus' => 'VuFind\View\Helper\Root\SyndeticsPlusFactory',
             'VuFind\View\Helper\Root\SystemEmail' => 'VuFind\View\Helper\Root\SystemEmailFactory',
-            'VuFind\View\Helper\Root\TransEsc' => 'Zend\ServiceManager\Factory\InvokableFactory',
-            'VuFind\View\Helper\Root\TransEscWithPrefix' => 'Zend\ServiceManager\Factory\InvokableFactory',
-            'VuFind\View\Helper\Root\Translate' => 'Zend\ServiceManager\Factory\InvokableFactory',
-            'VuFind\View\Helper\Root\Truncate' => 'Zend\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\TransEsc' => 'Laminas\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\TransEscWithPrefix' => 'Laminas\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\Translate' => 'Laminas\ServiceManager\Factory\InvokableFactory',
+            'VuFind\View\Helper\Root\Truncate' => 'Laminas\ServiceManager\Factory\InvokableFactory',
             'VuFind\View\Helper\Root\Url' => 'VuFind\View\Helper\Root\UrlFactory',
             'VuFind\View\Helper\Root\UserList' => 'VuFind\View\Helper\Root\UserListFactory',
             'VuFind\View\Helper\Root\UserTags' => 'VuFind\View\Helper\Root\UserTagsFactory',
-            'Zend\View\Helper\ServerUrl' => 'VuFind\View\Helper\Root\ServerUrlFactory',
+            'Laminas\View\Helper\ServerUrl' => 'VuFind\View\Helper\Root\ServerUrlFactory',
         ],
         'aliases' => [
             'accountCapabilities' => 'VuFind\View\Helper\Root\AccountCapabilities',
@@ -135,7 +135,7 @@ return [
             'truncate' => 'VuFind\View\Helper\Root\Truncate',
             'userlist' => 'VuFind\View\Helper\Root\UserList',
             'usertags' => 'VuFind\View\Helper\Root\UserTags',
-            'Zend\View\Helper\Url' => 'VuFind\View\Helper\Root\Url',
+            'Laminas\View\Helper\Url' => 'VuFind\View\Helper\Root\Url',
         ]
     ],
 ];
diff --git a/util/commit.php b/util/commit.php
index 35fb75d6bf8..4e2735ebcb4 100644
--- a/util/commit.php
+++ b/util/commit.php
@@ -26,7 +26,7 @@
  * @link     https://vufind.org/wiki/performance#index_optimization Wiki
  */
 
-// Manipulate command line to load correct route, then load Zend Framework:
+// Manipulate command line to load correct route, then run the main index page:
 array_unshift($_SERVER['argv'], array_shift($_SERVER['argv']), 'util', 'commit');
 $_SERVER['argc'] += 2;
 require_once __DIR__ . '/../public/index.php';
diff --git a/util/createHierarchyTrees.php b/util/createHierarchyTrees.php
index 0ec9eb7b907..92b654dfd99 100644
--- a/util/createHierarchyTrees.php
+++ b/util/createHierarchyTrees.php
@@ -32,7 +32,7 @@
  * @link     https://vufind.org/wiki Wiki
  */
 
-// Manipulate command line to load correct route, then load Zend Framework:
+// Manipulate command line to load correct route, then run the main index page:
 array_unshift($_SERVER['argv'], array_shift($_SERVER['argv']), 'util', 'createHierarchyTrees');
 $_SERVER['argc'] += 2;
 require_once __DIR__ . '/../public/index.php';
diff --git a/util/cssBuilder.php b/util/cssBuilder.php
index cc82ccd0acd..b89122d27b8 100644
--- a/util/cssBuilder.php
+++ b/util/cssBuilder.php
@@ -26,7 +26,7 @@
  * @link     https://vufind.org/wiki Wiki
  */
 
-// Manipulate command line to load correct route, then load Zend Framework:
+// Manipulate command line to load correct route, then run the main index page:
 array_unshift($_SERVER['argv'], array_shift($_SERVER['argv']), 'util', 'cssBuilder');
 $_SERVER['argc'] += 2;
 require_once __DIR__ . '/../public/index.php';
diff --git a/util/deletes.php b/util/deletes.php
index b29656e32ec..3fc0adf2e3a 100644
--- a/util/deletes.php
+++ b/util/deletes.php
@@ -27,7 +27,7 @@
  * @link     https://vufind.org/wiki/automation Wiki
  */
 
-// Manipulate command line to load correct route, then load Zend Framework:
+// Manipulate command line to load correct route, then run the main index page:
 array_unshift($_SERVER['argv'], array_shift($_SERVER['argv']), 'util', 'deletes');
 $_SERVER['argc'] += 2;
 require_once __DIR__ . '/../public/index.php';
diff --git a/util/expire_searches.php b/util/expire_searches.php
index 2ad488392c4..5ea45a14452 100644
--- a/util/expire_searches.php
+++ b/util/expire_searches.php
@@ -26,7 +26,7 @@
  * @link     https://vufind.org/jira/browse/VUFIND-235 JIRA Ticket
  */
 
-// Manipulate command line to load correct route, then load Zend Framework:
+// Manipulate command line to load correct route, then run the main index page:
 array_unshift($_SERVER['argv'], array_shift($_SERVER['argv']), 'util', 'expire_searches');
 $_SERVER['argc'] += 2;
 require_once __DIR__ . '/../public/index.php';
diff --git a/util/expire_sessions.php b/util/expire_sessions.php
index 75968ec461f..ee2a64ac773 100644
--- a/util/expire_sessions.php
+++ b/util/expire_sessions.php
@@ -26,7 +26,7 @@
  * @link     https://vufind.org/jira/browse/VUFIND-235 JIRA Ticket
  */
 
-// Manipulate command line to load correct route, then load Zend Framework:
+// Manipulate command line to load correct route, then run the main index page:
 array_unshift($_SERVER['argv'], array_shift($_SERVER['argv']), 'util', 'expire_sessions');
 $_SERVER['argc'] += 2;
 require_once __DIR__ . '/../public/index.php';
diff --git a/util/index_reserves.php b/util/index_reserves.php
index 6d1d1051067..9111a4ff7ea 100644
--- a/util/index_reserves.php
+++ b/util/index_reserves.php
@@ -26,7 +26,7 @@
  * @link     https://vufind.org/wiki Wiki
  */
 
-// Manipulate command line to load correct route, then load Zend Framework:
+// Manipulate command line to load correct route, then run the main index page:
 array_unshift($_SERVER['argv'], array_shift($_SERVER['argv']), 'util', 'index_reserves');
 $_SERVER['argc'] += 2;
 require_once __DIR__ . '/../public/index.php';
diff --git a/util/optimize.php b/util/optimize.php
index 1fad42d30a0..e1889884b7c 100644
--- a/util/optimize.php
+++ b/util/optimize.php
@@ -26,7 +26,7 @@
  * @link     https://vufind.org/wiki/performance#index_optimization Wiki
  */
 
-// Manipulate command line to load correct route, then load Zend Framework:
+// Manipulate command line to load correct route, then run the main index page:
 array_unshift($_SERVER['argv'], array_shift($_SERVER['argv']), 'util', 'optimize');
 $_SERVER['argc'] += 2;
 require_once __DIR__ . '/../public/index.php';
diff --git a/util/sitemap.php b/util/sitemap.php
index a2976724b29..474ac66295e 100644
--- a/util/sitemap.php
+++ b/util/sitemap.php
@@ -26,7 +26,7 @@
  * @link     https://vufind.org/wiki/search_engine_optimization Wiki
  */
  
-// Manipulate command line to load correct route, then load Zend Framework:
+// Manipulate command line to load correct route, then run the main index page:
 array_unshift($_SERVER['argv'], array_shift($_SERVER['argv']), 'util', 'sitemap');
 $_SERVER['argc'] += 2;
 require_once __DIR__ . '/../public/index.php';
diff --git a/util/suppressed.php b/util/suppressed.php
index 52c6b417a0b..4f951274a6c 100644
--- a/util/suppressed.php
+++ b/util/suppressed.php
@@ -27,7 +27,7 @@
  * @link     https://vufind.org/wiki/automation Wiki
  */
 
-// Manipulate command line to load correct route, then load Zend Framework:
+// Manipulate command line to load correct route, then run the main index page:
 array_unshift($_SERVER['argv'], array_shift($_SERVER['argv']), 'util', 'suppressed');
 $_SERVER['argc'] += 2;
 require_once __DIR__ . '/../public/index.php';
-- 
GitLab