diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 88d191857edfc7628ac172f846244495ddb02e2a..af289adf870d97debd769e5f83a949d64de4fce7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -27,7 +27,7 @@ sync:github:
     - git push --mirror ${MIRROR_GIT_URL}
 
 lint:coding-guideline: &PHP-LINTING
-  image: php:7.0-alpine
+  image: php:7.1-alpine
   stage: test
   script:
     - ./vendor/bin/phpcs -s -n --report-full=result/phpcs-full.txt --report-diff=result/phpcs-diff.txt --report-summary=result/phpcs-summary.txt
@@ -51,6 +51,10 @@ test:7.0:
   <<: *PHP-UNITTESTING
   image: php:7.0-alpine
 
+test:7.1:
+  <<: *PHP-UNITTESTING
+  image: php:7.1-alpine
+
 test:latest:
   <<: *PHP-UNITTESTING
   image: php:7-alpine
diff --git a/Documentation/source/index.rst b/Documentation/source/index.rst
index 93ec3be8d1c7e8c91bccdf795016d1d48f3ca320..1dd04c304e1dd3902d6b0c646be75850cc9d6259 100644
--- a/Documentation/source/index.rst
+++ b/Documentation/source/index.rst
@@ -19,6 +19,9 @@ Requirements
 To install the project you need ``composer`` to be installed and inside your ``$PATH``.
 Otherwise run ``make install-composer`` to install composer.
 
+We recommend to use at least PHP 5.6, we do not test with lower versions as 5.6 is latest maintained
+version.
+
 Installation
 ============
 
diff --git a/composer.json b/composer.json
index 6f9a5dfa52584e95db9c44790ed86ccc3d68db43..623bfdefcfcb60dc2f06568fa3866617aad721ae 100644
--- a/composer.json
+++ b/composer.json
@@ -23,6 +23,7 @@
         ]
     },
     "require": {
+        "php": ">=5.6",
         "helmich/typo3-typoscript-parser": "1.1.*",
         "squizlabs/php_codesniffer": "2.8.*",
         "symfony/yaml": "3.2.*",
diff --git a/src/Standards/Typo3Update/AbstractYamlRemovedUsage.php b/src/Standards/Typo3Update/AbstractYamlRemovedUsage.php
new file mode 100644
index 0000000000000000000000000000000000000000..e753605bb2675f1c5090157abc15e79a2110fc8d
--- /dev/null
+++ b/src/Standards/Typo3Update/AbstractYamlRemovedUsage.php
@@ -0,0 +1,97 @@
+<?php
+namespace Typo3Update;
+
+/*
+ * Copyright (C) 2017  Daniel Siepmann <coding@daniel-siepmann.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+use PHP_CodeSniffer_File as PhpCsFile;
+use Typo3Update\RemovedByYamlConfiguration;
+
+/**
+ * Base class for all classes working with removed configuration through yaml files.
+ */
+abstract class AbstractYamlRemovedUsage
+{
+    /**
+     * @var RemovedByYamlConfiguration
+     */
+    protected $configured;
+
+    public function __construct()
+    {
+        $this->configured = new RemovedByYamlConfiguration(
+            $this->getRemovedConfigFiles(),
+            $this->getPrepareStructureCallback()
+        );
+    }
+
+    /**
+     * @return \Callable
+     */
+    protected function getPrepareStructureCallback()
+    {
+        return function (array $typo3Versions) {
+            return call_user_func_array([$this, 'prepareStructure'], [$typo3Versions]);
+        };
+    }
+
+    /**
+     * @param array $typo3Versions
+     * @return array
+     */
+    abstract protected function prepareStructure(array $typo3Versions);
+
+    /**
+     * @return array
+     */
+    abstract protected function getRemovedConfigFiles();
+
+    /**
+     * @param PhpCsFile $phpcsFile
+     * @param int $stackPtr
+     * @param array $config
+     */
+    protected function addWarning(PhpCsFile $phpcsFile, $stackPtr, array $config)
+    {
+        $phpcsFile->addWarning(
+            'Calls to removed code are not allowed; found %s. Removed in %s. %s. See: %s',
+            $stackPtr,
+            $config['identifier'],
+            [
+                $config['oldUsage'],
+                $config['versionRemoved'],
+                $this->getReplacement($config),
+                $config['docsUrl'],
+            ]
+        );
+    }
+
+    /**
+     * @param array $config
+     * @return string
+     */
+    protected function getReplacement(array $config)
+    {
+        $newCall = $config['replacement'];
+        if ($newCall !== null) {
+            return $newCall;
+        }
+        return 'There is no replacement, just remove call';
+    }
+}
diff --git a/src/Standards/Typo3Update/Configuration/Features/RemovedClass.yaml b/src/Standards/Typo3Update/Configuration/Features/RemovedClass.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..1b7974f9047179c96e1f31ab5dc8feba3ddfa243
--- /dev/null
+++ b/src/Standards/Typo3Update/Configuration/Features/RemovedClass.yaml
@@ -0,0 +1,14 @@
+Typo3Update\Feature\RemovedClassFeature:
+  - Typo3Update_Sniffs_Classname_InheritanceSniff
+  - Typo3Update_Sniffs_Classname_InlineCommentSniff
+  - Typo3Update_Sniffs_Classname_InstanceofSniff
+  - Typo3Update_Sniffs_Classname_InstantiationWithMakeInstanceSniff
+  - Typo3Update_Sniffs_Classname_InstantiationWithNewSniff
+  - Typo3Update_Sniffs_Classname_InstantiationWithObjectManagerSniff
+  - Typo3Update_Sniffs_Classname_IsACallSniff
+  - Typo3Update_Sniffs_Classname_MissingVendorForPluginsAndModulesSniff
+  - Typo3Update_Sniffs_Classname_PhpDocCommentSniff
+  - Typo3Update_Sniffs_Classname_StaticCallSniff
+  - Typo3Update_Sniffs_Classname_TypeHintCatchExceptionSniff
+  - Typo3Update_Sniffs_Classname_TypeHintSniff
+  - Typo3Update_Sniffs_Classname_UseSniff
diff --git a/src/Standards/Typo3Update/Configuration/Removed/Classes/7.0.yaml b/src/Standards/Typo3Update/Configuration/Removed/Classes/7.0.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..23412041997199df7d2deb098179881b2518f4d8
--- /dev/null
+++ b/src/Standards/Typo3Update/Configuration/Removed/Classes/7.0.yaml
@@ -0,0 +1,11 @@
+# Breaking changes in 7.0: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Index.html#breaking-changes
+'7.0':
+  \TYPO3\CMS\Backend\Template\MediumDocumentTemplate:
+    replacement: 'Use \TYPO3\CMS\Backend\Template\DocumentTemplate instead'
+    docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-61782-DeprecatedDocumentTemplateClassesRemoved.html'
+  \TYPO3\CMS\Backend\Template\SmallDocumentTemplate:
+    replacement: 'Use \TYPO3\CMS\Backend\Template\DocumentTemplate instead'
+    docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-61782-DeprecatedDocumentTemplateClassesRemoved.html'
+  \TYPO3\CMS\Backend\Template\StandardDocumentTemplate:
+    replacement: 'Use \TYPO3\CMS\Backend\Template\DocumentTemplate instead'
+    docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-61782-DeprecatedDocumentTemplateClassesRemoved.html'
diff --git a/src/Standards/Typo3Update/Feature/AbstractYamlRemovedUsage.php b/src/Standards/Typo3Update/Feature/AbstractYamlRemovedUsage.php
new file mode 100644
index 0000000000000000000000000000000000000000..2a1fb9fd64587397cc59e26f84d8de491a695131
--- /dev/null
+++ b/src/Standards/Typo3Update/Feature/AbstractYamlRemovedUsage.php
@@ -0,0 +1,32 @@
+<?php
+namespace Typo3Update\Feature;
+
+/*
+ * Copyright (C) 2017  Daniel Siepmann <coding@daniel-siepmann.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+use PHP_CodeSniffer_Sniff as PhpCsSniff;
+use Typo3Update\AbstractYamlRemovedUsage as BaseAbstractYamlRemovedUsage;
+
+abstract class AbstractYamlRemovedUsage extends BaseAbstractYamlRemovedUsage implements FeatureInterface
+{
+    public function __construct(PhpCsSniff $sniff)
+    {
+        parent::__construct();
+    }
+}
diff --git a/src/Standards/Typo3Update/Feature/FeatureInterface.php b/src/Standards/Typo3Update/Feature/FeatureInterface.php
index 39de10cfa6062b1e63f90a95bca5c35f4791f8fd..8ab83a73b78dacba71ff64a9fb08d0f4eefab2df 100644
--- a/src/Standards/Typo3Update/Feature/FeatureInterface.php
+++ b/src/Standards/Typo3Update/Feature/FeatureInterface.php
@@ -21,6 +21,7 @@ namespace Typo3Update\Feature;
  */
 
 use PHP_CodeSniffer_File as PhpCsFile;
+use PHP_CodeSniffer_Sniff as PhpCsSniff;
 
 /**
  * See "Features" in documentation.
diff --git a/src/Standards/Typo3Update/Feature/RemovedClassFeature.php b/src/Standards/Typo3Update/Feature/RemovedClassFeature.php
new file mode 100644
index 0000000000000000000000000000000000000000..5584dfc65634dd438d4c6d82e73da28d3d20189e
--- /dev/null
+++ b/src/Standards/Typo3Update/Feature/RemovedClassFeature.php
@@ -0,0 +1,61 @@
+<?php
+namespace Typo3Update\Feature;
+
+/*
+ * Copyright (C) 2017  Daniel Siepmann <coding@daniel-siepmann.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+use PHP_CodeSniffer_File as PhpCsFile;
+use Typo3Update\Options;
+
+class RemovedClassFeature extends AbstractYamlRemovedUsage
+{
+    public function process(PhpCsFile $phpcsFile, $classnamePosition, $classname)
+    {
+        if ($this->configured->isRemoved($classname) === false) {
+            return;
+        }
+        $this->addWarning(
+            $phpcsFile,
+            $classnamePosition,
+            $this->configured->getRemoved($classname)
+        );
+    }
+
+    protected function prepareStructure(array $typo3Versions)
+    {
+        $newStructure = [];
+        foreach ($typo3Versions as $typo3Version => $removals) {
+            foreach ($removals as $removed => $config) {
+                $config['name'] = $removed;
+                $config['identifier'] = 'RemovedClass.' . str_replace('\\', '_', ltrim($removed, '\\'));
+                $config['versionRemoved'] = $typo3Version;
+                $config['oldUsage'] = $removed;
+
+                $newStructure[$removed] = $config;
+            }
+        }
+
+        return $newStructure;
+    }
+
+    protected function getRemovedConfigFiles()
+    {
+        return Options::getRemovedClassConfigFiles();
+    }
+}
diff --git a/src/Standards/Typo3Update/Options.php b/src/Standards/Typo3Update/Options.php
index 1ce768c8a5b855d7d94b7aaf38e730eab166f007..62b8a7844b8656a7db6c142b1f48907644a38c3e 100644
--- a/src/Standards/Typo3Update/Options.php
+++ b/src/Standards/Typo3Update/Options.php
@@ -95,6 +95,19 @@ class Options
         );
     }
 
+    /**
+     * Returns an array of absolute file names containing removed class configurations.
+     *
+     * @return array<string>
+     */
+    public static function getRemovedClassConfigFiles()
+    {
+        return static::getOptionFileNames(
+            'removedClassConfigFiles',
+            __DIR__ . '/Configuration/Removed/Classes/*.yaml'
+        );
+    }
+
     /**
      * Get the option by optionName, if not defined, use default.
      *
@@ -127,10 +140,11 @@ class Options
         );
 
         foreach ($fileNames as $file) {
-            $option = array_merge(
-                $option,
-                Yaml::parse(file_get_contents((string) $file))
-            );
+            $content = Yaml::parse(file_get_contents((string) $file));
+            if ($content === null) {
+                $content = [];
+            }
+            $option = array_merge($option, $content);
         }
 
         return $option;
diff --git a/src/Standards/Typo3Update/RemovedByYamlConfiguration.php b/src/Standards/Typo3Update/RemovedByYamlConfiguration.php
new file mode 100644
index 0000000000000000000000000000000000000000..046c1802d1d68c41067a9f101e1180795bbc5768
--- /dev/null
+++ b/src/Standards/Typo3Update/RemovedByYamlConfiguration.php
@@ -0,0 +1,79 @@
+<?php
+namespace Typo3Update;
+
+/*
+ * Copyright (C) 2017  Daniel Siepmann <coding@daniel-siepmann.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+use Symfony\Component\Yaml\Yaml;
+
+class RemovedByYamlConfiguration
+{
+    /**
+     * Configuration to define removed code.
+     *
+     * @var array
+     */
+    protected $configured = [];
+
+    /**
+     * @param array $configFiles
+     * @param \Callable $prepareStructure
+     */
+    public function __construct(array $configFiles, $prepareStructure)
+    {
+        foreach ($configFiles as $file) {
+            $this->configured = array_merge(
+                $this->configured,
+                $prepareStructure(Yaml::parse(file_get_contents((string) $file)))
+            );
+        }
+    }
+
+    /**
+     * @param string $identifier
+     * @return bool
+     */
+    public function isRemoved($identifier)
+    {
+        return isset($this->configured[$identifier]);
+    }
+
+    /**
+     * @return array
+     */
+    public function getAllRemoved()
+    {
+        return $this->configured;
+    }
+
+    /**
+     * @return array
+     */
+    public function getRemoved($identifier)
+    {
+        if (!$this->isRemoved($identifier)) {
+            throw new \Exception(
+                sprintf('Identifier "%s" is not configured to be removed.', $identifier),
+                1493289133
+            );
+        }
+
+        return $this->configured[$identifier];
+    }
+}
diff --git a/src/Standards/Typo3Update/Sniffs/Removed/AbstractGenericPhpUsage.php b/src/Standards/Typo3Update/Sniffs/Removed/AbstractGenericPhpUsage.php
new file mode 100644
index 0000000000000000000000000000000000000000..99c81d16c9f780b2d8bf5a29b593650be4011950
--- /dev/null
+++ b/src/Standards/Typo3Update/Sniffs/Removed/AbstractGenericPhpUsage.php
@@ -0,0 +1,156 @@
+<?php
+namespace Typo3Update\Sniffs\Removed;
+
+/*
+ * Copyright (C) 2017  Daniel Siepmann <coding@daniel-siepmann.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+use PHP_CodeSniffer_File as PhpCsFile;
+
+abstract class AbstractGenericPhpUsage extends AbstractGenericUsage
+{
+    /**
+     * @return int[]
+     */
+    public function register()
+    {
+        return [T_STRING];
+    }
+
+    /**
+     * @param array $typo3Versions
+     * @return array
+     */
+    protected function prepareStructure(array $typo3Versions)
+    {
+        $newStructure = [];
+
+        foreach ($typo3Versions as $typo3Version => $removals) {
+            foreach ($removals as $removed => $config) {
+                $newStructure[$removed] = $config;
+
+                $newStructure[$removed]['fqcn'] = null;
+                $newStructure[$removed]['class'] = null;
+                $newStructure[$removed]['versionRemoved'] = $typo3Version;
+
+                $this->handleStatic($removed, $newStructure[$removed]);
+
+                $newStructure[$removed]['oldUsage'] = $this->getOldUsage($newStructure[$removed]);
+                $newStructure[$removed]['identifier'] = $this->getIdentifier($newStructure[$removed]);
+            };
+        }
+
+        return $newStructure;
+    }
+
+    /**
+     * @param PhpCsFile $phpcsFile
+     * @param int $stackPtr
+     * @return array
+     */
+    protected function findRemoved(PhpCsFile $phpcsFile, $stackPtr)
+    {
+        $tokens = $phpcsFile->getTokens();
+        $staticPosition = $phpcsFile->findPrevious(T_WHITESPACE, $stackPtr - 1, null, true, null, true);
+
+        $name = $tokens[$stackPtr]['content'];
+        $isStatic = false;
+        $class = false;
+
+        if ($staticPosition !== false) {
+            $isStatic = $tokens[$staticPosition]['code'] === T_DOUBLE_COLON;
+        }
+
+        if ($isStatic) {
+            $class = $phpcsFile->findPrevious(T_STRING, $staticPosition, null, false, null, true);
+            if ($class !== false) {
+                $class = $tokens[$class]['content'];
+            }
+        }
+
+        return $this->getMatchingRemoved($name, $class, $isStatic);
+    }
+
+    /**
+     * Returns all matching removed functions for given arguments.
+     *
+     * @param string $name
+     * @param string $className The last part of the class name, splitted by namespaces.
+     * @param bool $isStatic
+     *
+     * @return array
+     */
+    protected function getMatchingRemoved($name, $className, $isStatic)
+    {
+        // We will not match any static calls, without the class name, at least for now.
+        if ($isStatic === true && $className === false) {
+            return [];
+        }
+
+        return array_filter(
+            $this->configured->getAllRemoved(),
+            function ($config) use ($name, $isStatic, $className) {
+                return $name === $config['name']
+                    && $isStatic === $config['static']
+                    && (
+                        $className === $config['class']
+                        || $className === false
+                    )
+                ;
+            }
+        );
+    }
+
+    /**
+     * @param string $identifier
+     * @param array &$config
+     */
+    protected function handleStatic($identifier, array &$config)
+    {
+        $split = preg_split('/::|->/', $identifier);
+
+        $config['name'] = $split[0];
+        $config['static'] = strpos($identifier, '::') !== false;
+
+        if (isset($split[1])) {
+            $config['fqcn'] = $split[0];
+            $config['class'] = array_slice(explode('\\', $config['fqcn']), -1)[0];
+            $config['name'] = $split[1];
+        }
+    }
+
+    /**
+     * @param array $config
+     * @return string
+     */
+    protected function getIdentifier(array $config)
+    {
+        $name = $config['name'];
+        if ($config['class']) {
+            $name = $config['class'] . '.' . $name;
+        }
+
+        return $name;
+    }
+
+    /**
+     * @param array $config
+     * @return string
+     */
+    abstract protected function getOldUsage(array $config);
+}
diff --git a/src/Standards/Typo3Update/Sniffs/Removed/AbstractGenericUsage.php b/src/Standards/Typo3Update/Sniffs/Removed/AbstractGenericUsage.php
index 3cda85a09ffbf31d5d1d1b993a560affdbcc90d4..557dcb56d30315ded7897c17eee4a43de8c8d4e7 100644
--- a/src/Standards/Typo3Update/Sniffs/Removed/AbstractGenericUsage.php
+++ b/src/Standards/Typo3Update/Sniffs/Removed/AbstractGenericUsage.php
@@ -22,273 +22,25 @@ namespace Typo3Update\Sniffs\Removed;
 
 use PHP_CodeSniffer_File as PhpCsFile;
 use PHP_CodeSniffer_Sniff as PhpCsSniff;
-use PHP_CodeSniffer_Tokens as Tokens;
-use Symfony\Component\Yaml\Yaml;
-use Typo3Update\Options;
+use Typo3Update\AbstractYamlRemovedUsage as BaseAbstractYamlRemovedUsage;
 
-/**
- * Contains common functionality for removed code like constants or functions.
- *
- * Removed parts are configured using YAML-Files, for examples see
- * src/Standards/Typo3Update/Configuration/Removed/Constants/7.0.yaml Also
- * check out the configuration options in Readme.rst.
- */
-abstract class AbstractGenericUsage implements PhpCsSniff
+abstract class AbstractGenericUsage extends BaseAbstractYamlRemovedUsage implements PhpCsSniff
 {
-    use \Typo3Update\Sniffs\ExtendedPhpCsSupportTrait;
-
-    /**
-     * Configuration to define removed code.
-     *
-     * @var array
-     */
-    protected $configured = [];
-
-    /**
-     * Entries removed in current sniff.
-     * @var array
-     */
-    protected $removed = [];
-
-    public function __construct()
-    {
-        if ($this->configured === []) {
-            foreach ($this->getRemovedConfigFiles() as $file) {
-                $this->configured = array_merge(
-                    $this->configured,
-                    $this->prepareStructure(Yaml::parse(file_get_contents((string) $file)))
-                );
-            }
-        }
-    }
-
-    /**
-     * Return file names containing removed configurations.
-     *
-     * @return array<string>
-     */
-    abstract protected function getRemovedConfigFiles();
-
-    /**
-     * Prepares structure from config for later usage.
-     *
-     * @param array $typo3Versions
-     * @return array
-     */
-    protected function prepareStructure(array $typo3Versions)
-    {
-        $newStructure = [];
-
-        foreach ($typo3Versions as $typo3Version => $removals) {
-            foreach ($removals as $removed => $config) {
-                // Split static methods and methods.
-                $split = preg_split('/::|->/', $removed);
-
-                $newStructure[$removed] = $config;
-
-                $newStructure[$removed]['static'] = strpos($removed, '::') !== false;
-                $newStructure[$removed]['fqcn'] = null;
-                $newStructure[$removed]['class'] = null;
-                $newStructure[$removed]['name'] = $split[0];
-                $newStructure[$removed]['version_removed'] = $typo3Version;
-
-                // If split contains two parts, it's a class
-                if (isset($split[1])) {
-                    $newStructure[$removed]['fqcn'] = $split[0];
-                    $newStructure[$removed]['class'] = array_slice(
-                        explode('\\', $newStructure[$removed]['fqcn']),
-                        -1
-                    )[0];
-                    $newStructure[$removed]['name'] = $split[1];
-                }
-            }
-        }
-
-        return $newStructure;
-    }
-
-    /**
-     * Processes the tokens that this sniff is interested in.
-     *
-     * This is the default implementation, as most of the time next T_STRING is
-     * the class name. This way only the register method has to be registered
-     * in default cases.
-     *
-     * @param PhpCsFile $phpcsFile The file where the token was found.
-     * @param int                  $stackPtr  The position in the stack where
-     *                                        the token was found.
-     *
-     * @return void
-     */
-    public function process(PhpCsFile $phpcsFile, $stackPtr)
-    {
-        if (!$this->isRemoved($phpcsFile, $stackPtr)) {
-            return;
-        }
-
-        $this->addMessage($phpcsFile, $stackPtr);
-    }
-
     /**
-     * Check whether the current token is removed.
-     *
      * @param PhpCsFile $phpcsFile
      * @param int $stackPtr
-     * @return bool
-     */
-    protected function isRemoved(PhpCsFile $phpcsFile, $stackPtr)
-    {
-        $tokens = $phpcsFile->getTokens();
-        $staticPosition = $phpcsFile->findPrevious(T_WHITESPACE, $stackPtr - 1, null, true, null, true);
-
-        $name = $tokens[$stackPtr]['content'];
-        $isStatic = false;
-        $class = false;
-
-        if ($staticPosition !== false) {
-            $isStatic = $tokens[$staticPosition]['code'] === T_DOUBLE_COLON;
-        }
-
-        if ($isStatic) {
-            $class = $phpcsFile->findPrevious(T_STRING, $staticPosition, null, false, null, true);
-            if ($class !== false) {
-                $class = $tokens[$class]['content'];
-            }
-        }
-
-        $this->removed = $this->getMatchingRemoved($name, $class, $isStatic);
-        return $this->removed !== [];
-    }
-
-    /**
-     * Returns all matching removed functions for given arguments.
-     *
-     * @param string $name
-     * @param string $className The last part of the class name, splitted by namespaces.
-     * @param bool $isStatic
-     *
      * @return array
      */
-    protected function getMatchingRemoved($name, $className, $isStatic)
-    {
-        // We will not match any static calls, without the class name, at least for now.
-        if ($isStatic === true && $className === false) {
-            return [];
-        }
-
-        return array_filter(
-            $this->configured,
-            function ($config) use ($name, $isStatic, $className) {
-                return $name === $config['name']
-                    && $isStatic === $config['static']
-                    && (
-                        $className === $config['class']
-                        || $className === false
-                    )
-                ;
-            }
-        );
-    }
+    abstract protected function findRemoved(PhpCsFile $phpcsFile, $stackPtr);
 
     /**
-     * Add message for the given token position.
-     *
-     * Default is a warning, non fixable. Just overwrite in concrete sniff, if
-     * something different suites better.
-     *
      * @param PhpCsFile $phpcsFile
-     * @param int $tokenPosition
-     *
-     * @return void
-     */
-    protected function addMessage(PhpCsFile $phpcsFile, $tokenPosition)
-    {
-        foreach ($this->removed as $removed) {
-            $phpcsFile->addWarning(
-                'Legacy calls are not allowed; found %s. Removed in %s. %s. See: %s',
-                $tokenPosition,
-                $this->getIdentifier($removed),
-                [
-                    $this->getOldUsage($removed),
-                    $this->getRemovedVersion($removed),
-                    $this->getReplacement($removed),
-                    $this->getDocsUrl($removed),
-                ]
-            );
-        }
-    }
-
-    /**
-     * Identifier for configuring this specific error / warning through PHPCS.
-     *
-     * @param array $config
-     *
-     * @return string
-     */
-    protected function getIdentifier(array $config)
-    {
-        $name = $config['name'];
-        if ($config['class']) {
-            $name = $config['class'] . '.' . $name;
-        }
-
-        return $name;
-    }
-
-    /**
-     * The original call, to allow user to check matches.
-     *
-     * As we match the name, that can be provided by multiple classes, you
-     * should provide an example, so users can check that this is the legacy
-     * one.
-     *
-     * @param array $config
-     *
-     * @return string
-     */
-    abstract protected function getOldUsage(array $config);
-
-    /**
-     * Returns TYPO3 version when the breaking change happened.
-     *
-     * To let user decide whether this is important for him.
-     *
-     * @param array $config
-     *
-     * @return string
-     */
-    protected function getRemovedVersion(array $config)
-    {
-        return $config['version_removed'];
-    }
-
-    /**
-     * The new call, or information how to migrate.
-     *
-     * To provide feedback for user to ease migration.
-     *
-     * @param array $config
-     *
-     * @return string
+     * @param int $stackPtr
      */
-    protected function getReplacement(array $config)
+    public function process(PhpCsFile $phpcsFile, $stackPtr)
     {
-        $newCall = $config['replacement'];
-        if ($newCall !== null) {
-            return $newCall;
+        foreach ($this->findRemoved($phpcsFile, $stackPtr) as $removed) {
+            $this->addWarning($phpcsFile, $stackPtr, $removed);
         }
-        return 'There is no replacement, just remove call';
-    }
-
-    /**
-     * Allow user to lookup the official docs related to this deprecation / breaking change.
-     *
-     * @param array $config
-     *
-     * @return string
-     */
-    protected function getDocsUrl(array $config)
-    {
-        return $config['docsUrl'];
     }
 }
diff --git a/src/Standards/Typo3Update/Sniffs/Removed/GenericConstantUsageSniff.php b/src/Standards/Typo3Update/Sniffs/Removed/GenericConstantUsageSniff.php
index 1ee46b145f8ff411d92504fa7b0a5fa230cd10a4..e42a07d92164a01ffcfcf91c1450098077081289 100644
--- a/src/Standards/Typo3Update/Sniffs/Removed/GenericConstantUsageSniff.php
+++ b/src/Standards/Typo3Update/Sniffs/Removed/GenericConstantUsageSniff.php
@@ -19,42 +19,11 @@
  * 02110-1301, USA.
  */
 
-use PHP_CodeSniffer_File as PhpCsFile;
-use Typo3Update\Sniffs\Removed\AbstractGenericUsage;
+use Typo3Update\Sniffs\Removed\AbstractGenericPhpUsage;
 use Typo3Update\Options;
 
-/**
- * Sniff that handles all calls to removed constants.
- */
-class Typo3Update_Sniffs_Removed_GenericConstantUsageSniff extends AbstractGenericUsage
+class Typo3Update_Sniffs_Removed_GenericConstantUsageSniff extends AbstractGenericPhpUsage
 {
-    /**
-     * Return file names containing removed configurations.
-     *
-     * @return array<string>
-     */
-    protected function getRemovedConfigFiles()
-    {
-        return Options::getRemovedConstantConfigFiles();
-    }
-
-    /**
-     * Returns the token types that this sniff is interested in.
-     *
-     * @return array<int>
-     */
-    public function register()
-    {
-        return [T_STRING];
-    }
-
-    /**
-     * The original constant call, to allow user to check matches.
-     *
-     * @param array $config
-     *
-     * @return string
-     */
     protected function getOldUsage(array $config)
     {
         $old = $config['name'];
@@ -64,4 +33,9 @@ class Typo3Update_Sniffs_Removed_GenericConstantUsageSniff extends AbstractGener
 
         return 'constant ' . $old;
     }
+
+    protected function getRemovedConfigFiles()
+    {
+        return Options::getRemovedConstantConfigFiles();
+    }
 }
diff --git a/src/Standards/Typo3Update/Sniffs/Removed/GenericFunctionCallSniff.php b/src/Standards/Typo3Update/Sniffs/Removed/GenericFunctionCallSniff.php
index 4124eb24f5e37e9a1000f233e54ef83794fd303a..2915a879594163563921796a511383e9b80e7313 100644
--- a/src/Standards/Typo3Update/Sniffs/Removed/GenericFunctionCallSniff.php
+++ b/src/Standards/Typo3Update/Sniffs/Removed/GenericFunctionCallSniff.php
@@ -20,60 +20,28 @@
  */
 
 use PHP_CodeSniffer_File as PhpCsFile;
-use PHP_CodeSniffer_Tokens as Tokens;
-use Typo3Update\Sniffs\Removed\AbstractGenericUsage;
 use Typo3Update\Options;
+use Typo3Update\Sniffs\ExtendedPhpCsSupportTrait;
+use Typo3Update\Sniffs\Removed\AbstractGenericPhpUsage;
 
-/**
- * Sniff that handles all calls to removed functions.
- */
-class Typo3Update_Sniffs_Removed_GenericFunctionCallSniff extends AbstractGenericUsage
+class Typo3Update_Sniffs_Removed_GenericFunctionCallSniff extends AbstractGenericPhpUsage
 {
-    /**
-     * Return file names containing removed configurations.
-     *
-     * @return array<string>
-     */
+    use ExtendedPhpCsSupportTrait;
+
     protected function getRemovedConfigFiles()
     {
         return Options::getRemovedFunctionConfigFiles();
     }
 
-    /**
-     * Returns the token types that this sniff is interested in.
-     *
-     * @return array<int>
-     */
-    public function register()
-    {
-        return Tokens::$functionNameTokens;
-    }
-
-    /**
-     * Check whether function at given point is removed.
-     *
-     * @return bool
-     */
-    protected function isRemoved(PhpCsFile $phpcsFile, $stackPtr)
+    protected function findRemoved(PhpCsFile $phpcsFile, $stackPtr)
     {
         if (!$this->isFunctionCall($phpcsFile, $stackPtr)) {
-            return false;
+            return [];
         }
 
-        return parent::isRemoved($phpcsFile, $stackPtr);
+        return parent::findRemoved($phpcsFile, $stackPtr);
     }
 
-    /**
-     * The original function call, to allow user to check matches.
-     *
-     * As we match the function name, that can be provided by multiple classes,
-     * you should provide an example, so users can check that this is the
-     * legacy one.
-     *
-     * @param array $config The converted structure for a single function.
-     *
-     * @return string
-     */
     protected function getOldUsage(array $config)
     {
         $concat = '->';
diff --git a/src/Standards/Typo3Update/Sniffs/Removed/TypoScriptSniff.php b/src/Standards/Typo3Update/Sniffs/Removed/TypoScriptSniff.php
index 98c0cca0942c747d1cc704fbd4790093373f3766..6638b34b3b9d8504f09ebc5fd436925d7e4035e9 100644
--- a/src/Standards/Typo3Update/Sniffs/Removed/TypoScriptSniff.php
+++ b/src/Standards/Typo3Update/Sniffs/Removed/TypoScriptSniff.php
@@ -24,9 +24,6 @@ use PHP_CodeSniffer_File as PhpCsFile;
 use Typo3Update\Options;
 use Typo3Update\Sniffs\Removed\AbstractGenericUsage;
 
-/**
- * Check usage of removed or breaking changed TypoScript.
- */
 class Typo3Update_Sniffs_Removed_TypoScriptSniff extends AbstractGenericUsage
 {
     /**
@@ -37,11 +34,6 @@ class Typo3Update_Sniffs_Removed_TypoScriptSniff extends AbstractGenericUsage
         'TYPOSCRIPT',
     ];
 
-    /**
-     * Returns the token types that this sniff is interested in.
-     *
-     * @return array<int>
-     */
     public function register()
     {
         return [
@@ -50,16 +42,9 @@ class Typo3Update_Sniffs_Removed_TypoScriptSniff extends AbstractGenericUsage
         ];
     }
 
-    /**
-     * Prepares structure from config for later usage.
-     *
-     * @param array $typo3Versions
-     * @return array
-     */
     protected function prepareStructure(array $typo3Versions)
     {
         $newStructure = [];
-
         foreach ($typo3Versions as $typo3Version => $removals) {
             foreach ($removals as $removed => $config) {
                 $config['type'] = TokenInterface::TYPE_OBJECT_IDENTIFIER;
@@ -70,7 +55,9 @@ class Typo3Update_Sniffs_Removed_TypoScriptSniff extends AbstractGenericUsage
                 }
 
                 $config['name'] = $removed;
-                $config['version_removed'] = $typo3Version;
+                $config['identifier'] = str_replace('.', '-', $removed);
+                $config['versionRemoved'] = $typo3Version;
+                $config['oldUsage'] = $removed;
 
                 $newStructure[$removed] = $config;
             }
@@ -79,62 +66,24 @@ class Typo3Update_Sniffs_Removed_TypoScriptSniff extends AbstractGenericUsage
         return $newStructure;
     }
 
-    /**
-     * Check whether the current token is removed.
-     *
-     * @param PhpCsFile $phpcsFile
-     * @param int $stackPtr
-     * @return bool
-     */
-    protected function isRemoved(PhpCsFile $phpcsFile, $stackPtr)
+    protected function findRemoved(PhpCsFile $phpcsFile, $stackPtr)
     {
         $tokens = $phpcsFile->getTokens();
         $token = $tokens[$stackPtr];
         $objectIdentifier = $token['content'];
 
-        if (isset($this->configured[$objectIdentifier]) && $token['type'] === $this->configured[$objectIdentifier]['type']) {
-            $this->removed = [
-                $this->configured[$objectIdentifier]
-            ];
-            return true;
+        if (!$this->configured->isRemoved($objectIdentifier)) {
+            return [];
         }
 
-        return false;
-    }
-
-    /**
-     * Identifier for configuring this specific error / warning through PHPCS.
-     *
-     * @param array $config
-     *
-     * @return string
-     */
-    protected function getIdentifier(array $config)
-    {
-        return str_replace('.', '-', $config['name']);
-    }
+        $removed = $this->configured->getRemoved($objectIdentifier);
+        if ($token['type'] === $removed['type']) {
+            return [$removed];
+        }
 
-    /**
-     * The original call, to allow user to check matches.
-     *
-     * As we match the name, that can be provided by multiple classes, you
-     * should provide an example, so users can check that this is the legacy
-     * one.
-     *
-     * @param array $config
-     *
-     * @return string
-     */
-    protected function getOldUsage(array $config)
-    {
-        return $config['name'];
+        return [];
     }
 
-    /**
-     * Return file names containing removed configurations.
-     *
-     * @return array<string>
-     */
     protected function getRemovedConfigFiles()
     {
         return Options::getRemovedTypoScriptConfigFiles();
diff --git a/tests/Fixtures/Standards/Typo3Update/Sniffs/Classname/PhpDocCommentSniff/Expected.diff b/tests/Fixtures/Standards/Typo3Update/Sniffs/Classname/PhpDocCommentSniff/Expected.diff
index 807e03e1c2a07c53c755309b8bdf277995ee17a0..36a8cf77a72e0151f98645770d8c73c0a73d16ae 100644
--- a/tests/Fixtures/Standards/Typo3Update/Sniffs/Classname/PhpDocCommentSniff/Expected.diff
+++ b/tests/Fixtures/Standards/Typo3Update/Sniffs/Classname/PhpDocCommentSniff/Expected.diff
@@ -1,6 +1,6 @@
 --- tests/Fixtures/Standards/Typo3Update/Sniffs/Classname/PhpDocCommentSniff/InputFileForIssues.php
 +++ PHP_CodeSniffer
-@@ -22,19 +22,19 @@
+@@ -22,20 +22,20 @@
  class InputFileForIssues
  {
      /**
@@ -13,6 +13,7 @@
      /**
 -     * @param t3lib_div
 +     * @param \TYPO3\CMS\Core\Utility\GeneralUtility
+      * @param \TYPO3\CMS\Backend\Template\MediumDocumentTemplate
       *
 -     * @return Tx_Extbase_Configuration_Configurationmanager
 +     * @return \TYPO3\CMS\Extbase\Configuration\ConfigurationManager
diff --git a/tests/Fixtures/Standards/Typo3Update/Sniffs/Classname/PhpDocCommentSniff/Expected.json b/tests/Fixtures/Standards/Typo3Update/Sniffs/Classname/PhpDocCommentSniff/Expected.json
index dc720388f993e003853edf62c6be00c2f6b4e214..89158c74fa7ca0467e432828dcdb08f5cdb70a87 100644
--- a/tests/Fixtures/Standards/Typo3Update/Sniffs/Classname/PhpDocCommentSniff/Expected.json
+++ b/tests/Fixtures/Standards/Typo3Update/Sniffs/Classname/PhpDocCommentSniff/Expected.json
@@ -21,10 +21,19 @@
                     "source": "Typo3Update.Classname.PhpDocComment.legacyClassname",
                     "type": "ERROR"
                 },
+                {
+                    "column": 15,
+                    "fixable": false,
+                    "line": 32,
+                    "message": "Calls to removed code are not allowed; found \\TYPO3\\CMS\\Backend\\Template\\MediumDocumentTemplate. Removed in 7.0. Use \\TYPO3\\CMS\\Backend\\Template\\DocumentTemplate instead. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-61782-DeprecatedDocumentTemplateClassesRemoved.html",
+                    "severity": 5,
+                    "source": "Typo3Update.Classname.PhpDocComment.RemovedClass.TYPO3_CMS_Backend_Template_MediumDocumentTemplate",
+                    "type": "WARNING"
+                },
                 {
                     "column": 16,
                     "fixable": true,
-                    "line": 33,
+                    "line": 34,
                     "message": "Legacy classes are not allowed; found \"Tx_Extbase_Configuration_Configurationmanager\", use \"TYPO3\\CMS\\Extbase\\Configuration\\ConfigurationManager\" instead",
                     "severity": 5,
                     "source": "Typo3Update.Classname.PhpDocComment.legacyClassname",
@@ -33,19 +42,19 @@
                 {
                     "column": 18,
                     "fixable": true,
-                    "line": 37,
+                    "line": 38,
                     "message": "Legacy classes are not allowed; found \"t3lib_div\", use \"TYPO3\\CMS\\Core\\Utility\\GeneralUtility\" instead",
                     "severity": 5,
                     "source": "Typo3Update.Classname.PhpDocComment.legacyClassname",
                     "type": "ERROR"
                 }
             ],
-            "warnings": 0
+            "warnings": 1
         }
     },
     "totals": {
         "errors": 4,
         "fixable": 4,
-        "warnings": 0
+        "warnings": 1
     }
 }
diff --git a/tests/Fixtures/Standards/Typo3Update/Sniffs/Classname/PhpDocCommentSniff/InputFileForIssues.php b/tests/Fixtures/Standards/Typo3Update/Sniffs/Classname/PhpDocCommentSniff/InputFileForIssues.php
index 92acefba497ba02e8e5c69ef3b85e600bc39550b..7a2de678c7d62f7d781818c331cfb1a4be9188ae 100644
--- a/tests/Fixtures/Standards/Typo3Update/Sniffs/Classname/PhpDocCommentSniff/InputFileForIssues.php
+++ b/tests/Fixtures/Standards/Typo3Update/Sniffs/Classname/PhpDocCommentSniff/InputFileForIssues.php
@@ -29,6 +29,7 @@ class InputFileForIssues
 
     /**
      * @param t3lib_div
+     * @param \TYPO3\CMS\Backend\Template\MediumDocumentTemplate
      *
      * @return Tx_Extbase_Configuration_Configurationmanager
      */
diff --git a/tests/Fixtures/Standards/Typo3Update/Sniffs/Removed/GenericConstantUsageSniff/Expected.json b/tests/Fixtures/Standards/Typo3Update/Sniffs/Removed/GenericConstantUsageSniff/Expected.json
index e3072f3a34822b3c5d547133c7cfb8152a0a5820..6d0f5d65755fb4a120fbcb2216df3804e6c7f67c 100644
--- a/tests/Fixtures/Standards/Typo3Update/Sniffs/Removed/GenericConstantUsageSniff/Expected.json
+++ b/tests/Fixtures/Standards/Typo3Update/Sniffs/Removed/GenericConstantUsageSniff/Expected.json
@@ -7,7 +7,7 @@
                     "column": 9,
                     "fixable": false,
                     "line": 22,
-                    "message": "Legacy calls are not allowed; found constant PATH_tslib. Removed in 7.0. The folder and constant no longer exist. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-61459-RemovalTslib.html",
+                    "message": "Calls to removed code are not allowed; found constant PATH_tslib. Removed in 7.0. The folder and constant no longer exist. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-61459-RemovalTslib.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.GenericConstantUsage.PATH_tslib",
                     "type": "WARNING"
@@ -16,7 +16,7 @@
                     "column": 11,
                     "fixable": false,
                     "line": 23,
-                    "message": "Legacy calls are not allowed; found constant TYPO3_MOD_PATH. Removed in 7.4. It is required to route modules through typo3/mod.php from now on in case the module relies on the definition of those constants. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.4/Breaking-67987-RemovedEntryScriptHandling.html",
+                    "message": "Calls to removed code are not allowed; found constant TYPO3_MOD_PATH. Removed in 7.4. It is required to route modules through typo3/mod.php from now on in case the module relies on the definition of those constants. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.4/Breaking-67987-RemovedEntryScriptHandling.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.GenericConstantUsage.TYPO3_MOD_PATH",
                     "type": "WARNING"
@@ -25,7 +25,7 @@
                     "column": 75,
                     "fixable": false,
                     "line": 24,
-                    "message": "Legacy calls are not allowed; found constant \\TYPO3\\CMS\\IndexedSearch\\Controller\\SearchFormController::WILDCARD_LEFT. Removed in 7.6. Use \\TYPO3\\CMS\\IndexedSearch\\Utility\\LikeWildcard::LEFT instead. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.6/Breaking-69227-StringsForLikeAreNotProperlyEscaped.html",
+                    "message": "Calls to removed code are not allowed; found constant \\TYPO3\\CMS\\IndexedSearch\\Controller\\SearchFormController::WILDCARD_LEFT. Removed in 7.6. Use \\TYPO3\\CMS\\IndexedSearch\\Utility\\LikeWildcard::LEFT instead. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.6/Breaking-69227-StringsForLikeAreNotProperlyEscaped.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.GenericConstantUsage.SearchFormController.WILDCARD_LEFT",
                     "type": "WARNING"
@@ -34,7 +34,7 @@
                     "column": 39,
                     "fixable": false,
                     "line": 27,
-                    "message": "Legacy calls are not allowed; found constant \\TYPO3\\CMS\\IndexedSearch\\Controller\\SearchFormController::WILDCARD_LEFT. Removed in 7.6. Use \\TYPO3\\CMS\\IndexedSearch\\Utility\\LikeWildcard::LEFT instead. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.6/Breaking-69227-StringsForLikeAreNotProperlyEscaped.html",
+                    "message": "Calls to removed code are not allowed; found constant \\TYPO3\\CMS\\IndexedSearch\\Controller\\SearchFormController::WILDCARD_LEFT. Removed in 7.6. Use \\TYPO3\\CMS\\IndexedSearch\\Utility\\LikeWildcard::LEFT instead. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.6/Breaking-69227-StringsForLikeAreNotProperlyEscaped.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.GenericConstantUsage.SearchFormController.WILDCARD_LEFT",
                     "type": "WARNING"
@@ -43,7 +43,7 @@
                     "column": 66,
                     "fixable": false,
                     "line": 29,
-                    "message": "Legacy calls are not allowed; found constant \\TYPO3\\CMS\\IndexedSearch\\Controller\\SearchFormController::WILDCARD_LEFT. Removed in 7.6. Use \\TYPO3\\CMS\\IndexedSearch\\Utility\\LikeWildcard::LEFT instead. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.6/Breaking-69227-StringsForLikeAreNotProperlyEscaped.html",
+                    "message": "Calls to removed code are not allowed; found constant \\TYPO3\\CMS\\IndexedSearch\\Controller\\SearchFormController::WILDCARD_LEFT. Removed in 7.6. Use \\TYPO3\\CMS\\IndexedSearch\\Utility\\LikeWildcard::LEFT instead. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.6/Breaking-69227-StringsForLikeAreNotProperlyEscaped.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.GenericConstantUsage.SearchFormController.WILDCARD_LEFT",
                     "type": "WARNING"
diff --git a/tests/Fixtures/Standards/Typo3Update/Sniffs/Removed/GenericFunctionCallSniff/Expected.json b/tests/Fixtures/Standards/Typo3Update/Sniffs/Removed/GenericFunctionCallSniff/Expected.json
index f2e61ab6a3732748d054db69de581d832d5095d3..a818be15fbea52d8a3f92eaf9f1a9717bd0258e6 100644
--- a/tests/Fixtures/Standards/Typo3Update/Sniffs/Removed/GenericFunctionCallSniff/Expected.json
+++ b/tests/Fixtures/Standards/Typo3Update/Sniffs/Removed/GenericFunctionCallSniff/Expected.json
@@ -7,7 +7,7 @@
                     "column": 41,
                     "fixable": false,
                     "line": 24,
-                    "message": "Legacy calls are not allowed; found \\TYPO3\\CMS\\Core\\Utility\\GeneralUtility::loadTCA. Removed in 7.0. There is no replacement, just remove call. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-61785-LoadTcaFunctionRemoved.html",
+                    "message": "Calls to removed code are not allowed; found \\TYPO3\\CMS\\Core\\Utility\\GeneralUtility::loadTCA. Removed in 7.0. There is no replacement, just remove call. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-61785-LoadTcaFunctionRemoved.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.GenericFunctionCall.GeneralUtility.loadTCA",
                     "type": "WARNING"
@@ -16,7 +16,7 @@
                     "column": 17,
                     "fixable": false,
                     "line": 26,
-                    "message": "Legacy calls are not allowed; found \\TYPO3\\CMS\\Core\\Utility\\GeneralUtility::loadTCA. Removed in 7.0. There is no replacement, just remove call. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-61785-LoadTcaFunctionRemoved.html",
+                    "message": "Calls to removed code are not allowed; found \\TYPO3\\CMS\\Core\\Utility\\GeneralUtility::loadTCA. Removed in 7.0. There is no replacement, just remove call. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-61785-LoadTcaFunctionRemoved.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.GenericFunctionCall.GeneralUtility.loadTCA",
                     "type": "WARNING"
@@ -25,7 +25,7 @@
                     "column": 44,
                     "fixable": false,
                     "line": 28,
-                    "message": "Legacy calls are not allowed; found \\TYPO3\\CMS\\Core\\Utility\\GeneralUtility::loadTCA. Removed in 7.0. There is no replacement, just remove call. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-61785-LoadTcaFunctionRemoved.html",
+                    "message": "Calls to removed code are not allowed; found \\TYPO3\\CMS\\Core\\Utility\\GeneralUtility::loadTCA. Removed in 7.0. There is no replacement, just remove call. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-61785-LoadTcaFunctionRemoved.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.GenericFunctionCall.GeneralUtility.loadTCA",
                     "type": "WARNING"
@@ -34,7 +34,7 @@
                     "column": 8,
                     "fixable": false,
                     "line": 31,
-                    "message": "Legacy calls are not allowed; found \\TYPO3\\CMS\\Frontend\\Controller\\TypoScriptFrontendController->includeTCA. Removed in 7.0. Full TCA is always loaded during bootstrap in FE, the method is obsolete. If an eid script calls this method to load TCA, use \\TYPO3\\CMS\\Frontend\\Utility\\EidUtility::initTCA() instead. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-61785-FrontendTcaFunctionsRemoved.html",
+                    "message": "Calls to removed code are not allowed; found \\TYPO3\\CMS\\Frontend\\Controller\\TypoScriptFrontendController->includeTCA. Removed in 7.0. Full TCA is always loaded during bootstrap in FE, the method is obsolete. If an eid script calls this method to load TCA, use \\TYPO3\\CMS\\Frontend\\Utility\\EidUtility::initTCA() instead. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-61785-FrontendTcaFunctionsRemoved.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.GenericFunctionCall.TypoScriptFrontendController.includeTCA",
                     "type": "WARNING"
@@ -43,7 +43,7 @@
                     "column": 17,
                     "fixable": false,
                     "line": 35,
-                    "message": "Legacy calls are not allowed; found \\TYPO3\\CMS\\Frontend\\Controller\\TypoScriptFrontendController->includeTCA. Removed in 7.0. Full TCA is always loaded during bootstrap in FE, the method is obsolete. If an eid script calls this method to load TCA, use \\TYPO3\\CMS\\Frontend\\Utility\\EidUtility::initTCA() instead. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-61785-FrontendTcaFunctionsRemoved.html",
+                    "message": "Calls to removed code are not allowed; found \\TYPO3\\CMS\\Frontend\\Controller\\TypoScriptFrontendController->includeTCA. Removed in 7.0. Full TCA is always loaded during bootstrap in FE, the method is obsolete. If an eid script calls this method to load TCA, use \\TYPO3\\CMS\\Frontend\\Utility\\EidUtility::initTCA() instead. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-61785-FrontendTcaFunctionsRemoved.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.GenericFunctionCall.TypoScriptFrontendController.includeTCA",
                     "type": "WARNING"
diff --git a/tests/Fixtures/Standards/Typo3Update/Sniffs/Removed/TypoScriptSniff/Expected.json b/tests/Fixtures/Standards/Typo3Update/Sniffs/Removed/TypoScriptSniff/Expected.json
index ff6e6bd7dd5fbb01a2c4365d7e5af4a9224dfb50..e66a9628b7d785332a379d214dca3ebed026f719 100644
--- a/tests/Fixtures/Standards/Typo3Update/Sniffs/Removed/TypoScriptSniff/Expected.json
+++ b/tests/Fixtures/Standards/Typo3Update/Sniffs/Removed/TypoScriptSniff/Expected.json
@@ -7,7 +7,7 @@
                     "column": 10,
                     "fixable": false,
                     "line": 2,
-                    "message": "Legacy calls are not allowed; found styles.insertContent. Removed in 7.0. Either remove usage of styles.insertContent or add a snippet at an early point in TypoScript for backwards compatibility. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-42543-DefaultTypoScriptRemoved.html",
+                    "message": "Calls to removed code are not allowed; found styles.insertContent. Removed in 7.0. Either remove usage of styles.insertContent or add a snippet at an early point in TypoScript for backwards compatibility. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-42543-DefaultTypoScriptRemoved.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.TypoScript.styles-insertContent",
                     "type": "WARNING"
@@ -16,7 +16,7 @@
                     "column": 11,
                     "fixable": false,
                     "line": 3,
-                    "message": "Legacy calls are not allowed; found styles.insertContent. Removed in 7.0. Either remove usage of styles.insertContent or add a snippet at an early point in TypoScript for backwards compatibility. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-42543-DefaultTypoScriptRemoved.html",
+                    "message": "Calls to removed code are not allowed; found styles.insertContent. Removed in 7.0. Either remove usage of styles.insertContent or add a snippet at an early point in TypoScript for backwards compatibility. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-42543-DefaultTypoScriptRemoved.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.TypoScript.styles-insertContent",
                     "type": "WARNING"
@@ -25,7 +25,7 @@
                     "column": 1,
                     "fixable": false,
                     "line": 6,
-                    "message": "Legacy calls are not allowed; found styles.insertContent. Removed in 7.0. Either remove usage of styles.insertContent or add a snippet at an early point in TypoScript for backwards compatibility. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-42543-DefaultTypoScriptRemoved.html",
+                    "message": "Calls to removed code are not allowed; found styles.insertContent. Removed in 7.0. Either remove usage of styles.insertContent or add a snippet at an early point in TypoScript for backwards compatibility. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-42543-DefaultTypoScriptRemoved.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.TypoScript.styles-insertContent",
                     "type": "WARNING"
@@ -34,7 +34,7 @@
                     "column": 1,
                     "fixable": false,
                     "line": 13,
-                    "message": "Legacy calls are not allowed; found mod.web_list.alternateBgColors. Removed in 7.0. Removed without substitution. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-53658-RemoveAlternateBgColorsOption.html",
+                    "message": "Calls to removed code are not allowed; found mod.web_list.alternateBgColors. Removed in 7.0. Removed without substitution. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.0/Breaking-53658-RemoveAlternateBgColorsOption.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.TypoScript.mod-web_list-alternateBgColors",
                     "type": "WARNING"
@@ -43,7 +43,7 @@
                     "column": 10,
                     "fixable": false,
                     "line": 26,
-                    "message": "Legacy calls are not allowed; found CLEARGIF. Removed in 7.1. Any installation should migrate to alternatives such as FLUIDTEMPLATE to customize the output of the content. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.1/Breaking-64639-RemovedContentObjects.html",
+                    "message": "Calls to removed code are not allowed; found CLEARGIF. Removed in 7.1. Any installation should migrate to alternatives such as FLUIDTEMPLATE to customize the output of the content. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.1/Breaking-64639-RemovedContentObjects.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.TypoScript.CLEARGIF",
                     "type": "WARNING"
@@ -52,7 +52,7 @@
                     "column": 10,
                     "fixable": false,
                     "line": 27,
-                    "message": "Legacy calls are not allowed; found COLUMNS. Removed in 7.1. Any installation should migrate to alternatives such as FLUIDTEMPLATE to customize the output of the content. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.1/Breaking-64639-RemovedContentObjects.html",
+                    "message": "Calls to removed code are not allowed; found COLUMNS. Removed in 7.1. Any installation should migrate to alternatives such as FLUIDTEMPLATE to customize the output of the content. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.1/Breaking-64639-RemovedContentObjects.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.TypoScript.COLUMNS",
                     "type": "WARNING"
@@ -61,7 +61,7 @@
                     "column": 10,
                     "fixable": false,
                     "line": 28,
-                    "message": "Legacy calls are not allowed; found CTABLE. Removed in 7.1. Any installation should migrate to alternatives such as FLUIDTEMPLATE to customize the output of the content. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.1/Breaking-64639-RemovedContentObjects.html",
+                    "message": "Calls to removed code are not allowed; found CTABLE. Removed in 7.1. Any installation should migrate to alternatives such as FLUIDTEMPLATE to customize the output of the content. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.1/Breaking-64639-RemovedContentObjects.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.TypoScript.CTABLE",
                     "type": "WARNING"
@@ -70,7 +70,7 @@
                     "column": 10,
                     "fixable": false,
                     "line": 29,
-                    "message": "Legacy calls are not allowed; found OTABLE. Removed in 7.1. Any installation should migrate to alternatives such as FLUIDTEMPLATE to customize the output of the content. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.1/Breaking-64639-RemovedContentObjects.html",
+                    "message": "Calls to removed code are not allowed; found OTABLE. Removed in 7.1. Any installation should migrate to alternatives such as FLUIDTEMPLATE to customize the output of the content. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.1/Breaking-64639-RemovedContentObjects.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.TypoScript.OTABLE",
                     "type": "WARNING"
@@ -79,7 +79,7 @@
                     "column": 10,
                     "fixable": false,
                     "line": 30,
-                    "message": "Legacy calls are not allowed; found HRULER. Removed in 7.1. Any installation should migrate to alternatives such as FLUIDTEMPLATE to customize the output of the content. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.1/Breaking-64639-RemovedContentObjects.html",
+                    "message": "Calls to removed code are not allowed; found HRULER. Removed in 7.1. Any installation should migrate to alternatives such as FLUIDTEMPLATE to customize the output of the content. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.1/Breaking-64639-RemovedContentObjects.html",
                     "severity": 5,
                     "source": "Typo3Update.Removed.TypoScript.HRULER",
                     "type": "WARNING"