diff --git a/Dockerfile b/Dockerfile
index bbf5ba7f729784290e73f568daa7f8e055d84679..58d2d8ef136e103b13a4c3824baa2254b989953b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM composer:1.10.1 as build
+FROM composer:2.2.7 as build
 
 ADD . /build
 WORKDIR /build
diff --git a/Dockerfile.dev b/Dockerfile.dev
index 47c320842f28ea075e999c611e82796851ad823c..abe4ccfd549c3bae6bd76374fa27f34ab90f0ab7 100644
--- a/Dockerfile.dev
+++ b/Dockerfile.dev
@@ -1,4 +1,4 @@
-FROM composer:1.10.1
+FROM composer:2.2.7
 
 ARG uid=1000
 ARG gid=1000
diff --git a/composer.json b/composer.json
index ef341a52ed6d600ab6c227169b219239c7f1924b..6b9aae3971e11199270ae1dcdc9127be814960f7 100644
--- a/composer.json
+++ b/composer.json
@@ -36,7 +36,7 @@
         "cweagans/composer-patches": "1.7.1",
         "koodimonni/composer-dropin-installer": "1.3",
         "johnpbloch/wordpress": "5.9.2",
-        "bjornjohansen/wplang": "0.1.1",
+        "bjornjohansen/wplang": "0.2.0",
         "wpackagist-plugin/disable-wordpress-updates": "1.7.0",
         "wpackagist-plugin/more-privacy-options": "4.6",
         "wpackagist-plugin/disable-emojis": "1.7.4",
diff --git a/composer.lock b/composer.lock
index 6dd0a8f0941fa8987befba472bcdf979648f0080..d43ed7d9692c0e4001c0447415fb3ed1516234a1 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,24 +4,24 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "9b7b2fd34d3cbee217c673cc08143068",
+    "content-hash": "9a59c4e4a021230d7907ebfa64e7c972",
     "packages": [
         {
             "name": "bjornjohansen/wplang",
-            "version": "0.1.1",
+            "version": "0.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/bjornjohansen/wplang.git",
-                "reference": "3194a2a774b53a2622a7ac6bc20c44b04cb254a2"
+                "reference": "30e147e6438c7e873ffe9723c316ea9ac2ff26fb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/bjornjohansen/wplang/zipball/3194a2a774b53a2622a7ac6bc20c44b04cb254a2",
-                "reference": "3194a2a774b53a2622a7ac6bc20c44b04cb254a2",
+                "url": "https://api.github.com/repos/bjornjohansen/wplang/zipball/30e147e6438c7e873ffe9723c316ea9ac2ff26fb",
+                "reference": "30e147e6438c7e873ffe9723c316ea9ac2ff26fb",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0"
+                "composer-plugin-api": "^2.0"
             },
             "type": "composer-plugin",
             "extra": {
@@ -43,7 +43,11 @@
                 }
             ],
             "description": "Composer plugin to download translation files from wordpress.org",
-            "time": "2019-04-03T08:08:14+00:00"
+            "support": {
+                "issues": "https://github.com/bjornjohansen/wplang/issues",
+                "source": "https://github.com/bjornjohansen/wplang/tree/0.2.0"
+            },
+            "time": "2021-10-27T19:29:47+00:00"
         },
         {
             "name": "composer/installers",
@@ -175,6 +179,10 @@
                 "zend",
                 "zikula"
             ],
+            "support": {
+                "issues": "https://github.com/composer/installers/issues",
+                "source": "https://github.com/composer/installers/tree/v1.11.0"
+            },
             "funding": [
                 {
                     "url": "https://packagist.com",
@@ -233,6 +241,10 @@
                 }
             ],
             "description": "Provides a way to patch Composer packages.",
+            "support": {
+                "issues": "https://github.com/cweagans/composer-patches/issues",
+                "source": "https://github.com/cweagans/composer-patches/tree/1.7.1"
+            },
             "time": "2021-06-08T15:12:46+00:00"
         },
         {
@@ -272,6 +284,13 @@
                 "cms",
                 "wordpress"
             ],
+            "support": {
+                "docs": "https://developer.wordpress.org/",
+                "forum": "https://wordpress.org/support/",
+                "irc": "irc://irc.freenode.net/wordpress",
+                "issues": "https://core.trac.wordpress.org/",
+                "source": "https://core.trac.wordpress.org/browser"
+            },
             "time": "2022-03-11T00:51:43+00:00"
         },
         {
@@ -296,15 +315,6 @@
                 "wordpress/core-implementation": "5.9.2"
             },
             "type": "wordpress-core",
-            "extra": {
-                "patches_applied": {
-                    "Patch definition of WP_CONTENT_URL to include SSL when it might not ": "patches/core/0052-fix-ssl-wp-content-url.patch",
-                    "Anonymize requests to api.wordpress.org for updates": "patches/core/anonymize-update.php.patch",
-                    "Do not perform pingbacks and trackbacks when we update via cron": "patches/core/0103-Remove-pingback-trackback.patch",
-                    "Load JS library locally instead than from Googleapis": "patches/core/0155-Removing-reference-to-googleapis-from-wp-includes-up.patch",
-                    "Remove Google Fonts API calls": "patches/core/0165-remove-google-fonts.patch"
-                }
-            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "GPL-2.0-or-later"
@@ -322,6 +332,13 @@
                 "cms",
                 "wordpress"
             ],
+            "support": {
+                "forum": "https://wordpress.org/support/",
+                "irc": "irc://irc.freenode.net/wordpress",
+                "issues": "https://core.trac.wordpress.org/",
+                "source": "https://core.trac.wordpress.org/browser",
+                "wiki": "https://codex.wordpress.org/"
+            },
             "time": "2022-03-11T00:51:39+00:00"
         },
         {
@@ -372,6 +389,10 @@
             "keywords": [
                 "wordpress"
             ],
+            "support": {
+                "issues": "https://github.com/johnpbloch/wordpress-core-installer/issues",
+                "source": "https://github.com/johnpbloch/wordpress-core-installer/tree/master"
+            },
             "time": "2020-04-16T21:44:57+00:00"
         },
         {
@@ -416,6 +437,10 @@
                 }
             ],
             "description": "Install packages or a few files from packages into custom paths without overwriting existing stuff.",
+            "support": {
+                "issues": "https://github.com/Koodimonni/Composer-Dropin-Installer/issues",
+                "source": "https://github.com/Koodimonni/Composer-Dropin-Installer/tree/master"
+            },
             "time": "2020-08-17T07:41:05+00:00"
         },
         {
@@ -817,6 +842,10 @@
             ],
             "description": "Extend the composer/installers plugin to accept any arbitrary package type.",
             "homepage": "http://www.oomphinc.com/",
+            "support": {
+                "issues": "https://github.com/oomphinc/composer-installers-extender/issues",
+                "source": "https://github.com/oomphinc/composer-installers-extender/tree/2.0.0"
+            },
             "time": "2020-08-11T21:06:11+00:00"
         },
         {
@@ -854,6 +883,10 @@
             ],
             "description": "LudicrousDB is a database class that supports replication, failover, load balancing, & partitioning, based on Automattic's HyperDB drop-in.",
             "homepage": "https://github.com/stuttter/ludicrousdb",
+            "support": {
+                "issues": "https://github.com/stuttter/ludicrousdb/issues",
+                "source": "https://github.com/stuttter/ludicrousdb"
+            },
             "time": "2019-10-18T17:56:48+00:00"
         },
         {
@@ -908,12 +941,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-plugin",
-            "extra": {
-                "patches_applied": {
-                    "Disable gravatar": "patches/buddypress/0053-Patch-buddypress.patch",
-                    "Force https on buddypress login redirect": "patches/buddypress/0147-forced-https-on-buddypress-login-redirect.patch"
-                }
-            },
             "homepage": "https://wordpress.org/plugins/buddypress/"
         },
         {
@@ -1022,11 +1049,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-plugin",
-            "extra": {
-                "patches_applied": {
-                    "Run update checks during cron": "patches/plugins/disable-wordpress-updates.patch"
-                }
-            },
             "homepage": "https://wordpress.org/plugins/disable-wordpress-updates/"
         },
         {
@@ -1171,11 +1193,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-plugin",
-            "extra": {
-                "patches_applied": {
-                    "Do send mail on privacy setting change": "patches/plugins/more-privacy-options.patch"
-                }
-            },
             "homepage": "https://wordpress.org/plugins/more-privacy-options/"
         },
         {
@@ -1248,11 +1265,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-plugin",
-            "extra": {
-                "patches_applied": {
-                    "Small workaround to fix simplyexclude plugin broken with wordpress 4": "patches/plugins/0117-simplyexclude.patch"
-                }
-            },
             "homepage": "https://wordpress.org/plugins/simply-exclude/"
         },
         {
@@ -1379,11 +1391,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-plugin",
-            "extra": {
-                "patches_applied": {
-                    "Disable Piwik global updates": "patches/plugins/wp-piwik.patch"
-                }
-            },
             "homepage": "https://wordpress.org/plugins/wp-piwik/"
         },
         {
@@ -1402,11 +1409,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-plugin",
-            "extra": {
-                "patches_applied": {
-                    "Support for global recaptcha keys": "patches/plugins/wp-recaptcha-bp.patch"
-                }
-            },
             "homepage": "https://wordpress.org/plugins/wp-recaptcha-bp/"
         },
         {
@@ -1533,11 +1535,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Teme footer": "patches/themes/0056-Patch-theme-azul.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/azul/"
         },
         {
@@ -1574,11 +1571,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Footer credits": "patches/themes/0223-bliss-footer.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/bliss/"
         },
         {
@@ -1597,11 +1589,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0057-Patch-theme-carrington-blog.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/carrington-blog/"
         },
         {
@@ -1620,11 +1607,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0058-Patch-theme-classic.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/classic/"
         },
         {
@@ -1643,11 +1625,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0062-Patch-theme-default.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/default/"
         },
         {
@@ -1684,11 +1661,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0063-Patch-theme-disconnected.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/disconnected/"
         },
         {
@@ -1707,11 +1679,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0064-Patch-theme-elegant-grunge.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/elegant-grunge/"
         },
         {
@@ -1766,11 +1733,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0065-Patch-theme-fixed-blix.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/fixed-blix/"
         },
         {
@@ -1789,11 +1751,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0067-Patch-theme-fresh-editorial.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/fresh-editorial/"
         },
         {
@@ -1812,11 +1769,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0069-Patch-theme-gone-fishing.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/gone-fishing/"
         },
         {
@@ -1907,11 +1859,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/themes-minimalism.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/minimalism/"
         },
         {
@@ -1930,11 +1877,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0073-Patch-theme-mnml.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/mnml/"
         },
         {
@@ -1971,11 +1913,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0077-Patch-theme-ocular-professor.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/ocular-professor/"
         },
         {
@@ -1994,11 +1931,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0079-Patch-theme-primepress.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/primepress/"
         },
         {
@@ -2017,11 +1949,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0080-Patch-theme-rusty-grunge.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/rusty-grunge/"
         },
         {
@@ -2058,11 +1985,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0083-Patch-theme-simplex.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/simplex/"
         },
         {
@@ -2081,11 +2003,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0084-Patch-theme-tanzaku.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/tanzaku/"
         },
         {
@@ -2104,11 +2021,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0085-Patch-theme-the-scenery.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/the-scenery/"
         },
         {
@@ -2127,11 +2039,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Footer credits": "patches/themes/0223-thematic-footer.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/thematic/"
         },
         {
@@ -2150,11 +2057,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0086-Patch-theme-threattocreativity.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/threattocreativity/"
         },
         {
@@ -2173,11 +2075,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Footer credits": "patches/themes/0165-twentyeleven-footer.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/twentyeleven/"
         },
         {
@@ -2196,11 +2093,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Footer credits": "patches/themes/0187-twentyfifteen.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/twentyfifteen/"
         },
         {
@@ -2219,11 +2111,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Footer credits": "patches/themes/0187-twentyfourteen.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/twentyfourteen/"
         },
         {
@@ -2278,11 +2165,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Footer credits": "patches/themes/0223-twentysixteen-footer.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/twentysixteen/"
         },
         {
@@ -2301,11 +2183,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Footer credits": "patches/themes/0187-twentyten.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/twentyten/"
         },
         {
@@ -2324,11 +2201,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Footer credits": "patches/themes/0165-twentythirteen-footer.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/twentythirteen/"
         },
         {
@@ -2347,11 +2219,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Footer credits": "patches/themes/0165-twentytwelve-footer.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/twentytwelve/"
         },
         {
@@ -2388,11 +2255,6 @@
                 "composer/installers": "^1.0 || ^2.0"
             },
             "type": "wordpress-theme",
-            "extra": {
-                "patches_applied": {
-                    "Theme footer": "patches/themes/0090-Patch-theme-wp-andreas01.patch"
-                }
-            },
             "homepage": "https://wordpress.org/themes/wp-andreas01/"
         },
         {
@@ -2424,5 +2286,5 @@
         "php": ">=7.1"
     },
     "platform-dev": [],
-    "plugin-api-version": "1.1.0"
+    "plugin-api-version": "2.0.0"
 }
diff --git a/composer.patches.json b/composer.patches.json
index 9fd0f6f6937c77947767324e25e112d77046ba75..e7f637fda1370812113eec47efc580d3c950f9d5 100644
--- a/composer.patches.json
+++ b/composer.patches.json
@@ -1,7 +1,6 @@
 {
     "patches": {
         "johnpbloch/wordpress-core": {
-            "Patch definition of WP_CONTENT_URL to include SSL when it might not ": "patches/core/0052-fix-ssl-wp-content-url.patch",
             "Anonymize requests to api.wordpress.org for updates": "patches/core/anonymize-update.php.patch",
             "Do not perform pingbacks and trackbacks when we update via cron": "patches/core/0103-Remove-pingback-trackback.patch",
             "Load JS library locally instead than from Googleapis": "patches/core/0155-Removing-reference-to-googleapis-from-wp-includes-up.patch",