diff --git a/composer.json b/composer.json
index 2a24f0a047dbe67ccf881121b8e4d593a261be50..d5bf6cb00e00ccee91c2ce9f7ad6bf10bb012c95 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 504a4e8b0a8ae55598570610346c9cd5e2d7863c..6ad0ca2ff11cc7e5c94aa6261eca389d34afe21f 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 204091ce3d179a988235592bc255132f1b698621..04d3e88b76d508db42d48e382535fcbd944432e9 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 33fb69634857d238189300a9e8de3f08ca945b2e..fdb631710359024061a86af02933d9e7d57b9923 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 97b0cfe2e0c3a3dddf97d6318c402369fca6b862..122e66446140aeb280d628c56dc8573527d2474f 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 bb45d469ca980f28eec7119a3928940b345e7330..7863e4cffd54b8c7710f812f21970c4322c1fdc0 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 f85c46fcaeb1807f2c37701488c43edbfcadf8f9..e5cd9e8d92a14ce655909c7c1c8ecc2e12dfa1c7 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 ae94f69f35170a3451a16ab4a397aa6314406e15..1f7669302c1f76d61bce93c9dcd7fdae202ed957 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 52c111b9c54150ca6c309f2d350e53249e52bcfb..9ab81d48ae7bb4d149ac443a7be55657b3810f47 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 2c2a192978661925ad0f2238773a23a418634f46..58580244d45943663837346e1c2542328a9162ed 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 7cb9b514050c07ff24298887c9945424e4442f2a..d4c05aa88c022d49eb488319b5b3b7421ab53a29 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 32e9bad7a5b381254b698e97f99743d259e696ca..796499b4674ec412276f70ae9fc005eafd5411ff 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 cf95eee6ecaa449f91cd0b64750ed2a6a3b5feb4..af0aeb3be6898be503f99cf85710b7641f112268 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 c3f04c2ff316a68aba6aa381a6c84ba88ee509ab..4e4539d4cd8ac884d8e71614037ff3ef2140c986 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 b4b7d987eddf7710866244c703525dfa8876e0a6..176377510a73b3557ad88db0007555e9a82e66d0 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 bbeec5783b730ff1bbe1660e2742bc212410b78a..71cac3eabc346fdd70e8022a9f6f166baa0885c3 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 041b3e308d5f0559ed1cf1cd55ea0d016d335bb3..13ae91a6f5b1706f49c0df7da8ceb72b10118b22 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 df2b2c4efe278a7818e36f677642ceab7d17268d..e30d067cbe57302649f1dff2a29b96410368ae61 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 7cb271109c46a5ee6f69cc71b8f4f2c768613414..2ebf3b751a32d24fd26982f260681ae0ca05c5ee 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 3eb2ebca3ed26ba155bc9fe30ede5585dada4315..b93db0c70a27d93220bf8b9286cb7f979cdf337d 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 8bb5bc9604e349697adcf0746dbf38d680be1f8e..ac5eede88ea3b0fa2412473d142d78196ac05438 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 3ec532e9246e7e7ca160eea7433111d8f965b8af..b0c57220e75f28baae0e94488c414064ae1e0d90 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 deb055ba809529152658c3fcce3df421663455b3..c908be0f6645219d70e45e4fce2992c670ea3b31 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 d7a1b30c81268c247cbbe3bcc12b4c276fa674aa..f9261996c9574a87977685ce79f10e69d538e3e2 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 50ab877b489fccfc841019ce11616e3f1d920d53..36bb442c5488a92eb4c2639f1a9dadf2b417d1e2 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 6006304bbbf74f6c05f30fbec4d7879e4d3d8194..307751d17054dd4dcf55ab00d0a3d0146c22acc3 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 69d57c6223b42af51dafd120878132c15de8f913..1bad9033de9010f87454295f9f9fd345cfc6bd87 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 63fabc1d84b631f99a4c5c5f71c1fc53f962ac88..52f04d2d9d67b220249cb106de0c002b49560e61 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 58116debd3d8a669623a0dedf0a307f7ab520461..3ac2e0a70e5be539766f77e13301b6ecc43bf18d 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 8409ebec5a70274ea6290d7722fdf14e183e5fb3..2c71439062ab14bcc30d1e88f5faea6b7491b80e 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 b08728276fb7d84f2bbbe17a7b22b99b922651d2..92d2d0f65667de0d68b0df056db2e8a0a50e1e92 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 ceb821a0d9a8c51e5571b55b308bb7726e9764c6..fa19b88b571a06dbfbbd7c77f7145fec30f93ede 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 670f8285f9d566acf0f83c422a6a65c92f9a66fb..3bca5fd7003b17ca070e21cf80b7b15599317c0a 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 1b41047796b4a915a0d9512cd28683bb76fabd00..162f11c8d8d14b843b39c4a70b204b4cbdd4d68f 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 2d59fa021fa58f03410247b2c1351db16941b5f2..e49227b18661994d5f60c010261b77cb52af8e8a 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 f30d23363b61baf455a42bee72e055d27aa45cd7..ec6eee3f1f3045b5446185bc8ebe8466c9912925 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 8730340ed54abb6095cd599f28e85d0464a5523d..ef623b14165cc7d782f1f1721ae1bf888a7f9047 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 23444f211233e24fefb9939493a04d10a281df25..fb269051f86876c126898c07eb401f356d8c7644 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 b643a7596ff4ed6db56e618fdb342452753f5e3e..0347dbdc06e3ab7ff0a4fa3a7bbc0330512a4217 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 73ab22d9cfa51840ed579d891dd7f44e00479d99..8ac97468d1f39ea01740079d5526d91cf8fa22b8 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 8e24b129313e10b0145b9c37008566c8815dcc8f..cb11a0fb157fa385f58af69f19cf9b402107eaad 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 55d1f52103baa12bce6c719499cca6dfad465c75..4cc1312970cda7c74c08161e7a15300d8fe83621 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 8f8dd2cf7d0cd9263e4a628107b93f47300db710..08010009013bbc074af5de047ab8f1c9d99c9284 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 cdad3bdcff3c5bc2fed6ff26802167a5e4dcc99d..13bd205352323bd50e810e8a64db9983ce87622b 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 237b28cb7811ba5dc20e8f5c2e66d73505328dd2..eee1cf677c468128cb822d8431756ba3666b65a1 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 420747730f597c251b065fce68ee70dd2caa4ada..bdaccbacf5fd13b5a95e1934ef37940d7bc02531 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 8355f978cef697502e99e1693a5dcde4fac72dfe..78faec110cf0d6dd2d3d603e8466c50c00945f4c 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 de13fa22efe0feda3e5313ac38ab698793fddf8a..18b917f6caa5b6ffdc58da001bde5252625c8c5e 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 181d2e8c3c38ea786aff6e621a5f770cc7994490..6126c7409de373c90d4d39575941979408efc2c0 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 410a44ad8033c972ead88fb94fe36288c1db0f52..2a461275843f3fab4a7d1bd6d2c974d1073681c3 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 ab528e3c55a9fb2bb6722720f292f2e74fcddc97..0e7ab8033660248438739f6f5f911c26fdc86de2 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 1bb71cd1f7d13a13bf7b14fe91fa59900ca5eb4f..b55e152583a47bf446aafb7b299763eeb4de7217 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 824a091815da1f30ca57672af144a5a01c5cc62a..81a7d9dcaf35052a36409a67e92dadae5e25b0b7 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 df4105b89e0519ba7d360221f22861f678ae0449..d43fb3374ed8072bf7008861c5bfc567d3c8e928 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 06a0de3a6b01ecd64362ba0c778d88f64750ef63..cc4f7eebdd2a1cb4e222560ec02d3c863eec207a 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 17299a7f714a481127e939c319a70467538f9a47..d7d1e004ed9fa472e28fe0697707b95097618102 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 c4ca1c5fa5c98d6d6bda8f2a4899f9caae566827..d1e8f5ff8c733ba280a74e1a4b168e7c3d8d4338 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 689d8edcf1d48d45cf18e59e5151652a03cf1baf..412b202590f7f5b8d98075b2e586738b1d902d8b 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 771014dd86a95cf6d0133f06b86e37ff02ba96a7..2dfca565aec9dbd3bce3b581d516ba80b8162d23 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 fbe8e953a5e7cf9ab4be2d71e91601aac0ffcb68..4d0a11dee7e7024df11e9726d2c3abdb5731ee00 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 d4a68dcb49a90cee2e9586e2a4fa8ce9e24c4ccd..53d80ebc74476f875a9d43e2958fc25e06c8182d 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 8f75dddafb5c08eced249b53c0f53112b6428b63..2d7e97c1edd47d64521690a179271176c20cb207 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 e01ecb93d2e11f5466e7312cd5a4280da530dae1..232e3bebd7cb2bfaa9884d23374f346728027f78 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 0e609f493f9a792119ffec1a5b2519cf09f0aca4..983e8d432a53c256c4d0da40e29586bcd2b7fc98 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 341ea989e42adb3c10af8e2668d90eebea9f2588..489812cf7115c9cdba34772e8f215bb18eb069fd 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 adbbeb42d4a04460937777b24ca20daaff796f83..3a0b1e5606d35e1ecaf57ae4f77c0fd2311e9930 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 4a298a13e6e5aa27c5d20ff51f52b01b6da42563..d9bcd004ccdfbd3a6f28ad9e8f9f98f8019b773a 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 f81a82eae6140528a2d5e1ad158262bb2394b068..4c4f3a0f5fef159fe019b2ad72e5bf72cdaa254f 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 9c9e9a0ee7d04f8af008182e2402be458688a722..f29ecadeb68d7548309b3d5a18eff4e114a6a87a 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 57c2d6c2aa3369ef74cbc1ae7fd1e93f2d1de6ca..6c0dbe15ad5b97c97c52b6e50ff167edf1057e72 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 2cfa4abb87974cf576e2e7d3716b194bdd96a2b9..9ca16a6def345752b21ada76fc175fe34a440d7d 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 60dc9055212f634d000e3c17ce35f19be50975a1..96551a320576afb456ed5ec7571712a993c972a2 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 c63b2bef1cae6b959c5beeb80cf6cb27ff7ce8cf..02f2bbc3b0fa14f6154d22f733d044d5775be6eb 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 29426d0226c49a6f9289be47d76e40d2af77c233..6aaec75e733f656203b1dcbd78624efe0e8d652b 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 8923d7aa042daf07b759867bed9fa8c911df256f..b20b21f78e9b7ee7f3bac9ffc7afc27fe317cbfa 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 92cbaddd7f45e379a2cd9e8e33e99e969c9f3290..725f363ef4afad03de07ad5bdd9adca2db692687 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 2d1d59469f576ae9ee73bcd1f8ca6b4fedaf25d0..72d1643c7cddb6e6745be2b2c0ab567a24612aab 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 5927eb61b37e0d2435719e159f5befa771951bc9..52621c212f1a332494e2f8ff2ec316df38c92d98 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 c5e97b6c72f8b5fd371b720c3bfcc2f37ea9732a..ba784230ebc36683887da435314077b626e21298 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 6e6f90a09f380eb3c43b56958cb10368dd160f28..50f824e954d33485c0704ee9faaf6d7afb992d5d 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 3d4eb19cc4cd0892d3dcaa662e4bd53f6ba79044..854d1d5b9902b2c6c2c3e79eced05681660cabc8 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 45886fe49947c9b2ae9691e4c47a7e26e748d4b3..d3367b3738ac07955242efd2d0475d71b8b35429 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 73bc43dfa14b05d542c7cdce8d27f431c8e9b9de..e5e3f67d5c4653e24db8d600ec70708dd5544346 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 4b54f02f124a8ba80755abd1f55ed64a8581417a..3e1bf9cbc415aaf761fab4aeb1aa961423193157 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 4d29dc5346ed2711f566a25e836ea8c3c807b292..3b50319501292060f61127120b6ed1037753e74b 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 ec6fd0b6bfcffb809c557b4713607304723fe2ee..9380cc5e440d55a282ec04e19e95913d109a62fe 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 63d5f33e607b190bb0baabf0a1f20137fdab69fc..fd31e7da37672be0a60c0b19f9a85fc942ffebd6 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 60b4d412a69f8bb7f656455db7348ad0767be32e..d6aec465c68ae9d9d917fde4dd09efd4b7fa16dc 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 bbc6f65c4137d37653d2c58aee50573212106072..3011ecc4b1fe50dfd1030b4a10b71e46b43ab79e 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 7b991ee0b241e3f15f4d4f73ea4911456a7a2da0..b7a7d8e2a50496485693b46dd07dccd1e9953bc2 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 fea358c9fd746102215cd9ecfeb8f80ddf1adc72..5c83ec661a7da85f96c317d99e9fadb581ff1713 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 eb3ea0dbff2f8c23b6eb0223d999e145269ae5c2..28f6507f18fb230387643bc33fec9f584963b04d 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 8c467489a7df125d33be12b8f8b23176461cc9e5..c9a1e37659e52454565a06b418fc6aeb071ee9dc 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 d2fb48d7497c7a84b544771bd10d211cf52151d9..60cef717526320aa02b9ab3f31d81a2bb60cc0b4 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 14c070b3a038eb66463a6c26aef5629d17bbda41..1abb7920fcb57daca3c6a62ea80a9b368e24c006 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 e455992190e7a185f759567ac8c7104bb93825ab..ed540fd17592e491d3f9b565e664c83a51edc3c1 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 b1c384bcb8a27a0e5894854d53ab3b7cb4407065..3869171353b53459289eef81591acd10972a88fc 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 ab5143e696136192884b5df34a18cd3ef746d213..6d84bfeffd28052e1559af95c9235bd2ff19e37a 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 a686cb8ce55001d0db1ca809c809496159248225..048418433c4f32be90ec120c3cbd5d6e928effa4 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 9920417b5c1d16850d862da7094366dc0682149d..8925c9fabf5a7321edf79468eb832a9a2a3a2191 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 91d25c794ba0e1285d1a7b90fb99ff4aaad5be22..29f1d4782378cfea99e862ecd28241512c3064cb 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 7963010591c4df607eeb1bc6e16291890bd21fe3..a0dc6251c78b19fe1db1c09302d86046e64a8d10 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 df9f225d300ac995b8552edef0a96e2f0dc46d0d..a16fa1f5a38caf136c347ff92f3be83c017ed90f 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 d471c905f5c5a54fc1c4d77a49124621d9ebfea0..b15c9a106adaa6122799fa9888cdf2d87dc4399d 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 30301132877b5a3340c6ac130e417a88937809dd..26ee89bb989e29373f520c3134133b4ff9b6b009 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 d3a9acb58b8b53621bdcc28cb1b73cccf25a7c73..d582ad2685decb1c6dbf302cb0fe0911d923e870 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 576690a5da06a700c273a2f545330e6845c38fc3..4dea0dd541f49bcf3682ae856ab549509cb0d8dd 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 31484b6352a965babb62ed5343062079ffed0afc..bf243968c629d3c0530c3478dcbeb92bb28640cd 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 00e6e73d226808a38e1663fc8ba6a6a61543ef35..1cd81bbf75a6cbf53ab069aa2d19f488938676fc 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 5c1704a1663d4ae146fcae2a2fb6f34a4dc2d4b9..f56bdaf5aec20041e7dbbd9769ca780c14bf079f 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 a69a61266153650dd7e1ec06dab6efb489c8bb82..d84784beb47512218a7086590a61a3fe4176f3b5 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 af6017de1872233297d4bcdb13f261c63df9a4b0..823cbb9b49fa398fd4b48f8dbe2f92fb11e6dd82 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 f1b066d4fc49d7c0671736ce3840deac721f859c..a29c4cf73a9721e988dc8433c96db4a58916ee5d 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 a32ca572092bf6b90e3bb3370b303a1856e672ae..1cfe8e89d5481456891eeb4874f598535dcb0dc7 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 347173e5f7d1842f0149f7fbaece54d3de0a83c1..6abaa1b93d128d6f150db48c29d06599a68d98c6 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 6ade9cacce88344ed1bc35313305440c8fea0044..578b1d3c6d179e38e62945809f648d90d62e9494 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 8f7bb858017a248ca1a8d5ebf8ea740a9fb87ef1..d16213c3dbef53c22a0070b47f7b1899f7ae738b 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 943e819a50b7188ad5f626cd0dce77bc97f68830..a528f5275144f6e6225a1a0626b87e324aec8ab9 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 0e60f795be9a0b7181731984929f9a1b4e752481..e81032fa7e00a99691b4fc6690d4a0ea674a9e1c 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 65c93a577847c129bfb1b184df29abfbd944beb9..60a504b6a419a2b980c5ac1e3c903dbb0374db92 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 7e11291f9ee223babd7a80cef84adb9438b05c3a..dc50b156137ae52e182fb17b3993f4f7d81df793 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 03633ac9d938ae0258a28e01001eb50314404a30..d0baa4da6ca2e08cc2eb50332f49493510676b21 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 88b2f5e8d747db02648e62a52d051e352705d6a2..f77e2307d28d05f81549b58f7ee682d8d962b3a7 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 a5390a20707fb9b48b72f724def8a25d3f1925fa..ded9fcd3e64472dc7f53f9c9217f616f850b894a 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 dab9367fa5aa184a8758a6d9a2b2e9f1d3277ed2..d2e16fef140ddedb2bba0d455fcd5515b226b3ce 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 ef30257554b14b1ec29f3222936a028305ba24c5..4c595dbcc3121eccb389e443eb9a0252f591b2b2 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 cc2fb4de81c2766bf348b71ea71968f68273066a..3be5193ba57edcd40202bf42ea4922923c2c15c2 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 522459e3324e7be09d6306e0088766cc25f7e3d6..ca8a1131a012308611faa100db55c3c328a77c52 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 d90b6857a1e990105153c006ad7008df24c4eb06..95bb81a50409b32e2962a8df03d099f0c1862ec1 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 cb6177fdc6afef1d11ff159d6ca750483ad8865d..490745055da0c4fadd372ddfe9a99f047aeb5b8f 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 e85d1cafa4d7c7b06bc7e81c95b51de19a2095b7..2ba71c6e663cf90e1efb63400b4521b557557344 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 0e5d44d081dc19e6d71df039fc33b62cc6be3b58..f2243074a7e9ce2e6205b318fe5f6df8d79a5292 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 50a63e93fb4c5572f2c8225da26cc313c8f3e6b1..e3db3fbdc767c53ee1762191743810d9d7dcaa67 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 fb96b4c3d2e4cc9b322eba686ba96b765f629195..9c2646be14bf847406e0ac7f64027271a3608d33 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 4ff8a6c6ef459b0bb57961b6ef26efd3a53c99b9..37293aa6b9217d01b47c5335c5687fcce30d28b4 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 8af568a0031f3b085c249c5e822dfbf0d92c2278..eb3c3d0d5706b2794344f67bff7e7a8e17caf4fd 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 381c60ee77fb1f37b10d094926f1bfde614701c7..7d4221fbe2415e34692f5be569e2b55d52687131 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 2267f00000ddd7d63a50af440363504287ab641f..300c157a5f3c1d835c94d180c7b4e1ae86d39acd 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 48dd561da51d16fd6919c2ec7d60211b74012540..8c47623fb5c7e19009c36fd513a6b8a72db29fac 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 13f9a996667152a9124aa73e6f6e304508d99048..bf381b2375e86ca3facbcea2afe2723c2d3a6ca9 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 e88e85dfc626b016ed77d84c61c870a00876373f..d3df84cb593cf4b663f107fa4f69c7df43d84be2 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 05b5502e07e981fe10df30aad377c6b690f668d4..0095e39e9ade84f1f580c1e2003daa7548f67981 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 237c100dee497254528e041bc66df3e333516322..77e5876ca335815f39216b95ba290d78381e73c2 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 bf7d5a2f22f3335c5e9b234ae5f7142655e5021a..4b7b678eebd2bc8cd35d67813b8c9c3d376beeb7 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 2950becdcb4e4de0a6d8a9e2a050744e7e243223..34cbab3d247bd46c2b0b90d8d650d1b3cb000140 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 636c98ee78325fe489dbc750d4a6150aa7742fc2..20f2102977c2085b145f6755a8e97691155205ed 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 2491d91e3e5b328b9f74954a778cba857af70d41..b4ced79b3db740204150763e6d207cf81c9fab20 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 9ce5f51b0f0e1b8956314d4ff121fb28438b8163..da6077699d186c31deece9ecfba9ff023d60cafa 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 b258db76d3030f5775df2e4436a477537e06cd8b..e7e1b869fe9edd2301e0c2195b593ca1631c1b8b 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 2d102fd85bddaee27217addc3a17a4ff99077cf5..aa9c2d822855db46e54376af49a7409b69837e01 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 a691c9512c3dae7155bfff0952fe2dfba94ac788..18c39974ebdd7ecafb61ea616e875697196fc689 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 1fa54226fe0c26ef242624210cc1a20fefa648c3..f02d2f012bec139036e06d2935bf963f2de57629 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 4d16ea5a6b9f5a9624da5d9e61d248fcd4e2821e..1ef94d4f5cce33db109d265f48d4cf5bf436591d 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 fb3d74fa1df6dfc69447d7ea92bb0aeb62abfe57..a2897ab8d32bdb3b527756da6da4d8e1b87acbef 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 f16c84b5708fd901823ff6aa1e924436333d894a..fe30fac7f6705493cadc65c96163224b1f1e4b0c 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 13fb8e1e33e1434358a23c68becff132fe61c772..6a476478e1db6c8967d1d463dd699f288a21b549 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 0c3348d9f03afc1c4a498eee2d19825150e23747..a834d6146337a84f4c57fbaffc47ed7b5b988ac9 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 a664271db62cccf9b8a9e81227f330e02802a2ef..c4b0a879ff18fb0295d1e69e38521ec8c78b912b 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 ab0daac6bccc059ee3dd8ff5836ba1dc5465408d..a0119ad60a7175564e44f768d022b253dbaf9623 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 e7d2ef4431ad68a46e298738c389e20b812748e2..f243a9a289e3615d9257063b86408e3546a9be49 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 af2770ec560a755a32db8da88674594324797d0d..e4843c1077fd6dbe8893900e7e566bb974a04278 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 b408b516623455fdcf68f24c319e5c73c0f50dfa..edd34e17fc46c60f8deb0d8b2b00580fc7660c16 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 d803f88fbfa4d558e5cf85faaabc87f4a2a1ab56..08578b4ddc985a03a4bd3dcb5cf845f5b15f5b5f 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 0bfe9da11cf16d5d445891c1b2b7942ec4a180b4..c8aa57c7956a22789c4fee854cea51826a28aadd 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 84b5cab233b80208ddfdef2de67c960a2e5664c4..c32ca4fda1b6be6b302ac9494497437ff1e16b30 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 ba1ee787d90c64e55be0e55929abbb78f7397660..d018a3fb2fc75f7e37ddb7dbb2200802d7f7ca43 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 5e5a908056d627b45eba6d87db6aeebbbd31e6cb..51a0700efc4528264e6b15ccf7c9bea19dd3f088 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 d60077c81cd7ed8bcaf58c52bc58be9bf6900a32..2f532245e8fa025ecb90f6f27485bb80c49925f5 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 39b32670b6982968ebbdbb5ac2197e84b9ccc2ed..926be715546ff40a0734cf43107ebc407e9ee6cb 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 244604bdd0a40c6e5ee299b113364da9176867e2..6e8686063ca9fef866fcdccbf72a38b20f7d84a4 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 74bd57eb06cd2e09778eeb5dd666a0eec5410941..2e6b6dbfca5c5e10a51668a273facbc0c1f0ed85 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 26b54e056dfae5adb9a08e84acfffc9ea6fe9a2a..1efbd564104b62a925e1885bf52d1419704f91c6 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 6e8e0aa7f9002b46f3c5c8c52604188257a17043..7330fd65276fe073d718010df5930c9195d65e56 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 6ae4ab36cbcce2f25ffcd2842498d1986375cdf0..cbb1ecb3889fb3a642d816f59d9f3f8c19ea8399 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 b083bf6133d602f3dccfb4b8b3c2aff3e714a8e4..8db567eefe8a0dad7f65193860535fe7a7a67520 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 902d58919dfcf4fdb78b88ea3a0950fdd2cfaf5e..2d9fd47d8d73796d5a56caff1d2f2d86d90b3896 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 f8fbbfee14e3d7675031501295f14db0da30f3d4..b10d43bccbc9dfcbdf97cdd188f9b3202cd462e2 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 f78ba6c2d18441ffed94bd3be8c6ad6a36977a79..564b238887f8e3291dd08311b613e939819e354c 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 fcd92d1c508badae99a235051168b4315439a4af..fae464da83c7118b59044b1a1b1e6938bccf9541 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 0de5b2046ed702dae390b4ab9555768b514c30b3..53963575e67fc104a977e10f9d1a1e575c163589 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 21880527c2e4de9144ffa03ce800a157e7bda160..7f9cdd5afe6e18d6239a2d441005abbbce0dc2e7 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 5aa8822f01ff7c22b4c1010deb6ec469d0354416..8fa28546d361b2286e91dd94dde13c3d0e227ebf 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 2b5dfaa0fff102273e2d8eae884eee6f18b79780..ad97396c80db967d8bdb128cc76e5f87a58966b5 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 96f80558c56a6486002c12caa0d2e68bdedb05be..b0bea25ae14437da454bf966eb480d25a0971f75 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 d45cb21701faaf88336e8b9634677f0078ceb666..82404f9e6872cd41784a8206f613ac24706468ea 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 9230d58ca49258bfe8ade19f7bfe82179c479502..09a49379520ef716d39cdb3ff797503897bfeaf5 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 4d249b208a59fb6cf830870cbda0b62b75e3bab0..4e592de45dfcb0e2d285ae6a3fdc97a6a3cb5d9d 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 3599d2e6b5a82a7b65c943519b9284ae08954d40..ac3ef7063fcf2e4d77b43c9e6e23a2e6ad1bbb41 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 50d1873fb0e41eee4328f43b5792927baa11283c..c88ee8047b85dc4978eea4a74c0c0ceb6e799a77 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 edeb4fba9907919c67d01abd3acc788e6ea6d645..0a15eeca4a22ad6b94e33e4d02b1406639122ae5 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 d49a9c6af5c37319b40ce545fe138c0eaecc34e7..de9878350581d20b07636304c3fae873f05e970b 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 63805efdfd5a46f1aa55a04e8cb55f0512f41fbb..27ef1a48e66a00b591e7a1c914f96d005e5d2416 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 2dcc349d6d43fb0151ab1177f56debdac9f894c1..f8a6505f05b8caa4e5fe4b56f8cfbdb342a07c6e 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 3d17d0e844b1e78475493db94a53292d6f8d8881..a6bccfe71b8a091db840077d2f8855fb3df966eb 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 34610c9991144756dbac2d62e781044bc710b945..7ea64c39d28083e2b0fd8f7f0204186e12d402dd 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 49a9373e113bae150414e52942db8d9f2a9a009a..edd17f8a8515accc34d29149402b014ffe8dae64 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 7152a3371825d0e8f35bc4a914935a05d04e0cca..094998d241c7fc0c437b458a32bca3a2a88b156f 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 8d2a2d7a8c5b5c87501d1e432642098b52d397e5..a4d7a0c5f9b6472fb819fcf76dd60fb276b991ce 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 ce7bd23b8075fd3daa0a5d1d66cf42d536d419af..0884d82c9821dfaeee95e600f839fbc3fb5340d8 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 ebb43f525a36f6df1df6a9e3d1a9311f62226650..8bb5079bf9d2d88bc62fcf81c1e07efb3762eab9 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 68bcbae7e450116dfc971c23bea3fa236b6cb6f3..413bbbd61732528e91bd500798bc0cc1fe5ed20b 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 6c5537d7b5a1d9e12a2f7af46eae68164007ea66..e907aeeb77e217abbbf78f323e40a97d65c1d22b 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 c18a4195be689581287531fbbe1d32ab7a1ef716..2fbff4bc528e13901f92c0c6226fd6c00174bded 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 b99ba6afba35db8f2e623540354ea429c3b49b2f..91c50490750b7e3966dd6194f72c88cd52f0305f 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 26acd4afad54a8d7f26643ef984545044934f494..746f1802b4e9b57c06ebf1504255d32c62d8d427 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 262376a8386dec43e675d35b261f01a867e96a6a..b873d493a7e25ed2a04ff6a73fa61d9611e28dcb 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 2142f86351095ab374586eec4ad4e63d16a948a5..60e49528765e672c3be26af760ea9e0cd1fb73e8 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 aed8036767838b0c1a5beb0da6818ec6b61d5d25..ef3d3f61be756d3d771d01009977cde368deff07 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 9767d9ed20b1db5bcd9509d1e00cd6d015dc712e..79fea0eb85d24b4f6098cf66f3aae663c575466b 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 801cc28de342acb80188fbd27ca82a852478af56..454eed39f74ecf2c1891a29a307cd0bf8a37eef0 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 abdd41daf8aec5f5552a6aed6f02a75b701382b7..5c9fee9bb645dc2abbd95b632cf334c1fa2227ed 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 02390cde766ccce96cb436387906beb65da2469f..4674b0a53814637dff98d74918d6fa69c0fdb35b 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 417d4bfc8ae7b4e90b846300c41db7be59ef2ae9..2efe4f9f9c13f9e9bc3b4d8c187da70034bb9036 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 11bc1817730aa93d8d01c6bb0bad3a765b71d704..a852dd015461aabdf0bde965d038f6d6ca665c5b 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 af967111e147fcfe6c514534c3fcaf844055ffdc..fef72e92e34ec07934e0dd9bcb2dfe08c59335d1 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 b4ed476697ee37d0c0b955e669734070f01c46ab..98c80f5b0c9600615f4d1b24a7393617a2f2a273 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 81766dab4e9cf45a9502be0fbe8768c156c9a4bb..f6255e679d86ccf731b48bfeac618a7631ce53b2 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 16a196dd64207fb66817018952a5111d6fa6560a..f65935f05e94f35f1f34ba109ec86cccbbede2a9 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 f7c7ffa5a08433aebab928fef0c55423431936f6..0c3f650d4cf1ad7f1b159d679a1c8dfa5d9af53c 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 7f6b09114cf27bab3ee6ccbe16d34bee046ccffd..56f411d3d0c9de9d6ed35c704be680ce5069387c 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 00a3d40935d085f1ea0b6870369cd27ff70a900d..91d1ec54ffb9be038a53f217573b6c4853886457 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 d6198b5f55f97c0852dafc9790c7ed97d8f1d8b3..ef0bd34aa30a1c6391aabed51aeaa3301851f00d 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 b3cf701f282f41027a5a455bc81c3b66c573f92b..cfb09f7c3b5dcb20b570ecd056f5f05ef8a3e6d0 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 d244ad85450ff083b16400f16deb9a5a0ccce5db..e45b142c2f67166a2b616784abdc7ef7561c018a 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 ef062c27e517f8e19937101904ef57bac7c1d2c0..ac9fa6f33d12ed0fc64ea86459ee627dac319bd2 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 8bb41797e2bf7b6d780eb05d8bec25f5dffc0fa9..f32e7a2dffa9bfaafd42f26116b4bdab28d2acbd 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 47b3f339c546094746f099865a461d14344a1f84..a311e57bc047cbbf186a0babf7f40036dc47a119 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 e23e0b9390b2274261e10c0843e2a175e0a97d3e..ba5318679a9971be4d77fb994180cb0a946143f4 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 22b47e5843380f6b6707d1b76f917698ac67a294..56a8682f0cc59ac6d215fc453e57e23bd31cf7d5 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 572b9d0c345211c57be4a982f50a3cfabe7ff521..ce1a3bb258e5a208994a1707026fe92706da1b13 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 59f5228f96a00979154e7d2c8335439db892e552..8f7e634edede57404dbaa5f3146c757546d9771c 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 0cf28d6e1fe76efc97bc5224df6c699d079fd307..5083b2d8f0217bb4807b9942836328f12a9c2e69 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 9325bf7a51092cd126f7381b4d01e167a4dc28f1..0596b4598e7e5903366c26e0862cebae4ab8215a 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 2d20805a897fd9c6f996da1701691f873a47300f..67a6d3ece01814ee95cf87ff9d9f01efe10e42db 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 2b5014e8513bdbc1af63e9ca2d51b4de41ea697e..be4b5c4be386e58e2dc7419038cbbfae8c62e74f 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 b3911fe8df7435c04b34a7dcf3a14d9d623d7e24..08fe2cba934ed34f64ec99e3dde4d2f171534767 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 403b55dd0768014dc7ff02f9ae9ee952bb2cdc54..93bb2a7e86e2c970236b7dbe3c54cf08733dbfe9 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 49518c6c0524e7a026476d5e0cbdd4f90f3db7e8..c21bed334e1b778238f2448a904364f145ba612e 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 8bc3547c65590e93e2fc148bfa8e95d662856e2b..c89e0764cf55fc37d67a371968b99903ea64f3ac 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 3500bec35b9dea2b3ccdf391670ef23164521a27..ae69c74443f864325904c9767bfea197dab8ed98 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 1f195356cdd4ae0b33798a42ca15f2762766e029..2fcd9bc5630c53ee2fea25a1698ed06a872a7e9f 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 8629f05448609b3853582e45830beaff7dda0d45..902d087a7ca0bbdefb01ad9ce0bd8484c0a3feec 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 431a226cc6ec28f5ee86043379c7ec27d8c44f69..6b1ae96b81cdfb3b6c952efad1c44c5d68c181ef 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 198ce0fd7f6672e19d853688a6f03d877c3bd199..2c5d61a03be38c4d3050bde668223fc3ca9275b1 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 79b7393706a0b90c81a99c5240fda1f2d58bda7f..a90f198188238aab93fad2b21919a7d8c5f67d94 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 265338271e773236abee5013156362ac7dd3a213..1a5c0e9490608ccfa8812558baeb02b06e33d511 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 06d08874197b9bfc34bbdacebc42ba68750bfb71..6a164e1c260c45e6cd3245c8605e935f618ceee1 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 fb21cfc7f7d9443edecf56bc7d0eb0c6dd4203a3..725c587d97e3c9991255cdfe7cd2b975822eb946 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 41cf4e613e2b7fed7288caeb7c9c5010547860b6..7520d2ad28afac2d91e51b185affe3f7805066ad 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 95513e51607a7f5e8760aa02b21e4d7775c3381e..557df4eed9658704fee2e64a6c1919324eeec321 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 6fe181ff19914291586e39c8289b1ee2f13f940e..fabbca44ec661b18b439d529f316a36918fe0509 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 813723a60fcc44f6afd502382a2b6103593a5a28..1be05661dd7964bf962d57a8e35981a1909dbaec 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 d0f14a80da830adf3173cade7840597598413bb4..86824d23040cb846b5ed04d458bd5870bd3a5a3f 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 8e7599ec43b5e3269f8cd551dc298d3f6a71875d..2d44de7bdf840d01ed92cfcf29b6a2340682ea3a 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 5dfb63b3d92c12754e2147409b10ebc73083ef39..a2ab4149e1ba0edcf96aaa14d31b4a81124e590a 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 17054918635855ed3720a7e486c50509885bdc41..ea7fb2fd075d8689a61e55f0040fe33b53496c03 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 f5d92c40d342831d8c4096887056bbf0c26d6299..c2ba77273e53e06f33b0a112bbae8c654955bf6b 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 6fac690f2f985d619bf313be52cdd40369c2ebb1..10b2b48e4606e6391347ae7683a624eddc320927 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 36345f9876b6d792487cdd44b3fa4ed49eaa5b1b..849d8b699b598470506d8a27e6ea0d2b2617ea49 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 34151fc9e912dfa9826fc85bcd27fa15220b21d2..897653c9787757927df218a26bb404746e2f801f 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 d9bd42085f4fbe5c5871fa9b24f2ae6284646c0b..f1898a49514f08db4e6ce1c75dd435a1dc835c70 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 bbdff2cfeb2ccc865712b9e622ca9e94d17ddb5e..a89fe804a5f4a7733307e6d678b630c87ca28f24 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 4ebcf82037ac809c3b7a1e7740632ccd868499e3..6c9523ec4aa2854ebfd56eb2ef09dbf2307addd1 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 0f94a88f19ba42773f59a1bd3f2815f6453f7b08..508ef3b266925ba21dbb52f97b52df747b23994d 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 6965f6c7f104e9b626d3a25d99c4c2a90ec25475..949287cce08bd37c5478d0034efae28379c02b57 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 0a2916a1a448856bce576c970ab40e83e31476a9..01879c2f8fce153ef9208a3af587d0c53858ae57 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 0918b0aa60ad04190a658dd556ea1fc136da4c05..a8c7935b007949ecf7d6da398f8101de66956f1c 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 dc36e2fedb6953811678b0665cbff4cc4fcdd998..8b7caeba27407353c63512f9b54ee75892281915 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 d3fea98739b422d2a317b8a92992f1f4ae5bcf19..c1f17454cb70774674dfd999897362d89abf0404 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 45d6d38c4687f434ef50feb4a241b663c8e6bc7f..f5d4a42bbdbb1fb36a8e6db2b6fef9b71d1c2a23 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 74ad485f677578d070f5520a46d6f7984420ab9a..da5d09aa909190bb121dd9416d89fc2428036ee0 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 402327cf7185ea47361cbd50e7c9983b44bb1614..fafe285267238446380859043ba24f6157101454 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 a483b2ca3e28607ec482a221755f4aa214bf1b0b..f49773130e1799d30bd925619241ae50b3950a20 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 e8a962a73629e5d7aa3c3026e52d23bbb2396c80..cc995a2014c13b3d5c47654dd6d48b8d3376ddf2 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 67f91cd0885b7ee28102ee2d5d9d7b9d465be247..68badcf9bcc4dad3f971aaafb5d375c69c68dc6d 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 fd28573bd3344ee2eb64b20be40e67ab5a2b1896..219938b0ece47131ce586078665eef01bb9ca215 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 21b8883402fe0c53047f50e5834495e8753b6dfc..8d73baaa50795df5b39403d3a83b12d56d0e20b5 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 8fc21a40816afd88e8e9707aa1f774fddd17801b..508b52eb9ebea093dfc7ea661daaa65f12bdeea0 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 73973e37da582f2245a6725e5a98727f445a915e..8ca42c1366cf51c38df6b484dfc6c4d15c9b2ce5 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 e241ad8a8ecf9f4f007f87418d6d72f0987737bb..1d61448d63415fb128c8c149e3d2910c25ca3931 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 a7fb22ccf7783eaddb19baa53d9df60e4afde01d..28b90770ca256aca1a7f06353d52763039e1b369 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 c5dae8da258ffff918fccf2080c132a5c816cc5b..d1e00609d25d458f1e21259ca31b477d28039cf1 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 ac157baaf34e47418850d3783b7d0c8599cd5e0d..996f87f10fae6f0265fd7eb7e64ac3e2faab4c1c 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 9ce70b8f683584d67b2dec8b4ce8e976cfb1bf59..d6784b65ac170fc0364f59b4a6a55a96de20a2bf 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 882bb4a893af709c2a56fdf65f7d2d204bb43018..454184c17888510c15e1a0f8a082ddbb4f646998 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 ba43dc99ea2f941d65caebfd91b04118ba227ada..a4fbd9b524401ff9fd6679093c34e08610edfa34 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 a59afaa4757d121985afa40a0bcca1f86c41d16e..0dad2c3935905d04e15208db3f7c0d7abe60a414 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 3e4ebfaf8a57f4f950ce3078e2ce4c3cad61ec7b..e70cd2376f092da601b3ecebd0fc5b4a786a0b61 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 c3501ce710025ed37148c8bf436cea11e5f141ca..9faa6390570da5b72f4b9d58067b34b2329f63cc 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 42a6320c128a867e004dc330d4ab902b08ee542e..7ad88eac62333a33e97afe3277c5b7224ffad624 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 f1982b0a7769adacf331031e69dc2aa87d930953..009d3dd1cb4ebae2363a214589df00c3402cad82 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 47fdfb817784baace97268f0a3d0abb9e5d3e59b..fe815290ebffcdb0ec7e7b07a8c7f3026e416207 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 bd95bfa6de1879b40495ac1c350419df8f223061..614ea03f46999dde18926f0de5ca6f451e5fe397 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 69f9b153050cec3c2f1f2117893f275929943024..4c1332b3a8e7235b9ae967765d5861483e320a26 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 4e64951424adeb6ae530e383c2ef532c86e5b818..5ecb6bbdecb1e5ba87456627700101086985aaa3 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 9791ec625a977d4bff6e94ac583b1bf386becc56..2284e334ec279c7279c11f23d9480d48d7ecf93d 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 94a4b907b124fbea752d1a5c3c66cd45ae0d9608..7fe5b18b725bf095bea3514b19285d6d71199843 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 6d5180d80063380e1ebd329e851b8159887aa8ea..0a27b210d3c9308495688fd82d706100bd7ddd84 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 5cdd58b44b02913234d7da6a86e2162112dbf116..6020325e94e1d1d164c54d1ac070622921ed7746 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 e12d02aaa1b2e08b94ca3376886ac99942a630dd..3ff057b28ac1cee50671758a5139bee8f59067d9 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 22884a4a657dc1361a69459799cee46bbafb4261..69a3eae9e2ea0bb8c4037898338ba95bc0dafcc2 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 545ba0f15d0dafed98e1100ea587e5705a583670..6e989c89649c909d2cac0d5ff477d4030394487b 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 a9563aa74dd1bd6c55185504e7a7d544ee6767c5..0317407fff129a30cabd3e878914df27247c06dc 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 505bdef637fd6abe83925395a4ae249797fe75f1..84756da413d38fd4c98ad5eb32dde8bca2ba2d9c 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 008c566f2eda5f51a6bd0d2a82990a8efa274b3f..00e324d4572ba12f79dffe962156440e472e3b9a 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 d253c282ce6757329bf469d75f6f05bd8d083a60..f7508c55344999b4867a0b33aef4605b9848425a 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 047ea3328bff41ffadef4bc538b0d7a9852057ae..1a2799626cae9dbd2b5f028c24781adda475934d 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 c0926101f5faad58580c55cdbba691ddfc6c4214..aa60aaff61613346c45fb61f3b1595bd8e37691f 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 324e38511f88d3133e9d7ff2a2582c476044cc6a..caf975d71c81935a14241b13d4750cddfdf3d8fa 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 7146729f2067c927400d52c01bab8ff8da05fff3..9303f118b6d2b963c544e1375bc57adf42fa527f 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 7f43f3a736c98eeed742cfb37ee15408a30fc603..d7dee60c21d84f4af48d726e946705ab3c28ad49 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 8e113bf5a94c8e46e3c775e78e43f3c5bde9f307..bf69e84cd860bdad89224e001688f692958769a1 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 752ff1fcce140545a8563d0655b455ce3bfecc14..a70863bd393ac910d6fab4ebf41d426e8b665d6c 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 e05427c2270e631e319709550cf79fed0a63bfba..f73a24a8cecb04e990944176643aaba84aa18354 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 d4404e07316ae9e97b44cc7056612196ed74802c..4a6e1d8131de622562621c085a0dedffb8e689a6 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 6500db10dee56ac6cf3b522a0be902bcfb0fdd86..b1fd2daf96950fc3328f8624d5582718cdb108cd 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 c3fbc4bc7728a0934483cad4009e8875f46a2b1c..8701aa751d1a3d256710ada9ec97646180ecb320 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 0c60cd9398455633ec0dcded9d46f0c8822366e8..1c85f329f7e29895663409574661cca3d8159b80 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 92527f53ba3f84fa34c21e182dbaa6858f3a1714..87bb415a7782a42c353622827397297032172b65 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 64f495a5476dda58f1c4c0e4618190f3cf9f676a..a6a7ac1ff565904eaffbb05de7e4a2ba3d55a259 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 cc57f909badcf2310b55be8ba39848907b34998b..c924d2bb9d4d19a4ddd30d75c166c388f3d625f9 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 ff4992b2e66a6585dd372520a3b4336ccf0f57d4..5a57abd5051c3d52800cd77a1872c2eadbdee6a5 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 00031adf69cb74892c3b79bf2f6a4ffea4d81fe5..594c2a936d024b9188f82c55ccff85ffd90d0fac 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 32b6254abdf3f8a8daebc6664110cb6466cad753..a61209625d38cb7b2b49ebd47107cf7c78c34b0d 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 a90eed38b447fbdd69d5b4ce72da7de6e6ea2d40..8de446df5eec254f788c8ee827f37569e3835aea 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 a488dae02d9100543c72bb860c6f3de766b16aa8..df06d978bb4bebfca99bcae17ddf049e2eded15b 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 df126460fa94be5af6590839d4f6b2f891d32f62..65f83c6ee348f3091a6c87556df8e7f13b89867b 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 828df269f2ed657563aa45db8987853ed52877c0..9609fe8171928be6a261caf50701490072a156e8 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 273d890c6e67617d48f54b0036b424a7b6df49cc..8f49eeff6f4bf064483228cfceaaf43fa5d991fa 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 f3dc65a72f45e14bb297ee827f0ca931c2f01878..95f3e24fa974b29520083c4a7579c2efe610e909 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 9d87a28ddf167e3721e2fb10414716146a5d8376..9b023a762b2ba4cac71858e48082191ddc69182b 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 6f56f46f2e40ab197006544f9d48490ec5ec51b9..118fa46f287088b61335fb120844e76f0e09bac2 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 d44b0bddc5c050f9513ef240f51f353dd00b1b62..5e7508bf021a15c27bc2beac1ee874c262ca3c7a 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 6ee8a0d3882ec4a8dd825efe72c9e3769420bfad..143efaea1f1d1d21962da8fdae8d1ab421af70ea 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 e528c429e46eb357652f527f37d184c50fb8a524..70407f92871baf3ca510d4375d2f1e844498261f 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 d1c2cb57516a2ce98014ae6fdd8d0e41c61e6300..4c9c455e909a27f59160c9ef457d00132476f578 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 232f916b67c4dd5b91b1530b1565d75a7e82dd54..b287c775f6ad76cec4b6dc82fce4225d91c009ba 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 08654dbe28058faa4a0d28a46da233a673e9aea7..2c4929c79543f9129dec4e3edfb44362d00bb33f 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 12d7b9ef4d7a815ae129135e63747e939d315c98..a3bc1971435d1ac1e33daa9a1f80a3b15b8880e4 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 f7d54d8a9d33b6a96f1dea47794b989dbf9242aa..e9e3aa0118f27c049d15c458ae3cafde49d2a3b7 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 63bda229895370de25af58a2ac211f852e27c1e7..6118243fa5162f8119632cc25a2105cf33ae70ea 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 3f7420ed65ae4c6a2a18b48a1e8b84b9c10707b9..ea4912bda7f535a36f5c5cc939e0d3af30fdb6bd 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 05943e737c1b3c2c8d53830018a0874e05926e36..02547f5217808b1ff742c36363ab0349300c3812 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 353ded512daba667fa691655bea268d332477052..ea37d994f851d63eb0ec38bbf1043d6a0a643330 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 e89fb7dace88bc856c6346172e11ad00ca1bd574..853cec279192a52ca5acf628d6f9b62899cfeaa0 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 28d24d13885edf20aabdd23c3eaa39a5ab7cbea6..296502a4b2705fb85b3178324d099527c3db2365 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 e1a7ad153cbc938f591e3b5e1f7f2146cb4a8593..8f729cb44bf149245d3cfe082b112900fa6698bd 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 2ea4fa44326220f5bff2058eab6bc9913e36e227..67a6dfd7c1ebe752638ca8cbd4228e187c8c01ca 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 810b1427b8d001062b57649466661ea5e91bfa70..2ac220849f4f44844b744b5f88a0b7c9ca358119 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 507fd5d1256db25f8d21787eb28f5de17aa8f941..7de0258743d0802783164f3248f3504e249ceea1 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 33c0d2ff01b8ea61d1efb42ecbd1c3d37dd85ebf..e0782b1559c9a301caf96ba97b9d9c93392c6a9e 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 393213a9546d791f403c4dcc50c9913f7b944f57..68f9dc3de1aaefe873028032e3d5f1410c6d311d 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 ef675efef4233061719cf24448c8c6982ce9d17f..1fcbdd3e563e6f838ca9a727bbf1b1331d4e0796 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 4746b27e3509fef3a11c0efdafdef7f51244c868..e857f5ab8885b487459a0ea0c3445786c589c6a6 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 3eb1c967bf3a0982aacff84626aa1d11b08eb455..a8ca47b2afdf8cb1e43d2c94b929b492de923744 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 c5326f297a8bac71e802b754d2581a154adb164e..1dacd2498cb683e27613b25f1538a2812e587a4c 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 bd49125f1c85114e32a595e799b50d4cbfe5b4dc..7f74574448c760218edf42de6565d43c47cf2818 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 06799e9e725a5c2c192572755aa00f0ab72ec99d..096ebfd482c9a71bd75bb607c2f867eb760ee63f 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 7df3132b3037beb48fa0dcbd8b395d33bb7b78af..64255cf74e94577aa1c1af2a64682876636f837a 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 e638eadc7f9cc0cbd2ebdc19faea9f63c1b7cd5d..e9733208189d22f34549cfe3edd81fd12ae89757 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 f6dda44f6cf5e95c2624c42a63cb44495614e875..a7d44fd37ab3455e887110ab63a07bb4a9183ec9 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 8567fa3088f42c0e78d386f9cf586e4d3f7527c5..963e42ecffc97b2db7d78e3485f760311728153f 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 4fcc86269fd6a7ba3518566aff4837c8edc90a71..026365f0146876caaa567a53594848e337219090 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 98deb61a34e816189ecdcd2373e62b2107ee3f1a..dd61e501841392e1f2a51872c936f8b566be81eb 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 3710d07715ed3895b1e8ef46f85445552946e662..56692fa34a7f8f27715931a67a74631cbf63465a 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 cc2cbb6a30c40ba91c5102b41385efd444b345cf..8713365ef0055cd2271aef4a5da512d50717dc36 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 4d04b6cfa1ef148b15ef6e74045bcd5810fba8da..459495bec06fbd223d34a6ed97453ded983e29df 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 6fee252f096bc5df789a34d3d1ff9aed9d8203f0..8c9b1d5da7e8c704b8955fdc763aa8eda3b13218 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 4155d3f58f6112739afee266c6b312e84f210fa9..680862c3a28559c255422931ccf18ab7f92a7afe 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 403b2874d7983f913462dc38d603ae989a0de114..8404cc4b9c676a5b99a554585c12eb10b61bc0d7 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 a199edf2b06773db6fe3f058d73b028c3b048ddb..acb2fe611921ad8350d255f85c2fdc5127b7beee 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 28447eb245d092719e9b64d9a813e785ef1462cc..206ffc3f6ea140e6ac09b5faa9706824e53ce992 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 e04a062b3a421123a3a4ed21f6b4e564527d02a1..bf4e20410cf93d97c244151235952dfa5543d85e 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 8d7278fbeaa20d8ebcfe31c20652b0feb6d560bd..350c8556098b9d452fcb479a79f945f40b5aaad9 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 ffee275ea4e97cc4305ba552afddd28b921307d7..1996b60fc306d6e079567b8ac2bde9d17f46eb0d 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 779f100b84a0675869ca40162427f72f90d85b94..83b42f65bd8e322231f26c7e9cddd4e2bdbdd0eb 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 831a2fd42a9a0902e216fc8b8d8282646fc91bce..2e1c9a75541177e4c60f24af950098ee47cdeab7 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 08c62ef023411ad8faede55ec0e309ab366ed671..cbda8eef7552e47b2744f80f9a3719b246f2ba0e 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 7593eee0c53a78acc672dc155ae11e57bb622484..0ac22a0c8ed12e5ca417f5fe9d8e6853f8249ef1 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 4c72b06375e5a30c8fa2892294965a45f1d5e075..19a1725d65e97165b8d41b52efb5e3dd374ff1c9 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 7fb045d285b1c5825bfa1ff06e858fcc74efced6..30ded740b298ee3acf5889aaacff5aa321b44a2d 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 5288c802f2eed0a1322482c71173895d9b017741..d8adbed63496c001e84a9a89f103e0be8f28dbf4 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 e8a98a3fd4b86eeebf462dffb173f35a5d4fa9af..ca9d08e85fb18a37df93448822cb6b2e6743e3c0 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 a8fdf54ed80ecf473d37a0638e2590f3cc91d577..006ec5b65e1d8eae0d4e1fd41574e985c9aa709a 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 d26cf3ce5f4ff8c75816fa390415cce556599358..b919a4cca785f87db3f7e835ec9060ec19877270 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 982be20c17e1a98edab2dca9dbb3d4603f690a92..0c4a94f126ea89b9161ac5cd8a6dd1aedd9ab8d1 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 aaa091ffa374997931be57ee6fdba50788505c91..e77d4ff24a15f24f3d42ef57f08654b1cac122c5 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 18d461d87b212feaafb9aadd3fb022d14012007c..ccf3289528f8fcc5d8c746e31ce93abfc9448463 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 04233927846a4ac7b82a7a02977bcdbca4af5dca..5f08d6218b92a7b7bf1ed70f317dc0c6f1072178 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 6dd3b5fdf8ae980c6836350f9e17de578993bc79..4b581e4ca464b8f413ffc826653b6a778f6533b6 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 664628b85a26d4ab90c49159a06a11cee90df739..028dff0d91712c09dd12aa3571b1cef70ad73d56 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 7eb3f7b38ddd0315307cd27f2d61d72628672244..233dc44e5d8439dc1a52566c79df28ebc3f9406d 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 602a1ababdca45633f96042a87893cba0865396e..fcca81eba1cc111884100d6e9d9393801d7d2320 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 9d4c1faa8430b74cdd14589df7d663f4566ede4f..7deea0a2ce2315445cfe12eb201f818cc196cf91 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 e9578445b784f1feecdb2173289493c097a5462a..ebab982b4ddfb00c2f325bab8746db880b67ca83 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 123bb91b3048f9e178b7f3a45483c2283af0c4e7..4d5b304fb876575bcf6121f6d7fd9380686e7537 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 7704b10ef23d3e54ae5bdbc74d68bb19e5179648..064c21725ddcad94bdfae7975a3a972c6f6ad0b1 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 a673407cc72d1986a9e0d3cd2528cdc83225e4e5..acd504f09376c31a8fadf5c1730c20d621c1b0f9 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 5ec9f3aee1bd0cf95d73114468a7fa1d67350d7f..3c3762fd5ba17f26cd875695597be60161b87583 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 894939a2e7f1d951f8d30969efb710999b824dab..0124a8d87f32a2e5c059ccd1574956e5bf5db05e 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 7041b96a9a12d8a45550990fe2a6a809cb07196b..9cdb12da9397a5135a208db3c5422c647e36b32e 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 4072c585429708bfb2b8a35adc2efcee30ca9e04..b14865ddac30dc3bdbf42f4b5883d8703b294a29 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 59a0d735b0d231bbb1bfd98dd844f75800db79c0..0add3b368bec5fa699e388d4c45947ccf6a34c12 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 4e7c40a79f7ee7b40e8ad56695c5252440e64957..44997fc77ad2cf140cf76221d52869f9b5b374b1 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 6f29b61133bbd7ed549251309ba0693fcd373e7d..9a810a3eb4cfd607b63ffc1de1b0c2ddcbd6cb2f 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 7abbd7d3149ac07b0623ba2a30dd5f380fbcfac0..56170fe66b8a93f400be4543ae784e6892bce380 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 a0f63f664afeb9c6e32733f6b405a1714f9a9936..b7e0aa7564f6e67009f9bf2033ddac7bef031ac8 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 f8eb2cd2c6c752d6f5db75e4e3d16feef6b82747..9f9cb4bf2a00ca3e1395d912bae3103e1f278332 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 dfc32c1fb9d9290caccebe74c698cbe931404b18..e1dd41e7c657a1b9fbed37e68ab7ecc8d310f6ae 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 b60cabe17b70f2f0b8e9c70fa00e2dd475c058bf..5122b5c2328c9777ad6f4cdd4284123681d8115a 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 e4debda91b83a3291495c22d220727b894c5910f..7e23ea7fe86bf6b3aaa279f76736fc6ff531b00b 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 7630b5c09b92d6c7b2f1ba485d88f97cffb6bc43..7b380746c579474802ed7d60d049ff8dfaa17e22 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 8fe0d2e0bbd020b36ea1b13f2f72294ed671f514..154e7e860f3410f981b08e7a3a8f10a8fe1419b3 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 42c22b5469f9a8513483f30fde89fab5088cf1c1..79ee80563d83c8afd182903f6384f6da50df5d99 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 dbc1fb0e2a67117d60a582c156e8ab00659815e2..a03345b3c7995f132459372780541a1f08b2fa6b 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 0498957e9fe8ad4c368603936e2caaef5073b6c1..19f7e88bf447e7789f03cc0e6d049a65ada83f4a 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 35e44f21a18ecf70a1be8891b8917a9a1e6b06d9..d50c6d8d36a88b8a29ab55fec31d04a48794f49f 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 0b8dd688357563ec0e4ddfcc22577a021a389901..e03d15a3f5c822e745f09a398f373ce9cd88eccd 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 8e6607456314a64387bc305be5dc4f1ca231c4a0..56465c6499577043e5d638cc3d4ea1cba252d571 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 76b0ddaf24a3a8836a0335d9b76d7ea82d8d5f01..d2532e42b54371879db47f6ca6a5ff6b1b947e31 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 40d3a1effcdf94b34cd8f19902e89f323495395d..e5a99c37f659da5ca0e95c8467252b54ef65f1b9 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 599a541cc0fd3e8ffb52a1b615a3b5a69dfef750..75c35bc7c7ef466640a907c2a7114481a4d68623 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 b954b68553b69ef8f599956086e5402659ff201e..e23c87baacf5e6cfb04f14523c146c3dd9eb1886 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 dc752afe86c651a0ac88641dc71b109b0a7ea4b2..59b84b49712fc5bd71820acfae6bd0f620cd767d 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 3dd2c87003eae3026c6d5a63f334ef3e2e34753f..141f7d72e75ae5898be6d0c15e6094633f520df1 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 ecd986213dbe77cbd7daa231afb09c89c2992278..62c110d6b67120e5c1d0d93e2448f24552f0ad82 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 c834ad362c7d69741457961ff45938829d04b961..2637726c96e9d6781b44a9c24e22bde8af64ad0c 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 7b3fb3b8e901023b3653cd59abf4175b770e5fb1..a4be0dc346f1361a88748a117166a6916c8ff4c3 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 ddd3a3e842c31f75d68670c0c464969dcfab415f..93fdba54f37b668482377105278244c3b2356fb8 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 32e92d25abac5c4d15fcfe6a84b0ce17a034cc0f..515c5f7af1a9969ef4de12677eed9905b2bfdd41 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 e13102d53d4dd32d3970a94e7a6ab1870b37fb82..58d222c2dd1a3349d6a5a7f8a10635cd6562f712 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 d623a7edd0706142218bccf6f98c5b2ebe4c7a5f..e505c64c23f672bad39ceef148dfae597e76807d 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 ab5c367796b72107382bb7a293eec96df93c4d44..375ef1b92bfa18df715e6b7cc6e0bfe565244737 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 8970bb51adba78bead76d7d7b5323795c8ff1945..b17dc642c33f3f87f164f51c27ce582209df8853 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 9c5ee98345e6f544af7a73037839536c0a748e84..4b173d78ade414c6a0fe76d7f4265aa2a6f2aeac 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 6c1bcd707fa35afc69794426bfb7a0409a444b29..03e098e74772ea798284dfe8b2881155ec317033 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 cf7b9edb83625c61906d4e6596d57a2a92973021..2403ef44c83963c2b4889080dc8b8f8aedcf9ad2 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 645c2f38e239d90bbc815852c4473b1e607c7454..1139d453d60720cfa463aecbb7ca8279b5b404c7 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 1429a9699a43afd610bb41e12023793871d77ea9..aaf747ec07f5964b29a928e156506914b0902c63 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 3a03cabe156d8a507336fdd1d70686944cd34dce..05c438650ffb04437d10e4d9983df102ba4ac8e9 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 a2f5df7b98ac22dc9a47f0c093f4cc7ee821a314..6f6db8e1f6bd254082fc976dbe2b07c150d004eb 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 5dbc08b0610e86c9db44451e2d6e91ccaefa83f8..fda721503da33f71a1c2b91d665d2fde47b67c94 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 453251b259d196432a9d5d22a173204879d1b52e..337e776bada416317c12d6f74cf48011b0bf19bb 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 998bfbac2297753bc2af9420f813cd06394705d4..31934de1743a46d62072a67655e832ba840aef86 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 f0c6424a8a5431ac21814cff2922ac8aa6d8e3d3..067de853dfca5d9c97670fb9bcead9e3d7033aa0 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 8bee0526391cbe690eb8b65a463c6dce5dcc1451..7727fd76546996c2402b0cec283f9e9d62598186 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 2552e4bc70d37ee8a5aefdd955a49827ece007a8..cc17adfcf20c5d44961e1a11901924cffc1c9ffb 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 e3b5a5175f2cc56ac9b7e6d10c925467e0edcc22..ec2b12b62a621b0c6e6635f350be64cb2386aad2 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 dc4e6c52f666b83791138ca81300420cc0661d61..486db10f8c184d737416f3453d09d8123dfd2756 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 476bfb94458c6314645d62384c08b53a2d73daab..f3ee2a0b914e0606cf4238c4dc83a3a4bb8e1d05 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 9e77a5bcd538b0f737aaaef03facaaf2e1d72e16..9d3d5b19cf242f64f9c9b86b919aaa46d59e81bc 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 ea0e50c1fb34bd404864e3791798b2b6dd92a060..f7ff5d031819ddbd52c557d3f47e90f64d95ef71 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 b0183502d050081d6c98fa145bc6c3e2d5fc4b5c..e0997dd7bbaea20eb9a67564243637056a2ebbcb 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 4f352736889f914b5aebab69761615b2ece5f897..79711a7b0e4fad7cad459780134dadf8653bff20 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 0863f8aff112fc8146b34aec652e5d99044e5c99..4d27472fd17077adc03aeb5891f3c46ac42bfdc1 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 2dfce28f279d50b84da4bd30f03edf44769229e1..db0a6258001953f5876aa366fdc34307035f3ea1 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 d2278baf28fc7ef1b5041ff57f09c42a7359b9ae..a3bc32c36926f7e635a520221bf9ceb65ce2dbe4 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 0b26bf7d095f3577fd3203e098819ebe2decc9df..db7b62cdcc78d905904873e0c3da11c47290128b 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 e0d41cdf0d1d50016207a7025cf28293e48171c6..d0bd4c76b9b5b0dff74202492a5300269e8ef7f7 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 7a102637b149db17253127d5bac9fdbf261ac169..9dcbe6b3be392dbc20104699416479dc6f8f4333 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 a3b3ec2277dd83730b94bf173d78dee4416a7294..eb88efd26e933a546a7b4fec1524a0e75a14ade1 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 d8ade3ad3bb661cf90c6f465160fc28cbef597f2..114f3198b22a3b45f901b512ababd17e3e8f1951 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 c1995c9dd8d091a65d2c9bf9ddf41e654cc83561..6d4daf8dec828c60c09b3ebefff12c11d57bfa77 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 5592448056b8d45d1e6779f1f5f00bea94bd4930..3797323006d77094bfdb457539e338af88c2f078 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 743f9c311441fa870222a0464e96766981ce7b43..bf036852523b3ead8a82f98edb06af49c36f6b8c 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 fe16edf2eeb50bedf7ecf9310b194ba6d6a385e6..a4433d147f19fc7f2dfe17fd17ac929505ae226e 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 98689092e3606ab4dbfcca0e4b1120afe340b28f..f4f18be11198fc84edc32c682221b0e7cf035b76 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 ddbc8beead653e187659e1282616d12713ad4e89..5d28dabd873a734d17c3c942720aebb86b7edb86 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 e290b3ceb68149b428f99d2d45d280918f741ca8..353511e13a42d9ef922e3d936b07a682d24a0ac6 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 c656736b555648719083d360d17458516677c676..cee13c4830613152b4275e7390e9efc58d3011c9 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 7e681375bf8e11c66983a7ec52ac3c239791d5a8..d863110274d8ced7b4eaa3aa33bfac845b22063c 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 62b688675e1e24f501b14d3563e522d531e7cb27..eb3be1afae45c614c49bb31c0eade2330af8ed94 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 fa0ff0cfd69bb2636291bedfdfd53524f8839ffe..35786501578162ae5b4e847cf4e35f477feed0b6 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 144be0dd42b02d372b18e4f98647e5721a2f4cb7..a72c7054f0aa06b2770146ab58e4f6ce060f9b6a 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 3f34bbdd34ffd4d4f7d54c9beff1bbdffe922737..814e74ed217a70296a3d96fae6e63350a19d65b1 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 9c99caf715629badd8918108b2981137a37327d2..8961386fa5ac8ca1d40576efbf275dd4ae5fc687 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 ecce32c37559bfcc5a5e17baf5466334fb5ec6de..0a914d41e9ddbf83ba170d0a043fba7ed61c603c 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 e735b28cc4acc075c4d573830ad8ba278de8f657..90dff97bca6d954fa60e8b3a9437d625fdf57f43 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 46d4599e5699eb646158d272fa49e45516e492d8..70d5e3ccdf7cb9119d1daf847e7c675c35bdb50a 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 f17d80d34e50aa095d5010ae5cba610ad5d9d007..0edb8669d6bd6d85fd8c6a0896fb3ff648f684c2 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 8344aaed638cd57f5697997dc3710a15b9dca8fd..3bba30fa26a3942cccbc4ac9e38f131963a2baf1 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 4bbe5fd62004689c9600b1ff406c512be917bb36..d30bc6b2ba673e58796b47f1038e684b68590fbc 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 89d557bce710767b4b9cb2f750057582e43ddf48..2e048ab3e1dfa90e98e3ae675f893be87d16280d 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 3d3f2d0822c99ef876bd5d96f590d45ea9ed2a79..f05f56ea632dd31ca9909185c4e736d2ece11c4f 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 fcb2add4033ca0696a666a84789a5716c577a196..2f28a19d20683d433f95459af8c9d9a560d3d496 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 4fd0bdca7e6e892b403f184e069635e64c3d2085..614df29e7f02c5fdfcbf3880d843e916bc9cb48c 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 b1461ff607d5841035bcefe3f9574f376d9ad7d2..2e9ea6b0c960a9c14a7e06c7b103108d4e9f7d6f 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 032870307d04e8ce663446192cf4b669dfb557dd..0145551906ce810fe01500f6ade8289b70a6024d 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 0b8c778302a38f951a81bcf1088e8911ba0964b6..8dfdfcc009ca13af6275687a4fafc8ef9e3151f6 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 707c53d2e39c9cfe87425f1698a8690ad9251ead..ca246b8f3cf0622201ce1fdc48009ffce18c92b9 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 2f8e92aefb99f0d4973b26e5b2a088e54ec92d4f..1da9eadc4a8fea42c123dd5769ccccf251ae9e7d 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 c6db34647329521e35b077d4e2beb231679eaa25..1a8d5a136dcb3a10836f6504acd94b3838bee18c 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 6cc7574f088cb61acb357a771f0d302e45928d30..307b7aa49c7cfb88200a34c8c1d3d201983ec331 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 bd612a189622188166cce5a3a1f7defa47d736f0..a4337a0bb25e0806b8a29e2819e2576e3f138375 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 3fe65d424df4da62a50ef3c751a0c8040c911d93..f8d197688f45b7cc031aacf3f867de7256f13044 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 3afff45e7b3e97483abfbfb344dfab787307caaa..927df1696c2331f69f10ff42822d5b1c5262a73b 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 d8da8b3a9ff9d70bced7253bea2cedce0a5d1999..15425848e27a3301fadef42eb127d7dbb3f2c3bc 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 335da7e50a1d529dc6fc34650d84969b06ba7a29..5c1b40a3befec69445affaa736eecfe89b682fe1 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 d3a57fb75ddb0401982059ecf88c2d63cec8e237..baa8f477749580f692bbfa68d803e9e513975ff7 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 2b52ce49ac872d6df05bdd854bc06b2dd9569817..71cd3d783d23b4ce80c4abfbd8c9ec83d0ee8ba7 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 a257f372f7cda1d3bdf3be53ae9e5309bd197570..5f14819d89e5ea99d9ffb774e9804107c4b913b6 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 339de9ae906dfb850acc369021f6f9ade594111d..e7da8f5664f5ef3fe3909c75c8bb2c30c2fce3fb 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 8115263e6b2643cada22f2275a860d5014b8bd89..f86850b081e6c394646f62edc8ac5321482aae70 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 6c95e9d079cc9d9682bab8860ff7f92ea0115cd0..0141f4a9179b438791e1ada07b88b9b1234fe5ea 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 f44ec6aa318a08eee865095c5791789267cb2371..a4a904bd719d68d2e07b5cf40c167178f85d8694 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 a54cdebc95294ca48c78c3e6c34bfe4d870a2945..b88852d1543998973da403117e55d6ea7f81f97b 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 8ae44fdd865f1bbda7e00484dbb46af75451e2a0..3c7700fb76b631537102d5ed3411e12014384cd8 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 1c08cfddbca8e1fc8298e96e869bddc08b2232d2..cc0cb5ec32f0c6312bb4e547ace6acae2b507feb 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 5d8b1e13d3118f6bfd724e0b98470747e8b4924c..2e7d9aa06046b9408a6c46da22a8c8ccd601d791 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 1e4e2727103e77c3da550bd15953bb77e53862d0..b214a53dd4568a7d3038ad90fff1aab43a7941a0 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 5e1fe1b80dd550f196e6bc781d8b4d16b4841dc9..3cf142c819b53811face4b740bae5dc50b2dd37f 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 7f8fa7f94dd520ea273e10ed5a3e9e034c86bb33..1f53761fa64183cf5102328fc757538cfe35fbeb 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 f35293a55e60380d94b84e99e0d24c9cc3668712..e307999a137ae868c1f2ee1d7789a9349122fa19 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 ca0f4fcbb356ea59194d12d2d59f9f22cd1bceba..4c77767732ccd80249cace9d3a89dbfb7c3001e6 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 85ac18478b469a6b1fb0cf7d5661171bbfc6d055..9cbdbb2c9bc0dd8cc5817ab4823666edf991608e 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 cddcfeb579755b181a3e3af869620d4d81cb97cd..f7e9073978a7d4bbfb339c3c2edce47c44f39005 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 53a08fc0c19b06b83e67c72e7b3519826c7eb327..5fab0949c0376b61347d60dbe827f25956e39cdb 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 135bd7e5942d85cbd8a22c83ee7ed1f8c5145c84..4dd683e0692b995d90523a9321157507ab94399a 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 999fa728163ed762ff9a3a79c4b44d69b90615a4..c4e436b650c9de66630b8e8176673889b4f5f792 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 136ab2b5d645bb72318b674163c0c5c02b3ab76d..d96accd3106b1f126c41092f106b9857921dec9b 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 b54da8be1e8361a6b0f636dfd550b853836ea609..b4c4d2e102c8fd2a58cda4e4f0e233b98a0daad6 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 a4e66f76dcc07c48dd686156b5224cd159cca230..f2d551279b2cf655078260d96b44b0a6926aa1bd 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 0e93fb8c8ed622eaa3679a3d32a809cdf9e9604c..755327080c7867a481a1268559e8f1127500e5e8 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 f3939d53f84334dc4af5053af6a2f91883ae4c6f..3b66e7a1492826be411cdc63478057e5ff0a7e5e 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 96052f2c2b5b670b9d485644e019221d75387875..798cd809878e22734f116475cf341638389eb541 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 fe2c42352c52dca5e99591d4870d5105317655fe..5521a39e3aae6dae4f305f469012577361cc0dd6 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 8f9c970eabd6afae89c2ad145edb2595bca42dbf..887b60a7ea7823044e5a2ff06f61025698467286 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 9816dbeef4b9f2ba92e69383c31ee98039f6f795..1bb89339b8816787ed424bc83e4ec1b57ac97b20 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 57c776a2e8b7d67c1eaaf89219885a178ffd1459..66eb240b22f23f1ed9b97d06b6a5f7f5d0269558 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 8f9a07e524efccf69c5451d15fb8aa0eb01ffae3..b3f575dfa7f99dc852e2a49d92a1571bc08a8d02 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 53b9738eac99a7d9a955518084fb2b7e1ee910e8..f185fbcedd5cb7ca958a676357d782934b702104 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 f9c789ab2b8cca50c45671762f74bfa26af7ad12..59d025ccd1630faf97306310f81f064eb9d1be0c 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 c34e0fcb184e90123389b982d926c9d6c6a3f1cd..ab65dc0843d959f9d2ad6768cb00633b1110e512 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 68b766475938c1d354a8e20b8aea4abf3119e7ef..e61c90214f9f738e4facf0ab8e44f1b2edfdeb9f 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 19f54d74edaa22e3ddb6938a775f9c85b5a04ed0..e534c0db2e2a0dcbfb218c8fd0ab56f12e6237c4 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 2932b867c6a053f4ee04ef998bc71dc9dfc41388..e1a8a16e4208f2c03e11008cc62be5cdb44da1a9 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 f45de1267717b95be06b8a1e1a344a631832fe29..ac1140f599d11d4682617a6c7c801ba1ab676431 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 5e9a7eb11dd6dce7cba38845abbb28253788dc78..dd99013ed38abeb57eddaa2e4fd4789e9e21f781 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 b4801c73280a44d1b9fce4d17295b959d0839875..30cc58d5d0255b386c977b892b7735f98851a55f 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 4d130e1bbc54fc2a28671b6d022c7611428e033b..d95edf3ffbf45ded07ad1abc7b83b01144cc2788 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 5fdd6bc9aafed599fd3ad889237c4fb0e71f72c2..3261e3d2bfb034de1d4de8fa673207d0224700d3 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 b4126a6b7cfb856ea198ebc82701387a4becf5e9..23c4bcf3ed2f4c240b784be9706d47804fdfa7b9 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 336bb0c1e556f1a4dec65801aae27e8a1e9745db..ecd38f430deb5579da83f2908e060f29ca728315 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 a23756a460cd01979e61375d75476218590f6542..456e6bfeb6a3e493ca889ea1e276e617193efb1a 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 139181674a36387dbe2c1f8c3008c4468bf64055..27f69a6844f07c3d02a8e2de6121668d1b569559 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 66004153b1803c8f89087a31c0cec2797a34d893..bb06073d364484355714a89ba4432266b36275bf 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 e48db3cfcda53a4cd2dbfc0e9f02801c0ee6a8f5..b3cdc7a2a3fd6300953cff4641ebece590d0aa4e 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 de8271911d08037f4965e1bef0ab68b12101ddee..a6fa742cbbdbf743b20852e1993cfe78e96be17f 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 7aa68764eb340e70f3c75e44fce31d3e09bc6f3b..ac2801ab252426837989156bb51897cce9435988 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 dac4afc1bc8312a192a3cb43b0de823550f00444..1d5a9a25de09a584f047b59f9d824d9d79a6791b 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 f01c67f9175422a43d038ea950586ca7e0bc52b2..40c95e22d446417667112545cc41637d4d6d36be 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 110e45330657a88142a08578cd8d68816ad20d5d..e14489c8961f65f623511e3713a7ed9e9b5cc0e3 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 5aad643f31a3652d0491e5070466b70982b65249..e02a30a090e41bb2caed715f7a6f6b986445ff0b 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 9b1a7d5e88310e358f3e6dccfba7b2c01b3671d9..0e5462f647e38fc3bd8e205161d12b3ebef40058 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 b3b3785520d99a95852711b9a6a2177e2b05f19a..0560f53f612ca7d3ae294d32dc782ed20ff9ee05 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 be84633a832911a23961e92733d24a8a446a47cd..2317421253554b950f912ac52abeb50606dbb777 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 603a13f9f9baec566bc518f8ffe65bc580da6ecb..c9168f7434a316b8140da65d7daffefa8058f5ce 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 49290a91ed8214f6585df6becf46c1339d41ee58..25acc5b7ada14bd7e07b2d7c3d4288c5053f3a1e 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 6ae95a1efeb6c1441cc3f46ddff21b23a000bc76..b5f6adbc1b087779e6de145b3f79eac89c8bf4aa 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 fd370367314801a6470478d8f9b0adea86e9407a..befd66940e36a134f65d36a09e046eed6d5ee622 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 35591025ef50689d89b19299ac18e67226af5c7e..6d60906a5e2b187e093ed8da8e6c32b3ede1d2a3 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 a4891a4cf920f32a0413436392c14563aa5b9c19..e9505f6f3be4070dc93f445d279b3e8e86fbb3b6 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 d558ae57d320c584a1594ffe2d8a6af0ac2f6e2e..5c2d2622198e01ca1fb3b1ce0681a2f0044d4381 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 729499db6fe3e74e233f5c728d207616679058c9..95ba89e52569056c70c303b27dbf20bb5b77b462 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 d32fbd03cd54f714136e11648c13755ad1bd4c18..12be9acf1982958fe8e5a26b6a95ca101432a403 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 8e8080988c97d1b365cc6d40a49529550efcfb89..c57299425a1b1ba8d1fadbadbbd3d7f178422892 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 21ddfd6c3d567370df374ef18e1355fffbe6ae27..b5b0c9c65e2ba5c0a54e14db4d89685b289bb8bf 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 c41ee838e0aff5356b12a0ab1551aafe5e7aec7e..90707248c518091be0189a1312ee0632e07123e2 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 6c08eeaa94e5c338ebf8dc8b70cadda2630a5c48..a3944a77308770dabc5ad366d51ef62ea5e21ff0 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 c2b585b2aad26fd976568339dd9a707a24cfceb4..1e1baad435f8415c0e138434645f7599cc43321e 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 e991df5bbcff763b6aa1ff75c3378e4888dca8d0..bdf39491cb45463c189426ffe2e34ea0eb317e30 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 6282856358584e342f2fb6c5ade2a06f3b603202..9bacef65db4549522e511c8ec5efb75b9604b261 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 f4db00b72d013b099d678adc8ca3f54ebd3bdaef..1070d0fc4ccb15793d3968dbf86b96e9aaea8908 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 0d89815f9fe5571e3a3a8a83322b022247e91a8d..3e9b92a19e35a802518ab07d7f7822a643f2a3b3 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 734472f91559ee870da5146b55915c24894d1ba8..959b77d99e2875c5ae918904ac89fc82cac096d7 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 49074080385cfeedd6086a67feb3ee0b6d3bf9dd..b97acd35c087e80be25bb6a8215df2643242dd9c 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 0e1772ffe83e76077e3e788a4c1dd262fb4e4fb9..de3ebf6a07db5cd7cd2393cc336763bc24520362 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 54d6a9ae723a2d2e06b2d0b2794fa2cc08ebe935..0067ead6881a628dfb45a994e4109248c8556f96 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 a23df23148a53d4bc1fd5daabcd8cfb6434e8c80..522dd54ee95e00a3964c6db1f1f6430db15ae58c 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 f3e960898083197064752e0aadfa1bebd0019bb1..becfe9edd3089be007b9d9d5d77184f856611dcc 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 b80ad7d70156107ef4fdd1c6d9d1326585f63266..9e48f7e1655cae92997730ffb05cc98d21af4b29 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 2efae01d33656c5fd5fbd2a6aa12e7ae5ff8bf36..01ab7bfa917a356b28739fe5508a41c3caa45e8c 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 2efae01d33656c5fd5fbd2a6aa12e7ae5ff8bf36..01ab7bfa917a356b28739fe5508a41c3caa45e8c 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 01d7d8308599e22f1dcab33f47562831a7f44921..51ce8c4ecebc5aeea0ba42fbe2cd512e3ade63ba 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 a32b5a4f41a0a25fab05faa9921e3a35346a762c..bbdcc8c4e91773b61d8c88b7351eefd037ccdf0c 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 9729a026d976f16b68df0ef968dbc643fd743d7c..756c32e3a444122ddcd597a978e6cf75f03424e1 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 f509089a96f946c9031d9a1f4bab61066fcf04b3..e910d07be42d87f4bdfb1f8d9432d6dfd1b62a0c 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 7791872b75b075b8e3abe50d51875930eb33efb6..0f4260ca366f2823210467ce162fbe1c3cd02207 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 868e7d7dd861282f409e8deba4f666d715461f6e..920ee558b67f90ce8f4a453e271211bd7ad26722 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 d9f7d02f89b6d386b62136fa12fac8b3238841b9..8282d81cb0ca7db7eb3340fe8e37dc0a2bb44267 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 068ef66d5d5eb60cf90bc653c2c8d6959661918e..0ccf9507308ec4071540268f4725ca945476695e 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 295182cd465fa8c117606797d19062e54020e74a..eca8d142422f92bf5507be4920a7b8c8241bec3d 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 9f9b1add0d364d2db7e889f4c03f74d92d935994..b96501bf35174ea83daf5873533b12876992f5f5 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 62a9d3d2303c3274417a462ca01165abc5dae2c0..25e7b3c0a97f92c7bb7967032085f81fe2d7e415 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 3dd5139b9b7b8e4457e41c00106b4d4ee758ee8b..57fdf89ab4aa97e145afc67de0f8d5d3f3a948cc 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 79f704c5974c6d59e9d8c1429e4bb7ba88e18ffd..caecb261ffe92f3cf5b6569501c432080b4d360c 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 5a2cfb8074e659fa1e477e1ca8425b8ed05f7584..197c1396c93f40f25b7e2258fb5d9301b04e01d8 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 28506916316e8ab9760b52b14aef38015c3b1613..b8a05239cd4d2e6a15a9c6a54da56221ebc29c61 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 de56f1c67342e93d980196deb5d8dc614d802886..8f0a07ee15f460fcdece8b1de515a0343c2e5ca1 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 a64e6f8dd38bccf3f7600f9604f5fa1559932ee6..4369d6924440ba7cb96980262942cd07ed692be7 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 95f7828af5152f910c60e4e7a7cc69c309bfb99a..b41072b3e1338963da7517b407f64b9119c754e1 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 bc94baeee8d4e50766a2b52fb2e3d7d84f9a3f2b..45f3d0d4cd880c730245ec10dd31787be64eb6c7 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 0793e41c0d0b9d14b87793ca1e6a5ed149fa87b7..8812f04be28f27b0f26f87a1d39f8ddc1bd1900d 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 4ac80ea0b6d6036e1c8f08785aca5c78c6bffeac..0601cfa229e7cf886411b3cea6400c54ba4e47db 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 d955a1255efaa708ee3e772397f2b32d48f554e0..287c50dbc34e2ccb5057b64db92495be6b170f4a 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 2512310196fce253d288380453b7ade375b51a51..47cc310d09d8ea4a355d2b5a84f44ed93fbc3b0f 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 0cb6e50c5225770551cb066a77a8446ff3ccc4fe..cc7eaef5a646330e91f2b5c569de0a9e36548707 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 92b36992aab55b602dc0def50bba242c8e031e36..15b2294e2320099e157ce9bf7818635ded2aa078 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 fdd8f92e92983cb0d9389d7e5d2402df84fae764..153ff4c982caf1f21c1726b67f200ee2bbca096d 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 b33603241efd0e8e84c35016eb913207d7a09d97..0ccabdffdf260639c8a7d1949cfbead8b0edb2e6 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 1642474aeff6b249f19e5a1286658093fe0c8042..6450e35e577f3756790e53012671cb64306fd97c 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 f9fb0b4c5879430bf2dd4a53f0e9869f611be508..c698e29973c27f81187790b725ba6b20f4eb1ec0 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 63d898b75ce4ed7a49d5ef5e5f489a38e054bab0..3233dc9bba27a76b5fbfdd31354636dd654aaf91 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 b8046973834e8fe786c12ee76300c51d4c98462a..80de7892ebd4e98248bf19a5eae9cddff2e98e1f 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 d8af099ef3ec4404754ffa1745b0e8e841780480..8ec670f8a60747c873b414c6f9bc7eaeac637837 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 540cb40775cea257f5d139cf87b6d8833283209c..d447052be803774f253f5fb189067d2c8043f239 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 bbe1f26ba021be08910312443d0976e13a6eaf2d..16e2e67624357d9290adf7a082017a9633fbf9c6 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 51956abd022eceec5e02fa38f334574103219792..fa1b4e754354d6872cb50d979ca2e56e0d301c8b 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 21a21e565d9c44eaf4580c392aef4cfc120c9f17..9f55e47b110a6f373351495883df3e5c68220286 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 59e950e2f5536359681e41517d166d5e40d316b5..538a8531ff16aee83443c473f07454c4cc6166ce 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 3af02a7f9fe9cb4fab84ed2bb460ab8e0fe1bbb4..842f2b571fa4a3fea27c5b0a69e93536bb4f90c8 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 7116176ce35999a760c6908c3e71394d49925717..816e1b9d8012851639388d98d88eb9c3d4d774e0 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 dfaaf03817beec5f28c24a64a9a0c93d2c0c4578..b0e53c8c988174e96787a0c1a51036431e996840 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 518ef4228fc9d557dd57783feef3e82435fb4a7f..8b6eaf057da36f533981bf7910b86b689914066c 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 a92819c7a3aefdfe16849631b44d411e092eda08..a76f488445eff29fa53a6ce387b0d2999d0d3639 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 5aadeb2a6aaf2bbcbfd88ff01f3cad626fe1b163..b8a3fe303b1c4c5bbec9c1e5aa44419c00251c6f 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 6c2d2260a49bb0d23775248bef440f0a3051c313..78b07c97da4b0007aec63ba33ea1f754bfcc3c23 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 26b32688a7eda2d997322ccf3fa5088d5e338827..0c65a0a6a5573986819bdee41f0329d8d587ffad 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 b0dd989ff10a8256cd5ba2d1f5599e4371a3d739..67f87108c884939fcca6d42b148f9e5e4d799756 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 a616404a8a6251d0ebc316aac5a867e8675bded4..b66883956639d003f8e79055fae644a5a7b8d273 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 ee4ba74473a340bf0dfe6135e893857b7fe871a2..2f93dc79bcae417c89cfa42a67bb6efe9b4a56bf 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 208e40b15f8372bc1701e79a6c10b4a70e7d6b4b..baabe3b3aae0e6da038ef0a7485c8e7482ca830c 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 a60b6ca6fb664bd5b20ee8886be2a80d6d2a2e15..263c4d1d05f5fffd05e486c5c027d4cf35ba37f2 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 1c8297cfc0b7cad44cd0481c8c9aab9f387571c3..9ba3c4981514ce9b64545bb5edec140c3a579702 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 92eb3b1c78a1a447a1d92b03ec0229016ef67a73..e1991ca002fcd05d16490e6edee068c0037bad9b 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 656fb3df46ccc086b9c47b7175d87998570e8f9b..c35b5f1828b11d3e0757101ef8f2ec57dec511d0 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 009dc386663ba8ee02ca4fdc9309f1e762cc4146..a101b25a0165e62f82aa7d5b65ae8560da01cbf4 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 1cb09ccbcd019703401a9131133117ded2838cd2..9eb0629edc5b30a2191c21116e35b759ed128e5b 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 a6adae1e9a93da68a28f162ab920164ae0811def..764f13377574ab249565639d259134c090623e8a 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 45ac126b38601f94d3aad717972f87b483b95b27..a8c6f36b1eb6624a309bc2c0ff8c7b8c01179e7f 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 d67e241fad9101044ce4767619bce58349855263..860cc358ca7d2d390e538ad499cd2c70ac4c0bae 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 10bb8e6a7c086c5d25a8bbdc0691b6935edfed68..99d9364bf9e1a8d19c512f94479a0ccaedb9a484 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 5f1655b8018dc917d44f993b91dc4cff445fa4c8..bb9ecf562db40be39b4f51d9be082c051a50922b 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 65872ea0e2f0ec4b07559cd29487f1fc4e4e4da5..0f3201444aa3d7ce8996f472a3f43790dc9a8598 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 fb4e746f063e23ac14e14dbfd33508af32e5aeb8..8a3204f03d0b8ef4a11ef3c85e58b83f16aa0876 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 ca3912a33320fd2ffab2de964dfc0b02069538ad..f162c4747604b80ad3d33994ef09fbf52fbe6142 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 a79d6db6145cd95b50b7f80e87b1a8983cd6235a..78cdaff5cba86ec385987dc484d655671b64faef 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 3c138fb907879b30711373914328fba25b062a42..2305753fd7344e3e2d05025b87f72115e90669a8 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 7a8b981b652a3094df252b06615548c1e958d507..7a06bb3610c0ced400b325267dc1163d4f527095 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 e10f73777245a87b5e5e03a917cd79e0fe6973d3..020c5f54641f2421a90ce15aff78ccbc203fcacf 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 4a8da2b281b7a293a30ef7a9568d7c3700fc2e0a..3e0f5bec5c1791347f0893bdad96e2bf35122d52 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 fe044576542608e6aafd4876cd5a2c6ef4a27ada..c6086719224305af9e63947fe439aa79eed9051b 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 9c2946e0ee91794e502ecea04276509f9a62bd04..b797db0ad0845429d9251b1a12a51994be71b49f 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 f1b349dce36684331eca85681c1eae07a078f5cc..4d3b2e3bd7787142f063bb0a6d49521ca946b2ac 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 0fbda8da1910f5beb3c483a69391c2047f3e8829..6a5accb3edac85c858bdc2bff4026b27772d3f8e 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 427ae595273301edf06b948f5e5f287a14ae3f16..9593fd1b9c27bc92423886f5e657cc51476e4630 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 c33797e0a45cf5cad0f3a06e5aa39b5369266b81..046e386711da164f25a6bdfb045f5d8e29e6bffd 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 53e76ccb2f96e321549246a7e66b417aa50a3151..d7a85c103d3d7a43efb43fda656dd5ef3053663a 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 bdcc5715ada77f6c22b5534d2a9eb7f18a470167..53d2f2896bb6475adb55cf7adb7e073941b7e7b7 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 f0ec2b35d671e4a3bf461808f5421b9e4d63052e..e7a283f0339592c295dbcf0bf0b33c1429e1b5f8 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 90710f88f4f8e2fdac07d34bc23cb20706e64bd9..39323db32a09801448a912745b2d9d21f8249cab 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 c00e68d58afee016592c0e2d3fd2e5a3586c0ac6..4b6cea757804ecb5a887436c369b818a6c34d372 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 72e4ecb88d85bd42096d65707b9a0137c5d17948..4a064ee7f351e5fc1a9a764951110c37e8506af7 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 f8d84399d30e394f817abeda80bb2bb429752883..6181f057f924d9f15b8b02464d1c4ed31f9bda8b 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 bba22b7e3d5bea32b93700264f460d775d8da61e..a7ddf6e8f881a84a4cbf551f35ebcc5a8314ac1f 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 ea70d1be214eab732cedc3550a5eaf5f2142f1e4..8150e2e71cb9ed98977a19a60a7cde1528f67722 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 cbf78fc8e03b17d2c1480513e5fd894e1e4412bb..1ee356558107d72daf59f021e52d33a21343879a 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 cb318e0d1ca8a126974f3f7abeb26b6f0e20d379..d68f808c41235ab007a8d0c88b09e900ebfe00b8 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 2421a54eb8f69e4ab63ed537469a82cb6794268a..c58a19961a4f3428fb326d048f62d0a33c8b5712 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 b710c08ae7ee1ece2c962d0f48dfe262945e6884..b60a86d15f23a277e101da61130f4fe51e1e1d40 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 08be5432d73724973be8fa332d1e102f9b4add4e..55b27813ee713f5aabf87df7890b670a85f990e8 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 cad50dbe39ccc96b5de20232af33445f838bc639..a8d12092046bde3409aae443da6a6d294c0a6178 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 1da45bbbedb933a3a7a3ac0ea4e6f0e9560eb4cc..5a4a70337e3be2a1c8f35c0ef2abe1ea4313ddc6 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 5ae26a8735fdee7dddb98534dcc792c434b07f67..1dc8ccbad522b107e88baf2f03240b1caa622b7f 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 914554818040277d2c181d134794e9fc97bb2aa6..5f376b90916daacb281ee6e0003d539305f9e0e4 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 d34bfa66a14aa17d59bfb3dade1b0e5524306086..2ff9fd56caded4f4e8318405cc5b628a197ec027 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 f483d1ab9aa6683e4c01dcbdf1e112cb1656c43e..47dfabc209810df7ff445ad339a5f2b6177b2b0d 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 b886eef285792aad717610657fc9a9483399d8bd..a838eaa404e2b2154ff073e8d9b9adac15cee539 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 7ed0162d34e8f5402baa51e5f9f91fe2be25492b..da5c19e14ee8080bfaa93f7ba41ae886e802c77d 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 36337ab47df5dd5f2794f459bc1c6dadca87e9ec..e6999bdd10b8107ee35f6be875eb594f45d141c5 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 4810779adb26e92b50fdabd87bba01948f809fc5..887ec82982cb6303c360745a84cc63c56155c435 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 3f3753f1a58a32dcebd0e22dd64f88269f8ccd87..3b86eff300abdcf8221de7629e290ed050ee15e5 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 192d25fffc7ff3a319b26bac277a69b614f0e80f..f1d9459cec9869101c997b765d7992c19c0d228f 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 575407fd728b50ceeda989bf49fe34ca4e61a249..626c459b7deed25f72d88978932b51050527add9 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 caad2b7f2dc792a73ffb3afe3d04b0d56eca43af..3fd9a5b2c8307b73f9928c25e28916acd9aaf47f 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 59d2fcfd19a79bd6cf3101bfd30a6df1684bb01c..a19461e9183953a85fe31482a8627279ccd5ea3c 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 5f288fd53ae524b659e3651e03db8022694b7d28..52d6b834950b5406636244dab286a4d04b87c12b 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 ba71e8255449055039a6808ef38618db2fdbdb9b..8b5c5334eb37e3f942f6987d3d9e54433726fc96 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 4ceead7268a231c5da4303f29a3e2a3b18f8e7c0..683118115ad1d1c9d884938c4da408aecdc1053e 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 4a34b13d13b1ddb4ca9f41c9239c11900f2dcd88..27bcad71cae721db4a95647562f2b358a855bdb2 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
Binary files a/module/VuFind/tests/fixtures/content/amazon-cover and b/module/VuFind/tests/fixtures/content/amazon-cover differ
diff --git a/module/VuFind/tests/fixtures/paia/response/fees.json b/module/VuFind/tests/fixtures/paia/response/fees.json
index 010e18a05fd5e65aaa0bd05ae66603b27a564017..b778021459a600877ff9a3ab932d10c2bd866b9e 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 1197c2b209db7f254f97135e8310e9c336bbf8fc..38da22b5cc1b492a1421f5d196845376ebfee84e 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 a8af9f56596d2e32c0f2f23f23aff1efa11986bc..02fdfaef9a3767b2187e547a15a30c37de665328 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 c24b8a5f4ef36eafb9645dff06a1c2281213644d..726cc264aee973059a06876f1a2b81d03d4764d7 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 6172fbbe318f37f12d70e414497440e4d21a44a2..7d7a7f82cceed197f2d039209c7b62ecd2870c64 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 69d42a478dbf5b466ccf63e4a6e9ae909715448f..2fb2b35d9f4fd1d0b43f9621aa8d77e5378f418a 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 2ef78a9997e76496275f8f7566f9b118850bfe6c..e30a1167dfe52978a380574fb5b26c5dffd064c8 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 e30aaf0a0887289ef524b4cf84a4e37cb19c0735..36b7223470fdd5c9e2db31c83f961cce3e440205 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 a043d269477802e8bd64fbac2de575c60c132b47..a535ca58cceb2b7f18886b8f6d378f687ca47773 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 7334e6f0cc36e046af50b7572fdebbbc394a822a..9e13cf1c5a19bd1fed4e310dbb5c3e5a669ae301 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 d07c83dc503315c040895098e6119623d20f2cbf..e03a025fc9401f3c5d5098b37366c68481a996a3 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 557daa3fb9c5c8f77d8c1da4d65a14bbc205e43c..1cb468c40332a271772fc9b3b27c8cbaff47daa0 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 2ad8163a007a7763b6968368376528e96a7f1ab3..5a5323d4cceb537b037a7acd974bbe78a8815d57 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 13cdb68b0c9d0c8f06e1b244c3674ff66f8f09b1..4aa80e7442c035831cf1ee42ef3e51f542fee2d8 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 327a73fc4f2fc5ae7a5759b1f8f9bb726e71d674..ce58562a2bd54e70c3bb6c38b9e461f58fbfc544 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 0de2ece8b48dd2f658e590dd326e0c8c0ac875bf..a7d1617c0dac52205bf2bb5efa2a802329577385 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 a78c49f8c5f2e0bb5b5f40dfb75c02c2b9e2ef0f..ddebc2115da15441cdd32e78dbabc60b4ebda996 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 214ec1f7a5dc7c84ea491d8c657604793234dc45..b705b0d0f81c6974ab7786992d823fa9139e7386 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 5d30c271ded31750bc71fb6376c9b6777f4a6796..d7d80a0c47e6328062cfc87d062c4d7503278d98 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 542bf03565bc4cc954af7eee3efa4041aebc0ca9..632732bdfe542ecf70cd38cb37d0f992c6a694cd 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 3ccda6821d87240746cf07a9633d7702fc219a32..6bf3f3a0d7f804a1ca9000a14e1cced1c43c0770 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 35adc059d4899f3ddabecfb10ddfc13aae082502..28048abe0e6cb9d97478089dce1e4a011bb6c94d 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 c8f9b28931f86cc1b010c5f6b67825412568589a..23d3915fe526d8435881dd1ed66902180f1ace51 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 273156a142c22cd022abc7cad1afaf2c9b6123f8..eeafde175cd3adaedf2a78b2c6069db7f3e35079 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 ead0d94022ecb19eddc798fd0d1c56b0ac9ff20d..d5743672f177f34dc1dce1e4d520597b67be8551 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 c835b7e34ca8928a96cb23215611195147dcf43d..bc12cd7ebad31c4490e5c67ee367b705fcad6846 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 12334aee8d5fb311fe91fb484c8f1621bec416f7..4b8699502ce3d5f5a63d9aed0260239d6628355b 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 c35d9b7dd3096ac9b31a64be860712f62fe7a313..bd11ab8f4f8a92fd94f48ab99e21fa612f81ccc0 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 2765672c6bf27c27b804497daa32520d6e3eb8eb..9a173c99104802600abd960f7e354e286123f268 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 42183d039d520f9698c3b7f358668d6f36e6201d..282c01c1ea4e76be3417fa4f82a9854de37b0f01 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 e37f439bb0cac43ded1f3ffce828132ddbe8decb..89fad16fb9a75a8d3ed58dff7f7b3972b82625b0 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 05a94763808f292826cbc5fde9b23d6a2c3fc6c4..f3333869fe220ee88682337d4bfaf6604ca2753a 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 6cfe340cecd329f2d72ff4bdd7545a94dd39fa45..f1f61ed3721d58ae69ca06bb9bd7346ebd31a15a 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 f61e5725c5dc4fb2cad84881d01cc03f60874ed9..c1e54081754ad77045c4711019a2177d2a37bbcf 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 536675bb9836686a02f096f290da97985ae4f517..faf7deef3b7bcca15b4131e40333783bb9321ba1 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 a4e598765fa7227578c1c1b6493e8db6c9c2910b..bb0fa18d8389d22593ad10ff403cc0239d9129ac 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 3f2f0ed64ed2faff363e7bfade31a4ac3f0fd884..6d9db0e34bb487c76d6b08a825bae638a44f56e1 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 67582a18f9f3ea368783fa21ba09efc785c0b050..e32bacdb1b19a870598b7080fdcdbd05b89483ac 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 2f773e5309fbf7dc77efb38db1ec97b08806666e..efcfd628e28b67981d4ba669a030462196afd5c3 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 2db0ec683b449ea090537a6830e77be7816ecf5d..bf908d7f6eafbc7dda3a154ee82cc6a133ada314 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 1aaac442a6e86419b2ac805341f88e8ac6bd2101..af66f5fccc78a1d20b64dd2e6ecaf65a1cbade6f 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 c278d8344950f999b894da420d3bce878be205e9..78398a70bbc500b038b9b618f95a94746ac7171b 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 e657a9749d89c8590f3575cff8f4ac766d1c50ab..c74882e46dc4ccd39dc1775371bb2b78327da7dd 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 fc7f4d9dc93866333f22cedc2b9c51ca11ca2b75..600d1530ffbbdff0b6c86e52528a2a752c03e360 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 534d9a2d6882ddba36d8a05066abb4163ea6abc4..04c7d3117a325a036ca49316fca467f78aa327a4 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 1ce1ae16bbdce445ba8c231a7c7c7754e9bb1748..486db2cbf06cca580667217d9ea3edf8c16c72cf 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 fdce42d1538c29df4f6afea283f80a9ca12c14f6..b5ec137362db3ad8a63ad2724f395a3c0a12ebac 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 e6312c8f598fa39929188b6399872955ebbefb2c..bdd5e326329e3b2bc7e39b3669d361b3ed5c6ca2 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 2662a8b5707d2f8a0ee41854b0e3949842113929..05cea73db21b10a23ab61b020dca19542e191da9 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 a6f71fe332e0af8eaa3e1d9b9e46a3404e85ab58..f79aba37c172a454b91271f850e03ebeff01e380 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 03192ed6a1d409730dce55a8d79a1ef78ca413d3..97321280845ccdf0f80f40e4ea3e6a0e2053f72a 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 043d113e2780c5fc8bb8a599c7df1a6264be2d63..ef696dbc7dd5e683692e3b1e9ed66417c69f65b9 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 5e11d90f71c24f749262c01abe0343787dbf3fd2..ccf3f4b7b64b646cde04583f08666017f0a021b2 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 851ed35cc20f5947b1a1f76797ec05986e2c425e..ec925a6867b533c5536a7675ca0b47478c1a28c7 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 f0cb075ee5ef9979172181ceeda527e2c614fa8d..2929f7a3473fdffedf7f334691f4373d4bcae351 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 092f7a97242ee2a1ac5cc0170c0b52c954d8db5e..1284928cee366657de8bb2aa64f3d4ba1c0251a2 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 8b8fe791c780f58958f3890e84c4843c5a13bd4a..ac4948e80c246b587b1db96a988cfd63efe4d1cb 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 6e3e95391f3f1442b8aed6fc0310cb9aad1e0468..8c9225a4b32ebda6730a429a5a605269860f11f1 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 4a6aa309a26f859c2f818c97df8b1588a92e0e39..ba7fac5f9b6bb6d55ffd812a7e974cd65af1d4c3 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 22f1e3726e443fbf03eb5987082fbda214fe9471..42a41ebd5b823a88e67e5d0a2be5e47fdc6ae41f 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 f514247bedb524fb70626ad3fff0eb664708b009..cd30d89a50661ac7116a3e6593de8a3feff4b19f 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 35ed152a1159a3e7f6fa7f637fd987eea92c262e..b341c8c179d0e0b1acbf86389432f8c14aeb9404 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 019657b6f41636714d46a9263810f3953b8859b8..0a7832ac110730dffe9c7e4cb34eb725ebcbff3b 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 ddc0686f64d178af6d190939faeb9e543aa6329e..bf9a08e9167427ec8d843c4a764d7c069e036d43 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 accb462fa82b8b6b66c2b4c387d7b393e10ecd9a..70828d0baea1e968773622d27994e64e105c8f29 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 06a655e8230b5eb5eb5e3656e4d42671fc714112..f38ffa8366d520ca9df6304756ccc8554e5d37f1 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 7fc032c97b4eaf1730cadd324f3035bf5dfa7d09..dca067a2ee7dc2f08da05a7613ce1a821635e7cf 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 adc1f6ff9ec0fa3c1d216672198f02a8d4676109..6c341a8e376705c8ff23851ab28a83220d5bd130 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 471e108c182430e839bcd11c86e69362a685d6cb..a8cc52a85f7e5d6caa32af3217d370a057e2b5ca 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 8d7acb7659e19345ce1877dcf4062f11a1b885c8..acd53a180fe3f8375829d6c1c6a26518cb3a16eb 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 8da93fedeeeb559bfccdf539d7ab92523a033b67..2970e04009146e585844fd1518ae3c701771a103 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 391a388ac5e49e207c175b3a9d939f2a60533723..bf39bd4b7f022dea5cd72821174cb0abf1ece03d 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 3a51447d73811a271a0d1e8d0b205400c26aaeee..636ac0f0c184a6e2348eff70f5fd045148e4bf6d 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 d2ac85651ba6135dedec207a266d7c693d101c9a..79a0fe13646fba014e0a6a4260ff7ec450dcac64 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 9958062223e82810b7f76bc3137277d5b36aa366..52fbe7f9231219b60475b78ff855c54e9eb753c4 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 7a65693ad6ed3a58679d3b49ee154c875fbeb6bd..820c9a28ac5277152759212af7fff01967f155b5 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 6820dbe1ba58cac665526305ad11545e9fcbbab4..1b27211c5559c822d7c49b70dda5fa698ebda1b5 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 e16a476718adb39bc27f72a4bd0794d051ebd2a3..f6f21f1ab2684c36b88591ab437b9749228fbe35 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 7e1d337f421285e73963fded8cf2299917cda80f..b738fa044a8e8add13bc5a43cfb877bf3f39057d 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 7d6d0a0208fe1b7c56c2395df74b92507772599d..ee5fffedd77cb263f491b710892573d4b00bb77f 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 f45f954796657877f7a6b1e8beb5d7c319ec2ff9..50f329b37edac3990e57fded7d7f760a445612f2 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 f8eaa45234fbaa6f9f770e1a7660cc64aac876d7..b0338b157cb1e5590ce6dde8353e79e2ba31bb6a 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 e360068fa1eb4cb6a0502736463fefe017093e5c..e1b86831cf228cdc2f7455f9a4a9bf32a1ea9b2c 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 df70c7b3b3f122bda84b448fc894ac8e2e5c011a..ff2977c3ea69c9ef4b1800716c3770d46eb1228e 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 6a366750bc927f2091df9a685a5ebad555f7a02f..c8f4637d64a5ee7e6f70caa449624731bcbf6453 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 c65adb3c154bc645f8a06c8bfb8ec1041041a2cc..196f8e429ede442a84e60726c04c006a7c704a10 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 099ea7df6af35d1aeaf3fa3a30538d47c07130d6..5336c3017e19734826472cc3d334e72b3400cb44 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 ecaf3401bc53088057d9ba46faad73e632927090..8d9cc083fa779e7324f9390eb6793e7557aea544 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 9a75700d5a3dad29a80892c1f3968e4ceaeb2374..2920e162cdb3b740a2177321a27a0d36aeaf7410 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 1b19096ba3e8dab335c5e62c071c22b45fc47b4d..bba918fd5b67099072f85c2be45429f307ad92b0 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 c96f63e20b7ec94e04853f48a110cc246d8750a5..6ddec0d11b51b8ec098cd11d8aba89b931c7cef0 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 880319e6adb98f37f736d6ae3d9de62789a39204..f2be6f3148e4b5874f9ebc7da8b3dfb52833c5b4 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 a058e3279141eee71e6de435d35f747e85b77d33..0e6f8cb1c5ab3698d9cb1b44ea9bee096bc03af0 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 d374ac20576e7e635854afc456e35ec3b5857ec7..d473a1825376483ae29357c65bfd0713614b6b1e 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 091bd8a2311915e6c40e740a393ff850031eb389..091efc633120898bde6bfa26c2b82581301b2584 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 be88993963857e8ed805bed4b98f20575600e6f1..29350c546c1a7d4f769a3269543f9af4c4336bed 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 32ccb0f284a87025f0aed5f0671ada90593d1bfc..e4ce4aed287bd3211399b8c0db440a9fa273d73f 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 ae02e611566125a930392d6ae10c6a50a5361164..d06a474c1120a838a3bdd48a837da8add1e9a808 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 e17248ca85b73e9877e602042eacf5cc7230e965..7f9434c4c0a43d9c0c43c85ca62f9e9a6e1f32ec 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 b996ced089439e6842c901b56c5b15bd324baf69..8212159510bf39dd6e49895813cffe63a0b963d3 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 a19eff2f028727c32b3d7312021532588ebfffd9..9d42ac6bd3930a6b4ba20edce1160473dbbdc3cf 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 f3849a2aee1f8799e57538e2eebe885e10528945..d521c377a15c260311942d9e25de041319872304 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 ddb96bee85224aa5b7cf497bf49597e02e0ff9ba..40341026205b65f4eee4e38caf8c89ce869954de 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 48079e59320be94a0dd8b221cc38ec3f7353053c..6fef65a0abdc70633bcac1f048e30787d2e31a1a 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 8c68d3ed90b6d42c47840b468c1dcab9117f165c..e34b0683a0b7cc0c6d98d6d3501ff345fb8a8c54 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 084fb29b3e3d9ec6c9d6018c48f42f40e2dcf671..d3ecf8858b7a0a92bed2d15c2c8ee44ab2160425 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 62b714f89c605d078a4ebf8566fd928fd9f22609..9b347e412f65a22c6a1064ad377c9ce419501721 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 20debbc83eba7f833e416d89a25a8bad53a21f6b..ebc256be7fe49817b34cec32f604d21951fe6f2e 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 89e99502ca5748e62016307d2f8552f2ad81df08..6b4e5007e41f98049edb29b15b0fc051caff22ef 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 98c3676a86f9629489484c4f465c5bd1af3354fd..ce3011dd63c55adf07a7f6b465d6574b9254bc2b 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 7fa28a5237deb1330181fc22448f54026385e820..819fa24b99f7ea862de9ea4186a09995f7be9e47 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 8daf2b14155d45b94485a016550f840cab52156e..a22447dda529fc0757f847f780294ef2e7c7670e 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 ca18f1f57e9eec72453bfdc31bc6cfd3215ded9e..eebb1cea17beb7e70dec8dae76945e922cba6838 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 93c6cc966245118b345e4d7d72a96fb87c8dcd4d..3a42c737dcab073ddc5e30e7f063308ba252302c 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 2757350182fff677bd57ddcc0a77275e343f6f01..c2f3b3a6a51c1fa41ff288806e907c9fbb843244 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 e93b241e9335630fbbfabcf6cdf94f5a26d45d6b..3287e9d18d713aec701f2f31e04bba01735af9fd 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 e874986086b1dbe92aacf06cff588fe65f9d9107..a0a30f60e312ea628132b5eefda7cd7209ff0450 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 1e156a1864693e471214e9c520fe7242ccaf6bf5..9f3dd1f5ebd486aea6b0e209b3c8a2436ab2127b 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 161f248055ae6547267d56f90cdcf9606dd17ebf..dc2deac3debc36cecaf083ba8eb269fa2334aeb1 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 17a5f45a79e1339ba29bb991a27684acfd7d095f..3fb82b5b803e81e21c1a5f97eaf6be9ad777ab67 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 178d316309781dcc546c3fd2abf28d595a07c958..5f628e9ffc69e55ccf239801bbe29422d34adbbf 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 ecc8292aefea8845b44a742840a22eae131fe7e2..4c284916c88751538a417b7f4c8bb45bbbf9a011 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 4d80265e5fef41064d76a6340d8d76c186fac44a..c4a6dfa282f6cd607ddbd54e9c891acbc97f2a6a 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 7e1bb3c5cd1ac6775b03d75bf2c904fe24afa66a..591ad0db86b1bb7febaa40045bcf664d86b5112e 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 71851a7c866085b8527bbb0f5d829fa5a0ccebe4..5acf112af2edae48203ce63b9e4ba082fc374858 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 d551909287fb5a3186b50c18d86f3afa30d7b638..a235cd00f7e3772adc11c4752466d86627c914da 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 a7e0730f8db35fcc59bb53f911fc7d93a195bf6b..369fcace55aa2471d30eae0675fe414b92b86629 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 135616e255cd7ffd43c0532c87b4f3be130ba3cb..050b80e1b215e04149ff945fa1a6bd9b7a445983 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 1776c7037e781eb6bbf3793ef6c7f03a418004cc..3ff6eab716da6cd7af4fc6e05ff85ed2ce87afcb 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 579c65c1526aec679bf285c6de70fb612120f4f0..b5d4a74642a506205823badb4c5393bea4b4679c 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 ea1fa137ff4f0ffd764952c39fbb576480e9e639..d51ce4ecab645dbc7acf0f86852629225db292a5 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 0394f6e91ba9a6d7f791fcef61e862c4092e3f38..1f89e04954b07360295154631293d665321087ff 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 62f6f016cae6c1419a88fe4214aa5a4678a1d468..2e998ea86311420222985bcf4ca66376a295df31 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 7cbba89e5e6a26a8fc7e0457b8ff7ead32b7bef2..286b3e672d5d977d7630db0d7cb745826f53b345 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 09afece364288026b8bfba950a2ebc457677e890..f47e63aa1c612549068e0f890eeb8a805bc6d42a 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 955619d36a10ff0a3bf565884e765a041fde10d9..04768b93beded7611be0993af6e81c9b65d302f5 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 9f2f31a1af718032814b86353a5e43c68e6641be..f0ae99bb4428b4e76937be1c0f35427e0fa2b9e5 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 a03e1ec4dd0ddb338355f8697efee923181c9bd6..5834527ed414491cd91ff5df6e569ae17a00fa7f 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 7d4d7b53b3a303f6ea6b3cfc7acea2667da2fb03..db4b3b97772631705471a277bdae21027fa536b8 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 8db422eb84b3ef026927af0e718c05765d0ee1bc..ed0f0d657a2779d79c646aad89bbfbc9a369290a 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 6b5f64e0fcabca0dbf03ee355a5f7f077d3ef7ed..098279b7c25755dc8a9d58580cbe613f09e17dd9 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 c130d346ea61f90938c6bdb31a173829c0f3569c..e44bbaaef67dff9469364b1bf2975e858c4ed455 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 23dca95fb007d01ba6fda90be027177b0bf7c00c..9e3622f632ec4aa258de70a991369af5a02c59c6 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 9db7b83d5c2649030b5f5613fa3fea876396b100..dafeb2889573e80f1bec8ba1b3bedba3ea9c408a 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 98db89ef69ee46538d4ca669423d1213367dc78b..a8ec063a756655c4d05795b5f24a030f1ebf8271 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 615112fb4e4268bdd5292b7afad994724c63715d..691c01e74dd108446a8d160ed4aa4d2ea3e56f50 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 27cebaa3fda504aaeb3accb87ddf06cd04c5a8ea..237d04d90a48b534cc6536d512007c3935fa549f 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 f6e0298c06dbf526d8eccf26fde6452874cfe717..fe50d8748840f9134340e575db1fa039c0d29432 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 9f95f2d302d9f853875f2714e5bdd5b7b8c00ec4..3e834ac2ae3048783a4aa38ccddcfcb114aaf204 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 6996491370f4469147c717a08c371227b2db6ce9..1e7156d5e6ec6428e0728e58af533a68b4a84159 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 7f1c0ff333fe0e39f47915c2089de1394c88b44e..b6412b4a21df403e38012b2df4cad4ab4af63234 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 8037c4bbac83556d96ebcd66945b426896d71f1e..7191512b73b1d14d7dae4d1983b421f8c9a0464d 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 77ec90569df9da9c08f9caadefffabf0bbbd3d32..0540793eb7fecbffc9459b52ba9a196350093542 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 e9796e405dd677b8a784e6b13ead80ea55d39e45..6b544a1a0172a215d399ab6171685030a15b73b0 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 7b0278dd2ad7a3a099066b8804729cf7981bab1f..d3f643b77ae306c36a8b4c473ca450544b4ff209 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 758ac6db9e88a2d8a44d661af225956a33973fa6..e525e74af1cc840d987a85bf86bdc973e291749f 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 61c37a47e0be8c9901766324849df65b5ba6e0a9..12fef255af3633c16d955f84b962bdc8b8676693 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 1e1a3fd35a85b1678bd03216bedd82c334b0e8f6..d2cf32b607f4b0725b09cc589348fb62c82a732a 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 05b00b68709ddcb28dd1173591eea2e1909dbd4f..5c089865155b16d369ba7112916aea97e8bfb684 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 e3c2782d727e3dba6c7ba0852b01c9632d8a6e0e..839864f9d5bdf4a2711e722a3f99637a4fd52471 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 22fbd2efd596eec44e2338261f801c86313adf47..29da75811eb8b4d41166fb51b283e5c5d84913ea 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 2456a2219599eac39016c5ff128391a9f5bb6526..3d1f20688eecaea3b32151a16d402b56ed895f56 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 62b702c49e42a8146204f054479d578d43b29bab..7dbd4074179914340bf0adb6f28adea8997707f6 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 dacafdfa4a3e8ab0b1d436f7f20233c0e3c09146..f9d81413f5fb2611a301275aef852a9ae7962f63 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 272cf6d92daf18e93da0ac0c2783fb5875730534..60067269391ef6ea75157ad11d8c308a9eca1775 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 2075717d888456c2417a0ed60655cdcce98a5cc2..fc953e71eecfce18d9da27ed66db504af9c37304 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 8392d581028ed35d7618e450738e176442754704..9c6c70f010663cb030085024bd308d108b811c19 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 e4e4ac64b22b628517a70c1f6234a5765f8fc2ab..03730e9a27028766cbc470ea89e382c4dddca204 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 46d47bccaa701752403ba9e9c49ff166fbdc11f6..bcea46702d5308da54ed5f938f11ee146d76e426 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 075fd8d688d94ff496ad9b69a41073f906d933df..3680fbd11e81eca7fece0313910dacea33aa2888 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 830bcc9818e04d96f2c7e361fac4d99ee79eadff..c21545e13f7029b7b1cdd216d7646fbe79fb5811 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 adde79910662d6761f922db7dc3682c88fafcf4d..9c3cba8ab8529606316769bfd0c55993a17cbf00 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 159743c8b9f8a8f2c0425a10bff0baf74d810285..de02df81e3d71760151daa335966dbd79fc0a7f4 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 4c4445f5636c20f75e50a0f7b5b01af492a0ae81..546ba7b710c390676d8592771fd0ab136cef2e01 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 d240d5b779457edd6a840fd03cae5dc3f830c52b..4df4f5f215ee6b0229e0886c7672eb0f531bcc7e 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 150faeedbcd0efac1b92c520fcc4da6202694425..8ce5490c53dae1dbfa281a5e9f7d7dd6180bdd29 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 4e2a32ee787e9c02fab59fee20e7d05e1505396a..66f48e3762e84f425ed40281e1098bf3fb608e4e 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 e040dc2ffde777d480284018e5264a6a3bc9e793..f37202031d49137412454484f7f61602381a0628 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 948cf68224b1f8090be47d60dd370a25bad8cf46..29b34330edd75ef20827b2c87188dd6fe2c22c5d 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 6d1c6b32f90355a2f7f058e2176c8cbf62b8af75..2b0b17be0d25e71da26ee35c4784d084019120f9 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 b0d6362be050d151c17c00a19f2e59b0986b13e1..955648acfd40db4bd873bdf813884a127bdbc03b 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 505450072cbeeaf8ebe3bfa7c11418f81d8e1a8e..68940f683987105639bd4ad3f92bf1df1ca7dc3c 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 465aad64068a67dea33b861d3031ecb2f5cc21cb..34003061a11e186f26fc9e2026d9ffcd5e538bed 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 c62bb7e85beab7d559d694e23924a1b9fe3f7974..f777a3db00e9c75b45ab80e431c3bd2f0aa785d3 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 529ce805128da18a346ad04d135b43b1ea1ce060..fd549f2dc811df3ab7a8362733befe6e3d713f2c 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 70d2441a39704a3acb314a9516c9fc875a4b0994..488b654728fdac8ff99d55145a41b1c38ff85e3f 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 247331164510a5c75730f926dda6837143af139d..3133ab2dd8abb38ff4651a9703eace92a3d27723 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 3b6c2923e20204e8f7847848f6839ffad65f50b7..b931262354bfbc1f86d62e840b3096aaaed25a68 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 e7cc4019f570d7a36d3c8f770c2090a14cf42c20..2d2eb89ef492815459d5dd357f806ece4ea643e1 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 8ae59b2d347013374d24d059932989be25062f8c..20d744ab6d10c6e8ac1ce05c23213d6be1454f7e 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 e08ed1fbdc578ca5503b6c203caa84e97cd95e29..906ab3c07bf77ee42af6a744a7f02c7bdda2b97d 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 2b781771a7c5853bde656f57517c391d4f4858c6..79d2a6713317af5df526ba8df1425fd56b0219c8 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 150fec2f0762a94fa090dbb7c5cf049378101d3d..0e349ac2ad1d08428f58afdaccba9d123d0b8212 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 b8d235e92c0b5f255413de258ae49a458d41b91a..be1180e60a80d1fd298f27916e730002b7a9bdd0 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 69804c642c9f064329599ef9e318fd64c6053ab2..1f8a628ae89dd326bb897bd32db3f0bf65e2268a 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 a6253e7a1b95e6b4a71cd9506b231ce1beabc08d..7dfef68873f057662f0a2c6d7adf64de5ad22f9a 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 7b0de3ba14be1a5d888cc4c3ffe152523c766b13..bb1cd54ee7197c3c0cc1a0d4aa8b28a2dcbfbcd0 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 eeda2a5e1d9c98a3fa926e4dad3422913eaedcc2..eeb97f4bc57a6c0e6aefcd6443d4a768a9dc3df5 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 2ab8754b90da1bad0d8601e57498eccfdc0488e9..b4b618dcf3b1922c0a6829d5ec103bc0fc1803f3 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 836d68e95228645954c3669e704c331ffd44d9ef..c2cabeeae18579e776feab88bb7beaee6013f031 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 fbd88bdc06f447bba8bc57231f6c725f72e18cfc..aa038be98b19c4a00e7af0376a697b18e21268e2 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 dc508babdb33314a0eeabaaaf94b88b5dee68a98..19abf79454ea484708bf192f7860701dcb306617 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 85b97db1d410f62fd23893338e700dfc676bdf1d..6dc3d1fdc4820d19ff40c64fc135d959079278dc 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 36898bf9b1b5ca530f8456ea6fcf52be455acd84..c186054535616162b5336ac0e091122d753ca5a9 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 2f9545f98d4a54d3f6a7c905b5b0c4d69f006613..b13e2aab33e886945757ecdfcd245b4b02a24410 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 a3773cc8873dab808deed2fb5289d8927c926208..f29858f5f05e0756529d1ce80dbcade060230d0e 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 38644f02467d9ec2606aac44e2dbffae2c0b8ee7..3c42173fe4d79f736f2f7f2b46e6e2b836ed40cd 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 44981091b0c7aa901827b2e074526f4eefbc5853..1a1a0ccb9b8393b231944329c53dfe431b27acf3 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 7e7a692cc70717ea3e4b107c33806966381ced22..b6468374da87b91da2384bafe0ae0938c89dff57 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 78117fc5094218fb6949c86c77aadabf62e063ca..125fe7220b5dc1ae77f5aee3cab0ccb847ac433f 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 a7b253261bd7c09bedf9c2f15c40c4c0e82e0b95..c82987314c1ca4b37ddb22fe4fb7958591901c27 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 a889fb248a746523a5243eaa381bb42bb2610577..baf7a90e86ba610aa9a4946347687b2ae0814b9a 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 36d97c56bcd8d0a14d695f8dabf59f3dbe645554..5095520293abafeeec9d4b1ceb496ce42a64d9af 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 55f9676ad355f2fee6df9db949fc1ba294708009..fa14e2e9257ab4fbc7c0a9d45e063abd2de84dc7 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 d192d79b626ed879187b9576871bca2a3c0a3f84..16954781f22056bc2ae3f203ad06bac6dd7e875e 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 384d32735b620b9e5f5198a459b0b0679eada0e9..81bf1fae901eb2f6d30a15fbdc8f116d02052511 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 71299f87d89479edab2f4bc1dbc493de14e701ce..92d092ee559b4dc8828e1912f9a71bd47d3459f4 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 f6956786f564365b1e23afa15fb87f8a7f162e48..9253917a19de75fbab6310c6e34b2ee3febc7711 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 0ab09b0806f9d329914fe7754422a6f995fe57c2..f3e1e9574172fc6f8f395387ea1a04b01890739a 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 542e4b60e81cd5550356675b151848dd789ca646..32a5a4791c56918ec3c1305aa86e19ec42427c56 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 e523b82959897959698ed04191004cda101551b4..ddfb7bd09f820d46f3d63eb174af13897e84aa77 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 e9281fc6a83e8d7b8dfc6fa2dffd43f15dcaa1e3..565afff3e0a5b3915ceab9b305348ead5557033d 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 7a2e2490f3ad52a5e507f0a21316909f27ee77d5..f3cc10f232dea70463c52e1f6349af27b946cc31 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 2c0f150f4876907a42dbfdcb69184f6b85153a4a..0cbd39bf18d5dd222c5ffe3b2327296ea7bce94e 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 72c4ce280d352b08cc268b031c0462bc21077500..25291a356c5991cf9273589aff1940e666f0805c 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 88c635863200a11e2cc4bcc6eb6df7be4a8a3a62..13d06f0089b43ce575f8f99cf67dd6c12288a19e 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 bb72715d50cd5418423dc6a1e23c1ed12f8417e2..35ec8fad13b04007f4539385c1ee92b3b11ffa3f 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 1126a4eedd547da7df3d2275c7c10d4f830cc515..fe2dcae1d7c3f8dd7da2c4cf840bd8de0dead125 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 282c490720e7094d0c98143069aef78379ef08d8..81714331864156d3916cc05e822b4fbd2bf9a1d4 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 d81bd52c547d81485376d74f0b71667125fd4bef..15fc84a31504be1618d634b8296b737a1802fbeb 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 cf502474aac713f560c92b22b079033707ba7f69..e4dc8d24ff3cc42e513b817ea5fd94fc455d8c15 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 038e28fb5ad1ff961ac2a059d9bdeb00e193fd6f..c6be7a6c043c97700993d8b43decca3d823e8e27 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 9922b5936bfef62163a61cb88eeca7878c6aa0ad..a7c0532f7febf35ffefea36c044a610f6602ab70 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 11a24592088a8d7729e1e65b5ef2270588692994..1516360c6c8268a9713a491ebca09ec04b2243be 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 d60e5c7cec110d3820d0db56525d34644925c933..b9240468524473141dec34048dbda97a81f19b23 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 f03705aee1695f76031f5cf62663b8e4ec1b7c8f..301a1f4860699c9f64580b349eef0ddabb196084 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 ee5253463a2ce598458957b81545c88dd9640793..ff0c4d074da0a3e2459be82f883e9886ecb65aa4 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 7d8e40684fe2a84ddb7818ea7087fc6550392515..83f80888e3b0c19d0908f71e82d5c40af004f9a8 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 3a2eb713ef26bfabe7755bd998028d4f90002879..d5776eb4208e72ea49f6f9d3c06552e9d2d993a1 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 140d2fc16ece6ac77286c9da6dbac4a1c5d25a70..a011310dd913eb1d01647b8c45467634b843067b 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 4bb8f8a3dca797423a8840a3fa4816ac1f260a03..e06e136445478fd3985e2eeda005f2c6f4cef939 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 efaf45381562549597bdb0e28ee366ae6eccfd4d..81d578cf244f55bc842ec982a865ea06f46f1339 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 335b09a20f1c7dde80c58aad3eef15241821c9db..74a5d2e1496797e264072d63034de687b521a807 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 70740d0e16ded83d586291706128fede9ad39a99..1f60af2cb51483fcfd2b8a52c6fddcc55495bb8f 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 99913e3baaa9491722de3904dab6d4a1e2df7183..5584357c8dfdc22e624eb27209553e23daa08309 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 8e3de488cb05f6c60271862f7e1f6e042f31f62c..9cf2f1fb8eb0463546063c480715657b6f3532c0 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 181bca6ec2d19c9df3b0a44f895cd8fe8f4c43ef..f1fc812acd1467b32c24a1ce4408021e582a7f92 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 5c6f790a4cf950b9a0cb090414443161c15100f9..8d69434b857a495e9b36e88ec1369eb4d55582ab 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 f9c8cff4cbbf84656d1cfb3b3f379416af2276a1..ee530a73b3ef3a81c3e87812b2ef3fd036879508 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 733dd1aa5cb6978549f80bb490c62c914637f421..5b90a4fe2654718c92608b41dd210320ddf20d8a 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 d7c3d2d3b27f0e2ef9a0922d834d7a50fd94d54c..95077af0969305888ed02349129432f8ebce9c95 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 35fb75d6bf83041532a96354dc49c236018d2761..4e2735ebcb484215ebb98b7e7098b1b9f5aed0d5 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 0ec9eb7b907b90445d19bc89e68ce3d580d548ea..92b654dfd99b8230793fd94ccb7480e51b352648 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 cc82ccd0acd6ed840197d4db7362bb12833c7337..b89122d27b8e672ccec6aec7760540fb654f680b 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 b29656e32ec9b2546dad995bed0fda53d8de3b72..3fc0adf2e3a2a8b50dbe5adb9ec105c2c53f997b 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 2ad488392c48c935362589ef2164314ffb45ca0a..5ea45a144523e608ce774457a38253fe7d1246c6 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 75968ec461feda2bcdb832a8e7a77ac341381cbd..ee2a64ac773351bba4d7443311dd689bd28c10d0 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 6d1d10510678809f4b1604c4fa7f8837c27fb31d..9111a4ff7ead503b764c8a8ec903fdfb5ad95654 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 1fad42d30a0678b0b159c28f315c02da9fa7051a..e1889884b7c81af47898d39beef42d6827193228 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 a2976724b29fad2c7dbbcea8f0d81bc66b277e05..474ac66295ed353d736cbe6620744c1c97ec5a6e 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 52c6b417a0b0999caa30f1b2aff5120c1abccfae..4f951274a6c9a70a588aa48863298f2d53c5afc8 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';