diff --git a/bricks.module b/bricks.module
index 5cbdbfb..bbab6b5 100644
--- a/bricks.module
+++ b/bricks.module
@@ -1,5 +1,7 @@
 <?php
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\bricks\Hook\BricksHooks;
 use Drupal\bricks\Bricks;
 use Drupal\bricks\BricksFieldItemInterface;
 use Drupal\Core\Entity\EntityInterface;
@@ -26,40 +28,27 @@ function bricks_preprocess_field(&$variables) {
 /**
  * Implements hook_field_widget_info_alter().
  */
+#[LegacyHook]
 function bricks_field_widget_info_alter(array &$info) {
-  // Let Bricks to re-use ANY Entity Reference -compatible widgets:
-  foreach ($info as $widget_id => &$widget_info) {
-    if (in_array('entity_reference', $widget_info['field_types'])) {
-      $widget_info['field_types'][] = 'bricks';
-    }
-    if (in_array('entity_reference_revisions', $widget_info['field_types'])) {
-      $widget_info['field_types'][] = 'bricks_revisioned';
-    }
-  }
+  \Drupal::service(BricksHooks::class)->fieldWidgetInfoAlter($info);
 }
 
 /**
  * Implements hook_field_widget_WIDGET_TYPE_form_alter() for
  * `entity_reference_autocomplete`.
  */
-function bricks_field_widget_entity_reference_autocomplete_form_alter(&$element, FormStateInterface $form_state, $context) {
-  $field_type = $context['items']->getFieldDefinition()->getType();
-
-  // @TODO: Replace by 'Nested bricks' widget setting.
-  if (in_array($field_type, ['bricks'])) {
-    // @TODO: Find a better way to be used in _bricks_preprocess_tabledrag_form().
-    $element['#widget'] = 'entity_reference_autocomplete';
-    // #default_value is en Entity or NULL.
-    _bricks_form_element_alter($element, $context['items'][$context['delta']], $element['target_id']['#default_value']);
-    hide($element['depth']);
-  }
+#[LegacyHook]
+function bricks_field_widget_entity_reference_autocomplete_form_alter(&$element, FormStateInterface $form_state, $context)
+{
+    \Drupal::service(BricksHooks::class)->fieldWidgetEntityReferenceAutocompleteFormAlter($element, $form_state, $context);
 }
 /**
  * Implements hook_field_widget_WIDGET_TYPE_form_alter() for
  * `bricks_tree_autocomplete`.
  */
+#[LegacyHook]
 function bricks_field_widget_bricks_tree_autocomplete_form_alter(&$element, FormStateInterface $form_state, $context) {
-  bricks_field_widget_entity_reference_autocomplete_form_alter($element, $form_state, $context);
+  \Drupal::service(BricksHooks::class)->fieldWidgetBricksTreeAutocompleteFormAlter($element, $form_state, $context);
 }
 
 /**
@@ -114,7 +103,7 @@ function _bricks_preprocess_tabledrag_form(&$variables, $element_key, $widget, $
         // @TODO
         $drag_cell['style'] = 'width: auto; min-width: 150px';
 
-        show($element[$key]['depth']);
+        $element[$key]['depth']['#printed'] = false;
         $variables['table']['#rows'][$row]['data'][] = \Drupal::service('renderer')->render($element[$key]['depth']);
 
         if ($render_options && !is_null($operation_key)) {
@@ -213,12 +202,7 @@ function bricks_preprocess_block__system_powered_by_block(&$variables) {
 /**
  * Implements hook_entity_presave().
  */
+#[LegacyHook]
 function bricks_entity_presave(EntityInterface $entity) {
-  if ($entity instanceof FieldableEntityInterface) {
-    foreach ($entity->getFields() as $field_item_list) {
-      if ($field_item_list->get(0) instanceof BricksFieldItemInterface) {
-        Bricks::correctDepths($field_item_list);
-      }
-    }
-  }
+  \Drupal::service(BricksHooks::class)->entityPresave($entity);
 }
diff --git a/bricks.services.yml b/bricks.services.yml
new file mode 100644
index 0000000..89fd276
--- /dev/null
+++ b/bricks.services.yml
@@ -0,0 +1,5 @@
+
+services:
+  Drupal\bricks\Hook\BricksHooks:
+    class: Drupal\bricks\Hook\BricksHooks
+    autowire: true
diff --git a/modules/bricks_dynamic/src/Plugin/Field/FieldWidget/BricksTreeDynamicWidget.php b/modules/bricks_dynamic/src/Plugin/Field/FieldWidget/BricksTreeDynamicWidget.php
index 2d2d0a8..b35d693 100644
--- a/modules/bricks_dynamic/src/Plugin/Field/FieldWidget/BricksTreeDynamicWidget.php
+++ b/modules/bricks_dynamic/src/Plugin/Field/FieldWidget/BricksTreeDynamicWidget.php
@@ -28,7 +28,7 @@ class BricksTreeDynamicWidget extends DynamicEntityReferenceWidget {
 
     // #default_value is en Entity or NULL.
     _bricks_form_element_alter($element, $items[$delta], $element['target_id']['#default_value']);
-    hide($element['depth']);
+    $element['depth']['#printed'] = true;
 
     return $element;
   }
diff --git a/modules/bricks_inline/bricks_inline.module b/modules/bricks_inline/bricks_inline.module
index cb87552..ecd4013 100644
--- a/modules/bricks_inline/bricks_inline.module
+++ b/modules/bricks_inline/bricks_inline.module
@@ -4,24 +4,25 @@
  * @file
  * {@inheritdoc}
  */
-
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\bricks_inline\Hook\BricksInlineHooks;
 use Drupal\Core\Render\Element;
 
 /**
  * Implements hook_theme_registry_alter().
  */
-function bricks_inline_theme_registry_alter(&$theme_registry) {
-  $theme_registry['inline_entity_form_entity_table']['theme path'] = \Drupal::service('extension.list.module')->getPath('bricks_inline');
-  $theme_registry['inline_entity_form_entity_table']['function'] = 'bricks_inline_inline_entity_form_entity_table';
+#[LegacyHook]
+function bricks_inline_theme_registry_alter(&$theme_registry)
+{
+    \Drupal::service(BricksInlineHooks::class)->themeRegistryAlter($theme_registry);
 }
 
 /**
  * Implements hook_inline_entity_form_reference_form_alter().
  */
+#[LegacyHook]
 function bricks_inline_inline_entity_form_reference_form_alter(&$reference_form, &$form_state) {
-  // Skip standard IEF validation to allow multiple references to
-  // the same entity:
-  $reference_form['#element_validate'] = array_diff($reference_form['#element_validate'], ['inline_entity_form_reference_form_validate']);
+  \Drupal::service(BricksInlineHooks::class)->inlineEntityFormReferenceFormAlter($reference_form, $form_state);
 }
 
 /**
diff --git a/modules/bricks_inline/bricks_inline.services.yml b/modules/bricks_inline/bricks_inline.services.yml
new file mode 100644
index 0000000..6768dc5
--- /dev/null
+++ b/modules/bricks_inline/bricks_inline.services.yml
@@ -0,0 +1,5 @@
+
+services:
+  Drupal\bricks_inline\Hook\BricksInlineHooks:
+    class: Drupal\bricks_inline\Hook\BricksInlineHooks
+    autowire: true
diff --git a/modules/bricks_inline/src/Hook/BricksInlineHooks.php b/modules/bricks_inline/src/Hook/BricksInlineHooks.php
new file mode 100644
index 0000000..e018742
--- /dev/null
+++ b/modules/bricks_inline/src/Hook/BricksInlineHooks.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Drupal\bricks_inline\Hook;
+
+use Drupal\Core\Render\Element;
+use Drupal\Core\Hook\Attribute\Hook;
+/**
+ * Hook implementations for bricks_inline.
+ */
+class BricksInlineHooks
+{
+    /**
+     * Implements hook_theme_registry_alter().
+     */
+    #[Hook('theme_registry_alter')]
+    public function themeRegistryAlter(&$theme_registry)
+    {
+        $theme_registry['inline_entity_form_entity_table']['theme path'] = \Drupal::service('extension.list.module')->getPath('bricks_inline');
+        $theme_registry['inline_entity_form_entity_table']['function'] = 'bricks_inline_inline_entity_form_entity_table';
+    }
+    /**
+     * Implements hook_inline_entity_form_reference_form_alter().
+     */
+    #[Hook('inline_entity_form_reference_form_alter')]
+    public function inlineEntityFormReferenceFormAlter(&$reference_form, &$form_state)
+    {
+        // Skip standard IEF validation to allow multiple references to
+        // the same entity:
+        $reference_form['#element_validate'] = array_diff($reference_form['#element_validate'], [
+            'inline_entity_form_reference_form_validate',
+        ]);
+    }
+}
diff --git a/src/Hook/BricksHooks.php b/src/Hook/BricksHooks.php
new file mode 100644
index 0000000..95cd870
--- /dev/null
+++ b/src/Hook/BricksHooks.php
@@ -0,0 +1,76 @@
+<?php
+
+namespace Drupal\bricks\Hook;
+
+use Drupal\bricks\Bricks;
+use Drupal\bricks\BricksFieldItemInterface;
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Entity\FieldableEntityInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Render\Element;
+use Drupal\Core\Hook\Attribute\Hook;
+/**
+ * Hook implementations for bricks.
+ */
+class BricksHooks
+{
+    /* BRICKS EDITING */
+    /**
+     * Implements hook_field_widget_info_alter().
+     */
+    #[Hook('field_widget_info_alter')]
+    public function fieldWidgetInfoAlter(array &$info)
+    {
+        // Let Bricks to re-use ANY Entity Reference -compatible widgets:
+        foreach ($info as $widget_id => &$widget_info) {
+            if (in_array('entity_reference', $widget_info['field_types'])) {
+                $widget_info['field_types'][] = 'bricks';
+            }
+            if (in_array('entity_reference_revisions', $widget_info['field_types'])) {
+                $widget_info['field_types'][] = 'bricks_revisioned';
+            }
+        }
+    }
+    /**
+     * Implements hook_field_widget_WIDGET_TYPE_form_alter() for
+     * `entity_reference_autocomplete`.
+     */
+    #[Hook('field_widget_entity_reference_autocomplete_form_alter')]
+    public function fieldWidgetEntityReferenceAutocompleteFormAlter(&$element, \Drupal\Core\Form\FormStateInterface $form_state, $context)
+    {
+        $field_type = $context['items']->getFieldDefinition()->getType();
+        // @TODO: Replace by 'Nested bricks' widget setting.
+        if (in_array($field_type, [
+            'bricks',
+        ])) {
+            // @TODO: Find a better way to be used in _bricks_preprocess_tabledrag_form().
+            $element['#widget'] = 'entity_reference_autocomplete';
+            // #default_value is en Entity or NULL.
+            _bricks_form_element_alter($element, $context['items'][$context['delta']], $element['target_id']['#default_value']);
+            $element['depth']['#printed'] = true;
+        }
+    }
+    /**
+     * Implements hook_field_widget_WIDGET_TYPE_form_alter() for
+     * `bricks_tree_autocomplete`.
+     */
+    #[Hook('field_widget_bricks_tree_autocomplete_form_alter')]
+    public function fieldWidgetBricksTreeAutocompleteFormAlter(&$element, \Drupal\Core\Form\FormStateInterface $form_state, $context)
+    {
+        bricks_field_widget_entity_reference_autocomplete_form_alter($element, $form_state, $context);
+    }
+    /**
+     * Implements hook_entity_presave().
+     */
+    #[Hook('entity_presave')]
+    public function entityPresave(\Drupal\Core\Entity\EntityInterface $entity)
+    {
+        if ($entity instanceof \Drupal\Core\Entity\FieldableEntityInterface) {
+            foreach ($entity->getFields() as $field_item_list) {
+                if ($field_item_list->get(0) instanceof \Drupal\bricks\BricksFieldItemInterface) {
+                    \Drupal\bricks\Bricks::correctDepths($field_item_list);
+                }
+            }
+        }
+    }
+}
diff --git a/tests/src/Functional/BricksTest.php b/tests/src/Functional/BricksTest.php
index 99d30a5..9970cbe 100644
--- a/tests/src/Functional/BricksTest.php
+++ b/tests/src/Functional/BricksTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\bricks\Functional;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\node\Entity\Node;
 use Drupal\paragraphs\Entity\Paragraph;
 use Drupal\Tests\BrowserTestBase;
@@ -12,6 +14,8 @@ use Drupal\Tests\taxonomy\Traits\TaxonomyTestTrait;
  *
  * @group bricks
  */
+#[Group('bricks')]
+#[RunTestsInSeparateProcesses]
 class BricksTest extends BrowserTestBase {
 
   use TaxonomyTestTrait;
diff --git a/tests/src/Kernel/BricksTest.php b/tests/src/Kernel/BricksTest.php
index 1648958..a508759 100644
--- a/tests/src/Kernel/BricksTest.php
+++ b/tests/src/Kernel/BricksTest.php
@@ -2,6 +2,10 @@
 
 namespace Drupal\Tests\bricks\Kernel;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
+use PHPUnit\Framework\Attributes\DataProvider;
+use Drupal\Component\Utility\DeprecationHelper;
 use Drupal\KernelTests\KernelTestBase;
 use Drupal\node\Entity\Node;
 use Drupal\paragraphs\Entity\Paragraph;
@@ -13,6 +17,8 @@ use Symfony\Component\DomCrawler\Crawler;
  *
  * @group bricks
  */
+#[Group('bricks')]
+#[RunTestsInSeparateProcesses]
 class BricksTest extends KernelTestBase {
 
   protected static $modules = [
@@ -31,7 +37,6 @@ class BricksTest extends KernelTestBase {
 
   protected function setUp(): void {
     parent::setUp();
-    $this->installSchema('system', 'sequences');
     $this->installSchema('node', 'node_access');
     array_map([$this, 'installEntitySchema'], ['node', 'paragraph', 'user']);
     array_map([$this, 'installConfig'], ['bricks_test', 'system']);
@@ -45,6 +50,7 @@ class BricksTest extends KernelTestBase {
   /**
    * @dataProvider getTrees
    */
+  #[DataProvider('getTrees')]
   public function testBricks(array $tree) {
     $paragraphs = [];
     $n = max(array_keys($tree));
@@ -67,7 +73,7 @@ class BricksTest extends KernelTestBase {
     ]);
     $node->save();
     $build = \Drupal::entityTypeManager()->getViewBuilder('node')->view($node);
-    $contents = (string) \Drupal::service('renderer')->renderPlain($build);
+    $contents = (string) DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '10.3.0', fn() => \Drupal::service('renderer')->renderInIsolation($build), fn() => \Drupal::service('renderer')->renderPlain($build));
     $crawler = new Crawler($contents);
     $bricks = $crawler->filter('.brick--id--1')->parents()->children();
     $total = $this->recurseBricks($tree, $bricks);
diff --git a/tests/src/Unit/BricksTest.php b/tests/src/Unit/BricksTest.php
index d2c5395..66afb20 100644
--- a/tests/src/Unit/BricksTest.php
+++ b/tests/src/Unit/BricksTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\bricks\Unit;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\DataProvider;
 use Prophecy\PhpUnit\ProphecyTrait;
 use Drupal\bricks\Bricks;
 use Drupal\Tests\UnitTestCase;
@@ -11,12 +13,14 @@ use Drupal\Tests\UnitTestCase;
  *
  * @group bricks
  */
+#[Group('bricks')]
 class BricksTest extends UnitTestCase {
 
   use ProphecyTrait;
   /**
    * @dataProvider depthsProvider
    */
+  #[DataProvider('depthsProvider')]
   public function testFixDepths($depths, $expected_depths) {
     $a = new \ArrayObject();
     foreach ($depths as $depth) {
