diff --git a/defaults/curated.json b/defaults/curated.json
index 6fbbf3d9b85372917322ea5cfe587fac9a1bb047..2393a28e489c8230e08bfa49fbf8afaf5fb0f2c4 100644
--- a/defaults/curated.json
+++ b/defaults/curated.json
@@ -40,7 +40,7 @@
   "DDQG-unsupported-drupal-openid_connect-3.0.0.0-alpha3",
   "DDQG-unsupported-drupal-peertube-2.0.0.0-beta2",
   "DDQG-unsupported-drupal-phone_number-2.0.0.0-alpha7",
-  "DDQG-unsupported-drupal-project_browser-2.0.0.0-alpha4",
+  "DDQG-unsupported-drupal-project_browser-2.0.0.0-alpha5",
   "DDQG-unsupported-drupal-reader-1.0.0.0-beta2",
   "DDQG-unsupported-drupal-readmehelp-2.0.0.0-beta1",
   "DDQG-unsupported-drupal-schema_diff-1.0.0.0-alpha2",
@@ -63,6 +63,5 @@
   "DDQG-unsupported-drupal-views_tree-2.0.0.0-RC1",
   "DDQG-unsupported-drupal-xls_serialization-0.0.0.0-dev",
   "DDQG-unsupported-drupal-xnumber-2.0.0.0-beta2",
-  "DDQG-unsupported-drupal-zoom_video-1.3.2.0",
   "GHSA-mg8j-w93w-xjgc"
 ]
diff --git a/patches/d10-3.json b/patches/d10-3.json
index de7a8a55018305565fce14a6e225ecfc9aeb0973..aa39589b54660bc4699d1cd8573ef19d5b35a8b4 100644
--- a/patches/d10-3.json
+++ b/patches/d10-3.json
@@ -158,6 +158,9 @@
     "drupal/profile": {
       "#2899744 Multi-lingual": "https://www.drupal.org/files/issues/2022-04-17/2899744-54.patch"
     },
+    "drupal/project_browser": {
+      "#3490176 Extend source plugins": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3490176.diff"
+    },
     "drupal/prompt": {
       "#3449733 ECA 2": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3449733.diff"
     },
@@ -219,8 +222,7 @@
       "#local Drupal 10": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/uikitty-d10.patch"
     },
     "drupal/views_data_export": {
-      "#3046184 Optional CSV Header (fix missing row on batch run)": "https://www.drupal.org/files/issues/2023-02-09/views_data_export-optional_csv_header-3046184-9.patch",
-      "#3388703 Deprecated function replacement": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3388703.diff"
+      "#3046184 Optional CSV Header (fix missing row on batch run)": "https://www.drupal.org/files/issues/2023-02-09/views_data_export-optional_csv_header-3046184-9.patch"
     },
     "drupal/video_embed_field": {
       "#3238136 Vimeo hash parameter on private video url": "https://www.drupal.org/files/issues/2022-08-23/video_embed_field-vimeo_hash_parameters_private_video-3238136-8.patch"
@@ -246,10 +248,6 @@
     "drupal/wysiwyg_template": {
       "#3354588 Drupal 10 compatible": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3354588.diff"
     },
-    "drupal/zoom_video": {
-      "#3488128 Schema":  "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3488128.diff",
-      "#3488135 Empty URL": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3488135.diff"
-    },
     "grahl/ldap": {
       "#Local Remove deprecation warnings": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/grahl-ldap.patch"
     },
diff --git a/patches/d10-4.json b/patches/d10-4.json
index 312e6aa4247216c7f2580188d0d2e4c9ae317a8e..89558005d920dd225db55266470cebf82dcd0bb9 100644
--- a/patches/d10-4.json
+++ b/patches/d10-4.json
@@ -158,6 +158,9 @@
     "drupal/profile": {
       "#2899744 Multi-lingual": "https://www.drupal.org/files/issues/2022-04-17/2899744-54.patch"
     },
+    "drupal/project_browser": {
+      "#3490176 Extend source plugins": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3490176.diff"
+    },
     "drupal/prompt": {
       "#3449733 ECA 2": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3449733.diff"
     },
@@ -219,8 +222,7 @@
       "#local Drupal 10": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/uikitty-d10.patch"
     },
     "drupal/views_data_export": {
-      "#3046184 Optional CSV Header (fix missing row on batch run)": "https://www.drupal.org/files/issues/2023-02-09/views_data_export-optional_csv_header-3046184-9.patch",
-      "#3388703 Deprecated function replacement": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3388703.diff"
+      "#3046184 Optional CSV Header (fix missing row on batch run)": "https://www.drupal.org/files/issues/2023-02-09/views_data_export-optional_csv_header-3046184-9.patch"
     },
     "drupal/video_embed_field": {
       "#3238136 Vimeo hash parameter on private video url": "https://www.drupal.org/files/issues/2022-08-23/video_embed_field-vimeo_hash_parameters_private_video-3238136-8.patch"
@@ -246,10 +248,6 @@
     "drupal/wysiwyg_template": {
       "#3354588 Drupal 10 compatible": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3354588.diff"
     },
-    "drupal/zoom_video": {
-      "#3488128 Schema":  "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3488128.diff",
-      "#3488135 Empty URL": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3488135.diff"
-    },
     "grahl/ldap": {
       "#Local Remove deprecation warnings": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/grahl-ldap.patch"
     },
diff --git a/patches/d10/3475773.diff b/patches/d10/3475773.diff
new file mode 100644
index 0000000000000000000000000000000000000000..174724e6317797c997d4f091c75c0a2d6ea582e4
--- /dev/null
+++ b/patches/d10/3475773.diff
@@ -0,0 +1,34 @@
+diff --git a/dist/js/init.js b/dist/js/init.js
+index 3a8a290b384132d12ca9b2720322e6ec817516bf..5a88ff2ea090f7f470e29908f37a6ff074940710 100644
+--- a/dist/js/init.js
++++ b/dist/js/init.js
+@@ -2,9 +2,11 @@
+   if (localStorage.getItem("GinDarkMode") && localStorage.removeItem("GinDarkMode"), 
+   localStorage.getItem("Drupal.gin.darkmode") && localStorage.removeItem("Drupal.gin.darkmode"), 
+   localStorage.getItem("GinSidebarOpen") && (localStorage.setItem("Drupal.gin.toolbarExpanded", localStorage.getItem("GinSidebarOpen")), 
+-  localStorage.removeItem("GinSidebarOpen")), window.ginDarkmode = JSON.parse(document.getElementById("gin-setting-darkmode").textContent).ginDarkmode, 
+-  1 == window.ginDarkmode || "auto" === window.ginDarkmode && window.matchMedia("(prefers-color-scheme: dark)").matches ? document.documentElement.classList.add("gin--dark-mode") : !0 === document.documentElement.classList.contains("gin--dark-mode") && document.documentElement.classList.remove("gin--dark-mode"), 
+-  localStorage.getItem("Drupal.gin.toolbarExpanded")) {
++  localStorage.removeItem("GinSidebarOpen")), function() {
++    const darkmodeSetting = document.getElementById("gin-setting-darkmode")?.textContent;
++    window.ginDarkmode = darkmodeSetting ? JSON.parse(darkmodeSetting)?.ginDarkmode : "auto", 
++    1 == window.ginDarkmode || "auto" === window.ginDarkmode && window.matchMedia("(prefers-color-scheme: dark)").matches ? document.documentElement.classList.add("gin--dark-mode") : !0 === document.documentElement.classList.contains("gin--dark-mode") && document.documentElement.classList.remove("gin--dark-mode");
++  }(), localStorage.getItem("Drupal.gin.toolbarExpanded")) {
+     const style = document.createElement("style"), className = "gin-toolbar-inline-styles";
+     if (style.className = className, "true" === localStorage.getItem("Drupal.gin.toolbarExpanded")) {
+       style.innerHTML = "\n    @media (min-width: 976px) {\n      /* Small CSS hack to make sure this has the highest priority */\n      body.gin--vertical-toolbar.gin--vertical-toolbar.gin--vertical-toolbar {\n        padding-inline-start: 256px !important;\n        transition: none !important;\n      }\n\n      .gin--vertical-toolbar .toolbar-menu-administration {\n        min-width: var(--gin-toolbar-width, 256px);\n        transition: none;\n      }\n\n      .gin--vertical-toolbar .toolbar-menu-administration > .toolbar-menu > .menu-item > .toolbar-icon,\n      .gin--vertical-toolbar .toolbar-menu-administration > .toolbar-menu > .menu-item > .toolbar-box > .toolbar-icon {\n        min-width: calc(var(--gin-toolbar-width, 256px) - 16px);\n      }\n    }\n    ";
+diff --git a/js/init.js b/js/init.js
+index b5167343640982546d23c5926a90e00e41cd0e45..560eafea4ee26f8146bf9d80784cff55ba0b0209 100644
+--- a/js/init.js
++++ b/js/init.js
+@@ -22,7 +22,9 @@ checkLegacy();
+ function ginInitDarkmode() {
+   const darkModeClass = 'gin--dark-mode';
+ 
+-  window.ginDarkmode = JSON.parse(document.getElementById('gin-setting-darkmode').textContent).ginDarkmode;
++  const darkmodeSetting = document.getElementById('gin-setting-darkmode')?.textContent;
++  // Set window variable.
++  window.ginDarkmode = darkmodeSetting ? JSON.parse(darkmodeSetting)?.ginDarkmode : 'auto';
+ 
+   if (
+     window.ginDarkmode == 1 ||
diff --git a/patches/d10/3490176.diff b/patches/d10/3490176.diff
new file mode 100644
index 0000000000000000000000000000000000000000..d09d60b87bceff68d011058a789dabdc8b2ed317
--- /dev/null
+++ b/patches/d10/3490176.diff
@@ -0,0 +1,32 @@
+diff --git a/src/Plugin/ProjectBrowserSource/Recipes.php b/src/Plugin/ProjectBrowserSource/Recipes.php
+index 40d8410e51ab8006cd88975d79dff01ebdea6f4b..8269158ebd44b8452ecd9a033d8c158cd6b04bf4 100644
+--- a/src/Plugin/ProjectBrowserSource/Recipes.php
++++ b/src/Plugin/ProjectBrowserSource/Recipes.php
+@@ -28,12 +28,12 @@ use Symfony\Component\Finder\Finder;
+ class Recipes extends ProjectBrowserSourceBase {
+ 
+   public function __construct(
+-    private readonly FileSystemInterface $fileSystem,
+-    private readonly CacheBackendInterface $cacheBin,
+-    private readonly ModuleExtensionList $moduleList,
+-    private readonly FileUrlGeneratorInterface $fileUrlGenerator,
+-    private readonly ConfigFactoryInterface $configFactory,
+-    private readonly string $appRoot,
++    protected readonly FileSystemInterface $fileSystem,
++    protected readonly CacheBackendInterface $cacheBin,
++    protected readonly ModuleExtensionList $moduleList,
++    protected readonly FileUrlGeneratorInterface $fileUrlGenerator,
++    protected readonly ConfigFactoryInterface $configFactory,
++    protected readonly string $appRoot,
+     mixed ...$arguments,
+   ) {
+     parent::__construct(...$arguments);
+@@ -165,7 +165,7 @@ class Recipes extends ProjectBrowserSourceBase {
+    * @return \Symfony\Component\Finder\Finder
+    *   A Symfony Finder object, configured to find locally installed recipes.
+    */
+-  private function getFinder(): Finder {
++  protected function getFinder(): Finder {
+     $search_in = [$this->appRoot . '/core/recipes'];
+ 
+     // If any recipes have been installed by Composer, also search there. The
diff --git a/patches/d11.json b/patches/d11.json
index 1841398dfbd315942e9b94c6e090ff1fc04df0d6..ec032caa32009c1323bfcc8a2276c8f1c742000c 100644
--- a/patches/d11.json
+++ b/patches/d11.json
@@ -155,6 +155,9 @@
     "drupal/profile": {
       "#2899744 Multi-lingual": "https://www.drupal.org/files/issues/2022-04-17/2899744-54.patch"
     },
+    "drupal/project_browser": {
+      "#3490176 Extend source plugins": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3490176.diff"
+    },
     "drupal/prompt": {
       "#3449733 ECA 2": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3449733.diff"
     },
@@ -216,8 +219,7 @@
       "#local Drupal 10": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/uikitty-d10.patch"
     },
     "drupal/views_data_export": {
-      "#3046184 Optional CSV Header (fix missing row on batch run)": "https://www.drupal.org/files/issues/2023-02-09/views_data_export-optional_csv_header-3046184-9.patch",
-      "#3388703 Deprecated function replacement": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3388703.diff"
+      "#3046184 Optional CSV Header (fix missing row on batch run)": "https://www.drupal.org/files/issues/2023-02-09/views_data_export-optional_csv_header-3046184-9.patch"
     },
     "drupal/video_embed_field": {
       "#3238136 Vimeo hash parameter on private video url": "https://www.drupal.org/files/issues/2022-08-23/video_embed_field-vimeo_hash_parameters_private_video-3238136-8.patch"
@@ -243,10 +245,6 @@
     "drupal/wysiwyg_template": {
       "#3354588 Drupal 10 compatible": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3354588.diff"
     },
-    "drupal/zoom_video": {
-      "#3488128 Schema":  "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3488128.diff",
-      "#3488135 Empty URL": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/d10/3488135.diff"
-    },
     "grahl/ldap": {
       "#Local Remove deprecation warnings": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/-/raw/main/patches/grahl-ldap.patch"
     },