diff --git a/codefilter.info.yml b/codefilter.info.yml
index 75e0b28..017b349 100644
--- a/codefilter.info.yml
+++ b/codefilter.info.yml
@@ -1,5 +1,5 @@
 name: Code Filter
 type: module
 description: Provides tags for automatically escaping and formatting large pieces of code.
-core_version_requirement: ^8 || ^9 || ^10 || ^11
+core_version_requirement: ^10.1 || ^11 || ^12
 package: User interface
diff --git a/codefilter.module b/codefilter.module
index 7a81bed..28b1773 100644
--- a/codefilter.module
+++ b/codefilter.module
@@ -4,15 +4,16 @@
  * @file
  * Contains hook implementations for the codefilter module.
  */
-
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\codefilter\Hook\CodefilterHooks;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
  * Implements hook_form_FORM_ID_alter().
  */
+#[LegacyHook]
 function codefilter_form_filter_format_edit_form_alter(&$form, FormStateInterface $form_state, $form_id) {
-  // Custom form validate function.
-  $form['#validate'][] = 'codefilter_form_filter_format_edit_form_validate';
+  \Drupal::service(CodefilterHooks::class)->formFilterFormatEditFormAlter($form, $form_state, $form_id);
 }
 
 /**
diff --git a/codefilter.services.yml b/codefilter.services.yml
new file mode 100644
index 0000000..549e6ef
--- /dev/null
+++ b/codefilter.services.yml
@@ -0,0 +1,5 @@
+
+services:
+  Drupal\codefilter\Hook\CodefilterHooks:
+    class: Drupal\codefilter\Hook\CodefilterHooks
+    autowire: true
diff --git a/src/Hook/CodefilterHooks.php b/src/Hook/CodefilterHooks.php
new file mode 100644
index 0000000..1d8c7aa
--- /dev/null
+++ b/src/Hook/CodefilterHooks.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace Drupal\codefilter\Hook;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+/**
+ * Hook implementations for codefilter.
+ */
+class CodefilterHooks
+{
+    /**
+     * Implements hook_form_FORM_ID_alter().
+     */
+    #[Hook('form_filter_format_edit_form_alter')]
+    public static function formFilterFormatEditFormAlter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id)
+    {
+        // Custom form validate function.
+        $form['#validate'][] = 'codefilter_form_filter_format_edit_form_validate';
+    }
+}
diff --git a/tests/src/Kernel/CodeFilterKernelTest.php b/tests/src/Kernel/CodeFilterKernelTest.php
index 6954343..f142ab6 100644
--- a/tests/src/Kernel/CodeFilterKernelTest.php
+++ b/tests/src/Kernel/CodeFilterKernelTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\codefilter\Kernel;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\filter\Entity\FilterFormat;
 use Drupal\filter\FilterFormatInterface;
 use Drupal\KernelTests\KernelTestBase;
@@ -11,6 +13,8 @@ use Drupal\KernelTests\KernelTestBase;
  *
  * @group codefilter
  */
+#[Group('codefilter')]
+#[RunTestsInSeparateProcesses]
 class CodeFilterKernelTest extends KernelTestBase {
 
   /**
@@ -81,7 +85,7 @@ class CodeFilterKernelTest extends KernelTestBase {
 
     EOT;
 
-    $filtered_text = check_markup($text, 'code');
+    $filtered_text = ['#type' => 'processed_text', '#text' => $text, '#format' => 'code'];
     $this->assertSame($expected_text, (string) $filtered_text);
 
     // Test <?php tags.
@@ -126,7 +130,7 @@ class CodeFilterKernelTest extends KernelTestBase {
     EOT;
 
     $expected_text = $this->prepareExpectedText($expected_text);
-    $filtered_text = check_markup($text, 'code');
+    $filtered_text = ['#type' => 'processed_text', '#text' => $text, '#format' => 'code'];
     $this->assertSame($expected_text, (string) $filtered_text);
 
     // Test line breaks in code are handled correctly.
@@ -152,7 +156,7 @@ class CodeFilterKernelTest extends KernelTestBase {
 
     $expected_text = $this->prepareExpectedText($expected_text);
 
-    $filtered_text = check_markup($text, 'code');
+    $filtered_text = ['#type' => 'processed_text', '#text' => $text, '#format' => 'code'];
     $this->assertSame($expected_text, (string) $filtered_text);
   }
 
diff --git a/tests/src/Unit/CodeFilterTest.php b/tests/src/Unit/CodeFilterTest.php
index 7fb3492..26c57a9 100644
--- a/tests/src/Unit/CodeFilterTest.php
+++ b/tests/src/Unit/CodeFilterTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\codefilter\Tests;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\DataProvider;
 use Drupal\Tests\UnitTestCase;
 use Drupal\codefilter\Plugin\Filter\CodeFilter;
 
@@ -10,6 +12,7 @@ use Drupal\codefilter\Plugin\Filter\CodeFilter;
  *
  * @group CodeFilter
  */
+#[Group('CodeFilter')]
 class CodeFilterTest extends UnitTestCase {
 
   /**
@@ -17,6 +20,7 @@ class CodeFilterTest extends UnitTestCase {
    *
    * @dataProvider providerCodefilterProcessPhp
    */
+  #[DataProvider('providerCodefilterProcessPhp')]
   public function testCodefilterProcessPhp($input, $expected) {
     $result = CodeFilter::processPhp($input);
     $this->assertEquals($expected, $result);
@@ -27,6 +31,7 @@ class CodeFilterTest extends UnitTestCase {
    *
    * @dataProvider providerCodefilterProcessCode
    */
+  #[DataProvider('providerCodefilterProcessCode')]
   public function testCodefilterProcessCode($input, $expected) {
     $result = CodeFilter::processCode($input);
     $this->assertEquals($expected, $result);
