diff --git a/typo3/sysext/backend/Classes/Controller/ContentElement/MoveElementController.php b/typo3/sysext/backend/Classes/Controller/ContentElement/MoveElementController.php
index d5999edbebe13831359dc576274ede1c26557cc1..b9d69cb562c1472276a6557ec6b87a24c00ff851 100644
--- a/typo3/sysext/backend/Classes/Controller/ContentElement/MoveElementController.php
+++ b/typo3/sysext/backend/Classes/Controller/ContentElement/MoveElementController.php
@@ -16,15 +16,17 @@ namespace TYPO3\CMS\Backend\Controller\ContentElement;
 
 use Psr\Http\Message\ServerRequestInterface;
 use Psr\Http\Message\ResponseInterface;
+use TYPO3\CMS\Backend\Module\AbstractModule;
+use TYPO3\CMS\Backend\Tree\View\ContentMovingPagePositionMap;
+use TYPO3\CMS\Backend\Tree\View\PageMovingPagePositionMap;
 use TYPO3\CMS\Backend\Utility\BackendUtility;
 use TYPO3\CMS\Core\Imaging\Icon;
-use TYPO3\CMS\Core\Imaging\IconFactory;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 
 /**
  * Script Class for rendering the move-element wizard display
  */
-class MoveElementController
+class MoveElementController extends AbstractModule
 {
     /**
      * @var int
@@ -61,13 +63,6 @@ class MoveElementController
      */
     public $makeCopy;
 
-    /**
-     * Document template object
-     *
-     * @var \TYPO3\CMS\Backend\Template\DocumentTemplate
-     */
-    public $doc;
-
     /**
      * Pages-select clause
      *
@@ -82,16 +77,12 @@ class MoveElementController
      */
     public $content;
 
-    /**
-     * @var IconFactory
-     */
-    protected $iconFactory;
-
     /**
      * Constructor
      */
     public function __construct()
     {
+        parent::__construct();
         $this->getLanguageService()->includeLLFile('EXT:lang/locallang_misc.xlf');
         $GLOBALS['SOBE'] = $this;
         $this->init();
@@ -114,14 +105,7 @@ class MoveElementController
         $this->makeCopy = GeneralUtility::_GP('makeCopy');
         // Select-pages where clause for read-access:
         $this->perms_clause = $this->getBackendUser()->getPagePermsClause(1);
-        // Starting the document template object:
-        $this->doc = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Template\DocumentTemplate::class);
-        $this->doc->setModuleTemplate('EXT:backend/Resources/Private/Templates/move_el.html');
-        $this->doc->JScode = '';
-        // Starting document content (header):
-        $this->content = '';
-        $this->content .= $this->doc->header($this->getLanguageService()->getLL('movingElement'));
-        $this->iconFactory = GeneralUtility::makeInstance(IconFactory::class);
+        $this->content = '<h1>' . $this->getLanguageService()->getLL('movingElement') . '</h1>';
     }
 
     /**
@@ -136,7 +120,8 @@ class MoveElementController
     {
         $this->main();
 
-        $response->getBody()->write($this->content);
+        $this->moduleTemplate->setContent($this->content);
+        $response->getBody()->write($this->moduleTemplate->renderContent());
         return $response;
     }
 
@@ -153,16 +138,13 @@ class MoveElementController
             // Get record for element:
             $elRow = BackendUtility::getRecordWSOL($this->table, $this->moveUid);
             // Headerline: Icon, record title:
-            $headerLine = '<span title="' . BackendUtility::getRecordIconAltText($elRow, $this->table) . '">' . $this->iconFactory->getIconForRecord($this->table, $elRow, Icon::SIZE_SMALL)->render() . '</span>';
+            $headerLine = '<span title="' . BackendUtility::getRecordIconAltText($elRow, $this->table) . '">' . $this->moduleTemplate->getIconFactory()->getIconForRecord($this->table, $elRow, Icon::SIZE_SMALL)->render() . '</span>';
             $headerLine .= BackendUtility::getRecordTitle($this->table, $elRow, true);
             // Make-copy checkbox (clicking this will reload the page with the GET var makeCopy set differently):
-            $headerLine .= $this->doc->spacer(5);
             $onClick = 'window.location.href=' . GeneralUtility::quoteJSvalue(GeneralUtility::linkThisScript(array('makeCopy' => !$this->makeCopy))) . ';';
-            $headerLine .= $this->doc->spacer(5);
             $headerLine .= '<input type="hidden" name="makeCopy" value="0" />' . '<input type="checkbox" name="makeCopy" id="makeCopy" value="1"' . ($this->makeCopy ? ' checked="checked"' : '') . ' onclick="' . htmlspecialchars($onClick) . '" /> <label for="makeCopy" class="t3-label-valign-top">' . $lang->getLL('makeCopy', 1) . '</label>';
             // Add the header-content to the module content:
-            $this->content .= $this->doc->section('', $headerLine, false, true);
-            $this->content .= $this->doc->spacer(20);
+            $this->content .= $this->moduleTemplate->section('', $headerLine, false, true);
             // Reset variable to pick up the module content in:
             $code = '';
             // IF the table is "pages":
@@ -171,16 +153,16 @@ class MoveElementController
                 $pageInfo = BackendUtility::readPageAccess($this->page_id, $this->perms_clause);
                 if (is_array($pageInfo) && $backendUser->isInWebMount($pageInfo['pid'], $this->perms_clause)) {
                     // Initialize the position map:
-                    $posMap = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Tree\View\PageMovingPagePositionMap::class);
+                    $posMap = GeneralUtility::makeInstance(PageMovingPagePositionMap::class);
                     $posMap->moveOrCopy = $this->makeCopy ? 'copy' : 'move';
                     // Print a "go-up" link IF there is a real parent page (and if the user has read-access to that page).
                     if ($pageInfo['pid']) {
                         $pidPageInfo = BackendUtility::readPageAccess($pageInfo['pid'], $this->perms_clause);
                         if (is_array($pidPageInfo)) {
                             if ($backendUser->isInWebMount($pidPageInfo['pid'], $this->perms_clause)) {
-                                $code .= '<a href="' . htmlspecialchars(GeneralUtility::linkThisScript(array('uid' => (int)$pageInfo['pid'], 'moveUid' => $this->moveUid))) . '">' . $this->iconFactory->getIcon('actions-view-go-up', Icon::SIZE_SMALL)->render() . BackendUtility::getRecordTitle('pages', $pidPageInfo, true) . '</a><br />';
+                                $code .= '<a href="' . htmlspecialchars(GeneralUtility::linkThisScript(array('uid' => (int)$pageInfo['pid'], 'moveUid' => $this->moveUid))) . '">' . $this->moduleTemplate->getIconFactory()->getIcon('actions-view-go-up', Icon::SIZE_SMALL)->render() . BackendUtility::getRecordTitle('pages', $pidPageInfo, true) . '</a><br />';
                             } else {
-                                $code .= $this->iconFactory->getIconForRecord('pages', $pidPageInfo, Icon::SIZE_SMALL)->render() . BackendUtility::getRecordTitle('pages', $pidPageInfo, true) . '<br />';
+                                $code .= $this->moduleTemplate->getIconFactory()->getIconForRecord('pages', $pidPageInfo, Icon::SIZE_SMALL)->render() . BackendUtility::getRecordTitle('pages', $pidPageInfo, true) . '<br />';
                             }
                         }
                     }
@@ -200,11 +182,16 @@ class MoveElementController
                 $pageInfo = BackendUtility::readPageAccess($this->page_id, $this->perms_clause);
                 if (is_array($pageInfo) && $backendUser->isInWebMount($pageInfo['pid'], $this->perms_clause)) {
                     // Initialize the position map:
-                    $posMap = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Tree\View\ContentMovingPagePositionMap::class);
+                    $posMap = GeneralUtility::makeInstance(ContentMovingPagePositionMap::class);
                     $posMap->moveOrCopy = $this->makeCopy ? 'copy' : 'move';
                     $posMap->cur_sys_language = $this->sys_language;
                     // Headerline for the parent page: Icon, record title:
-                    $headerLine = '<span title="' . BackendUtility::getRecordIconAltText($pageInfo, 'pages') . '">' . $this->iconFactory->getIconForRecord('pages', $pageInfo, Icon::SIZE_SMALL)->render() . '</span>';
+                    $headerLine = '<span title="' . BackendUtility::getRecordIconAltText($pageInfo, 'pages') . '">'
+                        . $this->moduleTemplate->getIconFactory()->getIconForRecord(
+                            'pages',
+                            $pageInfo,
+                            Icon::SIZE_SMALL
+                        )->render() . '</span>';
                     $headerLine .= BackendUtility::getRecordTitle('pages', $pageInfo, true);
                     // Load SHARED page-TSconfig settings and retrieve column list from there, if applicable:
                     // SHARED page-TSconfig settings.
@@ -228,9 +215,9 @@ class MoveElementController
                                 $code .= '<a href="' . htmlspecialchars(GeneralUtility::linkThisScript(array(
                                     'uid' => (int)$pageInfo['pid'],
                                     'moveUid' => $this->moveUid
-                                ))) . '">' . $this->iconFactory->getIcon('actions-view-go-up', Icon::SIZE_SMALL)->render() . BackendUtility::getRecordTitle('pages', $pidPageInfo, true) . '</a><br />';
+                                ))) . '">' . $this->moduleTemplate->getIconFactory()->getIcon('actions-view-go-up', Icon::SIZE_SMALL)->render() . BackendUtility::getRecordTitle('pages', $pidPageInfo, true) . '</a><br />';
                             } else {
-                                $code .= $this->iconFactory->getIconForRecord('pages', $pidPageInfo, Icon::SIZE_SMALL)->render() . BackendUtility::getRecordTitle('pages', $pidPageInfo, true) . '<br />';
+                                $code .= $this->moduleTemplate->getIconFactory()->getIconForRecord('pages', $pidPageInfo, Icon::SIZE_SMALL)->render() . BackendUtility::getRecordTitle('pages', $pidPageInfo, true) . '<br />';
                             }
                         }
                     }
@@ -239,17 +226,17 @@ class MoveElementController
                 }
             }
             // Add the $code content as a new section to the module:
-            $this->content .= $this->doc->section($lang->getLL('selectPositionOfElement'), $code, false, true);
+            $this->content .= $this->moduleTemplate->section(
+                $lang->getLL('selectPositionOfElement'),
+                $code,
+                false,
+                true
+            );
         }
         // Setting up the buttons and markers for docheader
-        $docHeaderButtons = $this->getButtons();
-        $markers['CSH'] = $docHeaderButtons['csh'];
-        $markers['CONTENT'] = $this->content;
+        $this->getButtons();
         // Build the <body> for the module
-        $this->content = $this->doc->startPage($lang->getLL('movingElement'));
-        $this->content .= $this->doc->moduleBody($pageInfo, $docHeaderButtons, $markers);
-        $this->content .= $this->doc->endPage();
-        $this->content = $this->doc->insertStylesAndJS($this->content);
+        $this->moduleTemplate->setTitle($lang->getLL('movingElement'));
     }
 
     /**
@@ -266,26 +253,34 @@ class MoveElementController
 
     /**
      * Create the panel of buttons for submitting the form or otherwise perform operations.
-     *
-     * @return array All available buttons as an assoc. array
      */
     protected function getButtons()
     {
-        $buttons = array(
-            'csh' => '',
-            'back' => ''
-        );
+        $buttonBar = $this->moduleTemplate->getDocHeaderComponent()->getButtonBar();
         if ($this->page_id) {
             if ((string)$this->table == 'pages') {
-                $buttons['csh'] = BackendUtility::cshItem('xMOD_csh_corebe', 'move_el_pages');
+                $cshButton = $buttonBar->makeHelpButton()
+                    ->setModuleName('xMOD_csh_corebe')
+                    ->setFieldName('move_el_pages');
+                $buttonBar->addButton($cshButton);
             } elseif ((string)$this->table == 'tt_content') {
-                $buttons['csh'] = BackendUtility::cshItem('xMOD_csh_corebe', 'move_el_cs');
+                $cshButton = $buttonBar->makeHelpButton()
+                    ->setModuleName('xMOD_csh_corebe')
+                    ->setFieldName('move_el_cs');
+                $buttonBar->addButton($cshButton);
             }
+
             if ($this->R_URI) {
-                $buttons['back'] = '<a href="' . htmlspecialchars($this->R_URI) . '" class="typo3-goBack" title="' . $this->getLanguageService()->getLL('goBack', true) . '">' . $this->iconFactory->getIcon('actions-view-go-back', Icon::SIZE_SMALL)->render() . '</a>';
+                $backButton = $buttonBar->makeLinkButton()
+                    ->setHref($this->R_URI)
+                    ->setTitle($this->getLanguageService()->getLL('goBack', true))
+                    ->setIcon($this->moduleTemplate->getIconFactory()->getIcon(
+                        'actions-view-go-back',
+                        Icon::SIZE_SMALL
+                    ));
+                $buttonBar->addButton($backButton);
             }
         }
-        return $buttons;
     }
 
     /**
diff --git a/typo3/sysext/backend/Resources/Private/Templates/move_el.html b/typo3/sysext/backend/Resources/Private/Templates/move_el.html
deleted file mode 100644
index d0f8f1a14c685d59ef13c673e8b56252eab9c15a..0000000000000000000000000000000000000000
--- a/typo3/sysext/backend/Resources/Private/Templates/move_el.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!-- ###FULLDOC### begin -->
-<div class="typo3-fullDoc">
-	<div id="typo3-docheader">
-		<div class="typo3-docheader-functions">
-			<div class="left">###CSH###</div>
-			<div class="right"></div>
-		</div>
-		<div class="typo3-docheader-buttons">
-			<div class="left">###BUTTONLIST_LEFT###</div>
-			<div class="right">###BUTTONLIST_RIGHT###</div>
-		</div>
-	</div>
-
-	<div id="typo3-docbody">
-		<div id="typo3-inner-docbody">
-			###CONTENT###
-		</div>
-	</div>
-</div>
-<!-- ###FULLDOC### end -->
-
-<!-- ###BUTTON_GROUP_WRAP### -->
-<div class="buttongroup">###BUTTONS###</div>
-<!-- ###BUTTON_GROUP_WRAP### -->
-
-<!-- ###BUTTON_GROUPS_LEFT### -->
-<!-- ###BUTTON_GROUP1### -->###BACK###<!-- ###BUTTON_GROUP1### -->
-<!-- ###BUTTON_GROUPS_LEFT### -->
-
-<!-- ###BUTTON_GROUPS_RIGHT### -->
-<!-- ###BUTTON_GROUPS_RIGHT### -->