diff --git a/README.md b/README.md
index 05bc181bc943aa488a516e3b6e0da3bcead51013..de8d33684273da5b746158c8b355962ae972287c 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,4 @@
-
-# use as git subtree (preferred)
+# use as git subtree
 
 ## add gitlab-ci to your extension
 ```
@@ -27,41 +26,50 @@ git subtree push --prefix .Build/gitlab-ci https://git.slub-dresden.de/typo3/git
 include:
   - remote: 'https://git.slub-dresden.de/typo3/gitlab-ci/-/raw/main/extension-gitlab-ci.yml'
 ```
-
-## create a .gitignore in your extension root, with this content
+# create a .gitignore
+## in your extension root, with this content
 ```
 composer.lock
+/.Build/gitlab-ci/project
+/.Build/gitlab-ci/project-gitlab-ci.yml
 /vendor
 /public
 .php_cs.cache
 .php-cs-fixer.cache
 ```
-# use rector local
+## add this lines to your project root
+```
+/.Build/gitlab-ci/extension
+/.Build/gitlab-ci/extension-gitlab-ci.yml
+.php_cs.cache
+.php-cs-fixer.cache
+```
+
+# install rector in your local environment
 ```
 composer require --dev ssch/typo3-rector
 ```
-## run rector
+## run rector to fix your code
 ```
-./vendor/bin/rector process . --config .Build/gitlab-ci/typo3-rector/Extension.php
+./vendor/bin/rector process . --config .Build/gitlab-ci/extension/typo3-rector.php
 ```
 
-# use php-cs-fixer local
+# install php-cs-fixer in your local environment
 ```
 composer require --dev friendsofphp/php-cs-fixer
 ```
 
-## run php-cs-fixer
+## run php-cs-fixer to fix your code
 ```
-./vendor/bin/php-cs-fixer fix --config .Build/gitlab-ci/php-cs-fixer/Extension.php
+./vendor/bin/php-cs-fixer fix --config .Build/gitlab-ci/extension/php-cs-fixer.php
 ```
 
-# use typo3-typoscript-lint local
+# install typo3-typoscript-lint in your local environment
 ```
 composer require --dev helmich/typo3-typoscript-lint
 ```
 
-## run typo3-typoscript-lint
+## run typo3-typoscript-lint to display the errors
 ```
-vendor/bin/typoscript-lint -c .Build/gitlab-ci/typoscript-lint/Extension.yml --fail-on-warnings
+vendor/bin/typoscript-lint -c .Build/gitlab-ci/extension/typoscript-lint.yml --fail-on-warnings
 ```
-
diff --git a/extension-gitlab-ci.yml b/extension-gitlab-ci.yml
index 9f6d3d388962ae304c1f0f59fc380e9eb4ea6d3e..f236df6c150fb6bd0f6ff2a77fb2616c5fbbe90c 100644
--- a/extension-gitlab-ci.yml
+++ b/extension-gitlab-ci.yml
@@ -5,7 +5,7 @@ stages:
     stage: test
     image: ekreative/php-cs-fixer:3
     script:
-        - php-cs-fixer fix --dry-run --config=.Build/gitlab-ci/php-cs-fixer/Extension.php --diff --format=junit > php-report.xml
+        - php-cs-fixer fix --dry-run --config=.Build/gitlab-ci/extension/php-cs-fixer.php --diff --format=junit > php-report.xml
     tags:
         - docker
     artifacts:
@@ -21,7 +21,7 @@ stages:
     before_script:
         - composer global req ssch/typo3-rector
     script:
-        - /tmp/vendor/bin/rector process . --config .Build/gitlab-ci/typo3-rector/Extension.php --dry-run
+        - /tmp/vendor/bin/rector process . --config .Build/gitlab-ci/extension/typo3-rector.php --dry-run
 "TypoScript Linter":
     stage: test
     image: composer:2
@@ -30,4 +30,4 @@ stages:
     before_script:
         - composer global req helmich/typo3-typoscript-lint
     script:
-        - /tmp/vendor/bin/typoscript-lint -c .Build/gitlab-ci/typoscript-lint/Extension.yml --fail-on-warnings
+        - /tmp/vendor/bin/typoscript-lint -c .Build/gitlab-ci/extension/typoscript-lint.yml --fail-on-warnings
diff --git a/php-cs-fixer/Extension.php b/extension/php-cs-fixer.php
similarity index 100%
rename from php-cs-fixer/Extension.php
rename to extension/php-cs-fixer.php
diff --git a/typo3-rector/Extension.php b/extension/typo3-rector.php
similarity index 100%
rename from typo3-rector/Extension.php
rename to extension/typo3-rector.php
diff --git a/typoscript-lint/Extension.yml b/extension/typoscript-lint.yml
similarity index 100%
rename from typoscript-lint/Extension.yml
rename to extension/typoscript-lint.yml
diff --git a/php-cs-fixer/Project.php b/php-cs-fixer/Project.php
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/project-gitlab-ci.yml b/project-gitlab-ci.yml
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..eae8fa2b6936401030b303649069e727c996a9a0 100644
--- a/project-gitlab-ci.yml
+++ b/project-gitlab-ci.yml
@@ -0,0 +1,14 @@
+stages:
+    - test
+"PHP CS Fixer":
+    stage: test
+    image: ekreative/php-cs-fixer:3
+    script:
+        - php-cs-fixer fix --dry-run --config=.Build/gitlab-ci/extension/php-cs-fixer.php --diff --format=junit > php-report.xml
+    tags:
+        - docker
+    artifacts:
+        expire_in: 2 hours
+        reports:
+            junit:
+                - php-report.xml
\ No newline at end of file
diff --git a/project/php-cs-fixer.php b/project/php-cs-fixer.php
new file mode 100644
index 0000000000000000000000000000000000000000..92d273e46f403176cf6a5d11697dfd01a0d314dd
--- /dev/null
+++ b/project/php-cs-fixer.php
@@ -0,0 +1,101 @@
+<?php
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+/**
+ * This file represents the configuration for Code Sniffing PSR-2-related
+ * automatic checks of coding guidelines
+ * Install @fabpot's great php-cs-fixer tool via
+ *
+ *  $ composer global require friendsofphp/php-cs-fixer
+ *
+ * And then simply run
+ *
+ *  $ ./bin/php-cs-fixer fix --config ./Build/gitlab-ci/php-cs-fixer/Extension.php
+ *
+ * inside the TYPO3 directory. Warning: This may take up to 10 minutes.
+ *
+ * For more information read:
+ *     https://www.php-fig.org/psr/psr-2/
+ *     https://cs.sensiolabs.org
+ */
+if (PHP_SAPI !== 'cli') {
+    die('This script supports command line usage only. Please check your command.');
+}
+// Define in which folders to search and which folders to exclude
+// Exclude all files and directories from .gitignore
+$finder = (new PhpCsFixer\Finder())
+    ->ignoreVCSIgnored(true)
+    ->in(realpath(__DIR__ . '/../../../'));
+// Return a Code Sniffing configuration using
+// all sniffers needed for PSR-2
+// and additionally:
+//  - Remove leading slashes in use clauses.
+//  - PHP single-line arrays should not have trailing comma.
+//  - Single-line whitespace before closing semicolon are prohibited.
+//  - Remove unused use statements in the PHP source code
+//  - Ensure Concatenation to have at least one whitespace around
+//  - Remove trailing whitespace at the end of blank lines.
+return (new \PhpCsFixer\Config())
+    ->setRiskyAllowed(true)
+    ->setRules([
+        '@DoctrineAnnotation' => true,
+        '@PSR2' => true,
+        'array_syntax' => ['syntax' => 'short'],
+        'blank_line_after_opening_tag' => false,
+        'braces' => ['allow_single_line_closure' => true],
+        'cast_spaces' => ['space' => 'none'],
+        'compact_nullable_typehint' => true,
+        'concat_space' => ['spacing' => 'one'],
+        'declare_equal_normalize' => ['space' => 'none'],
+        'dir_constant' => true,
+        'function_typehint_space' => true,
+        'lowercase_cast' => true,
+        'method_argument_space' => ['on_multiline' => 'ensure_fully_multiline'],
+        'modernize_types_casting' => true,
+        'native_function_casing' => true,
+        'new_with_braces' => true,
+        'no_alias_functions' => true,
+        'no_blank_lines_after_phpdoc' => true,
+        'no_empty_phpdoc' => true,
+        'no_empty_statement' => true,
+        'no_extra_blank_lines' => true,
+        'no_leading_import_slash' => true,
+        'no_leading_namespace_whitespace' => true,
+        'no_null_property_initialization' => true,
+        'no_short_bool_cast' => true,
+        'no_singleline_whitespace_before_semicolons' => true,
+        'no_superfluous_elseif' => true,
+        'no_trailing_comma_in_singleline_array' => true,
+        'no_unneeded_control_parentheses' => true,
+        'no_unused_imports' => true,
+        'no_useless_else' => true,
+        'no_whitespace_in_blank_line' => true,
+        'ordered_imports' => true,
+        'php_unit_construct' => ['assertions' => ['assertEquals', 'assertSame', 'assertNotEquals', 'assertNotSame']],
+        'php_unit_mock_short_will_return' => true,
+        'php_unit_test_case_static_method_calls' => ['call_type' => 'self'],
+        'phpdoc_no_access' => true,
+        'phpdoc_no_empty_return' => true,
+        'phpdoc_no_package' => true,
+        'phpdoc_scalar' => true,
+        'phpdoc_trim' => true,
+        'phpdoc_types' => true,
+        'phpdoc_types_order' => ['null_adjustment' => 'always_last', 'sort_algorithm' => 'none'],
+        'return_type_declaration' => ['space_before' => 'none'],
+        'single_quote' => true,
+        'single_line_comment_style' => ['comment_types' => ['hash']],
+        'single_trait_insert_per_statement' => true,
+        'trailing_comma_in_multiline' => ['elements' => ['arrays']],
+        'whitespace_after_comma_in_array' => true,
+    ])
+    ->setFinder($finder);
diff --git a/typo3-rector/Project.php b/typo3-rector/Project.php
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/typoscript-lint/Project.yml b/typoscript-lint/Project.yml
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000