diff --git a/Classes/Updates/UpdateAuthors.php b/Classes/Updates/UpdateAuthors.php
index 650a4134c43800c21d6c0690eaf6781d37a252ec..1da61745961948e0d740db28c9241edc408c6d89 100644
--- a/Classes/Updates/UpdateAuthors.php
+++ b/Classes/Updates/UpdateAuthors.php
@@ -31,57 +31,58 @@ use TYPO3\CMS\Backend\Utility\BackendUtility;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Install\Updates\AbstractUpdate;
+use TYPO3\CMS\Install\Updates\DatabaseUpdatedPrerequisite;
+use TYPO3\CMS\Install\Updates\UpgradeWizardInterface;
 
 /**
  * Migrate template db entries to the correct root pages
  */
-class UpdateAuthors extends AbstractUpdate {
-
+class UpdateAuthors implements UpgradeWizardInterface {
 	/**
-	 * @var string
+	 * Retrieves the next site root in the page hierarchy from the current page
+	 *
+	 * @param int $currentPid
+	 * @return int
 	 */
-	protected $identifier = 'tx_sgnews_update_authors';
+	protected function getSiteRoot($currentPid): int {
+		$rootLine = BackendUtility::BEgetRootLine((int) $currentPid);
+		$siteRoot = ['uid' => 0];
+
+		foreach ($rootLine as $page) {
+			if ((int) $page['is_siteroot'] === 1) {
+				$siteRoot = $page;
+				break;
+			}
+		}
+
+		return $siteRoot['uid'];
+	}
 
 	/**
-	 * @var string
+	 * @return string
 	 */
-	protected $title = 'Migrate all news authors to the new author table for each site root.';
+	public function getIdentifier(): string {
+		return 'tx_sgnews_update_authors';
+	}
 
 	/**
-	 * Checks whether updates are required.
-	 *
-	 * @param string &$description The description for the update
-	 * @return bool Whether an update is required (TRUE) or not (FALSE)
+	 * @return string
 	 */
-	public function checkForUpdate(&$description) {
-		$description = 'Create new author entries for the old author field of news pages';
-
-		$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
-		$queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
-		$rowCount = $queryBuilder->select('*')
-			->from('pages')
-			->where(
-				$queryBuilder->expr()->andX(
-					$queryBuilder->expr()->eq('doktype', News::DOK_TYPE_NEWS),
-					$queryBuilder->expr()->isNotNull('author')
-				)
-			)
-			->execute()->rowCount();
-
-		return $rowCount > 0;
+	public function getTitle(): string {
+		return 'Migrate all news authors to the new author table for each site root.';
 	}
 
 	/**
-	 * Performs the according updates.
-	 *
-	 * @param array &$dbQueries Queries done in this update
-	 * @param mixed &$customMessages Custom messages
-	 * @return bool Whether everything went smoothly or not
+	 * @return string
 	 */
-	public function performUpdate(array &$dbQueries, &$customMessages) {
-		$dbQueries = [];
+	public function getDescription(): string {
+		return 'Create new author entries for the old author field of news pages';
+	}
 
+	/**
+	 * @return bool
+	 */
+	public function executeUpdate(): bool {
 		$newsQueryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
 		$newsQueryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
 		$newsEntries = $newsQueryBuilder->select('*')
@@ -94,7 +95,6 @@ class UpdateAuthors extends AbstractUpdate {
 			)
 			->execute()->fetchAll();
 		if (count($newsEntries) <= 0) {
-			$this->markWizardAsDone();
 			return TRUE;
 		}
 		foreach ($newsEntries as $news) {
@@ -127,8 +127,6 @@ class UpdateAuthors extends AbstractUpdate {
 						'crdate' => time(),
 						'tstamp' => time(),
 					])->execute();
-				$dbQueries[] = $authorQueryBuilder->getSQL();
-
 				$authorUid = (int) $authorQueryBuilder->getConnection()->lastInsertId();
 			} else {
 				$authorUid = $author[0]['uid'];
@@ -139,30 +137,36 @@ class UpdateAuthors extends AbstractUpdate {
 				->set('author', '')
 				->where($newsQueryBuilder->expr()->eq('uid', $news['uid']))
 				->execute();
-			$dbQueries[] = $newsQueryBuilder->getSQL();
 		}
 
-		$this->markWizardAsDone();
 		return TRUE;
 	}
 
 	/**
-	 * Retrieves the next site root in the page hierarchy from the current page
-	 *
-	 * @param int $currentPid
-	 * @return int
+	 * @return bool
 	 */
-	protected function getSiteRoot($currentPid): int {
-		$rootLine = BackendUtility::BEgetRootLine((int) $currentPid);
-		$siteRoot = ['uid' => 0];
+	public function updateNecessary(): bool {
+		$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
+		$queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
+		$rowCount = $queryBuilder->select('*')
+			->from('pages')
+			->where(
+				$queryBuilder->expr()->andX(
+					$queryBuilder->expr()->eq('doktype', News::DOK_TYPE_NEWS),
+					$queryBuilder->expr()->isNotNull('author')
+				)
+			)
+			->execute()->rowCount();
 
-		foreach ($rootLine as $page) {
-			if ((int) $page['is_siteroot'] === 1) {
-				$siteRoot = $page;
-				break;
-			}
-		}
+		return $rowCount > 0;
+	}
 
-		return $siteRoot['uid'];
+	/**
+	 * @return array|string[]
+	 */
+	public function getPrerequisites(): array {
+		return [
+			DatabaseUpdatedPrerequisite::class
+		];
 	}
 }