diff --git a/.gitattributes b/.gitattributes
index f1ada5b..cb25355 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -11,5 +11,4 @@ docker-compose.yml export-ignore
 phpdoc.dist.xml export-ignore
 phpmd.xml export-ignore
 phpstan.neon.dist export-ignore
-phpstorm.xml export-ignore
 phpunit.xml.dist export-ignore
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index a95b6fc..1d99405 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -8,22 +8,19 @@ on:
 
 jobs:
   tests:
-    runs-on: ubuntu-22.04
+    runs-on: ubuntu-24.04
     timeout-minutes: 10
 
-    strategy:
-      fail-fast: true
-
-    name: PHP 8.0
+    name: PHP 8.3
 
     steps:
       - name: Checkout
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
 
       - name: Setup PHP
         uses: shivammathur/setup-php@v2
         with:
-          php-version: 8.0
+          php-version: 8.3
           tools: composer
           coverage: xdebug
 
@@ -48,7 +45,7 @@ jobs:
           vendor/bin/phpstan analyse -vvv
 
       - name: PHPUnit
-        run: vendor/bin/phpunit --verbose
+        run: vendor/bin/phpunit
 
       - name: Upload coverage results to Coveralls
         env:
@@ -59,23 +56,20 @@ jobs:
           composer global require php-coveralls/php-coveralls
           php-coveralls --coverage_clover=build/logs/clover.xml -v
 
-  tests-last:
-    runs-on: ubuntu-22.04
+  tests-latest:
+    runs-on: ubuntu-24.04
     timeout-minutes: 10
 
-    strategy:
-      fail-fast: true
-
-    name: PHP 8.2 - Last
+    name: PHP Latest
 
     steps:
       - name: Checkout
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
 
       - name: Setup PHP
         uses: shivammathur/setup-php@v2
         with:
-          php-version: 8.2
+          php-version: latest
           tools: composer
           coverage: xdebug
 
@@ -88,4 +82,4 @@ jobs:
           vendor/bin/php-cs-fixer fix --diff --dry-run --verbose
 
       - name: PHPUnit
-        run: vendor/bin/phpunit --verbose
+        run: vendor/bin/phpunit
diff --git a/.gitignore b/.gitignore
index 592d95b..d6a2742 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@ build/
 raw-tests/
 vendor/
 .php-cs-fixer.cache
+.phpunit.cache
 .phpunit.result.cache
 composer.lock
 composer.phar
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ee95c63..05f1a24 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,5 +1,5 @@
 ---
-image: registry.gitlab.com/aplus-framework/images/base:1
+image: registry.gitlab.com/aplus-framework/images/base:4
 
 include:
   - template: Security/SAST.gitlab-ci.yml
@@ -30,8 +30,8 @@ test:php:
       - build/docs/
   coverage: '/^\s*Lines:\s*\d+.\d+\%/'
 
-test:php-last:
-  image: registry.gitlab.com/aplus-framework/images/base:3
+test:php-latest:
+  image: registry.gitlab.com/aplus-framework/images/base:latest
   stage: test
   timeout: 10 minutes
   cache:
diff --git a/composer.json b/composer.json
index 5aba854..84a6329 100644
--- a/composer.json
+++ b/composer.json
@@ -31,15 +31,15 @@
         }
     ],
     "require": {
-        "php": ">=8.0",
-        "friendsofphp/php-cs-fixer": "~3.21.0"
+        "php": ">=8.3",
+        "friendsofphp/php-cs-fixer": "~3.85.0"
     },
     "require-dev": {
         "ext-xdebug": "*",
-        "ergebnis/composer-normalize": "^2.28",
-        "phpmd/phpmd": "^2.13",
-        "phpstan/phpstan": "^1.8",
-        "phpunit/phpunit": "^9.5"
+        "ergebnis/composer-normalize": "^2.47",
+        "phpmd/phpmd": "^2.15",
+        "phpstan/phpstan": "^1.12",
+        "phpunit/phpunit": "^10.5"
     },
     "minimum-stability": "dev",
     "prefer-stable": true,
diff --git a/docker-compose.yml b/docker-compose.yml
index c3090c4..f79a851 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,15 +1,15 @@
 version: "3"
 services:
   package:
-    image: registry.gitlab.com/aplus-framework/images/package:2
+    image: registry.gitlab.com/aplus-framework/images/package:4
     container_name: package-coding-standard
     working_dir: /package
     volumes:
       - .:/package
     tty: true
-  package-last:
-    image: registry.gitlab.com/aplus-framework/images/package:3
-    container_name: package-coding-standard-last
+  package-latest:
+    image: registry.gitlab.com/aplus-framework/images/package:latest
+    container_name: package-coding-standard-latest
     working_dir: /package
     volumes:
       - .:/package
diff --git a/guide/index.rst b/guide/index.rst
index 19154d4..7a4a816 100644
--- a/guide/index.rst
+++ b/guide/index.rst
@@ -1,6 +1,9 @@
 Coding Standard
 ===============
 
+.. image:: image.png
+    :alt: Aplus Framework Coding Standard Library
+
 Aplus Framework Coding Standard Library.
 
 - `Installation`_
diff --git a/phpstorm.xml b/phpstorm.xml
index af2f889..e538afa 100644
--- a/phpstorm.xml
+++ b/phpstorm.xml
@@ -5,16 +5,8 @@
       <option name="SMART_TABS" value="true" />
     </value>
   </option>
-  <option name="LINE_SEPARATOR" value="&#xA;" />
+  <option name="LINE_SEPARATOR" value="&#10;" />
   <option name="RIGHT_MARGIN" value="100" />
-  <option name="HTML_ATTRIBUTE_WRAP" value="0" />
-  <option name="HTML_TEXT_WRAP" value="0" />
-  <option name="HTML_KEEP_LINE_BREAKS" value="false" />
-  <option name="HTML_KEEP_LINE_BREAKS_IN_TEXT" value="false" />
-  <option name="HTML_ALIGN_ATTRIBUTES" value="false" />
-  <option name="HTML_ELEMENTS_TO_REMOVE_NEW_LINE_BEFORE" value="" />
-  <option name="HTML_INLINE_ELEMENTS" value="abbr,acronym,b,basefont,bdo,big,br,cite,cite,code,dfn,em,font,i,img,input,kbd,q,s,samp,select,span,strike,strong,sub,sup,textarea,tt,u,var" />
-  <option name="HTML_DONT_ADD_BREAKS_IF_INLINE_CONTENT" value="title,h1,h2,h3,h4,h5,h6,p,a,br" />
   <option name="FORMATTER_TAGS_ENABLED" value="true" />
   <option name="SOFT_MARGINS" value="80" />
   <CssCodeStyleSettings>
@@ -33,45 +25,71 @@
     <option name="HTML_DONT_ADD_BREAKS_IF_INLINE_CONTENT" value="title,h1,h2,h3,h4,h5,h6,a,br" />
     <option name="HTML_ENFORCE_QUOTES" value="true" />
   </HTMLCodeStyleSettings>
+  <JSCodeStyleSettings version="0">
+    <option name="ENFORCE_TRAILING_COMMA" value="WhenMultiline" />
+  </JSCodeStyleSettings>
+  <LessCodeStyleSettings>
+    <option name="HEX_COLOR_LOWER_CASE" value="true" />
+    <option name="HEX_COLOR_SHORT_FORMAT" value="true" />
+  </LessCodeStyleSettings>
   <PHPCodeStyleSettings>
-    <option name="ALIGN_PHPDOC_PARAM_NAMES" value="true" />
-    <option name="ALIGN_PHPDOC_COMMENTS" value="true" />
     <option name="COMMA_AFTER_LAST_ARRAY_ELEMENT" value="true" />
     <option name="PHPDOC_BLANK_LINE_BEFORE_TAGS" value="true" />
     <option name="PHPDOC_BLANK_LINES_AROUND_PARAMETERS" value="true" />
     <option name="PHPDOC_WRAP_LONG_LINES" value="true" />
-    <option name="THROWS_WEIGHT" value="3" />
-    <option name="RETURN_WEIGHT" value="4" />
-    <option name="SEE_WEIGHT" value="1" />
-    <option name="VAR_WEIGHT" value="2" />
+    <option name="ANONYMOUS_BRACE_STYLE" value="2" />
+    <option name="THROWS_WEIGHT" value="5" />
+    <option name="PARAM_WEIGHT" value="2" />
+    <option name="RETURN_WEIGHT" value="6" />
+    <option name="SEE_WEIGHT" value="3" />
+    <option name="SINCE_WEIGHT" value="1" />
+    <option name="TODO_WEIGHT" value="0" />
+    <option name="VAR_WEIGHT" value="4" />
     <option name="GROUP_USE_WRAP" value="0" />
     <option name="LOWER_CASE_BOOLEAN_CONST" value="true" />
     <option name="LOWER_CASE_NULL_CONST" value="true" />
     <option name="ELSE_IF_STYLE" value="COMBINE" />
     <option name="FIELDS_DEFAULT_VISIBILITY" value="protected" />
-    <option name="VARIABLE_NAMING_STYLE" value="SNAKE_CASE" />
+    <option name="VARIABLE_NAMING_STYLE" value="CAMEL_CASE" />
     <option name="KEEP_RPAREN_AND_LBRACE_ON_ONE_LINE" value="true" />
     <option name="KEEP_BLANK_LINES_AFTER_LBRACE" value="0" />
-    <option name="SPACE_BEFORE_UNARY_NOT" value="true" />
-    <option name="SPACE_AFTER_UNARY_NOT" value="true" />
+    <option name="SPACE_BEFORE_SHORT_CLOSURE_LEFT_PARENTHESIS" value="true" />
     <option name="FORCE_SHORT_DECLARATION_ARRAY_STYLE" value="true" />
     <option name="SPACE_BEFORE_COLON_IN_RETURN_TYPE" value="true" />
+    <option name="SPACES_AROUND_PIPE_IN_UNION_TYPE" value="true" />
     <option name="NAMESPACE_BRACE_STYLE" value="2" />
+    <option name="ATTRIBUTES_WRAP" value="2" />
   </PHPCodeStyleSettings>
   <ScssCodeStyleSettings>
     <option name="HEX_COLOR_LOWER_CASE" value="true" />
     <option name="HEX_COLOR_SHORT_FORMAT" value="true" />
   </ScssCodeStyleSettings>
+  <SqlCodeStyleSettings version="7">
+    <option name="KEYWORD_CASE" value="2" />
+    <option name="TYPE_CASE" value="1" />
+    <option name="CUSTOM_TYPE_CASE" value="1" />
+    <option name="QUOTE_IDENTIFIER" value="2" />
+    <option name="QUOTE_TYPE" value="31" />
+    <option name="QUERY_EL_COMMA" value="2" />
+    <option name="QUERY_ALIGN_ELEMENTS" value="false" />
+    <option name="SET_ALIGN_EQUAL_SIGN" value="false" />
+    <option name="TABLE_TYPES_ALIGN" value="false" />
+    <option name="TABLE_DEFAULTS_ALIGN" value="false" />
+    <option name="TABLE_NULLABILITIES_ALIGN" value="false" />
+    <option name="ROUTINE_ARG_CONTENT" value="2" />
+    <option name="ROUTINE_ARG_CLOSING" value="2" />
+    <option name="ROUTINE_ARG_WRAP" value="0" />
+    <option name="ROUTINE_ARG_COMMA" value="2" />
+    <option name="IMP_COMMON_KEEP_BLANK_LINES_IN_CODE" value="1" />
+    <option name="IMP_DECLARE_ALIGN_TYPE" value="false" />
+    <option name="IMP_DECLARE_ALIGN_EQ" value="false" />
+  </SqlCodeStyleSettings>
   <XML>
-    <option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
+    <option name="XML_KEEP_BLANK_LINES" value="1" />
   </XML>
-  <editorconfig>
-    <option name="ENABLED" value="false" />
-  </editorconfig>
   <codeStyleSettings language="CSS">
-    <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
+    <option name="KEEP_BLANK_LINES_IN_CODE" value="0" />
     <indentOptions>
-      <option name="USE_TAB_CHARACTER" value="true" />
       <option name="SMART_TABS" value="true" />
     </indentOptions>
     <arrangement>
@@ -89,41 +107,43 @@
   </codeStyleSettings>
   <codeStyleSettings language="HTML">
     <indentOptions>
-      <option name="USE_TAB_CHARACTER" value="true" />
       <option name="SMART_TABS" value="true" />
     </indentOptions>
   </codeStyleSettings>
   <codeStyleSettings language="JSON">
     <indentOptions>
       <option name="INDENT_SIZE" value="4" />
-      <option name="USE_TAB_CHARACTER" value="true" />
     </indentOptions>
   </codeStyleSettings>
   <codeStyleSettings language="JavaScript">
+    <option name="KEEP_BLANK_LINES_IN_CODE" value="0" />
+    <option name="BLANK_LINES_AFTER_IMPORTS" value="0" />
     <indentOptions>
-      <option name="USE_TAB_CHARACTER" value="true" />
       <option name="SMART_TABS" value="true" />
     </indentOptions>
   </codeStyleSettings>
+  <codeStyleSettings language="LESS">
+    <option name="KEEP_BLANK_LINES_IN_CODE" value="0" />
+    <indentOptions>
+      <option name="INDENT_SIZE" value="4" />
+    </indentOptions>
+  </codeStyleSettings>
   <codeStyleSettings language="PHP">
     <option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
     <option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
     <option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="0" />
-    <option name="KEEP_BLANK_LINES_IN_CODE" value="0" />
+    <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
     <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="0" />
     <option name="BLANK_LINES_BEFORE_PACKAGE" value="0" />
     <option name="BLANK_LINES_AFTER_PACKAGE" value="1" />
     <option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
     <option name="ALIGN_MULTILINE_FOR" value="false" />
     <option name="SPACE_AFTER_TYPE_CAST" value="true" />
-    <option name="CALL_PARAMETERS_WRAP" value="1" />
-    <option name="METHOD_PARAMETERS_WRAP" value="5" />
     <option name="METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE" value="true" />
     <option name="METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE" value="true" />
     <option name="METHOD_CALL_CHAIN_WRAP" value="5" />
     <option name="TERNARY_OPERATION_WRAP" value="1" />
     <option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
-    <option name="FOR_STATEMENT_WRAP" value="1" />
     <option name="ARRAY_INITIALIZER_WRAP" value="5" />
     <option name="ARRAY_INITIALIZER_LBRACE_ON_NEXT_LINE" value="true" />
     <option name="ARRAY_INITIALIZER_RBRACE_ON_NEXT_LINE" value="true" />
@@ -132,7 +152,6 @@
     <option name="WHILE_BRACE_FORCE" value="3" />
     <option name="FOR_BRACE_FORCE" value="3" />
     <indentOptions>
-      <option name="USE_TAB_CHARACTER" value="true" />
       <option name="SMART_TABS" value="true" />
     </indentOptions>
     <arrangement>
@@ -195,12 +214,17 @@
       </rules>
     </arrangement>
   </codeStyleSettings>
+  <codeStyleSettings language="SASS">
+    <option name="KEEP_BLANK_LINES_IN_CODE" value="0" />
+    <indentOptions>
+      <option name="INDENT_SIZE" value="4" />
+    </indentOptions>
+  </codeStyleSettings>
   <codeStyleSettings language="SCSS">
-    <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
+    <option name="KEEP_BLANK_LINES_IN_CODE" value="0" />
     <indentOptions>
       <option name="INDENT_SIZE" value="4" />
       <option name="CONTINUATION_INDENT_SIZE" value="4" />
-      <option name="USE_TAB_CHARACTER" value="true" />
       <option name="SMART_TABS" value="true" />
     </indentOptions>
     <arrangement>
@@ -216,9 +240,17 @@
       </rules>
     </arrangement>
   </codeStyleSettings>
+  <codeStyleSettings language="SQL">
+    <option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
+  </codeStyleSettings>
+  <codeStyleSettings language="Shell Script">
+    <indentOptions>
+      <option name="INDENT_SIZE" value="4" />
+      <option name="TAB_SIZE" value="4" />
+    </indentOptions>
+  </codeStyleSettings>
   <codeStyleSettings language="XML">
     <indentOptions>
-      <option name="USE_TAB_CHARACTER" value="true" />
       <option name="SMART_TABS" value="true" />
     </indentOptions>
   </codeStyleSettings>
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 741d40f..905c202 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -1,13 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" backupGlobals="false"
-         bootstrap="vendor/autoload.php" colors="true" convertErrorsToExceptions="true"
-         convertNoticesToExceptions="true" convertWarningsToExceptions="true" stopOnError="false"
-         stopOnFailure="false" stopOnIncomplete="false" stopOnSkipped="false"
-         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd">
-    <coverage processUncoveredFiles="true">
-        <include>
-            <directory suffix=".php">src</directory>
-        </include>
+         bootstrap="vendor/autoload.php" colors="true" stopOnError="false" stopOnFailure="false"
+         stopOnIncomplete="false" stopOnSkipped="false"
+         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd"
+         cacheDirectory=".phpunit.cache">
+    <coverage>
         <report>
             <clover outputFile="build/coverage/clover.xml"/>
             <html outputDirectory="build/coverage"/>
@@ -18,4 +15,9 @@
         <directory suffix="Test.php">tests</directory>
     </testsuite>
     <logging/>
+    <source>
+        <include>
+            <directory suffix=".php">src</directory>
+        </include>
+    </source>
 </phpunit>
diff --git a/src/Config.php b/src/Config.php
index 2f9aa3c..7b84dcb 100644
--- a/src/Config.php
+++ b/src/Config.php
@@ -42,9 +42,10 @@ protected function prepareRules() : void
             'blank_line_after_opening_tag' => false,
             'blank_line_before_statement' => false,
             'blank_lines_before_namespace' => [
-                'min_line_breaks' => 0,
-                'max_line_breaks' => 0,
+                'min_line_breaks' => 1,
+                'max_line_breaks' => 1,
             ],
+            'braces_position' => true,
             'cast_spaces' => [
                 'space' => 'single',
             ],
@@ -63,14 +64,13 @@ protected function prepareRules() : void
             'combine_consecutive_unsets' => true,
             'combine_nested_dirname' => false,
             'comment_to_phpdoc' => false,
-            'compact_nullable_typehint' => true,
+            'compact_nullable_type_declaration' => true,
             'concat_space' => [
                 'spacing' => 'one',
             ],
             'constant_case' => true,
             'control_structure_braces' => true,
             'control_structure_continuation_position' => ['position' => 'same_line'],
-            'curly_braces_position' => true,
             'date_time_immutable' => false,
             'declare_equal_normalize' => [
                 'space' => 'none',
@@ -86,11 +86,6 @@ protected function prepareRules() : void
             'encoding' => true,
             'ereg_to_preg' => true,
             'error_suppression' => false,
-            'escape_implicit_backslashes' => [
-                'double_quoted' => true,
-                'heredoc_syntax' => true,
-                'single_quoted' => false,
-            ],
             'explicit_indirect_variable' => true,
             'explicit_string_variable' => true,
             'final_internal_class' => false,
@@ -101,7 +96,10 @@ protected function prepareRules() : void
                 'closure_function_spacing' => 'one',
             ],
             'function_to_constant' => true,
-            'general_phpdoc_annotation_remove' => [],
+            'general_phpdoc_annotation_remove' => [
+                'annotations' => [],
+                'case_sensitive' => true,
+            ],
             /*'header_comment' => [
                 'comment_type' => 'comment',
                 'header' => '',
@@ -143,7 +141,7 @@ protected function prepareRules() : void
                 'scope' => 'namespaced',
                 'strict' => true,
             ],
-            'new_with_braces' => true,
+            'new_with_parentheses' => true,
             'no_alias_functions' => true,
             'no_alternative_syntax' => false,
             'no_binary_string' => true,
@@ -183,14 +181,13 @@ protected function prepareRules() : void
             'no_space_around_double_colon' => true,
             'no_spaces_after_function_name' => true,
             'no_spaces_around_offset' => true,
-            'no_spaces_inside_parenthesis' => true,
             'no_superfluous_elseif' => true,
             'no_superfluous_phpdoc_tags' => false,
             'no_trailing_comma_in_singleline' => true,
             'no_trailing_whitespace' => true,
             'no_trailing_whitespace_in_comment' => true,
+            'no_unneeded_braces' => true,
             'no_unneeded_control_parentheses' => true,
-            'no_unneeded_curly_braces' => true,
             'no_unneeded_final_method' => true,
             'no_unreachable_default_argument_value' => false,
             'no_unset_cast' => false,
@@ -202,12 +199,15 @@ protected function prepareRules() : void
             'no_whitespace_in_blank_line' => true,
             'non_printable_character' => true,
             'normalize_index_brace' => true,
-            'not_operator_with_space' => true,
+            'not_operator_with_space' => false,
             'not_operator_with_successor_space' => false,
+            'nullable_type_declaration' => true,
+            'nullable_type_declaration_for_default_null_value' => true,
             'object_operator_without_whitespace' => true,
             'ordered_class_elements' => [
                 'order' => [
                     'use_trait',
+                    'case',
                     'constant',
                     'property',
                     'construct',
@@ -219,6 +219,10 @@ protected function prepareRules() : void
                 'sort_algorithm' => 'none',
             ],
             'ordered_imports' => true,
+            'ordered_types' => [
+                'case_sensitive' => true,
+                'null_adjustment' => 'always_last',
+            ],
             'php_unit_construct' => true,
             'phpdoc_add_missing_param_annotation' => true,
             'phpdoc_align' => false,
@@ -242,6 +246,7 @@ protected function prepareRules() : void
             'phpdoc_trim_consecutive_blank_line_separation' => true,
             'phpdoc_types' => true,
             'phpdoc_types_order' => [
+                'case_sensitive' => true,
                 'null_adjustment' => 'always_last',
                 'sort_algorithm' => 'alpha',
             ],
@@ -266,12 +271,22 @@ protected function prepareRules() : void
             'single_line_after_imports' => true,
             'single_line_comment_style' => true,
             'single_quote' => true,
-            'single_space_around_construct' => true,
+            'single_space_around_construct' => [
+                'constructs_followed_by_a_single_space' => ['echo', 'new', 'throw'],
+            ],
             'space_after_semicolon' => true,
+            'spaces_inside_parentheses' => [
+                'space' => 'none',
+            ],
             'standardize_increment' => true,
             'standardize_not_equals' => true,
             'static_lambda' => true,
             'strict_comparison' => true,
+            'string_implicit_backslashes' => [
+                'double_quoted' => 'escape',
+                'heredoc' => 'escape',
+                'single_quoted' => 'unescape',
+            ],
             'strict_param' => false,
             'string_line_ending' => true,
             'switch_case_semicolon_to_colon' => true,
@@ -281,6 +296,7 @@ protected function prepareRules() : void
             'trailing_comma_in_multiline' => ['elements' => ['arrays']],
             'trim_array_spaces' => true,
             'type_declaration_spaces' => ['elements' => ['function', 'property']],
+            'types_spaces' => ['space' => 'single'],
             'unary_operator_spaces' => true,
             'visibility_required' => true,
             'void_return' => true,
@@ -315,13 +331,24 @@ public function setHeaderComment(string $header) : static
         return $this;
     }
 
+    /**
+     * @param string $packageName
+     * @param array<string>|string $copyright
+     */
     public function setDefaultHeaderComment(
         string $packageName,
-        string $copyright = ''
+        array | string $copyright = []
     ) : static {
+        if ($copyright === '') {
+            $copyright = [];
+        }
+        $copyright = (array) $copyright;
         $copyrightLines = "\n";
         if ($copyright) {
-            $copyrightLines .= "\n" . '(c) ' . $copyright . "\n";
+            $copyrightLines .= "\n";
+            foreach ($copyright as $cr) {
+                $copyrightLines .= '(c) ' . $cr . "\n";
+            }
         }
         $header = <<<EOF
             This file is part of {$packageName}.{$copyrightLines}
diff --git a/tests/ConfigTest.php b/tests/ConfigTest.php
index 0cb065b..5b20dab 100644
--- a/tests/ConfigTest.php
+++ b/tests/ConfigTest.php
@@ -12,7 +12,7 @@
 use Framework\CodingStandard\Config;
 use PHPUnit\Framework\TestCase;
 
-class ConfigTest extends TestCase
+final class ConfigTest extends TestCase
 {
     protected Config $config;
 
@@ -23,7 +23,7 @@ public function setup() : void
 
     public function testCustomRules() : void
     {
-        $this->assertContainsEquals(
+        self::assertContainsEquals(
             ['array_indentation' => false],
             $this->config->getRules()
         );
@@ -31,11 +31,11 @@ public function testCustomRules() : void
 
     public function testHeaderComment() : void
     {
-        $this->assertFalse(
+        self::assertFalse(
             isset($this->config->getRules()['header_comment'])
         );
         $this->config->setHeaderComment('ABC');
-        $this->assertSame(
+        self::assertSame(
             'ABC',
             // @phpstan-ignore-next-line
             $this->config->getRules()['header_comment']['header']
@@ -47,12 +47,23 @@ public function testDefaultHeaderComment() : void
         $this->config->setDefaultHeaderComment('Foo Bar');
         // @phpstan-ignore-next-line
         $header = $this->config->getRules()['header_comment']['header'];
-        $this->assertStringContainsString('Foo Bar', $header);
-        $this->assertStringNotContainsString('(c)', $header);
+        self::assertStringContainsString('Foo Bar', $header);
+        self::assertStringNotContainsString('(c)', $header);
+        $this->config->setDefaultHeaderComment('Foo Bar', '');
+        // @phpstan-ignore-next-line
+        $header = $this->config->getRules()['header_comment']['header'];
+        self::assertStringContainsString('Foo Bar', $header);
+        self::assertStringNotContainsString('(c)', $header);
         $this->config->setDefaultHeaderComment('Bazz', 'Acme');
         // @phpstan-ignore-next-line
         $header = $this->config->getRules()['header_comment']['header'];
-        $this->assertStringContainsString('Bazz', $header);
-        $this->assertStringContainsString('(c) Acme', $header);
+        self::assertStringContainsString('Bazz', $header);
+        self::assertStringContainsString('(c) Acme', $header);
+        $this->config->setDefaultHeaderComment('Bazz', ['Acme', 'OK']);
+        // @phpstan-ignore-next-line
+        $header = $this->config->getRules()['header_comment']['header'];
+        self::assertStringContainsString('Bazz', $header);
+        self::assertStringContainsString('(c) Acme', $header);
+        self::assertStringContainsString('(c) OK', $header);
     }
 }
diff --git a/tests/FinderTest.php b/tests/FinderTest.php
index c95431d..d0457d7 100644
--- a/tests/FinderTest.php
+++ b/tests/FinderTest.php
@@ -12,10 +12,10 @@
 use Framework\CodingStandard\Finder;
 use PHPUnit\Framework\TestCase;
 
-class FinderTest extends TestCase
+final class FinderTest extends TestCase
 {
     public function testInstance() : void
     {
-        $this->assertInstanceOf(Finder::class, Finder::create());
+        self::assertInstanceOf(Finder::class, Finder::create());
     }
 }
