diff --git a/composer.json b/composer.json
index a0084c4..a7adffb 100644
--- a/composer.json
+++ b/composer.json
@@ -23,8 +23,8 @@
     }
   },
   "require": {
-    "drupal/core": "^10 || ^11",
-    "drupal/entityqueue": "~1.1"
+    "drupal/entityqueue": "~1.1",
+    "drupal/core": "^10.1 || ^11 || ^12"
   },
   "require-dev": {
     "drupal/coder": "*",
diff --git a/entityqueue_form_widget.info.yml b/entityqueue_form_widget.info.yml
index 922b3a0..b4dfc10 100644
--- a/entityqueue_form_widget.info.yml
+++ b/entityqueue_form_widget.info.yml
@@ -2,6 +2,6 @@ name: "Entityqueue Form Widget"
 type: module
 description: "A handy module to populate a form element in the sidebar of node's add and edit pages to allow editors to add content to entityqueues directly from add/edit forms."
 package: Entityqueue
-core_version_requirement: ^10 || ^11
+core_version_requirement: ^10.1 || ^11 || ^12
 dependencies:
   - entityqueue:entityqueue
diff --git a/entityqueue_form_widget.module b/entityqueue_form_widget.module
index f910645..392abfe 100644
--- a/entityqueue_form_widget.module
+++ b/entityqueue_form_widget.module
@@ -5,51 +5,17 @@
  * Allows editors to add content to an entityqueue from the same add/edit form.
  */
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\entityqueue_form_widget\Hook\EntityqueueFormWidgetHooks;
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Url;
-use Drupal\Core\Link;
 use Drupal\entityqueue\Entity\EntitySubqueue;
 
 /**
  * Implements hook_form_node_form_alter().
  */
+#[LegacyHook]
 function entityqueue_form_widget_form_node_form_alter(&$form, FormStateInterface $form_state) {
-
-  $node = $form_state->getFormObject()->getEntity();
-  $entity_id = $node->id();
-
-  // Works with entityqueue module version 8.x-1.0-alpha6 .
-  $allowed_entityqueues = entity_qget_allowed_subque_list($node);
-
-  // Check if there is any entityqueues to show/not show the widget.
-  if (!empty($allowed_entityqueues)) {
-
-    $url = Url::fromRoute('entity.entity_queue.collection');
-    $form['entityqueue_form_widget'] = [
-      '#type' => 'details',
-      '#title' => t('Entityqueues settings'),
-      '#group' => 'advanced',
-      '#tree' => TRUE,
-      '#weight' => 100,
-      '#markup' => '<p>' . t('Choose from the available entityqueues below to push this content to. To reorder and manage each queue, please visit the @entityqueue_management_page', ['@entityqueue_management_page' => Link::fromTextAndUrl(t('Entityqueue management page'), $url)->toString()]) . '</p>',
-    ];
-
-    $form['entityqueue_form_widget']['entityqueues'] = [];
-    foreach ($allowed_entityqueues as $allowed_entityqueue) {
-      if (\Drupal::currentUser()->hasPermission('update ' . $allowed_entityqueue['id'] . ' entityqueue')
-        || \Drupal::currentUser()->hasPermission('manipulate all entityqueues')) {
-
-        $form['entityqueue_form_widget']['entityqueues'][$allowed_entityqueue['id']] = _prepare_checkbox($entity_id, $allowed_entityqueue);
-      }
-    }
-
-    // Calling submit handler.
-    foreach (array_keys($form['actions']) as $action) {
-      if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
-        $form['actions'][$action]['#submit'][] = 'entityqueue_form_widget_form_node_form_submit';
-      }
-    }
-  }
+  \Drupal::service(EntityqueueFormWidgetHooks::class)->formNodeFormAlter($form, $form_state);
 }
 
 /**
@@ -66,7 +32,7 @@ function entityqueue_form_widget_form_node_form_submit($form, FormStateInterface
     $values = $form_state->getValue('entityqueue_form_widget');
 
     // Initialize variables with default values.
-    $publish_on_timestamp_value = null;
+    $publish_on_timestamp_value = NULL;
 
     // Check if the node has the 'publish_on' field.
     if ($node->hasField('publish_on') && $node->get('publish_on')->getValue()) {
diff --git a/entityqueue_form_widget.services.yml b/entityqueue_form_widget.services.yml
new file mode 100644
index 0000000..eb6a4d2
--- /dev/null
+++ b/entityqueue_form_widget.services.yml
@@ -0,0 +1,5 @@
+
+services:
+  Drupal\entityqueue_form_widget\Hook\EntityqueueFormWidgetHooks:
+    class: Drupal\entityqueue_form_widget\Hook\EntityqueueFormWidgetHooks
+    autowire: true
diff --git a/src/Hook/EntityqueueFormWidgetHooks.php b/src/Hook/EntityqueueFormWidgetHooks.php
new file mode 100644
index 0000000..6416071
--- /dev/null
+++ b/src/Hook/EntityqueueFormWidgetHooks.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace Drupal\entityqueue_form_widget\Hook;
+
+use Drupal\Core\Link;
+use Drupal\Core\Url;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+
+/**
+ * Hook implementations for entityqueue_form_widget.
+ */
+class EntityqueueFormWidgetHooks {
+  use StringTranslationTrait;
+
+  /**
+   * Implements hook_form_node_form_alter().
+   */
+  #[Hook('form_node_form_alter')]
+  public function formNodeFormAlter(&$form, FormStateInterface $form_state) {
+    $node = $form_state->getFormObject()->getEntity();
+    $entity_id = $node->id();
+    // Works with entityqueue module version 8.x-1.0-alpha6 .
+    $allowed_entityqueues = entity_qget_allowed_subque_list($node);
+    // Check if there is any entityqueues to show/not show the widget.
+    if (!empty($allowed_entityqueues)) {
+      $url = Url::fromRoute('entity.entity_queue.collection');
+      $form['entityqueue_form_widget'] = [
+        '#type' => 'details',
+        '#title' => $this->t('Entityqueues settings'),
+        '#group' => 'advanced',
+        '#tree' => TRUE,
+        '#weight' => 100,
+        '#markup' => '<p>' . $this->t('Choose from the available entityqueues below to push this content to. To reorder and manage each queue, please visit the @entityqueue_management_page', [
+          '@entityqueue_management_page' => Link::fromTextAndUrl($this->t('Entityqueue management page'), $url)->toString(),
+        ]) . '</p>',
+      ];
+      $form['entityqueue_form_widget']['entityqueues'] = [];
+      foreach ($allowed_entityqueues as $allowed_entityqueue) {
+        if (\Drupal::currentUser()->hasPermission('update ' . $allowed_entityqueue['id'] . ' entityqueue') || \Drupal::currentUser()->hasPermission('manipulate all entityqueues')) {
+          $form['entityqueue_form_widget']['entityqueues'][$allowed_entityqueue['id']] = _prepare_checkbox($entity_id, $allowed_entityqueue);
+        }
+      }
+      // Calling submit handler.
+      foreach (array_keys($form['actions']) as $action) {
+        if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
+          $form['actions'][$action]['#submit'][] = 'entityqueue_form_widget_form_node_form_submit';
+        }
+      }
+    }
+  }
+
+}
diff --git a/tests/modules/entityqueue_form_widget_test/entityqueue_form_widget_test.info.yml b/tests/modules/entityqueue_form_widget_test/entityqueue_form_widget_test.info.yml
index 7754dd4..4508a00 100644
--- a/tests/modules/entityqueue_form_widget_test/entityqueue_form_widget_test.info.yml
+++ b/tests/modules/entityqueue_form_widget_test/entityqueue_form_widget_test.info.yml
@@ -1,7 +1,7 @@
 name: "Entityqueue Form Widget Test"
 description: "Test content for Entityqueue Form Widget module."
 type: module
-core_version_requirement: ^10 || ^11
+core_version_requirement: ^10.1 || ^11 || ^12
 dependencies:
   - drupal:field
   - drupal:node
diff --git a/tests/src/FunctionalJavascript/EntityQueueFormWidgetMultipleSubqueuesTest.php b/tests/src/FunctionalJavascript/EntityQueueFormWidgetMultipleSubqueuesTest.php
index 47139d0..41d6e4f 100644
--- a/tests/src/FunctionalJavascript/EntityQueueFormWidgetMultipleSubqueuesTest.php
+++ b/tests/src/FunctionalJavascript/EntityQueueFormWidgetMultipleSubqueuesTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\entityqueue_form_widget\FunctionalJavascript;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\entityqueue\Entity\EntitySubqueue;
@@ -11,6 +13,8 @@ use Drupal\entityqueue\Entity\EntitySubqueue;
  *
  * @group entityqueue_form_widget
  */
+#[Group('entityqueue_form_widget')]
+#[RunTestsInSeparateProcesses]
 class EntityQueueFormWidgetMultipleSubqueuesTest extends WebDriverTestBase {
 
   use StringTranslationTrait;
diff --git a/tests/src/FunctionalJavascript/EntityQueueFormWidgetSimpleQueueTest.php b/tests/src/FunctionalJavascript/EntityQueueFormWidgetSimpleQueueTest.php
index 4b9bf0a..ee0ed77 100644
--- a/tests/src/FunctionalJavascript/EntityQueueFormWidgetSimpleQueueTest.php
+++ b/tests/src/FunctionalJavascript/EntityQueueFormWidgetSimpleQueueTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\entityqueue_form_widget\FunctionalJavascript;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 
@@ -10,6 +12,8 @@ use Drupal\Core\StringTranslation\StringTranslationTrait;
  *
  * @group entityqueue_form_widget
  */
+#[Group('entityqueue_form_widget')]
+#[RunTestsInSeparateProcesses]
 class EntityQueueFormWidgetSimpleQueueTest extends WebDriverTestBase {
 
   use StringTranslationTrait;
